rsvg-paint-server.h 4.57 KB
Newer Older
1
/* vim: set sw=4 sts=4: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/*
   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>
*/
25 26 27 28

#ifndef RSVG_PAINT_SERVER_H
#define RSVG_PAINT_SERVER_H

29
#include <glib.h>
30 31
#include "rsvg-defs.h"

32 33 34
G_BEGIN_DECLS 

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

typedef struct _RsvgPaintServer RsvgPaintServer;

typedef struct _RsvgPSCtx RsvgPSCtx;

Dom Lachowicz's avatar
Dom Lachowicz committed
45
typedef enum {
46 47 48
    RSVG_GRADIENT_PAD,
    RSVG_GRADIENT_REFLECT,
    RSVG_GRADIENT_REPEAT
Dom Lachowicz's avatar
Dom Lachowicz committed
49 50
} RsvgGradientSpread;

51
struct _RsvgGradientStop {
52 53 54
    RsvgNode super;
    double offset;
    guint32 rgba;
55 56 57
};

struct _RsvgLinearGradient {
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
    RsvgNode super;
    gboolean obj_bbox;
    double affine[6];           /* user space to actual at time of gradient def */
    RsvgGradientSpread spread;
    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;
    RsvgNode *fallback;
73 74 75
};

struct _RsvgRadialGradient {
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
    RsvgNode super;
    gboolean obj_bbox;
    double affine[6];           /* user space to actual at time of gradient def */
    RsvgGradientSpread spread;
    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;
    RsvgNode *fallback;
92 93
};

94
struct _RsvgPattern {
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
    RsvgNode super;
    gboolean obj_cbbox;
    gboolean obj_bbox;
    double affine[6];           /* user space to actual at time of gradient def */
    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;
    RsvgPattern *fallback;
112 113
};

114
struct _RsvgSolidColour {
115 116
    gboolean currentcolour;
    guint32 rgb;
117 118 119 120 121 122 123
};

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

union _RsvgPaintServerCore {
124 125 126 127
    RsvgLinearGradient *lingrad;
    RsvgRadialGradient *radgrad;
    RsvgSolidColour *colour;
    RsvgPattern *pattern;
128 129 130
};

enum _RsvgPaintServerType {
131 132 133 134
    RSVG_PAINT_SERVER_RAD_GRAD,
    RSVG_PAINT_SERVER_LIN_GRAD,
    RSVG_PAINT_SERVER_SOLID,
    RSVG_PAINT_SERVER_PATTERN
135 136 137
};

struct _RsvgPaintServer {
138 139 140
    int refcnt;
    RsvgPaintServerType type;
    RsvgPaintServerCore core;
141 142
};

143
/* Create a new paint server based on a specification string. */
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
RsvgPaintServer	    *rsvg_paint_server_parse	(gboolean * inherit, const RsvgDefs * defs,
						 const char *str, guint32 current_color);
void		     rsvg_paint_server_ref	(RsvgPaintServer * ps);
void		     rsvg_paint_server_unref	(RsvgPaintServer * ps);
RsvgRadialGradient  *rsvg_clone_radial_gradient (const RsvgRadialGradient * grad,
						 gboolean * shallow_cloned);
RsvgLinearGradient  *rsvg_clone_linear_gradient (const RsvgLinearGradient * grad,
						 gboolean * shallow_cloned);
RsvgNode *rsvg_new_linear_gradient  (void);
RsvgNode *rsvg_new_radial_gradient  (void);
RsvgNode *rsvg_new_stop		    (void);
RsvgNode *rsvg_new_pattern	    (void);
void rsvg_pattern_fix_fallback		(RsvgPattern * pattern);
void rsvg_linear_gradient_fix_fallback	(RsvgLinearGradient * grad);
void rsvg_radial_gradient_fix_fallback	(RsvgRadialGradient * grad);
159

160
G_END_DECLS
161

162
#endif