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>) -> TransformHandles
pub fn new(value: Binding<BoxTransform>) -> TransformHandles
Handles bound to value, in the units of its space.
Sourcepub fn keep_proportions(self, keep: bool) -> TransformHandles
pub fn keep_proportions(self, keep: bool) -> TransformHandles
Whether the corners keep the proportions unless Shift is held (they do by default).
Sourcepub fn aspect(self, aspect: Option<f32>) -> TransformHandles
pub fn aspect(self, aspect: Option<f32>) -> TransformHandles
Holds this width over height for every handle.
Sourcepub fn confined(self, confined: bool) -> TransformHandles
pub fn confined(self, confined: bool) -> TransformHandles
Keeps the whole box inside the content (it may leave by default).
Sourcepub fn min_size(self, pixels: f32) -> TransformHandles
pub fn min_size(self, pixels: f32) -> TransformHandles
The smallest side, in logical pixels on screen at the current zoom (12 by default).
Sourcepub fn rotatable(self, rotatable: bool) -> TransformHandles
pub fn rotatable(self, rotatable: bool) -> TransformHandles
Whether it can be turned by the handle above it (it can by default).
Sourcepub fn rotate_outside(self, rotate: bool) -> TransformHandles
pub fn rotate_outside(self, rotate: bool) -> TransformHandles
Whether a drag outside the box turns it as well (it does not by default).
Sourcepub fn pivot_handle(self, show: bool) -> TransformHandles
pub fn pivot_handle(self, show: bool) -> TransformHandles
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,
) -> TransformHandles
pub fn on_commit( self, handler: impl Fn(BoxTransform) + 'static, ) -> TransformHandles
Runs handler with the result when a drag ends or a key changes it: one step to undo.
Sourcepub fn disabled(self, disabled: bool) -> TransformHandles
pub fn disabled(self, disabled: bool) -> TransformHandles
Takes no input while disabled, which leaves the pointer to what is underneath.
Source§impl TransformHandles
impl TransformHandles
Sourcepub fn size(self, width: f32, height: f32) -> TransformHandles
pub fn size(self, width: f32, height: f32) -> TransformHandles
Fixed size in logical pixels, instead of taking the free space.
Sourcepub fn grow(self, grow: f32) -> TransformHandles
pub fn grow(self, grow: f32) -> TransformHandles
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) -> TransformHandles
pub fn stage(self, stage: impl View + 'static) -> TransformHandles
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) -> TransformHandles
pub fn space(self, space: ContentSpace) -> TransformHandles
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§
impl<T> AutoreleaseSafe for Twhere
T: ?Sized,
impl<T> AutoreleaseSafe for Twhere
T: ?Sized,
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
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
impl<T> ErasedDestructor for Twhere
T: 'static,
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T, U> ToSample<U> for Twhere
U: FromSample<T>,
impl<T, U> ToSample<U> for Twhere
U: FromSample<T>,
fn to_sample_(self) -> U
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.