Commit graph

170 commits

Author SHA1 Message Date
Behdad Esfahbod
8fd7328ebb Don't call into backends if num_glyphs is zero (#5177)
Just return success in _cairo_scaled_font_show_glyphs() and
_cairo_surface_show_glyphs() if num_glyphs is zero.
2006-12-23 17:08:04 -05:00
Behdad Esfahbod
5a9642c574 Add/remove const to cairo_glyph_t* arguments consistently
The rule is: cairo_glyph_t* is always passed as const for measurement
purposes.  This was not reflected in our public api previously.  Fixed

Showing glyphs used to have cairo_glyph_t* always as const.  With this
changed, it is only const on cairo_t and cairo_gstate_t operations.
cairo_surface_t, cairo_scaled_font_t, and individual backends receive
cairo_glyph_t* as non-const.  The desired semantics is that they may modify
the contents of the array as long as they do not return
CAIRO_STATUS_UNSUPPORTED.  This makes it possible to avoid copying the glyph
array again and again, and edit it in-place.  Backends are in fact free to use
the array as a generic buffer as they see fit.
2006-12-11 01:39:51 -05:00
Christopher (Monty) Montgomery
8d7a02ed58 Add extents to clone_similar (fixing subimage_copy performance bug)
This fixes a huge performance bug (entire image was being pushed to X
server in order to copy a tiny piece of it). I see up to 50x improvement
from subimage_copy (which was designed to expose this problem) but also
a 5x improvement in some text performance cases.

 xlib-rgba              subimage_copy-512    3.93 2.46% ->   0.07 2.71%: 52.91x faster
███████████████████████████████████████████████████▉
 xlib-rgb               subimage_copy-512    4.03 1.97% ->   0.09 2.61%: 44.74x faster
███████████████████████████████████████████▊
 xlib-rgba              subimage_copy-256    1.02 2.25% ->   0.07 0.56%: 14.42x faster
█████████████▍
 xlib-rgba        text_image_rgb_over-256   63.21 1.53% ->  11.87 2.17%:  5.33x faster
████▍
 xlib-rgba       text_image_rgba_over-256   62.31 0.72% ->  11.87 2.82%:  5.25x faster
████▎
 xlib-rgba     text_image_rgba_source-256   67.97 0.85% ->  16.48 2.23%:  4.13x faster
███▏
 xlib-rgba      text_image_rgb_source-256   68.82 0.55% ->  16.93 2.10%:  4.07x faster
███▏
 xlib-rgba              subimage_copy-128    0.19 1.72% ->   0.06 0.85%:  3.10x faster
██▏
2006-10-18 17:06:23 -07:00
Carl Worth
d7f08794ef Add many missing slim_hidden calls to bypass PLT entries for local use of public functions 2006-09-05 17:22:00 -07:00
Pavel Roskin
fdd7518b8b Update nil surface structs to the surface struct
Quite a few fields were missing, but all zero, so didn't matter
practically, but comments were out of synch.
2006-08-13 05:02:46 -04:00
Carl Worth
401f0ce3c4 Merge branch 'surface-font-options' into cairo 2006-08-08 00:19:51 -07:00
Carl Worth
02b54ca620 Improve docs for cairo_surface_create_similar() 2006-08-07 23:47:46 -07:00
Behdad Esfahbod
bbc9a1290a Update doc syntax
Annoying, but a function doc should have a body, not only "Returns", or
gtk-doc will not pick it up.
2006-08-07 22:27:15 -04:00
Carl Worth
959b85e98c Merge branch 'warnings-cleanup' into cairo
Conflicts:

	src/cairo-font-subset.c
