~ubuntu-branches/ubuntu/dapper/librsvg/dapper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
/* vim: set sw=4: -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
   rsvg-styles.h: Handle SVG styles

   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>
*/

#ifndef RSVG_STYLES_H
#define RSVG_STYLES_H

#include "rsvg.h"
#include "rsvg-paint-server.h"

#include <libxml/SAX.h>
#include <pango/pango.h>

G_BEGIN_DECLS

typedef int TextDecoration;

enum {
	TEXT_NORMAL    = 0x00,
	TEXT_OVERLINE  = 0x01,
	TEXT_UNDERLINE = 0x02,
	TEXT_STRIKE    = 0x04
};

typedef enum {
	TEXT_ANCHOR_START,
	TEXT_ANCHOR_MIDDLE,
	TEXT_ANCHOR_END
} TextAnchor;

enum {
	FILL_RULE_EVENODD = 0,
	FILL_RULE_NONZERO = 1
};

typedef enum {
	UNICODE_BIDI_NORMAL = 0,
	UNICODE_BIDI_EMBED = 1,
	UNICODE_BIDI_OVERRIDE = 2	
} UnicodeBidi;

/* enums and data structures are ABI compatible with libart */

typedef enum {
  RSVG_PATH_STROKE_JOIN_MITER,
  RSVG_PATH_STROKE_JOIN_ROUND,
  RSVG_PATH_STROKE_JOIN_BEVEL
} RsvgPathStrokeJoinType;

typedef enum {
  RSVG_PATH_STROKE_CAP_BUTT,
  RSVG_PATH_STROKE_CAP_ROUND,
  RSVG_PATH_STROKE_CAP_SQUARE
} RsvgPathStrokeCapType;

typedef struct _RsvgVpathDash RsvgVpathDash;

struct _RsvgVpathDash {
  RsvgLength offset;
  int n_dash;
  double *dash;
};

/* end libart theft... */

struct _RsvgState {
	double affine[6];
	double personal_affine[6];
	
	RsvgFilter *filter;
	void *mask;
	void *clip_path_ref;
	gboolean backgroundnew;
	guint8 adobe_blend; /* 0..11 */
	guint8 opacity; /* 0..255 */
	
	RsvgPaintServer *fill;
	gboolean has_fill_server;
	guint8 fill_opacity; /* 0..255 */
	gboolean has_fill_opacity;
	gint fill_rule;	
	gboolean has_fill_rule;
	gint clip_rule;	
	gboolean has_clip_rule;

	gboolean overflow;
	gboolean has_overflow;

	RsvgPaintServer *stroke;
	gboolean has_stroke_server;
	guint8 stroke_opacity; /* 0..255 */
	gboolean has_stroke_opacity;
	RsvgLength stroke_width;
	gboolean has_stroke_width;
	double miter_limit;
	gboolean has_miter_limit;
	
	RsvgPathStrokeCapType cap;
	gboolean has_cap;
	RsvgPathStrokeJoinType join;
	gboolean has_join;
	
	RsvgLength   font_size;
	gboolean has_font_size;
	char         * font_family;
	gboolean has_font_family;
	char         * lang;
	gboolean has_lang;
	PangoStyle     font_style;
	gboolean has_font_style;
	PangoVariant   font_variant;
	gboolean has_font_variant;
	PangoWeight    font_weight;
	gboolean has_font_weight;
	PangoStretch   font_stretch;
	gboolean has_font_stretch;
	TextDecoration font_decor;
	gboolean has_font_decor;
	PangoDirection text_dir;
	gboolean has_text_dir;
	UnicodeBidi unicode_bidi;
	gboolean has_unicode_bidi;
	TextAnchor     text_anchor;
	gboolean has_text_anchor;	

	guint text_offset;
	
	guint32 stop_color; /* rgb */
	gboolean has_stop_color;
	gint stop_opacity;  /* 0..255 */
	gboolean has_stop_opacity;
	
	gboolean visible;
	gboolean has_visible;

	gboolean has_cond;
	gboolean cond_true;

	RsvgVpathDash dash;
	gboolean has_dash;

	guint32 current_color;
	gboolean has_current_color;

	guint32 flood_color;
	gboolean has_flood_color;

	guchar flood_opacity;
	gboolean has_flood_opacity;

	RsvgNode * startMarker;
	RsvgNode * middleMarker;
	RsvgNode * endMarker;	
	gboolean has_startMarker;
	gboolean has_middleMarker;
	gboolean has_endMarker;	
};

RsvgState * rsvg_state_new ();
void rsvg_state_init (RsvgState *state);
void rsvg_state_clone (RsvgState *dst, const RsvgState *src);
void rsvg_state_inherit (RsvgState *dst, const RsvgState *src);
void rsvg_state_reinherit (RsvgState *dst, const RsvgState *src);
void rsvg_state_dominate (RsvgState *dst, const RsvgState *src);
void rsvg_state_override (RsvgState *dst, const RsvgState *src);
void rsvg_state_finalize (RsvgState *state);

void rsvg_parse_style_pairs (RsvgHandle *ctx, RsvgState *state, 
							 RsvgPropertyBag *atts);
void rsvg_parse_style_pair (RsvgHandle *ctx, RsvgState *state, 
							const char *key, const char *val);
void rsvg_parse_style (RsvgHandle *ctx, RsvgState *state, const char *str);
void rsvg_parse_cssbuffer (RsvgHandle *ctx, const char * buff, size_t buflen);

void rsvg_parse_style_attrs (RsvgHandle *ctx, RsvgState *state, const char * tag,
							 const char * klazz, const char * id,
							 RsvgPropertyBag *atts);

gdouble rsvg_viewport_percentage (gdouble width, gdouble height);
gdouble rsvg_dpi_percentage (RsvgHandle * ctx);

gboolean rsvg_parse_transform (double dst[6], const char *src);

RsvgState * rsvg_state_parent (RsvgDrawingCtx *ctx);
RsvgState * rsvg_state_current (RsvgDrawingCtx *ctx);

void rsvg_state_pop(RsvgDrawingCtx * ctx);
void rsvg_state_push(RsvgDrawingCtx * ctx);

void rsvg_state_reinherit_top(RsvgDrawingCtx * ctx, RsvgState * state, int dominate);

void rsvg_state_reconstruct(RsvgState * state, RsvgNode * current);

G_END_DECLS

#endif /* RSVG_STYLES_H */