Struct ImageGeometry
#[non_exhaustive]pub struct ImageGeometry {
pub source: (u32, u32),
pub orientation: ImageOrientation,
pub content: Rect,
pub bounds: Rect,
}Expand description
The placement of a source raster in a widget’s box, and the mapping between the box’s points and the source’s pixels.
compute places it; snapped moves the
picture’s edges onto the device-pixel grid. A widget computes it once per
layout, paints from it and maps input through it, so the pixel under the
pointer is the pixel drawn there.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.source: (u32, u32)The source size in pixels, before orientation.
orientation: ImageOrientationHow the source is turned for display.
content: RectWhere the whole displayed picture lies, widget-local. It exceeds
bounds where the fit crops.
bounds: RectThe widget’s box, widget-local: its origin is (0, 0).
Implementations§
§impl ImageGeometry
impl ImageGeometry
pub fn new(
source: (u32, u32),
orientation: ImageOrientation,
content: Rect,
bounds: Rect,
) -> ImageGeometry
pub fn new( source: (u32, u32), orientation: ImageOrientation, content: Rect, bounds: Rect, ) -> ImageGeometry
A placement computed elsewhere: content is where the whole
displayed picture lies inside bounds, both widget-local.
pub fn compute(
bounds: Size,
source: (u32, u32),
fit: ImageFit,
alignment: Alignment,
rtl: bool,
orientation: ImageOrientation,
) -> ImageGeometry
pub fn compute( bounds: Size, source: (u32, u32), fit: ImageFit, alignment: Alignment, rtl: bool, orientation: ImageOrientation, ) -> ImageGeometry
A source-sized raster turned by orientation and fitted into a box
of size bounds by fit, placed by alignment (rtl resolving
Leading and Trailing). Not snapped.
pub fn snapped(self, to_device: Transform2D) -> ImageGeometry
pub fn snapped(self, to_device: Transform2D) -> ImageGeometry
The same placement with the picture’s four edges moved to the nearest device-pixel boundary.
to_device maps a widget-local point to device pixels: the widget’s
window origin, any transform its ancestors apply, then the HiDPI
scale. Snapping applies only when that keeps edges on edges, a
transform with no rotation or shear; any other returns the placement
unchanged. An edge moves by at most half a device pixel, and an axis
snapping would collapse keeps its unsnapped edges. Snapping twice
changes nothing more.
pub fn snaps_under(to_device: Transform2D) -> bool
pub fn snaps_under(to_device: Transform2D) -> bool
Whether snapped moves edges under to_device: a
transform with no rotation or shear, and a finite scale other than
zero on both axes. A placement is the same under any two transforms
it does not snap under.
pub fn visible(&self) -> Option<Rect>
pub fn visible(&self) -> Option<Rect>
The part of the picture inside the box, widget-local; None when the
two do not overlap.
pub fn map_to_source(&self, local: Point) -> Option<(u32, u32)>
pub fn map_to_source(&self, local: Point) -> Option<(u32, u32)>
The source pixel whose displayed square contains local, or None
on the letterbox, outside the box, or with nothing to show.
pub fn map_to_source_clamped(&self, local: Point) -> Option<(u32, u32)>
pub fn map_to_source_clamped(&self, local: Point) -> Option<(u32, u32)>
The source pixel nearest local: the point is clamped into the
picture first. None only with nothing to show.
pub fn map_to_source_f32(&self, local: Point) -> Option<(f32, f32)>
pub fn map_to_source_f32(&self, local: Point) -> Option<(f32, f32)>
Continuous source coordinates of local, unclamped: pixel k spans
[k, k + 1). None only with nothing to show.
pub fn map_from_source(&self, rect: PixelRect) -> Option<Rect>
pub fn map_from_source(&self, rect: PixelRect) -> Option<Rect>
Where the source pixels of rect are displayed, widget-local: the
bounding box of their displayed squares. None when rect is empty
or does not lie inside the source.
Trait Implementations§
§impl Clone for ImageGeometry
impl Clone for ImageGeometry
§fn clone(&self) -> ImageGeometry
fn clone(&self) -> ImageGeometry
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ImageGeometry
§impl Debug for ImageGeometry
impl Debug for ImageGeometry
§impl PartialEq for ImageGeometry
impl PartialEq for ImageGeometry
impl StructuralPartialEq for ImageGeometry
Auto Trait Implementations§
impl Freeze for ImageGeometry
impl RefUnwindSafe for ImageGeometry
impl Send for ImageGeometry
impl Sync for ImageGeometry
impl Unpin for ImageGeometry
impl UnsafeUnpin for ImageGeometry
impl UnwindSafe for ImageGeometry
Blanket Implementations§
§impl<T> AnyEq for T
impl<T> AnyEq for T
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.§impl<T> DowncastSync for T
impl<T> DowncastSync for 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<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more