diff options
Diffstat (limited to 'src/sp-pattern.h')
| -rw-r--r-- | src/sp-pattern.h | 77 |
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 |
