[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