Fix viewport.rect to view_size + view_origin
This commit is contained in:
parent
bcfc5a55ad
commit
f79b0d21e7
|
|
@ -104,7 +104,8 @@ impl CanvasWidget {
|
||||||
CanvasWidget {
|
CanvasWidget {
|
||||||
viewport: Viewport {
|
viewport: Viewport {
|
||||||
content_size: Size::new(0.0, 0.0),
|
content_size: Size::new(0.0, 0.0),
|
||||||
rect: druid::Rect::new(0.0, 0.0, 0.0, 0.0),
|
view_origin: Point::new(0.0, 0.0),
|
||||||
|
view_size: Size::new(0.0, 0.0),
|
||||||
},
|
},
|
||||||
widget_size: Size::new(0.0, 0.0),
|
widget_size: Size::new(0.0, 0.0),
|
||||||
scroll_component: ScrollComponent::new(),
|
scroll_component: ScrollComponent::new(),
|
||||||
|
|
@ -112,11 +113,10 @@ impl CanvasWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn widget_to_viewport(&self) -> Affine {
|
fn widget_to_viewport(&self) -> Affine {
|
||||||
let viewport_rect_size = self.viewport.rect.size();
|
if !self.viewport.view_size.is_empty() && !self.widget_size.is_empty() {
|
||||||
if !viewport_rect_size.is_empty() && !self.widget_size.is_empty() {
|
let scale_x = self.viewport.view_size.width / self.widget_size.width;
|
||||||
let scale_x = viewport_rect_size.width / self.widget_size.width;
|
let scale_y = self.viewport.view_size.height / self.widget_size.height;
|
||||||
let scale_y = viewport_rect_size.height / self.widget_size.height;
|
Affine::translate(self.viewport.view_origin.to_vec2())
|
||||||
Affine::translate(self.viewport.rect.origin().to_vec2())
|
|
||||||
* Affine::scale_non_uniform(scale_x, scale_y)
|
* Affine::scale_non_uniform(scale_x, scale_y)
|
||||||
} else {
|
} else {
|
||||||
Affine::scale(1.0) // identity
|
Affine::scale(1.0) // identity
|
||||||
|
|
@ -189,7 +189,7 @@ impl Widget<CanvasState> for CanvasWidget {
|
||||||
data.handle_event(ctx, event, self.widget_to_viewport(), env);
|
data.handle_event(ctx, event, self.widget_to_viewport(), env);
|
||||||
}
|
}
|
||||||
if let Some(transform) = viewport_transform {
|
if let Some(transform) = viewport_transform {
|
||||||
let mut new_rect = transform.transform_rect_bbox(self.viewport.rect);
|
let mut new_rect = transform.transform_rect_bbox(self.viewport.view_rect());
|
||||||
if new_rect.x0 <= 0f64 {
|
if new_rect.x0 <= 0f64 {
|
||||||
new_rect.x1 -= new_rect.x0;
|
new_rect.x1 -= new_rect.x0;
|
||||||
new_rect.x0 = 0f64;
|
new_rect.x0 = 0f64;
|
||||||
|
|
@ -198,7 +198,7 @@ impl Widget<CanvasState> for CanvasWidget {
|
||||||
new_rect.y1 -= new_rect.y0;
|
new_rect.y1 -= new_rect.y0;
|
||||||
new_rect.y0 = 0f64;
|
new_rect.y0 = 0f64;
|
||||||
}
|
}
|
||||||
self.viewport.rect = new_rect;
|
self.viewport.view_origin = new_rect.origin();
|
||||||
self.scroll_component
|
self.scroll_component
|
||||||
.reset_scrollbar_fade(|d| ctx.request_timer(d), env);
|
.reset_scrollbar_fade(|d| ctx.request_timer(d), env);
|
||||||
ctx.request_paint();
|
ctx.request_paint();
|
||||||
|
|
@ -267,13 +267,14 @@ impl Widget<CanvasState> for CanvasWidget {
|
||||||
|
|
||||||
let page_content_size = data.versioned_canvas.get().content_size();
|
let page_content_size = data.versioned_canvas.get().content_size();
|
||||||
let transform = self.widget_to_viewport();
|
let transform = self.widget_to_viewport();
|
||||||
self.viewport.rect =
|
//self.viewport.rect =
|
||||||
transform.transform_rect_bbox(rect)
|
// transform.transform_rect_bbox(rect)
|
||||||
.with_origin(self.viewport.rect.origin());
|
// .with_origin(self.viewport.rect.origin());
|
||||||
|
self.viewport.view_size = transform.transform_rect_bbox(rect).size();
|
||||||
|
|
||||||
self.viewport.content_size = druid::Size::new(
|
self.viewport.content_size = druid::Size::new(
|
||||||
self.viewport.rect.x1.max(page_content_size.width),
|
self.viewport.view_rect().x1.max(page_content_size.width),
|
||||||
self.viewport.rect.y1.max(page_content_size.height),
|
self.viewport.view_rect().y1.max(page_content_size.height),
|
||||||
);
|
);
|
||||||
//log::debug!("{:#?}", &self.viewport);
|
//log::debug!("{:#?}", &self.viewport);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue