mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 14:21:16 +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 cgmath::Matrix4;
|
||||
use const_field_offset::FieldOffsets;
|
||||
use core::pin::Pin;
|
||||
use sixtyfps_corelib_macros::*;
|
||||
|
@ -386,7 +385,7 @@ pub trait Frame {
|
|||
fn render_primitive(
|
||||
&mut self,
|
||||
primitive: &Self::LowLevelRenderingPrimitive,
|
||||
transform: &Matrix4<f32>,
|
||||
translation: Point,
|
||||
variables: RenderingVariables,
|
||||
) -> Vec<Self::LowLevelRenderingPrimitive>;
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@ use crate::component::ComponentRc;
|
|||
use crate::eventloop::ComponentWindow;
|
||||
use crate::item_tree::ItemVisitorResult;
|
||||
use crate::slice::Slice;
|
||||
use cgmath::{Matrix4, Vector3};
|
||||
use std::cell::{Cell, RefCell};
|
||||
|
||||
/// 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>>,
|
||||
origin: crate::graphics::Point,
|
||||
) {
|
||||
let transform = Matrix4::from_translation(Vector3::new(origin.x, origin.y, 0.));
|
||||
let window = ComponentWindow::new(window.clone());
|
||||
|
||||
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(
|
||||
component,
|
||||
crate::item_tree::TraversalOrder::BackToFront,
|
||||
|_, item, _, transform| {
|
||||
|_, item, _, translation| {
|
||||
let origin = item.as_ref().geometry().origin;
|
||||
let transform =
|
||||
transform * Matrix4::from_translation(Vector3::new(origin.x, origin.y, 0.));
|
||||
let translation = *translation + euclid::Vector2D::new(origin.x, origin.y);
|
||||
|
||||
let cached_rendering_data = item.cached_rendering_data_offset();
|
||||
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;
|
||||
frame.borrow_mut().render_primitive(
|
||||
&primitive,
|
||||
&transform,
|
||||
translation,
|
||||
item.as_ref().rendering_variables(&window),
|
||||
)
|
||||
} else {
|
||||
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| {
|
||||
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(
|
||||
&mut self,
|
||||
primitive: &OpaqueRenderingPrimitive,
|
||||
transform: &Matrix4<f32>,
|
||||
translation: Point,
|
||||
variables: RenderingVariables,
|
||||
) -> 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 {
|
||||
matrix = matrix
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue