We have both NativeSurfaceType::CAIRO_CONTEXT and
NativeSurfaceType::CAIRO_SURFACE. They both refer to DrawTargets with Cairo
backends. The only reason for having both is so you can call GetNativeSurface()
and get either the |cairo_t*| or the underlying |cairo_surface_t*|.
I argue that this convenience confuses things more than it helps. This patch
removes CAIRO_SURFACE, and adds explicit cairo_get_target() calls where
necessary.
This is so that if it goes negative (due to missing DidAlloc() calls) it shows
up in about:memory as a negative number, rather than a huge positive number.
We create and destroy ScaledFonts for every piece of text we write.
That causes a huge amount of duplicated data within the recording.
This splits out the recording of the font data itself from the ScaledFont.
The key generated to determine uniqueness could probably be fairly easily faked, but for our purposes that doesn't matter.
This is so we can create the real print DrawTarget from our nsDeviceContext at the beginning of each page.
Default behaviour for other Translators is still to always use CreateSimilarDrawTarget.
This also changes aPrintToFileName parameter for BeginDocument to an nsAString& from char16_t*.
Having a char16_t* caused a pain with VS2105 where wchar_t != char16_t (as on VS2103), after it had been sent over IPDL.
This could have been worked around with casting, but this seemed like the tidier solution.
These changes are to make using an off screen surface behind our DrawTarget in the child easier.
It still creates the real printing surface for some of the calculations,
removing this will be required for future tightening of the sandbox.
These are mainly changes to make sure we have recorded relevant dependencies to each draw operation.
Where we can't record them on the fly like this, it makes sure the object has originated from our DrawTarget.
AutoTextRun now only needs a DrawTarget instead of an nsRenderingContext, and
similar nsRenderingContext/gfxContext-to-DrawTarget replacements can be
propagated a long way up the call graph. This patch replaces 93 occurrences of
nsRenderingContext and 135 occurrences of gfxContext with DrawTarget; that's
13% of them.
The patch is mostly plumbing changes. A couple of not-entirely-plumbing
changes:
- It adds a comment about the null check in
gfxGlyphExtents::GetTightGlyphExtentsAppUnits().
- A couple of functions simply had an unused gfxContext or nsRenderingContext
parameter removed, e.g. SetLineBreaks().
The following functions in nsRenderingContext are unused and this patch removes
them: the zero-arg constructor, the |DrawTarget*| constructor, and both Init()
functions.