diff options
Diffstat (limited to 'src/sp-object-group.cpp')
| -rw-r--r-- | src/sp-object-group.cpp | 177 |
1 files changed, 85 insertions, 92 deletions
diff --git a/src/sp-object-group.cpp b/src/sp-object-group.cpp index 1d5c04339..001d7898f 100644 --- a/src/sp-object-group.cpp +++ b/src/sp-object-group.cpp @@ -1,10 +1,10 @@ -#define __SP_OBJECTGROUP_C__ - /* * Abstract base class for non-item groups * * Authors: * Lauris Kaplinski <lauris@kaplinski.com> + * Jon A. Cruz <jon@joncruz.org> + * Abhishek Sharma * * Copyright (C) 1999-2003 Authors * Copyright (C) 2001-2002 Ximian, Inc. @@ -16,120 +16,113 @@ #include "xml/repr.h" #include "document.h" -static void sp_objectgroup_class_init (SPObjectGroupClass *klass); -static void sp_objectgroup_init (SPObjectGroup *objectgroup); - -static void sp_objectgroup_child_added (SPObject * object, Inkscape::XML::Node * child, Inkscape::XML::Node * ref); -static void sp_objectgroup_remove_child (SPObject * object, Inkscape::XML::Node * child); -static void sp_objectgroup_order_changed (SPObject * object, Inkscape::XML::Node * child, Inkscape::XML::Node * old_ref, Inkscape::XML::Node * new_ref); -static Inkscape::XML::Node *sp_objectgroup_write (SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); - -static SPObjectClass *parent_class; +SPObjectClass * SPObjectGroupClass::static_parent_class = 0; -GType -sp_objectgroup_get_type (void) +GType SPObjectGroup::sp_objectgroup_get_type(void) { - static GType objectgroup_type = 0; - if (!objectgroup_type) { - GTypeInfo objectgroup_info = { - sizeof (SPObjectGroupClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) sp_objectgroup_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (SPObjectGroup), - 16, /* n_preallocs */ - (GInstanceInitFunc) sp_objectgroup_init, - NULL, /* value_table */ - }; - objectgroup_type = g_type_register_static (SP_TYPE_OBJECT, "SPObjectGroup", &objectgroup_info, (GTypeFlags)0); - } - return objectgroup_type; + static GType objectgroup_type = 0; + if (!objectgroup_type) { + GTypeInfo objectgroup_info = { + sizeof(SPObjectGroupClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) SPObjectGroupClass::sp_objectgroup_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(SPObjectGroup), + 16, /* n_preallocs */ + (GInstanceInitFunc) init, + NULL, /* value_table */ + }; + objectgroup_type = g_type_register_static(SP_TYPE_OBJECT, "SPObjectGroup", &objectgroup_info, (GTypeFlags)0); + } + return objectgroup_type; } -static void -sp_objectgroup_class_init (SPObjectGroupClass *klass) +void SPObjectGroupClass::sp_objectgroup_class_init(SPObjectGroupClass *klass) { - GObjectClass * object_class; - SPObjectClass * sp_object_class; + GObjectClass * object_class = (GObjectClass *) klass; + SPObjectClass * sp_object_class = (SPObjectClass *) klass; - object_class = (GObjectClass *) klass; - sp_object_class = (SPObjectClass *) klass; + static_parent_class = (SPObjectClass *)g_type_class_ref(SP_TYPE_OBJECT); - parent_class = (SPObjectClass *)g_type_class_ref (SP_TYPE_OBJECT); - - sp_object_class->child_added = sp_objectgroup_child_added; - sp_object_class->remove_child = sp_objectgroup_remove_child; - sp_object_class->order_changed = sp_objectgroup_order_changed; - sp_object_class->write = sp_objectgroup_write; + sp_object_class->child_added = SPObjectGroup::childAdded; + sp_object_class->remove_child = SPObjectGroup::removeChild; + sp_object_class->order_changed = SPObjectGroup::orderChanged; + sp_object_class->write = SPObjectGroup::write; } -static void -sp_objectgroup_init (SPObjectGroup */*objectgroup*/) +void SPObjectGroup::init(SPObjectGroup * /*objectgroup*/) { } -static void -sp_objectgroup_child_added (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) +void SPObjectGroup::childAdded(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { - if (((SPObjectClass *) (parent_class))->child_added) - (* ((SPObjectClass *) (parent_class))->child_added) (object, child, ref); + if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->child_added) { + (* ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->child_added)(object, child, ref); + } - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + object->requestModified(SP_OBJECT_MODIFIED_FLAG); } -static void -sp_objectgroup_remove_child (SPObject *object, Inkscape::XML::Node *child) +void SPObjectGroup::removeChild(SPObject *object, Inkscape::XML::Node *child) { - if (((SPObjectClass *) (parent_class))->remove_child) - (* ((SPObjectClass *) (parent_class))->remove_child) (object, child); + if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->remove_child) { + (* ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->remove_child)(object, child); + } - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + object->requestModified(SP_OBJECT_MODIFIED_FLAG); } -static void -sp_objectgroup_order_changed (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref) +void SPObjectGroup::orderChanged(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref) { - if (((SPObjectClass *) (parent_class))->order_changed) - (* ((SPObjectClass *) (parent_class))->order_changed) (object, child, old_ref, new_ref); + if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->order_changed) { + (* ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->order_changed)(object, child, old_ref, new_ref); + } - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + object->requestModified(SP_OBJECT_MODIFIED_FLAG); } -static Inkscape::XML::Node * -sp_objectgroup_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) +Inkscape::XML::Node *SPObjectGroup::write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { - SPObjectGroup *group; - SPObject *child; - Inkscape::XML::Node *crepr; - - group = SP_OBJECTGROUP (object); - - if (flags & SP_OBJECT_WRITE_BUILD) { - GSList *l; - if (!repr) { - repr = xml_doc->createElement("svg:g"); - } - l = NULL; - for ( child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) { - crepr = child->updateRepr(xml_doc, NULL, flags); - if (crepr) l = g_slist_prepend (l, crepr); - } - while (l) { - repr->addChild((Inkscape::XML::Node *) l->data, NULL); - Inkscape::GC::release((Inkscape::XML::Node *) l->data); - l = g_slist_remove (l, l->data); - } - } else { - for ( child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) { - child->updateRepr(flags); - } - } - - if (((SPObjectClass *) (parent_class))->write) - ((SPObjectClass *) (parent_class))->write (object, xml_doc, repr, flags); - - return repr; + SP_OBJECTGROUP(object); // Ensure we have the right type of SPObject + + if (flags & SP_OBJECT_WRITE_BUILD) { + if (!repr) { + repr = xml_doc->createElement("svg:g"); + } + GSList *l = 0; + for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) { + Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + if (crepr) { + l = g_slist_prepend(l, crepr); + } + } + while (l) { + repr->addChild((Inkscape::XML::Node *) l->data, NULL); + Inkscape::GC::release((Inkscape::XML::Node *) l->data); + l = g_slist_remove(l, l->data); + } + } else { + for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) { + child->updateRepr(flags); + } + } + + if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->write) { + ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->write(object, xml_doc, repr, flags); + } + + return repr; } +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : |
