Commit graph

2119 commits

Author SHA1 Message Date
Chris Wilson
7f7f4d4f35 [cairo-xlib-surface.c] Free the Pixmap on surface construction failure.
If we create the Pixmap whilst constructing a similar xlib surface, then
it our responsibility to free the Pixmap should we fail to allocate the
surface.
2007-05-01 12:37:38 +01:00
Chris Wilson
3e3bd4df7e Minor typo in cairo_surface_destroy() documentation.
The type of @surface is #cairo_surface_t, not #cairo_t.
2007-05-01 11:28:45 +01:00
Behdad Esfahbod
f7cdbd385a [cairo-mutex-private.h] Move implementation-specific parts to cairo-mutex-type-private.h
This fixes the problem reported by Dave Yeo that boilerplate wasn't building:

In file included from ../src/cairo-scaled-font-private.h:44,
	     from cairo-boilerplate.c:65:
../src/cairo-mutex-private.h:183: error: syntax error before "extern"
../src/cairo-mutex-private.h:184: error: syntax error before "void"
../src/cairo-mutex-private.h:185: error: syntax error before "void"
make[3]: *** [cairo-boilerplate.lo] Error 1
2007-05-01 00:41:47 -04:00
Behdad Esfahbod
6de0f2d157 [cairo-mutex] Fix CAIRO_MUTEX_FINALIZE definition to take parantheses
This was breaking build on some systems as reported by Adrian Johnson
on the list.
2007-04-30 22:38:00 -04:00
Adrian Johnson
4be608399f Fix cygwin compile error
The WINVER macros need to be defined before including <windows.h>.
As a result of some recent include file rearranging, <windows.h>
was included indirectly before WINVER was defined.
2007-04-30 14:38:19 -07:00
Carl Worth
cb6fcdae92 Fix typo in Makefile preventing builds from succeeding
The cairo-ps-surface-private.h file was not getting included in the
distribution.
2007-04-28 07:38:56 -07:00
Carl Worth
a392cc8508 Clarify documentation of cairo_in_stroke and cairo_in_fill
Like cairo_stroke_extents and cairo_fill_extents, these functions
work without regard to the surface dimensions or the current clip
region.
2007-04-27 22:46:47 -07:00
Carl Worth
8286b87416 Clip trapezoids that are partially (or wholly) outside the clip region.
It's quite simple to add a new _cairo_traps_limit call which installs
a box into the cairo_traps_t structure. Then at the time of
_cairo_traps_add we can discard any trapezoid that is wholly outside
the box and also clip any trapezoid that is partially outside the box.

We take advantage of this for both cairo_stroke and cairo_fill, (when
cairo is computing the trapezoids in cairo-surface-fallback.c). Note
that we explicitly do not do any clipping for cairo_stroke_extents,
cairo_fill_extents, cairo_in_stroke, or cairo_in_fill which are
defined to ignore clipping.

As seen by the long-lines perf case, this fix successfully works
around the bug in the X server where it creates overly large masks for
partially-outside-the-destination-surface trapezoids:

 xlib-rgba   long-lines-uncropped-100  545.84 -> 5.83: 93.09x speedup
██████████████████████████████████████████████
 xlib-rgb    long-lines-uncropped-100  554.74 -> 8.10: 69.04x speedup
██████████████████████████████████
2007-04-27 22:44:27 -07:00
Adrian Johnson
179e339910 PDF: Change CTM to identity
Some PDF viewers forget the CTM when drawing gradient patterns
with SMasks. This patch works around these bugs by using the default
identity matrix for the CTM. All paths are transformed from
cairo to pdf coordinates before writing to the pdf file.
2007-04-27 16:13:01 -07:00
Adrian Johnson
1816d7c590 Add support for transparent gradients
This is based on the gradient patch written by Miklós Erdélyi at
http://lists.freedesktop.org/archives/cairo/2006-August/007648.html

Currently only EXTEND_NONE and EXTEND_PAD are supported. Other extend
types will go through the image fallback path.
2007-04-27 16:12:55 -07:00
Carl Worth
29670d3766 Add a content value to solid patterns
This allows for the surface acquired from the pattern to have the
same content. In particular, in a case such as cairo_paint_with_alpha
we can now acquire an A8 mask surface instead of an ARGB32 mask
surface which can be rendered much more efficiently. This results
in a 4x speedup when using the OVER operator with the recently
added paint-with-alpha test:

Speedups
========
image-rgb  paint-with-alpha_image_rgb_over-256 2.25 -> 0.60: 4.45x speedup
███▌

It does slowdown the same test when using the SOURCE operator, but
I don't think we care. Performing SOURCE with a mask is already a very
slow operation, (hitting compositeGeneral), so the slowdown here is
likely from having to convert from A8 back to ARGB32 before the
generalized compositing. So if someone cares about this slowdown,
(though SOURCE with cairo_paint_with_alpha doesn't seem extremely
useful), they will probably be motivated enough to contribute a
customized compositing function to replace compositeGeneral in which
case this slowdown should go away:

