[librsvg: 69/95] rsvg_filter_set_atts(): Parse attributes with the PHF
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 69/95] rsvg_filter_set_atts(): Parse attributes with the PHF
- Date: Thu, 22 Feb 2018 03:18:56 +0000 (UTC)
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]