Expand description
Scroll widgets, commands and properties.
The Scroll! widget accepts a single child of any size, overflow is clipped and can be brought
into view by scrolling, the widget also supports content zooming and panning. The
mode property can be used to dynamically change the ScrollMode.
use zng::prelude::*;
Scroll! {
// ZOOM includes PAN that includes VERTICAL and HORIZONTAL
mode = zng::scroll::ScrollMode::ZOOM;
// mouse press and drag scrolls
mouse_pan = true;
child = Image! {
// center_viewport uses the SCROLL service
img_loading_fn = wgt_fn!(|_| center_viewport(Text!("loading..")));
// content is a large image
source = "https://upload.wikimedia.org/wikipedia/commons/e/ea/Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg";
img_limits = zng::image::ImageLimits::none();
img_downscale = zng::image::ImageDownscale::from(layout::Px(8000));
};
}
fn center_viewport(msg: impl IntoUiNode) -> UiNode {
use zng::scroll::SCROLL;
Container! {
// center the message on the scroll viewport:
//
// the large images can take a moment to decode in debug builds, but the size
// is already known after read, so the "loading.." message ends-up off-screen
// because it is centered on the image.
layout::x = merge_var!(SCROLL.horizontal_offset(), SCROLL.zoom_scale(), |&h, &s| h.0.fct_l()
- 1.vw() / s * h);
layout::y = merge_var!(SCROLL.vertical_offset(), SCROLL.zoom_scale(), |&v, &s| v.0.fct_l() - 1.vh() / s * v);
layout::scale = SCROLL.zoom_scale().map(|&fct| 1.fct() / fct);
layout::transform_origin = 0;
widget::auto_hide = false;
layout::max_size = (1.vw(), 1.vh());
child_align = Align::CENTER;
child = msg;
}
}The example above declares a scroll with zoom and mouse pan features enabled, is also makes use of the SCROLL service
to implement the center_viewport widget that is place in the content, but transforms to always be in the viewport.
The SCROLL service can be used to interact with the parent Scroll!, you can also use commands in cmd to
control any Scroll! widget.
§Full API
See zng_wgt_scroll for the full widget API.
Modules§
Structs§
- SCROLL
- Controls the parent scroll.
- Scroll
WA container that can pan and zoom a child of any size.- Scroll
BarArgs - Arguments for scrollbar widget functions.
- Scroll
Info - Shared reference to the viewport bounds of a scroll.
- Scroll
Mode - What dimensions are scrollable in a widget.
- Scroll
Units Mix mProperties that define scroll units.- Scrollbar
WScrollbar widget.- Scrollbar
FnMix mProperties that defines the scrollbar widget used in scrolls.- Smooth
Scrolling - Smooth scrolling config.
- Thumb
WScrollbar thumb widget.
Enums§
- Lazy
Mode - Lazy init mode of a widget.
- Scroll
From - Defines a scroll delta and to what value source it is applied.
- Zoom
ToFit Mode - Defines how the scale is changed by the
ZOOM_TO_FIT_CMD.
Traits§
- Widget
Info Ext - Scroll extensions for
WidgetInfo.
Functions§
- alt_
factor PScroll unit multiplier used when alternate scrolling.- auto_
hide_ extra PExtra space added to the viewport auto-hide rectangle.- clip_
to_ viewport BClip content to only be visible within the viewport, not under scrollbars.- define_
viewport_ unit PIf the scroll defines its viewport size as theLayoutMetrics::viewportfor the scroll content.- h_
line_ unit PHorizontal offset added when theSCROLL_RIGHT_CMDruns and removed when theSCROLL_LEFT_CMDruns.- h_
page_ unit PHorizontal offset added when thePAGE_RIGHT_CMDruns and removed when thePAGE_LEFT_CMDruns.- h_
scrollbar_ fn PHorizontal scrollbar function for all scroll widget descendants.- h_
wheel_ unit PHorizontal offset added when the mouse wheel is scrolling by lines.- lazy
PEnables lazy init for the widget.- line_
units PHorizontal and vertical offsets used when scrolling.- max_
zoom PMaximum scale allowed whenScrollMode::ZOOMis enabled.- min_
zoom PMinimum scale allowed whenScrollMode::ZOOMis enabled.- mode
BScroll mode.- mouse_
pan PScroll by grabbing and dragging the content with the mouse primary button.- overscroll_
color PColor of the overscroll indicator.- page_
units PHorizontal and vertical offsets used when page-scrolling.- scroll_
to_ focused_ mode PScroll-to mode used by scroll widgets when scrolling to make the focused child visible.- scrollbar_
fn PScrollbar function for both orientations applicable to all scroll widget descendants.- scrollbar_
joiner_ fn PWidget function for the little square in the corner that joins the two scrollbars when both are visible.- smooth_
scrolling PSmooth scrolling config.- v_
line_ unit PVertical offset added when theSCROLL_DOWN_CMDruns and removed when theSCROLL_UP_CMDruns.- v_
page_ unit PVertical offset added when thePAGE_DOWN_CMDruns and removed when thePAGE_UP_CMDruns.- v_
scrollbar_ fn PVertical scrollbar function for all scroll widget descendants.- v_
wheel_ unit PVertical offset added when the mouse wheel is scrolling by lines.- wheel_
units PHorizontal and vertical offsets used when mouse wheel scrolling.- zoom_
origin PCenter point of zoom scaling done using mouse scroll wheel and touch gesture.- zoom_
size_ only PSet on an descendant ofScroll!to resize the widget instead of scaling it with the scroll zoom.- zoom_
to_ fit_ mode PDefines how the scale is changed to fit the content to the viewport.- zoom_
touch_ origin PCenter point of zoom scaling done using the touch pinch gesture.- zoom_
wheel_ origin PCenter point of zoom scaling done using the mouse scroll wheel.- zoom_
wheel_ unit PScale delta added when the mouse wheel is zooming by lines.