Commit graph

417 commits

Author SHA1 Message Date
Nis Martensen
0e135d9f5a Mark the new API as such
cairo_surface_create_similar_image, cairo_surface_map_to_image and
cairo_surface_unmap_image were added in
a69335a84e.
2011-08-05 08:47:52 +02:00
Uli Schlachter
95d6235bbe Clarify the API docs for the newest functions
Recently cairo_surface_create_similar_image(), cairo_surface_map_to_image() and
cairo_surface_unmap_image() were introduced. However, the documentation was
slightly misleading and recommended a wrong usage.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-08-04 21:18:13 +02:00
Uli Schlachter
51faa5a1c2 surface_unmap_image: Fix fallback
The fallback code assumed that the caller mapped the complete surface to an
image. If only parts of a surface were mapped, the code didn't correctly
translate and clip its operations.

Fixes map-bit-to-image for xlib-xcb and improves the result for recording.

Thanks to Chris Wilson for some simplifications.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-08-04 21:10:09 +02:00
Andrea Canciani
e04e368748 Remove useless checks for NULL before freeing
This patch has been generated by the following Coccinelle semantic patch:
// Remove useless checks for NULL before freeing
//
// free (NULL) is a no-op, so there is no need to avoid it

@@
expression E;
@@
+ free (E);
+ E = NULL;
- if (unlikely (E != NULL)) {
-   free(E);
(
-   E = NULL;
|
-   E = 0;
)
   ...
- }

@@
expression E;
@@
+ free (E);
- if (unlikely (E != NULL)) {
-   free (E);
- }
2011-07-31 16:46:36 +02:00
Andrea Canciani
b39d3d4b53 surface: Set errors through _cairo_surface_set_status()
The status should never be set directly. Instead, it should be set by
_cairo_surface_set_status().
2011-07-31 13:05:22 +02:00
Andrea Canciani
2fd20e5c1e surface: Check image parameter in cairo_surface_unmap_image()
The image argument must be a cairo-image surface.
2011-07-27 09:44:26 +02:00
Chris Wilson
a69335a84e API: map-to-image and create-similar-image
A common requirement is the fast upload of pixel data. In order to
allocate the most appropriate image buffer, we need knowledge of the
destination. The most obvious example is that we could use a
shared-memory region for the image to avoid the transfer cost of
uploading the pixels to the X server. Similarly, gl, win32, quartz...

The other side of the equation is that for manual modification of a
remote surface, it would be more efficient if we can create a similar
image to reduce the transfer costs. This strategy is already followed
for the destination fallbacks and this merely exposes the same
capability for the application fallbacks.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-07-26 14:55:58 +01:00
Chris Wilson
b132fae5e8 clip: Rudimentary support for clip-polygon extraction
Step 1, fix the failings sighted recently by tracking clip-boxes as an
explicit property of the clipping and of composition.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-07-19 21:14:34 +01:00
Uli Schlachter
cc3e4c6ec9 Handle CAIRO_STATUS_DEVICE_FINISHED in switches
Fixes all warnings that looked like this:

warning: enumeration value 'CAIRO_STATUS_DEVICE_FINISHED' not handled in switch

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-07-09 11:19:49 +02:00
Uli Schlachter
d938e74446 xcb,xlib,surface: Check for too small sizes
This adds checks for negative sizes in cairo_surface_create_similar() and for
non-positive sizes in all public surface-creation functions in the xcb and xlib
backends.

X11 doesn't allow 0 as width/height, so if anyone claims to have a drawable of
that size, he can't be right. However, cairo allows such sizes which is why
create_similar doesn't reject 0.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-06-24 15:24:09 +02:00
Chris Wilson
9669b300a0 surface: Don't pass INT_UNSUPPORTED to _cairo_surface_set_error
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-03-02 18:31:28 +00:00
Benjamin Otte
ea0595c5ec surface: Actually return a value from _cairo_surface_set_error()
This is what happens when there's too many warnings on the screen: I
don't see the important ones. Oops.
2011-02-18 19:06:16 +01:00
Benjamin Otte
056250775f surface: Allow NOTHING_TO_DO as a valid error for now
Lots of code relies on it, so we'd better not break that immediately. ;)
2011-02-18 18:52:11 +01:00
Benjamin Otte
badf32290f surface: Don't be nice to people setting internal error codes
Just DIE DIE DIE in the _cairo_status_set_status() assertion.
2011-02-18 18:23:35 +01:00
Andrea Canciani
01799bf052 Fix optimization of white IN dest compositing
The optimization of any opaque color IN an alpha-only surface is a
noop (it multiplies the alpha of each pixel of the destination by 1).
The same does not apply to colored destinations, because IN replaces
the original color with the color of the source.

