[librsvg] Use cairo_operator_t directly
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] Use cairo_operator_t directly
- Date: Mon, 7 Nov 2011 19:26:32 +0000 (UTC)
commit cd69dc9420159166774ef04305886dbe0269ce4f
Author: Christian Persch <chpe gnome org>
Date: Thu Sep 15 15:27:56 2011 +0200
Use cairo_operator_t directly
rsvg-cairo-draw.c | 70 ++++-------------------------------------------------
rsvg-styles.c | 52 +++++++++++++++++++-------------------
rsvg-styles.h | 30 +---------------------
3 files changed, 33 insertions(+), 119 deletions(-)
---
diff --git a/rsvg-cairo-draw.c b/rsvg-cairo-draw.c
index 7f1cf74..05158c1 100644
--- a/rsvg-cairo-draw.c
+++ b/rsvg-cairo-draw.c
@@ -71,66 +71,6 @@ _rsvg_cairo_set_text_antialias (cairo_t * cr, TextRenderingProperty aa)
}
static void
-_rsvg_cairo_set_operator (cairo_t * cr, RsvgCompOpType comp_op)
-{
- cairo_operator_t op;
-
- switch (comp_op) {
- case RSVG_COMP_OP_CLEAR:
- op = CAIRO_OPERATOR_CLEAR;
- break;
- case RSVG_COMP_OP_SRC:
- op = CAIRO_OPERATOR_SOURCE;
- break;
- case RSVG_COMP_OP_DST:
- op = CAIRO_OPERATOR_DEST;
- break;
- case RSVG_COMP_OP_DST_OVER:
- op = CAIRO_OPERATOR_DEST_OVER;
- break;
- case RSVG_COMP_OP_SRC_IN:
- op = CAIRO_OPERATOR_IN;
- break;
- case RSVG_COMP_OP_DST_IN:
- op = CAIRO_OPERATOR_DEST_IN;
- break;
- case RSVG_COMP_OP_SRC_OUT:
- op = CAIRO_OPERATOR_OUT;
- break;
- case RSVG_COMP_OP_DST_OUT:
- op = CAIRO_OPERATOR_DEST_OUT;
- break;
- case RSVG_COMP_OP_SRC_ATOP:
- op = CAIRO_OPERATOR_ATOP;
- break;
- case RSVG_COMP_OP_DST_ATOP:
- op = CAIRO_OPERATOR_DEST_ATOP;
- break;
- case RSVG_COMP_OP_XOR:
- op = CAIRO_OPERATOR_XOR;
- break;
- case RSVG_COMP_OP_PLUS:
- op = CAIRO_OPERATOR_ADD;
- break;
- case RSVG_COMP_OP_MULTIPLY:
- case RSVG_COMP_OP_SCREEN:
- case RSVG_COMP_OP_OVERLAY:
- case RSVG_COMP_OP_DARKEN:
- case RSVG_COMP_OP_LIGHTEN:
- case RSVG_COMP_OP_COLOR_DODGE:
- case RSVG_COMP_OP_COLOR_BURN:
- case RSVG_COMP_OP_HARD_LIGHT:
- case RSVG_COMP_OP_SOFT_LIGHT:
- case RSVG_COMP_OP_DIFFERENCE:
- case RSVG_COMP_OP_EXCLUSION:
- default:
- op = CAIRO_OPERATOR_OVER;
- break;
- }
- cairo_set_operator (cr, op);
-}
-
-static void
rsvg_pixmap_destroy (gchar * pixels, gpointer data)
{
g_free (pixels);
@@ -546,7 +486,7 @@ rsvg_cairo_render_path (RsvgDrawingCtx * ctx, const RsvgBpathDef * bpath_def)
need_tmpbuf = ((state->fill != NULL) && (state->stroke != NULL) && state->opacity != 0xff)
|| state->clip_path_ref || state->mask || state->filter
- || (state->comp_op != RSVG_COMP_OP_SRC_OVER);
+ || (state->comp_op != CAIRO_OPERATOR_OVER);
if (need_tmpbuf)
rsvg_cairo_push_discrete_layer (ctx);
@@ -755,7 +695,7 @@ rsvg_cairo_render_image (RsvgDrawingCtx * ctx, const GdkPixbuf * pixbuf,
cairo_pixels += 4 * width;
}
- _rsvg_cairo_set_operator (render->cr, state->comp_op);
+ cairo_set_operator (render->cr, state->comp_op);
#if 1
cairo_set_source_surface (render->cr, surface, pixbuf_x, pixbuf_y);
@@ -900,7 +840,7 @@ rsvg_cairo_push_render_stack (RsvgDrawingCtx * ctx)
lateclip = TRUE;
if (state->opacity == 0xFF
- && !state->filter && !state->mask && !lateclip && (state->comp_op == RSVG_COMP_OP_SRC_OVER)
+ && !state->filter && !state->mask && !lateclip && (state->comp_op == CAIRO_OPERATOR_OVER)
&& (state->enable_background == RSVG_ENABLE_BACKGROUND_ACCUMULATE))
return;
if (!state->filter)
@@ -970,7 +910,7 @@ rsvg_cairo_pop_render_stack (RsvgDrawingCtx * ctx)
lateclip = TRUE;
if (state->opacity == 0xFF
- && !state->filter && !state->mask && !lateclip && (state->comp_op == RSVG_COMP_OP_SRC_OVER)
+ && !state->filter && !state->mask && !lateclip && (state->comp_op == CAIRO_OPERATOR_OVER)
&& (state->enable_background == RSVG_ENABLE_BACKGROUND_ACCUMULATE))
return;
@@ -1008,7 +948,7 @@ rsvg_cairo_pop_render_stack (RsvgDrawingCtx * ctx)
if (lateclip)
rsvg_cairo_clip (ctx, rsvg_current_state (ctx)->clip_path_ref, &render->bbox);
- _rsvg_cairo_set_operator (render->cr, state->comp_op);
+ cairo_set_operator (render->cr, state->comp_op);
if (state->mask) {
rsvg_cairo_generate_mask (render->cr, state->mask, ctx, &render->bbox);
diff --git a/rsvg-styles.c b/rsvg-styles.c
index 13b952e..0c03da1 100644
--- a/rsvg-styles.c
+++ b/rsvg-styles.c
@@ -97,7 +97,7 @@ rsvg_state_init (RsvgState * state)
state->fill_rule = FILL_RULE_NONZERO;
state->clip_rule = FILL_RULE_NONZERO;
state->enable_background = RSVG_ENABLE_BACKGROUND_ACCUMULATE;
- state->comp_op = RSVG_COMP_OP_SRC_OVER;
+ state->comp_op = CAIRO_OPERATOR_OVER;
state->overflow = FALSE;
state->flood_color = 0;
state->flood_opacity = 255;
@@ -492,55 +492,55 @@ rsvg_parse_style_pair (RsvgHandle * ctx,
state->enable_background = RSVG_ENABLE_BACKGROUND_ACCUMULATE;
} else if (g_str_equal (name, "comp-op")) {
if (g_str_equal (value, "clear"))
- state->comp_op = RSVG_COMP_OP_CLEAR;
+ state->comp_op = CAIRO_OPERATOR_CLEAR;
else if (g_str_equal (value, "src"))
- state->comp_op = RSVG_COMP_OP_SRC;
+ state->comp_op = CAIRO_OPERATOR_SOURCE;
else if (g_str_equal (value, "dst"))
- state->comp_op = RSVG_COMP_OP_DST;
+ state->comp_op = CAIRO_OPERATOR_DEST;
else if (g_str_equal (value, "src-over"))
- state->comp_op = RSVG_COMP_OP_SRC_OVER;
+ state->comp_op = CAIRO_OPERATOR_OVER;
else if (g_str_equal (value, "dst-over"))
- state->comp_op = RSVG_COMP_OP_DST_OVER;
+ state->comp_op = CAIRO_OPERATOR_DEST_OVER;
else if (g_str_equal (value, "src-in"))
- state->comp_op = RSVG_COMP_OP_SRC_IN;
+ state->comp_op = CAIRO_OPERATOR_IN;
else if (g_str_equal (value, "dst-in"))
- state->comp_op = RSVG_COMP_OP_DST_IN;
+ state->comp_op = CAIRO_OPERATOR_DEST_IN;
else if (g_str_equal (value, "src-out"))
- state->comp_op = RSVG_COMP_OP_SRC_OUT;
+ state->comp_op = CAIRO_OPERATOR_OUT;
else if (g_str_equal (value, "dst-out"))
- state->comp_op = RSVG_COMP_OP_DST_OUT;
+ state->comp_op = CAIRO_OPERATOR_DEST_OUT;
else if (g_str_equal (value, "src-atop"))
- state->comp_op = RSVG_COMP_OP_SRC_ATOP;
+ state->comp_op = CAIRO_OPERATOR_ATOP;
else if (g_str_equal (value, "dst-atop"))
- state->comp_op = RSVG_COMP_OP_DST_ATOP;
+ state->comp_op = CAIRO_OPERATOR_DEST_ATOP;
else if (g_str_equal (value, "xor"))
- state->comp_op = RSVG_COMP_OP_XOR;
+ state->comp_op = CAIRO_OPERATOR_XOR;
else if (g_str_equal (value, "plus"))
- state->comp_op = RSVG_COMP_OP_PLUS;
+ state->comp_op = CAIRO_OPERATOR_ADD;
else if (g_str_equal (value, "multiply"))
- state->comp_op = RSVG_COMP_OP_MULTIPLY;
+ state->comp_op = CAIRO_OPERATOR_MULTIPLY;
else if (g_str_equal (value, "screen"))
- state->comp_op = RSVG_COMP_OP_SCREEN;
+ state->comp_op = CAIRO_OPERATOR_SCREEN;
else if (g_str_equal (value, "overlay"))
- state->comp_op = RSVG_COMP_OP_OVERLAY;
+ state->comp_op = CAIRO_OPERATOR_OVERLAY;
else if (g_str_equal (value, "darken"))
- state->comp_op = RSVG_COMP_OP_DARKEN;
+ state->comp_op = CAIRO_OPERATOR_DARKEN;
else if (g_str_equal (value, "lighten"))
- state->comp_op = RSVG_COMP_OP_LIGHTEN;
+ state->comp_op = CAIRO_OPERATOR_LIGHTEN;
else if (g_str_equal (value, "color-dodge"))
- state->comp_op = RSVG_COMP_OP_COLOR_DODGE;
+ state->comp_op = CAIRO_OPERATOR_COLOR_DODGE;
else if (g_str_equal (value, "color-burn"))
- state->comp_op = RSVG_COMP_OP_COLOR_BURN;
+ state->comp_op = CAIRO_OPERATOR_COLOR_BURN;
else if (g_str_equal (value, "hard-light"))
- state->comp_op = RSVG_COMP_OP_HARD_LIGHT;
+ state->comp_op = CAIRO_OPERATOR_HARD_LIGHT;
else if (g_str_equal (value, "soft-light"))
- state->comp_op = RSVG_COMP_OP_SOFT_LIGHT;
+ state->comp_op = CAIRO_OPERATOR_SOFT_LIGHT;
else if (g_str_equal (value, "difference"))
- state->comp_op = RSVG_COMP_OP_DIFFERENCE;
+ state->comp_op = CAIRO_OPERATOR_DIFFERENCE;
else if (g_str_equal (value, "exclusion"))
- state->comp_op = RSVG_COMP_OP_EXCLUSION;
+ state->comp_op = CAIRO_OPERATOR_EXCLUSION;
else
- state->comp_op = RSVG_COMP_OP_SRC_OVER;
+ state->comp_op = CAIRO_OPERATOR_OVER;
} else if (g_str_equal (name, "display")) {
state->has_visible = TRUE;
if (g_str_equal (value, "none"))
diff --git a/rsvg-styles.h b/rsvg-styles.h
index a9b0ea2..419c877 100644
--- a/rsvg-styles.h
+++ b/rsvg-styles.h
@@ -27,6 +27,7 @@
#ifndef RSVG_STYLES_H
#define RSVG_STYLES_H
+#include <cairo.h>
#include "rsvg.h"
#include "rsvg-paint-server.h"
@@ -76,33 +77,6 @@ typedef enum {
} TextRenderingProperty;
typedef enum {
- RSVG_COMP_OP_CLEAR,
- RSVG_COMP_OP_SRC,
- RSVG_COMP_OP_DST,
- RSVG_COMP_OP_SRC_OVER,
- RSVG_COMP_OP_DST_OVER,
- RSVG_COMP_OP_SRC_IN,
- RSVG_COMP_OP_DST_IN,
- RSVG_COMP_OP_SRC_OUT,
- RSVG_COMP_OP_DST_OUT,
- RSVG_COMP_OP_SRC_ATOP,
- RSVG_COMP_OP_DST_ATOP,
- RSVG_COMP_OP_XOR,
- RSVG_COMP_OP_PLUS,
- RSVG_COMP_OP_MULTIPLY,
- RSVG_COMP_OP_SCREEN,
- RSVG_COMP_OP_OVERLAY,
- RSVG_COMP_OP_DARKEN,
- RSVG_COMP_OP_LIGHTEN,
- RSVG_COMP_OP_COLOR_DODGE,
- RSVG_COMP_OP_COLOR_BURN,
- RSVG_COMP_OP_HARD_LIGHT,
- RSVG_COMP_OP_SOFT_LIGHT,
- RSVG_COMP_OP_DIFFERENCE,
- RSVG_COMP_OP_EXCLUSION
-} RsvgCompOpType;
-
-typedef enum {
RSVG_ENABLE_BACKGROUND_ACCUMULATE,
RSVG_ENABLE_BACKGROUND_NEW
} RsvgEnableBackgroundType;
@@ -229,7 +203,7 @@ struct _RsvgState {
gboolean has_middleMarker;
gboolean has_endMarker;
- RsvgCompOpType comp_op;
+ cairo_operator_t comp_op;
RsvgEnableBackgroundType enable_background;
ShapeRenderingProperty shape_rendering_type;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]