Commit graph

5312 commits

Author SHA1 Message Date
Chris Wilson
540de34453 [matrix] Optimise invert for simple scaling|translation matrices.
Peter Hercek reported, and provided a very useful test case for, a bug
that caused his applications to crash with Cairo detecting an
non-invertible pattern matrix and thus asserting the impossible happened.
Bisecting revealed that the bug first appeared with 3c18d95 and
disappeared with 0d0c6a1. Since neither of these explain the crash,
further investigation revealed a compiler bug (gcc 4.3.3 20081130,
earlier versions have different bugs!) that caused the matrix inversion
to be invalid iff _cairo_matrix_scalar_multiply() was inlined (i.e. -O0,
or an explicit noinline atttribute on that function prevented the bug, as
did -msse.) So we apply this workaround to hide the bug in the stable
series...

The matrix is quite often just a simple scale and translate (or even
identity!). For this class of matrix, we can skip the full adjoint
rearrangement and determinant calculation and just compute the inverse
directly.
(cherry picked from commit 0d0c6a199c)
2008-12-02 17:31:51 +00:00
Luo Jinghua
51a75ad932 glitz: Replace specified color with an opaque one if dst surface don't have an alpha channel.
Otherwise if underlying glitz drawable has an alpha channel, glitz_set_rectangles
will set its alpha channel to specified value instead of opaque one and effects following
composite operations since glitz draws to attached drawable then copies its content to
the dst surface. With this commit, three test cases such as operator, operator-alpha and
unbounded-operator passes now.
2008-11-30 21:44:36 +08:00
Chris Wilson
7247017cf5 Fix up a couple of likely(malloc==NULL)
Adrian Johnson spotted that I marked a few malloc failures as likely,
whoops.
2008-11-29 11:48:17 +00:00
Chris Wilson
0d757a793d [png] Fix leak of original png data on error path.
The error path was missing a _cairo_output_stream_destroy() to cleanup a
copy of the incoming PNG data.
2008-11-29 11:20:34 +00:00
Chris Wilson
e6963a5bfe Mark allocation failures as unlikely.
Use the gcc likelihood annotation to indicate that allocation failures are
extremely unlikely.
2008-11-29 11:20:34 +00:00
Chris Wilson
d1801c23fa Mark if(status) as being unlikely.
The error paths should be hit very rarely during normal operation, so mark
them as being unlikely so gcc may emit better code.
2008-11-29 11:20:33 +00:00
Chris Wilson
f2982e103c [fill] Allow rectangles to be implicitly closed.
Also scan for appendages of simple rectangles.
2008-11-29 10:14:26 +00:00
Chris Wilson
d2bcf1d76d [path] Carefully check for no more points.
As the empty path points to an embedded buf, we cannot rely on the buf
pointer being NULL to mark end-of-path.
2008-11-29 10:14:26 +00:00
Chris Wilson
424aba9be5 [check] Search for the word NOTE
Add word boundary markers around the regexp so that we only match for the
word NOTE and not on substrings like GL_NOTEQUAL.
2008-11-29 10:14:26 +00:00
Luo Jinghua
ed6bd4766c image: Use unsigned long to compute color masks.
Use unsigned long in the first place to prevent compiler from
expanding signed bit to all upper bits. e.g, a alpha mask 0xff0000
will expand to 0xffffffffff00000 on 64 bit platform which is not
what we expected.
2008-11-28 07:54:41 +08:00
Chris Wilson
f5634818f1 [os2] Move include cairo.h before os2.h
The defines need to come first, but we specify that cairo.h is the first
header file to be included by files.
2008-11-26 20:23:05 +00:00
Behdad Esfahbod
2f0f9a1a59 [os2] Fix includes
Patch from Dave Yeo to make cairo-os2.h include os2.h directly so the
header is standalone.
2008-11-26 20:22:57 +00:00
Chris Wilson
5e37652362 [skiplist] Check for ffs()
Wine at least does not provide ffs(), so check at configure time and
open-code a replacement.
2008-11-26 17:26:57 +00:00
Chris Wilson
60282b866a [glitz] Fix clone_similar().
Clone similar open-coded various image surface functions and failed to
clone a sub-region resulting in failures for mask-transformed-* and
large-source.
2008-11-26 16:58:29 +00:00
Chris Wilson
8a5b55ca6c [matrix] Impose a maximum number of refinement iterations
Ensure we do not loop forever trying to minimise the error between the
pixman and cairo matrices - for instance when the FPU is not running at
full precision.
2008-11-26 16:15:35 +00:00
Chris Wilson
4218699642 [skiplist] Use ffs()
Use ffs() [find-first-set-bit] instead of open-coding, which is about 25%
faster on my test machine.
2008-11-26 16:15:35 +00:00
Chris Wilson
039437c9cf [png] Use FILE* instead of void*.
Adrian Johnson reported that cygwin complained about the use of the void *
within feof() as it was using a macro and attempted a to deference the
void*...
2008-11-26 10:33:33 +00:00
Adrian Johnson
8fa3cd9564 Change uint to uint32_t 2008-11-26 06:40:47 +10:30
Luo Jinghua
e828f73306 glitz: Apply fixup to unbounded operators to clear area outside of mask 2008-11-26 00:09:11 +08:00
Luo Jinghua
449e7518be glitz: set correct parameters for linear and radial pattern.
Glitz expects 16.16 fixed point, but we use 24.8 fixed point by default.
2008-11-25 22:55:24 +08:00
Luo Jinghua
3bde440e00 glitz: fixup another stupid bug in fill_rectangles.
Wny I doesn't notice them before. Without fixes it fills n_rect times of
the first one in the rectangle list.
2008-11-25 22:36:53 +08:00
Chris Wilson
4ac38f7c2b [fill] Emit rectangles for GdkRegion
Scan the path for a series of consistently wound rectangles.
2008-11-25 12:54:58 +00:00
Chris Wilson
23df74e5ff [xlib] Cosmetic tweak.
Tightly scope the local rects.
2008-11-25 12:54:58 +00:00
Chris Wilson
06fabd6cbd [path] Fix up extents.
Forgot to round the box to the integer rectangle and missed why only
testing on image. Very naughty.
2008-11-25 12:54:58 +00:00
Chris Wilson
ca80b8c652 [pdf] Add a default case to silence the compiler.
The foolish compiler was emitting a warning about a potential
uninitialized variable even though the switch was fully populated.
2008-11-25 10:25:24 +00:00
Chris Wilson
b8991a1c69 [in-fill] Add the implicit close-path during move-to.
When interpreting a fixed-path for a fill operation, any move-to
implicitly closes the current path.
2008-11-25 10:24:58 +00:00
Chris Wilson
59de6fb89e [path] Compute approximate extents.
When computing the bounds of the clip path, we care more for a fast result
than absolute precision as the extents are only used as a guide to trim
the future operations. So computing the extents of the path suffices.
2008-11-25 10:16:32 +00:00
Chris Wilson
b6bf047494 [clip] Check for error surface
The update to use a NULL backend with an error surface broke creating a
context from an error surface.
2008-11-25 10:14:25 +00:00
Adrian Johnson
721cad9b24 Fix typo 2008-11-24 22:41:03 +10:30
Adrian Johnson
70e4c53272 Document location of image format specifications 2008-11-24 22:38:30 +10:30
Adrian Johnson
4ca644af27 Win32-print: Add PNG embedding support 2008-11-24 22:27:09 +10:30
Adrian Johnson
f59a3e03fc Add PNG get info function 2008-11-24 22:27:09 +10:30
Adrian Johnson
1892907e24 PDF: Disable PDF 1.5 features when version 1.4 is selected
JPEG 2000 image embedding and ActualText marked content are
PDF 1.5 features.
2008-11-24 22:27:09 +10:30
Adrian Johnson
c4a57385fa PDF: Add cairo_pdf_surface_restrict_to_version API
Now that we are using PDF 1.5 features, add an api to select between
version 1.4 or 1.5.
2008-11-24 22:27:09 +10:30
Adrian Johnson
d85e836911 PDF: Add newline to end of binary streams
PDF requires white space before the "endstream"
2008-11-24 22:27:09 +10:30
Adrian Johnson
7fdb712cba PDF: Add JPEG2000 image embedding
Requires increasing the PDF version to 1.5.
2008-11-23 21:05:41 +10:30
Adrian Johnson
0746efbf07 Add JPEG2000 mimetype and image info function 2008-11-23 21:05:36 +10:30
Adrian Johnson
5de1e4de93 Move cairo-jpeg-info.c to cairo-image-info.c
Other image formats will be added to the same file.
2008-11-23 18:33:58 +10:30
Luo Jinghua
63180edf6f glitz: set clone_offset_{x, y} on success in clone_similar.
With this fix, glitz backend passes 135 test cases and fails 66 test cases.
2008-11-23 11:42:26 +08:00
Luo Jinghua
36c1b3e591 glitz: fixup a stupid bug in get_image.
_pixman_format_from_masks returns a boolean instead of cairo status code.
Without this fix, get_image bails out over and over again even operations
was completed successfully. :-(
2008-11-23 10:27:49 +08:00
Nicolas Bruguier
c8b70aacc6 glitz: bring glitz backend to more or less working state.
Thanks Nicolas Bruguier for writing the original patch and
thanks Paolo Bonzini for pointing out. This patch converts 24.8
fixed point values into 16.16 ones before passing them down to glitz.
And I fixed a use-after-free issue in _cairo_glitz_surface_set_clip_region.
glitz_surface_set_clip_region takes the pointer and doesn't copy the
clip boxes, the original code frees the clip boxes immediately after
setting clip region. Keeping the box around with the life time of clip
region fixes the bug.
2008-11-22 18:16:17 +08:00
Maarten Maathuis
77e60df32f cairo-xcb: avoid leaking memory 2008-11-21 18:31:04 +00:00
Chris Wilson
361962b7fb [directfb] Compile fix with debug enabled.
Fix a trivial compile failure reported here:
  Bug 18322 - bug in _cairo_directfb_surface_release_source_image function
  (http://bugs.freedesktop.org/show_bug.cgi?id=18322)
2008-11-21 18:29:54 +00:00
Chris Wilson
f15b1f26be [region] Use the caller supplied array for extracting boxes.
Allow the user to pass in a pre-allocated array and use it if the number
of boxes permits. This eliminates the frequent allocations during clipping
by toolkits.
2008-11-21 09:40:42 +00:00
Chris Wilson
9d2c55c661 [traps] Embed sufficient traps to accommodate a stroke rectangle
Small numbers of traps are frequently generated from either a path of a
single line, or that of a rectangle. Therefore should embed sufficient
storage with cairo_traps_t to accommodate the stroke of a single rectangle
(e.g. a pango unknown glyph hexbox) to avoid frequent allocations.
2008-11-21 09:40:42 +00:00
Chris Wilson
a11442154d [cairo] Allocate glyphs on the stack for show_text().
First try to use a stack buffer for the glyphs and clusters if the user
calls cairo_show_text() - for example, as pango does to draw the unknown hex
box.
2008-11-21 09:40:42 +00:00
Chris Wilson
9556266ffc [surface] Make the error surfaces have a NULL backend.
By using a NULL backend for the error surfaces, instead of a pointer to
the image surface backend end, we save a few lookup/redirections during
dynamic linking.
2008-11-21 09:40:42 +00:00
Chris Wilson
cfd2c73826 [image] Trim image surface size by a few bytes
Convert an infrequently accessed series of cairo_bool_t and short enums
to a common bitfield.
2008-11-21 09:40:37 +00:00
Chris Wilson
727ff2bd72 [xlib] Explicitly track whether the GC has clip_rects.
Simplify the logic and remove some pessimism from the code by explicitly
tracking when we set clip rectangles on the GC.
2008-11-19 17:11:49 +00:00
Chris Wilson
63a86a470f [surface] Replay meta surfaces to a similar surface.
When cloning a meta-surface, first attempt to replay it to a similar
surface rather than a full-sized image buffer.
2008-11-19 14:06:10 +00:00