summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2012-08-21 12:45:01 +0000
committerMarkus Engel <markus.engel@tum.de>2012-08-21 12:45:01 +0000
commit6a1a65169de6998172eeac7d2b70536997797f99 (patch)
tree0ab76214afdaef1c2377699e038affa612c56f15 /src
parentFixed some virtual function calls in SPItem and SPUse that led to crashes as ... (diff)
downloadinkscape-6a1a65169de6998172eeac7d2b70536997797f99.tar.gz
inkscape-6a1a65169de6998172eeac7d2b70536997797f99.zip
Added "virtual pad" to SPObjectGroup.
(bzr r11608.1.37)
Diffstat (limited to 'src')
-rw-r--r--src/sp-object-group.cpp63
-rw-r--r--src/sp-object-group.h23
2 files changed, 66 insertions, 20 deletions
diff --git a/src/sp-object-group.cpp b/src/sp-object-group.cpp
index 65fbc0295..de5d0b612 100644
--- a/src/sp-object-group.cpp
+++ b/src/sp-object-group.cpp
@@ -52,40 +52,60 @@ void SPObjectGroupClass::sp_objectgroup_class_init(SPObjectGroupClass *klass)
sp_object_class->write = SPObjectGroup::write;
}
-void SPObjectGroup::init(SPObjectGroup * /*objectgroup*/)
+CObjectGroup::CObjectGroup(SPObjectGroup* gr) : CObject(gr) {
+ this->spobjectgroup = gr;
+}
+
+CObjectGroup::~CObjectGroup() {
+}
+
+void SPObjectGroup::init(SPObjectGroup * objectgroup)
{
+ objectgroup->cobjectgroup = new CObjectGroup(objectgroup);
+ objectgroup->cobject = objectgroup->cobjectgroup;
+}
+
+void CObjectGroup::onChildAdded(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) {
+ SPObjectGroup* object = this->spobjectgroup;
+
+ CObject::onChildAdded(child, ref);
+
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
void SPObjectGroup::childAdded(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
{
- if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->child_added) {
- (* ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->child_added)(object, child, ref);
- }
+ ((SPObjectGroup*)object)->cobjectgroup->onChildAdded(child, ref);
+}
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+void CObjectGroup::onRemoveChild(Inkscape::XML::Node *child) {
+ SPObjectGroup* object = this->spobjectgroup;
+
+ CObject::onRemoveChild(child);
+
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
void SPObjectGroup::removeChild(SPObject *object, Inkscape::XML::Node *child)
{
- if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->remove_child) {
- (* ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->remove_child)(object, child);
- }
+ ((SPObjectGroup*)object)->cobjectgroup->onRemoveChild(child);
+}
+
+void CObjectGroup::onOrderChanged(Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref) {
+ SPObjectGroup* object = this->spobjectgroup;
+
+ CObject::onOrderChanged(child, old_ref, new_ref);
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
void SPObjectGroup::orderChanged(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *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);
+ ((SPObjectGroup*)object)->cobjectgroup->onOrderChanged(child, old_ref, new_ref);
}
-Inkscape::XML::Node *SPObjectGroup::write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
-{
- SP_OBJECTGROUP(object); // Ensure we have the right type of SPObject
+Inkscape::XML::Node *CObjectGroup::onWrite(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) {
+ SPObjectGroup* object = this->spobjectgroup;
if (flags & SP_OBJECT_WRITE_BUILD) {
if (!repr) {
@@ -109,13 +129,16 @@ Inkscape::XML::Node *SPObjectGroup::write(SPObject *object, Inkscape::XML::Docum
}
}
- if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->write) {
- ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->write(object, xml_doc, repr, flags);
- }
+ CObject::onWrite(xml_doc, repr, flags);
return repr;
}
+Inkscape::XML::Node *SPObjectGroup::write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+{
+ return ((SPObjectGroup*)object)->cobjectgroup->onWrite(xml_doc, repr, flags);
+}
+
/*
Local Variables:
mode:c++
diff --git a/src/sp-object-group.h b/src/sp-object-group.h
index a666a316a..be8a9225e 100644
--- a/src/sp-object-group.h
+++ b/src/sp-object-group.h
@@ -22,8 +22,13 @@
#define SP_IS_OBJECTGROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_OBJECTGROUP))
#define SP_IS_OBJECTGROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_OBJECTGROUP))
+class CObjectGroup;
+
class SPObjectGroup : public SPObject {
public:
+ CObjectGroup* cobjectgroup;
+
+
static GType sp_objectgroup_get_type(void);
private:
@@ -48,6 +53,24 @@ private:
friend class SPObjectGroup;
};
+
+class CObjectGroup : public CObject {
+public:
+ CObjectGroup(SPObjectGroup* gr);
+ virtual ~CObjectGroup();
+
+ virtual void onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref);
+ virtual void onRemoveChild(Inkscape::XML::Node* child);
+
+ virtual void onOrderChanged(Inkscape::XML::Node* child, Inkscape::XML::Node* old, Inkscape::XML::Node* new_repr);
+
+ virtual Inkscape::XML::Node* onWrite(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags);
+
+protected:
+ SPObjectGroup* spobjectgroup;
+};
+
+
#endif // SEEN_SP_OBJECTGROUP_H
/*
Local Variables: