summaryrefslogtreecommitdiffstats
path: root/src/sp-pattern.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/sp-pattern.h')
-rw-r--r--src/sp-pattern.h77
1 files changed, 40 insertions, 37 deletions
diff --git a/src/sp-pattern.h b/src/sp-pattern.h
index debce86fb..f69ba10b3 100644
--- a/src/sp-pattern.h
+++ b/src/sp-pattern.h
@@ -16,44 +16,26 @@
#include <gtk/gtk.h>
#include "sp-item.h"
-#define SP_TYPE_PATTERN (sp_pattern_get_type ())
-#define SP_PATTERN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_PATTERN, SPPattern))
-#define SP_PATTERN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_PATTERN, SPPatternClass))
-#define SP_IS_PATTERN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_PATTERN))
-#define SP_IS_PATTERN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_PATTERN))
-GType sp_pattern_get_type (void);
+#define SP_PATTERN(obj) (dynamic_cast<SPPattern*>((SPObject*)obj))
+#define SP_IS_PATTERN(obj) (dynamic_cast<const SPPattern*>((SPObject*)obj) != NULL)
-class SPPattern;
-class SPPatternClass;
+class SPPatternReference;
#include "svg/svg-length.h"
#include "sp-paint-server.h"
#include "uri-references.h"
+#include "viewbox.h"
#include <stddef.h>
#include <sigc++/connection.h>
-class SPPatternReference : public Inkscape::URIReference {
+class SPPattern : public SPPaintServer, public SPViewBox {
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);
- }
-};
+ SPPattern();
+ virtual ~SPPattern();
-enum {
- SP_PATTERN_UNITS_USERSPACEONUSE,
- SP_PATTERN_UNITS_OBJECTBOUNDINGBOX
-};
-
-struct SPPattern : public SPPaintServer {
/* Reference (href) */
gchar *href;
SPPatternReference *ref;
@@ -71,15 +53,36 @@ struct SPPattern : public SPPaintServer {
SVGLength y;
SVGLength width;
SVGLength height;
- /* VieBox */
- Geom::Rect viewBox;
- guint viewBox_set : 1;
sigc::connection modified_connection;
+
+ virtual cairo_pattern_t* pattern_new(cairo_t *ct, Geom::OptRect const &bbox, double opacity);
+
+protected:
+ 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);
+};
+
+
+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);
+ }
};
-struct SPPatternClass {
- SPPaintServerClass parent_class;
+enum {
+ SP_PATTERN_UNITS_USERSPACEONUSE,
+ SP_PATTERN_UNITS_OBJECTBOUNDINGBOX
};
guint pattern_users (SPPattern *pattern);
@@ -91,14 +94,14 @@ const gchar *pattern_tile (GSList *reprs, Geom::Rect bounds, SPDocument *documen
SPPattern *pattern_getroot (SPPattern *pat);
-guint pattern_patternUnits (SPPattern *pat);
-guint pattern_patternContentUnits (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 *pat);
-gdouble pattern_y (SPPattern *pat);
-gdouble pattern_width (SPPattern *pat);
-gdouble pattern_height (SPPattern *pat);
-Geom::OptRect pattern_viewBox (SPPattern *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