summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmil Ernerfeldt <emil.ernerfeldt@gmail.com>2023-02-12 19:29:42 +0100
committerGitHub <noreply@github.com>2023-02-12 19:29:42 +0100
commitdf7e5bd57af2f6135e5a0183d56cc4f87f948de6 (patch)
treefdfde37a5c88a33db9dccdb0f55d6976209de0d4
parente3e781ced81619704f03f81d1fff32a886874e64 (diff)
Allow compiling eframe with `--no-default-features` (#2728)
* Check that we can compile eframe with --no-default-features * Allow compiling eframe with `--no-default-features` This is useful for libraries that depend on `eframe::Frame` but don't care what renderer eframe is using.
-rw-r--r--.github/workflows/rust.yml12
-rw-r--r--crates/eframe/CHANGELOG.md1
-rw-r--r--crates/eframe/src/epi.rs24
-rw-r--r--crates/eframe/src/lib.rs22
4 files changed, 48 insertions, 11 deletions
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index 738a2d63..a8d77527 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -47,24 +47,30 @@ jobs:
with:
crate: cargo-cranky
- - name: Check all features
+ - name: check --all-features
uses: actions-rs/cargo@v1
with:
command: check
args: --locked --all-features --all-targets
- - name: Check default features
+ - name: check default features
uses: actions-rs/cargo@v1
with:
command: check
args: --locked --all-targets
- - name: Check no default features
+ - name: check --no-default-features
uses: actions-rs/cargo@v1
with:
command: check
args: --locked --no-default-features --lib --all-targets
+ - name: check eframe --no-default-features
+ uses: actions-rs/cargo@v1
+ with:
+ command: check
+ args: --locked --no-default-features --lib --all-targets -p eframe
+
- name: Test doc-tests
uses: actions-rs/cargo@v1
with:
diff --git a/crates/eframe/CHANGELOG.md b/crates/eframe/CHANGELOG.md
index b492cf7f..46e1ddd4 100644
--- a/crates/eframe/CHANGELOG.md
+++ b/crates/eframe/CHANGELOG.md
@@ -5,6 +5,7 @@ NOTE: [`egui-winit`](../egui-winit/CHANGELOG.md), [`egui_glium`](../egui_glium/C
## Unreleased
+* Allow compiling with `--no-default-features` ([#2728](https://github.com/emilk/egui/pull/2728)).
## 0.21.1 - 2023-02-12
diff --git a/crates/eframe/src/epi.rs b/crates/eframe/src/epi.rs
index 1c9cb021..31127c02 100644
--- a/crates/eframe/src/epi.rs
+++ b/crates/eframe/src/epi.rs
@@ -10,9 +10,11 @@
use std::any::Any;
#[cfg(not(target_arch = "wasm32"))]
+#[cfg(any(feature = "glow", feature = "wgpu"))]
pub use crate::native::run::UserEvent;
#[cfg(not(target_arch = "wasm32"))]
+#[cfg(any(feature = "glow", feature = "wgpu"))]
pub use winit::event_loop::EventLoopBuilder;
/// Hook into the building of an event loop before it is run
@@ -20,6 +22,7 @@ pub use winit::event_loop::EventLoopBuilder;
/// You can configure any platform specific details required on top of the default configuration
/// done by `EFrame`.
#[cfg(not(target_arch = "wasm32"))]
+#[cfg(any(feature = "glow", feature = "wgpu"))]
pub type EventLoopBuilderHook = Box<dyn FnOnce(&mut EventLoopBuilder<UserEvent>)>;
/// This is how your app is created.
@@ -317,6 +320,7 @@ pub struct NativeOptions {
pub hardware_acceleration: HardwareAcceleration,
/// What rendering backend to use.
+ #[cfg(any(feature = "glow", feature = "wgpu"))]
pub renderer: Renderer,
/// Only used if the `dark-light` feature is enabled:
@@ -355,6 +359,7 @@ pub struct NativeOptions {
/// event loop before it is run.
///
/// Note: A [`NativeOptions`] clone will not include any `event_loop_builder` hook.
+ #[cfg(any(feature = "glow", feature = "wgpu"))]
pub event_loop_builder: Option<EventLoopBuilderHook>,
#[cfg(feature = "glow")]
@@ -381,9 +386,13 @@ impl Clone for NativeOptions {
fn clone(&self) -> Self {
Self {
icon_data: self.icon_data.clone(),
+
+ #[cfg(any(feature = "glow", feature = "wgpu"))]
event_loop_builder: None, // Skip any builder callbacks if cloning
+
#[cfg(feature = "wgpu")]
wgpu_options: self.wgpu_options.clone(),
+
..*self
}
}
@@ -397,8 +406,10 @@ impl Default for NativeOptions {
maximized: false,
decorated: true,
fullscreen: false,
+
#[cfg(target_os = "macos")]
fullsize_content: false,
+
drag_and_drop_support: true,
icon_data: None,
initial_window_pos: None,
@@ -413,14 +424,22 @@ impl Default for NativeOptions {
depth_buffer: 0,
stencil_buffer: 0,
hardware_acceleration: HardwareAcceleration::Preferred,
+
+ #[cfg(any(feature = "glow", feature = "wgpu"))]
renderer: Renderer::default(),
+
follow_system_theme: cfg!(target_os = "macos") || cfg!(target_os = "windows"),
default_theme: Theme::Dark,
run_and_return: true,
+
+ #[cfg(any(feature = "glow", feature = "wgpu"))]
event_loop_builder: None,
+
#[cfg(feature = "glow")]
shader_version: None,
+
centered: false,
+
#[cfg(feature = "wgpu")]
wgpu_options: egui_wgpu::WgpuConfiguration::default(),
}
@@ -559,6 +578,7 @@ pub enum WebGlContextOption {
/// What rendering backend to use.
///
/// You need to enable the "glow" and "wgpu" features to have a choice.
+#[cfg(any(feature = "glow", feature = "wgpu"))]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
@@ -572,6 +592,7 @@ pub enum Renderer {
Wgpu,
}
+#[cfg(any(feature = "glow", feature = "wgpu"))]
impl Default for Renderer {
fn default() -> Self {
#[cfg(feature = "glow")]
@@ -587,6 +608,7 @@ impl Default for Renderer {
}
}
+#[cfg(any(feature = "glow", feature = "wgpu"))]
impl std::fmt::Display for Renderer {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
@@ -599,6 +621,7 @@ impl std::fmt::Display for Renderer {
}
}
+#[cfg(any(feature = "glow", feature = "wgpu"))]
impl std::str::FromStr for Renderer {
type Err = String;
@@ -811,6 +834,7 @@ impl Frame {
}
/// for integrations only: call once per frame
+ #[cfg(any(feature = "glow", feature = "wgpu"))]
pub(crate) fn take_app_output(&mut self) -> backend::AppOutput {
std::mem::take(&mut self.output)
}
diff --git a/crates/eframe/src/lib.rs b/crates/eframe/src/lib.rs
index de031d2a..a2181c58 100644
--- a/crates/eframe/src/lib.rs
+++ b/crates/eframe/src/lib.rs
@@ -137,6 +137,7 @@ pub async fn start_web(
// When compiling natively
#[cfg(not(target_arch = "wasm32"))]
+#[cfg(any(feature = "glow", feature = "wgpu"))]
mod native;
/// This is how you start a native (desktop) app.
@@ -179,6 +180,7 @@ mod native;
/// This function can fail if we fail to set up a graphics context.
#[cfg(not(target_arch = "wasm32"))]
#[allow(clippy::needless_pass_by_value)]
+#[cfg(any(feature = "glow", feature = "wgpu"))]
pub fn run_native(
app_name: &str,
native_options: NativeOptions,
@@ -233,24 +235,28 @@ pub type Result<T> = std::result::Result<T, Error>;
// ---------------------------------------------------------------------------
-/// Profiling macro for feature "puffin"
#[cfg(not(target_arch = "wasm32"))]
-macro_rules! profile_function {
+#[cfg(any(feature = "glow", feature = "wgpu"))]
+mod profiling_scopes {
+ /// Profiling macro for feature "puffin"
+ macro_rules! profile_function {
($($arg: tt)*) => {
#[cfg(feature = "puffin")]
puffin::profile_function!($($arg)*);
};
}
-#[cfg(not(target_arch = "wasm32"))]
-pub(crate) use profile_function;
+ pub(crate) use profile_function;
-/// Profiling macro for feature "puffin"
-#[cfg(not(target_arch = "wasm32"))]
-macro_rules! profile_scope {
+ /// Profiling macro for feature "puffin"
+ macro_rules! profile_scope {
($($arg: tt)*) => {
#[cfg(feature = "puffin")]
puffin::profile_scope!($($arg)*);
};
}
+ pub(crate) use profile_scope;
+}
+
#[cfg(not(target_arch = "wasm32"))]
-pub(crate) use profile_scope;
+#[cfg(any(feature = "glow", feature = "wgpu"))]
+pub(crate) use profiling_scopes::*;