pub struct TransformHandles { /* private fields */ }Expand description
Eight handles around a box, one that turns it and the point it turns around, drawn over
content in the units of a ContentSpace. It edits a BoxTransform and draws nothing but
the box: the renderer cannot turn a picture, so applying the geometry is up to whoever owns it.
A corner keeps the proportions and Shift lets go of them, Alt resizes around the pivot, and Shift holds a turn to steps of 15 degrees. Escape cancels a drag, and a double click on the pivot puts it back in the middle.
Keyboard: the arrows move it, with Alt they resize it, [ and ] turn it, and Shift makes
each of these go further.
CursorIcon has no diagonal cursors, so the corners show the pointing hand. While dragging
it paints without a build, so it costs no rebuilds if nothing else reads the value.
use ravenrs_core::{Rect, Size};
use ravenrs_reactive::State;
use ravenrs_widgets::{BoxTransform, ContentSpace, TransformHandles};
let layer = State::new(BoxTransform::new(Rect::new(100.0, 80.0, 300.0, 200.0)).rotated(10.0));
let handles = TransformHandles::new(layer.binding())
.space(ContentSpace::Fit(Size::new(1200.0, 800.0)))
.size(600.0, 400.0);Implementations§
Source§impl TransformHandles
impl TransformHandles
Sourcepub fn new(value: Binding<BoxTransform>) -> Self
pub fn new(value: Binding<BoxTransform>) -> Self
Handles bound to value, in the units of its space.
Sourcepub fn keep_proportions(self, keep: bool) -> Self
pub fn keep_proportions(self, keep: bool) -> Self
Whether the corners keep the proportions unless Shift is held (they do by default).
Sourcepub fn aspect(self, aspect: Option<f32>) -> Self
pub fn aspect(self, aspect: Option<f32>) -> Self
Holds this width over height for every handle.
Sourcepub fn confined(self, confined: bool) -> Self
pub fn confined(self, confined: bool) -> Self
Keeps the whole box inside the content (it may leave by default).
Sourcepub fn min_size(self, pixels: f32) -> Self
pub fn min_size(self, pixels: f32) -> Self
The smallest side, in logical pixels on screen at the current zoom (12 by default).
Sourcepub fn rotatable(self, rotatable: bool) -> Self
pub fn rotatable(self, rotatable: bool) -> Self
Whether it can be turned by the handle above it (it can by default).
Sourcepub fn rotate_outside(self, rotate: bool) -> Self
pub fn rotate_outside(self, rotate: bool) -> Self
Whether a drag outside the box turns it as well (it does not by default).
Sourcepub fn pivot_handle(self, show: bool) -> Self
pub fn pivot_handle(self, show: bool) -> Self
Whether the point it turns around shows and can be moved (it does by default).
Sourcepub fn on_commit(self, handler: impl Fn(BoxTransform) + 'static) -> Self
pub fn on_commit(self, handler: impl Fn(BoxTransform) + 'static) -> Self
Runs handler with the result when a drag ends or a key changes it: one step to undo.
Source§impl TransformHandles
impl TransformHandles
Sourcepub fn size(self, width: f32, height: f32) -> Self
pub fn size(self, width: f32, height: f32) -> Self
Fixed size in logical pixels, instead of taking the free space.
Sourcepub fn grow(self, grow: f32) -> Self
pub fn grow(self, grow: f32) -> Self
How much of the free space along the parent stack it takes: 1 by default, or 0 over a stage, which then decides the size.
Sourcepub fn stage(self, stage: impl View + 'static) -> Self
pub fn stage(self, stage: impl View + 'static) -> Self
The view it goes over, such as an Image or a
ZoomPanView, which gives it its size. Without one, put it in
a ZStack with a fixed size.
Sourcepub fn space(self, space: ContentSpace) -> Self
pub fn space(self, space: ContentSpace) -> Self
Where the content is, and so the units of its coordinates: by default, its own box.
Trait Implementations§
Source§impl Debug for TransformHandles
impl Debug for TransformHandles
Auto Trait Implementations§
impl !RefUnwindSafe for TransformHandles
impl !Send for TransformHandles
impl !Sync for TransformHandles
impl !UnwindSafe for TransformHandles
impl Freeze for TransformHandles
impl Unpin for TransformHandles
impl UnsafeUnpin for TransformHandles
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<T> ErasedDestructor for Twhere
T: 'static,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<V> ViewExt for Vwhere
V: View,
impl<V> ViewExt for Vwhere
V: View,
Source§fn padding(self, padding: impl Into<Insets>) -> Styled<Self>
fn padding(self, padding: impl Into<Insets>) -> Styled<Self>
Source§fn background(self, fill: impl Into<Fill>) -> Styled<Self>
fn background(self, fill: impl Into<Fill>) -> Styled<Self>
Source§fn frame(self, width: Option<f32>, height: Option<f32>) -> Styled<Self>
fn frame(self, width: Option<f32>, height: Option<f32>) -> Styled<Self>
None keeps the content size.