render rebuild

This commit is contained in:
Tsuki 2024-01-25 20:24:36 +08:00
parent 87bb8e6c95
commit 0af39648c0
3 changed files with 21 additions and 11 deletions

View File

@ -70,7 +70,7 @@ impl Component for MonitorModel {
#[track = "model.changed(MonitorModel::render_cfg())"] #[track = "model.changed(MonitorModel::render_cfg())"]
set_cfg: model.render_cfg, set_cfg: model.render_cfg,
#[track = "model.changed(MonitorModel::render_range())"] #[track = "model.changed(MonitorModel::render_range())"]
set_range: model.render_range, set_view: model.render_range,
}, },
add_overlay=&gtk::Button{ add_overlay=&gtk::Button{
set_label:"Add", set_label:"Add",

View File

@ -30,7 +30,7 @@ impl Default for RenderMotion {
#[derive(Default)] #[derive(Default)]
pub struct RenderStatus { pub struct RenderStatus {
pub(super) window_size: (i32, i32), pub(super) window_size: Option<(i32, i32)>,
pub(super) scale_rate: Option<f64>, pub(super) scale_rate: Option<f64>,
pub(super) pointer_location: WindowCoord, pub(super) pointer_location: WindowCoord,
pub(super) motion: RenderMotion, pub(super) motion: RenderMotion,
@ -91,7 +91,8 @@ impl WidgetImpl for Render {}
impl GLAreaImpl for Render { impl GLAreaImpl for Render {
fn resize(&self, width: i32, height: i32) { 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(); self.ensure_canvas();
let mut canvas = self.canvas.borrow_mut(); let mut canvas = self.canvas.borrow_mut();
let canvas = canvas.as_mut().unwrap(); let canvas = canvas.as_mut().unwrap();
@ -118,6 +119,8 @@ impl GLAreaImpl for Render {
} }
fn render(&self, context: &gtk::gdk::GLContext) -> bool { fn render(&self, context: &gtk::gdk::GLContext) -> bool {
println!("render");
self.ensure_canvas(); self.ensure_canvas();
let configs = self.config.borrow(); let configs = self.config.borrow();
{ {
@ -222,7 +225,7 @@ impl Render {
} }
pub(super) fn window_size(&self) -> Option<(i32, i32)> { 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))> { pub(super) fn window_range(&self) -> Option<((f64, f64), (f64, f64))> {
@ -290,4 +293,15 @@ impl Render {
let (_, h) = self.window_size().unwrap(); let (_, h) = self.window_size().unwrap();
(x, h as f32 - y) (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));
}
}
} }

View File

@ -46,7 +46,7 @@ impl Render {
clone!( @weak this as r => move |_context, x, y| { clone!( @weak this as r => move |_context, x, y| {
r.update_status(|s| { r.update_status(|s| {
let dpi = r.scale_factor(); 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); 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)) CMS::new(new_mapper, (500.0, 500.0))
} }
pub fn set_range(&self, range: (f64, f64, f64, f64)) { pub fn set_view(&self, range: (f64, f64, f64, f64)) {
let (lat1, lat2, lon1, lon2) = range; self.imp().set_view(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);
self.queue_render(); self.queue_render();
} }
} }