From 733374e25b9eaecbd51660e1c6a30df9e67d5886 Mon Sep 17 00:00:00 2001 From: Rodney Lab Date: Wed, 3 Jan 2024 17:29:27 +0000 Subject: [PATCH] =?UTF-8?q?ci:=20=F0=9F=8E=AE=20initial=20commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cargo/config.toml | 2 +- .cz.json | 10 + .pre-commit-config.yaml | 24 + .rustfmt.toml | 2 + CODE_OF_CONDUCT.md | 129 +++++ Cargo.lock | 148 ++++- Cargo.toml | 21 +- LICENSE | 29 + README.md | 90 +-- assets/icon-256.png | Bin 48330 -> 2314 bytes dprint.json | 18 + images/rodneylab-github-cistercian-clock.png | Bin 0 -> 44995 bytes src/app.rs | 554 ++++++++++++++++++- src/lib.rs | 2 +- src/main.rs | 23 +- 15 files changed, 929 insertions(+), 123 deletions(-) create mode 100644 .cz.json create mode 100644 .pre-commit-config.yaml create mode 100644 .rustfmt.toml create mode 100644 CODE_OF_CONDUCT.md create mode 100644 LICENSE create mode 100644 dprint.json create mode 100644 images/rodneylab-github-cistercian-clock.png diff --git a/.cargo/config.toml b/.cargo/config.toml index bac83fe..be614b0 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,4 +3,4 @@ # check status at https://developer.mozilla.org/en-US/docs/Web/API/Clipboard#browser_compatibility # we don't use `[build]` because of rust analyzer's build cache invalidation https://github.com/emilk/eframe_template/issues/93 [target.wasm32-unknown-unknown] -rustflags = ["--cfg=web_sys_unstable_apis"] \ No newline at end of file +rustflags = ["--cfg=web_sys_unstable_apis"] diff --git a/.cz.json b/.cz.json new file mode 100644 index 0000000..deb922d --- /dev/null +++ b/.cz.json @@ -0,0 +1,10 @@ +{ + "commitizen": { + "name": "cz_conventional_commits", + "tag_format": "$version", + "version_scheme": "semver", + "version_provider": "cargo", + "update_changelog_on_bump": true, + "major_version_zero": true + } +} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..18a3239 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,24 @@ +repos: +- hooks: + - id: commitizen + stages: + - commit-msg + repo: https://github.com/commitizen-tools/commitizen + rev: v3.6.0 +- hooks: + - id: fmt + - id: cargo-check + - id: clippy + repo: https://github.com/doublify/pre-commit-rust + rev: v1.0 +- hooks: + - id: gitleaks + repo: https://github.com/gitleaks/gitleaks + rev: v8.17.0 +- hooks: + - id: end-of-file-fixer + - args: + - --markdown-linebreak-ext=md + id: trailing-whitespace + repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 diff --git a/.rustfmt.toml b/.rustfmt.toml new file mode 100644 index 0000000..a311b9d --- /dev/null +++ b/.rustfmt.toml @@ -0,0 +1,2 @@ +edition = "2021" +newline_style = "Unix" diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..668aa49 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,129 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behaviour that contributes to a positive environment for our +community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologising to those affected by our mistakes, + and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behaviour include: + +- The use of sexualised language or imagery, and sexual attention or advances of + any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, + without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behaviour and will take appropriate and fair corrective action in +response to any behaviour that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +ask@rodneylab.com. All complaints will be reviewed and investigated promptly and +fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behaviour deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behaviour was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behaviour. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behaviour. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behaviour, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/Cargo.lock b/Cargo.lock index 09d9b1f..8a901fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -145,6 +145,21 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "arboard" version = "3.2.0" @@ -499,6 +514,34 @@ dependencies = [ "libc", ] +[[package]] +name = "chrono" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.48.0", +] + +[[package]] +name = "cistercian_clock" +version = "0.1.0" +dependencies = [ + "chrono", + "eframe", + "egui", + "env_logger", + "image", + "log", + "serde", + "wasm-bindgen-futures", +] + [[package]] name = "clipboard-win" version = "4.5.0" @@ -750,18 +793,6 @@ dependencies = [ "winit", ] -[[package]] -name = "eframe_template" -version = "0.1.0" -dependencies = [ - "eframe", - "egui", - "env_logger", - "log", - "serde", - "wasm-bindgen-futures", -] - [[package]] name = "egui" version = "0.24.1" @@ -1177,6 +1208,29 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "iana-time-zone" +version = "0.1.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "idna" version = "0.3.0" @@ -1189,9 +1243,9 @@ dependencies = [ [[package]] name = "image" -version = "0.24.6" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" +checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" dependencies = [ "bytemuck", "byteorder", @@ -2480,6 +2534,15 @@ dependencies = [ "windows-targets 0.48.0", ] +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-implement" version = "0.48.0" @@ -2550,6 +2613,21 @@ dependencies = [ "windows_x86_64_msvc 0.48.0", ] +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -2562,6 +2640,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -2574,6 +2658,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -2586,6 +2676,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -2598,6 +2694,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -2610,6 +2712,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -2622,6 +2730,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -2634,6 +2748,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winit" version = "0.28.6" diff --git a/Cargo.toml b/Cargo.toml index e0df3d7..f695cc8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,19 +1,19 @@ [package] -name = "eframe_template" +name = "cistercian_clock" version = "0.1.0" -authors = ["Emil Ernerfeldt "] +authors = ["Rodney Johnson "] edition = "2021" rust-version = "1.72" - [dependencies] -egui = "0.24.1" -eframe = { version = "0.24.1", default-features = false, features = [ - "accesskit", # Make egui comptaible with screen readers. NOTE: adds a lot of dependencies. - "default_fonts", # Embed the default egui fonts. - "glow", # Use the glow rendering backend. Alternative: "wgpu". - "persistence", # Enable restoring app state when restarting the app. +chrono = "0.4.31" +eframe = { version = "0.24.1", default-features = false, features = ["accesskit", # Make egui comptaible with screen readers. NOTE: adds a lot of dependencies. + "default_fonts", # Embed the default egui fonts. + "glow", # Use the glow rendering backend. Alternative: "wgpu". + "persistence", # Enable restoring app state when restarting the app. ] } +egui = "0.24.1" +image = { version = "0.24.7", default-features = false } log = "0.4" # You only need serde if you want app persistence: @@ -27,7 +27,6 @@ env_logger = "0.10" [target.'cfg(target_arch = "wasm32")'.dependencies] wasm-bindgen-futures = "0.4" - [profile.release] opt-level = 2 # fast and small wasm @@ -35,9 +34,7 @@ opt-level = 2 # fast and small wasm [profile.dev.package."*"] opt-level = 2 - [patch.crates-io] - # If you want to use the bleeding edge version of egui and eframe: # egui = { git = "https://github.com/emilk/egui", branch = "master" } # eframe = { git = "https://github.com/emilk/egui", branch = "master" } diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..24e6529 --- /dev/null +++ b/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2024, Rodney Johnson +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md index 549b18b..397790f 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,30 @@ -# eframe template +Rodney Lab cistercian clock Github banner -[![dependency status](https://deps.rs/repo/github/emilk/eframe_template/status.svg)](https://deps.rs/repo/github/emilk/eframe_template) -[![Build Status](https://github.com/emilk/eframe_template/workflows/CI/badge.svg)](https://github.com/emilk/eframe_template/actions?workflow=CI) +

