From 72f9ed8e6a94b65a3fbc9582179e6e72330ff144 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 19 Aug 2012 01:40:03 +0200 Subject: Added "virtual pad" to SPGroup and SPSwitch. There was some weird try by someone else. SPGroup should work as expected, SPSwitch may still be buggy. (bzr r11608.1.16) --- src/sp-switch.cpp | 67 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 32 deletions(-) (limited to 'src/sp-switch.cpp') diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index 500e43c9c..2c98c54fc 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -30,7 +30,7 @@ static void sp_switch_init (SPSwitch *group); static SPGroupClass * parent_class; -GType CSwitch::getType (void) +GType SPSwitch::getType (void) { static GType switch_type = 0; if (!switch_type) { @@ -56,24 +56,27 @@ sp_switch_class_init (SPSwitchClass *) { parent_class = (SPGroupClass *)g_type_class_ref (SP_TYPE_GROUP); } -static void sp_switch_init (SPSwitch *group) -{ - if (group->group) - delete group->group; - - group->group = new CSwitch(group); +CSwitch::CSwitch(SPSwitch* sw) : CGroup(sw) { + this->spswitch = sw; } -CSwitch::CSwitch(SPGroup *group) : CGroup(group), _cached_item(NULL) { +CSwitch::~CSwitch() { } -CSwitch::~CSwitch() { - _releaseLastItem(_cached_item); +static void sp_switch_init (SPSwitch *sw) +{ + sw->cswitch = new CSwitch(sw); + sw->cgroup = sw->cswitch; + sw->clpeitem = sw->cswitch; + sw->citem = sw->cswitch; + sw->cobject = sw->cswitch; + + sw->_cached_item = 0; } -SPObject *CSwitch::_evaluateFirst() { +SPObject *SPSwitch::_evaluateFirst() { SPObject *first = 0; - for (SPObject *child = _group->firstChild() ; child && !first ; child = child->getNext() ) { + for (SPObject *child = this->firstChild() ; child && !first ; child = child->getNext() ) { if (SP_IS_ITEM(child) && sp_item_evaluate(SP_ITEM(child))) { first = child; } @@ -81,9 +84,9 @@ SPObject *CSwitch::_evaluateFirst() { return first; } -GSList *CSwitch::_childList(bool add_ref, SPObject::Action action) { +GSList *SPSwitch::_childList(bool add_ref, SPObject::Action action) { if ( action != SPObject::ActionGeneral ) { - return _group->childList(add_ref, action); + return this->childList(add_ref, action); } SPObject *child = _evaluateFirst(); @@ -96,28 +99,28 @@ GSList *CSwitch::_childList(bool add_ref, SPObject::Action action) { return g_slist_prepend (NULL, child); } -gchar *CSwitch::getDescription() { - gint len = getItemCount(); +gchar *CSwitch::onDescription() { + gint len = this->spgroup->getItemCount(); return g_strdup_printf( ngettext("Conditional group of %d object", "Conditional group of %d objects", len), len); } -void CSwitch::onChildAdded(Inkscape::XML::Node *) { - _reevaluate(true); +void CSwitch::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { + this->spswitch->_reevaluate(true); } -void CSwitch::onChildRemoved(Inkscape::XML::Node *) { - _reevaluate(); +void CSwitch::onRemoveChild(Inkscape::XML::Node *) { + this->spswitch->_reevaluate(); } void CSwitch::onOrderChanged (Inkscape::XML::Node *, Inkscape::XML::Node *, Inkscape::XML::Node *) { - _reevaluate(); + this->spswitch->_reevaluate(); } -void CSwitch::_reevaluate(bool /*add_to_drawing*/) { +void SPSwitch::_reevaluate(bool /*add_to_drawing*/) { SPObject *evaluated_child = _evaluateFirst(); if (!evaluated_child || _cached_item == evaluated_child) { return; @@ -138,29 +141,29 @@ void CSwitch::_reevaluate(bool /*add_to_drawing*/) { } _cached_item = evaluated_child; - _release_connection = evaluated_child->connectRelease(sigc::bind(sigc::ptr_fun(&CSwitch::_releaseItem), this)); + _release_connection = evaluated_child->connectRelease(sigc::bind(sigc::ptr_fun(&SPSwitch::_releaseItem), this)); - _group->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG); + this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG); } -void CSwitch::_releaseItem(SPObject *obj, CSwitch *selection) +void SPSwitch::_releaseItem(SPObject *obj, SPSwitch *selection) { selection->_releaseLastItem(obj); } -void CSwitch::_releaseLastItem(SPObject *obj) +void SPSwitch::_releaseLastItem(SPObject *obj) { - if (NULL == _cached_item || _cached_item != obj) + if (NULL == this->_cached_item || this->_cached_item != obj) return; - _release_connection.disconnect(); - _cached_item = NULL; + this->_release_connection.disconnect(); + this->_cached_item = NULL; } -void CSwitch::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags) { - SPObject *evaluated_child = _evaluateFirst(); +void SPSwitch::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags) { + SPObject *evaluated_child = this->_evaluateFirst(); - GSList *l = _childList(false, SPObject::ActionShow); + GSList *l = this->_childList(false, SPObject::ActionShow); while (l) { SPObject *o = SP_OBJECT (l->data); if (SP_IS_ITEM (o)) { -- cgit v1.2.3 From 7df6616da5ea2debb86838366ddf746841549cdb Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 30 Mar 2013 00:56:13 +0100 Subject: Renamed virtual function names. (bzr r11608.1.57) --- src/sp-switch.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/sp-switch.cpp') diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index f4c5d8a49..f6c267f79 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -77,7 +77,7 @@ GSList *SPSwitch::_childList(bool add_ref, SPObject::Action action) { return g_slist_prepend (NULL, child); } -gchar *CSwitch::onDescription() { +gchar *CSwitch::description() { gint len = this->spgroup->getItemCount(); return g_strdup_printf( ngettext("Conditional group of %d object", @@ -85,15 +85,15 @@ gchar *CSwitch::onDescription() { len), len); } -void CSwitch::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { +void CSwitch::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { this->spswitch->_reevaluate(true); } -void CSwitch::onRemoveChild(Inkscape::XML::Node *) { +void CSwitch::remove_child(Inkscape::XML::Node *) { this->spswitch->_reevaluate(); } -void CSwitch::onOrderChanged (Inkscape::XML::Node *, Inkscape::XML::Node *, Inkscape::XML::Node *) +void CSwitch::order_changed (Inkscape::XML::Node *, Inkscape::XML::Node *, Inkscape::XML::Node *) { this->spswitch->_reevaluate(); } -- cgit v1.2.3 From a5d6e692d661f0bf7648e64e8fcb04588bb8f3ab Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Mon, 1 Apr 2013 00:07:00 +0200 Subject: Prepared exchange of casting macros. (bzr r11608.1.63) --- src/sp-switch.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/sp-switch.cpp') diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index f6c267f79..68f021fda 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -42,6 +42,7 @@ CSwitch::~CSwitch() { static void sp_switch_init (SPSwitch *sw) { sw->cswitch = new CSwitch(sw); + sw->typeHierarchy.insert(typeid(SPSwitch)); delete sw->cgroup; sw->cgroup = sw->cswitch; -- cgit v1.2.3 From 69f3b6f1abb2bb422935d43262e1e99aab359954 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 2 Apr 2013 01:41:30 +0200 Subject: Added constructors to SP classes. (bzr r11608.1.67) --- src/sp-switch.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/sp-switch.cpp') diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index 68f021fda..fe5ae1db5 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -25,7 +25,7 @@ #include #include -G_DEFINE_TYPE(SPSwitch, sp_switch, SP_TYPE_GROUP); +G_DEFINE_TYPE(SPSwitch, sp_switch, G_TYPE_OBJECT); static void sp_switch_class_init (SPSwitchClass *) @@ -39,8 +39,9 @@ CSwitch::CSwitch(SPSwitch* sw) : CGroup(sw) { CSwitch::~CSwitch() { } -static void sp_switch_init (SPSwitch *sw) -{ +SPSwitch::SPSwitch() : SPGroup() { + SPSwitch* sw = this; + sw->cswitch = new CSwitch(sw); sw->typeHierarchy.insert(typeid(SPSwitch)); @@ -53,6 +54,11 @@ static void sp_switch_init (SPSwitch *sw) sw->_cached_item = 0; } +static void sp_switch_init (SPSwitch *sw) +{ + new (sw) SPSwitch(); +} + SPObject *SPSwitch::_evaluateFirst() { SPObject *first = 0; for (SPObject *child = this->firstChild() ; child && !first ; child = child->getNext() ) { -- cgit v1.2.3 From d1af3566872dfff2aeec84859c87f1f8d13f79df Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 2 Apr 2013 19:14:36 +0200 Subject: Registered classes with new factory. Hkern, Vkern and FeFuncX have to be rewritten, as they aren't real classes. (bzr r11608.1.69) --- src/sp-switch.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/sp-switch.cpp') diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index fe5ae1db5..7dd5bf669 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -25,6 +25,16 @@ #include #include +#include "sp-factory.h" + +namespace { + SPObject* createSwitch() { + return new SPSwitch(); + } + + bool switchRegistered = SPFactory::instance().registerObject("svg:switch", createSwitch); +} + G_DEFINE_TYPE(SPSwitch, sp_switch, G_TYPE_OBJECT); static void -- cgit v1.2.3 From dbda80349e95767e390a178cda7c05787fbce1fe Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Fri, 5 Apr 2013 17:51:29 +0200 Subject: Merged Group and subclasses. (bzr r11608.1.77) --- src/sp-switch.cpp | 59 ++++++++++++++++++++----------------------------------- 1 file changed, 21 insertions(+), 38 deletions(-) (limited to 'src/sp-switch.cpp') diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index 7dd5bf669..d36406cef 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -35,47 +35,26 @@ namespace { bool switchRegistered = SPFactory::instance().registerObject("svg:switch", createSwitch); } -G_DEFINE_TYPE(SPSwitch, sp_switch, G_TYPE_OBJECT); - -static void -sp_switch_class_init (SPSwitchClass *) -{ -} - -CSwitch::CSwitch(SPSwitch* sw) : CGroup(sw) { - this->spswitch = sw; -} - -CSwitch::~CSwitch() { -} - SPSwitch::SPSwitch() : SPGroup() { - SPSwitch* sw = this; - - sw->cswitch = new CSwitch(sw); - sw->typeHierarchy.insert(typeid(SPSwitch)); - - delete sw->cgroup; - sw->cgroup = sw->cswitch; - sw->clpeitem = sw->cswitch; - sw->citem = sw->cswitch; - sw->cobject = sw->cswitch; + this->clpeitem = this; + this->citem = this; + this->cobject = this; - sw->_cached_item = 0; + this->_cached_item = 0; } -static void sp_switch_init (SPSwitch *sw) -{ - new (sw) SPSwitch(); +SPSwitch::~SPSwitch() { } SPObject *SPSwitch::_evaluateFirst() { SPObject *first = 0; + for (SPObject *child = this->firstChild() ; child && !first ; child = child->getNext() ) { if (SP_IS_ITEM(child) && sp_item_evaluate(SP_ITEM(child))) { - first = child; - } + first = child; + } } + return first; } @@ -94,25 +73,25 @@ GSList *SPSwitch::_childList(bool add_ref, SPObject::Action action) { return g_slist_prepend (NULL, child); } -gchar *CSwitch::description() { - gint len = this->spgroup->getItemCount(); +gchar *SPSwitch::description() { + gint len = this->getItemCount(); return g_strdup_printf( ngettext("Conditional group of %d object", "Conditional group of %d objects", len), len); } -void CSwitch::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { - this->spswitch->_reevaluate(true); +void SPSwitch::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { + this->_reevaluate(true); } -void CSwitch::remove_child(Inkscape::XML::Node *) { - this->spswitch->_reevaluate(); +void SPSwitch::remove_child(Inkscape::XML::Node *) { + this->_reevaluate(); } -void CSwitch::order_changed (Inkscape::XML::Node *, Inkscape::XML::Node *, Inkscape::XML::Node *) +void SPSwitch::order_changed (Inkscape::XML::Node *, Inkscape::XML::Node *, Inkscape::XML::Node *) { - this->spswitch->_reevaluate(); + this->_reevaluate(); } void SPSwitch::_reevaluate(bool /*add_to_drawing*/) { @@ -159,16 +138,20 @@ void SPSwitch::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem SPObject *evaluated_child = this->_evaluateFirst(); GSList *l = this->_childList(false, SPObject::ActionShow); + while (l) { SPObject *o = SP_OBJECT (l->data); + if (SP_IS_ITEM (o)) { SPItem * child = SP_ITEM(o); child->setEvaluated(o == evaluated_child); Inkscape::DrawingItem *ac = child->invoke_show (drawing, key, flags); + if (ac) { ai->appendChild(ac); } } + l = g_slist_remove (l, o); } } -- cgit v1.2.3 From 19d00efa85cfc42ccae9bd17ef575602f0d22c50 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Fri, 5 Apr 2013 19:42:32 +0200 Subject: Merged more classes. (bzr r11608.1.78) --- src/sp-switch.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/sp-switch.cpp') diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index d36406cef..6aa179d14 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -36,7 +36,6 @@ namespace { } SPSwitch::SPSwitch() : SPGroup() { - this->clpeitem = this; this->citem = this; this->cobject = this; -- cgit v1.2.3 From 8073924aacdda310fb7492750f78d5389b3186af Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Fri, 5 Apr 2013 22:45:01 +0200 Subject: Merged Item. (bzr r11608.1.81) --- src/sp-switch.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/sp-switch.cpp') diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index 6aa179d14..c2515ef66 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -36,7 +36,6 @@ namespace { } SPSwitch::SPSwitch() : SPGroup() { - this->citem = this; this->cobject = this; this->_cached_item = 0; -- cgit v1.2.3 From 27e2102f96a5554bcd5310ec11435d155773b279 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 7 Apr 2013 18:28:22 +0200 Subject: Merge Object and subclasses. Merging of SP- and C-classes complete. (bzr r11608.1.86) --- src/sp-switch.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/sp-switch.cpp') diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index c2515ef66..ec4d9c1f0 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -36,8 +36,6 @@ namespace { } SPSwitch::SPSwitch() : SPGroup() { - this->cobject = this; - this->_cached_item = 0; } -- cgit v1.2.3 From 9fd15efa4ab3302f3f9d7c7473a5377af314021c Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Mon, 8 Apr 2013 21:01:11 +0200 Subject: Reactivated independent reference counting in the SPObject tree. (bzr r11608.1.88) --- src/sp-switch.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/sp-switch.cpp') diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index ec4d9c1f0..cc50a8fef 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -63,8 +63,10 @@ GSList *SPSwitch::_childList(bool add_ref, SPObject::Action action) { if (NULL == child) return NULL; - if (add_ref) - g_object_ref (G_OBJECT (child)); + if (add_ref) { + //g_object_ref (G_OBJECT (child)); + sp_object_ref(child); + } return g_slist_prepend (NULL, child); } -- cgit v1.2.3 From eb3598e7e27619c759ef33bb9ec4ffb8898523de Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Fri, 20 Sep 2013 00:45:16 -0400 Subject: Refactor status-bar text for multiple items, was very broken Fixed bugs: - https://launchpad.net/bugs/1199192 (bzr r12550) --- src/sp-switch.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/sp-switch.cpp') diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index cc50a8fef..c6dcf17e3 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -71,12 +71,14 @@ GSList *SPSwitch::_childList(bool add_ref, SPObject::Action action) { return g_slist_prepend (NULL, child); } +const char *SPSwitch::display_name() { + return _("Conditional Group"); +} + gchar *SPSwitch::description() { gint len = this->getItemCount(); return g_strdup_printf( - ngettext("Conditional group of %d object", - "Conditional group of %d objects", - len), len); + ngettext(_("of %d object"), _("of %d objects"), len), len); } void SPSwitch::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) { -- cgit v1.2.3