Fixes white-in-noop.
2011-01-17 12:18:21 +01:00
Maarten Bosmans
a351807147 doc: Fix some broken references and gtk-doc warnings
The gtk-doc comments contain some typos and are missing some escaping.
2011-01-16 18:40:49 +01:00
Adrian Johnson
ed24deaa2e mesh: Add mesh pattern type and enum values
Add the mesh pattern type and an error status to be used to report an
incorrect construction of the pattern.

Update the backends to make them ready to handle the new pattern type,
even if it cannot be created yet.
2011-01-01 13:05:12 +01:00
Uli Schlachter
7f68461e0b Detach snapshots after flushing in cairo_surface_finish()
Flushing a surface can attach snapshots to it, thus we have to detach
the snapshots after the flush, to make sure they aren't leaked.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-12-29 17:44:07 +01:00
Uli Schlachter
59ac884c60 Verify that surfaces leak no snapshots
Finished surfaces should own no snapshots, because finished surfaces
can't be used as sources, thus their snapshots would never be used.

When free'ing the surface in cairo_surface_destroy(), it should have
no snapshots, or they will be leaked.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-12-29 17:16:51 +01:00
Uli Schlachter
10e58a4a16 Avoid some unneeded 'is_clear = FALSE'
When a drawing operator doesn't actually have any effect, we don't have to set
the surface's is_clear flag to FALSE.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-12-15 15:38:36 +00:00
Andrea Canciani
f317a31b3f surface: Remove _cairo_surface_*_extents
They have been replaced by cairo_composite_rect_t functions.
2010-12-10 10:34:47 +01:00
Andrea Canciani
71e6520fa6 surface: Remove _cairo_surface_fill_rectangle
It is not used anymore.
2010-12-10 10:34:47 +01:00
Adrian Johnson
59661f8af4 Fix fallback-resolution test
The recording surface source image painted onto fallback images always
had the resolution 72ppi instead of the fallback resolution of the
target surface. Fix this by passing adding a new
acquire_source_image_transformed backend function for the recording
surface to use and passing the target device transform through to the
recording surface when the image is acquired.

Based on Carl Worth's experimental acquired_source_image_transformed
branch.

https://bugs.freedesktop.org/show_bug.cgi?id=24692
2010-11-28 03:38:29 +10:30
Adrian Johnson
9862c38fc7 Add unique_id mime type
to ensure surfaces with the same unique_id mime type are not embedded
more than once in PDF files.
2010-11-23 00:13:02 +10:30
Uli Schlachter
6bfe71124b font options: Add private round_glpyh_positions field
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-21 22:20:12 +02:00
Benjamin Otte
9f33f8453b configure: Disable tee backend by default
We don't want to enable it by default when nobody uses it.
2010-07-30 22:27:27 +02:00
Benjamin Otte
dd6026b613 doc: Make the necessity of flush/mark_dirty more obvious 2010-07-11 23:32:12 +02:00
Chris Wilson
9b9952ab4f Convert mime data length to use unsigned long
What we want to use is size_t, but we don't want the implied POSIX
dependency. However, POSIX does say that size_t is an unsigned integer
that is no longer than a long, so it would appear safe to use an
unsigned long as a replacement. Safer at least than unsigned int.
2010-07-10 11:16:19 +01:00
Benjamin Otte
739d6e35fa doc: Clarify that cairo_surface_get_device() can return NULL 2010-07-09 03:04:27 +02:00
Benjamin Otte
b870cc030d doc: Move tmpl/ docs to inline docs
I did this manually so I could review the docs at the same time.
If anyone finds typos or other mistakes I did, please complain to me (or
better: fix them).
2010-07-08 14:27:16 +02:00
Benjamin Otte
448653e7b9 Call _cairo_error() when setting the FINISHED error on surfaces 2010-07-05 22:42:08 +02:00
Benjamin Otte
8fd1ecea12 surface: Fail if set_mime_data() is called on a finished surface
Caught by api-special-cases test
2010-07-05 18:38:33 +02:00
Benjamin Otte
e388ff1ae7 surface: Fail early if create_similar() is called on a finished surface
Caught by api-special-cases test
2010-07-05 18:38:33 +02:00
Benjamin Otte
c1689ef6f2 surface: don't call begin_modification on finished surfaces
Fixes https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622

Caught by api-special-cases test
2010-07-05 18:38:33 +02:00
Nicolaus L Helper
7a023a62f7 ft,fc,xlib: LCD filtering patch.
This adds internal API to retrieve the LCD filtering parameters from
fontconfig, or as set on the Screen, and feed them to FreeType when
rendering the glyph.

References:
  Bug 10301 - LCD filtering patch
  https://bugs.freedesktop.org/show_bug.cgi?id=10301

Tested-by: Brandon Wright <bearoso@gmail.com>
Forward-ported-by: Robert Hooker <sarvatt@gmail.cm>

ickle: The API is clearly not ready for public consumption, the enum are
poorly named, however this stands by itself as enabling system wide
properties.
2010-06-17 09:06:13 +01:00
Chris Wilson
1a544361e8 gstate: Update cached matrix state after device transform changes on the target
Commit 8d67186cb2 caches whether the device
transform is identity on context creation. However, the api is quite lax
and allows the user to modify the device transform *after* he has
started to use the surface in a context, as apparently WebKit does.
Since this is not the only instance where we may need to invalidate
caches if the user modifies state, introduce a simple mechanism for
hooking into notifications of property changes.

Fixes test/clip-device-offset.
2010-06-11 16:08:17 +01:00
Andrea Canciani
baaf312e04 pattern: remove content field from solid patterns
The content field in solid patterns had ill-defined semantic (or no
semantic at all), thus it can be removed.
2010-06-10 16:07:41 +02:00
Andrea Canciani
7461947eb1 surface: remove content argument from is_similar
The content argument was basically unuses.

Xlib change extracted from ickle's wip/compositor branch.
2010-06-10 16:07:41 +02:00
Benjamin Otte
1c15510c3d Call cairo_surface_flush() before setting finished
With the current code, the surface will never be flushed as the flush
function checks if the surface is finished, and if so, doesn't call the
vfunc. Ooops.
2010-06-07 13:37:48 +02:00
Benjamin Otte
5c74beaaa5 docs: fix typo 2010-06-07 13:37:48 +02:00
Benjamin Otte
0501179963 surface: Add _cairo_surface_release_device_reference() API
See the API documentation for that function about its intended purpose.
2010-05-18 13:43:27 +02:00
Chris Wilson
91dfee420c device: Reorder finalization so that user data is destroyed last.
As the user is likely to attach the underlying resources to the device
for automatic collection upon finalization, it is important that the
user data is then destroy last (so that those resources are still
available in the surface and device cleanup routines).
2010-05-06 17:07:02 +01:00
Benjamin Otte
3294daf423 Create cleared surface instead of a scratch surface in clone_similar()
A cleared surface is needed when playing back a recording surface that
has semi-transparent operations.
As this only affects surface types where scratch surfaces aren't already
cleared (ie it affected xlib but not image), the effect was only visible
for those backends.
This should not cause any performance regressions as the other backends
set surface->clear = TRUE when creating the scratch surface, so the
clear operation is effectively a no-op.

Covered by the existing pdf-surface-source and svg-surface-source tests.
2010-04-30 20:19:08 +02:00
Chris Wilson
8ded35fd69 ps: Enable native encoding of subsurface patterns.
Carefully handle subsurfaces of a recording surface through the analysis
and paginated surfaces so that we can generate a native pattern for the
vector backends, demonstrated by the PostScript backend.

Nothing remarkable, just a lot of bookkeeping to track the wrapped
surface types and to apply the correct offsets when generating the
subsurface pattern.
2010-04-30 10:16:24 +01:00
Chris Wilson
07122f37d1 surface: Convert snapshots from an array to a double-linked list.
Saves the memory allocation for the array, and the overhead of
maintaining the area for both insertions and more importantly deletes.
2010-04-30 10:16:23 +01:00
Chris Wilson
f5cf131a9d surface: skip OVER is the source is clear.
If the source has no alpha, the OVER operation becomes DST, i.e. a
no-op.
2010-04-27 18:56:23 +01:00
Andrea Canciani
b8a7f8621a Update FSF address
I updated the Free Software Foundation address using the following script.

for i in $(git grep Temple | cut -d: -f1 )
do
  sed -e 's/59 Temple Place[, -]* Suite 330, Boston, MA *02111-1307[, ]* USA/51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA/' -i "$i"
done

Fixes http://bugs.freedesktop.org/show_bug.cgi?id=21356
2010-04-27 11:13:38 +02:00
Chris Wilson
bd17b898b1 surface: Propagate the error status to _cairo_surface_get_device()
If the surface is in error, the appropriate action is report the error
using an inert error cairo_device_t.

Reported-by: Benjamin Otte <otte@redhat.com>
2010-04-14 19:31:35 +01:00
Andrea Canciani
7c2c3f621f Correct masking optimization
In _cairo_surface_mask() there was an invaild optimization (it failed
for surfaces without alpha content). Using _cairo_pattern_is_clear()
is the correct way to evaluate if a pattern is clear.

Fixes clear-source
2010-04-03 22:57:19 +02:00
Chris Wilson
be4ffa9df2 doc: Fix some missing '%' in gtk-doc comments 2010-03-30 18:31:38 +01:00