From b891c22463cb0df3522423d69b7abdc8c1a0c4ca Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sat, 12 Mar 2022 08:04:56 +0100 Subject: [PATCH] Remove trait WebPainter --- egui_web/src/backend.rs | 16 ++++--------- egui_web/src/glow_wrapping.rs | 37 +++++++++++++++++++++--------- egui_web/src/lib.rs | 2 -- egui_web/src/painter.rs | 43 ----------------------------------- 4 files changed, 30 insertions(+), 68 deletions(-) delete mode 100644 egui_web/src/painter.rs diff --git a/egui_web/src/backend.rs b/egui_web/src/backend.rs index e4292907451d..c50f0660984b 100644 --- a/egui_web/src/backend.rs +++ b/egui_web/src/backend.rs @@ -1,18 +1,10 @@ -use crate::*; +use crate::{glow_wrapping::WrappedGlowPainter, *}; use egui::TexturesDelta; pub use egui::{pos2, Color32}; // ---------------------------------------------------------------------------- -fn create_painter(canvas_id: &str) -> Result, JsValue> { - Ok(Box::new( - crate::glow_wrapping::WrappedGlowPainter::new(canvas_id).map_err(JsValue::from)?, - )) -} - -// ---------------------------------------------------------------------------- - /// Data gathered between frames. #[derive(Default)] pub struct WebInput { @@ -140,7 +132,7 @@ fn test_parse_query() { pub struct AppRunner { pub(crate) frame: epi::Frame, egui_ctx: egui::Context, - painter: Box, + painter: WrappedGlowPainter, pub(crate) input: WebInput, app: Box, pub(crate) needs_repaint: std::sync::Arc, @@ -154,7 +146,7 @@ pub struct AppRunner { impl AppRunner { pub fn new(canvas_id: &str, app: Box) -> Result { - let painter = create_painter(canvas_id)?; + let painter = WrappedGlowPainter::new(canvas_id).map_err(JsValue::from)?; let prefer_dark_mode = crate::prefer_dark_mode(); @@ -162,7 +154,7 @@ impl AppRunner { let frame = epi::Frame::new(epi::backend::FrameData { info: epi::IntegrationInfo { - name: painter.name(), + name: "egui_web", web_info: Some(epi::WebInfo { location: web_location(), }), diff --git a/egui_web/src/glow_wrapping.rs b/egui_web/src/glow_wrapping.rs index 9b879c129c70..c70ba6ce4640 100644 --- a/egui_web/src/glow_wrapping.rs +++ b/egui_web/src/glow_wrapping.rs @@ -31,33 +31,29 @@ impl WrappedGlowPainter { } } -impl crate::WebPainter for WrappedGlowPainter { - fn name(&self) -> &'static str { - "egui_web" - } - - fn max_texture_side(&self) -> usize { +impl WrappedGlowPainter { + pub fn max_texture_side(&self) -> usize { self.painter.max_texture_side() } - fn canvas_id(&self) -> &str { + pub fn canvas_id(&self) -> &str { &self.canvas_id } - fn set_texture(&mut self, tex_id: egui::TextureId, delta: &egui::epaint::ImageDelta) { + pub fn set_texture(&mut self, tex_id: egui::TextureId, delta: &egui::epaint::ImageDelta) { self.painter.set_texture(tex_id, delta); } - fn free_texture(&mut self, tex_id: egui::TextureId) { + pub fn free_texture(&mut self, tex_id: egui::TextureId) { self.painter.free_texture(tex_id); } - fn clear(&mut self, clear_color: Rgba) { + pub fn clear(&mut self, clear_color: Rgba) { let canvas_dimension = [self.canvas.width(), self.canvas.height()]; egui_glow::painter::clear(self.painter.gl(), canvas_dimension, clear_color) } - fn paint_primitives( + pub fn paint_primitives( &mut self, clipped_primitives: Vec, pixels_per_point: f32, @@ -67,6 +63,25 @@ impl crate::WebPainter for WrappedGlowPainter { .paint_primitives(canvas_dimension, pixels_per_point, clipped_primitives); Ok(()) } + + pub fn paint_and_update_textures( + &mut self, + clipped_primitives: Vec, + pixels_per_point: f32, + textures_delta: &egui::TexturesDelta, + ) -> Result<(), JsValue> { + for (id, image_delta) in &textures_delta.set { + self.set_texture(*id, image_delta); + } + + self.paint_primitives(clipped_primitives, pixels_per_point)?; + + for &id in &textures_delta.free { + self.free_texture(id); + } + + Ok(()) + } } /// Returns glow context and shader prefix. diff --git a/egui_web/src/lib.rs b/egui_web/src/lib.rs index b4bf6f2fff25..a7c3068ab6b9 100644 --- a/egui_web/src/lib.rs +++ b/egui_web/src/lib.rs @@ -17,7 +17,6 @@ pub mod backend; mod glow_wrapping; mod input; -mod painter; pub mod screen_reader; mod text_agent; @@ -28,7 +27,6 @@ pub use wasm_bindgen; pub use web_sys; use input::*; -pub use painter::WebPainter; use web_sys::EventTarget; use std::collections::BTreeMap; diff --git a/egui_web/src/painter.rs b/egui_web/src/painter.rs deleted file mode 100644 index 90e0b6e4c1bd..000000000000 --- a/egui_web/src/painter.rs +++ /dev/null @@ -1,43 +0,0 @@ -use wasm_bindgen::prelude::JsValue; - -/// What is needed to paint egui. -pub trait WebPainter { - fn name(&self) -> &'static str; - - /// Max size of one side of a texture. - fn max_texture_side(&self) -> usize; - - /// id of the canvas html element containing the rendering - fn canvas_id(&self) -> &str; - - fn set_texture(&mut self, tex_id: egui::TextureId, delta: &egui::epaint::ImageDelta); - - fn free_texture(&mut self, tex_id: egui::TextureId); - - fn clear(&mut self, clear_color: egui::Rgba); - - fn paint_primitives( - &mut self, - clipped_primitives: Vec, - pixels_per_point: f32, - ) -> Result<(), JsValue>; - - fn paint_and_update_textures( - &mut self, - clipped_primitives: Vec, - pixels_per_point: f32, - textures_delta: &egui::TexturesDelta, - ) -> Result<(), JsValue> { - for (id, image_delta) in &textures_delta.set { - self.set_texture(*id, image_delta); - } - - self.paint_primitives(clipped_primitives, pixels_per_point)?; - - for &id in &textures_delta.free { - self.free_texture(id); - } - - Ok(()) - } -}