pub struct PanZoomWidget { /* private fields */ }Expand description
A pan/zoom viewport over one child — a node-and-edge graph, a map, a large
image — without hand-rolling the gesture math. pan_zoom lays its child
out at its natural size and places it under a scale-then-translate
transform (PanZoomTransform) the user drives: primary drag pans (unless
the child claims the press), a touch pinch or a desktop ctrl/⌘+wheel and
trackpad pinch zooms about the gesture’s focal point, clamped to
.min_scale/.max_scale. A plain wheel still reaches the child, and the
child sees its own unscaled local coordinates at any zoom. Flat-re-exported
from frust-widgets so app code never names that crate directly; see
PanZoomView’s own doc for the full contract (.inertia glide,
.on_transform notification, and the PanZoomController handle’s
jump_to/fit_to_bounds/fit_rect).
use frust::authoring::{PaintCtx, PaintScene};
use frust::{AnyView, Component, PanZoomController, PanZoomTransform, any, canvas, pan_zoom};
use kurbo::{Point, Size};
use peniko::Color;
#[derive(Default)]
struct Board;
struct BoardState {
zoom: PanZoomController,
transform: PanZoomTransform,
}
impl Component for Board {
type State = BoardState;
fn init(&self) -> Self::State {
BoardState {
zoom: PanZoomController::new(),
transform: PanZoomTransform::IDENTITY,
}
}
fn build(&self, state: &mut Self::State) -> AnyView<Self::State> {
let board = canvas(|scene: &mut dyn PaintScene, size: Size, _ctx: &PaintCtx| {
scene.fill_rect(Point::ZERO, size, Color::from_rgb8(0x20, 0x20, 0x20));
})
.size(Size::new(2000.0, 1500.0));
any(pan_zoom(board)
.max_scale(4.0)
.inertia(true)
.controller(state.zoom.clone())
.on_transform(|state: &mut BoardState, t| state.transform = t))
}
}
frust::app!(Board);The retained widget for a PanZoomView.
Implementations§
Source§impl PanZoomWidget
impl PanZoomWidget
Sourcepub fn transform(&self) -> PanZoomTransform
pub fn transform(&self) -> PanZoomTransform
The transform the child is currently placed under.
Trait Implementations§
Source§impl Widget for PanZoomWidget
impl Widget for PanZoomWidget
Source§fn layout(&mut self, ctx: &mut LayoutCtx<'_>, bc: &BoxConstraints) -> Size
fn layout(&mut self, ctx: &mut LayoutCtx<'_>, bc: &BoxConstraints) -> Size
bc and return it. The chosen size must satisfy
bc (callers may additionally clamp via BoxConstraints::constrain).Source§fn paint(&mut self, ctx: &mut PaintCtx<'_>, scene: &mut dyn PaintScene)
fn paint(&mut self, ctx: &mut PaintCtx<'_>, scene: &mut dyn PaintScene)
scene. Read moreSource§fn event(&mut self, ctx: &mut EventCtx<'_>, event: &InputEvent) -> EventResult
fn event(&mut self, ctx: &mut EventCtx<'_>, event: &InputEvent) -> EventResult
ctx and reporting whether it was consumed. Read moreSource§fn semantics(&self, ctx: &mut SemanticsCtx)
fn semantics(&self, ctx: &mut SemanticsCtx)
ctx. Read moreSource§fn visit_children(&self, visitor: &mut dyn FnMut(&ChildPod))
fn visit_children(&self, visitor: &mut dyn FnMut(&ChildPod))
Auto Trait Implementations§
impl !Freeze for PanZoomWidget
impl !RefUnwindSafe for PanZoomWidget
impl !Send for PanZoomWidget
impl !Sync for PanZoomWidget
impl !UnwindSafe for PanZoomWidget
impl Unpin for PanZoomWidget
impl UnsafeUnpin for PanZoomWidget
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.