[librsvg: 69/95] rsvg_filter_set_atts(): Parse attributes with the PHF



commit 893e47eda3a6ea0bb46e0117673c228fdd9fca21
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Feb 21 15:07:06 2018 -0600

    rsvg_filter_set_atts(): Parse attributes with the PHF

 rsvg-attributes.h |  2 +-
 rsvg-filter.c     | 61 ++++++++++++++++++++++++++++++++++++++-----------------
 2 files changed, 43 insertions(+), 20 deletions(-)
---
diff --git a/rsvg-attributes.h b/rsvg-attributes.h
index da31a16c..d7cf6031 100644
--- a/rsvg-attributes.h
+++ b/rsvg-attributes.h
@@ -38,7 +38,7 @@ typedef enum {
     RSVG_ATTRIBUTE_FILL_OPACITY,
     RSVG_ATTRIBUTE_FILL_RULE,
     RSVG_ATTRIBUTE_FILTER,
-    RSVG_ATTRIBUTE_FILTERUNITS,
+    RSVG_ATTRIBUTE_FILTER_UNITS,
     RSVG_ATTRIBUTE_FLOOD_COLOR,
     RSVG_ATTRIBUTE_FLOOD_OPACITY,
     RSVG_ATTRIBUTE_FONT_FAMILY,
diff --git a/rsvg-filter.c b/rsvg-filter.c
index 964f4d2c..077503be 100644
--- a/rsvg-filter.c
+++ b/rsvg-filter.c
@@ -810,28 +810,51 @@ static void
 rsvg_filter_set_atts (RsvgNode *node, gpointer impl, RsvgHandle *handle, RsvgPropertyBag atts)
 {
     RsvgFilter *filter = impl;
+    RsvgPropertyBagIter *iter;
+    const char *key;
+    RsvgAttribute attr;
     const char *value;
 
-    if ((value = rsvg_property_bag_lookup (atts, "filterUnits"))) {
-        if (!strcmp (value, "userSpaceOnUse"))
-            filter->filterunits = userSpaceOnUse;
-        else
-            filter->filterunits = objectBoundingBox;
-    }
-    if ((value = rsvg_property_bag_lookup (atts, "primitiveUnits"))) {
-        if (!strcmp (value, "objectBoundingBox"))
-            filter->primitiveunits = objectBoundingBox;
-        else
-            filter->primitiveunits = userSpaceOnUse;
+    iter = rsvg_property_bag_iter_begin (atts);
+
+    while (rsvg_property_bag_iter_next (iter, &key, &attr, &value)) {
+        switch (attr) {
+        case RSVG_ATTRIBUTE_FILTER_UNITS:
+            if (!strcmp (value, "userSpaceOnUse"))
+                filter->filterunits = userSpaceOnUse;
+            else
+                filter->filterunits = objectBoundingBox;
+            break;
+
+        case RSVG_ATTRIBUTE_PRIMITIVE_UNITS:
+            if (!strcmp (value, "objectBoundingBox"))
+                filter->primitiveunits = objectBoundingBox;
+            else
+                filter->primitiveunits = userSpaceOnUse;
+            break;
+
+        case RSVG_ATTRIBUTE_X:
+            filter->x = rsvg_length_parse (value, LENGTH_DIR_HORIZONTAL);
+            break;
+
+        case RSVG_ATTRIBUTE_Y:
+            filter->y = rsvg_length_parse (value, LENGTH_DIR_VERTICAL);
+            break;
+
+        case RSVG_ATTRIBUTE_WIDTH:
+            filter->width = rsvg_length_parse (value, LENGTH_DIR_HORIZONTAL);
+            break;
+
+        case RSVG_ATTRIBUTE_HEIGHT:
+            filter->height = rsvg_length_parse (value, LENGTH_DIR_VERTICAL);
+            break;
+
+        default:
+            break;
+        }
     }
-    if ((value = rsvg_property_bag_lookup (atts, "x")))
-        filter->x = rsvg_length_parse (value, LENGTH_DIR_HORIZONTAL);
-    if ((value = rsvg_property_bag_lookup (atts, "y")))
-        filter->y = rsvg_length_parse (value, LENGTH_DIR_VERTICAL);
-    if ((value = rsvg_property_bag_lookup (atts, "width")))
-        filter->width = rsvg_length_parse (value, LENGTH_DIR_HORIZONTAL);
-    if ((value = rsvg_property_bag_lookup (atts, "height")))
-        filter->height = rsvg_length_parse (value, LENGTH_DIR_VERTICAL);
+
+    rsvg_property_bag_iter_end (iter);
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]