render rebuild
This commit is contained in:
parent
87bb8e6c95
commit
0af39648c0
@ -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=>k::Button{
|
add_overlay=>k::Button{
|
||||||
set_label:"Add",
|
set_label:"Add",
|
||||||
|
|||||||
@ -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: >k::gdk::GLContext) -> bool {
|
fn render(&self, context: >k::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));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user