Introduce center widget helper
... and also make `center_x` and `center_y` set `width` and `height` to `Length::Fill`, respectively. This targets the most common use case when centering things and removes a bunch of boilerplate as a result.
This commit is contained in:
parent
1cefe6be21
commit
15057a05c1
38 changed files with 249 additions and 339 deletions
|
|
@ -539,10 +539,10 @@ impl Engine {
|
|||
pub fn draw_image(
|
||||
&mut self,
|
||||
image: &Image,
|
||||
transformation: Transformation,
|
||||
pixels: &mut tiny_skia::PixmapMut<'_>,
|
||||
clip_mask: &mut tiny_skia::Mask,
|
||||
clip_bounds: Rectangle,
|
||||
_transformation: Transformation,
|
||||
_pixels: &mut tiny_skia::PixmapMut<'_>,
|
||||
_clip_mask: &mut tiny_skia::Mask,
|
||||
_clip_bounds: Rectangle,
|
||||
) {
|
||||
match image {
|
||||
#[cfg(feature = "image")]
|
||||
|
|
@ -552,19 +552,19 @@ impl Engine {
|
|||
bounds,
|
||||
rotation,
|
||||
} => {
|
||||
let physical_bounds = *bounds * transformation;
|
||||
let physical_bounds = *bounds * _transformation;
|
||||
|
||||
if !clip_bounds.intersects(&physical_bounds) {
|
||||
if !_clip_bounds.intersects(&physical_bounds) {
|
||||
return;
|
||||
}
|
||||
|
||||
let clip_mask = (!physical_bounds.is_within(&clip_bounds))
|
||||
.then_some(clip_mask as &_);
|
||||
let clip_mask = (!physical_bounds.is_within(&_clip_bounds))
|
||||
.then_some(_clip_mask as &_);
|
||||
|
||||
let center = physical_bounds.center();
|
||||
let radians = f32::from(*rotation);
|
||||
|
||||
let transform = into_transform(transformation).post_rotate_at(
|
||||
let transform = into_transform(_transformation).post_rotate_at(
|
||||
radians.to_degrees(),
|
||||
center.x,
|
||||
center.y,
|
||||
|
|
@ -574,7 +574,7 @@ impl Engine {
|
|||
handle,
|
||||
*filter_method,
|
||||
*bounds,
|
||||
pixels,
|
||||
_pixels,
|
||||
transform,
|
||||
clip_mask,
|
||||
);
|
||||
|
|
@ -586,19 +586,19 @@ impl Engine {
|
|||
bounds,
|
||||
rotation,
|
||||
} => {
|
||||
let physical_bounds = *bounds * transformation;
|
||||
let physical_bounds = *bounds * _transformation;
|
||||
|
||||
if !clip_bounds.intersects(&physical_bounds) {
|
||||
if !_clip_bounds.intersects(&physical_bounds) {
|
||||
return;
|
||||
}
|
||||
|
||||
let clip_mask = (!physical_bounds.is_within(&clip_bounds))
|
||||
.then_some(clip_mask as &_);
|
||||
let clip_mask = (!physical_bounds.is_within(&_clip_bounds))
|
||||
.then_some(_clip_mask as &_);
|
||||
|
||||
let center = physical_bounds.center();
|
||||
let radians = f32::from(*rotation);
|
||||
|
||||
let transform = into_transform(transformation).post_rotate_at(
|
||||
let transform = into_transform(_transformation).post_rotate_at(
|
||||
radians.to_degrees(),
|
||||
center.x,
|
||||
center.y,
|
||||
|
|
@ -608,7 +608,7 @@ impl Engine {
|
|||
handle,
|
||||
*color,
|
||||
physical_bounds,
|
||||
pixels,
|
||||
_pixels,
|
||||
transform,
|
||||
clip_mask,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ pub use geometry::Geometry;
|
|||
|
||||
use crate::core::renderer;
|
||||
use crate::core::{
|
||||
Background, Color, Font, Pixels, Point, Radians, Rectangle, Transformation,
|
||||
Background, Color, Font, Pixels, Point, Rectangle, Transformation,
|
||||
};
|
||||
use crate::engine::Engine;
|
||||
use crate::graphics::compositor;
|
||||
|
|
@ -377,7 +377,7 @@ impl core::image::Renderer for Renderer {
|
|||
handle: Self::Handle,
|
||||
filter_method: core::image::FilterMethod,
|
||||
bounds: Rectangle,
|
||||
rotation: Radians,
|
||||
rotation: core::Radians,
|
||||
) {
|
||||
let (layer, transformation) = self.layers.current_mut();
|
||||
layer.draw_image(
|
||||
|
|
@ -404,7 +404,7 @@ impl core::svg::Renderer for Renderer {
|
|||
handle: core::svg::Handle,
|
||||
color: Option<Color>,
|
||||
bounds: Rectangle,
|
||||
rotation: Radians,
|
||||
rotation: core::Radians,
|
||||
) {
|
||||
let (layer, transformation) = self.layers.current_mut();
|
||||
layer.draw_svg(handle, color, bounds, transformation, rotation);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue