From 0af39648c0e2f27b2d44c247831e43a1fc0a0611 Mon Sep 17 00:00:00 2001 From: Tsuki Date: Thu, 25 Jan 2024 20:24:36 +0800 Subject: [PATCH] render rebuild --- .../render_panel/monitor/monitor.rs | 2 +- src/render/imp.rs | 20 ++++++++++++++++--- src/render/mod.rs | 10 +++------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/components/render_panel/monitor/monitor.rs b/src/components/render_panel/monitor/monitor.rs index 80c475a..685764f 100644 --- a/src/components/render_panel/monitor/monitor.rs +++ b/src/components/render_panel/monitor/monitor.rs @@ -70,7 +70,7 @@ impl Component for MonitorModel { #[track = "model.changed(MonitorModel::render_cfg())"] set_cfg: model.render_cfg, #[track = "model.changed(MonitorModel::render_range())"] - set_range: model.render_range, + set_view: model.render_range, }, add_overlay=>k::Button{ set_label:"Add", diff --git a/src/render/imp.rs b/src/render/imp.rs index 41960b8..3b85b84 100644 --- a/src/render/imp.rs +++ b/src/render/imp.rs @@ -30,7 +30,7 @@ impl Default for RenderMotion { #[derive(Default)] pub struct RenderStatus { - pub(super) window_size: (i32, i32), + pub(super) window_size: Option<(i32, i32)>, pub(super) scale_rate: Option, pub(super) pointer_location: WindowCoord, pub(super) motion: RenderMotion, @@ -91,7 +91,8 @@ impl WidgetImpl for Render {} impl GLAreaImpl for Render { fn resize(&self, width: i32, height: i32) { - self.status.borrow_mut().window_size = (width, height); + self.status.borrow_mut().window_size = Some((width, height)); + println!("resize: {}, {}", width, height); self.ensure_canvas(); let mut canvas = self.canvas.borrow_mut(); let canvas = canvas.as_mut().unwrap(); @@ -118,6 +119,8 @@ impl GLAreaImpl for Render { } fn render(&self, context: >k::gdk::GLContext) -> bool { + + println!("render"); self.ensure_canvas(); let configs = self.config.borrow(); { @@ -222,7 +225,7 @@ impl Render { } pub(super) fn window_size(&self) -> Option<(i32, i32)> { - Some(self.status.borrow().window_size) + self.status.borrow().window_size } pub(super) fn window_range(&self) -> Option<((f64, f64), (f64, f64))> { @@ -290,4 +293,15 @@ impl Render { let (_, h) = self.window_size().unwrap(); (x, h as f32 - y) } + + pub(super) fn set_view(&self, range: (f64, f64, f64, f64)) { + println!("set_view"); + let (lat1, lat2, lon1, lon2) = range; + if let Some((w, h)) = self.window_size() { + println!("w:{}, h:{}", w, h); + let scale = ((lat1 - lat2).abs() / h as f64).max((lon1 - lon2).abs() / w as f64); + self.status.borrow_mut().scale_rate.replace(scale); + self.set_translation((lat1, lon1)); + } + } } diff --git a/src/render/mod.rs b/src/render/mod.rs index 2778a25..9be8bff 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -46,7 +46,7 @@ impl Render { clone!( @weak this as r => move |_context, x, y| { r.update_status(|s| { let dpi = r.scale_factor(); - let (_,h) = s.window_size; + let (_,h) = s.window_size.unwrap(); s.pointer_location = (x as f32 * dpi as f32, h as f32 - y as f32 * dpi as f32); }); } @@ -193,12 +193,8 @@ impl Render { CMS::new(new_mapper, (500.0, 500.0)) } - pub fn set_range(&self, range: (f64, f64, f64, f64)) { - let (lat1, lat2, lon1, lon2) = range; - let mut mapper = self.imp().mapper.borrow_mut(); - println!("set range: {:?}", range); - mapper.set_lat_range(lat1..lat2); - mapper.set_lon_range(lon1..lon2); + pub fn set_view(&self, range: (f64, f64, f64, f64)) { + self.imp().set_view(range); self.queue_render(); } }