1 #ifndef __SP_PATTERN_H__
2 #define __SP_PATTERN_H__
4 /*
5 * SVG <pattern> implementation
6 *
7 * Author:
8 * Lauris Kaplinski <lauris@kaplinski.com>
9 *
10 * Copyright (C) 2002 Lauris Kaplinski
11 *
12 * Released under GNU GPL, read the file 'COPYING' for more information
13 */
15 #include <gtk/gtktypeutils.h>
17 #include "forward.h"
19 #define SP_TYPE_PATTERN (sp_pattern_get_type ())
20 #define SP_PATTERN(o) (GTK_CHECK_CAST ((o), SP_TYPE_PATTERN, SPPattern))
21 #define SP_PATTERN_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_PATTERN, SPPatternClass))
22 #define SP_IS_PATTERN(o) (GTK_CHECK_TYPE ((o), SP_TYPE_PATTERN))
23 #define SP_IS_PATTERN_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_PATTERN))
25 GType sp_pattern_get_type (void);
27 class SPPatternClass;
29 #include <libnr/nr-rect.h>
30 #include <libnr/nr-matrix.h>
31 #include "svg/svg-length.h"
32 #include "sp-paint-server.h"
33 #include "uri-references.h"
35 class SPPatternReference : public Inkscape::URIReference {
36 public:
37 SPPatternReference (SPObject *obj) : URIReference(obj) {}
38 SPPattern *getObject() const {
39 return (SPPattern *)URIReference::getObject();
40 }
41 protected:
42 virtual bool _acceptObject(SPObject *obj) const {
43 return SP_IS_PATTERN (obj);
44 }
45 };
47 enum {
48 SP_PATTERN_UNITS_USERSPACEONUSE,
49 SP_PATTERN_UNITS_OBJECTBOUNDINGBOX
50 };
52 struct SPPattern : public SPPaintServer {
53 /* Reference (href) */
54 gchar *href;
55 SPPatternReference *ref;
57 /* patternUnits and patternContentUnits attribute */
58 guint patternUnits : 1;
59 guint patternUnits_set : 1;
60 guint patternContentUnits : 1;
61 guint patternContentUnits_set : 1;
62 /* patternTransform attribute */
63 NR::Matrix patternTransform;
64 guint patternTransform_set : 1;
65 /* Tile rectangle */
66 SVGLength x;
67 SVGLength y;
68 SVGLength width;
69 SVGLength height;
70 /* VieBox */
71 NRRect viewBox;
72 guint viewBox_set : 1;
73 };
75 struct SPPatternClass {
76 SPPaintServerClass parent_class;
77 };
79 guint pattern_users (SPPattern *pattern);
80 SPPattern *pattern_chain (SPPattern *pattern);
81 SPPattern *sp_pattern_clone_if_necessary (SPItem *item, SPPattern *pattern, const gchar *property);
82 void sp_pattern_transform_multiply (SPPattern *pattern, NR::Matrix postmul, bool set);
84 const gchar *pattern_tile (GSList *reprs, NR::Rect bounds, SPDocument *document, NR::Matrix transform, NR::Matrix move);
86 SPPattern *pattern_getroot (SPPattern *pat);
88 guint pattern_patternUnits (SPPattern *pat);
89 guint pattern_patternContentUnits (SPPattern *pat);
90 NR::Matrix const &pattern_patternTransform(SPPattern const *pat);
91 gdouble pattern_x (SPPattern *pat);
92 gdouble pattern_y (SPPattern *pat);
93 gdouble pattern_width (SPPattern *pat);
94 gdouble pattern_height (SPPattern *pat);
95 NRRect *pattern_viewBox (SPPattern *pat);
98 #endif