From: buliabyak Date: Mon, 12 Mar 2007 03:26:58 +0000 (+0000) Subject: move style reading/writing from SPItem up to SPObject X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=3530a4d5ba658cb6cea2bbf5bc909f988ba2cbf1;p=inkscape.git move style reading/writing from SPItem up to SPObject --- diff --git a/src/sp-item.cpp b/src/sp-item.cpp index 486e00d16..90781d37b 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -159,8 +159,6 @@ void SPItem::init() { sigc::slot2 sl2=sigc::bind(sigc::ptr_fun(mask_ref_changed), this); _mask_ref_connection = cs2.connect(sl2); - if (!this->style) this->style = sp_style_new_from_object(this); - this->avoidRef = new SPAvoidRef(this); new (&this->_transformed_signal) sigc::signal(); @@ -486,10 +484,6 @@ sp_item_set(SPObject *object, unsigned key, gchar const *value) nr_arena_item_set_sensitive(v->arenaitem, item->sensitive); } break; - case SP_ATTR_STYLE: - sp_style_read_from_object(object->style, object); - object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG); - break; case SP_ATTR_CONNECTOR_AVOID: item->avoidRef->setAvoid(value); break; @@ -640,38 +634,6 @@ sp_item_write(SPObject *const object, Inkscape::XML::Node *repr, guint flags) repr->setAttribute("transform", c); g_free(c); - SPStyle const *const obj_style = SP_OBJECT_STYLE(object); - if (obj_style) { - gchar *s = sp_style_write_string(obj_style, SP_STYLE_FLAG_IFSET); - repr->setAttribute("style", ( *s ? s : NULL )); - g_free(s); - } else { - /** \todo I'm not sure what to do in this case. Bug #1165868 - * suggests that it can arise, but the submitter doesn't know - * how to do so reliably. The main two options are either - * leave repr's style attribute unchanged, or explicitly clear it. - * Must also consider what to do with property attributes for - * the element; see below. - */ - char const *style_str = repr->attribute("style"); - if (!style_str) { - style_str = "NULL"; - } - g_warning("Item's style is NULL; repr style attribute is %s", style_str); - } - - /** \note We treat object->style as authoritative. Its effects have - * been written to the style attribute above; any properties that are - * unset we take to be deliberately unset (e.g. so that clones can - * override the property). - * - * Note that the below has an undesirable consequence of changing the - * appearance on renderers that lack CSS support (e.g. SVG tiny); - * possibly we should write property attributes instead of a style - * attribute. - */ - sp_style_unset_property_attrs (object); - if (flags & SP_OBJECT_WRITE_EXT) { repr->setAttribute("sodipodi:insensitive", ( item->sensitive ? NULL : "true" )); if (item->transform_center_x != 0) diff --git a/src/sp-object.cpp b/src/sp-object.cpp index 9b6c24917..b97aa4513 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -173,7 +173,8 @@ sp_object_init(SPObject *object) object->parent = object->next = NULL; object->repr = NULL; object->id = NULL; - object->style = NULL; + + object->style = sp_style_new_from_object(object); object->_collection_policy = SPObject::COLLECT_WITH_PARENT; @@ -999,6 +1000,10 @@ sp_object_private_set(SPObject *object, unsigned int key, gchar const *value) } object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG); break; + case SP_ATTR_STYLE: + sp_style_read_from_object(object->style, object); + object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG); + break; default: break; } @@ -1111,6 +1116,38 @@ sp_object_private_write(SPObject *object, Inkscape::XML::Node *repr, guint flags } else { repr->setAttribute("inkscape:collect", NULL); } + + SPStyle const *const obj_style = SP_OBJECT_STYLE(object); + if (obj_style) { + gchar *s = sp_style_write_string(obj_style, SP_STYLE_FLAG_IFSET); + repr->setAttribute("style", ( *s ? s : NULL )); + g_free(s); + } else { + /** \todo I'm not sure what to do in this case. Bug #1165868 + * suggests that it can arise, but the submitter doesn't know + * how to do so reliably. The main two options are either + * leave repr's style attribute unchanged, or explicitly clear it. + * Must also consider what to do with property attributes for + * the element; see below. + */ + char const *style_str = repr->attribute("style"); + if (!style_str) { + style_str = "NULL"; + } + g_warning("Item's style is NULL; repr style attribute is %s", style_str); + } + + /** \note We treat object->style as authoritative. Its effects have + * been written to the style attribute above; any properties that are + * unset we take to be deliberately unset (e.g. so that clones can + * override the property). + * + * Note that the below has an undesirable consequence of changing the + * appearance on renderers that lack CSS support (e.g. SVG tiny); + * possibly we should write property attributes instead of a style + * attribute. + */ + sp_style_unset_property_attrs (object); } return repr;