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 {
viewport: Viewport {
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),
scroll_component: ScrollComponent::new(),
@ -112,11 +113,10 @@ impl CanvasWidget {
}
fn widget_to_viewport(&self) -> Affine {
let viewport_rect_size = self.viewport.rect.size();
if !viewport_rect_size.is_empty() && !self.widget_size.is_empty() {
let scale_x = viewport_rect_size.width / self.widget_size.width;
let scale_y = viewport_rect_size.height / self.widget_size.height;
Affine::translate(self.viewport.rect.origin().to_vec2())
if !self.viewport.view_size.is_empty() && !self.widget_size.is_empty() {
let scale_x = self.viewport.view_size.width / self.widget_size.width;
let scale_y = self.viewport.view_size.height / self.widget_size.height;
Affine::translate(self.viewport.view_origin.to_vec2())
* Affine::scale_non_uniform(scale_x, scale_y)
} else {
Affine::scale(1.0) // identity
@ -189,7 +189,7 @@ impl Widget<CanvasState> for CanvasWidget {
data.handle_event(ctx, event, self.widget_to_viewport(), env);
}
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 {
new_rect.x1 -= new_rect.x0;
new_rect.x0 = 0f64;
@ -198,7 +198,7 @@ impl Widget<CanvasState> for CanvasWidget {
new_rect.y1 -= new_rect.y0;
new_rect.y0 = 0f64;
}
self.viewport.rect = new_rect;
self.viewport.view_origin = new_rect.origin();
self.scroll_component
.reset_scrollbar_fade(|d| ctx.request_timer(d), env);
ctx.request_paint();
@ -267,13 +267,14 @@ impl Widget<CanvasState> for CanvasWidget {
let page_content_size = data.versioned_canvas.get().content_size();
let transform = self.widget_to_viewport();
self.viewport.rect =
transform.transform_rect_bbox(rect)
.with_origin(self.viewport.rect.origin());
//self.viewport.rect =
// transform.transform_rect_bbox(rect)
// .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.rect.x1.max(page_content_size.width),
self.viewport.rect.y1.max(page_content_size.height),
self.viewport.view_rect().x1.max(page_content_size.width),
self.viewport.view_rect().y1.max(page_content_size.height),
);
//log::debug!("{:#?}", &self.viewport);