diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index d0efd74b..2c1f4a1e 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -132,7 +132,7 @@ jobs: toolchain: 1.54.0 override: true - run: sudo apt-get update && sudo apt-get install libspeechd-dev - - run: cargo doc -p emath -p epaint -p egui -p eframe -p epi -p egui_web -p egui-winit -p egui_glium --lib --no-deps --all-features + - run: cargo doc -p emath -p epaint -p egui -p eframe -p epi -p egui_web -p egui-winit -p egui_glium -p egui_glow --lib --no-deps --all-features doc_web: name: cargo doc web diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 110c062b..410b648c 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -5,7 +5,7 @@ Also see [`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/master/CONTRIBUT ## Crate overview -The crates in this repository are: `egui, emath, epaint, egui, epi, egui-winit, egui_web, egui_glium, egui_demo_lib, egui_demo_app`. +The crates in this repository are: `egui, emath, epaint, egui, epi, egui-winit, egui_web, egui_glium, egui_glow, egui_demo_lib, egui_demo_app`. ### `egui`: The main GUI library. Example code: `if ui.button("Click me").clicked() { … }` @@ -38,7 +38,6 @@ Puts an egui app inside a native window on your laptop. Paints the triangles tha ### `egui_glow` Puts an egui app inside a native window on your laptop. Paints the triangles that egui outputs using [glow](https://github.com/grovesNL/glow). -An alternative to `egui_glium`, not used by `eframe` at this time. ### `eframe` A wrapper around `egui_web` + `egui_glium`, so you can compile the same app for either web or native. diff --git a/CHANGELOG.md b/CHANGELOG.md index 64516f28..54262bde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to the egui crate will be documented in this file. -NOTE: [`epaint`](epaint/CHANGELOG.md), [`eframe`](eframe/CHANGELOG.md), [`egui_web`](egui_web/CHANGELOG.md), [`egui-winit`](egui-winit/CHANGELOG.md) and [`egui_glium`](egui_glium/CHANGELOG.md) have their own changelogs! +NOTE: [`epaint`](epaint/CHANGELOG.md), [`eframe`](eframe/CHANGELOG.md), [`egui_web`](egui_web/CHANGELOG.md), [`egui-winit`](egui-winit/CHANGELOG.md), [`egui_glium`](egui_glium/CHANGELOG.md), and [`egui_glow`](egui_glow/CHANGELOG.md) have their own changelogs! ## Unreleased diff --git a/Cargo.lock b/Cargo.lock index adbfcf98..d498ad75 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -836,6 +836,7 @@ version = "0.14.0" dependencies = [ "egui", "egui_glium", + "egui_glow", "egui_web", "epi", "image", @@ -905,6 +906,23 @@ dependencies = [ "serde", ] +[[package]] +name = "egui_glow" +version = "0.14.0" +dependencies = [ + "chrono", + "directories-next", + "egui", + "egui-winit", + "epi", + "glow", + "glutin", + "image", + "memoffset", + "ron", + "serde", +] + [[package]] name = "egui_web" version = "0.14.1" @@ -1174,6 +1192,18 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +[[package]] +name = "glow" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f04649123493bc2483cbef4daddb45d40bbdae5adb221a63a23efdb0cc99520" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "glutin" version = "0.27.0" @@ -2300,6 +2330,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + [[package]] name = "smallvec" version = "1.7.0" diff --git a/Cargo.toml b/Cargo.toml index 6cb7a094..53b381e2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ members = [ "egui_demo_app", "egui_demo_lib", "egui_glium", + "egui_glow", "egui_web", "egui-winit", "egui", @@ -12,11 +13,6 @@ members = [ "epi", ] -[patch.crates-io] -egui = { path = 'egui' } -egui_glium = { path = 'egui_glium' } -egui_web = { path = 'egui_web' } - [profile.dev] split-debuginfo = "unpacked" # faster debug builds on mac diff --git a/eframe/CHANGELOG.md b/eframe/CHANGELOG.md index 05c99734..6b9eea7d 100644 --- a/eframe/CHANGELOG.md +++ b/eframe/CHANGELOG.md @@ -1,7 +1,7 @@ # Changelog for eframe All notable changes to the `eframe` and `epi` crates. -NOTE: [`egui_web`](egui_web/CHANGELOG.md), [`egui-winit`](egui-winit/CHANGELOG.md) and [`egui_glium`](egui_glium/CHANGELOG.md) have their own changelogs! +NOTE: [`egui_web`](egui_web/CHANGELOG.md), [`egui-winit`](egui-winit/CHANGELOG.md), [`egui_glium`](egui_glium/CHANGELOG.md), and [`egui_glow`](egui_glow/CHANGELOG.md) have their own changelogs! ## Unreleased @@ -9,7 +9,7 @@ NOTE: [`egui_web`](egui_web/CHANGELOG.md), [`egui-winit`](egui-winit/CHANGELOG.m * Remove "http" feature (use https://github.com/emilk/ehttp instead!). * Increase native scroll speed. * Add `App::persist_native_window` and `App::persist_egui_memory` to control what gets persisted. -* Add new backend `egui_glow` as an alternative to `egui_glium` (not yet exposed as a feature flag) +* Add new backend `egui_glow` as an alternative to `egui_glium`. Enable with `default-features = false, features = ["default_fonts", "egui_glow"]`. ## 0.14.0 - 2021-08-24 diff --git a/eframe/Cargo.toml b/eframe/Cargo.toml index fcc12277..75b1286e 100644 --- a/eframe/Cargo.toml +++ b/eframe/Cargo.toml @@ -28,7 +28,8 @@ epi = { version = "0.14.0", path = "../epi" } # For compiling natively: [target.'cfg(not(target_arch = "wasm32"))'.dependencies] -egui_glium = { version = "0.14.0", path = "../egui_glium", default-features = false, features = ["clipboard", "links"] } +egui_glium = { version = "0.14.0", path = "../egui_glium", default-features = false, features = ["clipboard", "links"], optional = true } +egui_glow = { version = "0.14.0", path = "../egui_glow", default-features = false, features = ["clipboard", "links"], optional = true } # For compiling to web: [target.'cfg(target_arch = "wasm32")'.dependencies] @@ -39,7 +40,7 @@ image = { version = "0.23", default-features = false, features = ["png"] } rfd = "0.5.0" [features] -default = ["default_fonts"] +default = ["default_fonts", "egui_glium"] # If set, egui will use `include_bytes!` to bundle some fonts. # If you plan on specifying your own fonts you may disable this feature. diff --git a/eframe/README.md b/eframe/README.md index 3502dc0d..530d79ff 100644 --- a/eframe/README.md +++ b/eframe/README.md @@ -14,7 +14,7 @@ To get started, go to and follow the `eframe` is a very thin crate that re-exports [`egui`](https://github.com/emilk/egui) and[`epi`](https://github.com/emilk/egui/tree/master/epi) with thin wrappers over the backends. -`eframe` uses [`egui_web`](https://crates.io/crates/egui_web) and [`egui_glium`](https://crates.io/crates/egui_glium). +`eframe` uses [`egui_web`](https://github.com/emilk/egui/tree/master/egui_web) for web and [`egui_glium`](https://github.com/emilk/egui/tree/master/egui_glium) or [`egui_glow`](https://github.com/emilk/egui/tree/master/egui_glow) for native. To use on Linux, first run: @@ -24,6 +24,12 @@ sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev lib ## Alternatives +The default native backend for `eframe` is currently [`egui_glium`](https://github.com/emilk/egui/tree/master/egui_glium), but you can try out the new [`egui_glow`](https://github.com/emilk/egui/tree/master/egui_glow) backend by putting this in your `Cargo.toml`: + +``` toml +eframe = { version = "*", default-features = false, features = ["default_fonts", "egui_glow"] } +``` + `eframe` is not the only way to write an app using `egui`! You can also try [`egui-miniquad`](https://github.com/not-fl3/egui-miniquad) and [`egui_sdl2_gl`](https://github.com/ArjunNair/egui_sdl2_gl). diff --git a/eframe/src/lib.rs b/eframe/src/lib.rs index 19bb1a41..4015feb8 100644 --- a/eframe/src/lib.rs +++ b/eframe/src/lib.rs @@ -9,7 +9,8 @@ //! You write your application code for [`epi`] (implementing [`epi::App`]) and then //! call from [`crate::run_native`] your `main.rs`, and/or call `eframe::start_web` from your `lib.rs`. //! -//! `eframe` is implemented using [`egui_web`](https://docs.rs/egui_web) and [`egui_glium`](https://docs.rs/egui_glium). +//! `eframe` is implemented using [`egui_web`](https://github.com/emilk/egui/tree/master/egui_web) for web and +//! [`egui_glium`](https://github.com/emilk/egui/tree/master/egui_glium) or [`egui_glow`](https://github.com/emilk/egui/tree/master/egui_glow) for native. // Forbid warnings in release builds: #![cfg_attr(not(debug_assertions), deny(warnings))] @@ -61,6 +62,22 @@ pub fn start_web(canvas_id: &str, app: Box) -> Result<(), wasm_bin /// Call from `fn main` like this: `eframe::run_native(Box::new(MyEguiApp::default()))` #[cfg(not(target_arch = "wasm32"))] +#[cfg(feature = "egui_glium")] pub fn run_native(app: Box, native_options: epi::NativeOptions) -> ! { egui_glium::run(app, &native_options) } + +/// Call from `fn main` like this: `eframe::run_native(Box::new(MyEguiApp::default()))` +#[cfg(not(target_arch = "wasm32"))] +#[cfg(not(feature = "egui_glium"))] // make sure we still compile with `--all-features` +#[cfg(feature = "egui_glow")] +pub fn run_native(app: Box, native_options: epi::NativeOptions) -> ! { + egui_glow::run(app, &native_options) +} + +// disabled since we want to be able to compile with `--all-features` +// #[cfg(all(feature = "egui_glium", feature = "egui_glow"))] +// compile_error!("Enable either egui_glium or egui_glow, not both"); + +#[cfg(all(not(feature = "egui_glium"), not(feature = "egui_glow")))] +compile_error!("Enable either egui_glium or egui_glow"); diff --git a/egui_demo_lib/src/apps/demo/app.rs b/egui_demo_lib/src/apps/demo/app.rs index 75d777e2..8f1f3cf4 100644 --- a/egui_demo_lib/src/apps/demo/app.rs +++ b/egui_demo_lib/src/apps/demo/app.rs @@ -1,7 +1,7 @@ /// Demonstrates how to make an app using egui. /// /// Implements `epi::App` so it can be used with -/// [`egui_glium`](https://crates.io/crates/egui_glium) and [`egui_web`](https://crates.io/crates/egui_web). +/// [`egui_glium`](https://github.com/emilk/egui/tree/master/egui_glium), [`egui_glow`](https://github.com/emilk/egui/tree/master/egui_glow) and [`egui_web`](https://github.com/emilk/egui/tree/master/egui_web). #[derive(Default)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] #[cfg_attr(feature = "serde", serde(default))] diff --git a/epi/README.md b/epi/README.md index bb5cba4a..f4f66b92 100644 --- a/epi/README.md +++ b/epi/README.md @@ -8,6 +8,6 @@ `epi` is a backend-agnostic interface for writing apps using `egui` (a platform agnostic GUI library). -This crate provides a common interface for programming an app using egui, which can then be easily plugged into [`eframe`](https://github.com/emilk/egui/tree/master/eframe) (which is a wrapper over [`egui_web`](https://crates.io/crates/egui_web) and/or [`egui_glium`](https://crates.io/crates/egui_glium)). +This crate provides a common interface for programming an app using egui, which can then be easily plugged into [`eframe`](https://github.com/emilk/egui/tree/master/eframe) (which is a wrapper over [`egui_web`](https://github.com/emilk/egui/tree/master/egui_web), [`egui_glium`](https://github.com/emilk/egui/tree/master/egui_glium) and [`egui_glow`](https://github.com/emilk/egui/tree/master/egui_glow)). This crate is only for those that want to write an app that can be compiled both natively and for the web. diff --git a/epi/src/lib.rs b/epi/src/lib.rs index fe0db566..0c69f662 100644 --- a/epi/src/lib.rs +++ b/epi/src/lib.rs @@ -82,8 +82,8 @@ pub use egui; // Re-export for user convenience // ---------------------------------------------------------------------------- -/// Implement this trait to write apps that can be compiled both natively using the [`egui_glium`](https://crates.io/crates/egui_glium) crate, -/// and deployed as a web site using the [`egui_web`](https://crates.io/crates/egui_web) crate. +/// Implement this trait to write apps that can be compiled both natively using the [`egui_glium`](https://github.com/emilk/egui/tree/master/egui_glium) crate, +/// and deployed as a web site using the [`egui_web`](https://github.com/emilk/egui/tree/master/egui_web) crate. pub trait App { /// Called each time the UI needs repainting, which may be many times per second. /// Put your widgets into a [`egui::SidePanel`], [`egui::TopBottomPanel`], [`egui::CentralPanel`], [`egui::Window`] or [`egui::Area`]. diff --git a/sh/check.sh b/sh/check.sh index d67b7950..31a1229b 100755 --- a/sh/check.sh +++ b/sh/check.sh @@ -15,13 +15,13 @@ cargo clippy --workspace --all-targets --all-features -- -D warnings -W clippy: cargo test --workspace --all-targets --all-features cargo fmt --all -- --check -cargo doc -p emath -p epaint -p egui -p eframe -p epi -p egui_web -p egui-winit -p egui_glium --lib --no-deps --all-features +cargo doc -p emath -p epaint -p egui -p eframe -p epi -p egui_web -p egui-winit -p egui_glium -p egui_glow --lib --no-deps --all-features cargo doc -p egui_web --target wasm32-unknown-unknown --lib --no-deps --all-features (cd emath && cargo check --no-default-features) (cd epaint && cargo check --no-default-features --features "single_threaded") (cd egui && cargo check --no-default-features --features "multi_threaded") -(cd eframe && cargo check --no-default-features) +(cd eframe && cargo check --no-default-features --features "egui_glow") (cd epi && cargo check --no-default-features) (cd egui_web && cargo check --no-default-features) (cd egui-winit && cargo check --no-default-features) diff --git a/sh/docs.sh b/sh/docs.sh index 61da0290..1a38d228 100755 --- a/sh/docs.sh +++ b/sh/docs.sh @@ -4,6 +4,6 @@ script_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) cd "$script_path/.." cargo doc -p egui_web --target wasm32-unknown-unknown --lib --no-deps --all-features -cargo doc -p emath -p epaint -p egui -p eframe -p epi -p egui_web -p egui-winit -p egui_glium --lib --no-deps --all-features --open +cargo doc -p emath -p epaint -p egui -p eframe -p epi -p egui_web -p egui-winit -p egui_glium -p egui_glow --lib --no-deps --all-features --open # cargo watch -c -x 'doc -p emath -p epaint -p egui --lib --no-deps --all-features'