Code

Applied patch #1505715
[inkscape.git] / src / sp-pattern.h
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