Commit graph

11181 commits

Author SHA1 Message Date
Michael Haubenwallner
e91ebe3dd0 test: fix include order for AIX, bug#89354 2015-06-24 18:27:06 -07:00
Michael Haubenwallner
b0f3465d09 define _GETDELIM for getline() on AIX
On AIX 6.1, getdelim() and getline() are not provided by default,
causing a gcc compilation error.  With _GETDELIM defined, AIX's stdio.h
header provides definitions for these routines.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=89356
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-06-24 18:27:06 -07:00
Michael Haubenwallner
4cb6da119e skip MAP_NORESERVE when unsupported
Fixes a compilation on AIX ('MAP_NORESERVE' undeclared)

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=89340
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2015-06-24 18:27:06 -07:00
Michael Haubenwallner
64b71a1fe6 fix conflicting types for 'sync' on AIX, bug#89338 2015-06-24 18:27:06 -07:00
Andrea Canciani
4e7f1621df quartz: Remove call to obsolete CGFontGetGlyphPath
CGFontGetGlyphPath was not public and is not available anymore on
modern OSX/iOS systems. The same functionality is available through
the CoreText API since OSX 10.5.

Based on a patch by Simon Cozens.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=84324
2015-06-24 18:27:06 -07:00
Massimo Valentini
d4a4705898 win32: Fix crash from win32 surface's image size too small
Beginning in 1.12, a crash can occur when the win32 surface's image size
does not cover the entire surface (e.g. due to clipping regions).

This patch enlarges the fallback surface created of the amount
necessary not to write past the end of the DIB. It assumes that
Clip applied to an HDC are clamped to (0,0,width,height) of the HDC.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=53121
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-06-24 18:27:06 -07:00
Emanuele Aina
58897cbe91 cairo-trace: Fix duplicated surface push on similar-image
The current code results in trace lines with the source surface being
pushed on the stack two times instead of one:

s1 s1 //ARGB32 48 48 similar-image % s2

Instead of:

s1 //ARGB32 48 48 similar-image % s2

This greatly confuses later commands when the script was replayed,
causing traces for trivial GTK3 programs to be unplayable, usually
yielding the following error:
"invalid value (typically too big) for the size of the input (surface, pattern, etc.)"

Drop the duplicated entry from the trace line printed by the
cairo_surface_create_similar_image() override.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=73580
Signed-off-by: Emanuele Aina <emanuele.aina@collabora.com>
2015-06-24 18:27:06 -07:00
Uli Schlachter
94adea3455 xlib-xcb: Don't be lazy and use the real xcb_screen_t
Signed-off-by: Uli Schlachter <psychon@znc.in>
2015-06-24 18:27:05 -07:00
Uli Schlachter
fc648fb58f xcb: Query the display's subpixel order via RENDER
With commit e691d242, the xcb backend started parsing the resources, just like
cairo-xlib does. One behavior from cairo-xlib was missing: If no Xft.rgba
property was specified, cairo-xlib defaults to the screen's subpixel order.
This commit brings that last bit of functionality to cairo-xcb (but currently
disabled due to commit e0c0a673).

This commits adds a new array to cairo_xcb_connection_t that contains the
subpixel order for each screen. There is also a new member in cairo_xcb_screen_t
which contains the subpixel order of that screen and which is initialized from
the array when the screen is constructed. With this in place, the
resource-parsing code can just pick the subpixel order from the screen if
needed.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2015-06-24 18:27:05 -07:00
Andrea Canciani
226e135714 font: Actually perform destruction of fonts
Commit 337ab1f8d9 introduced delayed
font destruction to overcome a race, but prevented the correct cleanup
of the font cache.

This caused fonts to stay in the cache and caused a crash in the
api-special-cases (when running the test suite with -f).

Fixes api-special-cases,
https://bugs.freedesktop.org/show_bug.cgi?id=87567
2015-06-24 18:27:05 -07:00
Chris Wilson
aee44760a8 xlib: Bump reference count for recording surface replays
The snapshot takes a reference to the target recording surface in order
to enable it for use by multiple treads. In order to balance this, the
other two sources of recording surface must also take a reference and
for us to release that reference after the replay.