2006-08-07 15:06:47 -07:00
Chris Wilson
e2fddcccb4 Fix memory leak in _cairo_surface_show_glyphs (bug 7766) 2006-08-04 17:16:35 -07:00
Behdad Esfahbod
9fcb3c32c1 Set fallback resolution in create_similar. Update docs to reflect that. 2006-07-31 14:50:50 -04:00
Behdad Esfahbod
b3341b4eda Let backends return NULL in create_similar to take the fallback path.
Make xlib backend use it.
2006-07-31 14:45:54 -04:00
Behdad Esfahbod
bdb4e1edad Implement per-surface font options.
New internal function _cairo_surface_set_font_options is used to set them.
cairo_surface_create_similar propagates the font options of the other
surface into the newly created surface.  Fixes bugs with font options in
fallback images and bug 4106.
2006-07-31 14:44:42 -04:00
Behdad Esfahbod
5e0f46cdeb Standardize on unsigned for ref_count type and add CAIRO_REF_COUNT_INVALID
The CAIRO_REF_COUNT_INVALID macro simply hides the ((unsigned int)-1) cast
to avoid warnings about comparison between signed and unsigned values.
2006-07-28 15:41:11 -07:00
Behdad Esfahbod
8411494948 Move font-matrix translation and device transform from surface to gstate
Fixes the bug that paginated backends had font-matrix translation
applied twice, AND removes a second copy of the glyphs.  It's
essentially similar to what cworth did for stroke/fill/clip in
this commit: bd92eb7f3c

Reviewed by: Carl Worth
2006-07-28 15:15:15 -04:00
Behdad Esfahbod
84840e6bba Use font matrix offset to reposition glyph origin instead of adjusting advance
As the font matrix includes translation, which is otherwise unused for glyph
transformation, the interpretation of translation is fairly arbitrary. For
1.2.0, we choose to have this translation affect the glyph advance with the
thought that it could be used to do letter spacing/kerning. That is fairly
useless in practice, and a far more useful interpretation is to relocate
the origin of each glyph.

This patch uses the translation in the font matrix as an offset for the
glyph origin in user space. It turns out glyph extents were already correctly
shifted.

The end result with this patch is to have cairo match the 1.0 behaviour for
font matrix translations, but now we know why :-)