+ + Rodney Lab logo + +

+

+ Cistercian Clock +

-This is a template repo for [eframe](https://github.com/emilk/egui/tree/master/crates/eframe), a framework for writing apps using [egui](https://github.com/emilk/egui/). +# cistercian-clock -The goal is for this to be the simplest way to get started writing a GUI app in Rust. +Trying out egui Rust immediate mode tooling by building a Cistercian clock. This +code accompanies the blog post on +trying egui. If you have any questions, please drop a comment at the bottom +of that page. -You can compile your app natively or for the web, and share it using Github Pages. +## Usage -## Getting started +Clone the repo then run: -Start by clicking "Use this template" at https://github.com/emilk/eframe_template/ or follow [these instructions](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/creating-a-repository-from-a-template). +```shell +cargo run +``` -Change the name of the crate: Chose a good name for your project, and change the name to it in: -* `Cargo.toml` - * Change the `package.name` from `eframe_template` to `your_crate`. - * Change the `package.authors` -* `main.rs` - * Change `eframe_template::TemplateApp` to `your_crate::TemplateApp` -* `index.html` - * Change the `eframe template` to `your_crate`. optional. -* `assets/sw.js` - * Change the `'./eframe_template.js'` to `./your_crate.js` (in `filesToCache` array) - * Change the `'./eframe_template_bg.wasm'` to `./your_crate_bg.wasm` (in `filesToCache` array) +## Issues -### Learning about egui - -`src/app.rs` contains a simple example app. This is just to give some inspiration - most of it can be removed if you like. - -The official egui docs are at . If you prefer watching a video introduction, check out . For inspiration, check out the [the egui web demo](https://emilk.github.io/egui/index.html) and follow the links in it to its source code. - -### Testing locally - -Make sure you are using the latest version of stable rust by running `rustup update`. - -`cargo run --release` - -On Linux you need to first run: - -`sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev` - -On Fedora Rawhide you need to run: - -`dnf install clang clang-devel clang-tools-extra libxkbcommon-devel pkg-config openssl-devel libxcb-devel gtk3-devel atk fontconfig-devel` - -### Web Locally - -You can compile your app to [WASM](https://en.wikipedia.org/wiki/WebAssembly) and publish it as a web page. - -We use [Trunk](https://trunkrs.dev/) to build for web target. -1. Install the required target with `rustup target add wasm32-unknown-unknown`. -2. Install Trunk with `cargo install --locked trunk`. -3. Run `trunk serve` to build and serve on `http://127.0.0.1:8080`. Trunk will rebuild automatically if you edit the project. -4. Open `http://127.0.0.1:8080/index.html#dev` in a browser. See the warning below. - -> `assets/sw.js` script will try to cache our app, and loads the cached version when it cannot connect to server allowing your app to work offline (like PWA). -> appending `#dev` to `index.html` will skip this caching, allowing us to load the latest builds during development. - -### Web Deploy -1. Just run `trunk build --release`. -2. It will generate a `dist` directory as a "static html" website -3. Upload the `dist` directory to any of the numerous free hosting websites including [GitHub Pages](https://docs.github.com/en/free-pro-team@latest/github/working-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site). -4. we already provide a workflow that auto-deploys our app to GitHub pages if you enable it. -> To enable Github Pages, you need to go to Repository -> Settings -> Pages -> Source -> set to `gh-pages` branch and `/` (root). -> -> If `gh-pages` is not available in `Source`, just create and push a branch called `gh-pages` and it should be available. - -You can test the template app at . - -## Updating egui - -As of 2023, egui is in active development with frequent releases with breaking changes. [eframe_template](https://github.com/emilk/eframe_template/) will be updated in lock-step to always use the latest version of egui. - -When updating `egui` and `eframe` it is recommended you do so one version at the time, and read about the changes in [the egui changelog](https://github.com/emilk/egui/blob/master/CHANGELOG.md) and [eframe changelog](https://github.com/emilk/egui/blob/master/crates/eframe/CHANGELOG.md). +Feel free to jump into the +[Rodney Lab matrix chat room](https://matrix.to/#/%23rodney:matrix.org). diff --git a/assets/icon-256.png b/assets/icon-256.png index ae722873d6ec7c79cef59d05c3330412593eeaa3..c34f2306f183f53cb4b5276421c0e27b305ba5cc 100644 GIT binary patch literal 2314 zcmbVN2Uio=623`*AZP-J=j-QX&9=1G+jmBLE=$ zBLoP;_~b;nXTqm_t~%x(d~*LsA@bkGwfWBf;I;1Ija}^UURLf;fR~q-f}^vOhmDo% z69pG{`;;Y&6aY|H13eS1W1bOwpu8fEdqw`?9VzV{CG8V+!Y5khdGyKWF{fU{oPH5= z#y9q?Z>+3eoUDJGoPYeefOz?U`16E>3xouPz{HDziHa|ilwKuYdX@a=>ty9ODJpML zE(fKm2BoUKO}i4Dh7L~0gk)R|&A1jy)Obh4zRSeE&(sXdydIW?3(wYy$kvV^=|tw} zM&;a!ⅇ_yB(XSA4|RyM>dEf8^(VyO2{`($Tv+axSK>VPbs{gTJ#{b=wVv%qqJg+ z^y0_qC6*Z_RvD#M#8PWwnN4PyZC3e{ta7{Ta{KHG2U3M&&c|oDmCkvUF61g#a+O{`pl!)9a5- zZ$35$eQJLDsU^6wC8UZLT1|Ub{UxlXHN3VpqP8uvt}UvrJ-WU z$xU4;&E07&-_l#YWzc$vUwX1yzh}4glG=K6+WT_b`|>;b^E>+~T?2*PgGJqgr9DGs zJ;P<+hs(dyD|+dbeLt&yj8ylJ)C`Q)4vf_ej@1v2H4Ke64vl{vW;D?!T1J?(5$2as zR_iFMZEUiAZ1U^)R0m_alQG>jG2J~e^Nl&v!e%^UJFX zD{G6Z>+IF_rL_&t+6H%hlefOPys^2mv9+?fwYs&vwza*!y|b~sv$?agwX?guySuad zYvh|R&8vuk5x;RY}Z#sK)!OZlD7~C=dju{ab zKhcb(3e<|7wzW1iHBIjM5SMD^UG1jxS!bto$B1zSnuq>Z*UMT`)$+Q_PO zX(0cs_PK4SooGY|uqml`e!#=fz;7HUs`sUE7r@~X=FQH25R%S{nvOQlhXgy2{N1oB zKs@b2NZ$c0zSKI|8Dxp(h}S@Z(eZL{>1|olE8x++{9}ac{hFfycas$h>j{yZ0;@OT z-NAgj0Rn4pCkrR$>P!KXgZ!J*85EUf^j5ZjGO}XPm!wgAfZ@Jw3)>uKyBII|J>TJF zx``^oN&JZ+vm#G#mE%%$07x_*Qz`ObseJ(0&0ZEuOg2Fj5V=lfga);CAnc5CJ9tlC z3bg%hXTR4|1JMn5@wS5qLY4M$%RD@2so-8%BjUkGO8^pc{x}dF`YotF2_uHW9L#{2 zUpVCG?Pw(7NOc4?TLj2d^^*UB01JB%?f}~ME6p@Zfu66OKi)V2?-(DUUKJpz1l}ow zQ;LtF5l#SG>_Lw^2g0x9`DqGb3q9zACScK3zg9~So8w8i-R(G70ET8$*H0e;E^2v? z3ZX>$752e%0HKywe@l=$)9q+%0`Tf~C}9T>EcJKic3~(i3Tk&>Pmn6aK~L@pIJkD# zU}4x@!b+57tPmlt6D8#U$Q!N}KO#WV$@H{+I|ms=kM7H|psi-!{KDcLV5c|xR~D3z zmzb+_VG?G$t^~H0AZ3CaSak4;&P1p{Fj62RI)a zqy-(;JcdG!6`XN9zy8u*< z9N|78{42&Abqz{x|03`@0u;pt%?U|A)#Eo;USBNCVB?r3NLb%fMWEC#$B0&w%sJIu;= zaN(U;4OB=pf-vkyp+4Y;FDT(MWq5#WBj~RyfmB>EyUXz7fvSv*Bfi@F9Hk(j>kyJ* zbm*gC4y=mOoBKZ|q^i&mr~Ev_n_wv~-xDW`0>dy0w$K~YHK~e((qOOsnxMN;3Mgvf zxu=K(1i^IoMu{c{AWDH5=P**S{H=>*%Plz7y5SsM{y2ECSseI;39(i`OEP3+FRUn- z8ropdgpLt`xL|l99SsSCK4y!#eF)XR$$y02J29kiT$-yiF6(W821Z-?WK}IRxXVR; zhBF~tg^S!&Z^GQDZ#LuZ9FUzX$oeEa2Zp*d1P<|2pzEJWZn_mbTT%=tIAw?ipO%rI zt$4t=akNOtdtHn4PtBv_TH)+;X^{@e{p57yVxg$vg#+LPlE z1iXJTW;GHIY&}O9+JWPc$P%Z`pvxk@NYFX-~T0~%mc;xwBYqrJl!*|uV7M7 jkxD|s6v4knDNnVe&d~?`et^nf6F^r>A6InU^5y>lZC+be literal 48330 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 Fu@RQ6;f3;{PA3; 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 qwy%e7O2cM9H}A)Q?_kIV_VMmEDwBnzIE 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

En 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 literal 0 HcmV?d00001 diff --git a/src/app.rs b/src/app.rs index 18dd259..3f852e1 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,7 +1,92 @@ +use chrono::{Local, Timelike}; +use core::time::Duration; +use egui::{ + epaint::Shadow, + scroll_area::ScrollBarVisibility, + style::{HandleShape, Selection, Widgets}, + vec2, Color32, + FontFamily::Proportional, + FontId, Painter, Pos2, Rounding, ScrollArea, Sense, Stroke, + TextStyle::{self, Body, Button, Heading, Monospace, Name, Small}, + Ui, Vec2, Visuals, +}; + +fn dark_mode_override() -> Visuals { + Visuals { + dark_mode: true, + //override_text_color: None, + override_text_color: Some(Color32::from_gray(252)), + widgets: Widgets::default(), + selection: Selection::default(), + hyperlink_color: Color32::from_rgb(90, 170, 255), + faint_bg_color: Color32::from_additive_luminance(5), // visible, but barely so + extreme_bg_color: Color32::from_gray(10), // e.g. TextEdit background + code_bg_color: Color32::from_gray(64), + warn_fg_color: Color32::from_rgb(255, 143, 0), // orange + error_fg_color: Color32::from_rgb(255, 0, 0), // red + + window_rounding: Rounding::same(6.0), + window_shadow: Shadow::big_dark(), + //window_fill: Color32::from_gray(27), + window_fill: Color32::from_rgb(23, 18, 25), + window_stroke: Stroke::new(1.0, Color32::from_gray(60)), + + menu_rounding: Rounding::same(6.0), + + //panel_fill: Color32::from_gray(27), + panel_fill: Color32::from_rgb(23, 18, 25), + + popup_shadow: Shadow::small_dark(), + resize_corner_size: 12.0, + text_cursor: Stroke::new(2.0, Color32::from_rgb(192, 222, 255)), + text_cursor_preview: false, + clip_rect_margin: 3.0, // should be at least half the size of the widest frame stroke + max WidgetVisuals::expansion + button_frame: true, + collapsing_header_frame: false, + indent_has_left_vline: true, + + striped: false, + + slider_trailing_fill: false, + + handle_shape: HandleShape::Rect { aspect_ratio: 1.0 }, + + interact_cursor: None, + + image_loading_spinners: true, + } +} + +pub fn light_mode_override() -> Visuals { + Visuals { + dark_mode: false, + override_text_color: Some(Color32::from_rgb(4, 3, 15)), + widgets: Widgets::light(), + //selection: Selection::light(), + selection: Selection::default(), + hyperlink_color: Color32::from_rgb(0, 155, 255), + faint_bg_color: Color32::from_additive_luminance(5), // visible, but barely so + extreme_bg_color: Color32::from_gray(255), // e.g. TextEdit background + code_bg_color: Color32::from_gray(230), + warn_fg_color: Color32::from_rgb(255, 100, 0), // slightly orange red. it's difficult to find a warning color that pops on bright background. + error_fg_color: Color32::from_rgb(255, 0, 0), // red + + window_shadow: Shadow::big_light(), + window_fill: Color32::from_gray(255), + window_stroke: Stroke::new(1.0, Color32::from_gray(190)), + + panel_fill: Color32::from_gray(255), + + popup_shadow: Shadow::small_light(), + text_cursor: Stroke::new(2.0, Color32::from_rgb(0, 83, 125)), + ..Visuals::dark() + } +} + /// We derive Deserialize/Serialize so we can persist app state on shutdown. #[derive(serde::Deserialize, serde::Serialize)] #[serde(default)] // if we add new fields, give them default values when deserializing old state -pub struct TemplateApp { +pub struct CistercianClockApp { // Example stuff: label: String, @@ -9,7 +94,7 @@ pub struct TemplateApp { value: f32, } -impl Default for TemplateApp { +impl Default for CistercianClockApp { fn default() -> Self { Self { // Example stuff: @@ -19,7 +104,7 @@ impl Default for TemplateApp { } } -impl TemplateApp { +impl CistercianClockApp { /// Called once before the first frame. pub fn new(cc: &eframe::CreationContext<'_>) -> Self { // This is also where you can customize the look and feel of egui using @@ -35,7 +120,371 @@ impl TemplateApp { } } -impl eframe::App for TemplateApp { +struct Colours { + colour_0: Color32, + colour_1: Color32, + colour_2: Color32, + colour_3: Color32, + colour_4: Color32, + colour_6: Color32, +} + +fn paint_unit_number( + painter: &mut Painter, + centre: Pos2, + scale: f32, + colours: &Colours, + number: u32, +) { + let width = scale * (34.0 / 2.0 - 1.0); + let stroke_width = if scale < 2.0 { 2.0 } else { scale * 1.0 }; + let Colours { + colour_0, + colour_1, + colour_2, + colour_3, + colour_4, + colour_6, + } = colours; + let stroke = Stroke::new(stroke_width, *colour_0); + painter.line_segment( + [centre - vec2(0.0, width), centre + vec2(0.0, width)], + stroke, + ); + + if number == 1 || number == 5 || number == 7 || number == 9 { + let stroke = Stroke::new(stroke_width, *colour_1); + painter.line_segment( + [ + centre - vec2(0.0, width), + centre + vec2(scale * 10.0, -width), + ], + stroke, + ); + } + + if number == 2 || number == 8 || number == 9 { + let stroke = Stroke::new(stroke_width, *colour_2); + painter.line_segment( + [ + centre - vec2(0.0, width - scale * 10.0), + centre + vec2(scale * 10.0, -width + (scale * 10.0)), + ], + stroke, + ); + } + + if number == 3 { + let stroke = Stroke::new(stroke_width, *colour_3); + painter.line_segment( + [ + centre - vec2(0.0, width), + centre + vec2(scale * 10.0, -width + scale * 10.0), + ], + stroke, + ); + } + + if number == 4 || number == 5 { + let stroke = Stroke::new(stroke_width, *colour_4); + painter.line_segment( + [ + centre - vec2(0.0, width - scale * 10.0), + centre + vec2(scale * 10.0, -width), + ], + stroke, + ); + } + + if number > 5 { + let stroke = Stroke::new(stroke_width, *colour_6); + painter.line_segment( + [ + centre + vec2(scale * 10.0, -width), + centre + vec2(scale * 10.0, -width + scale * 10.0), + ], + stroke, + ); + } +} + +fn paint_tens_number( + painter: &mut Painter, + centre: Pos2, + scale: f32, + colours: &Colours, + number: u32, +) { + let width = scale * (34.0 / 2.0 - 1.0); + let stroke_width = if scale < 2.0 { 2.0 } else { scale * 1.0 }; + let Colours { + colour_1, + colour_2, + colour_3, + colour_4, + colour_6, + .. + } = colours; + + if number == 1 || number == 5 || number == 7 || number == 9 { + let stroke = Stroke::new(stroke_width, *colour_1); + painter.line_segment( + [ + centre - vec2(scale * 10.0, width), + centre + vec2(0.0, -width), + ], + stroke, + ); + } + if number == 2 || number == 8 || number == 9 { + let stroke = Stroke::new(stroke_width, *colour_2); + painter.line_segment( + [ + centre - vec2(scale * 10.0, width - scale * 10.0), + centre + vec2(0.0, -width + scale * 10.0), + ], + stroke, + ); + } + if number == 3 { + let stroke = Stroke::new(stroke_width, *colour_3); + painter.line_segment( + [ + centre - vec2(scale * 10.0, width - scale * 10.0), + centre + vec2(0.0, -width), + ], + stroke, + ); + } + if number == 4 || number == 5 { + let stroke = Stroke::new(stroke_width, *colour_4); + painter.line_segment( + [ + centre - vec2(scale * 10.0, width), + centre + vec2(0.0, -width + scale * 10.0), + ], + stroke, + ); + } + if number > 5 { + let stroke = Stroke::new(stroke_width, *colour_6); + painter.line_segment( + [ + centre + vec2(-scale * 10.0, -width), + centre + vec2(-scale * 10.0, -width + scale * 10.0), + ], + stroke, + ); + } +} + +fn paint_hundreds_number( + painter: &mut Painter, + centre: Pos2, + scale: f32, + colours: &Colours, + number: u32, +) { + let width = scale * (34.0 / 2.0 - 1.0); + let stroke_width = if scale < 2.0 { 2.0 } else { scale * 1.0 }; + let Colours { + colour_1, + colour_2, + colour_3, + colour_4, + colour_6, + .. + } = colours; + + if number == 1 || number == 5 || number == 7 || number == 9 { + let stroke = Stroke::new(stroke_width, *colour_1); + painter.line_segment( + [ + centre + vec2(0.0, width), + centre + vec2(scale * 10.0, width), + ], + stroke, + ); + } + if number == 2 || number == 8 || number == 9 { + let stroke = Stroke::new(stroke_width, *colour_2); + painter.line_segment( + [ + centre + vec2(0.0, width - scale * 10.0), + centre + vec2(scale * 10.0, width - scale * 10.0), + ], + stroke, + ); + } + if number == 3 { + let stroke = Stroke::new(stroke_width, *colour_3); + painter.line_segment( + [ + centre + vec2(0.0, width), + centre + vec2(scale * 10.0, width - scale * 10.0), + ], + stroke, + ); + } + if number == 4 || number == 5 { + let stroke = Stroke::new(stroke_width, *colour_4); + painter.line_segment( + [ + centre + vec2(0.0, width - scale * 10.0), + centre + vec2(scale * 10.0, width), + ], + stroke, + ); + } + if number > 5 { + let stroke = Stroke::new(stroke_width, *colour_6); + painter.line_segment( + [ + centre + vec2(scale * 10.0, width - scale * 10.0), + centre + vec2(scale * 10.0, width), + ], + stroke, + ); + } +} + +fn paint_thousands_number( + painter: &mut Painter, + centre: Pos2, + scale: f32, + colours: &Colours, + number: u32, +) { + let width = scale * (34.0 / 2.0 - 1.0); + let stroke_width = if scale < 2.0 { 2.0 } else { scale * 1.0 }; + let Colours { + colour_1, + colour_2, + colour_3, + colour_4, + colour_6, + .. + } = colours; + + if number == 1 || number == 5 || number == 7 || number == 9 { + let stroke = Stroke::new(stroke_width, *colour_1); + painter.line_segment( + [ + centre + vec2(-scale * 10.0, width), + centre + vec2(0.0, width), + ], + stroke, + ); + } + if number == 2 || number == 8 || number == 9 { + let stroke = Stroke::new(stroke_width, *colour_2); + painter.line_segment( + [ + centre + vec2(-scale * 10.0, width - scale * 10.0), + centre + vec2(0.0, width - scale * 10.0), + ], + stroke, + ); + } + if number == 3 { + let stroke = Stroke::new(stroke_width, *colour_3); + painter.line_segment( + [ + centre + vec2(-scale * 10.0, width - scale * 10.0), + centre + vec2(0.0, width), + ], + stroke, + ); + } + if number == 4 || number == 5 { + let stroke = Stroke::new(stroke_width, *colour_4); + painter.line_segment( + [ + centre + vec2(-scale * 10.0, width), + centre + vec2(0.0, width - scale * 10.0), + ], + stroke, + ); + } + if number > 5 { + let stroke = Stroke::new(stroke_width, *colour_6); + painter.line_segment( + [ + centre + vec2(-scale * 10.0, width - scale * 10.0), + centre + vec2(-scale * 10.0, width), + ], + stroke, + ); + } +} + +fn paint_number( + ui: &mut Ui, + colours: &Colours, + number: u32, + scale: Option, + show_arabic_numeral: Option, +) { + let scale = if let Some(value) = scale { value } else { 1.0 }; + assert!((0..=9_999).contains(&number)); + match show_arabic_numeral { + Some(true) => { + match number { + 0..=999 => ui.label(number.to_string()), + _ => ui.label(format!("{},{:003}", number / 1000, number % 1000)), + }; + } + None | Some(false) => {} + } + + let size = Vec2::splat(scale * 34.0); + let (response, mut painter) = ui.allocate_painter(size, Sense::hover()); + let rect = response.rect; + let c = rect.center(); + + let unit = number % 10; + paint_unit_number(&mut painter, c, scale, colours, unit); + if number > 9 { + let tens = (number % 100) / 10; + paint_tens_number(&mut painter, c, scale, colours, tens); + } + if number > 99 { + let hundreds = (number % 1_000) / 100; + paint_hundreds_number(&mut painter, c, scale, colours, hundreds); + } + if number > 999 { + let thousands = (number % 10_000) / 1_000; + paint_thousands_number(&mut painter, c, scale, colours, thousands); + } +} + +const DARK_CISTERCIAN_NUMERAL_COLOURS: Colours = Colours { + colour_0: Color32::from_gray(242), + colour_1: Color32::from_rgb(58, 134, 255), + colour_2: Color32::from_rgb(251, 86, 7), + colour_3: Color32::from_rgb(162, 106, 241), + colour_4: Color32::from_rgb(255, 0, 110), + colour_6: Color32::from_rgb(255, 190, 11), +}; + +const LIGHT_CISTERCIAN_NUMERAL_COLOURS: Colours = Colours { + colour_0: Color32::from_rgb(4, 3, 15), + colour_1: Color32::from_rgb(93, 93, 91), + colour_2: Color32::from_rgb(0, 122, 94), + colour_3: Color32::from_rgb(27, 42, 65), + colour_4: Color32::from_rgb(150, 2, 0), + colour_6: Color32::from_rgb(0, 122, 163), +}; + +fn paint_number_row(ui: &mut Ui, colours: &Colours, start: u32, end: u32) { + ui.horizontal(|ui| { + for number in start..end { + ui.horizontal_top(|ui| paint_number(ui, colours, number, None, Some(true))); + } + }); +} + +impl eframe::App for CistercianClockApp { /// Called by the frame work to save state before shutdown. fn save(&mut self, storage: &mut dyn eframe::Storage) { eframe::set_value(storage, eframe::APP_KEY, self); @@ -43,10 +492,28 @@ impl eframe::App for TemplateApp { /// Called each time the UI needs repainting, which may be many times per second. fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { - // Put your widgets into a `SidePanel`, `TopBottomPanel`, `CentralPanel`, `Window` or `Area`. + // Put your widgets into a `SidePanel`, `TopPanel`, `CentralPanel`, `Window` or `Area`. // For inspiration and more examples, go to https://emilk.github.io/egui + let mut style = (*ctx.style()).clone(); + style.text_styles = [ + (Heading, FontId::new(30.0, Proportional)), + (Name("clock".into()), FontId::new(64.0, Proportional)), + (Body, FontId::new(18.0, Proportional)), + (Monospace, FontId::new(14.0, Proportional)), + (Button, FontId::new(14.0, Proportional)), + (Small, FontId::new(10.0, Proportional)), + ] + .into(); + ctx.set_style(style); + egui::TopBottomPanel::top("top_panel").show(ctx, |ui| { + if ui.visuals().dark_mode { + ctx.set_visuals(dark_mode_override()); + } else { + ctx.set_visuals(light_mode_override()); + }; + // The top panel is often a good place for a menu bar: egui::menu::bar(ui, |ui| { @@ -61,35 +528,78 @@ impl eframe::App for TemplateApp { ui.add_space(16.0); } - egui::widgets::global_dark_light_mode_buttons(ui); + egui::widgets::global_dark_light_mode_switch(ui); }); }); egui::CentralPanel::default().show(ctx, |ui| { + let colours = if ui.visuals().dark_mode { + DARK_CISTERCIAN_NUMERAL_COLOURS + } else { + LIGHT_CISTERCIAN_NUMERAL_COLOURS + }; + ui.ctx().request_repaint_after(Duration::new(1, 0)); // The central panel the region left after adding TopPanel's and SidePanel's - ui.heading("eframe template"); + ui.heading("Cistercian Time"); + ui.add_space(30.0); + let now = Local::now(); + let hours_minutes: u32 = now.hour() * 100 + now.minute(); + let seconds: u32 = now.second(); + let time = now.format("%H:%M %S").to_string(); ui.horizontal(|ui| { - ui.label("Write something: "); - ui.text_edit_singleline(&mut self.label); + paint_number(ui, &colours, hours_minutes, Some(4.0), None); + paint_number(ui, &colours, seconds, Some(4.0), None); }); - - ui.add(egui::Slider::new(&mut self.value, 0.0..=10.0).text("value")); - if ui.button("Increment").clicked() { - self.value += 1.0; - } + ui.add_space(20.0); + ui.horizontal(|ui| { + ui.style_mut().override_text_style = Some(TextStyle::Name("clock".into())); + ui.label(time) + }); + ui.add_space(20.0); ui.separator(); + ScrollArea::vertical() + .auto_shrink(false) + .scroll_bar_visibility(ScrollBarVisibility::default()) + .show(ui, |ui| { + ui.heading("Cistercian Numbers"); + ui.add_space(30.0); + paint_number_row(ui, &colours, 0, 10); + ui.add_space(30.0); + for tens in 1..10 { + paint_number_row(ui, &colours, 10 * tens, (tens + 1) * 10); + ui.add_space(15.0); + } - ui.add(egui::github_link_file!( - "https://github.com/emilk/eframe_template/blob/master/", - "Source code." - )); + ui.add_space(30.0); + ui.horizontal(|ui| { + for number in 1..5 { + ui.horizontal_top(|ui| { + paint_number(ui, &colours, number * 100, None, Some(true)); + }); + } + }); - ui.with_layout(egui::Layout::bottom_up(egui::Align::LEFT), |ui| { - powered_by_egui_and_eframe(ui); - egui::warn_if_debug_build(ui); - }); + ui.add_space(30.0); + ui.horizontal(|ui| { + for number in 1..5 { + ui.horizontal_top(|ui| { + paint_number(ui, &colours, number * 1_000, None, Some(true)); + }); + } + }); + + ui.add_space(30.0); + ui.separator(); + + ui.horizontal(|ui| { + ui.with_layout(egui::Layout::bottom_up(egui::Align::LEFT), |ui| { + powered_by_egui_and_eframe(ui); + egui::warn_if_debug_build(ui); + }); + }); + }); }); } } diff --git a/src/lib.rs b/src/lib.rs index fbae77a..0b7e2f2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,4 @@ #![warn(clippy::all, rust_2018_idioms)] mod app; -pub use app::TemplateApp; +pub use app::CistercianClockApp; diff --git a/src/main.rs b/src/main.rs index 4d870aa..109e1e0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,21 +1,34 @@ #![warn(clippy::all, rust_2018_idioms)] #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release +use egui::IconData; + // When compiling natively: #[cfg(not(target_arch = "wasm32"))] fn main() -> eframe::Result<()> { env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). + let icon_image = image::open("assets/icon-256.png").unwrap(); + let width = icon_image.width(); + let height = icon_image.height(); + let icon_rgba8 = icon_image.into_rgba8().to_vec(); + let icon_data = IconData { + rgba: icon_rgba8, + width, + height, + }; + let native_options = eframe::NativeOptions { viewport: egui::ViewportBuilder::default() - .with_inner_size([400.0, 300.0]) - .with_min_inner_size([300.0, 220.0]), + .with_inner_size([750.0, 600.0]) + .with_min_inner_size([750.0, 600.0]) + .with_icon(icon_data), ..Default::default() }; eframe::run_native( - "eframe template", + "Cistercian Clock", native_options, - Box::new(|cc| Box::new(eframe_template::TemplateApp::new(cc))), + Box::new(|cc| Box::new(cistercian_clock::CistercianClockApp::new(cc))), ) } @@ -32,7 +45,7 @@ fn main() { .start( "the_canvas_id", // hardcode it web_options, - Box::new(|cc| Box::new(eframe_template::TemplateApp::new(cc))), + Box::new(|cc| Box::new(cistercian_clock::CistercianClockApp::new(cc))), ) .await .expect("failed to start eframe");