Otherwise, we end up with a memory leak:

==1== 1,392 bytes in 3 blocks are definitely lost in loss record 1 of 7
==1==    at 0x4A06BCF: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==1==    by 0x4C7042D: _cairo_recording_surface_snapshot (cairo/src/cairo-recording-surface.c:1427)
==1==    by 0x4C842BE: _cairo_surface_snapshot_copy_on_write (cairo/src/cairo-surface-snapshot.c:189)
==1==    by 0x4C7E7E0: _cairo_surface_detach_snapshot (cairo/src/cairo-surface.c:348)
==1==    by 0x4C7E55B: _cairo_surface_detach_snapshots (cairo/src/cairo-surface.c:333)
==1==    by 0x4C7E55B: _cairo_surface_flush (cairo/src/cairo-surface.c:1545)
==1==    by 0x4C7E6CC: _cairo_surface_finish_snapshots (cairo/src/cairo-surface.c:1017)
==1==    by 0x4C7E6CC: cairo_surface_destroy (cairo/src/cairo-surface.c:961)
==1==    by 0x4C625A7: cairo_pattern_destroy (cairo/src/cairo-pattern.c:1131)
==1==    by 0x4C3FAC6: _cairo_gstate_fini (cairo/src/cairo-gstate.c:225)
==1==    by 0x4C3C68C: _cairo_default_context_fini (cairo/src/cairo-default-context.c:75)
==1==    by 0x4C3C708: _cairo_default_context_destroy (cairo/src/cairo-default-context.c:93)
==1==    by 0x43E576: record_get (cairo/test/record-extend.c:158)
==1==    by 0x43E576: record_replay (cairo/test/record-extend.c:173)
==1==    by 0x40E22D: cairo_test_for_target (cairo/test/cairo-test.c:929)
==1==    by 0x40E22D: _cairo_test_context_run_for_target (cairo/test/cairo-test.c:1532)
==1==    by 0x40B6C0: _cairo_test_runner_draw (cairo/test/cairo-test-runner.c:255)
==1==    by 0x40B6C0: main (cairo/test/cairo-test-runner.c:937)

Reported-by: Massimo Valentini <mvalentini@src.gnome.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=87898
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2015-06-24 18:27:05 -07:00
Andrea Canciani
a8010c41ec test: Free test list
When running the cairo-test-suite, valgrind reports each of the
registered test as a leak, because they are _list_prepend()'ed, but
the tests list is never _list_free()'d.

Fixes the following valgrind error:

malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
cairo_boilerplate_xmalloc (cairo-boilerplate-system.c:47)
cairo_test_register (cairo-test-runner.c:131)
_cairo_test_runner_register_tests (cairo-test-constructors.c:1112)
main (cairo-test-runner.c:714)

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2015-06-24 18:27:05 -07:00
Andrea Canciani
671dc9fc24 test: Release owned pattern
The pattern created by cairo_pattern_create_rgb() is owned by the
caller, hence it needs to be released.

Fixes the following valgrind error:

malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
_cairo_pattern_create_solid (cairo-pattern.c:605)
_cairo_pattern_create_in_error (cairo-pattern.c:628)
cairo_pop_group (cairo.c:552)
test_cairo_push_group (api-special-cases.c:157)
preamble (api-special-cases.c:1766)
main (cairo-test-runner.c:228)

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2015-06-24 18:27:05 -07:00
Bryce Harrington
0a4bae2b8c image: Fix crash in _fill_xrgb32_lerp_opaque_spans
If a span length is negative don't go out of bounds processing the fill
data.

Patch thanks to Ilya Sakhnenko <ilia.softway@gmail.com> on mailing list.

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2015-06-24 18:27:05 -07:00
Bryce Harrington
6f42cbd163 Refactor ARRAY_LENGTH macro definitions in test code 2015-06-24 18:27:05 -07:00
Bryce Harrington
5ac87db3ba test: Use ARRAY_LENGTH macro 2015-06-24 18:27:05 -07:00
Adrian Johnson
650d044dfd pdf-operators: fix bug with RTL text
bug 86461
2015-06-24 18:27:05 -07:00
Ravi Nanjundappa
fe6b1db26c Fix one more warning from check-doc-syntax.sh
$ ./check-doc-syntax.sh
Checking documentation for incorrect syntax
./cairo-pattern.c (3342): ERROR: Will invalid doc id (should be 'cairo_...:')

