Commit graph

91 commits

Author SHA1 Message Date
Mathias Hasselmann
be52178443 Initialize mutexes at central location.
All mutex declarations have been moved to cairo-mutex-list.h.
This should avoid breaking of less frequently tested backends,
when mutexes are introduced or when existing mutexes are renamed.

Instead of initializing mutexes on library startup, mutexes are
lazily initialized within the few entry points of now by calling
CAIRO_MUTEX_INITIALIZE(). Currently only the OS/2 backend takes
care about releasing global mutexes. Therefore there is no counter
part of that macro for finalizing all global mutexes yet - but
as cairo-backend-os2.c shows such a function would be quite
easy to implement.
2007-03-20 10:11:14 +01:00
Behdad Esfahbod
a487d09421 Rename all mutex variables to start with an underscore
since they are not static in some of the implementations (win32, ...)
2007-03-05 15:59:43 -05:00
Behdad Esfahbod
6358ec539d [WIN32] Make cairo_ft_unscaled_font_map_mutex initialization conditional of ft 2007-03-05 15:38:52 -05:00
Behdad Esfahbod
972f7d9fc8 [WIN32] Remove unused mutex cairo_toy_font_face_hash_table_mutex 2007-03-05 15:36:51 -05:00
Hans Breuer
325e752390 Fix mutex initialization for win32 (missing cairo_font_face_mutex)
We've currently got a problem where it's easy to add a mutex
for a POSIX system and easy to forget to add its intialization
for other systems. Behdad has cooked up a plan for fixing this
properly:

	http://lists.freedesktop.org/archives/cairo/2007-February/009679.html

In the meantime, we'll just kkeping breaking things, and patches
like this will be needed to fix up our mistakes.

This fix closes the following bug report:

	cairo_font_face_mutex missing from cairo-win32-surface.c
	https://bugs.freedesktop.org/show_bug.cgi?id=10175
2007-03-03 22:50:16 -08:00
Behdad Esfahbod
9be961eb0c [doc] Some documentation love 2007-03-02 22:01:15 -05:00
Behdad Esfahbod
d0fe666a6a Revert the solid-pattern cache
This reverts the following commits:

	2715f20981
	67e3b3c53b

See this thread for an analysis of the problems it caused:

	http://lists.freedesktop.org/archives/cairo/2007-February/009825.html

In short, a single cache for all backends doesn't work, as one thread
using any backend can cause an unused xlib pattern to be evicted from
the cache, and trigger an xlib call while the display is being used
from another thread.  Xlib is not prepared for this.
2007-02-28 14:58:57 -05:00
Behdad Esfahbod
f65c33edbe [win32] Make win32-surface compile without win32-font
Hacking on the win32 code, thanks to winelib.  Yay!
2007-02-20 01:01:39 -05:00
Jorn Baayen
2715f20981 [cairo-pattern] Cache surface for solid patterns
We use a small cache of size 16 for surfaces created for solid patterns.
This mainly helps with the X backends where we don't have to create a
pattern for every operation, so we save a lot on X traffic.  Xft uses a
similar cache, so cairo's text rendering traffic with the xlib backend
now completely matches that of Xft.

The cache uses an static index variable, which itself acts like a cache of
size 1, remembering the most recently used solid pattern.  So repeated
lookups for the same pattern hit immediately.  If that fails, the cache is
searched linearly, and if that fails too, a new surface is created and a
random member of the cache is evicted.

Only surfaces that are "compatible" are used.  The definition of compatible
is backend specific.  For the xlib backend, it means that the two surfaces
are allocated on the same display.  Implementations for compatibility are
provided for all backends that it makes sense.
2007-02-14 18:28:56 -08:00
Dan Amelang
f0a16b5bdd Fix Win32 text spacing problem
Thanks to Jordan Miner for reporting the problem and a fix.
2007-02-13 16:32:05 -08:00
Vladimir Vukicevic
8ff70d6b91 [win32] regression with win32 glyph y-offsets (mozbug#365021) 2007-01-25 12:01:50 -08:00
Behdad Esfahbod
ded08256ef Spell check the docs 2007-01-07 02:08:15 -05:00
Alp Toker
caa3c2e1e7 Fix various code/comment typos 2007-01-07 01:35:15 -05:00
Jonathan Watt
d4a58b2437 Remove WINVER from public header file 2007-01-04 16:46:22 +01:00
Jonathan Watt
81a620fb66 revert accidental mode changes in my previous commit 2006-12-15 04:52:28 +01:00
U-JONATHAN-X60S\jonathan
bf78be63fc Fix a couple of character spacing issues on Windows 2006-12-15 00:48:54 +01: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
Daniel Amelang
57fba8d9b6 Replace existing rounding code with _cairo_lround 2006-11-22 16:25:53 -08:00
Vladimir Vukicevic
1e4515c548 [win32] implement EXTEND_REPEAT in composite when possible
Optimizes EXTEND_REPEAT, especially when DDBs are in use through the
use of PatBlt or manually expanding out the repeated blits (up to a
limit).  Will still fall back to fallback code as necessary.
2006-11-07 13:15:28 -08:00
Vladimir Vukicevic
6db219c3a1 [win32] clean up win32_surface_composite
Make sure that all operations are correct (the operations chosen
are listed in cairo-win32-surface.c); in particular, deal with the extra
byte present in FORMAT_RGB24 surfaces correctly.

Also adds support for calling StretchDIBits to draw RGB24
cairo_image_surfaces directly.
2006-11-07 13:12:09 -08:00
Christian Biesinger
e29aea745a [win32] Add parentheses around & operator
This fixes a GCC warning. Also, it fixes a bug: The precedence
of & is not what you might expect.
2006-10-27 23:51:55 +02:00
Christian Biesinger
6c95083406 Fix win32 build when pthreads are available
_cairo_win32_initialize always needs a definition.
2006-10-16 17:51:41 +02:00
Christian Biesinger
7d13686438 [win32] Add missing void
This fixes a GCC compile warning
2006-10-16 17:30:30 +02:00
Stuart Parmenter
f1bd0b9f98 [win32] correct win32 show_glyphs for non-y-aligned text
Correctly calculate destination glyph coordinates for win32_show_glyphs.
2006-09-12 16:27:40 -07:00
Vladimir Vukicevic
0166538126 [win32] Support for DDBs, AlphaBlend fix
Add support for the win32 surface using DDBs for similar surfaces and the
like when the orignal surface is created from a DC, or when a DDB is
explicitly created.  A DIB is still created if alpha is required.

Also fixes a case where blitting win32 RGB24 -> ARGB32 surfaces was causing
alpha to leak into the ARGB32 surface instead of being set to fully opaque.
2006-09-12 16:08:40 -07:00
Vladimir Vukicevic
dbd0fa193c [win32] Make cairo as a win32 static library possible
This adds a win32 initialization function that is called from all
surface creation and font creation functions to ensure that the win32
mutexes are initialized.
2006-09-09 17:05:00 -07:00
Behdad Esfahbod
66436d1327 Update lots of docs. 2006-06-30 02:21:50 +02: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
ef10a0403a Remove initial, final, and duplicate blank lines.
This patch was produced by running git-stripspace on all *.[ch] files
within cairo. Note that this script would have also created all the changes
from the previous commits to remove trailing whitespace.
2006-06-06 15:50:33 -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
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
Vladimir Vukicevic
5bdcfd1413 Whitespace fix
(cherry picked from 0bb567a2f1807d83508e2d7598a8bd8f4d94208d commit)
2006-05-18 21:37:39 -07:00
Vladimir Vukicevic
e8069da97b CAIRO_SCALED_FONT_TYPE_* -> CAIRO_FONT_TYPE_*
Some of these were missed when CAIRO_SCALED_FONT_TYPE_* was renamed.
(cherry picked from 33dba4a690a5e4ec13ed294307b89cceac1ca696 commit)
2006-05-18 21:37:08 -07:00
Vladimir Vukicevic
9b84b3da58 [win32] GDI is nearly always faster than pixman; use it whenever possible
Remove local image check from fill_rectangles and fix check for whether
we can AlphaBlend or not (ARGB->ARGB AlphaBlend works fine)
(cherry picked from f099783b3e7f895a59d4d4a67a8534f1d21d44e1 commit)
2006-05-18 17:31:44 -07:00
Vladimir Vukicevic
2a89526edf [win32] Add GdiFlush() calls after DIB creation, as per MSDN docs
Also fixes some spacing/tab issues
(cherry picked from 123ca7c9f9d8984be5ed4fb42a2897508e8ff44a commit)
2006-05-18 17:31:21 -07:00
Stuart Parmenter
a9c42e8fc2 [win32] fix win32_show_glyphs glyph offsets
(cherry picked from 947a4a1bc6a0a0ee78c44b71fef32c924ebc9397 commit)
2006-05-18 17:31:05 -07:00
Stuart Parmenter
59a45f1c4a [win32] implement win32 show_glyphs
(cherry picked from 9c7d0cbde415d02b6e8298a02b3b62cf4513a59e commit)
2006-05-18 17:30:42 -07:00
Vladimir Vukicevic
244c111fca [win32] Add SHADEBLENDCAPS and SB_NONE definitions for older SDKs
(cherry picked from 7a68b7d035b1c63076d6fa6c54d40944459d206d commit)
2006-05-18 17:27:30 -07: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
Vladimir Vukicevic
03eb1b85a9 [win32] Add missing depth-16 format check
(cherry picked from 969d624db8d32d35361bbcc89dbcc354f3d48eaa commit)
2006-04-01 08:56:29 -08:00
Mart Raudsepp
92e09ee72f Complete the CAIRO_PATTERN_TYPE renaming
This fixes compilation of the glitz backend, and also fixes missing
renames in win32, atsui, and directfb backends.
2006-03-09 08:23:43 -08:00
Carl Worth
6fe93cbf5b Merge branch 'get-type' into cairo 2006-02-28 02:36:45 -08:00
Carl Worth
5ae0b9f912 Implement cairo_surface_get_type 2006-02-27 23:11:32 -08:00
Vladimir Vukicevic
1a14419126 Win32: Handle BitBlt in get_image failure and AlphaBlend not being supported
If the BitBlt in get_image fails, we pretty much can't do anything -- so
fill the destination with white and hope for the best.  This enables
somewhat accurate printing of complex operations.  Also, check the
destination device caps before calling AlphaBlend; return UNSUPPORTED if
the destination DC can't do AlphaBlend.
(cherry picked from 9831de538e347a624af5b0ca38242b198b64bd45 commit)
2006-02-27 13:47:31 +01:00
Vladimir Vukicevic
2d784815ff Win32: Set surface format based on device caps
If the DC is a display DC, inspect its depth and set out local format
appropriately.  If it's not a display DC, assume RGB24.
(cherry picked from 6dd0a70d271f93df95f4bcaff5073b9bf90cecb6 commit)
2006-02-27 13:47:27 +01:00
Vladimir Vukicevic
68ed40b6da Win32: Fix up src coords before calling AlphaBlend/BitBlt to avoid invalid calls
Fixes up src coords and width/height before calling AlphaBlend/BitBlt; it's
an error to try to use a region that extents outside of the source surface
as a source DC.

Doesn't repair the extra region relative to the operator -- e.g. regions
outside of an ARGB source surface with SOURCE operator should be cleared
to fully transparent black in the destination.
(cherry picked from bc19c5b64b0e38e9d20045907d7b47d79f6afc60 commit)
2006-02-27 13:47:20 +01:00
Vladimir Vukicevic
0852cd4492 Win32: rename cairo_surface_create_dib to cairo_surface_create_with_dib
Also adds some documentation for the win32 creation functions.
(cherry picked from 3a148bd620d709237d98a72f65118759bfc5a76d commit)
2006-02-27 12:53:38 +01:00