image-rgba paint-with-alpha_image_rgb_source-256 3.84 -> 8.86%: 1.94x slowdown
█
2007-04-25 11:09:31 -07:00
Carl Worth
302f1146da Fix two bugs in documentation code sample of cairo_arc
The sample code for drawing an ellipse had width and height
reversed in the call to cairo_scale, and also had both
incorrectly inverted.
2007-04-25 07:24:23 -07:00
Peter Weilbacher
ac0ef0302e Merge branch 'master' of git+ssh://pmw@git.freedesktop.org/git/cairo 2007-04-23 23:18:05 +02:00
Chris Wilson
260dcb316e Add a _cairo_error() to png_simple_error_callback()
With the introduction of the error callbacks for PNG, we have the
opportunity for the user to set a breakpoint (via _cairo_error) at the
point the error is first rasied.
2007-04-23 13:54:37 +01:00
Chris Wilson
0fce7e85a1 Do not print out libpng error messages to stderr.
We wish to avoid writing to file descriptors (and streams) that are
outside cairo's control. In this case, the messages are superfluous as
the errors are propagated via the cairo_status_t returns.
2007-04-23 13:10:15 +01:00
Behdad Esfahbod
ce91a17648 [cairo-mutex] Add a poor man's mutex implementation in case of CAIRO_NO_MUTEX
just for fun.
2007-04-22 16:13:33 -04:00
Behdad Esfahbod
97b50e99bf [BeOS] Remove old-style mutex initialization cruft 2007-04-22 16:05:25 -04:00
Behdad Esfahbod
0fd13a3db0 [BeOS] Add mutex implementation 2007-04-22 16:04:49 -04:00
Behdad Esfahbod
fc83784525 [cairo-mutex] Properly paranthesize macro arguments 2007-04-22 15:56:18 -04:00
Peter Weilbacher
d3cf2144db Merge branch 'master' of git+ssh://pmw@git.freedesktop.org/git/cairo 2007-04-21 13:50:30 +02:00
Peter Weilbacher
6c12961140 Use deprecated png symbol only when compiling against old version
png_set_gray_1_2_4_to_8 is deprecated in libpng >= 1.2.9, the identical
substitute for it is png_set_expand_gray_1_2_4_to_8
2007-04-21 13:49:04 +02:00
Behdad Esfahbod
0108f9c69f [check-def.sh] Do not allow _cairo_.*_test_ symbols anymore
as all are removed now.
2007-04-21 03:44:53 -04:00
Behdad Esfahbod
79098c0370 [scaled-font] Get rid of _cairo_scaled_font_test_set_max_glyphs_cached_per_font
in favor of cairo_boilerplate_scaled_font_set_max_glyphs_cached.
2007-04-21 03:43:04 -04:00
Behdad Esfahbod
44563161de Move a couple typedefs to cairo-types-private.h 2007-04-21 03:38:24 -04:00
Behdad Esfahbod
737d20a570 Move cairo_hash_entry_t to cairo-types-private.h 2007-04-21 03:35:07 -04:00
Behdad Esfahbod
51ce92c3db [scaled-font] Move cairo_scaled_font_t to cairo-scaled-font-private.h 2007-04-21 03:24:31 -04:00
Behdad Esfahbod
91f1056caf Move cairo_cache_t to cairo-types-private.h 2007-04-21 03:18:30 -04:00
Behdad Esfahbod
d2bb5f3007 [svg] Get rid of _cairo_svg_test_force_fallbacks
in favor of cairo_boilerplate_svg_surface_force_fallbacks.
2007-04-21 03:08:26 -04:00
Behdad Esfahbod
ea1b7c2d8a [paginated] Include cairo-surface-private.h 2007-04-21 03:04:03 -04:00
Behdad Esfahbod
7e0ae8bd43 [svg] Move cairo_svg_surface_t to cairo-svg-surface-private.h 2007-04-21 02:57:55 -04:00
Behdad Esfahbod
3885fff3e6 [ps] Get rid of _cairo_ps_test_force_fallbacks
in favor of cairo_boilerplate_ps_surface_force_fallbacks.
2007-04-21 02:51:22 -04:00
Behdad Esfahbod
57dc972d6e [ps] Move cairo_ps_surface_t to cairo-ps-surface-private.h 2007-04-21 02:51:17 -04:00
Behdad Esfahbod
3e69fbca62 [pdf] Fix header file header! 2007-04-21 02:51:10 -04:00
Behdad Esfahbod
29247e5010 [ps/pdf/svg] Fix minor coding style issue 2007-04-21 02:51:04 -04:00
Behdad Esfahbod
20ce190e71 [pdf] Get rid of _cairo_pdf_test_force_fallbacks
in favor of cairo_boilerplate_pdf_surface_force_fallbacks.
2007-04-21 02:50:53 -04:00
Behdad Esfahbod
03477064fa [paginated] Move cairo_paginated_surface_t to cairo-paginated-surface-private.h
The old cairo-paginated-surface-private.h is cairo-paginated-private.h now.
2007-04-21 02:43:28 -04:00
Behdad Esfahbod
68e2158aae [pdf] Move cairo_pdf_surface_t to cairo-pdf-surface-private.h 2007-04-21 02:10:34 -04:00
Behdad Esfahbod
183c6af4f1 [paginated] Move cairo_paginated_mode_t to cairo-types-private.h
as it is used in surface structs for PS/PDF/SVG and we will need
it.
2007-04-21 02:08:38 -04:00
Behdad Esfahbod
cd72167ede [xlib] Get rid of _cairo_xlib_test_disable_render
in favor of cairo_boilerplate_xlib_surface_disable_render.
2007-04-21 02:08:38 -04:00
Behdad Esfahbod
908418cb4d [cairo-surface] Move cairo_surface_t struct in cairo-surface-private.h 2007-04-21 02:08:37 -04:00
Behdad Esfahbod
1345552ac2 [xlib] Move cairo_xlib_surface_t definition into cairo-xlib-surface-private.h 2007-04-21 02:08:37 -04:00
Peter Weilbacher
735be3f09d Fix build break related to mutexes on OS/2
cairo_mutex_t is HTMX which is ULONG on OS/2, so we have to set the
mutex itself to 0 and not the address...
2007-04-20 20:46:55 +02:00
Chris Wilson
b6be361d0e Clean up compiler warnings from cairo-png
I introduced some compiler warnings into read_png() with the superfluous
introduction of a couple of volatile qualifiers. I'm sure at the time,
the reason was that gcc suggested adding them - however, ATM gcc issues
no warnings without them.
2007-04-20 17:49:10 +01:00
Adrian Johnson
fc455c53ec Ensure _cairo_scaled_font_subsets_map_glyph() returns correct values
The CID font subsetting exposed a bug where the subset_glyph->is_scaled
return argument of _cairo_scaled_font_subsets_map_glyph() is sometimes
not assigned a value.
2007-04-21 00:26:25 +09:30
Adrian Johnson
9d8eb42c01 Exclude Type1 fonts from CID subsets
Make cairo-scaled-font-subsets.c limit Type1 font subsets to
256 glyphs. This allows Type1 subsetting to be enabled again
with type1-fallback as the fallback option for Type1 fonts.
2007-04-20 22:45:12 +09:30
Adrian Johnson
56ad56263b Enable embedding of CID fonts in PDF
Update cairo-pdf-surface.c to embed CFF and TrueType fonts
as CID fonts. Update the ToUnicode CMap to handle CID fonts.
2007-04-20 22:44:04 +09:30
Adrian Johnson
ca3662d6fc Make cairo-output-stream.c accept variable width printf fields 2007-04-20 22:43:37 +09:30
Adrian Johnson
0c2a653033 Add CFF CID Fallback
Switching to CID font embedding requires a fallback font for
the case where CFF CID or TrueType CID subsetting fails.

