From 5467c19c80c992f03890264ed58156305a26b19a Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 23 Oct 2023 03:13:28 +0200 Subject: Replace `Primitive::Translate` with `Transform` --- wgpu/src/geometry.rs | 11 ++++---- wgpu/src/layer.rs | 72 ++++++++++++++++++++++---------------------------- wgpu/src/layer/mesh.rs | 18 ++++++------- wgpu/src/layer/text.rs | 2 ++ wgpu/src/quad.rs | 2 +- wgpu/src/triangle.rs | 6 ++--- 6 files changed, 51 insertions(+), 60 deletions(-) (limited to 'wgpu') diff --git a/wgpu/src/geometry.rs b/wgpu/src/geometry.rs index a4d4fb1f..d0660edc 100644 --- a/wgpu/src/geometry.rs +++ b/wgpu/src/geometry.rs @@ -8,6 +8,7 @@ use crate::graphics::geometry::{ }; use crate::graphics::gradient::{self, Gradient}; use crate::graphics::mesh::{self, Mesh}; +use crate::graphics::Transformation; use crate::primitive::{self, Primitive}; use lyon::geom::euclid; @@ -435,7 +436,7 @@ impl Frame { pub fn clip(&mut self, frame: Frame, at: Point) { let size = frame.size(); let primitives = frame.into_primitives(); - let translation = Vector::new(at.x, at.y); + let transformation = Transformation::translate(at.x, at.y); let (text, meshes) = primitives .into_iter() @@ -443,12 +444,12 @@ impl Frame { self.primitives.push(Primitive::Group { primitives: vec![ - Primitive::Translate { - translation, + Primitive::Transform { + transformation, content: Box::new(Primitive::Group { primitives: meshes }), }, - Primitive::Translate { - translation, + Primitive::Transform { + transformation, content: Box::new(Primitive::Clip { bounds: Rectangle::with_size(size), content: Box::new(Primitive::Group { diff --git a/wgpu/src/layer.rs b/wgpu/src/layer.rs index e213c95f..fd5f2345 100644 --- a/wgpu/src/layer.rs +++ b/wgpu/src/layer.rs @@ -15,7 +15,7 @@ use crate::core::alignment; use crate::core::{Color, Font, Pixels, Point, Rectangle, Size, Vector}; use crate::graphics; use crate::graphics::color; -use crate::graphics::Viewport; +use crate::graphics::{Transformation, Viewport}; use crate::primitive::{self, Primitive}; use crate::quad::{self, Quad}; @@ -104,7 +104,7 @@ impl<'a> Layer<'a> { for primitive in primitives { Self::process_primitive( &mut layers, - Vector::new(0.0, 0.0), + Transformation::IDENTITY, primitive, 0, ); @@ -115,7 +115,7 @@ impl<'a> Layer<'a> { fn process_primitive( layers: &mut Vec, - translation: Vector, + transformation: Transformation, primitive: &'a Primitive, current_layer: usize, ) { @@ -130,9 +130,10 @@ impl<'a> Layer<'a> { layer.text.push(Text::Paragraph { paragraph: paragraph.clone(), - position: *position + translation, + position: *position * transformation, color: *color, - clip_bounds: *clip_bounds + translation, + clip_bounds: *clip_bounds * transformation, + scale: transformation.scale_y(), }); } Primitive::Editor { @@ -145,9 +146,10 @@ impl<'a> Layer<'a> { layer.text.push(Text::Editor { editor: editor.clone(), - position: *position + translation, + position: *position * transformation, color: *color, - clip_bounds: *clip_bounds + translation, + clip_bounds: *clip_bounds * transformation, + scale: transformation.scale_y(), }); } Primitive::Text { @@ -166,7 +168,7 @@ impl<'a> Layer<'a> { layer.text.push(Text::Cached(text::Cached { content, - bounds: *bounds + translation, + bounds: *bounds * transformation, size: *size, line_height: *line_height, color: *color, @@ -174,7 +176,7 @@ impl<'a> Layer<'a> { horizontal_alignment: *horizontal_alignment, vertical_alignment: *vertical_alignment, shaping: *shaping, - clip_bounds: *clip_bounds + translation, + clip_bounds: *clip_bounds * transformation, })); } graphics::Primitive::RawText(graphics::text::Raw { @@ -187,9 +189,9 @@ impl<'a> Layer<'a> { layer.text.push(Text::Raw(graphics::text::Raw { buffer: buffer.clone(), - position: *position + translation, + position: *position * transformation, color: *color, - clip_bounds: *clip_bounds + translation, + clip_bounds: *clip_bounds * transformation, })); } Primitive::Quad { @@ -199,12 +201,10 @@ impl<'a> Layer<'a> { shadow, } => { let layer = &mut layers[current_layer]; + let bounds = *bounds * transformation; let quad = Quad { - position: [ - bounds.x + translation.x, - bounds.y + translation.y, - ], + position: [bounds.x, bounds.y], size: [bounds.width, bounds.height], border_color: color::pack(border.color), border_radius: border.radius.into(), @@ -226,7 +226,7 @@ impl<'a> Layer<'a> { layer.images.push(Image::Raster { handle: handle.clone(), filter_method: *filter_method, - bounds: *bounds + translation, + bounds: *bounds * transformation, }); } Primitive::Svg { @@ -239,7 +239,7 @@ impl<'a> Layer<'a> { layer.images.push(Image::Vector { handle: handle.clone(), color: *color, - bounds: *bounds + translation, + bounds: *bounds * transformation, }); } Primitive::Group { primitives } => { @@ -247,7 +247,7 @@ impl<'a> Layer<'a> { for primitive in primitives { Self::process_primitive( layers, - translation, + transformation, primitive, current_layer, ); @@ -255,7 +255,7 @@ impl<'a> Layer<'a> { } Primitive::Clip { bounds, content } => { let layer = &mut layers[current_layer]; - let translated_bounds = *bounds + translation; + let translated_bounds = *bounds * transformation; // Only draw visible content if let Some(clip_bounds) = @@ -266,19 +266,19 @@ impl<'a> Layer<'a> { Self::process_primitive( layers, - translation, + transformation, content, layers.len() - 1, ); } } - Primitive::Translate { - translation: new_translation, + Primitive::Transform { + transformation: new_transformation, content, } => { Self::process_primitive( layers, - translation + *new_translation, + transformation * *new_transformation, content, current_layer, ); @@ -286,7 +286,7 @@ impl<'a> Layer<'a> { Primitive::Cache { content } => { Self::process_primitive( layers, - translation, + transformation, content, current_layer, ); @@ -296,20 +296,15 @@ impl<'a> Layer<'a> { graphics::Mesh::Solid { buffers, size } => { let layer = &mut layers[current_layer]; - let bounds = Rectangle::new( - Point::new(translation.x, translation.y), - *size, - ); + let bounds = + Rectangle::with_size(*size) * transformation; // Only draw visible content if let Some(clip_bounds) = layer.bounds.intersection(&bounds) { layer.meshes.push(Mesh::Solid { - origin: Point::new( - translation.x, - translation.y, - ), + transformation, buffers, clip_bounds, }); @@ -318,20 +313,15 @@ impl<'a> Layer<'a> { graphics::Mesh::Gradient { buffers, size } => { let layer = &mut layers[current_layer]; - let bounds = Rectangle::new( - Point::new(translation.x, translation.y), - *size, - ); + let bounds = + Rectangle::with_size(*size) * transformation; // Only draw visible content if let Some(clip_bounds) = layer.bounds.intersection(&bounds) { layer.meshes.push(Mesh::Gradient { - origin: Point::new( - translation.x, - translation.y, - ), + transformation, buffers, clip_bounds, }); @@ -340,7 +330,7 @@ impl<'a> Layer<'a> { }, primitive::Custom::Pipeline(pipeline) => { let layer = &mut layers[current_layer]; - let bounds = pipeline.bounds + translation; + let bounds = pipeline.bounds * transformation; if let Some(clip_bounds) = layer.bounds.intersection(&bounds) diff --git a/wgpu/src/layer/mesh.rs b/wgpu/src/layer/mesh.rs index 7c6206cd..af3dc74a 100644 --- a/wgpu/src/layer/mesh.rs +++ b/wgpu/src/layer/mesh.rs @@ -1,14 +1,15 @@ //! A collection of triangle primitives. -use crate::core::{Point, Rectangle}; +use crate::core::Rectangle; use crate::graphics::mesh; +use crate::graphics::Transformation; /// A mesh of triangles. #[derive(Debug, Clone, Copy)] pub enum Mesh<'a> { /// A mesh of triangles with a solid color. Solid { - /// The origin of the vertices of the [`Mesh`]. - origin: Point, + /// The [`Transformation`] for the vertices of the [`Mesh`]. + transformation: Transformation, /// The vertex and index buffers of the [`Mesh`]. buffers: &'a mesh::Indexed, @@ -18,8 +19,8 @@ pub enum Mesh<'a> { }, /// A mesh of triangles with a gradient color. Gradient { - /// The origin of the vertices of the [`Mesh`]. - origin: Point, + /// The [`Transformation`] for the vertices of the [`Mesh`]. + transformation: Transformation, /// The vertex and index buffers of the [`Mesh`]. buffers: &'a mesh::Indexed, @@ -31,11 +32,10 @@ pub enum Mesh<'a> { impl Mesh<'_> { /// Returns the origin of the [`Mesh`]. - pub fn origin(&self) -> Point { + pub fn transformation(&self) -> Transformation { match self { - Self::Solid { origin, .. } | Self::Gradient { origin, .. } => { - *origin - } + Self::Solid { transformation, .. } + | Self::Gradient { transformation, .. } => *transformation, } } diff --git a/wgpu/src/layer/text.rs b/wgpu/src/layer/text.rs index 37ee5247..2a09aecc 100644 --- a/wgpu/src/layer/text.rs +++ b/wgpu/src/layer/text.rs @@ -15,6 +15,7 @@ pub enum Text<'a> { position: Point, color: Color, clip_bounds: Rectangle, + scale: f32, }, /// An editor. #[allow(missing_docs)] @@ -23,6 +24,7 @@ pub enum Text<'a> { position: Point, color: Color, clip_bounds: Rectangle, + scale: f32, }, /// Some cached text. Cached(Cached<'a>), diff --git a/wgpu/src/quad.rs b/wgpu/src/quad.rs index cda1bec9..5a45187e 100644 --- a/wgpu/src/quad.rs +++ b/wgpu/src/quad.rs @@ -319,7 +319,7 @@ impl Uniforms { impl Default for Uniforms { fn default() -> Self { Self { - transform: *Transformation::identity().as_ref(), + transform: *Transformation::IDENTITY.as_ref(), scale: 1.0, _padding: [0.0; 3], } diff --git a/wgpu/src/triangle.rs b/wgpu/src/triangle.rs index 69270a73..28a7b1b3 100644 --- a/wgpu/src/triangle.rs +++ b/wgpu/src/triangle.rs @@ -98,12 +98,10 @@ impl Layer { let mut index_offset = 0; for mesh in meshes { - let origin = mesh.origin(); let indices = mesh.indices(); - let uniforms = Uniforms::new( - transformation * Transformation::translate(origin.x, origin.y), - ); + let uniforms = + Uniforms::new(transformation * mesh.transformation()); index_offset += self.index_buffer.write(queue, index_offset, indices); -- cgit From aa41d7656e734b5dae3c19dff87afbc74617a67f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 24 Oct 2023 02:51:02 +0200 Subject: Apply `Transform` scaling to text primitives --- wgpu/src/layer.rs | 2 +- wgpu/src/text.rs | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'wgpu') diff --git a/wgpu/src/layer.rs b/wgpu/src/layer.rs index fd5f2345..82e8ba02 100644 --- a/wgpu/src/layer.rs +++ b/wgpu/src/layer.rs @@ -169,7 +169,7 @@ impl<'a> Layer<'a> { layer.text.push(Text::Cached(text::Cached { content, bounds: *bounds * transformation, - size: *size, + size: *size * transformation.scale_y(), line_height: *line_height, color: *color, font: *font, diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs index dca09cb8..4a151073 100644 --- a/wgpu/src/text.rs +++ b/wgpu/src/text.rs @@ -124,11 +124,13 @@ impl Pipeline { vertical_alignment, color, clip_bounds, + scale, ) = match section { Text::Paragraph { position, color, clip_bounds, + scale, .. } => { use crate::core::text::Paragraph as _; @@ -145,12 +147,14 @@ impl Pipeline { paragraph.vertical_alignment(), *color, *clip_bounds, + *scale, ) } Text::Editor { position, color, clip_bounds, + scale, .. } => { use crate::core::text::Editor as _; @@ -167,6 +171,7 @@ impl Pipeline { alignment::Vertical::Top, *color, *clip_bounds, + *scale, ) } Text::Cached(text) => { @@ -186,6 +191,7 @@ impl Pipeline { text.vertical_alignment, text.color, text.clip_bounds, + 1.0, ) } Text::Raw(text) => { @@ -205,6 +211,7 @@ impl Pipeline { alignment::Vertical::Top, text.color, text.clip_bounds, + 1.0, ) } }; @@ -234,7 +241,7 @@ impl Pipeline { buffer, left, top, - scale: scale_factor, + scale: scale * scale_factor, bounds: glyphon::TextBounds { left: clip_bounds.x as i32, top: clip_bounds.y as i32, -- cgit From a6e91d13d5d43796d0e6bb570fb4f010cf27921a Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 24 Oct 2023 03:18:03 +0200 Subject: Allow only uniform scaling in `Transformation` --- wgpu/src/backend.rs | 8 ++++---- wgpu/src/layer.rs | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'wgpu') diff --git a/wgpu/src/backend.rs b/wgpu/src/backend.rs index 25134d68..e86e52c4 100644 --- a/wgpu/src/backend.rs +++ b/wgpu/src/backend.rs @@ -147,8 +147,8 @@ impl Backend { } if !layer.meshes.is_empty() { - let scaled = transformation - * Transformation::scale(scale_factor, scale_factor); + let scaled = + transformation * Transformation::scale(scale_factor); self.triangle_pipeline.prepare( device, @@ -161,8 +161,8 @@ impl Backend { #[cfg(any(feature = "image", feature = "svg"))] { if !layer.images.is_empty() { - let scaled = transformation - * Transformation::scale(scale_factor, scale_factor); + let scaled = + transformation * Transformation::scale(scale_factor); self.image_pipeline.prepare( device, diff --git a/wgpu/src/layer.rs b/wgpu/src/layer.rs index 82e8ba02..4a2e72df 100644 --- a/wgpu/src/layer.rs +++ b/wgpu/src/layer.rs @@ -133,7 +133,7 @@ impl<'a> Layer<'a> { position: *position * transformation, color: *color, clip_bounds: *clip_bounds * transformation, - scale: transformation.scale_y(), + scale: transformation.scale_factor(), }); } Primitive::Editor { @@ -149,7 +149,7 @@ impl<'a> Layer<'a> { position: *position * transformation, color: *color, clip_bounds: *clip_bounds * transformation, - scale: transformation.scale_y(), + scale: transformation.scale_factor(), }); } Primitive::Text { @@ -169,7 +169,7 @@ impl<'a> Layer<'a> { layer.text.push(Text::Cached(text::Cached { content, bounds: *bounds * transformation, - size: *size * transformation.scale_y(), + size: *size * transformation.scale_factor(), line_height: *line_height, color: *color, font: *font, -- cgit From f4d66486016076bb339a338bc589645119962d1e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 24 Oct 2023 05:34:03 +0200 Subject: Introduce `with_transformation` to `Renderer` trait --- wgpu/src/backend.rs | 4 ++-- wgpu/src/geometry.rs | 3 +-- wgpu/src/image.rs | 3 +-- wgpu/src/layer.rs | 20 +++++++++++--------- wgpu/src/layer/mesh.rs | 3 +-- wgpu/src/layer/text.rs | 6 +++--- wgpu/src/quad.rs | 4 ++-- wgpu/src/text.rs | 20 ++++++++++---------- wgpu/src/triangle.rs | 4 ++-- 9 files changed, 33 insertions(+), 34 deletions(-) (limited to 'wgpu') diff --git a/wgpu/src/backend.rs b/wgpu/src/backend.rs index e86e52c4..77b6fa83 100644 --- a/wgpu/src/backend.rs +++ b/wgpu/src/backend.rs @@ -1,7 +1,7 @@ -use crate::core::{Color, Size}; +use crate::core::{Color, Size, Transformation}; use crate::graphics::backend; use crate::graphics::color; -use crate::graphics::{Transformation, Viewport}; +use crate::graphics::Viewport; use crate::primitive::pipeline; use crate::primitive::{self, Primitive}; use crate::quad; diff --git a/wgpu/src/geometry.rs b/wgpu/src/geometry.rs index d0660edc..8cfcfff0 100644 --- a/wgpu/src/geometry.rs +++ b/wgpu/src/geometry.rs @@ -1,6 +1,6 @@ //! Build and draw geometry. use crate::core::text::LineHeight; -use crate::core::{Pixels, Point, Rectangle, Size, Vector}; +use crate::core::{Pixels, Point, Rectangle, Size, Transformation, Vector}; use crate::graphics::color; use crate::graphics::geometry::fill::{self, Fill}; use crate::graphics::geometry::{ @@ -8,7 +8,6 @@ use crate::graphics::geometry::{ }; use crate::graphics::gradient::{self, Gradient}; use crate::graphics::mesh::{self, Mesh}; -use crate::graphics::Transformation; use crate::primitive::{self, Primitive}; use lyon::geom::euclid; diff --git a/wgpu/src/image.rs b/wgpu/src/image.rs index 1e5d3ee0..06c22870 100644 --- a/wgpu/src/image.rs +++ b/wgpu/src/image.rs @@ -8,8 +8,7 @@ mod vector; use atlas::Atlas; -use crate::core::{Rectangle, Size}; -use crate::graphics::Transformation; +use crate::core::{Rectangle, Size, Transformation}; use crate::layer; use crate::Buffer; diff --git a/wgpu/src/layer.rs b/wgpu/src/layer.rs index 4a2e72df..12588849 100644 --- a/wgpu/src/layer.rs +++ b/wgpu/src/layer.rs @@ -12,10 +12,12 @@ pub use text::Text; use crate::core; use crate::core::alignment; -use crate::core::{Color, Font, Pixels, Point, Rectangle, Size, Vector}; +use crate::core::{ + Color, Font, Pixels, Point, Rectangle, Size, Transformation, Vector, +}; use crate::graphics; use crate::graphics::color; -use crate::graphics::{Transformation, Viewport}; +use crate::graphics::Viewport; use crate::primitive::{self, Primitive}; use crate::quad::{self, Quad}; @@ -130,10 +132,10 @@ impl<'a> Layer<'a> { layer.text.push(Text::Paragraph { paragraph: paragraph.clone(), - position: *position * transformation, + position: *position, color: *color, - clip_bounds: *clip_bounds * transformation, - scale: transformation.scale_factor(), + clip_bounds: *clip_bounds, + transformation, }); } Primitive::Editor { @@ -146,10 +148,10 @@ impl<'a> Layer<'a> { layer.text.push(Text::Editor { editor: editor.clone(), - position: *position * transformation, + position: *position, color: *color, - clip_bounds: *clip_bounds * transformation, - scale: transformation.scale_factor(), + clip_bounds: *clip_bounds, + transformation, }); } Primitive::Text { @@ -168,7 +170,7 @@ impl<'a> Layer<'a> { layer.text.push(Text::Cached(text::Cached { content, - bounds: *bounds * transformation, + bounds: *bounds + transformation.translation(), size: *size * transformation.scale_factor(), line_height: *line_height, color: *color, diff --git a/wgpu/src/layer/mesh.rs b/wgpu/src/layer/mesh.rs index af3dc74a..5ed7c654 100644 --- a/wgpu/src/layer/mesh.rs +++ b/wgpu/src/layer/mesh.rs @@ -1,7 +1,6 @@ //! A collection of triangle primitives. -use crate::core::Rectangle; +use crate::core::{Rectangle, Transformation}; use crate::graphics::mesh; -use crate::graphics::Transformation; /// A mesh of triangles. #[derive(Debug, Clone, Copy)] diff --git a/wgpu/src/layer/text.rs b/wgpu/src/layer/text.rs index 2a09aecc..4c2b66a4 100644 --- a/wgpu/src/layer/text.rs +++ b/wgpu/src/layer/text.rs @@ -1,6 +1,6 @@ use crate::core::alignment; use crate::core::text; -use crate::core::{Color, Font, Pixels, Point, Rectangle}; +use crate::core::{Color, Font, Pixels, Point, Rectangle, Transformation}; use crate::graphics; use crate::graphics::text::editor; use crate::graphics::text::paragraph; @@ -15,7 +15,7 @@ pub enum Text<'a> { position: Point, color: Color, clip_bounds: Rectangle, - scale: f32, + transformation: Transformation, }, /// An editor. #[allow(missing_docs)] @@ -24,7 +24,7 @@ pub enum Text<'a> { position: Point, color: Color, clip_bounds: Rectangle, - scale: f32, + transformation: Transformation, }, /// Some cached text. Cached(Cached<'a>), diff --git a/wgpu/src/quad.rs b/wgpu/src/quad.rs index 5a45187e..b932f54f 100644 --- a/wgpu/src/quad.rs +++ b/wgpu/src/quad.rs @@ -4,9 +4,9 @@ mod solid; use gradient::Gradient; use solid::Solid; -use crate::core::{Background, Rectangle}; +use crate::core::{Background, Rectangle, Transformation}; +use crate::graphics; use crate::graphics::color; -use crate::graphics::{self, Transformation}; use bytemuck::{Pod, Zeroable}; diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs index 4a151073..cffe57cb 100644 --- a/wgpu/src/text.rs +++ b/wgpu/src/text.rs @@ -1,5 +1,5 @@ use crate::core::alignment; -use crate::core::{Rectangle, Size}; +use crate::core::{Rectangle, Size, Transformation}; use crate::graphics::color; use crate::graphics::text::cache::{self, Cache}; use crate::graphics::text::{font_system, to_color, Editor, Paragraph}; @@ -124,13 +124,13 @@ impl Pipeline { vertical_alignment, color, clip_bounds, - scale, + transformation, ) = match section { Text::Paragraph { position, color, clip_bounds, - scale, + transformation, .. } => { use crate::core::text::Paragraph as _; @@ -147,14 +147,14 @@ impl Pipeline { paragraph.vertical_alignment(), *color, *clip_bounds, - *scale, + *transformation, ) } Text::Editor { position, color, clip_bounds, - scale, + transformation, .. } => { use crate::core::text::Editor as _; @@ -171,7 +171,7 @@ impl Pipeline { alignment::Vertical::Top, *color, *clip_bounds, - *scale, + *transformation, ) } Text::Cached(text) => { @@ -191,7 +191,7 @@ impl Pipeline { text.vertical_alignment, text.color, text.clip_bounds, - 1.0, + Transformation::IDENTITY, ) } Text::Raw(text) => { @@ -211,12 +211,12 @@ impl Pipeline { alignment::Vertical::Top, text.color, text.clip_bounds, - 1.0, + Transformation::IDENTITY, ) } }; - let bounds = bounds * scale_factor; + let bounds = bounds * transformation * scale_factor; let left = match horizontal_alignment { alignment::Horizontal::Left => bounds.x, @@ -241,7 +241,7 @@ impl Pipeline { buffer, left, top, - scale: scale * scale_factor, + scale: scale_factor * transformation.scale_factor(), bounds: glyphon::TextBounds { left: clip_bounds.x as i32, top: clip_bounds.y as i32, diff --git a/wgpu/src/triangle.rs b/wgpu/src/triangle.rs index 28a7b1b3..2bb6f307 100644 --- a/wgpu/src/triangle.rs +++ b/wgpu/src/triangle.rs @@ -1,8 +1,8 @@ //! Draw meshes of triangles. mod msaa; -use crate::core::Size; -use crate::graphics::{Antialiasing, Transformation}; +use crate::core::{Size, Transformation}; +use crate::graphics::Antialiasing; use crate::layer::mesh::{self, Mesh}; use crate::Buffer; -- cgit From d8dffa411b8c1bbee538e3b51aae6f768e293789 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 2 Feb 2024 02:31:47 +0100 Subject: Transform `clip_bounds` in `wgpu::text` --- wgpu/src/text.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'wgpu') diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs index cffe57cb..15179ff3 100644 --- a/wgpu/src/text.rs +++ b/wgpu/src/text.rs @@ -234,8 +234,9 @@ impl Pipeline { alignment::Vertical::Bottom => bounds.y - bounds.height, }; - let clip_bounds = - layer_bounds.intersection(&(clip_bounds * scale_factor))?; + let clip_bounds = layer_bounds.intersection( + &(clip_bounds * transformation * scale_factor), + )?; Some(glyphon::TextArea { buffer, -- cgit From b3adf3184594c9bf60e0548a0362d30c512f3966 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 2 Feb 2024 14:43:04 +0100 Subject: Apply `Transformation` to `RawText` primitives --- wgpu/src/layer.rs | 17 +++++------------ wgpu/src/layer/text.rs | 6 +++++- wgpu/src/text.rs | 17 +++++++++++------ 3 files changed, 21 insertions(+), 19 deletions(-) (limited to 'wgpu') diff --git a/wgpu/src/layer.rs b/wgpu/src/layer.rs index 12588849..cc767c25 100644 --- a/wgpu/src/layer.rs +++ b/wgpu/src/layer.rs @@ -181,20 +181,13 @@ impl<'a> Layer<'a> { clip_bounds: *clip_bounds * transformation, })); } - graphics::Primitive::RawText(graphics::text::Raw { - buffer, - position, - color, - clip_bounds, - }) => { + graphics::Primitive::RawText(raw) => { let layer = &mut layers[current_layer]; - layer.text.push(Text::Raw(graphics::text::Raw { - buffer: buffer.clone(), - position: *position * transformation, - color: *color, - clip_bounds: *clip_bounds * transformation, - })); + layer.text.push(Text::Raw { + raw: raw.clone(), + transformation, + }); } Primitive::Quad { bounds, diff --git a/wgpu/src/layer/text.rs b/wgpu/src/layer/text.rs index 4c2b66a4..b3a00130 100644 --- a/wgpu/src/layer/text.rs +++ b/wgpu/src/layer/text.rs @@ -29,7 +29,11 @@ pub enum Text<'a> { /// Some cached text. Cached(Cached<'a>), /// Some raw text. - Raw(graphics::text::Raw), + #[allow(missing_docs)] + Raw { + raw: graphics::text::Raw, + transformation: Transformation, + }, } #[derive(Debug, Clone)] diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs index 15179ff3..6fa1922d 100644 --- a/wgpu/src/text.rs +++ b/wgpu/src/text.rs @@ -109,7 +109,9 @@ impl Pipeline { Some(Allocation::Cache(key)) } - Text::Raw(text) => text.buffer.upgrade().map(Allocation::Raw), + Text::Raw { raw, .. } => { + raw.buffer.upgrade().map(Allocation::Raw) + } }) .collect(); @@ -194,7 +196,10 @@ impl Pipeline { Transformation::IDENTITY, ) } - Text::Raw(text) => { + Text::Raw { + raw, + transformation, + } => { let Some(Allocation::Raw(buffer)) = allocation else { return None; }; @@ -204,14 +209,14 @@ impl Pipeline { ( buffer.as_ref(), Rectangle::new( - text.position, + raw.position, Size::new(width, height), ), alignment::Horizontal::Left, alignment::Vertical::Top, - text.color, - text.clip_bounds, - Transformation::IDENTITY, + raw.color, + raw.clip_bounds, + *transformation, ) } }; -- cgit