X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsp-switch.cpp;h=19c014b9b50e76c46168158a2f3eda7b8bcf34ce;hb=8a2e76b7021b9b960d7c30801a1a14461d9b5939;hp=64aa868ccd1f39611b395fad99bc3eb8ade5729b;hpb=35e0418c921e7057987f57ba30ba95ec5e03c9e5;p=inkscape.git diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index 64aa868cc..19c014b9b 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -1,10 +1,11 @@ -#define __SP_SWITCH_CPP__ - /* * SVG implementation * * Authors: * Andrius R. + * MenTaLguY + * Jon A. Cruz + * Abhishek Sharma * * Copyright (C) 2006 authors * @@ -15,14 +16,15 @@ # include "config.h" #endif -#if defined(WIN32) || defined(__APPLE__) -# include -#endif +#include #include "sp-switch.h" #include "display/nr-arena-group.h" #include "conditions.h" +#include +#include + static void sp_switch_class_init (SPSwitchClass *klass); static void sp_switch_init (SPSwitch *group); @@ -62,7 +64,7 @@ static void sp_switch_init (SPSwitch *group) group->group = new CSwitch(group); } -CSwitch::CSwitch(SPGroup *group) : CGroup(group), _cached_item(NULL), _release_handler_id(0) { +CSwitch::CSwitch(SPGroup *group) : CGroup(group), _cached_item(NULL) { } CSwitch::~CSwitch() { @@ -70,16 +72,18 @@ CSwitch::~CSwitch() { } SPObject *CSwitch::_evaluateFirst() { - for (SPObject *child = sp_object_first_child(_group) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) { - if (sp_item_evaluate(SP_ITEM(child))) - return child; + SPObject *first = 0; + for (SPObject *child = _group->firstChild() ; child && !first ; child = child->getNext() ) { + if (SP_IS_ITEM(child) && sp_item_evaluate(SP_ITEM(child))) { + first = child; + } } - return NULL; + return first; } -GSList *CSwitch::_childList(bool add_ref, Action action) { - if ( ActionGeneral != action ) { - return CGroup::_childList(add_ref, action); +GSList *CSwitch::_childList(bool add_ref, SPObject::Action action) { + if ( action != SPObject::ActionGeneral ) { + return _group->childList(add_ref, action); } SPObject *child = _evaluateFirst(); @@ -113,7 +117,7 @@ void CSwitch::onOrderChanged (Inkscape::XML::Node *, Inkscape::XML::Node *, Inks _reevaluate(); } -void CSwitch::_reevaluate(bool add_to_arena) { +void CSwitch::_reevaluate(bool /*add_to_arena*/) { SPObject *evaluated_child = _evaluateFirst(); if (!evaluated_child || _cached_item == evaluated_child) { return; @@ -122,7 +126,7 @@ void CSwitch::_reevaluate(bool add_to_arena) { _releaseLastItem(_cached_item); SPItem * child; - for ( GSList *l = _childList(false, ActionShow); + for ( GSList *l = _childList(false, SPObject::ActionShow); NULL != l ; l = g_slist_remove (l, l->data)) { SPObject *o = SP_OBJECT (l->data); @@ -135,10 +139,7 @@ void CSwitch::_reevaluate(bool add_to_arena) { } _cached_item = evaluated_child; - _release_handler_id = g_signal_connect( - G_OBJECT(evaluated_child), "release", - G_CALLBACK(&CSwitch::_releaseItem), - this); + _release_connection = evaluated_child->connectRelease(sigc::bind(sigc::ptr_fun(&CSwitch::_releaseItem), this)); _group->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG); } @@ -153,8 +154,7 @@ void CSwitch::_releaseLastItem(SPObject *obj) if (NULL == _cached_item || _cached_item != obj) return; - g_signal_handler_disconnect(G_OBJECT(_cached_item), _release_handler_id); - _release_handler_id = 0; + _release_connection.disconnect(); _cached_item = NULL; } @@ -164,19 +164,29 @@ void CSwitch::_showChildren (NRArena *arena, NRArenaItem *ai, unsigned int key, NRArenaItem *ac = NULL; NRArenaItem *ar = NULL; SPItem * child; - GSList *l = _childList(false, ActionShow); + GSList *l = _childList(false, SPObject::ActionShow); while (l) { SPObject *o = SP_OBJECT (l->data); if (SP_IS_ITEM (o)) { child = SP_ITEM (o); child->setEvaluated(o == evaluated_child); - ac = sp_item_invoke_show (child, arena, key, flags); + ac = child->invoke_show (arena, key, flags); if (ac) { nr_arena_item_add_child (ai, ac, ar); ar = ac; - nr_arena_item_unref (ac); } } l = g_slist_remove (l, o); } } + +/* + 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 :