rsvg-paint-server.h 4.43 KB
Newer Older
1 2
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* vim: set sw=4 sts=4 ts=4 expandtab: */
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/*
   rsvg-paint-server.h : RSVG colors

   Copyright (C) 2000 Eazel, Inc.
   Copyright (C) 2002 Dom Lachowicz <cinamod@hotmail.com>

   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public License as
   published by the Free Software Foundation; either version 2 of the
   License, or (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with this program; if not, write to the
   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.

   Author: Raph Levien <raph@artofcode.com>
*/
26 27 28 29

#ifndef RSVG_PAINT_SERVER_H
#define RSVG_PAINT_SERVER_H

30
#include <glib.h>
31
#include <cairo.h>
32 33
#include "rsvg-defs.h"

34 35 36
G_BEGIN_DECLS 

typedef struct _RsvgGradientStop RsvgGradientStop;
37 38 39
typedef struct _RsvgGradientStops RsvgGradientStops;
typedef struct _RsvgLinearGradient RsvgLinearGradient;
typedef struct _RsvgRadialGradient RsvgRadialGradient;
40
typedef struct _RsvgPattern RsvgPattern;
41
typedef struct _RsvgSolidColour RsvgSolidColour;
42 43 44 45 46 47

typedef struct _RsvgPaintServer RsvgPaintServer;

typedef struct _RsvgPSCtx RsvgPSCtx;

struct _RsvgGradientStop {
48 49 50
    RsvgNode super;
    double offset;
    guint32 rgba;
51 52 53
};

struct _RsvgLinearGradient {
54 55
    RsvgNode super;
    gboolean obj_bbox;
Christian Persch's avatar
Christian Persch committed
56
    cairo_matrix_t affine; /* user space to actual at time of gradient def */
57
    cairo_extend_t spread;
58 59 60 61 62 63 64 65 66 67
    RsvgLength x1, y1, x2, y2;
    guint32 current_color;
    gboolean has_current_color;
    int hasx1:1;
    int hasy1:1;
    int hasx2:1;
    int hasy2:1;
    int hasbbox:1;
    int hasspread:1;
    int hastransform:1;
68
    char *fallback;
69 70 71
};

struct _RsvgRadialGradient {
72 73
    RsvgNode super;
    gboolean obj_bbox;
Christian Persch's avatar
Christian Persch committed
74
    cairo_matrix_t affine; /* user space to actual at time of gradient def */
75
    cairo_extend_t spread;
76 77 78 79 80 81 82 83 84 85 86
    RsvgLength cx, cy, r, fx, fy;
    guint32 current_color;
    gboolean has_current_color;
    int hascx:1;
    int hascy:1;
    int hasfx:1;
    int hasfy:1;
    int hasr:1;
    int hasspread:1;
    int hasbbox:1;
    int hastransform:1;
87
    char *fallback;
88 89
};

90
struct _RsvgPattern {
91 92 93
    RsvgNode super;
    gboolean obj_cbbox;
    gboolean obj_bbox;
Christian Persch's avatar
Christian Persch committed
94
    cairo_matrix_t affine; /* user space to actual at time of gradient def */
95 96 97 98 99 100 101 102 103 104 105 106
    RsvgLength x, y, width, height;
    RsvgViewBox vbox;
    unsigned int preserve_aspect_ratio;
    int hasx:1;
    int hasy:1;
    int hasvbox:1;
    int haswidth:1;
    int hasheight:1;
    int hasaspect:1;
    int hascbox:1;
    int hasbbox:1;
    int hastransform:1;
107
    char *fallback;
108 109
};

110
struct _RsvgSolidColour {
111
    gboolean currentcolour;
112
    guint32 argb;
113 114 115 116 117 118 119
};

typedef struct _RsvgSolidColour RsvgPaintServerColour;
typedef enum _RsvgPaintServerType RsvgPaintServerType;
typedef union _RsvgPaintServerCore RsvgPaintServerCore;

union _RsvgPaintServerCore {
120
    RsvgSolidColour *colour;
121
    char *iri;
122 123 124
};

enum _RsvgPaintServerType {
125
    RSVG_PAINT_SERVER_SOLID,
126
    RSVG_PAINT_SERVER_IRI
127 128 129
};

struct _RsvgPaintServer {
130 131 132
    int refcnt;
    RsvgPaintServerType type;
    RsvgPaintServerCore core;
133 134
};

135
/* Create a new paint server based on a specification string. */
136
G_GNUC_INTERNAL
137
RsvgPaintServer	    *rsvg_paint_server_parse    (gboolean * inherit, const char *str);
138
G_GNUC_INTERNAL
139
void                 rsvg_paint_server_ref      (RsvgPaintServer * ps);
140
G_GNUC_INTERNAL
141
void                 rsvg_paint_server_unref    (RsvgPaintServer * ps);
142

143
G_GNUC_INTERNAL
144
RsvgNode *rsvg_new_linear_gradient  (void);
145
G_GNUC_INTERNAL
146
RsvgNode *rsvg_new_radial_gradient  (void);
147
G_GNUC_INTERNAL
148
RsvgNode *rsvg_new_stop	        (void);
149
G_GNUC_INTERNAL
150
RsvgNode *rsvg_new_pattern      (void);
151
G_GNUC_INTERNAL
152 153
void rsvg_pattern_fix_fallback          (RsvgDrawingCtx * ctx,
                                         RsvgPattern * pattern);
154
G_GNUC_INTERNAL
155 156
void rsvg_linear_gradient_fix_fallback	(RsvgDrawingCtx * ctx,
                                         RsvgLinearGradient * grad);
157
G_GNUC_INTERNAL
158 159
void rsvg_radial_gradient_fix_fallback	(RsvgDrawingCtx * ctx,
                                         RsvgRadialGradient * grad);
160

161
G_END_DECLS
162

163
#endif