Skip to content

Commit

Permalink
Merge pull request #1 from Baezon/v26_2
Browse files Browse the repository at this point in the history
update egui to 0.26.2
  • Loading branch information
fayalalebrun authored Mar 5, 2024
2 parents 6981ce3 + 876f39d commit e62381d
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 81 deletions.
12 changes: 6 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "egui_glium"
version = "0.23.0"
version = "0.26.2"
authors = ["Emil Ernerfeldt <emil.ernerfeldt@gmail.com>"]
description = "Bindings for using egui natively using the glium library"
edition = "2021"
Expand Down Expand Up @@ -29,25 +29,25 @@ links = ["egui-winit/links"]


[dependencies]
egui = { version = "0.23.0", default-features = false, features = [
egui = { version = "0.26.2", default-features = false, features = [
"bytemuck",
"default_fonts"
] }
egui-winit = { version = "0.23.0", default-features = false }
egui-winit = { version = "0.26.2", default-features = false }

ahash = { version = "0.8.1", default-features = false, features = [
"no-rng", # we don't need DOS-protection, so we let users opt-in to it instead
"std",
] }
bytemuck = "1.7"
glium = "0.33"
winit = "0.28"
glium = "0.34"
winit = "0.29"

#! ### Optional dependencies
## Enable this when generating docs.
document-features = { version = "0.2", optional = true }


[dev-dependencies]
egui_demo_lib = { version = "0.23.0", default-features = false }
egui_demo_lib = { version = "0.26.2", default-features = false }
image = { version = "0.24", default-features = false, features = ["png"] }
42 changes: 14 additions & 28 deletions examples/native_texture.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release

use egui::load::SizedTexture;
use egui::{load::SizedTexture, ViewportId};
use glium::{backend::glutin::SimpleWindowBuilder, glutin::surface::WindowSurface};
use winit::event_loop::{self, EventLoop, EventLoopBuilder};
use winit::event_loop::{EventLoop, EventLoopBuilder};

fn main() {
let event_loop = EventLoopBuilder::with_user_event().build();
let event_loop = EventLoopBuilder::with_user_event().build().unwrap();
let (window, display) = create_display(&event_loop);

let mut egui_glium = egui_glium::EguiGlium::new(&display, &window, &event_loop);
let mut egui_glium =
egui_glium::EguiGlium::new(ViewportId::ROOT, &display, &window, &event_loop);

let png_data = include_bytes!("rust-logo-256x256.png");
let image = load_glium_image(png_data);
Expand All @@ -24,11 +25,11 @@ fn main() {
// Setup button image size for reasonable image size for button container.
let button_image_size = egui::vec2(32_f32, 32_f32);

event_loop.run(move |event, _, control_flow| {
let result = event_loop.run(move |event, target| {
let mut redraw = || {
let mut quit = false;

let repaint_after = egui_glium.run(&window, |egui_ctx| {
egui_glium.run(&window, |egui_ctx| {
egui::SidePanel::left("my_side_panel").show(egui_ctx, |ui| {
if ui
.add(egui::Button::image_and_text(
Expand All @@ -45,18 +46,9 @@ fn main() {
});
});

*control_flow = if quit {
event_loop::ControlFlow::Exit
} else if repaint_after.is_zero() {
window.request_redraw();
event_loop::ControlFlow::Poll
} else if let Some(repaint_after_instant) =
std::time::Instant::now().checked_add(repaint_after)
{
event_loop::ControlFlow::WaitUntil(repaint_after_instant)
} else {
event_loop::ControlFlow::Wait
};
if quit {
target.exit()
}

{
use glium::Surface as _;
Expand All @@ -76,25 +68,18 @@ fn main() {
};

match event {
// Platform-dependent event handlers to workaround a winit bug
// See: https://github.com/rust-windowing/winit/issues/987
// See: https://github.com/rust-windowing/winit/issues/1619
winit::event::Event::RedrawEventsCleared if cfg!(target_os = "windows") => redraw(),
winit::event::Event::RedrawRequested(_) if !cfg!(target_os = "windows") => redraw(),

winit::event::Event::WindowEvent { event, .. } => {
use winit::event::WindowEvent;
match &event {
WindowEvent::CloseRequested | WindowEvent::Destroyed => {
*control_flow = winit::event_loop::ControlFlow::Exit;
}
WindowEvent::CloseRequested | WindowEvent::Destroyed => target.exit(),
WindowEvent::Resized(new_size) => {
display.resize((*new_size).into());
}
WindowEvent::RedrawRequested => redraw(),
_ => {}
}

let event_response = egui_glium.on_event(&event);
let event_response = egui_glium.on_event(&window, &event);

if event_response.repaint {
window.request_redraw();
Expand All @@ -110,6 +95,7 @@ fn main() {
_ => (),
}
});
result.unwrap()
}

fn create_display(
Expand Down
41 changes: 14 additions & 27 deletions examples/pure_glium.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,27 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release

use egui::ViewportId;
use glium::{backend::glutin::SimpleWindowBuilder, glutin::surface::WindowSurface};
use winit::{
event,
event_loop::{self, EventLoop, EventLoopBuilder},
event_loop::{EventLoop, EventLoopBuilder},
};

fn main() {
let event_loop = EventLoopBuilder::with_user_event().build();
let event_loop = EventLoopBuilder::with_user_event().build().unwrap();
let (window, display) = create_display(&event_loop);

let mut egui_glium = egui_glium::EguiGlium::new(&display, &window, &event_loop);
let mut egui_glium =
egui_glium::EguiGlium::new(ViewportId::ROOT, &display, &window, &event_loop);

let mut color_test = egui_demo_lib::ColorTest::default();

event_loop.run(move |event, _, control_flow| {
let result = event_loop.run(move |event, target| {
let mut redraw = || {
let mut quit = false;

let repaint_after = egui_glium.run(&window, |egui_ctx| {
egui_glium.run(&window, |egui_ctx| {
egui::SidePanel::left("my_side_panel").show(egui_ctx, |ui| {
ui.heading("Hello World!");
if ui.button("Quit").clicked() {
Expand All @@ -35,18 +37,9 @@ fn main() {
});
});

*control_flow = if quit {
event_loop::ControlFlow::Exit
} else if repaint_after.is_zero() {
window.request_redraw();
event_loop::ControlFlow::Poll
} else if let Some(repaint_after_instant) =
std::time::Instant::now().checked_add(repaint_after)
{
event_loop::ControlFlow::WaitUntil(repaint_after_instant)
} else {
event_loop::ControlFlow::Wait
};
if quit {
target.exit()
}

{
use glium::Surface as _;
Expand All @@ -66,25 +59,18 @@ fn main() {
};

match event {
// Platform-dependent event handlers to workaround a winit bug
// See: https://github.com/rust-windowing/winit/issues/987
// See: https://github.com/rust-windowing/winit/issues/1619
event::Event::RedrawEventsCleared if cfg!(target_os = "windows") => redraw(),
event::Event::RedrawRequested(_) if !cfg!(target_os = "windows") => redraw(),

event::Event::WindowEvent { event, .. } => {
use event::WindowEvent;
match &event {
WindowEvent::CloseRequested | WindowEvent::Destroyed => {
*control_flow = winit::event_loop::ControlFlow::Exit;
}
WindowEvent::CloseRequested | WindowEvent::Destroyed => target.exit(),
WindowEvent::Resized(new_size) => {
display.resize((*new_size).into());
}
WindowEvent::RedrawRequested => redraw(),
_ => {}
}

let event_response = egui_glium.on_event(&event);
let event_response = egui_glium.on_event(&window, &event);

if event_response.repaint {
window.request_redraw();
Expand All @@ -96,6 +82,7 @@ fn main() {
_ => (),
}
});
result.unwrap()
}

fn create_display(
Expand Down
47 changes: 27 additions & 20 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ pub use egui_winit::EventResponse;

/// Convenience wrapper for using [`egui`] from a [`glium`] app.
pub struct EguiGlium {
pub egui_ctx: egui::Context,
pub egui_winit: egui_winit::State,
pub painter: crate::Painter,

Expand All @@ -35,53 +34,59 @@ pub struct EguiGlium {

impl EguiGlium {
pub fn new<E>(
viewport_id: egui::ViewportId,
display: &glium::Display<WindowSurface>,
window: &winit::window::Window,
event_loop: &EventLoopWindowTarget<E>,
) -> Self {
let painter = crate::Painter::new(display);

let mut egui_winit = egui_winit::State::new(event_loop);
egui_winit.set_max_texture_side(painter.max_texture_side());
let pixels_per_point = window.scale_factor() as f32;
egui_winit.set_pixels_per_point(pixels_per_point);
let egui_winit = egui_winit::State::new(
Default::default(),
viewport_id,
event_loop,
Some(pixels_per_point),
Some(painter.max_texture_side()),
);

Self {
egui_ctx: Default::default(),
egui_winit,
painter,
shapes: Default::default(),
textures_delta: Default::default(),
}
}

pub fn on_event(&mut self, event: &winit::event::WindowEvent<'_>) -> EventResponse {
self.egui_winit.on_event(&self.egui_ctx, event)
pub fn egui_ctx(&self) -> &egui::Context {
self.egui_winit.egui_ctx()
}

/// Returns `true` if egui requests a repaint.
///
/// Call [`Self::paint`] later to paint.
pub fn run(
pub fn on_event(
&mut self,
window: &winit::window::Window,
run_ui: impl FnMut(&egui::Context),
) -> std::time::Duration {
event: &winit::event::WindowEvent,
) -> EventResponse {
self.egui_winit.on_window_event(window, event)
}

/// Runs the main egui render.
///
/// Call [`Self::paint`] later to paint.
pub fn run(&mut self, window: &winit::window::Window, run_ui: impl FnMut(&egui::Context)) {
let raw_input = self.egui_winit.take_egui_input(window);
let egui::FullOutput {
platform_output,
repaint_after,
textures_delta,
shapes,
} = self.egui_ctx.run(raw_input, run_ui);
..
} = self.egui_ctx().run(raw_input, run_ui);

self.egui_winit
.handle_platform_output(window, &self.egui_ctx, platform_output);
.handle_platform_output(window, platform_output);

self.shapes = shapes;
self.textures_delta.append(textures_delta);

repaint_after
}

/// Paint the results of the last call to [`Self::run`].
Expand All @@ -92,11 +97,13 @@ impl EguiGlium {
) {
let shapes = std::mem::take(&mut self.shapes);
let textures_delta = std::mem::take(&mut self.textures_delta);
let clipped_primitives = self.egui_ctx.tessellate(shapes);
let clipped_primitives = self
.egui_ctx()
.tessellate(shapes, self.egui_ctx().pixels_per_point());
self.painter.paint_and_update_textures(
display,
target,
self.egui_ctx.pixels_per_point(),
self.egui_ctx().pixels_per_point(),
&clipped_primitives,
&textures_delta,
);
Expand Down

0 comments on commit e62381d

Please sign in to comment.