Update to druid's pointer events branch #41

Open
enrico wants to merge 11 commits from pointer_events into master
1 changed files with 14 additions and 13 deletions
Showing only changes of commit f79b0d21e7 - Show all commits

View File

@ -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);