Code

more unreffing temporary styles properly
[inkscape.git] / src / style.h
index 703a55fdb9c8bfb3b0b2e69b66927a036c291088..544bde55778251ae3c9bf978c7cbd67ae3b5757a 100644 (file)
@@ -16,6 +16,9 @@
 #include "color.h"
 #include "forward.h"
 #include "sp-marker-loc.h"
+#include "sp-filter.h"
+
+#include <sigc++/connection.h>
 
 namespace Inkscape {
 namespace XML {
@@ -156,14 +159,22 @@ struct SPIPaint {
     unsigned inherit : 1;
     unsigned currentcolor : 1;
     unsigned type : 2;
-    union {
-        SPColor color;
+    struct {
         struct {
             SPPaintServer *server;
             gchar *uri;
         } paint;
+        SPColor color;
+        SVGICCColor *iccColor;
     } value;
-    SVGICCColor *iccColor;
+};
+
+/// Filter type internal to SPStyle
+struct SPIFilter {
+    unsigned set : 1;
+    unsigned inherit : 1;
+    SPFilter *filter;
+    gchar *uri;
 };
 
 enum {
@@ -322,14 +333,36 @@ struct SPStyle {
     /** Marker list */
     SPIString marker[SP_MARKER_LOC_QTY];
 
+    /** Filter effect */
+    SPIFilter filter;
+
+    SPIEnum filter_blend_mode;
+
+   /** normally not used, but duplicates the Gaussian blur deviation (if any) from the attached
+        filter when the style is used for querying */
+    SPILength filter_gaussianBlur_deviation;
+
+    /** enable-background, used for defining where filter effects get
+     * their background image */
+    SPIEnum enable_background;
+
     /// style belongs to a cloned object, must not href anything
     bool cloned; 
     /// style has hreffed its fill/stroke paintservers, needs to release.
     bool fill_hreffed; 
     bool stroke_hreffed; 
-    /// style is listening to changes in fill/stroke paintservers, needs to disconnect.
-    bool fill_listening; 
-    bool stroke_listening; 
+    bool filter_hreffed; 
+
+    sigc::connection release_connection;
+
+    sigc::connection fill_release_connection;
+    sigc::connection fill_modified_connection;
+
+    sigc::connection stroke_release_connection;
+    sigc::connection stroke_modified_connection;
+
+    sigc::connection filter_release_connection;
+    sigc::connection filter_modified_connection;
 };
 
 SPStyle *sp_style_new();
@@ -484,6 +517,11 @@ enum SPCSSDisplay {
     SP_CSS_DISPLAY_TABLE_CAPTION
 };
 
+enum SPEnableBackground {
+    SP_CSS_BACKGROUND_ACCUMULATE,
+    SP_CSS_BACKGROUND_NEW
+};
+
 /// An SPTextStyle has a refcount, a font family, and a font name.
 struct SPTextStyle {
     int refcount;
@@ -503,6 +541,11 @@ SPCSSAttr *sp_css_attr_scale(SPCSSAttr *css, double ex);
 
 void sp_style_unset_property_attrs(SPObject *o);
 
+void sp_style_set_property_url (SPObject *item, gchar const *property, SPObject *linked, bool recursive);
+
+gchar *attribute_unquote(gchar const *val);
+gchar *css2_escape_quote(gchar const *val);
+
 #endif