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
|
#ifndef SEEN_SP_PATTERN_H
#define SEEN_SP_PATTERN_H
/*
* SVG <pattern> implementation
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
* Abhishek Sharma
*
* Copyright (C) 2002 Lauris Kaplinski
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#include <gtk/gtk.h>
#include "sp-item.h"
#define SP_TYPE_PATTERN (sp_pattern_get_type ())
#define SP_PATTERN(obj) ((SPPattern*)obj)
#define SP_IS_PATTERN(obj) (obj != NULL && static_cast<const SPObject*>(obj)->typeHierarchy.count(typeid(SPPattern)))
GType sp_pattern_get_type (void);
struct SPPatternReference;
#include "svg/svg-length.h"
#include "sp-paint-server.h"
#include "uri-references.h"
#include <stddef.h>
#include <sigc++/connection.h>
class CPattern;
class SPPattern : public SPPaintServer {
public:
CPattern* cpattern;
/* Reference (href) */
gchar *href;
SPPatternReference *ref;
/* patternUnits and patternContentUnits attribute */
guint patternUnits : 1;
guint patternUnits_set : 1;
guint patternContentUnits : 1;
guint patternContentUnits_set : 1;
/* patternTransform attribute */
Geom::Affine patternTransform;
guint patternTransform_set : 1;
/* Tile rectangle */
SVGLength x;
SVGLength y;
SVGLength width;
SVGLength height;
/* VieBox */
Geom::Rect viewBox;
guint viewBox_set : 1;
sigc::connection modified_connection;
};
struct SPPatternClass {
SPPaintServerClass parent_class;
};
class CPattern : public CPaintServer {
public:
CPattern(SPPattern* pattern);
virtual ~CPattern();
virtual void build(SPDocument* doc, Inkscape::XML::Node* repr);
virtual void release();
virtual void set(unsigned int key, const gchar* value);
virtual void update(SPCtx* ctx, unsigned int flags);
virtual void modified(unsigned int flags);
virtual cairo_pattern_t* pattern_new(cairo_t *ct, Geom::OptRect const &bbox, double opacity);
protected:
SPPattern* sppattern;
};
class SPPatternReference : public Inkscape::URIReference {
public:
SPPatternReference (SPObject *obj) : URIReference(obj) {}
SPPattern *getObject() const {
return reinterpret_cast<SPPattern *>(URIReference::getObject());
}
protected:
virtual bool _acceptObject(SPObject *obj) const {
return SP_IS_PATTERN (obj);
}
};
enum {
SP_PATTERN_UNITS_USERSPACEONUSE,
SP_PATTERN_UNITS_OBJECTBOUNDINGBOX
};
guint pattern_users (SPPattern *pattern);
SPPattern *pattern_chain (SPPattern *pattern);
SPPattern *sp_pattern_clone_if_necessary (SPItem *item, SPPattern *pattern, const gchar *property);
void sp_pattern_transform_multiply (SPPattern *pattern, Geom::Affine postmul, bool set);
const gchar *pattern_tile (GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Affine transform, Geom::Affine move);
SPPattern *pattern_getroot (SPPattern *pat);
guint pattern_patternUnits (SPPattern const *pat);
guint pattern_patternContentUnits (SPPattern const *pat);
Geom::Affine const &pattern_patternTransform(SPPattern const *pat);
gdouble pattern_x (SPPattern const *pat);
gdouble pattern_y (SPPattern const *pat);
gdouble pattern_width (SPPattern const *pat);
gdouble pattern_height (SPPattern const *pat);
Geom::OptRect pattern_viewBox (SPPattern const *pat);
#endif // SEEN_SP_PATTERN_H
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
|