Scaled glyph image surfaces have device offsets set on them to indicate
the location of the glyph origin; however, those offsets weren't being
taken into account for the call to composite, so the glyphs were
being doubly-offset by this amount.
This patch implements device offset/scale at the cairo-surface layer,
instead of them just being multiplied into the CTM at operation time.
This allows identical drawing operations/clips/paths/etc. to operate
identically on a surface with or without a device offset (and still
have things end up in the same place relative to the dev offset).
Shrink linear-gradient and text-pattern test outuput.
The real motivation for this is to hide an annoying difference in the
gradient output that occurs when under the influence of a device
offsets. My opinion is that the gradient output should not change due
to just an integer offset, but we currently don't have a precise
gradient specification, so this minor deviation really isn't relevant.
A better fix for this might have been to make the test suite more
forgiving of tiny differences, (perhaps on a per-test basis), but
another advantage of shrinking these tests is that they now run a lot
faster.
It is true that these tests now also exercise fewer different output
values, but that's not the designed purpose of the tests so I don't
feel bad about losing that characteristic.
[With this change, two tests with gradients exhibit subtle differences
under device offsets. I don't think we actually care about them
though. -cworth]
This commit adds the following new functions to the cairo-ps API:
cairo_ps_surface_dsc_comment
cairo_ps_surface_dsc_begin_setup
cairo_ps_surface_dsc_begin_page_setup
Many thanks are due to Michael Sweet who provided invaluble guidance
during the design of this API.
It is hoped that with this API in place, basically all printer control
that is likely to be desired to be performed with cairo PostScript
output is now possible.
This commit augments the ps-features test to exercise the new API.
Add a new cairo_ps_surface_set_size which can be used to produce a
PostScript file consisting of pages of various different sizes (or
orientations).
Also add a new test (ps-features.c) for testing this and subsequent
ps-specific function calls.
This addresses the original problem noted in mozilla's bug #336129:
Missing out-of-memory check at gfx/cairo/cairo/src/cairo-atsui-font.c:185
https://bugzilla.mozilla.org/show_bug.cgi?id=336129
This also adds a comment pointing out another malloc that is not
checked, (but does not fix it).
I've removed cairo_svg_surface_create_xxx functions, and instead implemented
the following ones:
cairo_svg_surface_restrict_to_version
cairo_svg_get_versions
cairo_svg_version_to_string
If we find a glyph image of a format that is different from the font's
format, then we use a temporary image and convert to the font's
format.
This provides a simple fix for the crash identified in bug #4705:
crash at XRenderAddGlyphs
https://bugs.freedesktop.org/show_bug.cgi?id=4705
A later improvement would guarantee that the "font's format" was
carefully chosen to be able to contain all glyphs in the font without
information loss.