summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drawing_ctx.rs22
-rw-r--r--src/text.rs8
2 files changed, 22 insertions, 8 deletions
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index c9cc9232..d6632888 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -358,8 +358,26 @@ impl DrawingCtx {
*self.initial_viewport.vbox
}
- pub fn toplevel_transform(&self) -> Transform {
- self.initial_viewport.transform.clone()
+ /// Gets the transform that will be used on the target surface,
+ /// whether using an isolated stacking context or not.
+ ///
+ /// This is only used in the text code, and we should probably try
+ /// to remove it.
+ pub fn get_transform_for_stacking_ctx(
+ &self,
+ stacking_ctx: &StackingContext,
+ ) -> Result<ValidTransform, RenderingError> {
+ if stacking_ctx.should_isolate() {
+ let affines = CompositingAffines::new(
+ *self.get_transform(),
+ self.initial_viewport.transform,
+ self.cr_stack.borrow().len(),
+ );
+
+ Ok(ValidTransform::try_from(affines.for_temporary_surface)?)
+ } else {
+ Ok(self.get_transform())
+ }
}
pub fn is_measuring(&self) -> bool {
diff --git a/src/text.rs b/src/text.rs
index ca3598cf..77e3fb60 100644
--- a/src/text.rs
+++ b/src/text.rs
@@ -784,11 +784,7 @@ impl ElementTrait for Text {
);
let layout_text = {
- let transform = if stacking_ctx.should_isolate() {
- draw_ctx.toplevel_transform()
- } else {
- draw_ctx.get_transform().into::<Transform>()
- };
+ let transform = draw_ctx.get_transform_for_stacking_ctx(&stacking_ctx)?;
let layout_context = LayoutContext {
writing_mode: values.writing_mode(),
@@ -829,7 +825,7 @@ impl ElementTrait for Text {
}
}
- let empty_bbox = BoundingBox::new().with_transform(transform);
+ let empty_bbox = BoundingBox::new().with_transform(*transform);
let text_bbox = layout_spans.iter().fold(empty_bbox, |mut bbox, span| {
if let Some(ref span_bbox) = span.bbox {