Code

use an accessor method to get filter from style
authorbuliabyak <buliabyak@users.sourceforge.net>
Wed, 27 Jun 2007 06:34:35 +0000 (06:34 +0000)
committerbuliabyak <buliabyak@users.sourceforge.net>
Wed, 27 Jun 2007 06:34:35 +0000 (06:34 +0000)
src/desktop-style.cpp
src/display/nr-arena-group.cpp
src/display/nr-arena-image.cpp
src/display/nr-arena-shape.cpp
src/filter-chemistry.cpp
src/selection-chemistry.cpp
src/sp-item.cpp
src/style.cpp
src/style.h

index c6344da5cc54e4e9f485f1fb52a1c17975f5eb4c..94221ba546fb4eb0c2d42dddb5ac7fcbd8ee938b 100644 (file)
@@ -1030,12 +1030,12 @@ objects_query_blend (GSList *objects, SPStyle *style_res)
         items++;
 
         //if object has a filter
-        if (style->filter.set && style->filter.href->getObject()) {
+        if (style->filter.set && style->getFilter()) {
             int blurcount = 0;
             int blendcount = 0;
 
             // determine whether filter is simple (blend and/or blur) or complex
-            for(SPObject *primitive_obj = style->filter.href->getObject()->children;
+            for(SPObject *primitive_obj = style->getFilter()->children;
                 primitive_obj && SP_IS_FILTER_PRIMITIVE(primitive_obj);
                 primitive_obj = primitive_obj->next) {
                 SPFilterPrimitive *primitive = SP_FILTER_PRIMITIVE(primitive_obj);
@@ -1051,7 +1051,7 @@ objects_query_blend (GSList *objects, SPStyle *style_res)
 
             // simple filter
             if(blurcount == 1 || blendcount == 1) {
-                for(SPObject *primitive_obj = style->filter.href->getObject()->children;
+                for(SPObject *primitive_obj = style->getFilter()->children;
                     primitive_obj && SP_IS_FILTER_PRIMITIVE(primitive_obj);
                     primitive_obj = primitive_obj->next) {
                     if(SP_IS_FEBLEND(primitive_obj)) {
@@ -1118,9 +1118,9 @@ objects_query_blur (GSList *objects, SPStyle *style_res)
         items ++;
 
         //if object has a filter
-        if (style->filter.set && style->filter.href->getObject()) {
+        if (style->filter.set && style->getFilter()) {
             //cycle through filter primitives
-            SPObject *primitive_obj = style->filter.href->getObject()->children;
+            SPObject *primitive_obj = style->getFilter()->children;
             while (primitive_obj) {
                 if (SP_IS_FILTER_PRIMITIVE(primitive_obj)) {
                     SPFilterPrimitive *primitive = SP_FILTER_PRIMITIVE(primitive_obj);
index 3f08f42f4393bd5d8cb8e23be6a0082fe3372719..912992a6e38bc88633a32e13d13d5f4b9138b7d0 100644 (file)
@@ -196,12 +196,12 @@ void nr_arena_group_set_style (NRArenaGroup *group, SPStyle *style)
     group->style = style;
 
     //if group has a filter
-    if (style->filter.set && style->filter.href->getObject()) {
+    if (style->filter.set && style->getFilter()) {
         if (!group->filter) {
-            int primitives = sp_filter_primitive_count(style->filter.href->getObject());
+            int primitives = sp_filter_primitive_count(SP_FILTER(style->getFilter()));
             group->filter = new NR::Filter(primitives);
         }
-        sp_filter_build_renderer(style->filter.href->getObject(), group->filter);
+        sp_filter_build_renderer(SP_FILTER(style->getFilter()), group->filter);
     } else {
         //no filter set for this group
         delete group->filter;
index 87cc94e1b72e115af6193805d34c45d8172e2860..e388fca1d0e84d013fe422cb7be45a8144dd9cce 100644 (file)
@@ -369,12 +369,12 @@ void nr_arena_image_set_style (NRArenaImage *image, SPStyle *style)
     image->style = style;
 
     //if image has a filter
-    if (style->filter.set && style->filter.href->getObject()) {
+    if (style->filter.set && style->getFilter()) {
         if (!image->filter) {
-            int primitives = sp_filter_primitive_count(style->filter.href->getObject());
+            int primitives = sp_filter_primitive_count(SP_FILTER(style->getFilter()));
             image->filter = new NR::Filter(primitives);
         }
-        sp_filter_build_renderer(style->filter.href->getObject(), image->filter);
+        sp_filter_build_renderer(SP_FILTER(style->getFilter()), image->filter);
     } else {
         //no filter set for this image
         delete image->filter;
index 0e7dd27985614581aa397c02251d3549958e7302..a31363f9a8abd327cce446caa2fd22a7f31e3856 100644 (file)
@@ -1360,12 +1360,12 @@ nr_arena_shape_set_style(NRArenaShape *shape, SPStyle *style)
     shape->setMitreLimit(style->stroke_miterlimit.value);
 
     //if shape has a filter
-    if (style->filter.set && style->filter.href->getObject()) {
+    if (style->filter.set && style->getFilter()) {
         if (!shape->filter) {
-            int primitives = sp_filter_primitive_count(style->filter.href->getObject());
+            int primitives = sp_filter_primitive_count(SP_FILTER(style->getFilter()));
             shape->filter = new NR::Filter(primitives);
         }
-        sp_filter_build_renderer(style->filter.href->getObject(), shape->filter);
+        sp_filter_build_renderer(SP_FILTER(style->getFilter()), shape->filter);
     } else {
         //no filter set for this shape
         delete shape->filter;
index 5515d0a049d69cca18b7174c8b9f6ecf63f94504..e59036362bdff71760bbcce65d09e65af7e97b02 100644 (file)
@@ -41,7 +41,7 @@ count_filter_hrefs(SPObject *o, SPFilter *filter)
     SPStyle *style = SP_OBJECT_STYLE(o);
     if (style
         && style->filter.set
-        && style->filter.href->getObject() == filter)
+        && style->getFilter() == filter)
     {
         i ++;
     }
@@ -305,13 +305,13 @@ modify_filter_gaussian_blur_from_item(SPDocument *document, SPItem *item,
         //return new_filter_gaussian_blur_from_item(document, item, radius);
     }
 
-    SPFilter *filter = SP_FILTER(item->style->filter.href->getObject());
+    SPFilter *filter = SP_FILTER(item->style->getFilter());
     Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
 
     // If there are more users for this filter, duplicate it
     if (SP_OBJECT_HREFCOUNT(filter) > count_filter_hrefs(item, filter)) {
         Inkscape::XML::Node *repr;
-        repr = SP_OBJECT_REPR(item->style->filter.href->getObject())->duplicate(xml_doc);
+        repr = SP_OBJECT_REPR(item->style->getFilter())->duplicate(xml_doc);
         SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
         SP_OBJECT_REPR(defs)->appendChild(repr);
 
@@ -338,7 +338,7 @@ modify_filter_gaussian_blur_from_item(SPDocument *document, SPItem *item,
     }
 
     // Set the filter effects area
-    Inkscape::XML::Node *repr = SP_OBJECT_REPR(item->style->filter.href->getObject());
+    Inkscape::XML::Node *repr = SP_OBJECT_REPR(item->style->getFilter());
     set_filter_area(repr, radius, expansion, i2d.expansionX(),
                     i2d.expansionY(), width, height);
 
@@ -391,9 +391,9 @@ void remove_filter (SPObject *item, bool recursive)
  * be handled gracefully */
 void remove_filter_gaussian_blur (SPObject *item)
 {
-    if (item->style && item->style->filter.set && item->style->filter.href->getObject()) {
+    if (item->style && item->style->filter.set && item->style->getFilter()) {
         // Search for the first blur primitive and remove it. (if found)
-        Inkscape::XML::Node *repr = SP_OBJECT_REPR(item->style->filter.href->getObject());
+        Inkscape::XML::Node *repr = SP_OBJECT_REPR(item->style->getFilter());
         Inkscape::XML::Node *primitive = repr->firstChild();
         while (primitive) {
             if (strcmp("svg:feGaussianBlur", primitive->name()) == 0) {
index 27c04f1ddd4e9f10b9015edb930873335b852f63..ce66243ccef8fe5a6dc46f3c7d9967d0eb8dced2 100644 (file)
@@ -953,8 +953,8 @@ void sp_copy_stuff_used_by_item (GSList **defs_clip, SPItem *item, const GSList
         }
     }
 
-    if (style->filter.href->getObject()) {
-        SPObject *filter = style->filter.href->getObject();
+    if (style->getFilter()) {
+        SPObject *filter = style->getFilter();
         if (SP_IS_FILTER(filter)) {
             sp_copy_single (defs_clip, filter, xml_doc);
         }
index 7c1a464479684a86e8f4e50feae2520891e62fa7..8b101896f71bb93bc8b425acb0eac33528390f8a 100644 (file)
@@ -1201,7 +1201,7 @@ sp_item_write_transform(SPItem *item, Inkscape::XML::Node *repr, NR::Matrix cons
              !preserve && // user did not chose to preserve all transforms
              !item->clip_ref->getObject() && // the object does not have a clippath
              !item->mask_ref->getObject() && // the object does not have a mask
-         !(!transform.is_translation() && SP_OBJECT_STYLE(item) && SP_OBJECT_STYLE(item)->filter.href->getObject()) 
+         !(!transform.is_translation() && SP_OBJECT_STYLE(item) && SP_OBJECT_STYLE(item)->getFilter()) 
              // the object does not have a filter, or the transform is translation (which is supposed to not affect filters)
         ) {
         transform_attr = ((SPItemClass *) G_OBJECT_GET_CLASS(item))->set_transform(item, transform);
index 46b544382a751c3ad8335747e4dd9ac96ea42dbd..699d950541e723858dc4d5cfc0f44c2e5da1b3ef 100644 (file)
@@ -397,7 +397,7 @@ static void
 sp_style_filter_ref_modified(SPObject *obj, guint flags, SPStyle *style)
 {
     SPFilter *filter=static_cast<SPFilter *>(obj);
-    if (style->filter.href->getObject() == filter)
+    if (style->getFilter() == filter)
     {
         if (style->object) {
             style->object->requestModified(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
index df2ba127f6b374ccdb401fb4155afcfe10a0ffd4..0aec2151dd4101377ef116c6c1d759e37be2c973 100644 (file)
@@ -17,6 +17,7 @@
 #include "forward.h"
 #include "sp-marker-loc.h"
 #include "sp-filter.h"
+#include "sp-filter-reference.h"
 
 #include <sigc++/connection.h>
 
@@ -169,8 +170,6 @@ struct SPIPaint {
     } value;
 };
 
-struct SPFilterReference;
-
 /// Filter type internal to SPStyle
 struct SPIFilter {
     unsigned set : 1;
@@ -360,6 +359,8 @@ struct SPStyle {
 
     sigc::connection stroke_release_connection;
     sigc::connection stroke_modified_connection;
+
+    SPObject *getFilter() {if (filter.href) return filter.href->getObject(); else return NULL;}
 };
 
 SPStyle *sp_style_new(SPDocument *document);