The proposed changes fixes the warning about the documentation style used in cairo.

Signed-off-by: Ravi Nanjundappa <nravi.n@samsung.com>
2015-06-24 18:27:05 -07:00
Adam Jackson
bd2b4ab43e xcb: Don't crash when swapping a 0-sized glyph
malloc(0) needn't return NULL, and on glibc, doesn't.  Then we encounter
a loop of the form do { ... } while (--c), which doesn't do quite what
you were hoping for when c is initially 0.

Since there's nothing to swap in this case, just bomb out.

Signed-off-by: Adam Jackson <ajax@redhat.com>
2015-06-24 18:27:05 -07:00
Adam Jackson
40f1da3b42 xlib: Don't crash when swapping a 0-sized glyph
malloc(0) needn't return NULL, and on glibc, doesn't.  Then we encounter
a loop of the form do { ... } while (--c), which doesn't do quite what
you were hoping for when c is initially 0.

Since there's nothing to swap in this case, just bomb out.

Signed-off-by: Adam Jackson <ajax@redhat.com>
2015-06-24 18:27:05 -07:00
Adrian Johnson
ce08735c06 Improve performance of cpu_to_be32 and be32_to_cpu
By switching to the more common form, gcc and clang emit a single
bswap instruction and truetype subsetting of large fonts runs about
15% faster.
2015-06-24 18:27:05 -07:00
Adrian Johnson
956ef874c8 pdf-operators: only wrap text strings for PS output
since the PS Document Structing Conventions impose a 255 character
line limit. PDF does not require wrapping.

