mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 22:31:14 +00:00
Simplify rendering interface
Instead of passing through a generic transformation matrix, let's just pass through what we actually use: a translation point
This commit is contained in:
parent
d4f603246c
commit
607fecdb18
3 changed files with 11 additions and 14 deletions
|
@ -33,7 +33,6 @@ use crate::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use auto_enums::auto_enum;
|
use auto_enums::auto_enum;
|
||||||
use cgmath::Matrix4;
|
|
||||||
use const_field_offset::FieldOffsets;
|
use const_field_offset::FieldOffsets;
|
||||||
use core::pin::Pin;
|
use core::pin::Pin;
|
||||||
use sixtyfps_corelib_macros::*;
|
use sixtyfps_corelib_macros::*;
|
||||||
|
@ -386,7 +385,7 @@ pub trait Frame {
|
||||||
fn render_primitive(
|
fn render_primitive(
|
||||||
&mut self,
|
&mut self,
|
||||||
primitive: &Self::LowLevelRenderingPrimitive,
|
primitive: &Self::LowLevelRenderingPrimitive,
|
||||||
transform: &Matrix4<f32>,
|
translation: Point,
|
||||||
variables: RenderingVariables,
|
variables: RenderingVariables,
|
||||||
) -> Vec<Self::LowLevelRenderingPrimitive>;
|
) -> Vec<Self::LowLevelRenderingPrimitive>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@ use crate::component::ComponentRc;
|
||||||
use crate::eventloop::ComponentWindow;
|
use crate::eventloop::ComponentWindow;
|
||||||
use crate::item_tree::ItemVisitorResult;
|
use crate::item_tree::ItemVisitorResult;
|
||||||
use crate::slice::Slice;
|
use crate::slice::Slice;
|
||||||
use cgmath::{Matrix4, Vector3};
|
|
||||||
use std::cell::{Cell, RefCell};
|
use std::cell::{Cell, RefCell};
|
||||||
|
|
||||||
/// This structure must be present in items that are Rendered and contains information.
|
/// This structure must be present in items that are Rendered and contains information.
|
||||||
|
@ -88,7 +87,6 @@ pub(crate) fn render_component_items<Backend: GraphicsBackend>(
|
||||||
window: &std::rc::Rc<GraphicsWindow<Backend>>,
|
window: &std::rc::Rc<GraphicsWindow<Backend>>,
|
||||||
origin: crate::graphics::Point,
|
origin: crate::graphics::Point,
|
||||||
) {
|
) {
|
||||||
let transform = Matrix4::from_translation(Vector3::new(origin.x, origin.y, 0.));
|
|
||||||
let window = ComponentWindow::new(window.clone());
|
let window = ComponentWindow::new(window.clone());
|
||||||
|
|
||||||
let frame = RefCell::new(frame);
|
let frame = RefCell::new(frame);
|
||||||
|
@ -96,10 +94,9 @@ pub(crate) fn render_component_items<Backend: GraphicsBackend>(
|
||||||
crate::item_tree::visit_items_with_post_visit(
|
crate::item_tree::visit_items_with_post_visit(
|
||||||
component,
|
component,
|
||||||
crate::item_tree::TraversalOrder::BackToFront,
|
crate::item_tree::TraversalOrder::BackToFront,
|
||||||
|_, item, _, transform| {
|
|_, item, _, translation| {
|
||||||
let origin = item.as_ref().geometry().origin;
|
let origin = item.as_ref().geometry().origin;
|
||||||
let transform =
|
let translation = *translation + euclid::Vector2D::new(origin.x, origin.y);
|
||||||
transform * Matrix4::from_translation(Vector3::new(origin.x, origin.y, 0.));
|
|
||||||
|
|
||||||
let cached_rendering_data = item.cached_rendering_data_offset();
|
let cached_rendering_data = item.cached_rendering_data_offset();
|
||||||
let cleanup_primitives = if cached_rendering_data.cache_ok.get() {
|
let cleanup_primitives = if cached_rendering_data.cache_ok.get() {
|
||||||
|
@ -108,21 +105,21 @@ pub(crate) fn render_component_items<Backend: GraphicsBackend>(
|
||||||
&cache.get(cached_rendering_data.cache_index.get()).unwrap().primitive;
|
&cache.get(cached_rendering_data.cache_index.get()).unwrap().primitive;
|
||||||
frame.borrow_mut().render_primitive(
|
frame.borrow_mut().render_primitive(
|
||||||
&primitive,
|
&primitive,
|
||||||
&transform,
|
translation,
|
||||||
item.as_ref().rendering_variables(&window),
|
item.as_ref().rendering_variables(&window),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
Vec::new()
|
Vec::new()
|
||||||
};
|
};
|
||||||
|
|
||||||
(ItemVisitorResult::Continue(transform), (transform, cleanup_primitives))
|
(ItemVisitorResult::Continue(translation), (translation, cleanup_primitives))
|
||||||
},
|
},
|
||||||
|_, _, (transform, cleanup_primitives)| {
|
|_, _, (translation, cleanup_primitives)| {
|
||||||
cleanup_primitives.into_iter().for_each(|primitive| {
|
cleanup_primitives.into_iter().for_each(|primitive| {
|
||||||
frame.borrow_mut().render_primitive(&primitive, &transform, Default::default());
|
frame.borrow_mut().render_primitive(&primitive, translation, Default::default());
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
transform,
|
origin,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -820,10 +820,11 @@ impl GraphicsFrame for GLFrame {
|
||||||
fn render_primitive(
|
fn render_primitive(
|
||||||
&mut self,
|
&mut self,
|
||||||
primitive: &OpaqueRenderingPrimitive,
|
primitive: &OpaqueRenderingPrimitive,
|
||||||
transform: &Matrix4<f32>,
|
translation: Point,
|
||||||
variables: RenderingVariables,
|
variables: RenderingVariables,
|
||||||
) -> Vec<OpaqueRenderingPrimitive> {
|
) -> Vec<OpaqueRenderingPrimitive> {
|
||||||
let mut matrix = self.root_matrix * transform;
|
let mut matrix = self.root_matrix
|
||||||
|
* Matrix4::from_translation(cgmath::Vector3::new(translation.x, translation.y, 0.));
|
||||||
|
|
||||||
if let RenderingVariables::Text { translate, .. } = &variables {
|
if let RenderingVariables::Text { translate, .. } = &variables {
|
||||||
matrix = matrix
|
matrix = matrix
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue