[cairo-commit] cairo/src cairo-atsui-font.c, 1.4,
1.5 cairo-quartz-surface.c, 1.4, 1.5
Tim Rowley
commit at pdx.freedesktop.org
Tue Mar 29 11:24:12 PST 2005
Committed by: tor
Update of /cvs/cairo/cairo/src
In directory gabe:/tmp/cvs-serv23990/src
Modified Files:
cairo-atsui-font.c cairo-quartz-surface.c
Log Message:
Update quartz backend to compilable/workable version and re-enable.
Index: cairo-atsui-font.c
===================================================================
RCS file: /cvs/cairo/cairo/src/cairo-atsui-font.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- cairo-atsui-font.c 18 Mar 2005 22:28:53 -0000 1.4
+++ cairo-atsui-font.c 29 Mar 2005 19:24:10 -0000 1.5
@@ -30,778 +30,710 @@
* The Initial Developer of the Original Code is Calum Robinson
*
* Contributor(s):
- * Calum Robinson <calumr at mac.com>
+ * Calum Robinson <calumr at mac.com>
*/
#include <stdlib.h>
#include <math.h>
-
#include "cairo-atsui.h"
[...1308 lines suppressed...]
+ }
+ free(scaled);
+#endif
-const cairo_font_backend_t cairo_atsui_font_backend = {
- _cairo_atsui_font_create,
- _cairo_atsui_font_destroy,
- _cairo_atsui_font_font_extents,
- _cairo_atsui_font_text_to_glyphs,
- _cairo_atsui_font_glyph_extents,
- _cairo_atsui_font_glyph_bbox,
- _cairo_atsui_font_show_glyphs,
- _cairo_atsui_font_glyph_path,
- _cairo_atsui_font_create_glyph
-};
+ return NULL;
+}
Index: cairo-quartz-surface.c
===================================================================
RCS file: /cvs/cairo/cairo/src/cairo-quartz-surface.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- cairo-quartz-surface.c 17 Mar 2005 21:27:26 -0000 1.4
+++ cairo-quartz-surface.c 29 Mar 2005 19:24:10 -0000 1.5
@@ -34,68 +34,48 @@
*/
#include "cairoint.h"
+#include "cairo-private.h"
#include "cairo-quartz.h"
-#pragma mark Types
-
typedef struct cairo_quartz_surface {
- cairo_surface_t base;
-
- CGContextRef context;
-
- int width;
- int height;
-
- cairo_image_surface_t *image;
-
- CGImageRef cgImage;
-} cairo_quartz_surface_t;
-
-
-
-
+ cairo_surface_t base;
-#pragma mark Private functions
+ CGContextRef context;
+ int width;
+ int height;
+ cairo_image_surface_t *image;
+ CGImageRef cgImage;
+} cairo_quartz_surface_t;
-void ImageDataReleaseFunc(void *info, const void *data, size_t size)
+static void
+ImageDataReleaseFunc(void *info, const void *data, size_t size)
{
- if (data != NULL)
- {
- free((void *)data);
+ if (data != NULL) {
+ free((void *) data);
}
}
-
-
-#pragma mark Public functions
-
-
-
-
-
void
-cairo_set_target_quartz_context( cairo_t *cr,
- CGContextRef context,
- int width,
- int height)
+cairo_set_target_quartz_context(cairo_t * cr,
+ CGContextRef context,
+ int width, int height)
{
cairo_surface_t *surface;
-
-
+
+
if (cr->status && cr->status != CAIRO_STATUS_NO_TARGET_SURFACE)
return;
-
+
surface = cairo_quartz_surface_create(context, width, height);
- if (surface == NULL)
- {
+ if (surface == NULL) {
cr->status = CAIRO_STATUS_NO_MEMORY;
return;
}
-
+
cairo_set_target_surface(cr, surface);
/* cairo_set_target_surface takes a reference, so we must destroy ours */
@@ -103,202 +83,199 @@
}
-static cairo_surface_t *
-_cairo_quartz_surface_create_similar( void *abstract_src,
- cairo_format_t format,
- int drawable,
- int width,
- int height)
+static cairo_surface_t *_cairo_quartz_surface_create_similar(void
+ *abstract_src,
+ cairo_format_t
+ format,
+ int drawable,
+ int width,
+ int height)
{
return NULL;
}
-static void
-_cairo_quartz_surface_destroy(void *abstract_surface)
+static void _cairo_quartz_surface_finish(void *abstract_surface)
{
cairo_quartz_surface_t *surface = abstract_surface;
-
-
- if (surface->cgImage)
- {
- CGImageRelease(surface->cgImage);
- }
-
- free(surface);
+ if (surface->image)
+ cairo_surface_destroy(surface->image);
+
+ if (surface->cgImage)
+ CGImageRelease(surface->cgImage);
}
-static double
-_cairo_quartz_surface_pixels_per_inch(void *abstract_surface)
+static double _cairo_quartz_surface_pixels_per_inch(void *abstract_surface)
{
-
-
// TODO - get this from CGDirectDisplay somehow?
return 96.0;
}
-static cairo_image_surface_t *
-_cairo_quartz_surface_get_image(void *abstract_surface)
+static cairo_status_t
+_cairo_quartz_surface_acquire_source_image(void *abstract_surface,
+ cairo_image_surface_t **image_out,
+ void **image_extra)
{
- cairo_quartz_surface_t *surface = abstract_surface;
- CGColorSpaceRef colorSpace;
- void *imageData;
- UInt32 imageDataSize, rowBytes;
- CGDataProviderRef dataProvider;
-
-
+ cairo_quartz_surface_t *surface = abstract_surface;
+ CGColorSpaceRef colorSpace;
+ void *imageData;
+ UInt32 imageDataSize, rowBytes;
+ CGDataProviderRef dataProvider;
+
// We keep a cached (cairo_image_surface_t *) in the cairo_quartz_surface_t
- // struct. If the window is ever drawn to without going through cairo, then
+ // struct. If the window is ever drawn to without going through Cairo, then
// we would need to refetch the pixel data from the window into the cached
// image surface.
- if (surface->image)
- {
+ if (surface->image) {
cairo_surface_reference(&surface->image->base);
- return surface->image;
+ *image_out = surface->image;
+ return CAIRO_STATUS_SUCCESS;
}
-
+
colorSpace = CGColorSpaceCreateDeviceRGB();
-
-
+
+
rowBytes = surface->width * 4;
imageDataSize = rowBytes * surface->height;
imageData = malloc(imageDataSize);
-
- dataProvider = CGDataProviderCreateWithData(NULL, imageData, imageDataSize, ImageDataReleaseFunc);
-
- surface->cgImage = CGImageCreate( surface->width,
- surface->height,
- 8,
- 32,
- rowBytes,
- colorSpace,
- kCGImageAlphaPremultipliedFirst,
- dataProvider,
- NULL,
- false,
- kCGRenderingIntentDefault);
-
-
+
+ dataProvider =
+ CGDataProviderCreateWithData(NULL, imageData, imageDataSize,
+ ImageDataReleaseFunc);
+
+ surface->cgImage = CGImageCreate(surface->width,
+ surface->height,
+ 8,
+ 32,
+ rowBytes,
+ colorSpace,
+ kCGImageAlphaPremultipliedFirst,
+ dataProvider,
+ NULL,
+ false, kCGRenderingIntentDefault);
+
CGColorSpaceRelease(colorSpace);
CGDataProviderRelease(dataProvider);
-
-
+
surface->image = (cairo_image_surface_t *)
- cairo_image_surface_create_for_data( imageData,
- CAIRO_FORMAT_ARGB32,
- surface->width,
- surface->height,
- rowBytes);
-
-
- // Set the image surface cairo state to match our own.
+ cairo_image_surface_create_for_data(imageData,
+ CAIRO_FORMAT_ARGB32,
+ surface->width,
+ surface->height, rowBytes);
+
+
+ // Set the image surface Cairo state to match our own.
_cairo_image_surface_set_repeat(surface->image, surface->base.repeat);
- _cairo_image_surface_set_matrix(surface->image, &(surface->base.matrix));
-
+ _cairo_image_surface_set_matrix(surface->image,
+ &(surface->base.matrix));
- return surface->image;
+ *image_out = surface->image;
+ *image_extra = NULL;
+
+ return CAIRO_STATUS_SUCCESS;
}
-static cairo_status_t
-_cairo_quartz_surface_set_image( void *abstract_surface,
- cairo_image_surface_t *image)
+static void
+_cairo_quartz_surface_release_source_image(void *abstract_surface,
+ cairo_image_surface_t * image,
+ void *image_extra)
{
- cairo_quartz_surface_t *surface = abstract_surface;
- cairo_status_t status;
-
-
- if (surface->image == image)
- {
- CGRect rect;
-
-
- rect = CGRectMake(0, 0, surface->width, surface->height);
-
- CGContextDrawImage(surface->context, rect, surface->cgImage);
-
-
- status = CAIRO_STATUS_SUCCESS;
- }
- else
- {
- // TODO - set_image from something other than what we returned from get_image
- status = CAIRO_STATUS_NO_TARGET_SURFACE;
- }
-
-
- return status;
}
static cairo_status_t
-_cairo_quartz_surface_set_matrix(void *abstract_surface, cairo_matrix_t *matrix)
+_cairo_quartz_surface_acquire_dest_image(void *abstract_surface,
+ cairo_rectangle_t * interest_rect,
+ cairo_image_surface_t **
+ image_out,
+ cairo_rectangle_t * image_rect,
+ void **image_extra)
{
cairo_quartz_surface_t *surface = abstract_surface;
- return _cairo_image_surface_set_matrix(surface->image, matrix);
+ image_rect->x = 0;
+ image_rect->y = 0;
+ image_rect->width = surface->image->width;
+ image_rect->height = surface->image->height;
+
+ *image_out = surface->image;
+
+ return CAIRO_STATUS_SUCCESS;
}
-static cairo_status_t
-_cairo_quartz_surface_set_filter(void *abstract_surface, cairo_filter_t filter)
+static void
+_cairo_quartz_surface_release_dest_image(void *abstract_surface,
+ cairo_rectangle_t *
+ intersect_rect,
+ cairo_image_surface_t * image,
+ cairo_rectangle_t * image_rect,
+ void *image_extra)
{
cairo_quartz_surface_t *surface = abstract_surface;
- return _cairo_image_surface_set_filter(surface->image, filter);
+ if (surface->image == image) {
+ CGRect rect;
+
+ rect = CGRectMake(0, 0, surface->width, surface->height);
+
+ CGContextDrawImage(surface->context, rect, surface->cgImage);
+
+ memset(surface->image->data, 0, surface->width * surface->height * 4);
+ }
}
static cairo_status_t
-_cairo_quartz_surface_set_repeat(void *abstract_surface, int repeat)
+_cairo_quartz_surface_clone_similar(void *surface,
+ cairo_surface_t * src,
+ cairo_surface_t ** clone_out)
{
- cairo_quartz_surface_t *surface = abstract_surface;
-
- return _cairo_image_surface_set_repeat(surface->image, repeat);
+ return CAIRO_INT_STATUS_UNSUPPORTED;
}
static cairo_int_status_t
-_cairo_quartz_surface_composite( cairo_operator_t operator,
- cairo_surface_t *generic_src,
- cairo_surface_t *generic_mask,
- void *abstract_dst,
- int src_x,
- int src_y,
- int mask_x,
- int mask_y,
- int dst_x,
- int dst_y,
- unsigned int width,
- unsigned int height)
+_cairo_quartz_surface_composite(cairo_operator_t operator,
+ cairo_surface_t * generic_src,
+ cairo_surface_t * generic_mask,
+ void *abstract_dst,
+ int src_x,
+ int src_y,
+ int mask_x,
+ int mask_y,
+ int dst_x,
+ int dst_y,
+ unsigned int width, unsigned int height)
{
return CAIRO_INT_STATUS_UNSUPPORTED;
}
static cairo_int_status_t
-_cairo_quartz_surface_fill_rectangles( void *abstract_surface,
- cairo_operator_t operator,
- const cairo_color_t *color,
- cairo_rectangle_t *rects,
- int num_rects)
+_cairo_quartz_surface_fill_rectangles(void *abstract_surface,
+ cairo_operator_t operator,
+ const cairo_color_t * color,
+ cairo_rectangle_t * rects,
+ int num_rects)
{
return CAIRO_INT_STATUS_UNSUPPORTED;
}
static cairo_int_status_t
-_cairo_quartz_surface_composite_trapezoids( cairo_operator_t operator,
- cairo_surface_t *generic_src,
- void *abstract_dst,
- int xSrc,
- int ySrc,
- cairo_trapezoid_t *traps,
- int num_traps)
+_cairo_quartz_surface_composite_trapezoids(cairo_operator_t operator,
+ cairo_surface_t * generic_src,
+ void *abstract_dst,
+ int xSrc,
+ int ySrc,
+ cairo_trapezoid_t * traps,
+ int num_traps)
{
return CAIRO_INT_STATUS_UNSUPPORTED;
}
@@ -319,8 +296,8 @@
static cairo_int_status_t
-_cairo_quartz_surface_set_clip_region( void *abstract_surface,
- pixman_region16_t *region)
+_cairo_quartz_surface_set_clip_region(void *abstract_surface,
+ pixman_region16_t * region)
{
cairo_quartz_surface_t *surface = abstract_surface;
@@ -328,10 +305,19 @@
}
-static cairo_int_status_t
-_cairo_quartz_surface_create_pattern( void *abstract_surface,
- cairo_pattern_t *pattern,
- cairo_box_t *extents)
+static cairo_status_t
+_cairo_quartz_surface_show_glyphs(cairo_font_t * font,
+ cairo_operator_t operator,
+ cairo_pattern_t * pattern,
+ void *abstract_surface,
+ int source_x,
+ int source_y,
+ int dest_x,
+ int dest_y,
+ unsigned int width,
+ unsigned int height,
+ const cairo_glyph_t * glyphs,
+ int num_glyphs)
{
return CAIRO_INT_STATUS_UNSUPPORTED;
}
@@ -339,54 +325,43 @@
static const struct _cairo_surface_backend cairo_quartz_surface_backend = {
_cairo_quartz_surface_create_similar,
- _cairo_quartz_surface_destroy,
+ _cairo_quartz_surface_finish,
_cairo_quartz_surface_pixels_per_inch,
- _cairo_quartz_surface_get_image,
- _cairo_quartz_surface_set_image,
- _cairo_quartz_surface_set_matrix,
- _cairo_quartz_surface_set_filter,
- _cairo_quartz_surface_set_repeat,
+ _cairo_quartz_surface_acquire_source_image,
+ _cairo_quartz_surface_release_source_image,
+ _cairo_quartz_surface_acquire_dest_image,
+ _cairo_quartz_surface_release_dest_image,
+ _cairo_quartz_surface_clone_similar,
_cairo_quartz_surface_composite,
_cairo_quartz_surface_fill_rectangles,
_cairo_quartz_surface_composite_trapezoids,
_cairo_quartz_surface_copy_page,
_cairo_quartz_surface_show_page,
_cairo_quartz_surface_set_clip_region,
- _cairo_quartz_surface_create_pattern
+ _cairo_quartz_surface_show_glyphs
};
-cairo_surface_t *
-cairo_quartz_surface_create( CGContextRef context,
- int width,
- int height)
+cairo_surface_t *cairo_quartz_surface_create(CGContextRef context,
+ int width, int height)
{
cairo_quartz_surface_t *surface;
-
-
+
surface = malloc(sizeof(cairo_quartz_surface_t));
if (surface == NULL)
return NULL;
-
+
_cairo_surface_init(&surface->base, &cairo_quartz_surface_backend);
-
-
- surface->context = context;
-
- surface->width = width;
- surface->height = height;
-
- surface->image = NULL;
-
- surface->cgImage = NULL;
-
-
- // Set up the image surface which cairo draws into and we blit to & from.
- surface->image = _cairo_quartz_surface_get_image(surface);
-
-
- return (cairo_surface_t *)surface;
-}
+ surface->context = context;
+ surface->width = width;
+ surface->height = height;
+ surface->image = NULL;
+ surface->cgImage = NULL;
-DEPRECATE (cairo_surface_create_for_drawable, cairo_quartz_surface_create);
+ // Set up the image surface which Cairo draws into and we blit to & from.
+ void *foo;
+ _cairo_quartz_surface_acquire_source_image(surface, &surface->image, &foo);
+
+ return (cairo_surface_t *) surface;
+}
More information about the cairo-commit
mailing list