The new function _cairo_type2_charstrings_init() added to
cairo-type1-fallback.c creates Type2 charstrings from glyph
paths. _cairo_cff_fallback_init() in cairo-cff-subset.c
wraps these charstrings in a CFF CID font.
2007-04-20 22:30:55 +09:30
Adrian Johnson
c68a2389f5 Make CFF Subsetting create CID subsets
OpenType/CFF fonts come in two types: CID and non CID.
CFF CID font subsetting was previously disabled in cairo
due 1) to the need to embed CFF CID fonts in PDF as a CID fonts
and 2) there is no easy way to convert CFF CID to CFF non CID.

With the switch to CID fonts cairo-cff-subset.c has been
updated to subset CID fonts and to covert non CID fonts to
CID. A further advantage of converting non CID CFF fonts
to CID is the reduction in size due to not embedding the
name of each glyph in the font subset.
2007-04-20 22:30:05 +09:30
Adrian Johnson
073fce5a85 Add support for creating CID/composite font subsets
cairo-scaled-font-subsets.c now provides three functions for creating subsets:

  _cairo_scaled_font_subsets_create_scaled()
    Create a subset for each scaled font with maximum size INT_MAX.

  _cairo_scaled_font_subsets_create_simple()
    Create subsets suitable for embedding as simple fonts in PS/PDF.

  _cairo_scaled_font_subsets_create_composite()
    Create subsets suitable for embedding as composite fonts in PS/PDF.

The _create_simple() and _create_composite() functions both merge
scaled fonts with the same face and an outline path available into
the same subset. _create_composite() has a maximum subset size of
65536 for outline fonts. Bitmap fonts have a separate subset for
each scale with a maximum subset size of 256.

The _create_simple() and _create_composite() functions both reserve
the first glyph in the subset for the .notdef glyph. CID fonts require
CID 0 to be .notdef.

Update Type1, TrueType and CFF subsetting to expect glyph 0 of each
subset to be the .notdef.
2007-04-20 22:29:41 +09:30