pdf-operators is designed to emit the same output for PS and PDF.
Unfortunately some PDF interpreters don't like strings split with
'\\\n' and some PS interpreters don't like strings split with ')('.
So we are forced to make pdf-operators handling string wrapping
differently for PDF and PS.

Bug 85662
2015-06-24 18:27:05 -07:00
Bryce Harrington
189a3e7f7c Drop the target-specific huge-radial.pdf.*.ref.png images
These two images are mis-rendered (clearly evident from visual
inspection).  By removing them, the test will fall back to the more
general format-specific images, huge-radial.argb32.ref.png and
huge-radial.rgb24.ref.png.

Note that the huge-radial.pdf tests still fail to pass, but the pdiff
looks more sensible.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=66218

Signed-off-by: Bryce Harrington <bryce@bryceharrington.org>
2015-06-24 18:27:05 -07:00
Bryce Harrington
1a8b720efe RELEASING: Be explicit as to which tag is pushed 2015-06-24 18:27:05 -07:00
Ravi Nanjundappa
89d6c42a85 Fix warnings from check-doc-syntax.sh
$ ./check-doc-syntax.sh
Checking documentation for incorrect syntax
./cairo-pattern.c (3346): ERROR: Will bad line: ' */'
./cairo-pattern.c (3346): ERROR: Will documentation comment not closed with **/
./cairo-pattern.c (3422): ERROR: _cairo_pattern_sampled_area invalid doc id (should be 'cairo_...:')

The warnings are about the documentation style used in cairo

Signed-off-by: Ravi Nanjundappa <nravi.n@samsung.com>
2015-06-24 18:27:05 -07:00
Adrian Johnson
abffca8983 build: fix regression on mingw
7cfebce1 removed the filename extension for executables.

Patch from http://sourceforge.net/p/inkscape/mailman/message/32939144/

Bug 85120
2015-06-24 18:27:05 -07:00
Massimo Valentini
65e561e45a tor-scan-converter: can't do_fullrow when intersection in row + 0.5subrow
the active edges list must be left sorted at the next possible use
and since full_row does not deal with intersections it is not usable
when there is an intersection in the top half of the next row first
subrow

Reported-and-tested-by: Matthew Leach
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85151
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
2015-06-24 18:27:05 -07:00
Bryce Harrington
5957993663 Revert "Add execution bit for make-cairo-test-constructors.sh"
This reverts commit 5c17bf1a33.

Script is sourced in the makefile, no need for +x.
2015-06-24 18:27:05 -07:00
Adrian Johnson
17272b56b2 pdf: fix compiler warning 2015-06-24 18:27:05 -07:00
Adrian Johnson
6559bfe931 CFF: Fix unaligned access
Debian bug 712836 reported bus errors in cff subsetting when
running on a sparc. This is because unlike truetype, all data
in the compact font format is not aligned.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=712836
2015-06-24 18:27:05 -07:00
Bryce Harrington
9d9b6ee7de Add execution bit for make-cairo-test-constructors.sh
This is referenced in the Makefile but not set as executable
2015-06-24 18:27:05 -07:00
Adrian Johnson
34dcd3ae9f Update mime type documentation. 2015-06-24 18:27:05 -07:00
Bryce Harrington
29c30b97b1 RELEASING: Update tags push command
I couldn't get the documented command to do diddly.  Running
`git push --tags` achieved what I think was intended.
2015-06-24 18:27:05 -07:00
Bryce Harrington
e087aca9bf Start 1.14.1 development 2015-06-24 18:27:05 -07:00
Uli Schlachter
4d9cee1a50 XCB: Don't attach uploaded surfaces as snapshots
When you draw (part of) a surface to an XCB surface, the XCB backend will safe
the uploaded part as a snapshot to the input surface. This allows to re-use this
picture in case the same surface is later used again as a source.

However, other backends do not do this and this has caused and/or highlighted
numerous bugs. Just skipping the snapshot fixes or hides these bugs.

Papers-over: https://bugs.freedesktop.org/show_bug.cgi?id=67505
Signed-off-by: Uli Schlachter <psychon@znc.in>
2015-06-20 11:03:13 +02:00
Uli Schlachter
fe1b2b9207 tor-scan-converter: Correctly align 64bit types
On 32bit SPARC the scan converter was causing a SIGBUS due to an unaligned
memory access while accessing an int64_t. This memory accessing was to struct
quorem's rem member.

This crash occurred because the tor-scan-converter contains its own
implementation of a memory pool. This implementation only guarantees an
alignment of sizeof(void *), which is less than what a 64 bit type requires on
32bit platforms. This 4 byte alignment is guaranteed, because struct _pool_chunk
(which is the struct that is used for managing free space) contains elements of
that size and so the size of that struct is a multiple of this size as well.

This problem was introduced with commit 03c3d4b7c1.

To fix this problem, this commit introduces a int64_t member to struct
_pool_chunk that marks the beginning of the free data space. Thanks to this, the
compiler ensures proper alignment and sizeof(struct _pool_chunk) becomes a
multiple of 8.

However, previously the end of the struct marked the beginning of the data and
sizeof() was used for correctly calculating offsets to the data section. So,
just adding such a member would work, but would also waste some memory. To avoid
this, this commit also changes the rest of the pool implementation to
accommodate.

Reported-by: Nicolas Setton <setton@adacore.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2014-12-06 10:29:53 +01:00
Hans Breuer
b2333fd70c win32: Fix compilation of 'cairo-path-stroke-traps.c' with MSVC8
"The issue here is that Visual Studio 2005+ is quite strict on type
conversions (so it wants code to be clear enough on conversions)."

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=84908
(Cherry-pick of 56da7adc3c from master)
2014-12-03 16:38:02 +01:00
Bryce Harrington
f6fd372a8b pattern: Restore dropped inclusion of cairoint.h
Fixes failure in make release-check due by check-preprocessor-syntax.sh
due to requirement that cairoint.h be the first include for source files.
2014-10-13 18:54:12 -07:00
Bryce Harrington
60ca80b248 1.14.0 release 2014-10-13 18:45:53 -07:00
Bryce Harrington
3e41f7b381 NEWS: Flesh out docs for new APIs 2014-10-13 18:30:23 -07:00
Bryce Harrington
41561c527c NEWS: Update with latest changes and finalize for release 2014-10-13 18:20:45 -07:00
Adrian Johnson
ab2a7b61d5 pdf: don't use '\' to split strings across multiple lines
The PDF interpreter in my printer does not handle this correctly.
So instead we add the string delimiters '(' and ')' to each line.
2014-10-12 21:06:45 +10:30
Bill Spitzak
45934f69cd image: Corrected extents calculations
New implementations of _cairo_pattern_sampled_area and _cairo_pattern_get_extents
which produce a more accurate bounding box. These do not depend on side-effects
of analyze_filter, can handle different horizontal and vertical scales, filters
wider than 1 for down-scaling, and compute a somewhat tighter bounding box
in most cases.

I removed the pad output of _cairo_pattern_analyze_filter as it is unused.

Reviewed-by: Bryce Harrington <b.harrington@samsung.com>
2014-10-10 18:09:14 -07:00
Bill Spitzak
3cd7ed1f32 xcb: Use image fallback for GOOD/BEST filters
It will not use the fallback if the symbols in the previous patch
are turned on.

Also some code rearrangement to make this resemble the xlib version
more and to remove some suspect bugs. In particular meshes should not
work just because the translation is an integer.

Reviewed-by: Bryce Harrington <b.harrington@samsung.com>
2014-10-10 18:09:09 -07:00
Bill Spitzak
ca9aee4e62 xcb: Add switches for whether XRender supports GOOD/BEST filtering
Currently these are always false, but if XRender use a pixman that
supports filtering these could be turned on for that version.

Reviewed-by: Bryce Harrington <b.harrington@samsung.com>
2014-10-10 18:09:05 -07:00
Bill Spitzak
58728da6eb xlib: Use image fallback for GOOD/BEST filters
Fallback is not used if the symbols defined in the previous patch to
indicate if XRender does GOOD/BEST are true.

This patch also includes some changes to take advantage of the fact that
if there is an integer translation analyze_filter will already have set
the filter to NEAREST.

Reviewed-by: Bryce Harrington <b.harrington@samsung.com>
2014-10-10 18:09:01 -07:00
Bill Spitzak
c653dcd3e6 xlib: Add symbols to indicate if XRender supports GOOD/BEST filtering
Currently these are always false, but if some version of xlib uses
a pixman supporting filtering they could be changed to return true
for that version.

Reviewed-by: Bryce Harrington <b.harrington@samsung.com>
2014-10-10 18:08:56 -07:00
Bill Spitzak
c8b1bf55ad image: Move filter decision to _cairo_pattern_analyze_filter
The analysis to deterimine if the GOOD filter can be replaced with
the BILINEAR filter is moved to this function so it can be used
by backends other than the image backend.

Reviewed-by: Bryce Harrington <b.harrington@samsung.com>
2014-10-10 18:08:48 -07:00
Bryce Harrington
82cd66f833 test: Update pixman downscaling 95 reference images
The pixman downscaling "95" tests attempt to rescale a 96x96 pixmap to
95x95.  Ideally the borders between color areas should be sharp, but for
this use case we allow for 1 pixel of blur between the areas as
acceptable.  The choice of what color to use for this blurred region is
not important, and in fact varies from backend to backend.

The old reference images were generated by Krzysztof Kosiński's
downscaling algorithm.  These new images are against the algorithms
written by Bill Spitzak.

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2014-10-09 18:28:53 -07:00
Bryce Harrington
79b5a35f83 test: Add an update-refs.sh script to update reference images
There are cases where the rendered output of a test can vary from
backend to backend in ways which are visually acceptable.  This is why
we have reference images in the first place.  In these cases, changes to
the rendering logic can result in slight differences in the output that
is also within acceptable visual limits.

We see this in the pixman downscaling tests.  This script is introduced
as a way to more easily update the reference images after a renderer
change.

This script is intended to be expanded to handle updating of references
for other tests as we identify similar issues.  The intent is that this
script then serves as a way to document these exceptional cases.

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2014-10-09 18:28:52 -07:00