Explanation above courtesy of Keith Packard.
2006-07-14 21:42:41 -04:00
Behdad Esfahbod
defa23206c Fix nil surface initializations for surface type. (#7322) 2006-07-10 10:26:19 -04:00
Behdad Esfahbod
cfddf93afb Make CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD not crash on surface patterns,
but return error.
2006-07-01 02:07:28 +02:00
Behdad Esfahbod
6c3deb0be1 Minor doc syntax fixes. 2006-06-30 02:21:51 +02:00
Behdad Esfahbod
320ce67d63 Add "Since: 1.2" to docs for most new API functions. 2006-06-30 02:21:49 +02:00
Carl Worth
bd92eb7f3c Move device_transform of path to before floating->fixed conversion.
This is an attempt to fix the following bug:

	http://bugzilla.gnome.org/show_bug.cgi?id=332266

With the recent rewrite of the device-offset code, which pushed things
from the gstate to the surface layer, the 16-bit limitations on coordinates
which previously applied to device space only, have lately been applying to
user space. This commit moves the device_transform back up above the conversion
from floating-point to fixed-point values so that once again the limitation
only applies to device space.
2006-06-29 21:33:34 +02:00
Carl Worth
9ab5678e53 Fix bug 7268: Fix coordinate space for _cairo_surface_get_extents
Previously this function was attempting to return values in surface
space, (but even then it was doing it wrong). However, all callers
actually expect values in backend space. Fixing this cleans up bug
7268 quite nicely.
2006-06-25 10:04:43 +02:00
Behdad Esfahbod
8bc05f15ab Note that create_similar clears surface. 2006-06-16 18:39:36 -04:00
Carl Worth
9fa24975b4 Drop _cairo_surface_is_opaque now that we have cairo_surface_get_content 2006-06-15 15:33:45 -07:00
Carl Worth
0e30fc4436 Add aliases for deprecated cairo_{pdf,ps,svg}_surface_set_dpi
The aliases should allow binaries with the old symbols to continue to run.

Meanwhile, the macros in cairo.h prevent any code from being compiled without
using the new, future-proof function names.

This is a temporary, transition strategy and the aliases will be dropped
before the next major release.
2006-06-12 09:01:06 -07:00
Carl Worth
2f4210d346 Change _cairo_meta_surface_get_extents to return a bounded size.
The old behavior of returning "infinite" extents is inconsistent with
the current usage of meta-surface where it is always created for
replay against a particular (sized) target surface and that size is
passed to _cairo_meta_surface_create.

Also clarify documentation of _cairo_surface_get_extents to eliminate
the possibility of inifinite extents.
2006-06-10 11:20:21 -07:00
Carl Worth
d758d5104a Don't create a new scaled_font if there's a device_offset but no device_scale.
(This is covering up my mistake from the last batch of 12 commits which
wasn't ready to be pushed yet. This fixes some of the crashes which
were introduced, and is a good thing to do regardless.)
2006-06-10 10:42:32 -07:00
Carl Worth
0662928e4f Clarify that fallback_resolution acts on a per-page granularity.
This explains why the SVG result from the fallback-resolution test
doesn't actually show multiple resolutions in effect at the same time.
2006-06-10 09:44:30 -07:00
Carl Worth
100b30d1c0 Fix font size when drawing text with a device_scale.
The trick is to create a new scaled_font with the device_transform
multiplied into the CTM within _cairo_surface_show_glyphs before
calling into the backend. The fallback-resolution test shows that
the font size is now correct.
2006-06-10 08:35:01 -07:00
Carl Worth
74857181c9 Fix line width for stroking with a device_scale.
The trick is to simply multiply the device_transform into the CTM
within _cairo_surface_stroke before passing the CTM down to the
backend. The fallback-resolution test shows that the stroke width is
now correct.
2006-06-10 08:29:14 -07:00
Carl Worth
6efeb1e19b Hook up device scaling so fallback_resolution starts working.
Add new, private _cairo_surface_set_device_scale for getting at the
scaling components of device_transform. Use this in paginated surface
when replaying to an image surface. The fallback-resolution test now
clearly shows that image fallback resolution can be controlled by the
user. Hurrah!
2006-06-10 08:19:41 -07:00
Carl Worth
b129f747c5 Change {x,y}_device_offset values to a device_transform matrix.
This is a step toward allowing device scaling in addition to device offsets.
So far, the scale values are still always 1.0 so only the translation is
actually being used. But most of the code is in place for doing scaling as
well and it just needs to be hooked up.

There are some fragile parts in this code, all of which involve using the
translation without the scale, (so grep for device_transform.x0 or
device_transform->x0). Some of these are likely bugs that will hopefully
be obvious once we start using the scale. Others are OK if only because
we 'know' that we aren't ever setting device scaling on a surface that
has a device offset (we only set device scaling on surfaces we create
internally and we don't export device scaling to the user).

All of these fragile parts in the code have been marked with comments of
the form: XXX: FRAGILE.
2006-06-10 00:12:51 -07:00
Carl Worth
999315cc0a Rename device_{x,y}_offset to {x,y}_device_offset for better consitency/grepability 2006-06-09 21:12:44 -07:00
Carl Worth
b2f274b3e8 New API: Replace cairo_{ps,pdf,svg}_set_dpi with new cairo_surface_set_fallback_resolution.
This just provides the mechanics for storing the value and removing the old
function calls. The new value is still not used anywhere (though nor where
the old values), so there should be no functional change (other than forcing
any programs calling the old API to be updated).
2006-06-09 16:52:17 -07:00
Carl Worth
746f66c3fc Fix bogus cairo_rectangle_fixed_t to be cairo_rectangle_int16_t.
This rectangle has regular integer values, not fixed-point values.
So the old name was horribly wrong and misleading, (and yes I think
it was even I that had suggested it).
2006-06-06 16:54:03 -07:00
Carl Worth
5278de0997 Remove all remaining trailing whitespace.
This patch was produced with the following (GNU) sed script:

	sed -i -r -e 's/[ \t]+$//'

run on all *.[ch] files within cairo.

Note that the above script would have also created all the changes
from the previous commits to remove trailing whitespace.
2006-06-06 15:41:31 -07:00
Carl Worth
00592e0757 Remove trailing whitespace from lines with a single brace.
This patch was produced with the following (GNU) sed script:

	sed -i -r -e '/^[ \t]*[{}][ \t]*/ s/[ \t]+$//'

run on all *.[ch] files within cairo.
2006-06-06 15:38:58 -07:00
Carl Worth
4670366ede Remove trailing whitespace from lines that look like comments.
This patch was produced with the following (GNU) sed script:

	sed -i -r -e '/^[ \t]*\/?\*/ s/[ \t]+$//'

run on all *.[ch] files within cairo, (though I manually excluded
src/cairo-atsui-font.c which has a code line that appears as a comment
to this script).
2006-06-06 15:35:48 -07:00
Carl Worth
80b8deb1e4 Remove extraneous whitespace from "blank" lines.
This patch was produced with the following (GNU) sed script:

	sed -i -r -e 's/^[ \t]+$//'

run on all *.[ch] files within cairo.
2006-06-06 15:25:49 -07:00
Carl Worth
22232be759 Note the changed semantics of cairo_surface_set_device_offset
Specifically, device offsets now affect using the offset surface in
a source pattern as well as drawing to the surface. This behavior
os also verified with a new test case: test/device-offset.c
2006-05-24 17:24:52 -07:00
Carl Worth
d0dd3b822e New API: Add new function cairo_surface_get_content
This assumes that the directfb, glitz, and quartz backends
always create surfaces with content of COLOR_ALPHA which might
be totally wrong.
2006-05-24 17:19:00 -07:00
Emmanuel Pacaud
d76701f465 Use CLEAR operator for initialisation of similar surface with a transparent color. 2006-05-05 16:47:06 +02:00
Robert O'Callahan
7bcf957b4e Rename cairo_rectangle_t to cairo_rectangle_fixed_t.
This is in preparation for a later function addition for extracting
clip rectangles from a cairo_t, (which will add a public
cairo_rectangle_t).
2006-05-04 03:43:34 -07:00
Carl Worth
a6b1b014bb Implement the device_offset functionality at surface, not gstate layer
This is a mega-patch that has the advantage that the entire test suite
passes both immediately before and immediately after this commit.

The disadvantage of the mega-patch is that it does not reflect the
development history of the device-offset branch, (with its various
fumblings and flailings). To capture that history, we will next merge
in that branch.
2006-05-04 01:45:41 -07:00
Carl Worth
41e288a880 Make backend-specific function set a surface error on type mismatch.
If any backend-specific, surface-modifying function is called with
the wrong surface type we set an error on that surface.
2006-05-02 11:38:28 -07:00
Carl Worth
db111197ac Fix _cairo_surface_is_opaque to return FALSE not TRUE for non-image surfaces. 2006-04-14 17:29:19 -07:00
Carl Worth
b7309d065e Farm out the surface and pattern analysis functions away from cairo-ps-surface.c.
We're setting things up here for better sharing as PDF surface (and
others) now want to do some of the same analysis.
2006-04-14 17:25:54 -07:00
Carl Worth
6fe93cbf5b Merge branch 'get-type' into cairo 2006-02-28 02:36:45 -08:00
Carl Worth
cd84e2ab32 Add documentation for cairo_font_face_get_type,
cairo_scaled_font_get_type, cairo_surface_get_type, and
cairo_pattern_get_type.
2006-02-27 23:15:45 -08:00
Carl Worth
5ae0b9f912 Implement cairo_surface_get_type 2006-02-27 23:11:32 -08:00