Open
Bug 1060762
Opened 10 years ago
Updated 6 months ago
calling gfxContext::Save and then gfxContext::Restore will unexpectedly trash the associated DrawTarget's matrix
Categories
(Core :: Graphics, defect)
Core
Graphics
Tracking
()
NEW
People
(Reporter: jfkthame, Unassigned)
References
(Depends on 1 open bug)
Details
See bug 983985 comment 9.
The font code uses a skew on the DrawTarget's matrix to implement "fake italics". This matrix gets altered if we call Save() and then Restore() on the gfxContext, which happens if we need to render a missing-glyph hexbox.
It seems wrong for a simple Save/Restore pair to have such a side-effect.
Reporter | ||
Comment 1•10 years ago
|
||
:bas, can you have a look at this and comment on the expected interaction (if any!) between gfxContext::Save/Restore and the DrawTarget's transform?
:jwatt, it looks like you also touched those methods fairly recently; this problem predates your work in bug 933019, but maybe you're familiar enough with the code to have some insight?
Flags: needinfo?(jwatt)
Flags: needinfo?(bas)
Comment 2•10 years ago
|
||
(In reply to Jonathan Kew (:jfkthame) from comment #0)
> See bug 983985 comment 9.
>
> The font code uses a skew on the DrawTarget's matrix to implement "fake
> italics". This matrix gets altered if we call Save() and then Restore() on
> the gfxContext, which happens if we need to render a missing-glyph hexbox.
>
> It seems wrong for a simple Save/Restore pair to have such a side-effect.
It's not wholly unexpected. The problem is partial conversion to Moz2D. The expected, correct behavior (although perhaps not intuitive) is that -any- usage of the Context may restore the transform that the context 'knew about' and override a transform set directly on the DrawTarget.
So DrawTarget's belonging to a context should only be used as DrawTargets in a coherent form where there's no interruption by using the context. This idea facilitates a 'bottom-up' Moz2D-ification where from the 'highest levels' on the callstack Moz2Dification works down so in the end usage of gfxContext is eliminated completely.
Flags: needinfo?(bas)
Comment 3•10 years ago
|
||
Bas, could we get rid of gfxContext::mTransform and just get the transform directly from the DT now that gfxContext is always backed by a DT?
Flags: needinfo?(jwatt) → needinfo?(bas)
Comment 4•10 years ago
|
||
(In reply to Jonathan Watt [:jwatt] from comment #3)
> Bas, could we get rid of gfxContext::mTransform and just get the transform
> directly from the DT now that gfxContext is always backed by a DT?
No, because the transform is adjusted relative to the destination context because of device offsets when you push a group with a clip.
Flags: needinfo?(bas)
Updated•2 years ago
|
Severity: normal → S3
You need to log in
before you can comment on or make changes to this bug.
Description
•