Commit graph

114 commits

Author SHA1 Message Date
Vladimir Vukicevic
9dd55f6fe8 [quartz] use CGContextGetType API if available
We need to have a way to figure out if a context is a bitmap context;
the current method works, but it prints a warning to the system console
if called on a non-bitmap context.  There's a private CGContextGetType
API that seems to let us get this information.
2008-03-03 17:40:21 -08:00
Chris Wilson
cdeffc69d9 [cairo-quartz-surface] Make check fixup.
A couple of minor corrections to satisfy make check.
2008-02-26 17:05:22 +00:00
Vladimir Vukicevic
baec928a69 [quartz] More mask fixes -- handle all types via fallback mask image 2008-02-25 21:06:36 -05:00
Vladimir Vukicevic
b439e63808 [quartz] fix mask to correctly take CTM into account 2008-02-25 21:06:25 -05:00
Vladimir Vukicevic
a4975ab117 [quartz] Optimize path handling where possible 2008-02-25 21:06:23 -05:00
Vladimir Vukicevic
63711b1d4a [quartz] Add quartz-image-surface type 2008-02-25 21:06:21 -05:00
Behdad Esfahbod
f0633f4449 [doc] Make sure all function names in docs are followed by () 2008-01-28 21:49:57 -05:00
Behdad Esfahbod
0d898f2bad [doc] Make sure all type names in docs are prefixed by # 2008-01-28 20:49:44 -05:00
Vladimir Vukicevic
936edecb35 [quartz] only use DrawTiledImage if transformed image is integer aligned
This Quartz API seems to only tile at integer coordinates; if the source image is
scaled to anything less than integer-aligned, seams appear between tiles.  Detect
this and fall back to slower but more general CGPattern path.
2008-01-27 16:52:39 -08:00
Behdad Esfahbod
0e73763290 [src] Fix make check 2008-01-27 02:19:47 -05:00
Vladimir Vukicevic
ea9afecc9a [quartz] Do dynamic symbol lookups for 10.4/10.5 optimization symbols
The gcc-__attribute-__ based weak linking was causing all sorts of problems;
do dlsym lookups at runtime instead.
2008-01-24 11:48:02 -08:00
Vladimir Vukicevic
287de2ce58 [quartz] Clean up unused APIs a bit
The data parameter from get_image was never really used; get rid of it and clean up
callers.  Also get rid of a chunk of dead code in release_dest_image.
2008-01-24 11:32:27 -08:00
Chris Wilson
7111b18c27 [cairo-surface] Introduce _cairo_surface_create_in_error().
Unexport all the static error surfaces and use a function to select
the appropriate error surface for the status.
2008-01-16 16:51:32 +00:00
Vladimir Vukicevic
57c2b75c22 [quartz] Store the CGFontRef and reuse it for rendering
Previously the CGFontRef was recreated each time in show_glyphs; this
caused the font to get re-embedded in any PDF files that were being
generated through Quartz.
2008-01-15 14:27:14 -08:00
Kouhei Sutou
3610841910 Fix typo in comment. 2008-01-11 14:40:06 -08:00
Brian Ewins
19680f545a [quartz] fix gradient-zero-stops crash (moz#407104)
Fixes failure in gradient-zero-stops test, reported
by Boris Zbarsky (thanks!) as Mozill a bug#407104.
2007-12-06 21:31:15 +00:00
Brian Ewins
e6c34bb691 [quartz] refactor gradient handling
Avoid checking the gradient type twice. This refactor
also makes it easier to check when the gradient has no stops,
and will make it easier to separate out the different
implementations of EXTEND_REPEAT, REFLECT for linear and
radial gradients.
2007-12-06 21:31:14 +00:00
Vladimir Vukicevic
150564c7f8 [quartz] use rectangle_int_t, not rectangle_int16_t 2007-12-04 14:05:47 -08:00
Vladimir Vukicevic
e8574022f9 [quartz] cleanup: remove trailing whitespace 2007-12-04 13:54:32 -08:00
Vladimir Vukicevic
ee01a94726 [quartz] Use CGContextDrawTiledImage if available
Use this 10.5-only method if available, as it greatly speeds up
tiled image rendering (EXTEND_REPEAT).
2007-12-04 13:53:03 -08:00
Vladimir Vukicevic
2c25033e14 [quartz] Handle creating 0x0 surfaces
Make all 0x0 surfaces be no-ops when used in a rendering operation.
2007-12-04 13:50:49 -08:00
Brian Ewins
ba239a474a [quartz] zero memory on bitmap creation
7 quartz/argb32/similar tests were showing failures due to 
random bits being set. The problem turned out to be that the 
initial test surface was not cleared before the similar surface 
was created by push_group. The problem behaviour is more obvious
if you run the tests with MallocScribble=1.

Fix this by calling memset after bitmap allocation; the multiplication
here cannot overflow since we already checked that in malloc_ab.
2007-11-18 20:30:49 +00:00
Brian Ewins
58e828a9a3 [quartz] fill with alpha for EXTEND_NONE
The implementation of EXTEND_NONE was not filling areas outside
the image with rgba(0,0,0,0). This showed up on the operator-source
test, the fix makes the quartz and image renderings identical.
2007-11-15 21:29:07 +00:00
Vladimir Vukicevic
50d5f5a4e6 [quartz] Fix gradients; the wrong color field was being used
The wrong color field was being used, effectively making gradients always
have transparent black as their color stops.
2007-11-15 11:56:56 -08:00
Brian Ewins
bcb0f57e5e [quartz] remove double malloc in dashing code.
fdash is reallocated without being released, and is
allocated at the wrong size too.
2007-11-14 01:50:34 +00:00
Brian Ewins
e6bc049465 [quartz] typo checking for malloc failure
The check after the malloc of cg_advances looked at the wrong
variable.
2007-11-13 00:43:59 +00:00
Brian Ewins
bb2674207c [quartz] fix leak in show_glyphs
In cairo_quartz_show_glyphs we may leak the source if
there is a failure to malloc the glyph arrays. Fix this.
2007-11-12 23:56:01 +00:00
Brian Ewins
7ad34c1bdc [quartz] fix for cairo_reset_clip() 2007-11-12 23:52:52 +00:00
Brian Ewins
717ccbcf0c Revert "[quartz] handle 0x0 surfaces."
This reverts commit 2fd50a7897.
Spoke too soon, quartz doesn't like creating those 0x0
images; while the tests pass, its putting warnings in the logs.
Reverting to make a better fix.
2007-11-12 23:51:39 +00:00
Brian Ewins
2fd50a7897 [quartz] handle 0x0 surfaces.
Some tests, like invalid-matrix, generate a 0x0 bitmap; in
the quartz backend this caused a nil surface to be returned,
whereas the tests expect a quartz surface. Other surfaces
return a backend-specific surface with a zero-sized bitmap,
quartz should do the same.

Fixes the tests ft-font-create-for-ft-face, get-and-set,
get-clip, invalid-matrix, line-width-zero, 
select-font-no-show-text, solid-pattern-cache-stress,
surface-finish-twice, and text-cache-crash.
2007-11-11 01:49:36 +00:00
Vladimir Vukicevic
f11f7524b6 [quartz] work around Quartz bugs with images bigger than a certain size
Quartz has a bug with images greater than (signed) 16 bits in height; avoid
creating or working with those.  Also fixes some memory leaks.

Patch from John Daggett.
2007-11-09 12:50:45 -08:00
Vladimir Vukicevic
fa7e36669a [quartz] Fix for 10.5 SDK; the FloatToFixed macro started doing strange things 2007-11-09 12:50:45 -08:00
Brian Ewins
8f6abdbc26 [quartz] return status instead of CGPatternRef
Returning status improves error handling, since
returning NULL doesn't let us distinguish different
types of error.
2007-10-20 23:41:46 +01:00
Brian Ewins
cfb26fdf0f [quartz] return status instead of cairo_quartz_surface_t
Returning status improves error handling, since
returning NULL doesn't let us distinguish different
types of error.
2007-10-20 23:41:32 +01:00
Brian Ewins
dec3099585 [quartz] return status instead of CGShadingRef
Returning status improves error handling, since
returning NULL doesn't let us distinguish different
types of error. Suggested by Chris Wilson.
2007-10-20 22:45:30 +01:00
Brian Ewins
481ce2b8cb implement clipping with surface masks.
This implements clipping using CGContextClipToMask, which
means that it will only have an effect on OS X 10.4+.
No additional tests pass with this fix - mainly due to
text effects and problems with the IN, OUT, DEST_IN, DEST_ATOP
operators.
2007-10-20 14:06:07 +01:00
Brian Ewins
b9c065df74 fix dash-zero-length test
Quartz was failing the dash-zero-length test for odd numbers
of dashes; it seems cairo wants 3 dashes to be on-off-on,
off-on-off, wheras quartz uses on-off-on, on-off-on. Fixed
by doubling the number of dashes used.
2007-10-20 14:02:19 +01:00
Brian Ewins
f334ee0397 Implement EXTEND_NONE for gradients.
Fixes linear and radial gradients, which were displaying with
extend_pad when extend_none was requested. Makes the
radial-gradient test pass.
2007-10-20 14:02:17 +01:00
Brian Ewins
0eeec372c0 call _cairo_error on failure
Call _cairo_error to enable setting a breakpoint on quartz errors.
2007-10-20 14:02:16 +01:00
Brian Ewins
8c8ec63903 do not return a cairo_status_t of UNSUPPORTED
We had a bug which converted cairo_int_status_t to cairo_status_t,
causing an assertion; reported at http://developer.imendio.com/node/128.
Return the generic out of memory error instead.
2007-10-20 14:02:15 +01:00
Brian Ewins
6fec51990e do not ignore errors, return NULL instead (moz#874315)
In the quartz backend there are occasional errors where returning NULL
can be used to signal that an error has occured.

Mozilla bug #874315.
2007-10-20 14:00:15 +01:00
Brian Ewins
07fd091e3e do not ignore errors in setup_source
In setup_source we were ignoring a return value, but we can't relay
it to the caller. This patch treats the error as an unsupported
operation.
2007-10-20 13:52:09 +01:00
Brian Ewins
95c708c717 propagate cairo_status_t return values
There are several places in the quartz surface where we ignored
the returned status. This fixes the simple cases where the error
can just be returned to the caller.
2007-10-20 13:52:08 +01:00
Chris Wilson
bed8239f03 [cairo-error] Clean up all the warnings and missing _cairo_error() calls.
Every time we assign or return a hard-coded error status wrap that value
with a call to _cairo_error(). So the idiom becomes:
    status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
or
    return _cairo_error (CAIRO_STATUS_INVALID_DASH);

This ensures that a breakpoint placed on _cairo_error() will trigger
immediately cairo detects the error.
2007-10-04 13:31:44 +01:00
Chris Wilson
8ad56b308a [malloc/error] Add call to _cairo_error() after a failed malloc.
Blitz all allocations to ensure that they raise a
_cairo_error(CAIRO_STATUS_NO_MEMORY) on failure.
2007-10-04 00:42:30 +01:00
Chris Wilson
e8e3bfc130 Revert "[cairo-gstate] Avoid copying untransformed glyphs."
This reverts commit 919bea6dbb.

Sadly as Behdad points out some backends do modify the glyph array and,
for example cairo-xlib-surface, hide this from the compiler with some
evil casts.
2007-08-31 16:53:21 +01:00
Chris Wilson
919bea6dbb [cairo-gstate] Avoid copying untransformed glyphs.
Skip the memory duplication of the incoming glyphs if we do not need
to transform them into the backend coordinate system.

As a consequence we need to constify the glyphs passed to the backend
functions.
2007-08-31 16:28:06 +01:00
Vladimir Vukicevic
be3516335c [fixpt] Replace cairo_rectangle_int16_t with cairo_rectangle_int_t
Mostly s/cairo_rectangle_int16_t/cairo_rectangle_int_t/,
as well as definitions to pick cairo_rectangle_int_t.
2007-07-18 22:45:21 +02:00
Vladimir Vukicevic
0048a26a44 [fixpt] Make fixed point methods static inline and generic
Move the fixed point methods to static inline versions in
cairo-fixed-private.h, and don't hardcode fixed to be 16.16.
2007-07-18 22:45:21 +02:00
Vladimir Vukicevic
76c32f899a [fixpt] Update quartz surface for new types 2007-07-18 13:08:39 -07:00