Commit graph

64 commits

Author SHA1 Message Date
Billy Biggs
326911a749 Update the long description of cairo_matrix_t to match the current sources.
Add cairo_path_data_t.
Some documentation updates and improvements.
2005-08-23 19:52:09 +00:00
Owen Taylor
00af78735e Rip out all the code for doing anything other than linear interpolation between color stops, instead of doing different funky things based on pattern->filter. (#4184) 2005-08-23 14:53:08 +00:00
Carl Worth
f219b83466 if users attempt to twice destroy or re-reference a destroyed object. The condition for detecting this case is a ref_count of 0.
Reviewed by: otaylor Fixes bug #4198
2005-08-23 14:04:28 +00:00
Owen Taylor
2d9d744f8c Make cairo_ft_unscaled_font_backend static.
Add missing static.
Use NULL, not 0.
Use void in the definition of void functions, not ().
Make non-exported cairo_pattern_nil_* static.
2005-08-22 20:43:23 +00:00
Billy Biggs
33599bc6b6 Fix for bug #4172:
Use _cairo_fixed_to_double and _cairo_double_to_fixed when converting between double and 16.16 fixed point. These functions round nicely, and solve some inconsistencies in rendering between my PPC and x86 machines. Thanks to Owen Taylor for suggesting the fix.
The above change does affect linear gradients slightly, but it seems worth it. Update the reference images to follow.
2005-08-21 14:10:39 +00:00
Carl Worth
7468ed35a1 Fixes for a general problem of which bug #4094 was a specific instance:
Don't change the status value if it already holds an error. This avoids destroying "first error" information and also avoids attempting to write read-only data, (eg. from nil objects).
Don't set an error on the same object if it is in an error state to begin with, just return immediately. This is intended to reduce (eventual) error prints to the first cause of an error for any given object, instead of a continual spew.
2005-08-19 12:08:42 +00:00
Carl Worth
b626dff5b9 Fix for bug #3915:
Add new NULL_POINTER nil pattern.
Check for surface == NULL and return a nil pattern.
Verify that the above fix works.
2005-08-19 07:39:47 +00:00
Carl Worth
435fb3c65f Fix for bug #4088:
New function to return the current nil pattern depending on the status.
Add missing early bailout on surface->status with error propagation to the pattern.
Related cleanups for cairo_pattern_t:
Don't check other->status since this is a static function.
Add missing early bailout on other->status.
Cleanup identifier names.
Track rename of nil patterns.
Don't call _cairo_error for pre-existing errors.
Take care to initialize some fields to that _cairo_pattern_release_surface will work even after an error.
Track rename of cairo_solid_pattern_nil to cairo_pattern_nil.
New test to ensure that a file-not-found error will propagate from a surface, through a pattern, and onto a cairo_t.
2005-08-18 23:10:37 +00:00
Carl Worth
45cea5efc8 Fix documentation comment to use & in place of &. 2005-08-18 22:31:04 +00:00
Carl Worth
3f24b949a0 Fix unterminated comment that eliminated cairo_pattern_add_color_stop_rgba. 2005-08-13 04:22:46 +00:00
Carl Worth
fd8a70f4b6 Add missing notes on soname and user-space locking for cairo_set_source() to the 0.9.0 release notes.
Document cairo_pattern_add_color_stop_rgb, cairo_pattern_add_color_stop_rgba, cairo_pattern_set_matrix, and cairo_pattern_get_matrix.
Add note on user-space locking to the documentation for cairo_set_source().
2005-08-13 04:17:36 +00:00
Kristian Høgsberg
27573750eb Change *_reference() functions to return the object being referenced. 2005-08-04 18:44:29 +00:00
Carl Worth
5d7c796c18 Remove all create_in_error functions as they were just muddling up the memory management semantics:
_cairo_path_data_create_in_error _cairo_pattern_create_in_error _cairo_surface_create_in_error
Don't bother with extra check of other->status to anticipate and try to prevent cairo_surface_create_similar from returning through cairo_surface_create_in_error.
Just return &_cairo_surface|pattern|path_nil rather than _cairo_surface|pattern|path_create_in_error.
After checking surface->status from a cairo_<foo>_surface_create function, just return CAIRO_STATUS_NO_MEMORY since that's the only error we'll get from one of these create functions.
Remove unnecessary check for gstate == NULL;
Fix old check for image == NULL instead of image->base.status.
Add missing check of surface->image_base.status after creating surface->image.
Add missing check of surface->base.status after creating surface.
2005-07-28 09:46:38 +00:00
Carl Worth
2b5d9c8e00 Add CAIRO_STATUS_INVALID_CONTENT, CAIRO_STATUS_INVALID_FORMAT, and CAIRO_STATUS_INVALID_VISUAL.
Change functions to return type of void:
cairo_scaled_font_extents cairo_surface_finish
Add new functions to query object status:
cairo_scaled_font_status cairo_surface_status
Implementation of new error handling scheme for cairo_surface_t and cairo_scaled_font_t.
Track change in return value of cairo_surface_finish.
2005-07-27 15:39:34 +00:00
Carl Worth
d8500060a9 Fix up one more call to _cairo_pattern_release_surface missed in the previous commit. 2005-07-14 15:47:18 +00:00
Carl Worth
3cd006bb2b Fix to accept a cairo_pattern_t rather than a cairo_surface_t as the primary argument.
Track change in _cairo_pattern_release_surface and also pass the appropriate pattern for each acquired surface. The previous backend mismatch was causing memory leaks.
Remove stale comment.
Add missing fclose to keep valgrind happy about memory leaks.
2005-07-14 15:10:47 +00:00
Carl Worth
9a2ba48b29 Give enum tags an underscore prefix to match the style of the struct tags. Add new cairo_content_t and change cairo_surface_create_similar to accept a cairo_content_t rather than a cairo_format_t.
Change surface backend create_similar call to accept a cairo_content_t rather than a cairo_format_t.
Fix all calls into create_similar to pass a cairo_content_t rather than a cairo_format_t.
2005-07-08 10:12:28 +00:00
Kristian Høgsberg
5ab8a3085e New functions to create a cairo_pattern_t corresponding to a solid color and a translucent color respectively. Document a few pattern functions. 2005-06-28 15:58:42 +00:00
Carl Worth
ab668278b0 Abstract CAIRO_ALPHA_IS_OPAQUE out for general internal use.
Optimize to defer to cairo_paint if the alpha value is actually opaque.
2005-06-20 11:09:51 +00:00
Kristian Høgsberg
66f8b1202e Remove matrix, filter and repeat from the cairo_surface_t struct. 2005-06-17 13:25:19 +00:00
Carl Worth
8084fb9b09 Add new _cairo_pattern_create_in_error.
Propagate error values from cr->status to pattern->status.
2005-06-13 16:53:52 +00:00
Carl Worth
14ae3ce3ad No longer need to check for NULL after creating a pattern.
Propagate status errors from pattern->status to cr->status.
Originally 2005-05-08 Owen Taylor <otaylor@redhat.com>:
src/cairo-pattern.c src/cairoint.h: If allocation of pattern objects fails, return special static nil pattern objects.
If adding a color stop fails to allocate memory, set pattern->status. (And fix a memory leak.) Make public functions return when pattern->status is set, (and no longer return a cairo_status_t).
src/cairo-pattern.c src/cairo.h doc/public/cairo-sections.txt: Add cairo_pattern_status()
Check the status of gstate->source and of mask patterns passed in.
2005-06-13 16:36:40 +00:00
Carl Worth
31dcb954fe Remove STATUS_OK macro which was not being used universally. 2005-06-10 12:18:20 +00:00
Carl Worth
36beed9bf1 Add CODING_STYLE document to standardize on some style issues.
Standardize brace handling around all else clauses according to new CODING_STYLE guidelines.
2005-06-03 14:51:57 +00:00
Carl Worth
c56938e568 Rename CAIRO_OK to STATUS_OK. No intended changes in functionality. 2005-06-01 13:24:10 +00:00
Keith Packard
45a966f695 Replace nesting-only surface clipping with gstate contained serial-number tracked clipping sets that are loaded into the surface on demand just before each rendering operation. This permits multiple cairo_t contexts to reference a surface without regard to ordering of operations among the contexts.
Also in this patch is a change to the xlib surface that creates two separate Pictures, one for source and one for destination operands which separates the source clipping from destination clipping. Cairo now specifies that sources are never clipped by any clipping applied to them as destinations.
Move cairo_clip_t (renamed from cairo_clip_rec_t) from cairoint.h to cairo-gstate-private.h. Eliminate stack of clip state from surfaces. Add new surface clipping API.
Manage clip objects entirely within the gstate, loading the whole thing into the surface just before drawing.
Source surfaces need not have clipping modified as the surface interface now specifies that source surfaces are always unclipped.
Eliminate nested clipping contexts, leaving clip management entirely to the gstate. Create new clip API for the gstate which uses per-surface serial numbers to match gstate clipping against current surface clipping values.
Surfaces no longer track clipping regions at all, so the old _cairo_surface_get_clip_extents has been replaced with _cairo_surface_get_extents. For PDF/PS surfaces, this function is expected to return a rectangle covering the entire fixed point coordinate space to leave rendering unclipped by the surface.
Region clipping capability is now signalled by a non-NULL function pointer in set_clip_region.
Each surface now contains two Pictures, one for source and one for destination operands so that source operands are never clipped by destination clipping.
CAIRO_STATUS_BAD_NESTING removed
self-copy now passes (Xlib only, until libpixman changes land)
reviewed by: krh, otaylor, cworth
2005-05-26 11:35:44 +00:00
Keith Packard
200bcda188 Initialize op->stops[0].scale = 0.
This scale value is used only when computing gradient values before the defined range, in which case stop 0 is used for both ends of the interpolation, making the value of 'scale' not actually matter, except that valgrind notices we're using an undefined value.
2005-05-16 22:31:36 +00:00
Carl Worth
14c690472c Push cairo_matrix_t const-correctness down through the entire implmentation, (expanding on preliminary work by Robert O'Callahan <rocallahan@novell.com>) 2005-05-09 09:12:52 +00:00
Carl Worth
9939e01b69 Remove deprecated cairo_get_rgb_color that was accidentally missed in the recent purge of deprecated functions. 2005-05-06 21:25:56 +00:00
Carl Worth
d7fe527e0f Eliminate the following deprecated functions from cairo's interface:
cairo_copy cairo_get_path cairo_get_path_flat cairo_matrix_create cairo_matrix_destroy cairo_matrix_copy cairo_matrix_get_affine cairo_surface_set_repeat cairo_surface_set_matrix cairo_surface_get_matrix cairo_surface_set_filter cairo_surface_get_filter
Also, eliminate all support for compiling against, or running with old, deprecated names for functions.
Deal with all of the removals.
2005-05-06 13:32:53 +00:00
Owen Taylor
cea1de7579 src/cairo.[ch] doc/public/cairo-sections.txt: Add cairo_paint_with_alpha().
Fix segfault when mask == NULL.
test/mask.c test/mask-ref.png: Add testing of cairo_paint_with_alpha().
test/coverage.c test/coverage-ref.png: Remove ... it's not testing anything that mask doesn't test better.
2005-05-06 12:00:22 +00:00
Owen Taylor
7dbd1f4401 src/cairo-surface.c src/cairoint.h: Add _cairo_surface_begin/end to save and restore the clip state of a surface. Copy and store clip regions set on a surface so that we can save and restore them.
Add a CAIRO_STATUS_BAD_NESTING error for interleaved use of two cairo_t's on the same surface. Also, add a skeleton doc comment for cairo_status_t.
src/cairo.c src/cairo-gstate.c src/cairoint.h: Use _cairo_surface_begin/end to replace _cairo_gstate_restore_external_state.
Use _cairo_surface_begin/end to save the state of a surface when we start drawing at it and restore it at the end. Check that the save level of the surface is what we expect on drawing operations and fail with CAIRO_STATUS_BAD_NESTING otherwise.
src/cairo-pattern.c src/cairoint.h (_cairo_pattern_acquire_surface_for_surface) (_cairo_pattern_release_surface): Surround use of pattern->surface with _cairo_surface->begin/end so we don't clip surfaces used as sources.
test/clip-nesting.c test/Makefile.am: Test of destinatin clipping with the nested creation of cairo_t's for the same context.
test/source-clip.c test/Makefile.am: Test that clipping on a source as a destination doesn't affect use of it as a source.
XFAIL test for copying from a surface as a source to itself as a destination with a clip.
2005-05-02 13:39:30 +00:00
Carl Worth
828094aef8 and delete:
cairo_set_pattern -> cairo_set_source cairo_get_pattern -> cairo_get_source cairo_set_rgb_color -> cairo_set_source_rgb
-> cairo_set_source_rgba cairo_set_alpha -> cairo_get_alpha ->
Note that we'll likely want to add cairo_set_source_surface.
Add _cairo_stock_color helper function. Improve some interfaces:
_cairo_color_init _cairo_color_init_rgb _cairo_color_set_rgb -> _cairo_color_init_rgba _cairo_color_set_alpha _cairo_color_multiply_alpha
_cairo_color_get_rgb -> _cairo_color_get_rbga _cairo_color_get_rgba_premultiplied
Add cairo_stock_t and some helper macros:
CAIRO_COLOR_WHITE CAIRO_COLOR_BLACK CAIRO_COLOR_TRANSPARENT
Fix cairo_pattern_t by eliminating pattern->alpha. Fix cairo_solid_pattern_t to use cairo_color_t rather than three doubles.
Track removal of pattern->alpha, simplifying the code considerably
Track _cairo_color interface changes. Remove gstate->alpha. Propagate down set_source renamings.
cairo_pattern_add_color_stop -> cairo_pattern_add_color_stop_rgba
and add:
cairo_pattern_add_color_stop_rgb
Remove pattern->alpha, simplifying the code considerably.
Track pattern and color interface changes.
Add const where appropriate on cairo_color_t*.
Add private type inspection predicate. (cairo_xlib_surface_set_size): Add check for surface type mismatch, (no useful error reporting yet, though).
Note coverage as en expected failure.
Improve line wrap on expected failure messages.
Port all tests to new cairo_set_source interfaces.
2005-04-14 14:42:26 +00:00
Carl Worth
369d1bf28f Default to CAIRO_FILTER_GOOD rather than CAIRO_FILTER_BEST.
Optimize to use CAIRO_FILTER_NEAREST when the pattern matrix is an integer translation.
2005-04-12 09:14:14 +00:00
Carl Worth
439a94cc7b Use CAIRO_FILTER_BEST by default rather than CAIRO_FILTER_NEAREST. 2005-04-12 07:57:46 +00:00
Carl Worth
d135938efd Rework the cairo_matrix_t interface in several ways. Expose a struct for cairo_matrix_t.
Add new function to return current matrix: cairo_get_matrix
Deprecate the following functions (in documentation): cairo_matrix_create cairo_matrix_destroy cairo_matrix_get_affine
Rename: cairo_matrix_set_affine -> cairo_matrix_init cairo_matrix_set_identity -> cairo_matrix_init_identity
Add other new matrix initialization functions: cairo_matrix_init_translate cairo_matrix_init_scale cairo_matrix_init_rotate
Change return type of almost all cairo_matrix functions from cairo_status_t to void.
Track changes to cairo_matrix_t interface.
Add a test case showing the same path drawn under various transforms, (including skews set directly by initializing a cairo_matrix_t).
2005-04-07 10:01:49 +00:00
Carl Worth
a6d9b6a671 Change type of data parameter from char* to unsigned char*.
Propagate the unsigned char* change down the stack.
Add cast since XImage uses char* rather than unsigned char*.
Fix memory leak of image data.
Switch to use cairo_surface_write_png rather than a custom write_png_argb32.
Add test to exercise the cairo_image_surface_create_for_png function.
2005-04-04 09:47:12 +00:00
Owen Taylor
e7607bb379 Comment and clean up the gradient computation. (_cairo_linear_pattern_classify): Determine if a linear gradient is horizontal or vertical. (_cairo_pattern_acquire_surface_for_gradient): Optimize horizontal/vertical gradients with a repeating surface.
Test case for linear gradients at angles and with a rotated pattern matrix.
2005-03-06 12:05:23 +00:00
Owen Taylor
66af5f9f36 src/cairoint.h src/cairo_pattern.c src/cairo_glitz_surface.c: Add _cairo_pattern_is_opaque, use it rather than pattern->alpha == 1.0. 2005-03-04 09:41:34 +00:00
David Reveman
01b87c7d99 Add overall alpha acceleration using mask surface 2005-03-03 18:46:49 +00:00
David Reveman
50b5344d7d Pass mask to composite operation as pattern 2005-03-03 18:39:06 +00:00
David Reveman
019d381b40 Change to cairo_surface_t like structure of of cairo_pattern_t 2005-03-03 17:40:04 +00:00
Carl Worth
1a043bbf26 Don't put an off-by-one n_stops into cairo_shader_op_t. (_cairo_shader_op_find_color_stops): Put search for two color stops containing a given offset into its own function. Handle the case of before first and after last stop by returning the nearest stop twice. (_cairo_pattern_calc_color_at_pixel): Handle case of no color stops by returning a transparent pixel. 2005-02-25 12:52:47 +00:00
Carl Worth
aca0708fc8 Fix memory leak when realloc fails due to out-of-memory. 2005-02-24 14:06:03 +00:00
Carl Worth
30a02c8e17 Revert accidental commit. 2005-02-21 08:22:47 +00:00
Carl Worth
c8a98b109a Fix y offset to use dst_y instead of dst_x, (caught by David Reveman). 2005-02-21 08:17:42 +00:00
Owen Taylor
26148a1d15 src/cairoint.h src/cairo_image_surface.c src/cairo_pdf_surface.c src/cairo_png_surface.c src/cairo_surface.c src/cairo_xlib_surface.c: Replace the get_image()/set_image() backend operations with a more specific {acquire,release}_{source,dest}_image() and clone_similar().
src/cairoint.h src/cairo_pattern.c: Replace _cairo_pattern_get_surface() with a _cairo_pattern_begin_draw()/_cairo_pattern_end_draw() pair.
Save the format for which an image is created so we can access it later. (Needed for the _cairo_xlib_surface_clone_similar())
src/cairoint.h src/cairo_image_surface.c: Add _cairo_surface_is_image().
Add CAIRO_OK(status) to check for CAIRO_STATUS_SUCCESS.
In the absence of of RENDER, make cairo_xlib_surface_create_similar() return an image surface.
Don't try to use RENDER to composite glyphs in the absence of the RENDER extension.
2005-01-31 08:50:22 +00:00
Owen Taylor
dca785faaf Fixes from David Reveman:
Don't save to surface part of the union when the pattern isn't a surface pattern. (_cairo_pattern_get_surface): Create the new surface at the width and height of the source.
Add cairo-ft-private.h
2005-01-30 11:28:14 +00:00
Kristian Høgsberg
a24f2f909e Update prototype to eliminate warning.
Remember to reference surfaces when copying patterns.
Don't call _gstate_create_pattern for internally created patterns. (_cairo_gstate_show_surface): Don't change the surface matrix here, it's done later when we set it up as a pattern.
Correct clip_twice-ref.png filename.
Add these.
Fix broken intersection code.
2005-01-28 12:27:23 +00:00
Kristian Høgsberg
4c329eecb9 Make sure we always return a surface similar to dst in the gradient case. 2005-01-27 21:14:04 +00:00