From 9abb5e658d005b3ac82afeec13fd59384a8e65eb Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Sun, 5 Jun 2016 23:20:55 +0200 Subject: Added object set (bzr r14954.1.1) --- src/CMakeLists.txt | 4 ++ src/object-set.cpp | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/object-set.h | 58 +++++++++++++++++++++++ src/object.cpp | 50 ++++++++++++++++++++ src/object.h | 76 ++++++++++++++++++++++++++++++ 5 files changed, 321 insertions(+) create mode 100644 src/object-set.cpp create mode 100644 src/object-set.h create mode 100644 src/object.cpp create mode 100644 src/object.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index df25728f4..802a79c4f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -229,7 +229,9 @@ set(inkscape_SRC message-context.cpp message-stack.cpp mod360.cpp + object.cpp object-hierarchy.cpp + object-set.cpp object-snapper.cpp path-chemistry.cpp persp3d-reference.cpp @@ -353,7 +355,9 @@ set(inkscape_SRC mod360-test.h mod360.h number-opt-number.h + object.h object-hierarchy.h + object-set.h object-snapper.h object-test.h path-chemistry.h diff --git a/src/object-set.cpp b/src/object-set.cpp new file mode 100644 index 000000000..f071aa4d6 --- /dev/null +++ b/src/object-set.cpp @@ -0,0 +1,133 @@ +/* + * Multiindex container for selection + * + * Authors: + * Adrian Boguszewski + * + * Copyright (C) 2016 Adrian Boguszewski + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "object-set.h" + +bool ObjectSet::add(Object* object) { + // any ancestor is in the set - do nothing + if (_anyAncestorIsInSet(object)) { + return false; + } + + // check if there is mutual ancestor for some elements, which can replace all of them in the set + Object* o = _getMutualAncestor(object); + + // remove all descendants from the set + _removeDescendantsFromSet(o); + + _add(o); + return true; +} + +bool ObjectSet::remove(Object* object) { + // object is the top of subtree + if (contains(object)) { + _remove(object); + return true; + } + + // any ancestor of object is in the set + if (_anyAncestorIsInSet(object)) { + _removeAncestorsFromSet(object); + return true; + } + + // no object nor any parent in the set + return false; +} + +bool ObjectSet::contains(Object* object) { + return container.get().find(object) != container.get().end(); +} + +void ObjectSet::clear() { + for (auto object: container) { + _remove(object); + } +} + +int ObjectSet::size() { + return container.size(); +} + +bool ObjectSet::_anyAncestorIsInSet(Object *object) { + Object* o = object; + while (o != nullptr) { + if (contains(o)) { + return true; + } + o = o->getParent(); + } + + return false; +} + +void ObjectSet::_removeDescendantsFromSet(Object *object) { + for (auto& child: object->getChildren()) { + if (contains(&child)) { + _remove(&child); + // there is certainly no children of this child in the set + continue; + } + + _removeDescendantsFromSet(&child); + } +} + +void ObjectSet::_remove(Object *object) { + releaseConnections[object].disconnect(); + releaseConnections.erase(object); + container.get().erase(object); +} + +void ObjectSet::_add(Object *object) { + releaseConnections[object] = object->connectRelease(sigc::mem_fun(*this, &ObjectSet::remove)); + container.push_back(object); +} + +Object *ObjectSet::_getMutualAncestor(Object *object) { + Object *o = object; + + bool flag = true; + while (o->getParent() != nullptr) { + for (auto &child: o->getParent()->getChildren()) { + if(&child != o && !contains(&child)) { + flag = false; + break; + } + } + if (!flag) { + break; + } + o = o->getParent(); + } + return o; +} + +void ObjectSet::_removeAncestorsFromSet(Object *object) { + Object* o = object; + while (o->getParent() != nullptr) { + for (auto &child: o->getParent()->getChildren()) { + if (&child != o) { + _add(&child); + } + } + if (contains(o->getParent())) { + _remove(o->getParent()); + break; + } + o = o->getParent(); + } +} + +ObjectSet::~ObjectSet() { + clear(); +} diff --git a/src/object-set.h b/src/object-set.h new file mode 100644 index 000000000..a3962356b --- /dev/null +++ b/src/object-set.h @@ -0,0 +1,58 @@ +/* + * Multiindex container for selection + * + * Authors: + * Adrian Boguszewski + * + * Copyright (C) 2016 Adrian Boguszewski + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifndef INKSCAPE_PROTOTYPE_OBJECTSET_H +#define INKSCAPE_PROTOTYPE_OBJECTSET_H + +#include "object.h" +#include +#include +#include +#include +#include +#include +#include + +struct hashed{}; + +typedef boost::multi_index_container< + Object*, + boost::multi_index::indexed_by< + boost::multi_index::sequenced<>, + boost::multi_index::hashed_unique< + boost::multi_index::tag, + boost::multi_index::identity> + >> multi_index_container; + +class ObjectSet { +public: + ObjectSet() {}; + ~ObjectSet(); + bool add(Object* object); + bool remove(Object* object); + bool contains(Object* object); + void clear(); + int size(); + +private: + void _add(Object* object); + void _remove(Object* object); + bool _anyAncestorIsInSet(Object *object); + void _removeDescendantsFromSet(Object *object); + void _removeAncestorsFromSet(Object *object); + Object *_getMutualAncestor(Object *object); + + multi_index_container container; + std::unordered_map releaseConnections; +}; + + +#endif //INKSCAPE_PROTOTYPE_OBJECTSET_H diff --git a/src/object.cpp b/src/object.cpp new file mode 100644 index 000000000..c05d50b3a --- /dev/null +++ b/src/object.cpp @@ -0,0 +1,50 @@ +/* + * Temporary file + * + * Authors: + * Adrian Boguszewski + * + * Copyright (C) 2016 Adrian Boguszewski + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "object.h" + +Object::Object(std::string name) : name(name), parent(NULL) { } + +Object::~Object() { + // only for this prototype + // call destructor on every child + children.clear_and_dispose(delete_disposer()); + release_signal.emit(this); +} + +const std::string& Object::getName() const { + return name; +} + +Object *Object::getParent() { + return parent; +} + +bool Object::isDescendantOf(Object *o) { + Object* p = parent; + while(p != NULL) { + if (p == o) { + return true; + } + p = p->parent; + } + return false; +} + +void Object::addChild(Object* o) { + o->parent = this; + children.push_back(*o); +} + +sigc::connection Object::connectRelease(sigc::slot slot) { + return release_signal.connect(slot); +} + diff --git a/src/object.h b/src/object.h new file mode 100644 index 000000000..a5ad5692e --- /dev/null +++ b/src/object.h @@ -0,0 +1,76 @@ +/* + * Temporary file + * + * Authors: + * Adrian Boguszewski + * + * Copyright (C) 2016 Adrian Boguszewski + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifndef INKSCAPE_PROTOTYPE_OBJECT_H +#define INKSCAPE_PROTOTYPE_OBJECT_H + +#include +#include +#include +#include + +// this causes some warning, but it's only for this prototype +class Object; +struct delete_disposer +{ + void operator()(Object *delete_this) { + delete delete_this; + } +}; + +class Object { +private: + std::string name; + Object* parent; + + typedef boost::intrusive::list_member_hook< + boost::intrusive::link_mode< + boost::intrusive::auto_unlink + >> list_hook; + list_hook child_hook; + + typedef boost::intrusive::list< + Object, + boost::intrusive::constant_time_size, + boost::intrusive::member_hook< + Object, + list_hook, + &Object::child_hook + >> list; + list children; + + sigc::signal release_signal; + +public: + Object(std::string name); + virtual ~Object(); + + list &getChildren() { + return children; + } + + const std::string &getName() const; + Object * getParent() ; + + sigc::connection connectRelease(sigc::slot slot); + void addChild(Object* o); + bool isDescendantOf(Object* o); + + bool operator==(Object o) { + return name == o.name; + } + + bool operator!=(Object o) { + return name != o.name; + } +}; + +#endif //INKSCAPE_PROTOTYPE_OBJECT_H -- cgit v1.2.3 From 5633812ca77f35e52db62e7b432761e0e59253fe Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 9 Jun 2016 17:19:23 +0200 Subject: Removed Object class and temporary test dependencies (bzr r14954.1.4) --- src/CMakeLists.txt | 2 -- src/object.cpp | 50 ----------------------------------- src/object.h | 76 ------------------------------------------------------ src/sp-flowtext.h | 1 + 4 files changed, 1 insertion(+), 128 deletions(-) delete mode 100644 src/object.cpp delete mode 100644 src/object.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 802a79c4f..92436ea9a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -229,7 +229,6 @@ set(inkscape_SRC message-context.cpp message-stack.cpp mod360.cpp - object.cpp object-hierarchy.cpp object-set.cpp object-snapper.cpp @@ -355,7 +354,6 @@ set(inkscape_SRC mod360-test.h mod360.h number-opt-number.h - object.h object-hierarchy.h object-set.h object-snapper.h diff --git a/src/object.cpp b/src/object.cpp deleted file mode 100644 index c05d50b3a..000000000 --- a/src/object.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Temporary file - * - * Authors: - * Adrian Boguszewski - * - * Copyright (C) 2016 Adrian Boguszewski - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#include "object.h" - -Object::Object(std::string name) : name(name), parent(NULL) { } - -Object::~Object() { - // only for this prototype - // call destructor on every child - children.clear_and_dispose(delete_disposer()); - release_signal.emit(this); -} - -const std::string& Object::getName() const { - return name; -} - -Object *Object::getParent() { - return parent; -} - -bool Object::isDescendantOf(Object *o) { - Object* p = parent; - while(p != NULL) { - if (p == o) { - return true; - } - p = p->parent; - } - return false; -} - -void Object::addChild(Object* o) { - o->parent = this; - children.push_back(*o); -} - -sigc::connection Object::connectRelease(sigc::slot slot) { - return release_signal.connect(slot); -} - diff --git a/src/object.h b/src/object.h deleted file mode 100644 index a5ad5692e..000000000 --- a/src/object.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Temporary file - * - * Authors: - * Adrian Boguszewski - * - * Copyright (C) 2016 Adrian Boguszewski - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#ifndef INKSCAPE_PROTOTYPE_OBJECT_H -#define INKSCAPE_PROTOTYPE_OBJECT_H - -#include -#include -#include -#include - -// this causes some warning, but it's only for this prototype -class Object; -struct delete_disposer -{ - void operator()(Object *delete_this) { - delete delete_this; - } -}; - -class Object { -private: - std::string name; - Object* parent; - - typedef boost::intrusive::list_member_hook< - boost::intrusive::link_mode< - boost::intrusive::auto_unlink - >> list_hook; - list_hook child_hook; - - typedef boost::intrusive::list< - Object, - boost::intrusive::constant_time_size, - boost::intrusive::member_hook< - Object, - list_hook, - &Object::child_hook - >> list; - list children; - - sigc::signal release_signal; - -public: - Object(std::string name); - virtual ~Object(); - - list &getChildren() { - return children; - } - - const std::string &getName() const; - Object * getParent() ; - - sigc::connection connectRelease(sigc::slot slot); - void addChild(Object* o); - bool isDescendantOf(Object* o); - - bool operator==(Object o) { - return name == o.name; - } - - bool operator!=(Object o) { - return name != o.name; - } -}; - -#endif //INKSCAPE_PROTOTYPE_OBJECT_H diff --git a/src/sp-flowtext.h b/src/sp-flowtext.h index 9ee676893..d0b0a19a4 100644 --- a/src/sp-flowtext.h +++ b/src/sp-flowtext.h @@ -8,6 +8,7 @@ #include "libnrtype/Layout-TNG.h" #include "sp-item.h" +#include "desktop.h" #define SP_FLOWTEXT(obj) (dynamic_cast((SPObject*)obj)) #define SP_IS_FLOWTEXT(obj) (dynamic_cast((SPObject*)obj) != NULL) -- cgit v1.2.3 From dfbba183bcd15fca6508da6feecde95c0b4f4c20 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jun 2016 21:54:26 -0500 Subject: Make the relocatable paths relative to the lib install (bzr r14950.1.7) --- src/path-prefix.h | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/path-prefix.h b/src/path-prefix.h index 7f9bcec51..d63fba7fc 100644 --- a/src/path-prefix.h +++ b/src/path-prefix.h @@ -21,28 +21,28 @@ //#endif /* __cplusplus */ #ifdef ENABLE_BINRELOC -# define INKSCAPE_APPICONDIR BR_DATADIR( "/pixmaps" ) -# define INKSCAPE_ATTRRELDIR BR_DATADIR( "/inkscape/attributes" ) -# define INKSCAPE_BINDDIR BR_DATADIR( "/inkscape/bind" ) -# define INKSCAPE_EXAMPLESDIR BR_DATADIR( "/inkscape/examples" ) -# define INKSCAPE_EXTENSIONDIR BR_DATADIR( "/inkscape/extensions" ) -# define INKSCAPE_FILTERDIR BR_DATADIR( "/inkscape/filters" ) -# define INKSCAPE_GRADIENTSDIR BR_DATADIR( "/inkscape/gradients" ) -# define INKSCAPE_KEYSDIR BR_DATADIR( "/inkscape/keys" ) -# define INKSCAPE_PIXMAPDIR BR_DATADIR( "/inkscape/icons" ) -# define INKSCAPE_MARKERSDIR BR_DATADIR( "/inkscape/markers" ) -# define INKSCAPE_PALETTESDIR BR_DATADIR( "/inkscape/palettes" ) -# define INKSCAPE_PATTERNSDIR BR_DATADIR( "/inkscape/patterns" ) -# define INKSCAPE_SCREENSDIR BR_DATADIR( "/inkscape/screens" ) -# define INKSCAPE_SYMBOLSDIR BR_DATADIR( "/inkscape/symbols" ) -# define INKSCAPE_THEMEDIR BR_DATADIR( "/icons" ) -# define INKSCAPE_TUTORIALSDIR BR_DATADIR( "/inkscape/tutorials" ) -# define INKSCAPE_TEMPLATESDIR BR_DATADIR( "/inkscape/templates" ) -# define INKSCAPE_UIDIR BR_DATADIR( "/inkscape/ui" ) +# define INKSCAPE_APPICONDIR BR_DATADIR( "/../share/pixmaps" ) +# define INKSCAPE_ATTRRELDIR BR_DATADIR( "/../share/inkscape/attributes" ) +# define INKSCAPE_BINDDIR BR_DATADIR( "/../share/inkscape/bind" ) +# define INKSCAPE_EXAMPLESDIR BR_DATADIR( "/../share/inkscape/examples" ) +# define INKSCAPE_EXTENSIONDIR BR_DATADIR( "/../share/inkscape/extensions" ) +# define INKSCAPE_FILTERDIR BR_DATADIR( "/../share/inkscape/filters" ) +# define INKSCAPE_GRADIENTSDIR BR_DATADIR( "/../share/inkscape/gradients" ) +# define INKSCAPE_KEYSDIR BR_DATADIR( "/../share/inkscape/keys" ) +# define INKSCAPE_PIXMAPDIR BR_DATADIR( "/../share/inkscape/icons" ) +# define INKSCAPE_MARKERSDIR BR_DATADIR( "/../share/inkscape/markers" ) +# define INKSCAPE_PALETTESDIR BR_DATADIR( "/../share/inkscape/palettes" ) +# define INKSCAPE_PATTERNSDIR BR_DATADIR( "/../share/inkscape/patterns" ) +# define INKSCAPE_SCREENSDIR BR_DATADIR( "/../share/inkscape/screens" ) +# define INKSCAPE_SYMBOLSDIR BR_DATADIR( "/../share/inkscape/symbols" ) +# define INKSCAPE_THEMEDIR BR_DATADIR( "/../share/icons" ) +# define INKSCAPE_TUTORIALSDIR BR_DATADIR( "/../share/inkscape/tutorials" ) +# define INKSCAPE_TEMPLATESDIR BR_DATADIR( "/../share/inkscape/templates" ) +# define INKSCAPE_UIDIR BR_DATADIR( "/../share/inkscape/ui" ) //CREATE V0.1 support -# define CREATE_GRADIENTSDIR BR_DATADIR( "/create/gradients/gimp" ) -# define CREATE_PALETTESDIR BR_DATADIR( "/create/swatches" ) -# define CREATE_PATTERNSDIR BR_DATADIR( "/create/patterns/vector" ) +# define CREATE_GRADIENTSDIR BR_DATADIR( "/../share/create/gradients/gimp" ) +# define CREATE_PALETTESDIR BR_DATADIR( "/../share/create/swatches" ) +# define CREATE_PATTERNSDIR BR_DATADIR( "/../share/create/patterns/vector" ) #else # ifdef WIN32 # define INKSCAPE_APPICONDIR WIN32_DATADIR("pixmaps") -- cgit v1.2.3 From 61343ac879caaf278c1b5e83c5f05d5798affae6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jun 2016 22:37:49 -0500 Subject: Adjust directories to be lib based (bzr r14950.1.8) --- src/path-prefix.h | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/path-prefix.h b/src/path-prefix.h index d63fba7fc..3e226dd97 100644 --- a/src/path-prefix.h +++ b/src/path-prefix.h @@ -21,28 +21,29 @@ //#endif /* __cplusplus */ #ifdef ENABLE_BINRELOC -# define INKSCAPE_APPICONDIR BR_DATADIR( "/../share/pixmaps" ) -# define INKSCAPE_ATTRRELDIR BR_DATADIR( "/../share/inkscape/attributes" ) -# define INKSCAPE_BINDDIR BR_DATADIR( "/../share/inkscape/bind" ) -# define INKSCAPE_EXAMPLESDIR BR_DATADIR( "/../share/inkscape/examples" ) -# define INKSCAPE_EXTENSIONDIR BR_DATADIR( "/../share/inkscape/extensions" ) -# define INKSCAPE_FILTERDIR BR_DATADIR( "/../share/inkscape/filters" ) -# define INKSCAPE_GRADIENTSDIR BR_DATADIR( "/../share/inkscape/gradients" ) -# define INKSCAPE_KEYSDIR BR_DATADIR( "/../share/inkscape/keys" ) -# define INKSCAPE_PIXMAPDIR BR_DATADIR( "/../share/inkscape/icons" ) -# define INKSCAPE_MARKERSDIR BR_DATADIR( "/../share/inkscape/markers" ) -# define INKSCAPE_PALETTESDIR BR_DATADIR( "/../share/inkscape/palettes" ) -# define INKSCAPE_PATTERNSDIR BR_DATADIR( "/../share/inkscape/patterns" ) -# define INKSCAPE_SCREENSDIR BR_DATADIR( "/../share/inkscape/screens" ) -# define INKSCAPE_SYMBOLSDIR BR_DATADIR( "/../share/inkscape/symbols" ) -# define INKSCAPE_THEMEDIR BR_DATADIR( "/../share/icons" ) -# define INKSCAPE_TUTORIALSDIR BR_DATADIR( "/../share/inkscape/tutorials" ) -# define INKSCAPE_TEMPLATESDIR BR_DATADIR( "/../share/inkscape/templates" ) -# define INKSCAPE_UIDIR BR_DATADIR( "/../share/inkscape/ui" ) +# define INKSCAPE_LIBPREFIX "/../.." +# define INKSCAPE_APPICONDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/pixmaps" ) +# define INKSCAPE_ATTRRELDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/attributes" ) +# define INKSCAPE_BINDDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/bind" ) +# define INKSCAPE_EXAMPLESDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/examples" ) +# define INKSCAPE_EXTENSIONDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/extensions" ) +# define INKSCAPE_FILTERDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/filters" ) +# define INKSCAPE_GRADIENTSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/gradients" ) +# define INKSCAPE_KEYSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/keys" ) +# define INKSCAPE_PIXMAPDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/icons" ) +# define INKSCAPE_MARKERSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/markers" ) +# define INKSCAPE_PALETTESDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/palettes" ) +# define INKSCAPE_PATTERNSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/patterns" ) +# define INKSCAPE_SCREENSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/screens" ) +# define INKSCAPE_SYMBOLSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/symbols" ) +# define INKSCAPE_THEMEDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/icons" ) +# define INKSCAPE_TUTORIALSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/tutorials" ) +# define INKSCAPE_TEMPLATESDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/templates" ) +# define INKSCAPE_UIDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/ui" ) //CREATE V0.1 support -# define CREATE_GRADIENTSDIR BR_DATADIR( "/../share/create/gradients/gimp" ) -# define CREATE_PALETTESDIR BR_DATADIR( "/../share/create/swatches" ) -# define CREATE_PATTERNSDIR BR_DATADIR( "/../share/create/patterns/vector" ) +# define CREATE_GRADIENTSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/create/gradients/gimp" ) +# define CREATE_PALETTESDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/create/swatches" ) +# define CREATE_PATTERNSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/create/patterns/vector" ) #else # ifdef WIN32 # define INKSCAPE_APPICONDIR WIN32_DATADIR("pixmaps") -- cgit v1.2.3 From 1a20f71053ab79c1f130ce592a2557a79d03b195 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 21 Jun 2016 08:08:22 -0500 Subject: Adding a comment to explain what we're doing (bzr r14950.1.10) --- src/path-prefix.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/path-prefix.h b/src/path-prefix.h index 3e226dd97..8a39ede84 100644 --- a/src/path-prefix.h +++ b/src/path-prefix.h @@ -21,6 +21,10 @@ //#endif /* __cplusplus */ #ifdef ENABLE_BINRELOC +/* The way that we're building now is with a shared library between Inkscape + and Inkview, and the code will find the path to the library then. But we + don't really want that. This prefix then pulls things out of the lib directory + and back into the root install dir. */ # define INKSCAPE_LIBPREFIX "/../.." # define INKSCAPE_APPICONDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/pixmaps" ) # define INKSCAPE_ATTRRELDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/attributes" ) -- cgit v1.2.3 From 1636c1dd1651780d01759676b194312529f211f7 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Sat, 25 Jun 2016 22:24:26 +0200 Subject: Moved next functions, added namespace, renamed range functions (bzr r14954.1.10) --- src/desktop-style.cpp | 6 +- src/extension/execution-env.cpp | 2 +- src/extension/implementation/implementation.cpp | 2 +- src/extension/implementation/script.cpp | 2 +- src/extension/internal/bitmap/imagemagick.cpp | 4 +- src/extension/internal/bluredge.cpp | 2 +- src/extension/internal/filter/filter.cpp | 2 +- src/extension/internal/grid.cpp | 2 +- src/extension/plugins/grid2/grid.cpp | 2 +- src/gradient-chemistry.cpp | 4 +- src/gradient-drag.cpp | 6 +- src/object-set.cpp | 31 +++++++--- src/object-set.h | 27 +++++++- src/path-chemistry.cpp | 10 +-- src/selcue.cpp | 8 +-- src/selection-chemistry.cpp | 82 ++++++++++++------------- src/selection-describer.cpp | 2 +- src/selection.cpp | 18 +----- src/selection.h | 16 ----- src/seltrans.cpp | 14 ++--- src/snap.cpp | 2 +- src/splivarot.cpp | 10 +-- src/text-chemistry.cpp | 24 ++++---- src/trace/trace.cpp | 2 +- src/ui/clipboard.cpp | 6 +- src/ui/dialog/align-and-distribute.cpp | 16 ++--- src/ui/dialog/clonetiler.cpp | 8 +-- src/ui/dialog/export.cpp | 14 ++--- src/ui/dialog/filter-effects-dialog.cpp | 6 +- src/ui/dialog/find.cpp | 2 +- src/ui/dialog/glyphs.cpp | 4 +- src/ui/dialog/grid-arrange-tab.cpp | 12 ++-- src/ui/dialog/icon-preview.cpp | 2 +- src/ui/dialog/objects.cpp | 2 +- src/ui/dialog/pixelartdialog.cpp | 2 +- src/ui/dialog/polar-arrange-tab.cpp | 2 +- src/ui/dialog/svg-fonts-dialog.cpp | 4 +- src/ui/dialog/swatches.cpp | 2 +- src/ui/dialog/tags.cpp | 4 +- src/ui/dialog/text-edit.cpp | 6 +- src/ui/dialog/transformation.cpp | 14 ++--- src/ui/interface.cpp | 2 +- src/ui/tools/connector-tool.cpp | 2 +- src/ui/tools/eraser-tool.cpp | 4 +- src/ui/tools/gradient-tool.cpp | 14 ++--- src/ui/tools/lpe-tool.cpp | 2 +- src/ui/tools/mesh-tool.cpp | 12 ++-- src/ui/tools/node-tool.cpp | 4 +- src/ui/tools/select-tool.cpp | 2 +- src/ui/tools/spray-tool.cpp | 10 +-- src/ui/tools/tool-base.cpp | 2 +- src/ui/tools/tweak-tool.cpp | 6 +- src/ui/widget/style-subject.cpp | 2 +- src/vanishing-point.cpp | 10 +-- src/widgets/arc-toolbar.cpp | 8 +-- src/widgets/connector-toolbar.cpp | 6 +- src/widgets/fill-style.cpp | 2 +- src/widgets/gradient-toolbar.cpp | 6 +- src/widgets/mesh-toolbar.cpp | 4 +- src/widgets/pencil-toolbar.cpp | 4 +- src/widgets/rect-toolbar.cpp | 4 +- src/widgets/spiral-toolbar.cpp | 4 +- src/widgets/star-toolbar.cpp | 12 ++-- src/widgets/stroke-style.cpp | 6 +- src/widgets/text-toolbar.cpp | 8 +-- 65 files changed, 266 insertions(+), 256 deletions(-) (limited to 'src') diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp index 7f9b46c7d..6fab01f16 100644 --- a/src/desktop-style.cpp +++ b/src/desktop-style.cpp @@ -194,7 +194,7 @@ sp_desktop_set_style(SPDesktop *desktop, SPCSSAttr *css, bool change, bool write sp_repr_css_merge(css_write, css); sp_css_attr_unset_uris(css_write); prefs->mergeStyle("/desktop/style", css_write); - std::vector const itemlist = desktop->selection->itemList(); + std::vector const itemlist = desktop->selection->items(); for (std::vector::const_iterator i = itemlist.begin(); i!= itemlist.end(); ++i) { /* last used styles for 3D box faces are stored separately */ SPObject *obj = *i; @@ -234,7 +234,7 @@ sp_desktop_set_style(SPDesktop *desktop, SPCSSAttr *css, bool change, bool write sp_repr_css_merge(css_no_text, css); css_no_text = sp_css_attr_unset_text(css_no_text); - std::vector const itemlist = desktop->selection->itemList(); + std::vector const itemlist = desktop->selection->items(); for (std::vector::const_iterator i = itemlist.begin(); i!= itemlist.end(); ++i) { SPItem *item = *i; @@ -1917,7 +1917,7 @@ sp_desktop_query_style(SPDesktop *desktop, SPStyle *style, int property) // otherwise, do querying and averaging over selection if (desktop->selection != NULL) { - return sp_desktop_query_style_from_list (desktop->selection->itemList(), style, property); + return sp_desktop_query_style_from_list (desktop->selection->items(), style, property); } return QUERY_STYLE_NOTHING; diff --git a/src/extension/execution-env.cpp b/src/extension/execution-env.cpp index d5c80f26e..2b0183d4b 100644 --- a/src/extension/execution-env.cpp +++ b/src/extension/execution-env.cpp @@ -58,7 +58,7 @@ ExecutionEnv::ExecutionEnv (Effect * effect, Inkscape::UI::View::View * doc, Imp sp_namedview_document_from_window(desktop); if (desktop != NULL) { - std::vector selected = desktop->getSelection()->itemList(); + std::vector selected = desktop->getSelection()->items(); for(std::vector::const_iterator x = selected.begin(); x != selected.end(); ++x){ Glib::ustring selected_id; selected_id = (*x)->getId(); diff --git a/src/extension/implementation/implementation.cpp b/src/extension/implementation/implementation.cpp index 92a8a2833..eb1213a84 100644 --- a/src/extension/implementation/implementation.cpp +++ b/src/extension/implementation/implementation.cpp @@ -46,7 +46,7 @@ Gtk::Widget *Implementation::prefs_effect(Inkscape::Extension::Effect *module, I SPDocument * current_document = view->doc(); - std::vector selected = ((SPDesktop *)view)->getSelection()->itemList(); + std::vector selected = ((SPDesktop *) view)->getSelection()->items(); Inkscape::XML::Node const* first_select = NULL; if (!selected.empty()) { const SPItem * item = selected[0]; diff --git a/src/extension/implementation/script.cpp b/src/extension/implementation/script.cpp index 01323bee2..0acc99aed 100644 --- a/src/extension/implementation/script.cpp +++ b/src/extension/implementation/script.cpp @@ -690,7 +690,7 @@ void Script::effect(Inkscape::Extension::Effect *module, } std::vector selected = - desktop->getSelection()->itemList(); //desktop should not be NULL since doc was checked and desktop is a casted pointer + desktop->getSelection()->items(); //desktop should not be NULL since doc was checked and desktop is a casted pointer for(std::vector::const_iterator x = selected.begin(); x != selected.end(); ++x){ Glib::ustring selected_id; selected_id += "--id="; diff --git a/src/extension/internal/bitmap/imagemagick.cpp b/src/extension/internal/bitmap/imagemagick.cpp index a235dcb0f..707cd763d 100644 --- a/src/extension/internal/bitmap/imagemagick.cpp +++ b/src/extension/internal/bitmap/imagemagick.cpp @@ -65,7 +65,7 @@ ImageMagickDocCache::ImageMagickDocCache(Inkscape::UI::View::View * view) : _imageItems(NULL) { SPDesktop *desktop = (SPDesktop*)view; - const std::vector selectedItemList = desktop->selection->itemList(); + const std::vector selectedItemList = desktop->selection->items(); int selectCount = selectedItemList.size(); // Init the data-holders @@ -235,7 +235,7 @@ ImageMagick::prefs_effect(Inkscape::Extension::Effect *module, Inkscape::UI::Vie { SPDocument * current_document = view->doc(); - std::vector selected = ((SPDesktop *)view)->getSelection()->itemList(); + std::vector selected = ((SPDesktop *) view)->getSelection()->items(); Inkscape::XML::Node * first_select = NULL; if (!selected.empty()) { first_select = (selected.front())->getRepr(); diff --git a/src/extension/internal/bluredge.cpp b/src/extension/internal/bluredge.cpp index 4a04e3c33..6dc788f17 100644 --- a/src/extension/internal/bluredge.cpp +++ b/src/extension/internal/bluredge.cpp @@ -62,7 +62,7 @@ BlurEdge::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View double old_offset = prefs->getDouble("/options/defaultoffsetwidth/value", 1.0, "px"); // TODO need to properly refcount the items, at least - std::vector items(selection->itemList()); + std::vector items(selection->items()); selection->clear(); for(std::vector::iterator item = items.begin(); diff --git a/src/extension/internal/filter/filter.cpp b/src/extension/internal/filter/filter.cpp index 25e89bbf3..acfcaed0e 100644 --- a/src/extension/internal/filter/filter.cpp +++ b/src/extension/internal/filter/filter.cpp @@ -125,7 +125,7 @@ void Filter::effect(Inkscape::Extension::Effect *module, Inkscape::UI::View::Vie Inkscape::Selection * selection = ((SPDesktop *)document)->selection; // TODO need to properly refcount the items, at least - std::vector items(selection->itemList()); + std::vector items(selection->items()); Inkscape::XML::Document * xmldoc = document->doc()->getReprDoc(); Inkscape::XML::Node * defsrepr = document->doc()->getDefs()->getRepr(); diff --git a/src/extension/internal/grid.cpp b/src/extension/internal/grid.cpp index c766bd828..fd1b311a8 100644 --- a/src/extension/internal/grid.cpp +++ b/src/extension/internal/grid.cpp @@ -180,7 +180,7 @@ Grid::prefs_effect(Inkscape::Extension::Effect *module, Inkscape::UI::View::View { SPDocument * current_document = view->doc(); - std::vector selected = ((SPDesktop *)view)->getSelection()->itemList(); + std::vector selected = ((SPDesktop *) view)->getSelection()->items(); Inkscape::XML::Node * first_select = NULL; if (!selected.empty()) { first_select = selected[0]->getRepr(); diff --git a/src/extension/plugins/grid2/grid.cpp b/src/extension/plugins/grid2/grid.cpp index 6880c574d..c938d1ec4 100644 --- a/src/extension/plugins/grid2/grid.cpp +++ b/src/extension/plugins/grid2/grid.cpp @@ -186,7 +186,7 @@ Grid::prefs_effect(Inkscape::Extension::Effect *module, Inkscape::UI::View::View { SPDocument * current_document = view->doc(); - std::vector selected = ((SPDesktop *)view)->getSelection()->itemList(); + std::vector selected = ((SPDesktop *) view)->getSelection()->items(); Inkscape::XML::Node * first_select = NULL; if (!selected.empty()) { first_select = selected[0]->getRepr(); diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp index edeb523d7..698cf5012 100644 --- a/src/gradient-chemistry.cpp +++ b/src/gradient-chemistry.cpp @@ -1570,7 +1570,7 @@ void sp_gradient_invert_selected_gradients(SPDesktop *desktop, Inkscape::PaintTa { Inkscape::Selection *selection = desktop->getSelection(); - const std::vector list=selection->itemList(); + const std::vector list= selection->items(); for (std::vector::const_iterator i = list.begin(); i != list.end(); ++i) { sp_item_gradient_invert_vector_color(*i, fill_or_stroke); } @@ -1595,7 +1595,7 @@ void sp_gradient_reverse_selected_gradients(SPDesktop *desktop) if (drag && !drag->selected.empty()) { drag->selected_reverse_vector(); } else { // If no drag or no dragger selected, act on selection (both fill and stroke gradients) - const std::vector list=selection->itemList(); + const std::vector list= selection->items(); for (std::vector::const_iterator i = list.begin(); i != list.end(); ++i) { sp_item_gradient_reverse_vector(*i, Inkscape::FOR_FILL); sp_item_gradient_reverse_vector(*i, Inkscape::FOR_STROKE); diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index 613dc2fc1..3d1cefd4f 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -2070,7 +2070,7 @@ void GrDrag::updateDraggers() this->draggers.clear(); g_return_if_fail(this->selection != NULL); - std::vector list = this->selection->itemList(); + std::vector list = this->selection->items(); for (std::vector::const_iterator i = list.begin(); i != list.end(); ++i) { SPItem *item = *i; SPStyle *style = item->style; @@ -2138,7 +2138,7 @@ void GrDrag::updateLines() g_return_if_fail(this->selection != NULL); - std::vector list = this->selection->itemList(); + std::vector list = this->selection->items(); for (std::vector::const_iterator i = list.begin(); i != list.end(); ++i) { SPItem *item = *i; @@ -2282,7 +2282,7 @@ void GrDrag::updateLevels() g_return_if_fail (this->selection != NULL); - std::vector list = this->selection->itemList(); + std::vector list = this->selection->items(); for (std::vector::const_iterator i = list.begin(); i != list.end(); ++i) { SPItem *item = *i; Geom::OptRect rect = item->desktopVisualBounds(); diff --git a/src/object-set.cpp b/src/object-set.cpp index d282e7894..627544a21 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -16,6 +16,7 @@ #include "persp3d.h" #include "preferences.h" +namespace Inkscape { bool ObjectSet::add(SPObject* object) { g_return_val_if_fail(object != NULL, false); @@ -202,7 +203,7 @@ SPItem *ObjectSet::largestItem(CompareSize compare) { } SPItem *ObjectSet::_sizeistItem(bool sml, CompareSize compare) { - std::vector const items = itemList(); + std::vector const items = const_cast(this)->items(); gdouble max = sml ? 1e18 : 0; SPItem *ist = NULL; @@ -226,10 +227,10 @@ SPItem *ObjectSet::_sizeistItem(bool sml, CompareSize compare) { return ist; } -SPObjectRange ObjectSet::range() { +SPObjectRange ObjectSet::objects() { return SPObjectRange(container.get().begin(), container.get().end()); } -std::vector ObjectSet::itemList() { +std::vector ObjectSet::items() { std::vector tmp = std::vector(container.begin(), container.end()); std::vector result; std::remove_if(tmp.begin(), tmp.end(), [](SPObject* o){return !SP_IS_ITEM(o);}); @@ -237,6 +238,18 @@ std::vector ObjectSet::itemList() { return result; } +std::vector ObjectSet::xmlNodes() { + std::vector list = items(); + std::vector result; + std::transform(list.begin(), list.end(), std::back_inserter(result), [](SPItem* item) { return item->getRepr(); }); + return result; +} + +Inkscape::XML::Node *ObjectSet::singleRepr() { + SPObject *obj = single(); + return obj ? obj->getRepr() : nullptr; +} + void ObjectSet::set(SPObject *object) { _clear(); _add(object); @@ -273,7 +286,7 @@ Geom::OptRect ObjectSet::bounds(SPItem::BBoxType type) const Geom::OptRect ObjectSet::geometricBounds() const { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); Geom::OptRect bbox; for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { @@ -284,7 +297,7 @@ Geom::OptRect ObjectSet::geometricBounds() const Geom::OptRect ObjectSet::visualBounds() const { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); Geom::OptRect bbox; for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { @@ -305,7 +318,7 @@ Geom::OptRect ObjectSet::preferredBounds() const Geom::OptRect ObjectSet::documentBounds(SPItem::BBoxType type) const { Geom::OptRect bbox; - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); if (items.empty()) return bbox; for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { @@ -319,7 +332,7 @@ Geom::OptRect ObjectSet::documentBounds(SPItem::BBoxType type) const // If we have a selection of multiple items, then the center of the first item // will be returned; this is also the case in SelTrans::centerRequest() boost::optional ObjectSet::center() const { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); if (!items.empty()) { SPItem *first = items.back(); // from the first item in selection if (first->isCenterSet()) { // only if set explicitly @@ -381,4 +394,6 @@ void ObjectSet::_remove_3D_boxes_recursively(SPObject *obj) { } _3dboxes.erase(b); } -} \ No newline at end of file +} + +} // namespace Inkscape diff --git a/src/object-set.h b/src/object-set.h index 05264a3ea..49a875562 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -28,6 +28,12 @@ class SPBox3D; class Persp3D; +namespace Inkscape { + +namespace XML { +class Node; +} + struct hashed{}; struct random_access{}; @@ -54,6 +60,12 @@ typedef boost::any_range< SPItem* const&, std::ptrdiff_t> SPItemRange; +typedef boost::any_range< + XML::Node*, + boost::random_access_traversal_tag, + XML::Node* const&, + std::ptrdiff_t> XMLNodeRange; + class ObjectSet { public: enum CompareSize {HORIZONTAL, VERTICAL, AREA}; @@ -144,10 +156,20 @@ public: SPItem *largestItem(CompareSize compare); /** Returns the list of selected objects. */ - SPObjectRange range(); + SPObjectRange objects(); /** Returns the list of selected SPItems. */ - std::vector itemList(); + std::vector items(); + + /** Returns a list of the xml nodes of all selected objects. */ + std::vector xmlNodes(); + + /** + * Returns a single selected object's xml node. + * + * @return NULL unless exactly one object is selected + */ + XML::Node *singleRepr(); /** * Selects exactly the specified objects. @@ -213,5 +235,6 @@ protected: }; +} // namespace Inkscape #endif //INKSCAPE_PROTOTYPE_OBJECTSET_H diff --git a/src/path-chemistry.cpp b/src/path-chemistry.cpp index 1a345b565..37d242b6b 100644 --- a/src/path-chemistry.cpp +++ b/src/path-chemistry.cpp @@ -57,7 +57,7 @@ sp_selected_path_combine(SPDesktop *desktop, bool skip_undo) Inkscape::Selection *selection = desktop->getSelection(); SPDocument *doc = desktop->getDocument(); - std::vector items(selection->itemList()); + std::vector items(selection->items()); if (items.size() < 1) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to combine.")); @@ -203,7 +203,7 @@ sp_selected_path_break_apart(SPDesktop *desktop, bool skip_undo) bool did = false; - std::vector itemlist(selection->itemList()); + std::vector itemlist(selection->items()); for (std::vector::const_iterator i = itemlist.begin(); i != itemlist.end(); ++i){ SPItem *item = *i; @@ -303,7 +303,7 @@ sp_selected_path_to_curves(Inkscape::Selection *selection, SPDesktop *desktop, b desktop->setWaitingCursor(); } - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); std::vector to_select; selection->clear(); std::vector items(selected); @@ -334,7 +334,7 @@ void sp_selected_to_lpeitems(SPDesktop *desktop) return; } - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); std::vector to_select; selection->clear(); std::vector items(selected); @@ -603,7 +603,7 @@ void sp_selected_path_reverse(SPDesktop *desktop) { Inkscape::Selection *selection = desktop->getSelection(); - std::vector items = selection->itemList(); + std::vector items = selection->items(); if (items.empty()) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select path(s) to reverse.")); diff --git a/src/selcue.cpp b/src/selcue.cpp index 297b9fffc..13248a553 100644 --- a/src/selcue.cpp +++ b/src/selcue.cpp @@ -96,14 +96,14 @@ void Inkscape::SelCue::_updateItemBboxes(Inkscape::Preferences *prefs) void Inkscape::SelCue::_updateItemBboxes(gint mode, int prefs_bbox) { - const std::vector items = _selection->itemList(); + const std::vector items = _selection->items(); if (_item_bboxes.size() != items.size()) { _newItemBboxes(); return; } int bcount = 0; - std::vector ll=_selection->itemList(); + std::vector ll= _selection->items(); for (std::vector::const_iterator l = ll.begin(); l != ll.end(); ++l) { SPItem *item = *l; SPCanvasItem* box = _item_bboxes[bcount ++]; @@ -146,7 +146,7 @@ void Inkscape::SelCue::_newItemBboxes() int prefs_bbox = prefs->getBool("/tools/bounding_box"); - std::vector ll=_selection->itemList(); + std::vector ll= _selection->items(); for (std::vector::const_iterator l = ll.begin(); l != ll.end(); ++l) { SPItem *item = *l; @@ -201,7 +201,7 @@ void Inkscape::SelCue::_newTextBaselines() } _text_baselines.clear(); - std::vector ll = _selection->itemList(); + std::vector ll = _selection->items(); for (std::vector::const_iterator l=ll.begin();l!=ll.end();++l) { SPItem *item = *l; diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index a13f3e64d..ded776fea 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -282,7 +282,7 @@ void SelectionHelper::fixSelection(SPDesktop *dt) std::vector items ; - std::vector const selList = selection->itemList(); + std::vector const selList = selection->items(); for( std::vector::const_reverse_iterator i = selList.rbegin(); i != selList.rend(); ++i ) { SPItem *item = *i; @@ -409,7 +409,7 @@ void sp_selection_delete(SPDesktop *desktop) desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Nothing was deleted.")); return; } - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); selection->clear(); sp_selection_delete_impl(selected); desktop->currentLayer()->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); @@ -454,7 +454,7 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone, bool duplicat desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to duplicate.")); return; } - std::vector reprs(selection->reprList()); + std::vector reprs(selection->xmlNodes()); if(duplicateLayer){ reprs.clear(); @@ -624,7 +624,7 @@ static void sp_edit_select_all_full(SPDesktop *dt, bool force_all_layers, bool i std::vector exclude; if (invert) { - exclude = selection->itemList(); + exclude = selection->items(); } if (force_all_layers) @@ -763,7 +763,7 @@ void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop) return; } - std::vector p (selection->reprList()); + std::vector p (selection->xmlNodes()); selection->clear(); @@ -798,7 +798,7 @@ void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDeskto selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("No objects selected to pop out of group.")); return; } - std::vector selection_list = selection->itemList(); + std::vector selection_list = selection->items(); std::vector::const_iterator item = selection_list.begin(); // leaving this because it will be useful for // future implementation of complex pop ungrouping @@ -831,7 +831,7 @@ void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop) } // first check whether there is anything to ungroup - std::vector old_select = selection->itemList(); + std::vector old_select = selection->items(); std::vector new_select; GSList *groups = NULL; for (std::vector::const_iterator item = old_select.begin(); item!=old_select.end(); ++item) { @@ -983,7 +983,7 @@ bool sp_item_repr_compare_position_bool(SPObject const *first, SPObject const *s void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop) { - std::vector items= selection->itemList(); + std::vector items= selection->items(); if (items.empty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise.")); return; @@ -1040,7 +1040,7 @@ void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *deskto return; } - std::vector items = selection->itemList(); + std::vector items = selection->items(); SPGroup const *group = sp_item_list_common_parent_group(items); if (!group) { @@ -1048,7 +1048,7 @@ void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *deskto return; } - std::vector rl(selection->reprList()); + std::vector rl(selection->xmlNodes()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_iterator l=rl.begin(); l!=rl.end();++l) { @@ -1062,7 +1062,7 @@ void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *deskto void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop) { - std::vector items = selection->itemList(); + std::vector items = selection->items(); if (items.empty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower.")); return; @@ -1124,7 +1124,7 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des return; } - std::vector items =selection->itemList(); + std::vector items = selection->items(); SPGroup const *group = sp_item_list_common_parent_group(items); if (!group) { @@ -1132,7 +1132,7 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des return; } - std::vector rl(selection->reprList()); + std::vector rl(selection->xmlNodes()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_reverse_iterator l=rl.rbegin();l!=rl.rend();++l) { @@ -1287,7 +1287,7 @@ void sp_selection_remove_livepatheffect(SPDesktop *desktop) desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to remove live path effects from.")); return; } - std::vector list=selection->itemList(); + std::vector list= selection->items(); for ( std::vector::const_iterator itemlist=list.begin();itemlist!=list.end();++itemlist) { SPItem *item = *itemlist; @@ -1368,7 +1368,7 @@ void sp_selection_to_next_layer(SPDesktop *dt, bool suppressDone) return; } - std::vector items(selection->itemList()); + std::vector items(selection->items()); bool no_more = false; // Set to true, if no more layers above SPObject *next=Inkscape::next_layer(dt->currentRoot(), dt->currentLayer()); @@ -1412,7 +1412,7 @@ void sp_selection_to_prev_layer(SPDesktop *dt, bool suppressDone) return; } - const std::vector items(selection->itemList()); + const std::vector items(selection->items()); bool no_more = false; // Set to true, if no more layers below SPObject *next=Inkscape::previous_layer(dt->currentRoot(), dt->currentLayer()); @@ -1455,7 +1455,7 @@ void sp_selection_to_layer(SPDesktop *dt, SPObject *moveto, bool suppressDone) return; } - std::vector items(selection->itemList()); + std::vector items(selection->items()); if (moveto) { selection->clear(); @@ -1506,7 +1506,7 @@ static bool selection_contains_both_clone_and_original(Inkscape::Selection *selection) { bool clone_with_original = false; - std::vector items = selection->itemList(); + std::vector items = selection->items(); for (std::vector::const_iterator l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; if (item) { @@ -1551,7 +1551,7 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons persp3d_apply_affine_transformation(transf_persp, affine); } - std::vector items = selection->itemList(); + std::vector items = selection->items(); for (std::vector::const_iterator l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; @@ -1722,7 +1722,7 @@ void sp_selection_remove_transform(SPDesktop *desktop) Inkscape::Selection *selection = desktop->getSelection(); - std::vector items = selection->reprList(); + std::vector items = selection->xmlNodes(); for (std::vector::const_iterator l=items.begin();l!=items.end() ;++l) { (*l)->setAttribute("transform", NULL, false); } @@ -1822,7 +1822,7 @@ void sp_selection_rotate_90(SPDesktop *desktop, bool ccw) if (selection->isEmpty()) return; - std::vector items = selection->itemList(); + std::vector items = selection->items(); Geom::Rotate const rot_90(Geom::Point(0, ccw ? 1 : -1)); // pos. or neg. rotation, depending on the value of ccw for (std::vector::const_iterator l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; @@ -1886,7 +1886,7 @@ void sp_select_same_fill_stroke_style(SPDesktop *desktop, gboolean fill, gboolea std::vector all_matches; Inkscape::Selection *selection = desktop->getSelection(); - std::vector items = selection->itemList(); + std::vector items = selection->items(); std::vector tmp; for (std::vector::const_iterator iter=all_list.begin();iter!=all_list.end();++iter) { @@ -1943,7 +1943,7 @@ void sp_select_same_object_type(SPDesktop *desktop) Inkscape::Selection *selection = desktop->getSelection(); - std::vector items=selection->itemList(); + std::vector items= selection->items(); for (std::vector::const_iterator sel_iter=items.begin();sel_iter!=items.end();++sel_iter) { SPItem *sel = *sel_iter; if (sel) { @@ -2456,7 +2456,7 @@ sp_selection_item_next(SPDesktop *desktop) root = desktop->currentRoot(); } - SPItem *item=next_item_from_list(desktop, selection->itemList(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive); + SPItem *item=next_item_from_list(desktop, selection->items(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive); if (item) { selection->set(item, PREFS_SELECTION_LAYER_RECURSIVE == inlayer); @@ -2486,7 +2486,7 @@ sp_selection_item_prev(SPDesktop *desktop) root = desktop->currentRoot(); } - SPItem *item=next_item_from_list(desktop, selection->itemList(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive); + SPItem *item=next_item_from_list(desktop, selection->items(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive); if (item) { selection->set(item, PREFS_SELECTION_LAYER_RECURSIVE == inlayer); @@ -2603,7 +2603,7 @@ void sp_selection_clone(SPDesktop *desktop) return; } - std::vector reprs (selection->reprList()); + std::vector reprs (selection->xmlNodes()); selection->clear(); @@ -2662,7 +2662,7 @@ sp_selection_relink(SPDesktop *desktop) // Get a copy of current selection. bool relinked = false; - std::vector items=selection->itemList(); + std::vector items= selection->items(); for (std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPItem *item = *i; @@ -2700,7 +2700,7 @@ sp_selection_unlink(SPDesktop *desktop) // Get a copy of current selection. std::vector new_select; bool unlinked = false; - std::vector items=selection->itemList(); + std::vector items= selection->items(); for (std::vector::const_reverse_iterator i=items.rbegin();i!=items.rend();++i){ SPItem *item = *i; @@ -2767,7 +2767,7 @@ sp_select_clone_original(SPDesktop *desktop) // Check if other than two objects are selected - std::vector items=selection->itemList(); + std::vector items= selection->items(); if (items.size() != 1 || !item) { desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, error); return; @@ -2865,7 +2865,7 @@ void sp_selection_clone_original_path_lpe(SPDesktop *desktop) Inkscape::SVGOStringStream os; SPObject * firstItem = NULL; - std::vector items=selection->itemList(); + std::vector items= selection->items(); for (std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (SP_IS_SHAPE(*i) || SP_IS_TEXT(*i)) { if (firstItem) { @@ -2950,7 +2950,7 @@ void sp_selection_to_marker(SPDesktop *desktop, bool apply) Geom::Point center( *c - corner ); // As defined by rotation center center[Geom::Y] = -center[Geom::Y]; - std::vector items(selection->itemList()); + std::vector items(selection->items()); //items = g_slist_sort(items, (GCompareFunc) sp_object_compare_position); // Why needed? @@ -3024,7 +3024,7 @@ void sp_selection_to_guides(SPDesktop *desktop) SPDocument *doc = desktop->getDocument(); Inkscape::Selection *selection = desktop->getSelection(); // we need to copy the list because it gets reset when objects are deleted - std::vector items(selection->itemList()); + std::vector items(selection->items()); if (items.empty()) { desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to convert to guides.")); @@ -3090,7 +3090,7 @@ void sp_selection_symbol(SPDesktop *desktop, bool /*apply*/ ) doc->ensureUpToDate(); - std::vector items(selection->range().begin(), selection->range().end()); + std::vector items(selection->objects().begin(), selection->objects().end()); sort(items.begin(),items.end(),sp_object_compare_position_bool); // Keep track of parent, this is where will be inserted. @@ -3302,7 +3302,7 @@ sp_selection_tile(SPDesktop *desktop, bool apply) move_p[Geom::Y] = -move_p[Geom::Y]; Geom::Affine move = Geom::Affine(Geom::Translate(move_p)); - std::vector items (selection->itemList()); + std::vector items (selection->items()); sort(items.begin(),items.end(),sp_object_compare_position_bool); @@ -3407,7 +3407,7 @@ void sp_selection_untile(SPDesktop *desktop) bool did = false; - std::vector items(selection->itemList()); + std::vector items(selection->items()); for (std::vector::const_reverse_iterator i=items.rbegin();i!=items.rend();++i){ SPItem *item = *i; @@ -3472,7 +3472,7 @@ void sp_selection_get_export_hints(Inkscape::Selection *selection, Glib::ustring return; } - std::vector const reprlst = selection->reprList(); + std::vector const reprlst = selection->xmlNodes(); bool filename_search = TRUE; bool xdpi_search = TRUE; bool ydpi_search = TRUE; @@ -3564,7 +3564,7 @@ void sp_selection_create_bitmap_copy(SPDesktop *desktop) } // List of the items to show; all others will be hidden - std::vector items(selection->itemList()); + std::vector items(selection->items()); // Sort items so that the topmost comes last sort(items.begin(),items.end(),sp_item_repr_compare_position_bool); @@ -3765,7 +3765,7 @@ void sp_selection_set_clipgroup(SPDesktop *desktop) return; } - std::vector p(selection->reprList()); + std::vector p(selection->xmlNodes()); sort(p.begin(),p.end(),sp_repr_compare_position_bool); @@ -3875,7 +3875,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ if ( apply_to_layer && is_empty) { desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to create clippath or mask from.")); return; - } else if (!apply_to_layer && ( is_empty || selection->itemList().size()==1 )) { + } else if (!apply_to_layer && ( is_empty || selection->items().size()==1 )) { desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select mask object and object(s) to apply clippath or mask to.")); return; } @@ -3890,7 +3890,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ doc->ensureUpToDate(); - std::vector items(selection->itemList()); + std::vector items(selection->items()); sort(items.begin(),items.end(),sp_object_compare_position_bool); @@ -4052,7 +4052,7 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) { gchar const *attributeName = apply_clip_path ? "clip-path" : "mask"; std::map referenced_objects; - std::vector items(selection->itemList()); + std::vector items(selection->items()); selection->clear(); GSList *items_to_ungroup = NULL; diff --git a/src/selection-describer.cpp b/src/selection-describer.cpp index ddc7a0d10..93808ed54 100644 --- a/src/selection-describer.cpp +++ b/src/selection-describer.cpp @@ -122,7 +122,7 @@ void SelectionDescriber::_selectionModified(Inkscape::Selection *selection, guin } void SelectionDescriber::_updateMessageFromSelection(Inkscape::Selection *selection) { - std::vector const items = selection->itemList(); + std::vector const items = selection->items(); if (items.empty()) { // no items _context.set(Inkscape::NORMAL_MESSAGE, _when_nothing); diff --git a/src/selection.cpp b/src/selection.cpp index 32e27f2d4..94b64a7bc 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -130,25 +130,13 @@ void Selection::setReprList(std::vector const &list) { _emitChanged(); } -std::vector Selection::reprList() { - std::vector list = itemList(); - std::vector result; - std::transform(list.begin(), list.end(), std::back_inserter(result), [](SPItem* item) { return item->getRepr(); }); - return result; -} - -Inkscape::XML::Node *Selection::singleRepr() { - SPObject *obj = single(); - return obj ? obj->getRepr() : nullptr; -} - std::vector Selection::getSnapPoints(SnapPreferences const *snapprefs) const { std::vector p; if (snapprefs != NULL){ SnapPreferences snapprefs_dummy = *snapprefs; // create a local copy of the snapping prefs snapprefs_dummy.setTargetSnappable(Inkscape::SNAPTARGET_ROTATION_CENTER, false); // locally disable snapping to the item center - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPItem *this_item = *iter; this_item->getSnappoints(p, &snapprefs_dummy); @@ -174,7 +162,7 @@ SPObject *Selection::_objectForXMLNode(Inkscape::XML::Node *repr) const { } size_t Selection::numberOfLayers() { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); std::set layers; for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPObject *layer = _layers->layerForObject(*iter); @@ -185,7 +173,7 @@ size_t Selection::numberOfLayers() { } size_t Selection::numberOfParents() { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); std::set parents; for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPObject *parent = (*iter)->parent; diff --git a/src/selection.h b/src/selection.h index 8b1bb25fa..7027a388f 100644 --- a/src/selection.h +++ b/src/selection.h @@ -39,12 +39,6 @@ class Node; namespace Inkscape { -typedef boost::any_range< - XML::Node*, - boost::random_access_traversal_tag, - XML::Node* const&, - std::ptrdiff_t> XMLNodeRange; - /** * The set of selected SPObjects for a given document and layer model. * @@ -156,16 +150,6 @@ public: return includes(_objectForXMLNode(repr)); } - /** - * Returns a single selected object's xml node. - * - * @return NULL unless exactly one object is selected - */ - XML::Node *singleRepr(); - - /** Returns a list of the xml nodes of all selected objects. */ - std::vector reprList(); - /** Returns the number of layers in which there are selected objects. */ size_t numberOfLayers(); diff --git a/src/seltrans.cpp b/src/seltrans.cpp index b54525610..9fa6172ed 100644 --- a/src/seltrans.cpp +++ b/src/seltrans.cpp @@ -240,7 +240,7 @@ void Inkscape::SelTrans::setCenter(Geom::Point const &p) _center_is_set = true; // Write the new center position into all selected items - std::vector items=_desktop->selection->itemList(); + std::vector items= _desktop->selection->items(); for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPItem *it = SP_ITEM(*iter); it->setCenter(p); @@ -270,7 +270,7 @@ void Inkscape::SelTrans::grab(Geom::Point const &p, gdouble x, gdouble y, bool s return; } - std::vector items=_desktop->selection->itemList(); + std::vector items= _desktop->selection->items(); for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPItem *it = static_cast(sp_object_ref(*iter, NULL)); _items.push_back(it); @@ -492,7 +492,7 @@ void Inkscape::SelTrans::ungrab() if (_center_is_set) { // we were dragging center; update reprs and commit undoable action - std::vector items=_desktop->selection->itemList(); + std::vector items= _desktop->selection->items(); for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPItem *it = *iter; it->updateRepr(); @@ -529,7 +529,7 @@ void Inkscape::SelTrans::stamp() l = _stamp_cache; } else { /* Build cache */ - l = selection->itemList(); + l = selection->items(); sort(l.begin(),l.end(),sp_object_compare_position_bool); _stamp_cache = l; } @@ -621,7 +621,7 @@ void Inkscape::SelTrans::_updateVolatileState() return; } - _strokewidth = stroke_average_width (selection->itemList()); + _strokewidth = stroke_average_width (selection->items()); } void Inkscape::SelTrans::_showHandles(SPSelTransType type) @@ -711,7 +711,7 @@ void Inkscape::SelTrans::handleClick(SPKnot */*knot*/, guint state, SPSelTransHa case HANDLE_CENTER: if (state & GDK_SHIFT_MASK) { // Unset the center position for all selected items - std::vector items=_desktop->selection->itemList(); + std::vector items= _desktop->selection->items(); for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPItem *it = *iter; it->unsetCenter(); @@ -1287,7 +1287,7 @@ gboolean Inkscape::SelTrans::centerRequest(Geom::Point &pt, guint state) // items will share a single center. While dragging that single center, it should never snap to the // centers of any of the selected objects. Therefore we will have to pass the list of selected items // to the snapper, to avoid self-snapping of the rotation center - std::vector items = const_cast(_selection)->itemList(); + std::vector items = const_cast(_selection)->items(); SnapManager &m = _desktop->namedview->snap_manager; m.setup(_desktop); m.setRotationCenterSource(items); diff --git a/src/snap.cpp b/src/snap.cpp index 7f0e8d9dc..d1d15ca0c 100644 --- a/src/snap.cpp +++ b/src/snap.cpp @@ -708,7 +708,7 @@ void SnapManager::setupIgnoreSelection(SPDesktop const *desktop, _items_to_ignore.clear(); Inkscape::Selection *sel = _desktop->selection; - std::vector const items = sel->itemList(); + std::vector const items = sel->items(); for (std::vector::const_iterator i=items.begin();i!=items.end();++i) { _items_to_ignore.push_back(*i); } diff --git a/src/splivarot.cpp b/src/splivarot.cpp index 1bc6da3e1..d4ef3f9c2 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -335,7 +335,7 @@ void sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb, const Glib::ustring description) { SPDocument *doc = selection->layers()->getDocument(); - std::vector il= selection->itemList(); + std::vector il= selection->items(); // allow union on a single object for the purpose of removing self overlapse (svn log, revision 13334) if ( (il.size() < 2) && (bop != bool_op_union)) { @@ -689,7 +689,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool } } else { // find out the bottom object - std::vector sorted(selection->reprList()); + std::vector sorted(selection->xmlNodes()); sort(sorted.begin(),sorted.end(),sp_repr_compare_position_bool); @@ -1157,7 +1157,7 @@ sp_selected_path_outline(SPDesktop *desktop) bool scale_stroke = prefs->getBool("/options/transform/stroke", true); prefs->setBool("/options/transform/stroke", true); bool did = false; - std::vector il(selection->itemList()); + std::vector il(selection->items()); for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ SPItem *item = *l; @@ -1771,7 +1771,7 @@ sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset) } bool did = false; - std::vector il(selection->itemList()); + std::vector il(selection->items()); for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ SPItem *item = *l; SPCurve *curve = NULL; @@ -2196,7 +2196,7 @@ sp_selected_path_simplify_selection(SPDesktop *desktop, float threshold, bool ju return; } - std::vector items(selection->itemList()); + std::vector items(selection->items()); bool didSomething = sp_selected_path_simplify_items(desktop, selection, items, threshold, diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp index fbbbe5807..5565464a1 100644 --- a/src/text-chemistry.cpp +++ b/src/text-chemistry.cpp @@ -43,7 +43,7 @@ using Inkscape::DocumentUndo; static SPItem * flowtext_in_selection(Inkscape::Selection *selection) { - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (SP_IS_FLOWTEXT(*i)) return *i; @@ -54,7 +54,7 @@ flowtext_in_selection(Inkscape::Selection *selection) static SPItem * text_or_flowtext_in_selection(Inkscape::Selection *selection) { - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) return *i; @@ -65,7 +65,7 @@ text_or_flowtext_in_selection(Inkscape::Selection *selection) static SPItem * shape_in_selection(Inkscape::Selection *selection) { - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (SP_IS_SHAPE(*i)) return *i; @@ -87,7 +87,7 @@ text_put_on_path() Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc(); - if (!text || !shape || selection->itemList().size() != 2) { + if (!text || !shape || selection->items().size() != 2) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select a text and a path to put text on path.")); return; } @@ -196,7 +196,7 @@ text_remove_from_path() } bool did = false; - std::vector items(selection->itemList()); + std::vector items(selection->items()); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPObject *obj = *i; @@ -214,7 +214,7 @@ text_remove_from_path() } else { DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_TEXT, _("Remove text from path")); - selection->setList(selection->itemList()); // reselect to update statusbar description + selection->setList(selection->items()); // reselect to update statusbar description } } @@ -260,7 +260,7 @@ text_remove_all_kerns() bool did = false; - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPObject *obj = *i; @@ -296,7 +296,7 @@ text_flow_into_shape() SPItem *text = text_or_flowtext_in_selection(selection); SPItem *shape = shape_in_selection(selection); - if (!text || !shape || selection->itemList().size() < 2) { + if (!text || !shape || selection->items().size() < 2) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select a text and one or more paths or shapes to flow text into frame.")); return; } @@ -320,7 +320,7 @@ text_flow_into_shape() g_return_if_fail(SP_IS_FLOWREGION(object)); /* Add clones */ - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPItem *item = *i; if (SP_IS_SHAPE(item)){ @@ -387,7 +387,7 @@ text_unflow () Inkscape::Selection *selection = desktop->getSelection(); - if (!flowtext_in_selection(selection) || selection->itemList().size() < 1) { + if (!flowtext_in_selection(selection) || selection->items().size() < 1) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select a flowed text to unflow it.")); return; } @@ -395,7 +395,7 @@ text_unflow () std::vector new_objs; GSList *old_objs = NULL; - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (!SP_IS_FLOWTEXT(*i)) { @@ -480,7 +480,7 @@ flowtext_to_text() bool did = false; std::vector reprs; - std::vector items(selection->itemList()); + std::vector items(selection->items()); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPItem *item = *i; diff --git a/src/trace/trace.cpp b/src/trace/trace.cpp index 379682668..f0fa61b89 100644 --- a/src/trace/trace.cpp +++ b/src/trace/trace.cpp @@ -65,7 +65,7 @@ SPImage *Tracer::getSelectedSPImage() if (sioxEnabled) { SPImage *img = NULL; - std::vector const list = sel->itemList(); + std::vector const list = sel->items(); std::vector items; sioxShapes.clear(); diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index d581dbf7e..b1a946db2 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -522,7 +522,7 @@ bool ClipboardManagerImpl::pasteSize(SPDesktop *desktop, bool separately, bool a // resize each object in the selection if (separately) { - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (item) { @@ -578,7 +578,7 @@ bool ClipboardManagerImpl::pastePathEffect(SPDesktop *desktop) desktop->doc()->importDefs(tempdoc); // make sure all selected items are converted to paths first (i.e. rectangles) sp_selected_to_lpeitems(desktop); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; _applyPathEffect(item, effectstack); @@ -661,7 +661,7 @@ Glib::ustring ClipboardManagerImpl::getShapeOrTextObjectId(SPDesktop *desktop) void ClipboardManagerImpl::_copySelection(Inkscape::Selection *selection) { // copy the defs used by all items - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); cloned_elements.clear(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp index 8f87932b8..b7b5b96cd 100644 --- a/src/ui/dialog/align-and-distribute.cpp +++ b/src/ui/dialog/align-and-distribute.cpp @@ -133,7 +133,7 @@ void ActionAlign::do_action(SPDesktop *desktop, int index) Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool sel_as_group = prefs->getBool("/dialogs/align/sel-as-groups"); - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); if (selected.empty()) return; const Coeffs &a = _allCoeffs[index]; @@ -293,7 +293,7 @@ private : Inkscape::Selection *selection = desktop->getSelection(); if (!selection) return; - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); if (selected.empty()) return; //Check 2 or more selected objects @@ -499,7 +499,7 @@ private : // xGap and yGap are the minimum space required between bounding rectangles. double const xGap = removeOverlapXGap.get_value(); double const yGap = removeOverlapYGap.get_value(); - removeoverlap(_dialog.getDesktop()->getSelection()->itemList(), xGap, yGap); + removeoverlap(_dialog.getDesktop()->getSelection()->items(), xGap, yGap); // restore compensation setting prefs->setInt("/options/clonecompensation/value", saved_compensation); @@ -530,7 +530,7 @@ private : int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); - graphlayout(_dialog.getDesktop()->getSelection()->itemList()); + graphlayout(_dialog.getDesktop()->getSelection()->items()); // restore compensation setting prefs->setInt("/options/clonecompensation/value", saved_compensation); @@ -590,7 +590,7 @@ private : Inkscape::Selection *selection = desktop->getSelection(); if (!selection) return; - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); if (selected.empty()) return; //Check 2 or more selected objects @@ -656,7 +656,7 @@ private : Inkscape::Preferences *prefs = Inkscape::Preferences::get(); int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); - std::vector x(_dialog.getDesktop()->getSelection()->itemList()); + std::vector x(_dialog.getDesktop()->getSelection()->items()); unclump (x); // restore compensation setting @@ -687,7 +687,7 @@ private : Inkscape::Selection *selection = desktop->getSelection(); if (!selection) return; - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); if (selected.empty()) return; //Check 2 or more selected objects @@ -785,7 +785,7 @@ private : Inkscape::Selection *selection = desktop->getSelection(); if (!selection) return; - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); //Check 2 or more selected objects if (selected.size() < 2) return; diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index b727c87ee..7ce937de7 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -1376,7 +1376,7 @@ void CloneTiler::clonetiler_change_selection(Inkscape::Selection *selection, Gtk return; } - if (selection->itemList().size() > 1) { + if (selection->items().size() > 1) { gtk_widget_set_sensitive (buttons, FALSE); gtk_label_set_markup (GTK_LABEL(status), _("More than one object selected.")); return; @@ -2113,7 +2113,7 @@ void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *) Inkscape::Selection *selection = desktop->getSelection(); // check if something is selected - if (selection->isEmpty() || selection->itemList().size() > 1) { + if (selection->isEmpty() || selection->items().size() > 1) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select one object whose tiled clones to unclump.")); return; } @@ -2162,7 +2162,7 @@ void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool d Inkscape::Selection *selection = desktop->getSelection(); // check if something is selected - if (selection->isEmpty() || selection->itemList().size() > 1) { + if (selection->isEmpty() || selection->items().size() > 1) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select one object whose tiled clones to remove.")); return; } @@ -2240,7 +2240,7 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg) } // Check if more than one object is selected. - if (selection->itemList().size() > 1) { + if (selection->items().size() > 1) { desktop->getMessageStack()->flash(Inkscape::ERROR_MESSAGE, _("If you want to clone several objects, group them and clone the group.")); return; } diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 2fb5f9e3b..6d2842511 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -608,7 +608,7 @@ void Export::onBatchClicked () void Export::updateCheckbuttons () { - gint num = SP_ACTIVE_DESKTOP->getSelection()->itemList().size(); + gint num = SP_ACTIVE_DESKTOP->getSelection()->items().size(); if (num >= 2) { batch_export.set_sensitive(true); batch_export.set_label(g_strdup_printf (ngettext("B_atch export %d selected object","B_atch export %d selected objects",num), num)); @@ -820,7 +820,7 @@ void Export::onAreaToggled () one that's nice */ if (filename.empty()) { const gchar * id = "object"; - const std::vector reprlst = SP_ACTIVE_DESKTOP->getSelection()->reprList(); + const std::vector reprlst = SP_ACTIVE_DESKTOP->getSelection()->xmlNodes(); for(std::vector::const_iterator i=reprlst.begin(); reprlst.end() != i; ++i) { Inkscape::XML::Node * repr = *i; if (repr->attribute("id")) { @@ -1015,7 +1015,7 @@ void Export::onExport () if (batch_export.get_active ()) { // Batch export of selected objects - gint num = (desktop->getSelection()->itemList()).size(); + gint num = (desktop->getSelection()->items()).size(); gint n = 0; if (num < 1) { @@ -1029,7 +1029,7 @@ void Export::onExport () gint export_count = 0; - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i = itemlist.begin();i!=itemlist.end() && !interrupted ;++i){ SPItem *item = *i; @@ -1075,7 +1075,7 @@ void Export::onExport () nv->pagecolor, onProgressCallback, (void*)prog_dlg, TRUE, // overwrite without asking - hide ? (desktop->getSelection()->itemList()) : x + hide ? (desktop->getSelection()->items()) : x )) { gchar * error = g_strdup_printf(_("Could not export to filename %s.\n"), safeFile); @@ -1165,7 +1165,7 @@ void Export::onExport () nv->pagecolor, onProgressCallback, (void*)prog_dlg, FALSE, - hide ? (desktop->getSelection()->itemList()) : x + hide ? (desktop->getSelection()->items()) : x ); if (status == EXPORT_ERROR) { gchar * safeFile = Inkscape::IO::sanitizeString(path.c_str()); @@ -1237,7 +1237,7 @@ void Export::onExport () bool saved = DocumentUndo::getUndoSensitive(doc); DocumentUndo::setUndoSensitive(doc, false); - reprlst = desktop->getSelection()->reprList(); + reprlst = desktop->getSelection()->xmlNodes(); for(std::vector::const_iterator i=reprlst.begin(); reprlst.end() != i; ++i) { Inkscape::XML::Node * repr = *i; diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index d3ad5d1da..dfc19f3cc 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -691,7 +691,7 @@ private: void select_svg_element(){ Inkscape::Selection* sel = _desktop->getSelection(); if (sel->isEmpty()) return; - Inkscape::XML::Node* node = sel->reprList()[0]; + Inkscape::XML::Node* node = sel->xmlNodes()[0]; if (!node || !node->matchAttributeName("id")) return; std::ostringstream xlikhref; @@ -1474,7 +1474,7 @@ void FilterEffectsDialog::FilterModifier::update_selection(Selection *sel) } std::set used; - std::vector itemlist=sel->itemList(); + std::vector itemlist= sel->items(); for(std::vector::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) { SPObject *obj = *i; SPStyle *style = obj->style; @@ -1555,7 +1555,7 @@ void FilterEffectsDialog::FilterModifier::on_selection_toggled(const Glib::ustri if((*iter)[_columns.sel] == 1) filter = 0; - std::vector itemlist=sel->itemList(); + std::vector itemlist= sel->items(); for(std::vector::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) { SPItem * item = *i; SPStyle *style = item->style; diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp index 0f368c5ac..8424dd7f5 100644 --- a/src/ui/dialog/find.cpp +++ b/src/ui/dialog/find.cpp @@ -761,7 +761,7 @@ std::vector &Find::all_items (SPObject *r, std::vector &l, boo std::vector &Find::all_selection_items (Inkscape::Selection *s, std::vector &l, SPObject *ancestor, bool hidden, bool locked) { - std::vector itemlist=s->itemList(); + std::vector itemlist= s->items(); for(std::vector::const_reverse_iterator i=itemlist.rbegin(); itemlist.rend() != i; ++i) { SPObject *obj = *i; SPItem *item = dynamic_cast(obj); diff --git a/src/ui/dialog/glyphs.cpp b/src/ui/dialog/glyphs.cpp index 56b001291..30b0f8df7 100644 --- a/src/ui/dialog/glyphs.cpp +++ b/src/ui/dialog/glyphs.cpp @@ -578,7 +578,7 @@ void GlyphsPanel::setTargetDesktop(SPDesktop *desktop) void GlyphsPanel::insertText() { SPItem *textItem = 0; - std::vector itemlist=targetDesktop->selection->itemList(); + std::vector itemlist= targetDesktop->selection->items(); for(std::vector::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) { if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) { textItem = *i; @@ -688,7 +688,7 @@ void GlyphsPanel::selectionModifiedCB(guint flags) void GlyphsPanel::calcCanInsert() { int items = 0; - std::vector itemlist=targetDesktop->selection->itemList(); + std::vector itemlist= targetDesktop->selection->items(); for(std::vector::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) { if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) { ++items; diff --git a/src/ui/dialog/grid-arrange-tab.cpp b/src/ui/dialog/grid-arrange-tab.cpp index 639e463ea..ddcc20cb7 100644 --- a/src/ui/dialog/grid-arrange-tab.cpp +++ b/src/ui/dialog/grid-arrange-tab.cpp @@ -163,7 +163,7 @@ void GridArrangeTab::arrange() desktop->getDocument()->ensureUpToDate(); Inkscape::Selection *selection = desktop->getSelection(); - const std::vector items = selection ? selection->itemList() : std::vector(); + const std::vector items = selection ? selection->items() : std::vector(); for(std::vector::const_iterator i = items.begin();i!=items.end(); ++i){ SPItem *item = *i; Geom::OptRect b = item->documentVisualBounds(); @@ -192,7 +192,7 @@ void GridArrangeTab::arrange() // require the sorting done before we can calculate row heights etc. g_return_if_fail(selection); - std::vector sorted(selection->itemList()); + std::vector sorted(selection->items()); sort(sorted.begin(),sorted.end(),sp_compare_y_position); sort(sorted.begin(),sorted.end(),sp_compare_x_position); @@ -368,7 +368,7 @@ void GridArrangeTab::on_row_spinbutton_changed() Inkscape::Selection *selection = desktop ? desktop->selection : 0; g_return_if_fail( selection ); - std::vector const items = selection->itemList(); + std::vector const items = selection->items(); int selcount = items.size(); double PerCol = ceil(selcount / NoOfColsSpinner.get_value()); @@ -394,7 +394,7 @@ void GridArrangeTab::on_col_spinbutton_changed() Inkscape::Selection *selection = desktop ? desktop->selection : 0; g_return_if_fail(selection); - int selcount = selection->itemList().size(); + int selcount = selection->items().size(); double PerRow = ceil(selcount / NoOfRowsSpinner.get_value()); NoOfColsSpinner.set_value(PerRow); @@ -531,7 +531,7 @@ void GridArrangeTab::updateSelection() updating = true; SPDesktop *desktop = Parent->getDesktop(); Inkscape::Selection *selection = desktop ? desktop->selection : 0; - std::vector const items = selection ? selection->itemList() : std::vector(); + std::vector const items = selection ? selection->items() : std::vector(); if (!items.empty()) { int selcount = items.size(); @@ -602,7 +602,7 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent) g_return_if_fail( selection ); int selcount = 1; if (!selection->isEmpty()) { - selcount = selection->itemList().size(); + selcount = selection->items().size(); } diff --git a/src/ui/dialog/icon-preview.cpp b/src/ui/dialog/icon-preview.cpp index 83656a1f2..173a964e9 100644 --- a/src/ui/dialog/icon-preview.cpp +++ b/src/ui/dialog/icon-preview.cpp @@ -362,7 +362,7 @@ void IconPreviewPanel::refreshPreview() if ( sel ) { //g_message("found a selection to play with"); - std::vector const items = sel->itemList(); + std::vector const items = sel->items(); for(std::vector::const_iterator i=items.begin();!target && i!=items.end();++i){ SPItem* item = *i; gchar const *id = item->getId(); diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 27694a9ac..df32f73cf 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -478,7 +478,7 @@ void ObjectsPanel::_objectsSelected( Selection *sel ) { _selectedConnection.block(); _tree.get_selection()->unselect_all(); SPItem *item = NULL; - std::vector const items = sel->itemList(); + std::vector const items = sel->items(); for(std::vector::const_iterator i=items.begin(); i!=items.end(); ++i){ item = *i; if (setOpacity) diff --git a/src/ui/dialog/pixelartdialog.cpp b/src/ui/dialog/pixelartdialog.cpp index f557ff0fc..ed62e26b0 100644 --- a/src/ui/dialog/pixelartdialog.cpp +++ b/src/ui/dialog/pixelartdialog.cpp @@ -372,7 +372,7 @@ void PixelArtDialogImpl::vectorize() return; } - std::vector const items = desktop->selection->itemList(); + std::vector const items = desktop->selection->items(); for(std::vector::const_iterator i=items.begin(); i!=items.end();++i){ if ( !SP_IS_IMAGE(*i) ) continue; diff --git a/src/ui/dialog/polar-arrange-tab.cpp b/src/ui/dialog/polar-arrange-tab.cpp index 5ec1285c1..c160c269f 100644 --- a/src/ui/dialog/polar-arrange-tab.cpp +++ b/src/ui/dialog/polar-arrange-tab.cpp @@ -297,7 +297,7 @@ static void moveToPoint(int anchor, SPItem *item, Geom::Point p) void PolarArrangeTab::arrange() { Inkscape::Selection *selection = parent->getDesktop()->getSelection(); - const std::vector tmp(selection->itemList()); + const std::vector tmp(selection->items()); SPGenericEllipse *referenceEllipse = NULL; // Last ellipse in selection bool arrangeOnEllipse = !arrangeOnParametersRadio.get_active(); diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp index 790c0e5fb..100a620fa 100644 --- a/src/ui/dialog/svg-fonts-dialog.cpp +++ b/src/ui/dialog/svg-fonts-dialog.cpp @@ -524,7 +524,7 @@ void SvgFontsDialog::set_glyph_description_from_selected_path(){ return; } - Inkscape::XML::Node* node = sel->reprList().front(); + Inkscape::XML::Node* node = sel->xmlNodes().front(); if (!node) return;//TODO: should this be an assert? if (!node->matchAttributeName("d") || !node->attribute("d")){ char *msg = _("The selected object does not have a path description."); @@ -566,7 +566,7 @@ void SvgFontsDialog::missing_glyph_description_from_selected_path(){ return; } - Inkscape::XML::Node* node = sel->reprList().front(); + Inkscape::XML::Node* node = sel->xmlNodes().front(); if (!node) return;//TODO: should this be an assert? if (!node->matchAttributeName("d") || !node->attribute("d")){ char *msg = _("The selected object does not have a path description."); diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp index 6577c8d4e..2573719ac 100644 --- a/src/ui/dialog/swatches.cpp +++ b/src/ui/dialog/swatches.cpp @@ -123,7 +123,7 @@ static void editGradientImpl( SPDesktop* desktop, SPGradient* gr ) bool shown = false; if ( desktop && desktop->doc() ) { Inkscape::Selection *selection = desktop->getSelection(); - std::vector const items = selection->itemList(); + std::vector const items = selection->items(); if (!items.empty()) { SPStyle query( desktop->doc() ); int result = objects_query_fillstroke((items), &query, true); diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index affbe0a3b..98b0f9502 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -348,7 +348,7 @@ void TagsPanel::_objectsSelected( Selection *sel ) { _selectedConnection.block(); _tree.get_selection()->unselect_all(); - auto tmp = sel->range(); + auto tmp = sel->objects(); for(auto i = tmp.begin(); i != tmp.end(); ++i) { SPObject *obj = *i; @@ -646,7 +646,7 @@ bool TagsPanel::_handleButtonEvent(GdkEventButton* event) if (col == _tree.get_column(COL_ADD - 1) && down_at_add) { if (SP_IS_TAG(obj)) { bool wasadded = false; - std::vector items=_desktop->selection->itemList(); + std::vector items= _desktop->selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPObject *newobj = *i; bool addchild = true; diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp index c01da8864..355bd16d1 100644 --- a/src/ui/dialog/text-edit.cpp +++ b/src/ui/dialog/text-edit.cpp @@ -443,7 +443,7 @@ SPItem *TextEdit::getSelectedTextItem (void) if (!SP_ACTIVE_DESKTOP) return NULL; - std::vector tmp=SP_ACTIVE_DESKTOP->getSelection()->itemList(); + std::vector tmp= SP_ACTIVE_DESKTOP->getSelection()->items(); for(std::vector::const_iterator i=tmp.begin();i!=tmp.end();++i) { if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) @@ -461,7 +461,7 @@ unsigned TextEdit::getSelectedTextCount (void) unsigned int items = 0; - std::vector tmp=SP_ACTIVE_DESKTOP->getSelection()->itemList(); + std::vector tmp= SP_ACTIVE_DESKTOP->getSelection()->items(); for(std::vector::const_iterator i=tmp.begin();i!=tmp.end();++i) { if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) @@ -568,7 +568,7 @@ void TextEdit::onApply() SPDesktop *desktop = SP_ACTIVE_DESKTOP; unsigned items = 0; - const std::vector item_list = desktop->getSelection()->itemList(); + const std::vector item_list = desktop->getSelection()->items(); SPCSSAttr *css = fillTextStyle (); sp_desktop_set_style(desktop, css, true); diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp index b7638e8c1..f11ac1ebe 100644 --- a/src/ui/dialog/transformation.cpp +++ b/src/ui/dialog/transformation.cpp @@ -650,7 +650,7 @@ void Transformation::updatePageTransform(Inkscape::Selection *selection) { if (selection && !selection->isEmpty()) { if (_check_replace_matrix.get_active()) { - Geom::Affine current (selection->itemList()[0]->transform); // take from the first item in selection + Geom::Affine current (selection->items()[0]->transform); // take from the first item in selection Geom::Affine new_displayed = current; @@ -735,7 +735,7 @@ void Transformation::applyPageMove(Inkscape::Selection *selection) if (_check_move_relative.get_active()) { // shift each object relatively to the previous one - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); if (selected.empty()) return; if (fabs(x) > 1e-6) { @@ -810,7 +810,7 @@ void Transformation::applyPageScale(Inkscape::Selection *selection) bool transform_stroke = prefs->getBool("/options/transform/stroke", true); bool preserve = prefs->getBool("/options/preservetransform/value", false); if (prefs->getBool("/dialogs/transformation/applyseparately")) { - std::vector tmp=selection->itemList(); + std::vector tmp= selection->items(); for(std::vector::const_iterator i=tmp.begin();i!=tmp.end();++i){ SPItem *item = *i; Geom::OptRect bbox_pref = item->desktopPreferredBounds(); @@ -874,7 +874,7 @@ void Transformation::applyPageRotate(Inkscape::Selection *selection) } if (prefs->getBool("/dialogs/transformation/applyseparately")) { - std::vector tmp=selection->itemList(); + std::vector tmp= selection->items(); for(std::vector::const_iterator i=tmp.begin();i!=tmp.end();++i){ SPItem *item = *i; sp_item_rotate_rel(item, Geom::Rotate (angle*M_PI/180.0)); @@ -894,7 +894,7 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (prefs->getBool("/dialogs/transformation/applyseparately")) { - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator i = items.begin();i!=items.end();++i){ SPItem *item = *i; @@ -996,7 +996,7 @@ void Transformation::applyPageTransform(Inkscape::Selection *selection) } if (_check_replace_matrix.get_active()) { - std::vector tmp=selection->itemList(); + std::vector tmp= selection->items(); for(std::vector::const_iterator i=tmp.begin();i!=tmp.end();++i){ SPItem *item = *i; item->set_item_transform(displayed); @@ -1149,7 +1149,7 @@ void Transformation::onReplaceMatrixToggled() double f = _scalar_transform_f.getValue(); Geom::Affine displayed (a, b, c, d, e, f); - Geom::Affine current = selection->itemList()[0]->transform; // take from the first item in selection + Geom::Affine current = selection->items()[0]->transform; // take from the first item in selection Geom::Affine new_displayed; if (_check_replace_matrix.get_active()) { diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index ab29471ed..7bbf588a7 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -2096,7 +2096,7 @@ void ContextMenu::ImageEdit(void) } #endif - std::vector itemlist=_desktop->selection->itemList(); + std::vector itemlist= _desktop->selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ Inkscape::XML::Node *ir = (*i)->getRepr(); const gchar *href = ir->attribute("xlink:href"); diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp index 74f2664fe..52ddd589c 100644 --- a/src/ui/tools/connector-tool.cpp +++ b/src/ui/tools/connector-tool.cpp @@ -1306,7 +1306,7 @@ void cc_selection_set_avoid(bool const set_avoid) int changes = 0; - std::vector l = selection->itemList(); + std::vector l = selection->items(); for(std::vector::const_iterator i=l.begin();i!=l.end(); ++i) { SPItem *item = *i; diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index cb7747b2b..a81161ea9 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -692,7 +692,7 @@ void EraserTool::set_to_accumulated() { } } } else { - toWorkOn = selection->itemList(); + toWorkOn = selection->items(); } wasSelection = true; } @@ -744,7 +744,7 @@ void EraserTool::set_to_accumulated() { } if ( !selection->isEmpty() ) { // If the item was not completely erased, track the new remainder. - std::vector nowSel(selection->itemList()); + std::vector nowSel(selection->items()); for (std::vector::const_iterator i2 = nowSel.begin();i2!=nowSel.end();++i2) { remainingItems.push_back(*i2); } diff --git a/src/ui/tools/gradient-tool.cpp b/src/ui/tools/gradient-tool.cpp index 9d8101cc4..e2bb0dc07 100644 --- a/src/ui/tools/gradient-tool.cpp +++ b/src/ui/tools/gradient-tool.cpp @@ -106,7 +106,7 @@ void GradientTool::selection_changed(Inkscape::Selection*) { if (selection == NULL) { return; } - guint n_obj = selection->itemList().size(); + guint n_obj = selection->items().size(); if (!drag->isNonEmpty() || selection->isEmpty()) return; @@ -492,9 +492,9 @@ bool GradientTool::root_handler(GdkEvent* event) { if (over_line) { // we take the first item in selection, because with doubleclick, the first click // always resets selection to the single object under cursor - sp_gradient_context_add_stop_near_point(this, SP_ITEM(selection->itemList().front()), this->mousepoint_doc, event->button.time); + sp_gradient_context_add_stop_near_point(this, SP_ITEM(selection->items().front()), this->mousepoint_doc, event->button.time); } else { - std::vector items=selection->itemList(); + std::vector items= selection->items(); for (std::vector::const_iterator i = items.begin();i!=items.end();++i) { SPItem *item = *i; SPGradientType new_type = (SPGradientType) prefs->getInt("/tools/gradient/newgradient", SP_GRADIENT_TYPE_LINEAR); @@ -897,7 +897,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta } else { // Starting from empty space: // Sort items so that the topmost comes last - std::vector items(selection->itemList()); + std::vector items(selection->items()); sort(items.begin(),items.end(),sp_item_repr_compare_position); // take topmost vector = sp_gradient_vector_for_object(document, desktop, SP_ITEM(items.back()), fill_or_stroke); @@ -907,7 +907,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta SPCSSAttr *css = sp_repr_css_attr_new(); sp_repr_css_set_property(css, "fill-opacity", "1.0"); - std::vector itemlist = selection->itemList(); + std::vector itemlist = selection->items(); for (std::vector::const_iterator i = itemlist.begin();i!=itemlist.end();++i) { //FIXME: see above @@ -931,7 +931,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta ec->_grdrag->local_change = true; // give the grab out-of-bounds values of xp/yp because we're already dragging // and therefore are already out of tolerance - ec->_grdrag->grabKnot (selection->itemList()[0], + ec->_grdrag->grabKnot (selection->items()[0], type == SP_GRADIENT_TYPE_LINEAR? POINT_LG_END : POINT_RG_R1, -1, // ignore number (though it is always 1) fill_or_stroke, 99999, 99999, etime); @@ -940,7 +940,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta // status text; we do not track coords because this branch is run once, not all the time // during drag - int n_objects = selection->itemList().size(); + int n_objects = selection->items().size(); rc.message_context->setF(Inkscape::NORMAL_MESSAGE, ngettext("Gradient for %d object; with Ctrl to snap angle", "Gradient for %d objects; with Ctrl to snap angle", n_objects), diff --git a/src/ui/tools/lpe-tool.cpp b/src/ui/tools/lpe-tool.cpp index 9bbc1ac20..ebcac2279 100644 --- a/src/ui/tools/lpe-tool.cpp +++ b/src/ui/tools/lpe-tool.cpp @@ -396,7 +396,7 @@ lpetool_create_measuring_items(LpeTool *lc, Inkscape::Selection *selection) SPCanvasGroup *tmpgrp = lc->desktop->getTempGroup(); gchar *arc_length; double lengthval; - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (SP_IS_PATH(*i)) { path = SP_PATH(*i); diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp index 47927667c..9aaa0c14e 100644 --- a/src/ui/tools/mesh-tool.cpp +++ b/src/ui/tools/mesh-tool.cpp @@ -103,7 +103,7 @@ void MeshTool::selection_changed(Inkscape::Selection* /*sel*/) { return; } - guint n_obj = selection->itemList().size(); + guint n_obj = selection->items().size(); if (!drag->isNonEmpty() || selection->isEmpty()) { return; @@ -467,10 +467,10 @@ bool MeshTool::root_handler(GdkEvent* event) { if (over_line) { // We take the first item in selection, because with doubleclick, the first click // always resets selection to the single object under cursor - sp_mesh_context_split_near_point(this, selection->itemList()[0], this->mousepoint_doc, event->button.time); + sp_mesh_context_split_near_point(this, selection->items()[0], this->mousepoint_doc, event->button.time); } else { // Create a new gradient with default coordinates. - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPItem *item = *i; SPGradientType new_type = SP_GRADIENT_TYPE_MESH; @@ -945,7 +945,7 @@ static void sp_mesh_end_drag(MeshTool &rc) { } else { // Starting from empty space: // Sort items so that the topmost comes last - std::vector items(selection->itemList()); + std::vector items(selection->items()); sort(items.begin(),items.end(),sp_item_repr_compare_position); // take topmost vector = sp_gradient_vector_for_object(document, desktop, SP_ITEM(items.back()), fill_or_stroke); @@ -955,7 +955,7 @@ static void sp_mesh_end_drag(MeshTool &rc) { SPCSSAttr *css = sp_repr_css_attr_new(); sp_repr_css_set_property(css, "fill-opacity", "1.0"); - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ //FIXME: see above @@ -972,7 +972,7 @@ static void sp_mesh_end_drag(MeshTool &rc) { // status text; we do not track coords because this branch is run once, not all the time // during drag - int n_objects = selection->itemList().size(); + int n_objects = selection->items().size(); rc.message_context->setF(Inkscape::NORMAL_MESSAGE, ngettext("Gradient for %d object; with Ctrl to snap angle", "Gradient for %d objects; with Ctrl to snap angle", n_objects), diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index 23aaf6bb1..f7a725794 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -407,7 +407,7 @@ void NodeTool::selection_changed(Inkscape::Selection *sel) { std::set shapes; - std::vector items=sel->itemList(); + std::vector items= sel->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPObject *obj = *i; @@ -444,7 +444,7 @@ void NodeTool::selection_changed(Inkscape::Selection *sel) { } _previous_selection = _current_selection; - _current_selection = sel->itemList(); + _current_selection = sel->items(); this->_multipath->setItems(shapes); this->update_tip(NULL); diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp index b5ec3d88e..676a41eaa 100644 --- a/src/ui/tools/select-tool.cpp +++ b/src/ui/tools/select-tool.cpp @@ -477,7 +477,7 @@ bool SelectTool::root_handler(GdkEvent* event) { case GDK_2BUTTON_PRESS: if (event->button.button == 1) { if (!selection->isEmpty()) { - SPItem *clicked_item = selection->itemList()[0]; + SPItem *clicked_item = selection->items()[0]; if (dynamic_cast(clicked_item) && !dynamic_cast(clicked_item)) { // enter group if it's not a 3D box desktop->setCurrentLayer(clicked_item); diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp index 9adaf3879..4f36a827f 100644 --- a/src/ui/tools/spray-tool.cpp +++ b/src/ui/tools/spray-tool.cpp @@ -210,7 +210,7 @@ void SprayTool::update_cursor(bool /*with_shift*/) { gchar *sel_message = NULL; if (!desktop->selection->isEmpty()) { - num = desktop->selection->itemList().size(); + num = desktop->selection->items().size(); sel_message = g_strdup_printf(ngettext("%i object selected","%i objects selected",num), num); } else { sel_message = g_strdup_printf("%s", _("Nothing selected")); @@ -591,7 +591,7 @@ static bool fit_item(SPDesktop *desktop, if (selection->isEmpty()) { return false; } - std::vector const items_selected(selection->itemList()); + std::vector const items_selected(selection->items()); std::vector items_down_erased; for (std::vector::const_iterator i=items_down.begin(); i!=items_down.end(); ++i) { SPItem *item_down = *i; @@ -1002,7 +1002,7 @@ static bool sp_spray_recursive(SPDesktop *desktop, SPItem *unionResult = NULL; // Previous union int i=1; - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator it=items.begin();it!=items.end(); ++it){ SPItem *item1 = *it; if (i == 1) { @@ -1170,7 +1170,7 @@ static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point double move_standard_deviation = get_move_standard_deviation(tc); { - std::vector const items(selection->itemList()); + std::vector const items(selection->items()); for(std::vector::const_iterator i=items.begin();i!=items.end(); ++i){ SPItem *item = *i; @@ -1299,7 +1299,7 @@ bool SprayTool::root_handler(GdkEvent* event) { guint num = 0; if (!desktop->selection->isEmpty()) { - num = desktop->selection->itemList().size(); + num = desktop->selection->items().size(); } if (num == 0) { this->message_context->flash(Inkscape::ERROR_MESSAGE, _("Nothing selected! Select objects to spray.")); diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 36fe26e76..6da6526bc 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -1158,7 +1158,7 @@ SPItem *sp_event_context_find_item(SPDesktop *desktop, Geom::Point const &p, if (select_under) { SPItem *selected_at_point = desktop->getItemFromListAtPointBottom( - desktop->selection->itemList(), p); + desktop->selection->items(), p); item = desktop->getItemAtPoint(p, into_groups, selected_at_point); if (item == NULL) { // we may have reached bottom, flip over to the top item = desktop->getItemAtPoint(p, into_groups, NULL); diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp index 39a7a3f0b..4da8060e2 100644 --- a/src/ui/tools/tweak-tool.cpp +++ b/src/ui/tools/tweak-tool.cpp @@ -153,7 +153,7 @@ void TweakTool::update_cursor (bool with_shift) { gchar *sel_message = NULL; if (!desktop->selection->isEmpty()) { - num = desktop->selection->itemList().size(); + num = desktop->selection->items().size(); sel_message = g_strdup_printf(ngettext("%i object selected","%i objects selected",num), num); } else { sel_message = g_strdup_printf("%s", _("Nothing selected")); @@ -1076,7 +1076,7 @@ sp_tweak_dilate (TweakTool *tc, Geom::Point event_p, Geom::Point p, Geom::Point double move_force = get_move_force(tc); double color_force = MIN(sqrt(path_force)/20.0, 1); - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end(); ++i){ SPItem *item = *i; @@ -1185,7 +1185,7 @@ bool TweakTool::root_handler(GdkEvent* event) { guint num = 0; if (!desktop->selection->isEmpty()) { - num = desktop->selection->itemList().size(); + num = desktop->selection->items().size(); } if (num == 0) { this->message_context->flash(Inkscape::ERROR_MESSAGE, _("Nothing selected! Select objects to tweak.")); diff --git a/src/ui/widget/style-subject.cpp b/src/ui/widget/style-subject.cpp index 5f697e420..059d1a4e3 100644 --- a/src/ui/widget/style-subject.cpp +++ b/src/ui/widget/style-subject.cpp @@ -58,7 +58,7 @@ Inkscape::Selection *StyleSubject::Selection::_getSelection() const { std::vector StyleSubject::Selection::list() { Inkscape::Selection *selection = _getSelection(); if(selection) { - return std::vector(selection->range().begin(), selection->range().end()); + return std::vector(selection->objects().begin(), selection->objects().end()); } return std::vector(); diff --git a/src/vanishing-point.cpp b/src/vanishing-point.cpp index 32ccbad93..a6be353f8 100644 --- a/src/vanishing-point.cpp +++ b/src/vanishing-point.cpp @@ -258,7 +258,7 @@ VanishingPoint::set_pos(Proj::Pt2 const &pt) { std::list VanishingPoint::selectedBoxes(Inkscape::Selection *sel) { std::list sel_boxes; - std::vector itemlist=sel->itemList(); + std::vector itemlist= sel->items(); for (std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i) { SPItem *item = *i; SPBox3D *box = dynamic_cast(item); @@ -397,7 +397,7 @@ VPDragger::VPsOfSelectedBoxes() { VanishingPoint *vp; // FIXME: Should we take the selection from the parent VPDrag? I guess it shouldn't make a difference. Inkscape::Selection *sel = SP_ACTIVE_DESKTOP->getSelection(); - std::vector itemlist=sel->itemList(); + std::vector itemlist= sel->items(); for (std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i) { SPItem *item = *i; SPBox3D *box = dynamic_cast(item); @@ -575,7 +575,7 @@ VPDrag::updateDraggers () g_return_if_fail (this->selection != NULL); - std::vector itemlist=this->selection->itemList(); + std::vector itemlist= this->selection->items(); for (std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i) { SPItem *item = *i; SPBox3D *box = dynamic_cast(item); @@ -607,7 +607,7 @@ VPDrag::updateLines () g_return_if_fail (this->selection != NULL); - std::vector itemlist=this->selection->itemList(); + std::vector itemlist= this->selection->items(); for (std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i) { SPItem *item = *i; SPBox3D *box = dynamic_cast(item); @@ -625,7 +625,7 @@ VPDrag::updateBoxHandles () // FIXME: Is there a way to update the knots without accessing the // (previously) statically linked function KnotHolder::update_knots? - std::vector sel = selection->itemList(); + std::vector sel = selection->items(); if (sel.empty()) return; // no selection diff --git a/src/widgets/arc-toolbar.cpp b/src/widgets/arc-toolbar.cpp index 7b872e8b1..5db714f85 100644 --- a/src/widgets/arc-toolbar.cpp +++ b/src/widgets/arc-toolbar.cpp @@ -97,7 +97,7 @@ sp_arctb_startend_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *v gchar* namespaced_name = g_strconcat("sodipodi:", value_name, NULL); bool modmade = false; - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_GENERICELLIPSE(item)) { @@ -163,7 +163,7 @@ static void sp_arctb_open_state_changed( EgeSelectOneAction *act, GObject *tbl ) bool modmade = false; if ( ege_select_one_action_get_active(act) != 0 ) { - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_GENERICELLIPSE(item)) { @@ -174,7 +174,7 @@ static void sp_arctb_open_state_changed( EgeSelectOneAction *act, GObject *tbl ) } } } else { - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_GENERICELLIPSE(item)) { @@ -264,7 +264,7 @@ static void sp_arc_toolbox_selection_changed(Inkscape::Selection *selection, GOb purge_repr_listener( tbl, tbl ); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_GENERICELLIPSE(item)) { diff --git a/src/widgets/connector-toolbar.cpp b/src/widgets/connector-toolbar.cpp index 733fb34e8..54b4be547 100644 --- a/src/widgets/connector-toolbar.cpp +++ b/src/widgets/connector-toolbar.cpp @@ -97,7 +97,7 @@ static void sp_connector_orthogonal_toggled( GtkToggleAction* act, GObject *tbl gchar *value = is_orthog ? orthog_str : polyline_str ; bool modmade = false; - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; @@ -144,7 +144,7 @@ static void connector_curvature_changed(GtkAdjustment *adj, GObject* tbl) g_ascii_dtostr(value, G_ASCII_DTOSTR_BUF_SIZE, newValue); bool modmade = false; - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; @@ -227,7 +227,7 @@ static void sp_connector_graph_layout(void) int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); - graphlayout(SP_ACTIVE_DESKTOP->getSelection()->itemList()); + graphlayout(SP_ACTIVE_DESKTOP->getSelection()->items()); prefs->setInt("/options/clonecompensation/value", saved_compensation); diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp index a96776894..8c3a0a0a8 100644 --- a/src/widgets/fill-style.cpp +++ b/src/widgets/fill-style.cpp @@ -476,7 +476,7 @@ void FillNStroke::updateFromPaint() SPDocument *document = desktop->getDocument(); Inkscape::Selection *selection = desktop->getSelection(); - std::vector const items = selection->itemList(); + std::vector const items = selection->items(); switch (psel->mode) { case SPPaintSelector::MODE_EMPTY: diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index a44e9962e..ab345b73f 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -116,7 +116,7 @@ void gr_apply_gradient(Inkscape::Selection *selection, GrDrag *drag, SPGradient } // If no drag or no dragger selected, act on selection - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ gr_apply_gradient_to_item(*i, gr, initialType, initialMode, initialMode); } @@ -216,7 +216,7 @@ void gr_get_dt_selected_gradient(Inkscape::Selection *selection, SPGradient *&gr { SPGradient *gradient = 0; - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i;// get the items gradient, not the getVector() version SPStyle *style = item->style; @@ -284,7 +284,7 @@ void gr_read_selection( Inkscape::Selection *selection, } // If no selected dragger, read desktop selection - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; SPStyle *style = item->style; diff --git a/src/widgets/mesh-toolbar.cpp b/src/widgets/mesh-toolbar.cpp index 3643ce00c..5d326253c 100644 --- a/src/widgets/mesh-toolbar.cpp +++ b/src/widgets/mesh-toolbar.cpp @@ -89,7 +89,7 @@ void ms_read_selection( Inkscape::Selection *selection, bool first = true; ms_type = SP_MESH_TYPE_COONS; - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; SPStyle *style = item->style; @@ -216,7 +216,7 @@ void ms_get_dt_selected_gradient(Inkscape::Selection *selection, SPMesh *&ms_sel { SPMesh *gradient = 0; - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i;// get the items gradient, not the getVector() version SPStyle *style = item->style; diff --git a/src/widgets/pencil-toolbar.cpp b/src/widgets/pencil-toolbar.cpp index 55127206c..34cebbe1b 100644 --- a/src/widgets/pencil-toolbar.cpp +++ b/src/widgets/pencil-toolbar.cpp @@ -240,7 +240,7 @@ static void sp_pencil_tb_defaults(GtkWidget * /*widget*/, GObject *obj) static void sp_simplify_flatten(GtkWidget * /*widget*/, GObject *obj) { SPDesktop *desktop = static_cast(g_object_get_data(obj, "desktop")); - std::vector selected = desktop->getSelection()->itemList(); + std::vector selected = desktop->getSelection()->items(); for (std::vector::iterator it(selected.begin()); it != selected.end(); ++it){ SPLPEItem* lpeitem = dynamic_cast(*it); if (lpeitem && lpeitem->hasPathEffect()){ @@ -285,7 +285,7 @@ static void sp_pencil_tb_tolerance_value_changed(GtkAdjustment *adj, GObject *tb gtk_adjustment_get_value(adj)); g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) ); SPDesktop *desktop = static_cast(g_object_get_data(tbl, "desktop")); - std::vector selected = desktop->getSelection()->itemList(); + std::vector selected = desktop->getSelection()->items(); for (std::vector::iterator it(selected.begin()); it != selected.end(); ++it){ SPLPEItem* lpeitem = dynamic_cast(*it); if (lpeitem && lpeitem->hasPathEffect()){ diff --git a/src/widgets/rect-toolbar.cpp b/src/widgets/rect-toolbar.cpp index bc27d003c..2ee38608b 100644 --- a/src/widgets/rect-toolbar.cpp +++ b/src/widgets/rect-toolbar.cpp @@ -106,7 +106,7 @@ static void sp_rtb_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const * bool modmade = false; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ if (SP_IS_RECT(*i)) { if (gtk_adjustment_get_value(adj) != 0) { @@ -243,7 +243,7 @@ static void sp_rect_toolbox_selection_changed(Inkscape::Selection *selection, GO } purge_repr_listener( tbl, tbl ); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ if (SP_IS_RECT(*i)) { n_selected++; diff --git a/src/widgets/spiral-toolbar.cpp b/src/widgets/spiral-toolbar.cpp index 7e7398091..8f5f10bf8 100644 --- a/src/widgets/spiral-toolbar.cpp +++ b/src/widgets/spiral-toolbar.cpp @@ -79,7 +79,7 @@ static void sp_spl_tb_value_changed(GtkAdjustment *adj, GObject *tbl, Glib::ustr gchar* namespaced_name = g_strconcat("sodipodi:", value_name.data(), NULL); bool modmade = false; - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){ SPItem *item = *i; if (SP_IS_SPIRAL(item)) { @@ -195,7 +195,7 @@ static void sp_spiral_toolbox_selection_changed(Inkscape::Selection *selection, purge_repr_listener( tbl, tbl ); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){ SPItem *item = *i; if (SP_IS_SPIRAL(item)) { diff --git a/src/widgets/star-toolbar.cpp b/src/widgets/star-toolbar.cpp index 982a3c854..fc8757162 100644 --- a/src/widgets/star-toolbar.cpp +++ b/src/widgets/star-toolbar.cpp @@ -83,7 +83,7 @@ static void sp_stb_magnitude_value_changed( GtkAdjustment *adj, GObject *dataKlu bool modmade = false; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { @@ -128,7 +128,7 @@ static void sp_stb_proportion_value_changed( GtkAdjustment *adj, GObject *dataKl bool modmade = false; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { @@ -185,7 +185,7 @@ static void sp_stb_sides_flat_state_changed( EgeSelectOneAction *act, GObject *d gtk_action_set_visible( prop_action, !flat ); } - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { @@ -224,7 +224,7 @@ static void sp_stb_rounded_value_changed( GtkAdjustment *adj, GObject *dataKludg bool modmade = false; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { @@ -264,7 +264,7 @@ static void sp_stb_randomized_value_changed( GtkAdjustment *adj, GObject *dataKl bool modmade = false; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { @@ -367,7 +367,7 @@ sp_star_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl) purge_repr_listener( tbl, tbl ); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index 84a6e77ad..7ed2c3180 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -515,7 +515,7 @@ void StrokeStyle::markerSelectCB(MarkerComboBox *marker_combo, StrokeStyle *spw, //spw->updateMarkerHist(which); Inkscape::Selection *selection = spw->desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (!SP_IS_SHAPE(item) || SP_IS_RECT(item)) { // can't set marker to rect, until it's converted to using @@ -988,7 +988,7 @@ StrokeStyle::updateLine() if (!sel || sel->isEmpty()) return; - std::vector const objects = sel->itemList(); + std::vector const objects = sel->items(); SPObject * const object = objects[0]; SPStyle * const style = object->style; @@ -1044,7 +1044,7 @@ StrokeStyle::scaleLine() SPDocument *document = desktop->getDocument(); Inkscape::Selection *selection = desktop->getSelection(); - std::vector items=selection->itemList(); + std::vector items= selection->items(); /* TODO: Create some standardized method */ SPCSSAttr *css = sp_repr_css_attr_new(); diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp index 23acb74af..3d08b04f1 100644 --- a/src/widgets/text-toolbar.cpp +++ b/src/widgets/text-toolbar.cpp @@ -378,7 +378,7 @@ static void sp_text_align_mode_changed( EgeSelectOneAction *act, GObject *tbl ) // move the x of all texts to preserve the same bbox Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){ if (SP_IS_TEXT(*i)) { SPItem *item = *i; @@ -560,7 +560,7 @@ static void sp_text_lineheight_value_changed( GtkAdjustment *adj, GObject *tbl ) // Only need to save for undo if a text item has been changed. Inkscape::Selection *selection = desktop->getSelection(); bool modmade = false; - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){ if (SP_IS_TEXT (*i)) { modmade = true; @@ -625,7 +625,7 @@ static void sp_text_lineheight_unit_changed( gpointer /* */, GObject *tbl ) SPDesktop *desktop = SP_ACTIVE_DESKTOP; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); // Convert between units if ((unit->abbr == "" || unit->abbr == "em") && old_unit == SP_CSS_UNIT_EX) { @@ -1120,7 +1120,7 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/ // Only flowed text can be justified, only normal text can be kerned... // Find out if we have flowed text now so we can use it several places gboolean isFlow = false; - std::vector itemlist=SP_ACTIVE_DESKTOP->getSelection()->itemList(); + std::vector itemlist= SP_ACTIVE_DESKTOP->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){ // const gchar* id = reinterpret_cast(items->data)->getId(); // std::cout << " " << id << std::endl; -- cgit v1.2.3 From a51df2ab1eb079b2588ccb9398440f403d11c34d Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Mon, 27 Jun 2016 16:59:48 +0200 Subject: Added more tests (bzr r14954.1.11) --- src/object-set.cpp | 28 +--------------------------- src/object-set.h | 26 +++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/object-set.cpp b/src/object-set.cpp index 627544a21..518ce15a3 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -174,13 +174,8 @@ bool ObjectSet::isEmpty() { return container.size() == 0; } - SPObject *ObjectSet::single() { - if (container.size() == 1) { - return *container.begin(); - } - - return nullptr; + return container.size() == 1 ? *container.begin() : nullptr; } SPItem *ObjectSet::singleItem() { @@ -257,27 +252,6 @@ void ObjectSet::set(SPObject *object) { // _emitSignals(); } -void ObjectSet::setList(const std::vector &objs) { - _clear(); - addList(objs); -} - -void ObjectSet::addList(const std::vector &objs) { - for (std::vector::const_iterator iter = objs.begin(); iter != objs.end(); ++iter) { - SPObject *obj = *iter; - if (!includes(obj)) { - add(obj); - } - } -} - -void ObjectSet::add(const std::vector::iterator& from, const std::vector::iterator& to) { - for(auto it = from; it != to; ++it) { - _add(*it); - } -} - - Geom::OptRect ObjectSet::bounds(SPItem::BBoxType type) const { return (type == SPItem::GEOMETRIC_BBOX) ? diff --git a/src/object-set.h b/src/object-set.h index 49a875562..29083863b 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include "sp-object.h" #include "sp-item.h" @@ -84,7 +86,12 @@ public: * \param from the begin iterator * \param to the end iterator */ - void add(const std::vector::iterator& from, const std::vector::iterator& to); + template + void add(InputIterator from, InputIterator to) { + for(auto it = from; it != to; ++it) { + _add(*it); + } + } /** * Removes an item from the set of selected objects. @@ -176,14 +183,27 @@ public: * * @param objs the objects to select */ - void setList(const std::vector &objs); + template + typename boost::enable_if, void>::type + setList(const std::vector &objs) { + _clear(); + addList(objs); + } /** * Adds the specified objects to selection, without deselecting first. * * @param objs the objects to select */ - void addList(std::vector const &objs); + template + typename boost::enable_if, void>::type + addList(const std::vector &objs) { + for (auto obj: objs) { + if (!includes(obj)) { + add(obj); + } + } + } /** Returns the bounding rectangle of the selection. */ Geom::OptRect bounds(SPItem::BBoxType type) const; -- cgit v1.2.3 From 22262f2db6747eb516283b92abcfd348c700911a Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Fri, 1 Jul 2016 20:57:32 +0200 Subject: Added xmlNodes as range function (bzr r14954.1.12) --- src/object-set.cpp | 9 ++----- src/object-set.h | 45 +++++++++++++++++++++++---------- src/selection-chemistry.cpp | 20 +++++++-------- src/splivarot.cpp | 2 +- src/ui/dialog/export.cpp | 9 +++---- src/ui/dialog/filter-effects-dialog.cpp | 2 +- 6 files changed, 50 insertions(+), 37 deletions(-) (limited to 'src') diff --git a/src/object-set.cpp b/src/object-set.cpp index 518ce15a3..1240e5198 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -15,6 +15,8 @@ #include "box3d.h" #include "persp3d.h" #include "preferences.h" +#include +#include namespace Inkscape { @@ -233,13 +235,6 @@ std::vector ObjectSet::items() { return result; } -std::vector ObjectSet::xmlNodes() { - std::vector list = items(); - std::vector result; - std::transform(list.begin(), list.end(), std::back_inserter(result), [](SPItem* item) { return item->getRepr(); }); - return result; -} - Inkscape::XML::Node *ObjectSet::singleRepr() { SPObject *obj = single(); return obj ? obj->getRepr() : nullptr; diff --git a/src/object-set.h b/src/object-set.h index 29083863b..ea6534350 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include #include #include @@ -39,6 +41,26 @@ class Node; struct hashed{}; struct random_access{}; +struct is_item { + bool operator()(SPObject* obj) { + return SP_IS_ITEM(obj); + } +}; + +struct object_to_item { + typedef SPItem* result_type; + SPItem* operator()(SPObject* obj) const { + return SP_ITEM(obj); + } +}; + +struct object_to_node { + typedef XML::Node* result_type; + XML::Node* operator()(SPObject* obj) const { + return obj->getRepr(); + } +}; + typedef boost::multi_index_container< SPObject*, boost::multi_index::indexed_by< @@ -56,21 +78,11 @@ typedef boost::any_range< SPObject* const&, std::ptrdiff_t> SPObjectRange; -typedef boost::any_range< - SPItem*, - boost::random_access_traversal_tag, - SPItem* const&, - std::ptrdiff_t> SPItemRange; - -typedef boost::any_range< - XML::Node*, - boost::random_access_traversal_tag, - XML::Node* const&, - std::ptrdiff_t> XMLNodeRange; - class ObjectSet { public: enum CompareSize {HORIZONTAL, VERTICAL, AREA}; + typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())) SPItemRange; + typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())) XMLNodeRange; ObjectSet() {}; virtual ~ObjectSet(); @@ -169,7 +181,11 @@ public: std::vector items(); /** Returns a list of the xml nodes of all selected objects. */ - std::vector xmlNodes(); + XMLNodeRange xmlNodes() { + return XMLNodeRange(container.get() + | boost::adaptors::filtered(is_item()) + | boost::adaptors::transformed(object_to_node())); + } /** * Returns a single selected object's xml node. @@ -255,6 +271,9 @@ protected: }; +typedef ObjectSet::SPItemRange SPItemRange; +typedef ObjectSet::XMLNodeRange XMLNodeRange; + } // namespace Inkscape #endif //INKSCAPE_PROTOTYPE_OBJECTSET_H diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index ded776fea..82f89c03a 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -454,7 +454,7 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone, bool duplicat desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to duplicate.")); return; } - std::vector reprs(selection->xmlNodes()); + std::vector reprs(selection->xmlNodes().begin(), selection->xmlNodes().end()); if(duplicateLayer){ reprs.clear(); @@ -763,7 +763,7 @@ void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop) return; } - std::vector p (selection->xmlNodes()); + std::vector p (selection->xmlNodes().begin(), selection->xmlNodes().end()); selection->clear(); @@ -1048,7 +1048,7 @@ void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *deskto return; } - std::vector rl(selection->xmlNodes()); + std::vector rl(selection->xmlNodes().begin(), selection->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_iterator l=rl.begin(); l!=rl.end();++l) { @@ -1132,7 +1132,7 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des return; } - std::vector rl(selection->xmlNodes()); + std::vector rl(selection->xmlNodes().begin(), selection->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_reverse_iterator l=rl.rbegin();l!=rl.rend();++l) { @@ -1722,8 +1722,8 @@ void sp_selection_remove_transform(SPDesktop *desktop) Inkscape::Selection *selection = desktop->getSelection(); - std::vector items = selection->xmlNodes(); - for (std::vector::const_iterator l=items.begin();l!=items.end() ;++l) { + auto items = selection->xmlNodes(); + for (auto l=items.begin();l!=items.end() ;++l) { (*l)->setAttribute("transform", NULL, false); } @@ -2603,7 +2603,7 @@ void sp_selection_clone(SPDesktop *desktop) return; } - std::vector reprs (selection->xmlNodes()); + std::vector reprs(selection->xmlNodes().begin(), selection->xmlNodes().end()); selection->clear(); @@ -3472,12 +3472,12 @@ void sp_selection_get_export_hints(Inkscape::Selection *selection, Glib::ustring return; } - std::vector const reprlst = selection->xmlNodes(); + auto reprlst = selection->xmlNodes(); bool filename_search = TRUE; bool xdpi_search = TRUE; bool ydpi_search = TRUE; - for (std::vector::const_iterator i=reprlst.begin();filename_search&&xdpi_search&&ydpi_search&&i!=reprlst.end();++i){ + for (auto i=reprlst.begin();filename_search&&xdpi_search&&ydpi_search&&i!=reprlst.end();++i){ gchar const *dpi_string; Inkscape::XML::Node *repr = *i; @@ -3765,7 +3765,7 @@ void sp_selection_set_clipgroup(SPDesktop *desktop) return; } - std::vector p(selection->xmlNodes()); + std::vector p(selection->xmlNodes().begin(), selection->xmlNodes().end()); sort(p.begin(),p.end(),sp_repr_compare_position_bool); diff --git a/src/splivarot.cpp b/src/splivarot.cpp index d4ef3f9c2..09d74a010 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -689,7 +689,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool } } else { // find out the bottom object - std::vector sorted(selection->xmlNodes()); + std::vector sorted(selection->xmlNodes().begin(), selection->xmlNodes().end()); sort(sorted.begin(),sorted.end(),sp_repr_compare_position_bool); diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 6d2842511..dbee80af9 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -820,8 +820,8 @@ void Export::onAreaToggled () one that's nice */ if (filename.empty()) { const gchar * id = "object"; - const std::vector reprlst = SP_ACTIVE_DESKTOP->getSelection()->xmlNodes(); - for(std::vector::const_iterator i=reprlst.begin(); reprlst.end() != i; ++i) { + auto reprlst = SP_ACTIVE_DESKTOP->getSelection()->xmlNodes(); + for(auto i=reprlst.begin(); reprlst.end() != i; ++i) { Inkscape::XML::Node * repr = *i; if (repr->attribute("id")) { id = repr->attribute("id"); @@ -1231,15 +1231,14 @@ void Export::onExport () break; } case SELECTION_SELECTION: { - std::vector reprlst; SPDocument * doc = SP_ACTIVE_DOCUMENT; bool modified = false; bool saved = DocumentUndo::getUndoSensitive(doc); DocumentUndo::setUndoSensitive(doc, false); - reprlst = desktop->getSelection()->xmlNodes(); + auto reprlst = desktop->getSelection()->xmlNodes(); - for(std::vector::const_iterator i=reprlst.begin(); reprlst.end() != i; ++i) { + for(auto i=reprlst.begin(); reprlst.end() != i; ++i) { Inkscape::XML::Node * repr = *i; const gchar * temp_string; Glib::ustring dir = Glib::path_get_dirname(filename.c_str()); diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index dfc19f3cc..ccba5a278 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -691,7 +691,7 @@ private: void select_svg_element(){ Inkscape::Selection* sel = _desktop->getSelection(); if (sel->isEmpty()) return; - Inkscape::XML::Node* node = sel->xmlNodes()[0]; + Inkscape::XML::Node* node = sel->xmlNodes().front(); if (!node || !node->matchAttributeName("id")) return; std::ostringstream xlikhref; -- cgit v1.2.3 From 058e95a59ccb2ab1748392acdfdbbffd516c9c81 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Mon, 11 Jul 2016 14:24:52 +0200 Subject: First part of new SPObject children list (bzr r14954.1.17) --- src/layer-fns.cpp | 36 +++++------- src/object-set.cpp | 18 +++--- src/selection-chemistry.cpp | 6 +- src/sp-item-group.cpp | 5 +- src/sp-item.cpp | 41 ++++--------- src/sp-mask.cpp | 15 ++--- src/sp-object.cpp | 124 ++++++++++++++++++++++----------------- src/sp-object.h | 29 +++++---- src/ui/widget/layer-selector.cpp | 20 ++----- src/uri-references.cpp | 2 +- 10 files changed, 139 insertions(+), 157 deletions(-) (limited to 'src') diff --git a/src/layer-fns.cpp b/src/layer-fns.cpp index 3e794a0a4..d149089db 100644 --- a/src/layer-fns.cpp +++ b/src/layer-fns.cpp @@ -36,11 +36,9 @@ bool is_layer(SPObject &object) { * @returns NULL if there are no further layers under a parent */ SPObject *next_sibling_layer(SPObject *layer) { - using std::find_if; - - return find_if( - layer->getNext(), NULL, &is_layer - ); + SPObject::ChildrenList &list = layer->parent->_children; + auto l = std::find_if(++list.iterator_to(*layer), list.end(), &is_layer); + return l != list.end() ? &*l : nullptr; } /** Finds the previous sibling layer for a \a layer @@ -50,11 +48,9 @@ SPObject *next_sibling_layer(SPObject *layer) { SPObject *previous_sibling_layer(SPObject *layer) { using Inkscape::Algorithms::find_last_if; - SPObject *sibling(find_last_if( - layer->parent->firstChild(), layer, &is_layer - )); - - return ( sibling != layer ) ? sibling : NULL; + SPObject::ChildrenList &list = layer->parent->_children; + auto l = find_last_if(list.begin(), list.iterator_to(*layer), &is_layer); + return l != list.iterator_to(*layer) ? &*(l) : nullptr; } /** Finds the first child of a \a layer @@ -62,16 +58,15 @@ SPObject *previous_sibling_layer(SPObject *layer) { * @returns NULL if layer has no sublayers */ SPObject *first_descendant_layer(SPObject *layer) { - using std::find_if; - - SPObject *first_descendant=NULL; - while (layer) { - layer = find_if( - layer->firstChild(), NULL, &is_layer - ); - if (layer) { + SPObject *first_descendant = nullptr; + while (true) { + auto tmp = std::find_if(layer->_children.begin(), layer->_children.end(), &is_layer); + if (tmp != layer->_children.end()) { first_descendant = layer; + } else { + break; } + layer = &*tmp; } return first_descendant; @@ -84,9 +79,8 @@ SPObject *first_descendant_layer(SPObject *layer) { SPObject *last_child_layer(SPObject *layer) { using Inkscape::Algorithms::find_last_if; - return find_last_if( - layer->firstChild(), NULL, &is_layer - ); + auto l = find_last_if(layer->_children.begin(), layer->_children.end(), &is_layer); + return l != layer->_children.end() ? &*l : nullptr; } SPObject *last_elder_layer(SPObject *root, SPObject *layer) { diff --git a/src/object-set.cpp b/src/object-set.cpp index 07f9ea0c8..b7b84e163 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -93,14 +93,14 @@ bool ObjectSet::_anyAncestorIsInSet(SPObject *object) { } void ObjectSet::_removeDescendantsFromSet(SPObject *object) { - for (auto& child: object->childList(false)) { - if (includes(child)) { - _remove(child); + for (auto& child: object->_children) { + if (includes(&child)) { + _remove(&child); // there is certainly no children of this child in the set continue; } - _removeDescendantsFromSet(child); + _removeDescendantsFromSet(&child); } } @@ -130,8 +130,8 @@ SPObject *ObjectSet::_getMutualAncestor(SPObject *object) { bool flag = true; while (o->parent != nullptr) { - for (auto &child: o->parent->childList(false)) { - if(child != o && !includes(child)) { + for (auto &child: o->parent->_children) { + if(&child != o && !includes(&child)) { flag = false; break; } @@ -147,9 +147,9 @@ SPObject *ObjectSet::_getMutualAncestor(SPObject *object) { void ObjectSet::_removeAncestorsFromSet(SPObject *object) { SPObject* o = object; while (o->parent != nullptr) { - for (auto &child: o->parent->childList(false)) { - if (child != o) { - _add(child); + for (auto &child: o->parent->_children) { + if (&child != o) { + _add(&child); } } if (includes(o->parent)) { diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 4b5c3f921..1f34f798d 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -4261,11 +4261,11 @@ static void itemtree_map(void (*f)(SPItem *, SPDesktop *), SPObject *root, SPDes f(item, desktop); } } - for ( SPObject::SiblingIterator iter = root->firstChild() ; iter ; ++iter ) { + for (auto& child: root->_children) { //don't recurse into locked layers - SPItem *item = dynamic_cast(&*iter); + SPItem *item = dynamic_cast(&child); if (!(item && desktop->isLayer(item) && item->isLocked())) { - itemtree_map(f, iter, desktop); + itemtree_map(f, &child, desktop); } } } diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 70d2bc732..d775e306f 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -297,9 +297,8 @@ Geom::OptRect SPGroup::bbox(Geom::Affine const &transform, SPItem::BBoxType bbox } void SPGroup::print(SPPrintContext *ctx) { - std::vector l=this->childList(false); - for(std::vector::const_iterator i=l.begin();i!=l.end();++i){ - SPObject *o = *i; + for(auto& child: _children){ + SPObject *o = &child; SPItem *item = dynamic_cast(o); if (item) { item->invoke_print(ctx); diff --git a/src/sp-item.cpp b/src/sp-item.cpp index 9fd6e8ecc..258a5cd14 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -308,50 +308,35 @@ bool is_item(SPObject const &object) { void SPItem::raiseToTop() { using Inkscape::Algorithms::find_last_if; - SPObject *topmost=find_last_if( - next, NULL, &is_item - ); - if (topmost) { + auto topmost = find_last_if(++parent->_children.iterator_to(*this), parent->_children.end(), &is_item); + if (topmost != parent->_children.end()) { getRepr()->parent()->changeOrder( getRepr(), topmost->getRepr() ); } } void SPItem::raiseOne() { - SPObject *next_higher=std::find_if( - next, NULL, &is_item - ); - if (next_higher) { + auto next_higher = std::find_if(++parent->_children.iterator_to(*this), parent->_children.end(), &is_item); + if (next_higher != parent->_children.end()) { Inkscape::XML::Node *ref = next_higher->getRepr(); getRepr()->parent()->changeOrder(getRepr(), ref); } } void SPItem::lowerOne() { - using Inkscape::Util::MutableList; - using Inkscape::Util::reverse_list; - - MutableList next_lower=std::find_if( - reverse_list( - parent->firstChild(), this - ), - MutableList(), - &is_item - ); - if (next_lower) { - ++next_lower; - Inkscape::XML::Node *ref = ( next_lower ? next_lower->getRepr() : NULL ); + using Inkscape::Algorithms::find_last_if; + + auto next_lower = find_last_if(parent->_children.begin(), parent->_children.iterator_to(*this), &is_item); + if (next_lower != parent->_children.iterator_to(*this)) { + next_lower--; + Inkscape::XML::Node *ref = next_lower->getRepr(); getRepr()->parent()->changeOrder(getRepr(), ref); } } void SPItem::lowerToBottom() { - using Inkscape::Algorithms::find_last_if; - using Inkscape::Util::MutableList; - using Inkscape::Util::reverse_list; - - SPObject * bottom=parent->firstChild(); - while(dynamic_cast(bottom) && dynamic_cast(bottom->next) && bottom!=this && !is_item(*(bottom->next))) bottom=bottom->next; - if (bottom && bottom != this) { + auto bottom = std::find_if(parent->_children.begin(), parent->_children.iterator_to(*this), &is_item); + if (bottom != parent->_children.iterator_to(*this)) { + bottom--; Inkscape::XML::Node *ref = bottom->getRepr() ; parent->getRepr()->changeOrder(getRepr(), ref); } diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index 3537c7bac..a36d8ef29 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -138,12 +138,8 @@ void SPMask::update(SPCtx* ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - std::vector children = this->childList(false); - for (std::vector::const_iterator child = children.begin();child != children.end();++child) { - sp_object_ref(*child); - } - - + std::vector children = this->childList(true); + for (std::vector::const_iterator child = children.begin();child != children.end();++child) { if (flags || ((*child)->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { (*child)->updateDisplay(ctx, flags); @@ -172,11 +168,8 @@ void SPMask::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - std::vector children = this->childList(false); - for (std::vector::const_iterator child = children.begin();child != children.end();++child) { - sp_object_ref(*child); - } - + std::vector children = this->childList(true); + for (std::vector::const_iterator child = children.begin();child != children.end();++child) { if (flags || ((*child)->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { (*child)->emitModified(flags); diff --git a/src/sp-object.cpp b/src/sp-object.cpp index d1659eedc..36957ab49 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -7,8 +7,9 @@ * Stephen Silver * Jon A. Cruz * Abhishek Sharma + * Adrian Boguszewski * - * Copyright (C) 1999-2008 authors + * Copyright (C) 1999-2016 authors * Copyright (C) 2001-2002 Ximian, Inc. * * Released under GNU GPL, read the file 'COPYING' for more information @@ -16,6 +17,7 @@ #include #include +#include #include "helper/sp-marshal.h" #include "xml/node-event-vector.h" @@ -398,13 +400,12 @@ void SPObject::changeCSS(SPCSSAttr *css, gchar const *attr) } std::vector SPObject::childList(bool add_ref, Action) { - std::vector l; - for ( SPObject *child = firstChild() ; child; child = child->getNext() ) { + std::vector l; + for (auto& child: _children) { if (add_ref) { - sp_object_ref (child); + sp_object_ref(&child); } - - l.push_back(child); + l.push_back(&child); } return l; @@ -467,9 +468,9 @@ void SPObject::requestOrphanCollection() { } void SPObject::_sendDeleteSignalRecursive() { - for (SPObject *child = firstChild(); child; child = child->getNext()) { - child->_delete_signal.emit(child); - child->_sendDeleteSignalRecursive(); + for (auto& child: _children) { + child._delete_signal.emit(&child); + child._sendDeleteSignalRecursive(); } } @@ -497,12 +498,12 @@ void SPObject::deleteObject(bool propagate, bool propagate_descendants) void SPObject::cropToObject(SPObject *except) { std::vector toDelete; - for ( SPObject *child = this->firstChild(); child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - if (child->isAncestorOf(except)) { - child->cropToObject(except); - } else if(child != except) { - toDelete.push_back(child); + for (auto& child: _children) { + if (SP_IS_ITEM(&child)) { + if (child.isAncestorOf(except)) { + child.cropToObject(except); + } else if(&child != except) { + toDelete.push_back(&child); } } } @@ -525,6 +526,12 @@ void SPObject::attach(SPObject *object, SPObject *prev) object->parent = this; this->_updateTotalHRefCount(object->_total_hrefcount); + auto it = _children.begin(); + if (prev != nullptr) { + it = ++_children.iterator_to(*prev); + } + _children.insert(it, *object); + SPObject *next; if (prev) { next = prev->next; @@ -541,43 +548,47 @@ void SPObject::attach(SPObject *object, SPObject *prev) object->xml_space.value = this->xml_space.value; } -void SPObject::reorder(SPObject *prev) -{ - //g_return_if_fail(object != NULL); - //g_return_if_fail(SP_IS_OBJECT(object)); - g_return_if_fail(this->parent != NULL); - g_return_if_fail(this != prev); - g_return_if_fail(!prev || SP_IS_OBJECT(prev)); - g_return_if_fail(!prev || prev->parent == this->parent); +void SPObject::reorder(SPObject* obj, SPObject* prev) { + g_return_if_fail(obj != nullptr); + g_return_if_fail(obj->parent); + g_return_if_fail(obj->parent == this); + g_return_if_fail(obj != prev); + g_return_if_fail(!prev || prev->parent == obj->parent); + + auto it = _children.begin(); + if (prev != nullptr) { + it = ++_children.iterator_to(*prev); + } + + _children.splice(it, _children, _children.iterator_to(*obj)); - SPObject *const parent=this->parent; SPObject *old_prev=NULL; - for ( SPObject *child = parent->children ; child && child != this ; + for ( SPObject *child = children ; child && child != obj ; child = child->next ) { old_prev = child; } - SPObject *next=this->next; + SPObject *next=obj->next; if (old_prev) { old_prev->next = next; } else { - parent->children = next; + children = next; } if (!next) { - parent->_last_child = old_prev; + _last_child = old_prev; } if (prev) { next = prev->next; - prev->next = this; + prev->next = obj; } else { - next = parent->children; - parent->children = this; + next = children; + children = obj; } - this->next = next; + obj->next = next; if (!next) { - parent->_last_child = this; + _last_child = obj; } } @@ -589,6 +600,7 @@ void SPObject::detach(SPObject *object) g_return_if_fail(SP_IS_OBJECT(object)); g_return_if_fail(object->parent == this); + _children.erase(_children.iterator_to(*object)); object->releaseReferences(); SPObject *prev=NULL; @@ -618,14 +630,14 @@ void SPObject::detach(SPObject *object) SPObject *SPObject::get_child_by_repr(Inkscape::XML::Node *repr) { g_return_val_if_fail(repr != NULL, NULL); - SPObject *result = 0; + SPObject *result = nullptr; - if ( _last_child && (_last_child->getRepr() == repr) ) { - result = _last_child; // optimization for common scenario + if (_children.size() > 0 && _children.back().getRepr() == repr) { + result = &_children.back(); // optimization for common scenario } else { - for ( SPObject *child = children ; child ; child = child->next ) { - if ( child->getRepr() == repr ) { - result = child; + for (auto& child: _children) { + if (child.getRepr() == repr) { + result = &child; break; } } @@ -656,10 +668,12 @@ void SPObject::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) void SPObject::release() { SPObject* object = this; - debug("id=%p, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object)); - while (object->children) { - object->detach(object->children); + auto tmp = _children | boost::adaptors::transformed([](SPObject& obj){return &obj;}); + std::vector toRelease(tmp.begin(), tmp.end()); + + for (auto& p: toRelease) { + object->detach(p); } } @@ -680,7 +694,7 @@ void SPObject::order_changed(Inkscape::XML::Node *child, Inkscape::XML::Node * / SPObject *ochild = object->get_child_by_repr(child); g_return_if_fail(ochild != NULL); SPObject *prev = new_ref ? object->get_child_by_repr(new_ref) : NULL; - ochild->reorder(prev); + object->reorder(ochild, prev); ochild->_position_changed_signal.emit(ochild); } @@ -1523,33 +1537,33 @@ bool SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool return true; } -SPObject * SPObject::findFirstChild(gchar const *tagname) const +SPObject* SPObject::findFirstChild(gchar const *tagname) const { - for (SPObject *child = children; child; child = child->next) + for (auto& child: const_cast(this)->_children) { - if (child->repr->type() == Inkscape::XML::ELEMENT_NODE && - !strcmp(child->repr->name(), tagname)) { - return child; + if (child.repr->type() == Inkscape::XML::ELEMENT_NODE && + !strcmp(child.repr->name(), tagname)) { + return &child; } } - return NULL; + return nullptr; } char* SPObject::textualContent() const { GString* text = g_string_new(""); - for (const SPObject *child = firstChild(); child; child = child->next) + for (auto& child: _children) { - Inkscape::XML::NodeType child_type = child->repr->type(); + Inkscape::XML::NodeType child_type = child.repr->type(); if (child_type == Inkscape::XML::ELEMENT_NODE) { - char* new_string = child->textualContent(); + char* new_string = child.textualContent(); g_string_append(text, new_string); g_free(new_string); } else if (child_type == Inkscape::XML::TEXT_NODE) { - g_string_append(text, child->repr->content()); + g_string_append(text, child.repr->content()); } } return g_string_free(text, FALSE); @@ -1566,8 +1580,8 @@ void SPObject::recursivePrintTree( unsigned level ) std::cout << " "; } std::cout << (getId()?getId():"No object id") << std::endl; - for (SPObject *child = children; child; child = child->next) { - child->recursivePrintTree( level+1 ); + for (auto& child: _children) { + child.recursivePrintTree(level + 1); } } diff --git a/src/sp-object.h b/src/sp-object.h index 70d3e5df5..6aa006283 100644 --- a/src/sp-object.h +++ b/src/sp-object.h @@ -6,8 +6,9 @@ * Lauris Kaplinski * Jon A. Cruz * Abhishek Sharma + * Adrian Boguszewski * - * Copyright (C) 1999-2002 authors + * Copyright (C) 1999-2016 authors * Copyright (C) 2001-2002 Ximian, Inc. * * Released under GNU GPL, read the file 'COPYING' for more information @@ -53,6 +54,7 @@ class SPObject; #include #include #include +#include #include "version.h" #include "util/forward-pointer-iterator.h" @@ -216,6 +218,7 @@ private: char *id; /* Our very own unique id */ Inkscape::XML::Node *repr; /* Our xml representation */ + public: int refCount; std::list hrefList; @@ -279,17 +282,9 @@ public: return object->parent; } }; - /// Switch containing next() method. - struct SiblingIteratorStrategy { - static SPObject const *next(SPObject const *object) { - return object->next; - } - }; typedef Inkscape::Util::ForwardPointerIterator ParentIterator; typedef Inkscape::Util::ForwardPointerIterator ConstParentIterator; - typedef Inkscape::Util::ForwardPointerIterator SiblingIterator; - typedef Inkscape::Util::ForwardPointerIterator ConstSiblingIterator; bool isSiblingOf(SPObject const *object) const { if (object == NULL) return false; @@ -317,7 +312,7 @@ public: */ SPObject *getPrev(); - bool hasChildren() const { return ( children != NULL ); } + bool hasChildren() const { return ( _children.size() > 0 ); } SPObject *firstChild() { return children; } SPObject const *firstChild() const { return children; } @@ -681,9 +676,9 @@ public: void attach(SPObject *object, SPObject *prev); /** - * In list of object's siblings, move object behind prev. + * In list of object's children, move object behind prev. */ - void reorder(SPObject *prev); + void reorder(SPObject* obj, SPObject *prev); /** * Remove object from parent's children, release and unref it. @@ -858,7 +853,17 @@ protected: virtual Inkscape::XML::Node* write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, unsigned int flags); + typedef boost::intrusive::list_member_hook<> ListHook; + ListHook _child_hook; public: + typedef boost::intrusive::list< + SPObject, + boost::intrusive::member_hook< + SPObject, + ListHook, + &SPObject::_child_hook + >> ChildrenList; + ChildrenList _children; virtual void read_content(); void recursivePrintTree(unsigned level = 0); // For debugging diff --git a/src/ui/widget/layer-selector.cpp b/src/ui/widget/layer-selector.cpp index 1a9ce617f..46a0b3547 100644 --- a/src/ui/widget/layer-selector.cpp +++ b/src/ui/widget/layer-selector.cpp @@ -19,6 +19,8 @@ #include "ui/dialog/layer-properties.h" #include +#include +#include #include "desktop.h" @@ -348,27 +350,17 @@ void LayerSelector::_buildSiblingEntries( unsigned depth, SPObject &parent, Inkscape::Util::List hierarchy ) { - using Inkscape::Util::List; using Inkscape::Util::rest; - using Inkscape::Util::reverse_list_in_place; - using Inkscape::Util::filter_list; - Inkscape::Util::List siblings( - reverse_list_in_place( - filter_list( - is_layer(_desktop), parent.firstChild(), NULL - ) - ) - ); + auto siblings = parent._children | boost::adaptors::filtered(is_layer(_desktop)) | boost::adaptors::reversed; SPObject *layer( hierarchy ? &*hierarchy : NULL ); - while (siblings) { - _buildEntry(depth, *siblings); - if ( &*siblings == layer ) { + for (auto& sib: siblings) { + _buildEntry(depth, sib); + if ( &sib == layer ) { _buildSiblingEntries(depth+1, *layer, rest(hierarchy)); } - ++siblings; } } diff --git a/src/uri-references.cpp b/src/uri-references.cpp index db46a156f..078834131 100644 --- a/src/uri-references.cpp +++ b/src/uri-references.cpp @@ -92,7 +92,7 @@ bool URIReference::_acceptObject(SPObject *obj) const g_warning("cloned object with no known type\n"); return false; } - for (int i = positions.size() - 2; i >= 0; i--) + for (int i = (int) (positions.size() - 2); i >= 0; i--) owner = owner->childList(false)[positions[i]]; } // once we have the "original" object (hopefully) we look at who is referencing it -- cgit v1.2.3 From d1947e768272c703674129d5c583204ff2b59251 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 13 Jul 2016 13:36:19 +0200 Subject: Second part of new SPObject children list (bzr r14954.1.19) --- src/box3d.cpp | 20 ++-- src/conn-avoid-ref.cpp | 18 ++-- src/desktop-style.cpp | 25 ++--- src/document.cpp | 96 +++++++++---------- src/extension/internal/cairo-render-context.cpp | 23 +++-- src/extension/internal/cairo-renderer.cpp | 8 +- src/extension/internal/emf-print.cpp | 14 ++- src/extension/internal/javafx-out.cpp | 8 +- src/extension/internal/pov-out.cpp | 4 +- src/file.cpp | 16 ++-- src/filter-chemistry.cpp | 14 ++- src/gradient-chemistry.cpp | 20 ++-- src/gradient-drag.cpp | 4 +- src/helper/pixbuf-ops.cpp | 4 +- src/helper/png-write.cpp | 4 +- src/helper/stock-items.cpp | 30 +++--- src/id-clash.cpp | 8 +- src/libnrtype/font-lister.cpp | 4 +- src/live_effects/lpe-perspective_path.cpp | 10 +- src/main.cpp | 4 +- src/object-snapper.cpp | 8 +- src/object-test.h | 1 - src/persp3d.cpp | 13 +-- src/selection-chemistry.cpp | 43 +++++---- src/sp-clippath.cpp | 30 +++--- src/sp-defs.cpp | 14 +-- src/sp-filter.cpp | 8 +- src/sp-flowdiv.cpp | 120 ++++++++++++------------ src/sp-flowregion.cpp | 53 +++++------ src/sp-flowtext.cpp | 54 +++++------ src/sp-gradient.cpp | 41 ++++---- src/sp-hatch.cpp | 17 ++-- src/sp-item-group.cpp | 61 ++++++------ src/sp-item.cpp | 22 ++--- src/sp-mask.cpp | 12 +-- src/sp-mesh-array.cpp | 34 +++---- src/sp-namedview.cpp | 12 +-- src/sp-object-group.cpp | 8 +- src/sp-object.cpp | 22 +---- src/sp-object.h | 9 +- src/sp-pattern.cpp | 30 +++--- src/sp-root.cpp | 15 +-- src/sp-switch.cpp | 7 +- src/sp-text.cpp | 54 +++++------ src/sp-tref.cpp | 6 +- src/sp-tspan.cpp | 80 ++++++++-------- src/splivarot.cpp | 6 +- src/text-chemistry.cpp | 6 +- src/text-editing.cpp | 53 ++++++----- src/ui/clipboard.cpp | 4 +- src/ui/dialog/clonetiler.cpp | 24 ++--- src/ui/dialog/filter-effects-dialog.cpp | 23 ++--- src/ui/dialog/find.cpp | 10 +- src/ui/dialog/font-substitution.cpp | 2 +- src/ui/dialog/objects.cpp | 6 +- src/ui/dialog/spellcheck.cpp | 12 +-- src/ui/dialog/symbols.cpp | 8 +- src/ui/tools/box3d-tool.cpp | 4 +- src/ui/tools/connector-tool.cpp | 6 +- src/ui/tools/tweak-tool.cpp | 16 ++-- src/widgets/gradient-toolbar.cpp | 12 +-- src/widgets/gradient-vector.cpp | 28 +++--- src/widgets/stroke-marker-selector.cpp | 6 +- 63 files changed, 669 insertions(+), 665 deletions(-) (limited to 'src') diff --git a/src/box3d.cpp b/src/box3d.cpp index c4c2728e4..0a33ee306 100644 --- a/src/box3d.cpp +++ b/src/box3d.cpp @@ -259,8 +259,8 @@ void box3d_position_set(SPBox3D *box) { /* This draws the curve and calls requestDisplayUpdate() for each side (the latter is done in box3d_side_position_set() to avoid update conflicts with the parent box) */ - for ( SPObject *obj = box->firstChild(); obj; obj = obj->getNext() ) { - Box3DSide *side = dynamic_cast(obj); + for (auto& obj: box->_children) { + Box3DSide *side = dynamic_cast(&obj); if (side) { box3d_side_position_set(side); } @@ -275,8 +275,8 @@ Geom::Affine SPBox3D::set_transform(Geom::Affine const &xform) { gdouble const sw = hypot(ret[0], ret[1]); gdouble const sh = hypot(ret[2], ret[3]); - for ( SPObject *child = firstChild(); child; child = child->getNext() ) { - SPItem *childitem = dynamic_cast(child); + for (auto& child: _children) { + SPItem *childitem = dynamic_cast(&child); if (childitem) { // Adjust stroke width childitem->adjust_stroke(sqrt(fabs(sw * sh))); @@ -1074,8 +1074,8 @@ box3d_recompute_z_orders (SPBox3D *box) { static std::map box3d_get_sides(SPBox3D *box) { std::map sides; - for ( SPObject *obj = box->firstChild(); obj; obj = obj->getNext() ) { - Box3DSide *side = dynamic_cast(obj); + for (auto& obj: box->_children) { + Box3DSide *side = dynamic_cast(&obj); if (side) { sides[Box3D::face_to_int(side->getFaceId())] = side; } @@ -1217,8 +1217,8 @@ static void box3d_extract_boxes_rec(SPObject *obj, std::list &boxes) if (box) { boxes.push_back(box); } else if (dynamic_cast(obj)) { - for ( SPObject *child = obj->firstChild(); child; child = child->getNext() ) { - box3d_extract_boxes_rec(child, boxes); + for (auto& child: obj->_children) { + box3d_extract_boxes_rec(&child, boxes); } } } @@ -1276,8 +1276,8 @@ SPGroup *box3d_convert_to_group(SPBox3D *box) // create a new group and add the sides (converted to ordinary paths) as its children Inkscape::XML::Node *grepr = xml_doc->createElement("svg:g"); - for ( SPObject *obj = box->firstChild(); obj; obj = obj->getNext() ) { - Box3DSide *side = dynamic_cast(obj); + for (auto& obj: box->_children) { + Box3DSide *side = dynamic_cast(&obj); if (side) { Inkscape::XML::Node *repr = box3d_side_convert_to_path(side); grepr->appendChild(repr); diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp index 9190fe633..638ba48e3 100644 --- a/src/conn-avoid-ref.cpp +++ b/src/conn-avoid-ref.cpp @@ -334,19 +334,19 @@ static Avoid::Polygon avoid_item_poly(SPItem const *item) std::vector get_avoided_items(std::vector &list, SPObject *from, SPDesktop *desktop, bool initialised) { - for (SPObject *child = from->firstChild() ; child != NULL; child = child->next ) { - if (SP_IS_ITEM(child) && - !desktop->isLayer(SP_ITEM(child)) && - !SP_ITEM(child)->isLocked() && - !desktop->itemIsHidden(SP_ITEM(child)) && - (!initialised || SP_ITEM(child)->avoidRef->shapeRef) + for (auto& child: from->_children) { + if (SP_IS_ITEM(&child) && + !desktop->isLayer(SP_ITEM(&child)) && + !SP_ITEM(&child)->isLocked() && + !desktop->itemIsHidden(SP_ITEM(&child)) && + (!initialised || SP_ITEM(&child)->avoidRef->shapeRef) ) { - list.push_back(SP_ITEM(child)); + list.push_back(SP_ITEM(&child)); } - if (SP_IS_ITEM(child) && desktop->isLayer(SP_ITEM(child))) { - list = get_avoided_items(list, child, desktop, initialised); + if (SP_IS_ITEM(&child) && desktop->isLayer(SP_ITEM(&child))) { + list = get_avoided_items(list, &child, desktop, initialised); } } diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp index 885d17c21..a52ab3d76 100644 --- a/src/desktop-style.cpp +++ b/src/desktop-style.cpp @@ -163,17 +163,17 @@ sp_desktop_apply_css_recursive(SPObject *o, SPCSSAttr *css, bool skip_lines) return; } - for ( SPObject *child = o->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: o->_children) { if (sp_repr_css_property(css, "opacity", NULL) != NULL) { // Unset properties which are accumulating and thus should not be set recursively. // For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group. SPCSSAttr *css_recurse = sp_repr_css_attr_new(); sp_repr_css_merge(css_recurse, css); sp_repr_css_set_property(css_recurse, "opacity", NULL); - sp_desktop_apply_css_recursive(child, css_recurse, skip_lines); + sp_desktop_apply_css_recursive(&child, css_recurse, skip_lines); sp_repr_css_attr_unref(css_recurse); } else { - sp_desktop_apply_css_recursive(child, css, skip_lines); + sp_desktop_apply_css_recursive(&child, css, skip_lines); } } } @@ -1714,10 +1714,11 @@ objects_query_blend (const std::vector &objects, SPStyle *style_res) int blendcount = 0; // determine whether filter is simple (blend and/or blur) or complex - for(SPObject *primitive_obj = style->getFilter()->children; - primitive_obj && dynamic_cast(primitive_obj); - primitive_obj = primitive_obj->next) { - SPFilterPrimitive *primitive = dynamic_cast(primitive_obj); + for(auto& primitive_obj: style->getFilter()->_children) { + SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); + if (!primitive) { + break; + } if (dynamic_cast(primitive)) { ++blendcount; } else if (dynamic_cast(primitive)) { @@ -1730,10 +1731,12 @@ objects_query_blend (const std::vector &objects, SPStyle *style_res) // simple filter if(blurcount == 1 || blendcount == 1) { - for(SPObject *primitive_obj = style->getFilter()->children; - primitive_obj && dynamic_cast(primitive_obj); - primitive_obj = primitive_obj->next) { - SPFeBlend *spblend = dynamic_cast(primitive_obj); + for(auto& primitive_obj: style->getFilter()->_children) { + SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); + if (!primitive) { + break; + } + SPFeBlend *spblend = dynamic_cast(&primitive_obj); if (spblend) { blend = spblend->blend_mode; } diff --git a/src/document.cpp b/src/document.cpp index 902dabbc3..3dcec4795 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -257,9 +257,9 @@ void SPDocument::setCurrentPersp3D(Persp3D * const persp) { void SPDocument::getPerspectivesInDefs(std::vector &list) const { - for (SPObject *i = root->defs->firstChild(); i; i = i->getNext() ) { - if (SP_IS_PERSP3D(i)) { - list.push_back(SP_PERSP3D(i)); + for (auto& i: root->defs->_children) { + if (SP_IS_PERSP3D(&i)) { + list.push_back(SP_PERSP3D(&i)); } } } @@ -1256,12 +1256,12 @@ static std::vector &find_items_in_area(std::vector &s, SPGroup { g_return_val_if_fail(SP_IS_GROUP(group), s); - for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) { - if ( SP_IS_ITEM(o) ) { - if (SP_IS_GROUP(o) && (SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) { - s = find_items_in_area(s, SP_GROUP(o), dkey, area, test, take_insensitive, into_groups); + for (auto& o: group->_children) { + if ( SP_IS_ITEM(&o) ) { + if (SP_IS_GROUP(&o) && (SP_GROUP(&o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) { + s = find_items_in_area(s, SP_GROUP(&o), dkey, area, test, take_insensitive, into_groups); } else { - SPItem *child = SP_ITEM(o); + SPItem *child = SP_ITEM(&o); Geom::OptRect box = child->desktopVisualBounds(); if ( box && test(area, *box) && (take_insensitive || child->isVisibleAndUnlocked(dkey))) { s.push_back(child); @@ -1278,17 +1278,16 @@ Returns true if an item is among the descendants of group (recursively). */ static bool item_is_in_group(SPItem *item, SPGroup *group) { - bool inGroup = false; - for ( SPObject *o = group->firstChild() ; o && !inGroup; o = o->getNext() ) { - if ( SP_IS_ITEM(o) ) { - if (SP_ITEM(o) == item) { - inGroup = true; - } else if ( SP_IS_GROUP(o) ) { - inGroup = item_is_in_group(item, SP_GROUP(o)); + for (auto& o: group->_children) { + if ( SP_IS_ITEM(&o) ) { + if (SP_ITEM(&o) == item) { + return true; + } else if (SP_IS_GROUP(&o) && item_is_in_group(item, SP_GROUP(&o))) { + return true; } } } - return inGroup; + return false; } SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *group, std::vector const &list,Geom::Point const &p, bool take_insensitive) @@ -1299,21 +1298,24 @@ SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *gro Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0); - for ( SPObject *o = group->firstChild() ; o && !bottomMost; o = o->getNext() ) { - if ( SP_IS_ITEM(o) ) { - SPItem *item = SP_ITEM(o); + for (auto& o: group->_children) { + if (bottomMost) { + break; + } + if (SP_IS_ITEM(&o)) { + SPItem *item = SP_ITEM(&o); Inkscape::DrawingItem *arenaitem = item->get_arenaitem(dkey); arenaitem->drawing().update(); if (arenaitem && arenaitem->pick(p, delta, 1) != NULL && (take_insensitive || item->isVisibleAndUnlocked(dkey))) { - if (find(list.begin(),list.end(),item)!=list.end() ) { + if (find(list.begin(), list.end(), item) != list.end()) { bottomMost = item; } } - if ( !bottomMost && SP_IS_GROUP(o) ) { + if (!bottomMost && SP_IS_GROUP(&o)) { // return null if not found: - bottomMost = getItemFromListAtPointBottom(dkey, SP_GROUP(o), list, p, take_insensitive); + bottomMost = getItemFromListAtPointBottom(dkey, SP_GROUP(&o), list, p, take_insensitive); } } } @@ -1326,15 +1328,15 @@ The list can be persisted, which improves "find at multiple points" speed. */ void SPDocument::build_flat_item_list(unsigned int dkey, SPGroup *group, gboolean into_groups) const { - for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) { - if (!SP_IS_ITEM(o)) { + for (auto& o: group->_children) { + if (!SP_IS_ITEM(&o)) { continue; } - if (SP_IS_GROUP(o) && (SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) { - build_flat_item_list(dkey, SP_GROUP(o), into_groups); + if (SP_IS_GROUP(&o) && (SP_GROUP(&o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) { + build_flat_item_list(dkey, SP_GROUP(&o), into_groups); } else { - SPItem *child = SP_ITEM(o); + SPItem *child = SP_ITEM(&o); if (child->isVisibleAndUnlocked(dkey)) { _node_cache.push_front(child); @@ -1390,18 +1392,18 @@ static SPItem *find_group_at_point(unsigned int dkey, SPGroup *group, Geom::Poin Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0); - for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) { - if (!SP_IS_ITEM(o)) { + for (auto& o: group->_children) { + if (!SP_IS_ITEM(&o)) { continue; } - if (SP_IS_GROUP(o) && SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER) { - SPItem *newseen = find_group_at_point(dkey, SP_GROUP(o), p); + if (SP_IS_GROUP(&o) && SP_GROUP(&o)->effectiveLayerMode(dkey) == SPGroup::LAYER) { + SPItem *newseen = find_group_at_point(dkey, SP_GROUP(&o), p); if (newseen) { seen = newseen; } } - if (SP_IS_GROUP(o) && SP_GROUP(o)->effectiveLayerMode(dkey) != SPGroup::LAYER ) { - SPItem *child = SP_ITEM(o); + if (SP_IS_GROUP(&o) && SP_GROUP(&o)->effectiveLayerMode(dkey) != SPGroup::LAYER ) { + SPItem *child = SP_ITEM(&o); Inkscape::DrawingItem *arenaitem = child->get_arenaitem(dkey); arenaitem->drawing().update(); @@ -1595,8 +1597,8 @@ static unsigned int count_objects_recursive(SPObject *obj, unsigned int count) { count++; // obj itself - for ( SPObject *i = obj->firstChild(); i; i = i->getNext() ) { - count = count_objects_recursive(i, count); + for (auto& i: obj->_children) { + count = count_objects_recursive(&i, count); } return count; @@ -1621,13 +1623,13 @@ static unsigned int objects_in_document(SPDocument *document) static void vacuum_document_recursive(SPObject *obj) { if (SP_IS_DEFS(obj)) { - for ( SPObject *def = obj->firstChild(); def; def = def->getNext()) { + for (auto& def: obj->_children) { // fixme: some inkscape-internal nodes in the future might not be collectable - def->requestOrphanCollection(); + def.requestOrphanCollection(); } } else { - for ( SPObject *i = obj->firstChild(); i; i = i->getNext() ) { - vacuum_document_recursive(i); + for (auto& i: obj->_children) { + vacuum_document_recursive(&i); } } } @@ -1755,14 +1757,14 @@ void SPDocument::importDefsNode(SPDocument *source, Inkscape::XML::Node *defs, I // Prevent duplicates of solid swatches by checking if equivalent swatch already exists if (src && SP_IS_GRADIENT(src)) { SPGradient *s_gr = SP_GRADIENT(src); - for (SPObject *trg = this->getDefs()->firstChild() ; trg ; trg = trg->getNext()) { - if (trg && (src != trg) && SP_IS_GRADIENT(trg)) { - SPGradient *t_gr = SP_GRADIENT(trg); + for (auto& trg: getDefs()->_children) { + if (&trg && (src != &trg) && SP_IS_GRADIENT(&trg)) { + SPGradient *t_gr = SP_GRADIENT(&trg); if (t_gr && s_gr->isEquivalent(t_gr)) { // Change object references to the existing equivalent gradient - Glib::ustring newid = trg->getId(); + Glib::ustring newid = trg.getId(); if(newid != defid){ // id could be the same if it is a second paste into the same document - change_def_references(src, trg); + change_def_references(src, &trg); } gchar *longid = g_strdup_printf("%s_%9.9d", DuplicateDefString.c_str(), stagger++); def->setAttribute("id", longid ); @@ -1826,9 +1828,9 @@ void SPDocument::importDefsNode(SPDocument *source, Inkscape::XML::Node *defs, I id.erase( pos ); // Check that it really is a duplicate - for (SPObject *trg = this->getDefs()->firstChild() ; trg ; trg = trg->getNext()) { - if( trg && SP_IS_SYMBOL(trg) && src != trg ) { - std::string id2 = trg->getRepr()->attribute("id"); + for (auto& trg: getDefs()->_children) { + if(&trg && SP_IS_SYMBOL(&trg) && src != &trg ) { + std::string id2 = trg.getRepr()->attribute("id"); if( !id.compare( id2 ) ) { duplicate = true; diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp index 5d8b0e076..bedf2fa7f 100644 --- a/src/extension/internal/cairo-render-context.cpp +++ b/src/extension/internal/cairo-render-context.cpp @@ -986,13 +986,12 @@ void CairoRenderContext::popState(void) static bool pattern_hasItemChildren(SPPattern *pat) { - bool hasItems = false; - for ( SPObject *child = pat->firstChild() ; child && !hasItems; child = child->getNext() ) { - if (SP_IS_ITEM (child)) { - hasItems = true; + for (auto& child: pat->_children) { + if (SP_IS_ITEM (&child)) { + return true; } } - return hasItems; + return false; } cairo_pattern_t* @@ -1087,10 +1086,10 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver // show items and render them for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i && SP_IS_OBJECT(pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children - for ( SPObject *child = pat_i->firstChild() ; child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - SP_ITEM(child)->invoke_show(drawing, dkey, SP_ITEM_REFERENCE_FLAGS); - _renderer->renderItem(pattern_ctx, SP_ITEM(child)); + for (auto& child: pat_i->_children) { + if (SP_IS_ITEM(&child)) { + SP_ITEM(&child)->invoke_show(drawing, dkey, SP_ITEM_REFERENCE_FLAGS); + _renderer->renderItem(pattern_ctx, SP_ITEM(&child)); } } break; // do not go further up the chain if children are found @@ -1116,9 +1115,9 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver // hide all items for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i && SP_IS_OBJECT(pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children - for ( SPObject *child = pat_i->firstChild() ; child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - SP_ITEM(child)->invoke_hide(dkey); + for (auto& child: pat_i->_children) { + if (SP_IS_ITEM(&child)) { + SP_ITEM(&child)->invoke_hide(dkey); } } break; // do not go further up the chain if children are found diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 5dc20ab06..088eaf11d 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -741,8 +741,8 @@ CairoRenderer::applyClipPath(CairoRenderContext *ctx, SPClipPath const *cp) TRACE(("BEGIN clip\n")); SPObject const *co = cp; - for ( SPObject const *child = co->firstChild() ; child; child = child->getNext() ) { - SPItem const *item = dynamic_cast(child); + for (auto& child: co->_children) { + SPItem const *item = dynamic_cast(&child); if (item) { // combine transform of the item in clippath and the item using clippath: @@ -800,8 +800,8 @@ CairoRenderer::applyMask(CairoRenderContext *ctx, SPMask const *mask) TRACE(("BEGIN mask\n")); SPObject const *co = mask; - for ( SPObject const *child = co->firstChild() ; child; child = child->getNext() ) { - SPItem const *item = dynamic_cast(child); + for (auto& child: co->_children) { + SPItem const *item = dynamic_cast(&child); if (item) { // TODO fix const correctness: renderItem(ctx, const_cast(item)); diff --git a/src/extension/internal/emf-print.cpp b/src/extension/internal/emf-print.cpp index 9f3b5475f..c0c086c7a 100644 --- a/src/extension/internal/emf-print.cpp +++ b/src/extension/internal/emf-print.cpp @@ -1042,8 +1042,12 @@ void PrintEmf::do_clip_if_present(SPStyle const *style){ /* find the clipping path */ Geom::PathVector combined_pathvector; Geom::Affine tfc; // clipping transform, generally not the same as item transform - for(item = SP_ITEM(scp->firstChild()); item; item=SP_ITEM(item->getNext())){ - if (SP_IS_GROUP(item)) { // not implemented + for (auto& child: scp->_children) { + item = SP_ITEM(&child); + if (!item) { + break; + } + if (SP_IS_GROUP(item)) { // not implemented // return sp_group_render(item); combined_pathvector = merge_PathVector_with_group(combined_pathvector, item, tfc); } else if (SP_IS_SHAPE(item)) { @@ -1081,7 +1085,11 @@ Geom::PathVector PrintEmf::merge_PathVector_with_group(Geom::PathVector const &c new_combined_pathvector = combined_pathvector; SPGroup *group = SP_GROUP(item); Geom::Affine tfc = item->transform * transform; - for(SPItem *item = SP_ITEM(group->firstChild()); item; item=SP_ITEM(item->getNext())){ + for (auto& child: group->_children) { + item = SP_ITEM(&child); + if (!item) { + break; + } if (SP_IS_GROUP(item)) { new_combined_pathvector = merge_PathVector_with_group(new_combined_pathvector, item, tfc); // could be endlessly recursive on a badly formed SVG } else if (SP_IS_SHAPE(item)) { diff --git a/src/extension/internal/javafx-out.cpp b/src/extension/internal/javafx-out.cpp index 386bde1d6..51608e4fa 100644 --- a/src/extension/internal/javafx-out.cpp +++ b/src/extension/internal/javafx-out.cpp @@ -732,9 +732,9 @@ bool JavaFXOutput::doTreeRecursive(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (SPObject *child = obj->firstChild() ; child ; child = child->next) + for (auto &child: obj->_children) { - if (!doTreeRecursive(doc, child)) { + if (!doTreeRecursive(doc, &child)) { return false; } } @@ -804,9 +804,9 @@ bool JavaFXOutput::doBody(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (SPObject *child = obj->firstChild() ; child ; child = child->next) + for (auto &child: obj->_children) { - if (!doBody(doc, child)) { + if (!doBody(doc, &child)) { return false; } } diff --git a/src/extension/internal/pov-out.cpp b/src/extension/internal/pov-out.cpp index bd2168b68..08f533010 100644 --- a/src/extension/internal/pov-out.cpp +++ b/src/extension/internal/pov-out.cpp @@ -479,9 +479,9 @@ bool PovOutput::doTreeRecursive(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (SPObject *child = obj->firstChild() ; child ; child = child->next) + for (auto &child: obj->_children) { - if (!doTreeRecursive(doc, child)) + if (!doTreeRecursive(doc, &child)) return false; } diff --git a/src/file.cpp b/src/file.cpp index 650ce5d0f..11e5f0a42 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -1204,8 +1204,8 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, // Count the number of top-level items in the imported document. guint items_count = 0; - for ( SPObject *child = doc->getRoot()->firstChild(); child; child = child->getNext()) { - if (SP_IS_ITEM(child)) { + for (auto& child: doc->getRoot()->_children) { + if (SP_IS_ITEM(&child)) { items_count++; } } @@ -1234,9 +1234,9 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, // Construct a new object representing the imported image, // and insert it into the current document. SPObject *new_obj = NULL; - for ( SPObject *child = doc->getRoot()->firstChild(); child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - Inkscape::XML::Node *newitem = child->getRepr()->duplicate(xml_in_doc); + for (auto& child: doc->getRoot()->_children) { + if (SP_IS_ITEM(&child)) { + Inkscape::XML::Node *newitem = child.getRepr()->duplicate(xml_in_doc); // convert layers to groups, and make sure they are unlocked // FIXME: add "preserve layers" mode where each layer from @@ -1249,10 +1249,10 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, } // don't lose top-level defs or style elements - else if (child->getRepr()->type() == Inkscape::XML::ELEMENT_NODE) { - const gchar *tag = child->getRepr()->name(); + else if (child.getRepr()->type() == Inkscape::XML::ELEMENT_NODE) { + const gchar *tag = child.getRepr()->name(); if (!strcmp(tag, "svg:style")) { - in_doc->getRoot()->appendChildRepr(child->getRepr()->duplicate(xml_in_doc)); + in_doc->getRoot()->appendChildRepr(child.getRepr()->duplicate(xml_in_doc)); } } } diff --git a/src/filter-chemistry.cpp b/src/filter-chemistry.cpp index 9298a1ffc..2e99842ec 100644 --- a/src/filter-chemistry.cpp +++ b/src/filter-chemistry.cpp @@ -51,8 +51,8 @@ static guint count_filter_hrefs(SPObject *o, SPFilter *filter) i ++; } - for ( SPObject *child = o->firstChild(); child; child = child->getNext() ) { - i += count_filter_hrefs(child, filter); + for (auto& child: o->_children) { + i += count_filter_hrefs(&child, filter); } return i; @@ -491,16 +491,14 @@ void remove_filter_gaussian_blur (SPObject *item) bool filter_is_single_gaussian_blur(SPFilter *filter) { - return (filter->firstChild() && - (filter->firstChild() == filter->lastChild()) && - SP_IS_GAUSSIANBLUR(filter->firstChild())); + return (filter->_children.size() == 1 && + SP_IS_GAUSSIANBLUR(&filter->_children.front())); } double get_single_gaussian_blur_radius(SPFilter *filter) { - if (filter->firstChild() && - (filter->firstChild() == filter->lastChild()) && - SP_IS_GAUSSIANBLUR(filter->firstChild())) { + if (filter->_children.size() == 1 && + SP_IS_GAUSSIANBLUR(&filter->_children.front())) { SPGaussianBlur *gb = SP_GAUSSIANBLUR(filter->firstChild()); double x = gb->stdDeviation.getNumber(); diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp index 59d715149..9c46a2efb 100644 --- a/src/gradient-chemistry.cpp +++ b/src/gradient-chemistry.cpp @@ -199,8 +199,8 @@ static guint count_gradient_hrefs(SPObject *o, SPGradient *gr) i ++; } - for ( SPObject *child = o->firstChild(); child; child = child->getNext() ) { - i += count_gradient_hrefs(child, gr); + for (auto& child: o->_children) { + i += count_gradient_hrefs(&child, gr); } return i; @@ -926,11 +926,11 @@ void sp_item_gradient_reverse_vector(SPItem *item, Inkscape::PaintTarget fill_or GSList *child_objects = NULL; std::vector offsets; double offset; - for ( SPObject *child = vector->firstChild(); child; child = child->getNext()) { - child_reprs = g_slist_prepend (child_reprs, child->getRepr()); - child_objects = g_slist_prepend (child_objects, child); + for (auto& child: vector->_children) { + child_reprs = g_slist_prepend (child_reprs, child.getRepr()); + child_objects = g_slist_prepend (child_objects, &child); offset=0; - sp_repr_get_double(child->getRepr(), "offset", &offset); + sp_repr_get_double(child.getRepr(), "offset", &offset); offsets.push_back(offset); } @@ -979,9 +979,9 @@ void sp_item_gradient_invert_vector_color(SPItem *item, Inkscape::PaintTarget fi sp_gradient_repr_set_link(gradient->getRepr(), vector); } - for ( SPObject *child = vector->firstChild(); child; child = child->getNext()) { - if (SP_IS_STOP(child)) { - guint32 color = SP_STOP(child)->get_rgba32(); + for (auto& child: vector->_children) { + if (SP_IS_STOP(&child)) { + guint32 color = SP_STOP(&child)->get_rgba32(); //g_message("Stop color %d", color); gchar c[64]; sp_svg_write_color (c, sizeof(c), @@ -994,7 +994,7 @@ void sp_item_gradient_invert_vector_color(SPItem *item, Inkscape::PaintTarget fi ); SPCSSAttr *css = sp_repr_css_attr_new (); sp_repr_css_set_property (css, "stop-color", c); - sp_repr_css_change(child->getRepr(), css, "style"); + sp_repr_css_change(child.getRepr(), css, "style"); sp_repr_css_attr_unref (css); } } diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index 555bde786..b9d1fe109 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -2539,9 +2539,9 @@ void GrDrag::deleteSelected(bool just_one) // cannot use vector->vector.stops.size() because the vector might be invalidated by deletion of a midstop // manually count the children, don't know if there already exists a function for this... int len = 0; - for ( SPObject *child = (stopinfo->vector)->firstChild() ; child ; child = child->getNext() ) + for (auto& child: stopinfo->vector->_children) { - if ( SP_IS_STOP(child) ) { + if ( SP_IS_STOP(&child) ) { len ++; } } diff --git a/src/helper/pixbuf-ops.cpp b/src/helper/pixbuf-ops.cpp index 9639096fb..fb1740fc5 100644 --- a/src/helper/pixbuf-ops.cpp +++ b/src/helper/pixbuf-ops.cpp @@ -53,8 +53,8 @@ static void hide_other_items_recursively(SPObject *o, GSList *list, unsigned dke // recurse if (!g_slist_find(list, o)) { - for ( SPObject *child = o->firstChild() ; child; child = child->getNext() ) { - hide_other_items_recursively(child, list, dkey); + for (auto& child: o->_children) { + hide_other_items_recursively(&child, list, dkey); } } } diff --git a/src/helper/png-write.cpp b/src/helper/png-write.cpp index 9430feeff..c59db9df6 100644 --- a/src/helper/png-write.cpp +++ b/src/helper/png-write.cpp @@ -374,8 +374,8 @@ static void hide_other_items_recursively(SPObject *o, const std::vector // recurse if (list.end()==find(list.begin(),list.end(),o)) { - for ( SPObject *child = o->firstChild() ; child; child = child->getNext() ) { - hide_other_items_recursively(child, list, dkey); + for (auto& child: o->_children) { + hide_other_items_recursively(&child, list, dkey); } } } diff --git a/src/helper/stock-items.cpp b/src/helper/stock-items.cpp index 5a56b89ff..cf10a6c4d 100644 --- a/src/helper/stock-items.cpp +++ b/src/helper/stock-items.cpp @@ -204,37 +204,37 @@ SPObject *get_stock_item(gchar const *urn, gboolean stock) } SPObject *object = NULL; if (!strcmp(base, "marker") && !stock) { - for ( SPObject *child = defs->firstChild(); child; child = child->getNext() ) + for (auto& child: defs->_children) { - if (child->getRepr()->attribute("inkscape:stockid") && - !strcmp(name_p, child->getRepr()->attribute("inkscape:stockid")) && - SP_IS_MARKER(child)) + if (child.getRepr()->attribute("inkscape:stockid") && + !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && + SP_IS_MARKER(&child)) { - object = child; + object = &child; } } } else if (!strcmp(base,"pattern") && !stock) { - for ( SPObject *child = defs->firstChild() ; child; child = child->getNext() ) + for (auto& child: defs->_children) { - if (child->getRepr()->attribute("inkscape:stockid") && - !strcmp(name_p, child->getRepr()->attribute("inkscape:stockid")) && - SP_IS_PATTERN(child)) + if (child.getRepr()->attribute("inkscape:stockid") && + !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && + SP_IS_PATTERN(&child)) { - object = child; + object = &child; } } } else if (!strcmp(base,"gradient") && !stock) { - for ( SPObject *child = defs->firstChild(); child; child = child->getNext() ) + for (auto& child: defs->_children) { - if (child->getRepr()->attribute("inkscape:stockid") && - !strcmp(name_p, child->getRepr()->attribute("inkscape:stockid")) && - SP_IS_GRADIENT(child)) + if (child.getRepr()->attribute("inkscape:stockid") && + !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && + SP_IS_GRADIENT(&child)) { - object = child; + object = &child; } } diff --git a/src/id-clash.cpp b/src/id-clash.cpp index 4bd66e858..fecad9eee 100644 --- a/src/id-clash.cpp +++ b/src/id-clash.cpp @@ -187,9 +187,9 @@ find_references(SPObject *elem, refmap_type &refmap) } // recurse - for (SPObject *child = elem->firstChild(); child; child = child->getNext() ) + for (auto& child: elem->_children) { - find_references(child, refmap); + find_references(&child, refmap); } } @@ -242,9 +242,9 @@ change_clashing_ids(SPDocument *imported_doc, SPDocument *current_doc, // recurse - for (SPObject *child = elem->firstChild(); child; child = child->getNext() ) + for (auto& child: elem->_children) { - change_clashing_ids(imported_doc, current_doc, child, refmap, id_changes); + change_clashing_ids(imported_doc, current_doc, &child, refmap, id_changes); } } diff --git a/src/libnrtype/font-lister.cpp b/src/libnrtype/font-lister.cpp index 568a7c8cc..937d67895 100644 --- a/src/libnrtype/font-lister.cpp +++ b/src/libnrtype/font-lister.cpp @@ -298,8 +298,8 @@ void FontLister::update_font_list_recursive(SPObject *r, std::listpush_back(Glib::ustring(font_family)); } - for (SPObject *child = r->firstChild(); child; child = child->getNext()) { - update_font_list_recursive(child, l); + for (auto& child: r->_children) { + update_font_list_recursive(&child, l); } } diff --git a/src/live_effects/lpe-perspective_path.cpp b/src/live_effects/lpe-perspective_path.cpp index c8cdd7912..c62ead2b3 100644 --- a/src/live_effects/lpe-perspective_path.cpp +++ b/src/live_effects/lpe-perspective_path.cpp @@ -107,12 +107,12 @@ void LPEPerspectivePath::refresh(Gtk::Entry* perspective) { perspectiveID = perspective->get_text(); Persp3D *first = 0; Persp3D *persp = 0; - for ( SPObject *child = this->lpeobj->document->getDefs()->firstChild(); child && !persp; child = child->getNext() ) { - if (SP_IS_PERSP3D(child) && first == 0) { - first = SP_PERSP3D(child); + for (auto& child: lpeobj->document->getDefs()->_children) { + if (SP_IS_PERSP3D(&child) && first == 0) { + first = SP_PERSP3D(&child); } - if (SP_IS_PERSP3D(child) && strcmp(child->getId(), const_cast(perspectiveID.c_str())) == 0) { - persp = SP_PERSP3D(child); + if (SP_IS_PERSP3D(&child) && strcmp(child.getId(), const_cast(perspectiveID.c_str())) == 0) { + persp = SP_PERSP3D(&child); break; } } diff --git a/src/main.cpp b/src/main.cpp index 8cf52127b..db908f640 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1228,8 +1228,8 @@ static int sp_process_file_list(GSList *fl) std::vector items; SPRoot *root = doc->getRoot(); doc->ensureUpToDate(); - for ( SPObject *iter = root->firstChild(); iter ; iter = iter->getNext()) { - SPItem* item = (SPItem*) iter; + for (auto& iter: root->_children) { + SPItem* item = (SPItem*) &iter; if (! (SP_IS_TEXT(item) || SP_IS_FLOWTEXT(item) || SP_IS_GROUP(item))) { continue; } diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp index 3e559ee7a..580fb5fc7 100644 --- a/src/object-snapper.cpp +++ b/src/object-snapper.cpp @@ -90,9 +90,9 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent, Geom::Rect bbox_to_snap_incl = bbox_to_snap; // _incl means: will include the snapper tolerance bbox_to_snap_incl.expandBy(getSnapperTolerance()); // see? - for ( SPObject *o = parent->firstChild(); o; o = o->getNext() ) { + for (auto& o: parent->_children) { g_assert(dt != NULL); - SPItem *item = dynamic_cast(o); + SPItem *item = dynamic_cast(&o); if (item && !(dt->itemIsHidden(item) && !clip_or_mask)) { // Snapping to items in a locked layer is allowed // Don't snap to hidden objects, unless they're a clipped path or a mask @@ -100,7 +100,7 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent, std::vector::const_iterator i; if (it != NULL) { i = it->begin(); - while (i != it->end() && *i != o) { + while (i != it->end() && *i != &o) { ++i; } } @@ -122,7 +122,7 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent, } if (dynamic_cast(item)) { - _findCandidates(o, it, false, bbox_to_snap, clip_or_mask, additional_affine); + _findCandidates(&o, it, false, bbox_to_snap, clip_or_mask, additional_affine); } else { Geom::OptRect bbox_of_item; Preferences *prefs = Preferences::get(); diff --git a/src/object-test.h b/src/object-test.h index 4f0be3251..0af823684 100644 --- a/src/object-test.h +++ b/src/object-test.h @@ -115,7 +115,6 @@ public: prev = next; next = next->getNext(); } - TS_ASSERT(child->lastChild() == next); // Test hrefcount TS_ASSERT(path->isReferenced()); diff --git a/src/persp3d.cpp b/src/persp3d.cpp index a48481145..849e332bf 100644 --- a/src/persp3d.cpp +++ b/src/persp3d.cpp @@ -215,9 +215,10 @@ Persp3D *persp3d_create_xml_element(SPDocument *document, Persp3DImpl *dup) {// Persp3D *persp3d_document_first_persp(SPDocument *document) { Persp3D *first = 0; - for ( SPObject *child = document->getDefs()->firstChild(); child && !first; child = child->getNext() ) { - if (SP_IS_PERSP3D(child)) { - first = SP_PERSP3D(child); + for (auto& child: document->getDefs()->_children) { + if (SP_IS_PERSP3D(&child)) { + first = SP_PERSP3D(&child); + break; } } return first; @@ -533,9 +534,9 @@ persp3d_print_debugging_info (Persp3D *persp) { void persp3d_print_debugging_info_all(SPDocument *document) { - for ( SPObject *child = document->getDefs()->firstChild(); child; child = child->getNext() ) { - if (SP_IS_PERSP3D(child)) { - persp3d_print_debugging_info(SP_PERSP3D(child)); + for (auto& child: document->getDefs()->_children) { + if (SP_IS_PERSP3D(&child)) { + persp3d_print_debugging_info(SP_PERSP3D(&child)); } } persp3d_print_all_selected(); diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 1f34f798d..55f4118b0 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -88,6 +88,7 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS; #include #include #include +#include #include "sp-item.h" #include "box3d.h" #include "persp3d.h" @@ -432,8 +433,8 @@ static void add_ids_recursive(std::vector &ids, SPObject *obj) ids.push_back(obj->getId()); if (dynamic_cast(obj)) { - for (SPObject *child = obj->firstChild() ; child; child = child->getNext() ) { - add_ids_recursive(ids, child); + for (auto& child: obj->_children) { + add_ids_recursive(ids, &child); } } } @@ -586,20 +587,20 @@ void sp_edit_clear_all(Inkscape::Selection *selection) */ std::vector &get_all_items(std::vector &list, SPObject *from, SPDesktop *desktop, bool onlyvisible, bool onlysensitive, bool ingroups, std::vector const &exclude) { - for ( SPObject *child = from->firstChild() ; child; child = child->getNext() ) { - SPItem *item = dynamic_cast(child); + for (auto& child: from->_children) { + SPItem *item = dynamic_cast(&child); if (item && !desktop->isLayer(item) && (!onlysensitive || !item->isLocked()) && (!onlyvisible || !desktop->itemIsHidden(item)) && - (exclude.empty() || exclude.end() == std::find(exclude.begin(),exclude.end(),child)) + (exclude.empty() || exclude.end() == std::find(exclude.begin(), exclude.end(), &child)) ) { list.insert(list.begin(),item); } if (ingroups || (item && desktop->isLayer(item))) { - list = get_all_items(list, child, desktop, onlyvisible, onlysensitive, ingroups, exclude); + list = get_all_items(list, &child, desktop, onlyvisible, onlysensitive, ingroups, exclude); } } @@ -1200,9 +1201,10 @@ take_style_from_item(SPObject *object) (dynamic_cast(object) && object->children && object->children->next == NULL)) { // if this is a text with exactly one tspan child, merge the style of that tspan as well // If this is a group, merge the style of its topmost (last) child with style - for (SPObject *last_element = object->lastChild(); last_element != NULL; last_element = last_element->getPrev()) { - if ( last_element->style ) { - SPCSSAttr *temp = sp_css_attr_from_object(last_element, SP_STYLE_FLAG_IFSET); + auto list = object->_children | boost::adaptors::reversed; + for (auto& element: list) { + if (element.style ) { + SPCSSAttr *temp = sp_css_attr_from_object(&element, SP_STYLE_FLAG_IFSET); if (temp) { sp_repr_css_merge(css, temp); sp_repr_css_attr_unref(temp); @@ -1621,10 +1623,10 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons } else if (transform_flowtext_with_frame) { // apply the inverse of the region's transform to the so that the flow remains // the same (even though the output itself gets transformed) - for ( SPObject *region = item->firstChild() ; region ; region = region->getNext() ) { - if (dynamic_cast(region) || dynamic_cast(region)) { - for ( SPObject *item = region->firstChild() ; item ; item = item->getNext() ) { - SPUse *use = dynamic_cast(item); + for (auto& region: item->_children) { + if (dynamic_cast(®ion) || dynamic_cast(®ion)) { + for (auto& itm: region._children) { + SPUse *use = dynamic_cast(&itm); if ( use ) { use->doWriteTransform(use->getRepr(), use->transform.inverse(), NULL, compensate); } @@ -2702,8 +2704,9 @@ sp_selection_unlink(SPDesktop *desktop) // Get a copy of current selection. std::vector new_select; bool unlinked = false; - auto items= selection->items(); - for (auto i=boost::rbegin(items);i!=boost::rend(items);++i){ + std::vector items(selection->items().begin(), selection->items().end()); + + for (auto i=items.rbegin();i!=items.rend();++i){ SPItem *item = *i; if (dynamic_cast(item)) { @@ -3432,9 +3435,9 @@ void sp_selection_untile(SPDesktop *desktop) Geom::Affine pat_transform = basePat->getTransform(); pat_transform *= item->transform; - for (SPObject *child = pattern->firstChild() ; child != NULL; child = child->next ) { - if (dynamic_cast(child)) { - Inkscape::XML::Node *copy = child->getRepr()->duplicate(xml_doc); + for (auto& child: pattern->_children) { + if (dynamic_cast(&child)) { + Inkscape::XML::Node *copy = child.getRepr()->duplicate(xml_doc); SPItem *i = dynamic_cast(desktop->currentLayer()->appendChildRepr(copy)); // FIXME: relink clones to the new canvas objects @@ -4100,9 +4103,9 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) { for ( std::map::iterator it = referenced_objects.begin() ; it != referenced_objects.end() ; ++it) { SPObject *obj = (*it).first; // Group containing the clipped paths or masks GSList *items_to_move = NULL; - for ( SPObject *child = obj->firstChild() ; child; child = child->getNext() ) { + for (auto& child: obj->_children) { // Collect all clipped paths and masks within a single group - Inkscape::XML::Node *copy = child->getRepr()->duplicate(xml_doc); + Inkscape::XML::Node *copy = child.getRepr()->duplicate(xml_doc); if(copy->attribute("inkscape:original-d") && copy->attribute("inkscape:path-effect")) { copy->setAttribute("d", copy->attribute("inkscape:original-d")); diff --git a/src/sp-clippath.cpp b/src/sp-clippath.cpp index 0c07d1b3d..25bf77f00 100644 --- a/src/sp-clippath.cpp +++ b/src/sp-clippath.cpp @@ -128,9 +128,9 @@ void SPClipPath::update(SPCtx* ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for ( SPObject *child = this->firstChild(); child; child = child->getNext()) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -167,9 +167,9 @@ void SPClipPath::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (SPObject *child = this->firstChild(); child; child = child->getNext()) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -200,9 +200,9 @@ Inkscape::DrawingItem *SPClipPath::show(Inkscape::Drawing &drawing, unsigned int Inkscape::DrawingGroup *ai = new Inkscape::DrawingGroup(drawing); display = sp_clippath_view_new_prepend(display, key, ai); - for ( SPObject *child = firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - Inkscape::DrawingItem *ac = SP_ITEM(child)->invoke_show(drawing, key, SP_ITEM_REFERENCE_FLAGS); + for (auto& child: _children) { + if (SP_IS_ITEM(&child)) { + Inkscape::DrawingItem *ac = SP_ITEM(&child)->invoke_show(drawing, key, SP_ITEM_REFERENCE_FLAGS); if (ac) { /* The order is not important in clippath */ @@ -223,9 +223,9 @@ Inkscape::DrawingItem *SPClipPath::show(Inkscape::Drawing &drawing, unsigned int } void SPClipPath::hide(unsigned int key) { - for ( SPObject *child = firstChild() ; child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - SP_ITEM(child)->invoke_hide(key); + for (auto& child: _children) { + if (SP_IS_ITEM(&child)) { + SP_ITEM(&child)->invoke_hide(key); } } @@ -252,9 +252,9 @@ void SPClipPath::setBBox(unsigned int key, Geom::OptRect const &bbox) { Geom::OptRect SPClipPath::geometricBounds(Geom::Affine const &transform) { Geom::OptRect bbox; - for (SPObject *i = firstChild(); i; i = i->getNext()) { - if (SP_IS_ITEM(i)) { - Geom::OptRect tmp = SP_ITEM(i)->geometricBounds(Geom::Affine(SP_ITEM(i)->transform) * transform); + for (auto& i: _children) { + if (SP_IS_ITEM(&i)) { + Geom::OptRect tmp = SP_ITEM(&i)->geometricBounds(Geom::Affine(SP_ITEM(&i)->transform) * transform); bbox.unionWith(tmp); } } diff --git a/src/sp-defs.cpp b/src/sp-defs.cpp index dd779c0da..af4ea96d7 100644 --- a/src/sp-defs.cpp +++ b/src/sp-defs.cpp @@ -54,9 +54,9 @@ void SPDefs::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -79,8 +79,8 @@ Inkscape::XML::Node* SPDefs::write(Inkscape::XML::Document *xml_doc, Inkscape::X } GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); } @@ -93,8 +93,8 @@ Inkscape::XML::Node* SPDefs::write(Inkscape::XML::Document *xml_doc, Inkscape::X } } else { - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - child->updateRepr(flags); + for (auto& child: _children) { + child.updateRepr(flags); } } diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index c17c67fc5..da3f12f5f 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -268,8 +268,8 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML } GSList *l = NULL; - for ( SPObject *child = this->firstChild(); child; child = child->getNext() ) { - Inkscape::XML::Node *crepr = child->updateRepr(doc, NULL, flags); + for (auto& child: _children) { + Inkscape::XML::Node *crepr = child.updateRepr(doc, NULL, flags); if (crepr) { l = g_slist_prepend (l, crepr); @@ -282,8 +282,8 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML l = g_slist_remove (l, l->data); } } else { - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - child->updateRepr(flags); + for (auto& child: _children) { + child.updateRepr(flags); } } diff --git a/src/sp-flowdiv.cpp b/src/sp-flowdiv.cpp index 8d9c51ab8..ad04f0d78 100644 --- a/src/sp-flowdiv.cpp +++ b/src/sp-flowdiv.cpp @@ -27,9 +27,9 @@ void SPFlowdiv::update(SPCtx *ctx, unsigned int flags) { childflags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -65,9 +65,9 @@ void SPFlowdiv::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -104,15 +104,15 @@ Inkscape::XML::Node* SPFlowdiv::write(Inkscape::XML::Document *xml_doc, Inkscape GSList *l = NULL; - for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node* c_repr = NULL; - if ( SP_IS_FLOWTSPAN (child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_FLOWPARA(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_STRING(child) ) { - c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + if ( SP_IS_FLOWTSPAN (&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_STRING(&child) ) { + c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } if ( c_repr ) { @@ -126,13 +126,13 @@ Inkscape::XML::Node* SPFlowdiv::write(Inkscape::XML::Document *xml_doc, Inkscape l = g_slist_remove(l, l->data); } } else { - for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { - if ( SP_IS_FLOWTSPAN (child) ) { - child->updateRepr(flags); - } else if ( SP_IS_FLOWPARA(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_STRING(child) ) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + for (auto& child: _children) { + if ( SP_IS_FLOWTSPAN (&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_STRING(&child) ) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } } } @@ -168,9 +168,9 @@ void SPFlowtspan::update(SPCtx *ctx, unsigned int flags) { childflags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -206,9 +206,9 @@ void SPFlowtspan::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -242,15 +242,15 @@ Inkscape::XML::Node *SPFlowtspan::write(Inkscape::XML::Document *xml_doc, Inksca GSList *l = NULL; - for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node* c_repr = NULL; - if ( SP_IS_FLOWTSPAN(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_FLOWPARA(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_STRING(child) ) { - c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + if ( SP_IS_FLOWTSPAN(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_STRING(&child) ) { + c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } if ( c_repr ) { @@ -264,13 +264,13 @@ Inkscape::XML::Node *SPFlowtspan::write(Inkscape::XML::Document *xml_doc, Inksca l = g_slist_remove(l, l->data); } } else { - for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { - if ( SP_IS_FLOWTSPAN(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_FLOWPARA(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_STRING(child) ) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + for (auto& child: _children) { + if ( SP_IS_FLOWTSPAN(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_STRING(&child) ) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } } } @@ -307,9 +307,9 @@ void SPFlowpara::update(SPCtx *ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -343,9 +343,9 @@ void SPFlowpara::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -379,15 +379,15 @@ Inkscape::XML::Node *SPFlowpara::write(Inkscape::XML::Document *xml_doc, Inkscap GSList *l = NULL; - for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node* c_repr = NULL; - if ( SP_IS_FLOWTSPAN(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_FLOWPARA(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_STRING(child) ) { - c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + if ( SP_IS_FLOWTSPAN(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_STRING(&child) ) { + c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } if ( c_repr ) { @@ -401,13 +401,13 @@ Inkscape::XML::Node *SPFlowpara::write(Inkscape::XML::Document *xml_doc, Inkscap l = g_slist_remove(l, l->data); } } else { - for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { - if ( SP_IS_FLOWTSPAN(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_FLOWPARA(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_STRING(child) ) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + for (auto& child: _children) { + if ( SP_IS_FLOWTSPAN(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_STRING(&child) ) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } } } diff --git a/src/sp-flowregion.cpp b/src/sp-flowregion.cpp index 5715e5eb1..71e029072 100644 --- a/src/sp-flowregion.cpp +++ b/src/sp-flowregion.cpp @@ -63,9 +63,9 @@ void SPFlowregion::update(SPCtx *ctx, unsigned int flags) { GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -102,9 +102,9 @@ void SPFlowregion::UpdateComputed(void) } computed.clear(); - for (SPObject* child = firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Shape *shape = 0; - GetDest(child, &shape); + GetDest(&child, &shape); computed.push_back(shape); } } @@ -118,9 +118,9 @@ void SPFlowregion::modified(guint flags) { GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -145,9 +145,9 @@ Inkscape::XML::Node *SPFlowregion::write(Inkscape::XML::Document *xml_doc, Inksc } GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - if ( !dynamic_cast(child) && !dynamic_cast(child) ) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); @@ -161,10 +161,9 @@ Inkscape::XML::Node *SPFlowregion::write(Inkscape::XML::Document *xml_doc, Inksc l = g_slist_remove(l, l->data); } - } else { - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - if ( !dynamic_cast(child) && !dynamic_cast(child) ) { - child->updateRepr(flags); + for (auto& child: _children) { + if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { + child.updateRepr(flags); } } } @@ -221,9 +220,9 @@ void SPFlowregionExclude::update(SPCtx *ctx, unsigned int flags) { GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -259,8 +258,8 @@ void SPFlowregionExclude::UpdateComputed(void) computed = NULL; } - for ( SPObject* child = firstChild() ; child ; child = child->getNext() ) { - GetDest(child, &computed); + for (auto& child: _children) { + GetDest(&child, &computed); } } @@ -273,9 +272,9 @@ void SPFlowregionExclude::modified(guint flags) { GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -301,8 +300,8 @@ Inkscape::XML::Node *SPFlowregionExclude::write(Inkscape::XML::Document *xml_doc GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); @@ -316,8 +315,8 @@ Inkscape::XML::Node *SPFlowregionExclude::write(Inkscape::XML::Document *xml_doc } } else { - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - child->updateRepr(flags); + for (auto& child: _children) { + child.updateRepr(flags); } } diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 51fb3ae89..eed882800 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -72,9 +72,9 @@ void SPFlowtext::update(SPCtx* ctx, unsigned int flags) { GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -135,9 +135,9 @@ void SPFlowtext::modified(unsigned int flags) { } } - for ( SPObject *o = this->firstChild() ; o ; o = o->getNext() ) { - if (dynamic_cast(o)) { - region = o; + for (auto& o: _children) { + if (dynamic_cast(&o)) { + region = &o; break; } } @@ -223,11 +223,11 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node *c_repr = NULL; - if ( dynamic_cast(child) || dynamic_cast(child) || dynamic_cast(child) || dynamic_cast(child)) { - c_repr = child->updateRepr(doc, NULL, flags); + if ( dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child)) { + c_repr = child.updateRepr(doc, NULL, flags); } if ( c_repr ) { @@ -241,9 +241,9 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X l = g_slist_remove(l, l->data); } } else { - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - if ( dynamic_cast(child) || dynamic_cast(child) || dynamic_cast(child) || dynamic_cast(child)) { - child->updateRepr(flags); + for (auto& child: _children) { + if ( dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child)) { + child.updateRepr(flags); } } } @@ -390,8 +390,8 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape, *pending_line_break_object = NULL; } - for (SPObject *child = root->firstChild() ; child ; child = child->getNext() ) { - SPString *str = dynamic_cast(child); + for (auto& child: root->_children) { + SPString *str = dynamic_cast(&child); if (str) { if (*pending_line_break_object) { if (dynamic_cast(*pending_line_break_object)) @@ -402,12 +402,12 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape, *pending_line_break_object = NULL; } if (with_indent) { - layout.appendText(str->string, root->style, child, &pi); + layout.appendText(str->string, root->style, &child, &pi); } else { - layout.appendText(str->string, root->style, child); + layout.appendText(str->string, root->style, &child); } } else { - SPFlowregion *region = dynamic_cast(child); + SPFlowregion *region = dynamic_cast(&child); if (region) { std::vector const &computed = region->computed; for (std::vector::const_iterator it = computed.begin() ; it != computed.end() ; ++it) { @@ -421,8 +421,8 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape, } } //Xml Tree is being directly used while it shouldn't be. - else if (!dynamic_cast(child) && !sp_repr_is_meta_element(child->getRepr())) { - _buildLayoutInput(child, exclusion_shape, shapes, pending_line_break_object); + else if (!dynamic_cast(&child) && !sp_repr_is_meta_element(child.getRepr())) { + _buildLayoutInput(&child, exclusion_shape, shapes, pending_line_break_object); } } } @@ -593,9 +593,9 @@ SPItem *SPFlowtext::get_frame(SPItem const *after) SPItem *frame = 0; SPObject *region = 0; - for (SPObject *o = firstChild() ; o ; o = o->getNext() ) { - if (dynamic_cast(o)) { - region = o; + for (auto& o: _children) { + if (dynamic_cast(&o)) { + region = &o; break; } } @@ -603,8 +603,8 @@ SPItem *SPFlowtext::get_frame(SPItem const *after) if (region) { bool past = false; - for (SPObject *o = region->firstChild() ; o ; o = o->getNext() ) { - SPItem *item = dynamic_cast(o); + for (auto& o: region->_children) { + SPItem *item = dynamic_cast(&o); if (item) { if ( (after == NULL) || past ) { frame = item; @@ -707,9 +707,9 @@ Geom::Affine SPFlowtext::set_transform (Geom::Affine const &xform) } SPObject *region = NULL; - for ( SPObject *o = this->firstChild() ; o ; o = o->getNext() ) { - if (dynamic_cast(o)) { - region = o; + for (auto& o: _children) { + if (dynamic_cast(&o)) { + region = &o; break; } } diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index 854d53dc4..abfae1a1f 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -276,8 +276,8 @@ void SPGradient::build(SPDocument *document, Inkscape::XML::Node *repr) SPPaintServer::build(document, repr); - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { + for (auto& ochild: _children) { + if (SP_IS_STOP(&ochild)) { this->has_stops = TRUE; break; } @@ -481,8 +481,8 @@ void SPGradient::remove_child(Inkscape::XML::Node *child) SPPaintServer::remove_child(child); this->has_stops = FALSE; - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { + for (auto& ochild: _children) { + if (SP_IS_STOP(&ochild)) { this->has_stops = TRUE; break; } @@ -536,9 +536,9 @@ void SPGradient::modified(guint flags) // FIXME: climb up the ladder of hrefs GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -557,10 +557,11 @@ void SPGradient::modified(guint flags) SPStop* SPGradient::getFirstStop() { - SPStop* first = 0; - for (SPObject *ochild = firstChild(); ochild && !first; ochild = ochild->getNext()) { - if (SP_IS_STOP(ochild)) { - first = SP_STOP(ochild); + SPStop* first = nullptr; + for (auto& ochild: _children) { + if (SP_IS_STOP(&ochild)) { + first = SP_STOP(&ochild); + break; } } return first; @@ -587,8 +588,8 @@ Inkscape::XML::Node *SPGradient::write(Inkscape::XML::Document *xml_doc, Inkscap if (flags & SP_OBJECT_WRITE_BUILD) { GSList *l = NULL; - for (SPObject *child = this->firstChild(); child; child = child->getNext()) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); @@ -915,8 +916,8 @@ bool SPGradient::invalidateArray() void SPGradient::rebuildVector() { gint len = 0; - for ( SPObject *child = firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_STOP(child)) { + for (auto& child: _children) { + if (SP_IS_STOP(&child)) { len ++; } } @@ -937,9 +938,9 @@ void SPGradient::rebuildVector() } } - for ( SPObject *child = firstChild(); child; child = child->getNext() ) { - if (SP_IS_STOP(child)) { - SPStop *stop = SP_STOP(child); + for (auto& child: _children) { + if (SP_IS_STOP(&child)) { + SPStop *stop = SP_STOP(&child); SPGradientStop gstop; if (!vector.stops.empty()) { @@ -1022,8 +1023,8 @@ void SPGradient::rebuildArray() array.read( SP_MESH( this ) ); has_patches = false; - for ( SPObject *ro = firstChild() ; ro ; ro = ro->getNext() ) { - if (SP_IS_MESHROW(ro)) { + for (auto& ro: _children) { + if (SP_IS_MESHROW(&ro)) { has_patches = true; // std::cout << " Has Patches" << std::endl; break; diff --git a/src/sp-hatch.cpp b/src/sp-hatch.cpp index 2d938618c..c06045e8f 100644 --- a/src/sp-hatch.cpp +++ b/src/sp-hatch.cpp @@ -233,14 +233,13 @@ void SPHatch::set(unsigned int key, const gchar* value) bool SPHatch::_hasHatchPatchChildren(SPHatch const *hatch) { - bool matched = false; - for (SPObject const *child = hatch->firstChild(); child && !matched; child = child->getNext() ) { - SPHatchPath const *hatchPath = dynamic_cast(child); + for (auto& child: hatch->_children) { + SPHatchPath const *hatchPath = dynamic_cast(&child); if (hatchPath) { - matched = true; + return true; } } - return matched; + return false; } std::vector SPHatch::hatchPaths() @@ -249,8 +248,8 @@ std::vector SPHatch::hatchPaths() SPHatch *src = chase_hrefs(this, sigc::ptr_fun(&_hasHatchPatchChildren)); if (src) { - for (SPObject *child = src->firstChild(); child; child = child->getNext()) { - SPHatchPath *hatchPath = dynamic_cast(child); + for (auto& child: src->_children) { + SPHatchPath *hatchPath = dynamic_cast(&child); if (hatchPath) { list.push_back(hatchPath); } @@ -265,8 +264,8 @@ std::vector SPHatch::hatchPaths() const SPHatch const *src = chase_hrefs(this, sigc::ptr_fun(&_hasHatchPatchChildren)); if (src) { - for (SPObject const *child = src->firstChild(); child; child = child->getNext()) { - SPHatchPath const *hatchPath = dynamic_cast(child); + for (auto& child: src->_children) { + SPHatchPath const *hatchPath = dynamic_cast(&child); if (hatchPath) { list.push_back(hatchPath); } diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index d775e306f..7915b0453 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -235,9 +235,9 @@ Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = NULL; - for (SPObject *child = firstChild(); child; child = child->getNext() ) { - if ( !dynamic_cast(child) && !dynamic_cast(child) ) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend (l, crepr); @@ -251,9 +251,9 @@ Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = g_slist_remove (l, l->data); } } else { - for (SPObject *child = firstChild() ; child ; child = child->getNext() ) { - if ( !dynamic_cast(child) && !dynamic_cast(child) ) { - child->updateRepr(flags); + for (auto& child: _children) { + if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { + child.updateRepr(flags); } } } @@ -365,9 +365,9 @@ void SPGroup::hide (unsigned int key) { void SPGroup::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) const { - for ( SPObject const *o = this->firstChild(); o; o = o->getNext() ) + for (auto& o: _children) { - SPItem const *item = dynamic_cast(o); + SPItem const *item = dynamic_cast(&o); if (item) { item->getSnappoints(p, snapprefs); } @@ -511,20 +511,21 @@ sp_item_group_ungroup (SPGroup *group, std::vector &children, bool do_d GSList *objects = NULL; Geom::Affine const g(group->transform); - for (SPObject *child = group->firstChild() ; child; child = child->getNext() ) - if (SPItem *citem = dynamic_cast(child)) - sp_item_group_ungroup_handle_clones(citem,g); - + for (auto& child: group->_children) { + if (SPItem *citem = dynamic_cast(&child)) { + sp_item_group_ungroup_handle_clones(citem, g); + } + } - for (SPObject *child = group->firstChild() ; child; child = child->getNext() ) { - SPItem *citem = dynamic_cast(child); + for (auto& child: group->_children) { + SPItem *citem = dynamic_cast(&child); if (citem) { /* Merging of style */ // this converts the gradient/pattern fill/stroke, if any, to userSpaceOnUse; we need to do // it here _before_ the new transform is set, so as to use the pre-transform bbox citem->adjust_paint_recursive (Geom::identity(), Geom::identity(), false); - child->style->merge( group->style ); + child.style->merge( group->style ); /* * fixme: We currently make no allowance for the case where child is cloned * and the group has any style settings. @@ -546,9 +547,9 @@ sp_item_group_ungroup (SPGroup *group, std::vector &children, bool do_d * extra complication & maintenance burden and this case is rare. */ - child->updateRepr(); + child.updateRepr(); - Inkscape::XML::Node *nrepr = child->getRepr()->duplicate(prepr->document()); + Inkscape::XML::Node *nrepr = child.getRepr()->duplicate(prepr->document()); // Merging transform Geom::Affine ctrans = citem->transform * g; @@ -599,7 +600,7 @@ sp_item_group_ungroup (SPGroup *group, std::vector &children, bool do_d items = g_slist_prepend (items, nrepr); } else { - Inkscape::XML::Node *nrepr = child->getRepr()->duplicate(prepr->document()); + Inkscape::XML::Node *nrepr = child.getRepr()->duplicate(prepr->document()); objects = g_slist_prepend (objects, nrepr); } } @@ -661,9 +662,9 @@ std::vector sp_item_group_item_list(SPGroup * group) std::vector s; g_return_val_if_fail(group != NULL, s); - for (SPObject *o = group->firstChild() ; o ; o = o->getNext() ) { - if ( dynamic_cast(o) ) { - s.push_back((SPItem*)o); + for (auto& o: group->_children) { + if ( dynamic_cast(&o) ) { + s.push_back((SPItem*)&o); } } return s; @@ -734,8 +735,8 @@ void SPGroup::_updateLayerMode(unsigned int display_key) { void SPGroup::translateChildItems(Geom::Translate const &tr) { if ( hasChildren() ) { - for (SPObject *o = firstChild() ; o ; o = o->getNext() ) { - SPItem *item = dynamic_cast(o); + for (auto& o: _children) { + SPItem *item = dynamic_cast(&o); if ( item ) { sp_item_move_rel(item, tr); } @@ -747,14 +748,14 @@ void SPGroup::translateChildItems(Geom::Translate const &tr) void SPGroup::scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p, bool noRecurse) { if ( hasChildren() ) { - for (SPObject *o = firstChild() ; o ; o = o->getNext() ) { - if ( SPDefs *defs = dynamic_cast(o) ) { // select symbols from defs, ignore clips, masks, patterns - for (SPObject *defschild = defs->firstChild() ; defschild ; defschild = defschild->getNext() ) { - SPGroup *defsgroup = dynamic_cast(defschild); + for (auto& o: _children) { + if ( SPDefs *defs = dynamic_cast(&o) ) { // select symbols from defs, ignore clips, masks, patterns + for (auto& defschild: defs->_children) { + SPGroup *defsgroup = dynamic_cast(&defschild); if (defsgroup) defsgroup->scaleChildItemsRec(sc, p, false); } - } else if ( SPItem *item = dynamic_cast(o) ) { + } else if ( SPItem *item = dynamic_cast(&o) ) { SPGroup *group = dynamic_cast(item); if (group && !dynamic_cast(item)) { /* Using recursion breaks clipping because transforms are applied @@ -870,8 +871,8 @@ void SPGroup::scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p, bo gint SPGroup::getItemCount() const { gint len = 0; - for (SPObject const *o = this->firstChild() ; o ; o = o->getNext() ) { - if (dynamic_cast(o)) { + for (auto& child: _children) { + if (dynamic_cast(&child)) { len++; } } diff --git a/src/sp-item.cpp b/src/sp-item.cpp index 258a5cd14..ba57cec8b 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -705,9 +705,9 @@ Inkscape::XML::Node* SPItem::write(Inkscape::XML::Document *xml_doc, Inkscape::X // so we need to add any children from the underlying object to the new repr if (flags & SP_OBJECT_WRITE_BUILD) { GSList *l = NULL; - for (SPObject *child = object->firstChild(); child != NULL; child = child->next ) { - if (dynamic_cast(child) || dynamic_cast(child)) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: object->_children) { + if (dynamic_cast(&child) || dynamic_cast(&child)) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend (l, crepr); } @@ -719,9 +719,9 @@ Inkscape::XML::Node* SPItem::write(Inkscape::XML::Document *xml_doc, Inkscape::X l = g_slist_remove (l, l->data); } } else { - for (SPObject *child = object->firstChild() ; child != NULL; child = child->next ) { - if (dynamic_cast(child) || dynamic_cast(child)) { - child->updateRepr(flags); + for (auto& child: object->_children) { + if (dynamic_cast(&child) || dynamic_cast(&child)) { + child.updateRepr(flags); } } } @@ -928,12 +928,12 @@ unsigned int SPItem::pos_in_parent() const { unsigned int pos = 0; - for ( SPObject *iter = parent->firstChild() ; iter ; iter = iter->next) { - if (iter == this) { + for (auto& iter: parent->_children) { + if (&iter == this) { return pos; } - if (dynamic_cast(iter)) { + if (dynamic_cast(&iter)) { pos++; } } @@ -1666,8 +1666,8 @@ SPItem const *sp_item_first_item_child(SPObject const *obj) SPItem *sp_item_first_item_child(SPObject *obj) { SPItem *child = 0; - for ( SPObject *iter = obj->firstChild() ; iter ; iter = iter->next ) { - SPItem *tmp = dynamic_cast(iter); + for (auto& iter: obj->_children) { + SPItem *tmp = dynamic_cast(&iter); if ( tmp ) { child = tmp; break; diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index a36d8ef29..e643cc9bd 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -227,9 +227,9 @@ Inkscape::DrawingItem *SPMask::sp_mask_show(Inkscape::Drawing &drawing, unsigned Inkscape::DrawingGroup *ai = new Inkscape::DrawingGroup(drawing); this->display = sp_mask_view_new_prepend (this->display, key, ai); - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - if (SP_IS_ITEM (child)) { - Inkscape::DrawingItem *ac = SP_ITEM (child)->invoke_show (drawing, key, SP_ITEM_REFERENCE_FLAGS); + for (auto& child: _children) { + if (SP_IS_ITEM (&child)) { + Inkscape::DrawingItem *ac = SP_ITEM (&child)->invoke_show (drawing, key, SP_ITEM_REFERENCE_FLAGS); if (ac) { ai->prependChild(ac); @@ -250,9 +250,9 @@ void SPMask::sp_mask_hide(unsigned int key) { g_return_if_fail (this != NULL); g_return_if_fail (SP_IS_MASK (this)); - for ( SPObject *child = this->firstChild(); child; child = child->getNext()) { - if (SP_IS_ITEM (child)) { - SP_ITEM(child)->invoke_hide (key); + for (auto& child: _children) { + if (SP_IS_ITEM (&child)) { + SP_ITEM(&child)->invoke_hide (key); } } diff --git a/src/sp-mesh-array.cpp b/src/sp-mesh-array.cpp index 355150893..20d6d0d85 100644 --- a/src/sp-mesh-array.cpp +++ b/src/sp-mesh-array.cpp @@ -632,16 +632,16 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { guint max_column = 0; guint irow = 0; // Corresponds to top of patch being read in. - for ( SPObject *ro = mg->firstChild() ; ro ; ro = ro->getNext() ) { + for (auto& ro: mg->_children) { - if (SP_IS_MESHROW(ro)) { + if (SP_IS_MESHROW(&ro)) { guint icolumn = 0; // Corresponds to left of patch being read in. - for ( SPObject *po = ro->firstChild() ; po ; po = po->getNext() ) { + for (auto& po: ro._children) { - if (SP_IS_MESHPATCH(po)) { + if (SP_IS_MESHPATCH(&po)) { - SPMeshpatch *patch = SP_MESHPATCH(po); + SPMeshpatch *patch = SP_MESHPATCH(&po); // std::cout << "SPMeshNodeArray::read: row size: " << nodes.size() << std::endl; SPMeshPatchI new_patch( &nodes, irow, icolumn ); // Adds new nodes. @@ -652,15 +652,15 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { // Only 'top' side defined for first row. if( irow != 0 ) ++istop; - for ( SPObject *so = po->firstChild() ; so ; so = so->getNext() ) { - if (SP_IS_STOP(so)) { + for (auto& so: po._children) { + if (SP_IS_STOP(&so)) { if( istop > 3 ) { // std::cout << " Mesh Gradient: Too many stops: " << istop << std::endl; break; } - SPStop *stop = SP_STOP(so); + SPStop *stop = SP_STOP(&so); // Handle top of first row. if( istop == 0 && icolumn == 0 ) { @@ -848,15 +848,15 @@ void SPMeshNodeArray::write( SPMesh *mg ) { // First we must delete reprs for old mesh rows and patches. GSList *descendant_reprs = NULL; GSList *descendant_objects = NULL; - for ( SPObject *row = mg->firstChild(); row; row = row->getNext() ) { - descendant_reprs = g_slist_prepend (descendant_reprs, row->getRepr()); - descendant_objects = g_slist_prepend (descendant_objects, row ); - for ( SPObject *patch = row->firstChild(); patch; patch = patch->getNext() ) { - descendant_reprs = g_slist_prepend (descendant_reprs, patch->getRepr()); - descendant_objects = g_slist_prepend (descendant_objects, patch ); - for ( SPObject *stop = patch->firstChild(); stop; stop = stop->getNext() ) { - descendant_reprs = g_slist_prepend (descendant_reprs, stop->getRepr()); - descendant_objects = g_slist_prepend (descendant_objects, stop ); + for (auto& row: mg->_children) { + descendant_reprs = g_slist_prepend (descendant_reprs, row.getRepr()); + descendant_objects = g_slist_prepend (descendant_objects, &row); + for (auto& patch: row._children) { + descendant_reprs = g_slist_prepend (descendant_reprs, patch.getRepr()); + descendant_objects = g_slist_prepend (descendant_objects, &patch); + for (auto& stop: patch._children) { + descendant_reprs = g_slist_prepend (descendant_reprs, stop.getRepr()); + descendant_objects = g_slist_prepend (descendant_objects, &stop); } } } diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 616ec3921..173055dbd 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -248,9 +248,9 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { this->readAttr( "inkscape:lockguides" ); /* Construct guideline list */ - for (SPObject *o = this->firstChild() ; o; o = o->getNext() ) { - if (SP_IS_GUIDE(o)) { - SPGuide * g = SP_GUIDE(o); + for (auto& o: _children) { + if (SP_IS_GUIDE(&o)) { + SPGuide * g = SP_GUIDE(&o); this->guides.push_back(g); //g_object_set(G_OBJECT(g), "color", nv->guidecolor, "hicolor", nv->guidehicolor, NULL); g->setColor(this->guidecolor); @@ -858,9 +858,9 @@ void sp_namedview_update_layers_from_document (SPDesktop *desktop) } // if that didn't work out, look for the topmost layer if (!layer) { - for ( SPObject *iter = document->getRoot()->firstChild(); iter ; iter = iter->getNext() ) { - if (desktop->isLayer(iter)) { - layer = iter; + for (auto& iter: document->getRoot()->_children) { + if (desktop->isLayer(&iter)) { + layer = &iter; } } } diff --git a/src/sp-object-group.cpp b/src/sp-object-group.cpp index c3967461e..bfed08218 100644 --- a/src/sp-object-group.cpp +++ b/src/sp-object-group.cpp @@ -50,8 +50,8 @@ Inkscape::XML::Node *SPObjectGroup::write(Inkscape::XML::Document *xml_doc, Inks } GSList *l = 0; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); @@ -64,8 +64,8 @@ Inkscape::XML::Node *SPObjectGroup::write(Inkscape::XML::Document *xml_doc, Inks l = g_slist_remove(l, l->data); } } else { - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - child->updateRepr(flags); + for (auto& child: _children) { + child.updateRepr(flags); } } diff --git a/src/sp-object.cpp b/src/sp-object.cpp index 36957ab49..2babf0441 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -118,7 +118,7 @@ static gchar *sp_object_get_unique_id(SPObject *object, */ SPObject::SPObject() : cloned(0), uflags(0), mflags(0), hrefcount(0), _total_hrefcount(0), - document(NULL), parent(NULL), children(NULL), _last_child(NULL), + document(NULL), parent(NULL), children(NULL), next(NULL), id(NULL), repr(NULL), refCount(1),hrefList(std::list()), _successor(NULL), _collection_policy(SPObject::COLLECT_WITH_PARENT), _label(NULL), _default_label(NULL) @@ -541,9 +541,6 @@ void SPObject::attach(SPObject *object, SPObject *prev) this->children = object; } object->next = next; - if (!next) { - this->_last_child = object; - } if (!object->xml_space.set) object->xml_space.value = this->xml_space.value; } @@ -576,9 +573,6 @@ void SPObject::reorder(SPObject* obj, SPObject* prev) { } else { children = next; } - if (!next) { - _last_child = old_prev; - } if (prev) { next = prev->next; prev->next = obj; @@ -587,9 +581,6 @@ void SPObject::reorder(SPObject* obj, SPObject* prev) { children = obj; } obj->next = next; - if (!next) { - _last_child = obj; - } } void SPObject::detach(SPObject *object) @@ -616,9 +607,6 @@ void SPObject::detach(SPObject *object) } else { this->children = next; } - if (!next) { - this->_last_child = prev; - } object->next = NULL; object->parent = NULL; @@ -856,11 +844,9 @@ void SPObject::releaseReferences() { SPObject *SPObject::getPrev() { - SPObject *prev = 0; - for ( SPObject *obj = parent->firstChild(); obj && !prev; obj = obj->getNext() ) { - if (obj->getNext() == this) { - prev = obj; - } + SPObject *prev = nullptr; + if (parent && !parent->_children.empty() && &parent->_children.front() != this) { + prev = &*(--parent->_children.iterator_to(*this)); } return prev; } diff --git a/src/sp-object.h b/src/sp-object.h index 6aa006283..2534b2268 100644 --- a/src/sp-object.h +++ b/src/sp-object.h @@ -209,7 +209,6 @@ public: SPDocument *document; /* Document we are part of */ SPObject *parent; /* Our parent (only one allowed) */ SPObject *children; /* Our children */ - SPObject *_last_child; /* Remembered last child */ SPObject *next; /* Next object in linked list */ private: @@ -314,11 +313,11 @@ public: bool hasChildren() const { return ( _children.size() > 0 ); } - SPObject *firstChild() { return children; } - SPObject const *firstChild() const { return children; } + SPObject *firstChild() { return _children.empty() ? nullptr : &_children.front(); } + SPObject const *firstChild() const { return _children.empty() ? nullptr : &_children.front(); } - SPObject *lastChild() { return _last_child; } - SPObject const *lastChild() const { return _last_child; } + SPObject *lastChild() { return _children.empty() ? nullptr : &_children.back(); } + SPObject const *lastChild() const { return _children.empty() ? nullptr : &_children.back(); } enum Action { ActionGeneral, ActionBBox, ActionUpdate, ActionShow }; diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 55110f3c5..fde9f90f1 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -223,8 +223,8 @@ void SPPattern::_getChildren(std::list &l) { for (SPPattern *pat_i = this; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i->firstChild()) { // find the first one with children - for (SPObject *child = pat_i->firstChild(); child; child = child->getNext()) { - l.push_back(child); + for (auto& child: pat_i->_children) { + l.push_back(&child); } break; // do not go further up the chain if children are found } @@ -319,8 +319,8 @@ guint SPPattern::_countHrefs(SPObject *o) const i++; } - for (SPObject *child = o->firstChild(); child != NULL; child = child->next) { - i += _countHrefs(child); + for (auto& child: o->_children) { + i += _countHrefs(&child); } return i; @@ -508,13 +508,13 @@ Geom::OptRect SPPattern::viewbox() const bool SPPattern::_hasItemChildren() const { - bool hasChildren = false; - for (SPObject const *child = firstChild(); child && !hasChildren; child = child->getNext()) { - if (SP_IS_ITEM(child)) { - hasChildren = true; + for (auto& child: _children) { + if (SP_IS_ITEM(&child)) { + return true; } } - return hasChildren; + + return false; } bool SPPattern::isValid() const @@ -558,12 +558,12 @@ cairo_pattern_t *SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b Inkscape::DrawingGroup *root = new Inkscape::DrawingGroup(drawing); drawing.setRoot(root); - for (SPObject *child = shown->firstChild(); child != NULL; child = child->getNext()) { - if (SP_IS_ITEM(child)) { + for (auto& child: shown->_children) { + if (SP_IS_ITEM(&child)) { // for each item in pattern, show it on our drawing, add to the group, // and connect to the release signal in case the item gets deleted Inkscape::DrawingItem *cai; - cai = SP_ITEM(child)->invoke_show(drawing, dkey, SP_ITEM_SHOW_DISPLAY); + cai = SP_ITEM(&child)->invoke_show(drawing, dkey, SP_ITEM_SHOW_DISPLAY); root->appendChild(cai); } } @@ -654,9 +654,9 @@ cairo_pattern_t *SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b // Render drawing to pattern_surface via drawing context, this calls root->render // which is really DrawingItem->render(). drawing.render(dc, one_tile); - for (SPObject *child = shown->firstChild(); child != NULL; child = child->getNext()) { - if (SP_IS_ITEM(child)) { - SP_ITEM(child)->invoke_hide(dkey); + for (auto& child: shown->_children) { + if (SP_IS_ITEM(&child)) { + SP_ITEM(&child)->invoke_hide(dkey); } } diff --git a/src/sp-root.cpp b/src/sp-root.cpp index 98eae2159..cfd0ced10 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -73,9 +73,9 @@ void SPRoot::build(SPDocument *document, Inkscape::XML::Node *repr) SPGroup::build(document, repr); // Search for first node - for (SPObject *o = this->firstChild() ; o ; o = o->getNext()) { - if (SP_IS_DEFS(o)) { - this->defs = SP_DEFS(o); + for (auto& o: _children) { + if (SP_IS_DEFS(&o)) { + this->defs = SP_DEFS(&o); break; } } @@ -174,9 +174,9 @@ void SPRoot::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) if (co && SP_IS_DEFS(co)) { // We search for first node - it is not beautiful, but works - for (SPObject *c = this->firstChild() ; c ; c = c->getNext()) { - if (SP_IS_DEFS(c)) { - this->defs = SP_DEFS(c); + for (auto& c: _children) { + if (SP_IS_DEFS(&c)) { + this->defs = SP_DEFS(&c); break; } } @@ -189,7 +189,8 @@ void SPRoot::remove_child(Inkscape::XML::Node *child) SPObject *iter = 0; // We search for first remaining node - it is not beautiful, but works - for (iter = this->firstChild() ; iter ; iter = iter->getNext()) { + for (auto& child: _children) { + iter = &child; if (SP_IS_DEFS(iter) && (SPDefs *)iter != this->defs) { this->defs = (SPDefs *)iter; break; diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index d2dcde15d..7679cc31e 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -32,9 +32,10 @@ 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; + for (auto& child: _children) { + if (SP_IS_ITEM(&child) && sp_item_evaluate(SP_ITEM(&child))) { + first = &child; + break; } } diff --git a/src/sp-text.cpp b/src/sp-text.cpp index 4afc38524..5126ae094 100644 --- a/src/sp-text.cpp +++ b/src/sp-text.cpp @@ -155,9 +155,9 @@ void SPText::update(SPCtx *ctx, guint flags) { // Create temporary list of children GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child, this); - l = g_slist_prepend (l, child); + for (auto& child: _children) { + sp_object_ref(&child, this); + l = g_slist_prepend (l, &child); } l = g_slist_reverse (l); @@ -235,9 +235,9 @@ void SPText::modified(guint flags) { // Create temporary list of children GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child, this); - l = g_slist_prepend (l, child); + for (auto& child: _children) { + sp_object_ref(&child, this); + l = g_slist_prepend (l, &child); } l = g_slist_reverse (l); @@ -262,17 +262,17 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_TITLE(child) || SP_IS_DESC(child)) { + for (auto& child: _children) { + if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) { continue; } Inkscape::XML::Node *crepr = NULL; - if (SP_IS_STRING(child)) { - crepr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + if (SP_IS_STRING(&child)) { + crepr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } else { - crepr = child->updateRepr(xml_doc, NULL, flags); + crepr = child.updateRepr(xml_doc, NULL, flags); } if (crepr) { @@ -286,15 +286,15 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X l = g_slist_remove (l, l->data); } } else { - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_TITLE(child) || SP_IS_DESC(child)) { + for (auto& child: _children) { + if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) { continue; } - if (SP_IS_STRING(child)) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + if (SP_IS_STRING(&child)) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } else { - child->updateRepr(flags); + child.updateRepr(flags); } } } @@ -606,16 +606,16 @@ unsigned SPText::_buildLayoutInput(SPObject *root, Inkscape::Text::Layout::Optio } } - for (SPObject *child = root->firstChild() ; child ; child = child->getNext() ) { - SPString *str = dynamic_cast(child); + for (auto& child: root->_children) { + SPString *str = dynamic_cast(&child); if (str) { Glib::ustring const &string = str->string; // std::cout << " Appending: >" << string << "<" << std::endl; - layout.appendText(string, root->style, child, &optional_attrs, child_attrs_offset + length); + layout.appendText(string, root->style, &child, &optional_attrs, child_attrs_offset + length); length += string.length(); - } else if (!sp_repr_is_meta_element(child->getRepr())) { + } else if (!sp_repr_is_meta_element(child.getRepr())) { /* ^^^^ XML Tree being directly used here while it shouldn't be.*/ - length += _buildLayoutInput(child, optional_attrs, child_attrs_offset + length, in_textpath); + length += _buildLayoutInput(&child, optional_attrs, child_attrs_offset + length, in_textpath); } } @@ -628,9 +628,9 @@ void SPText::rebuildLayout() Inkscape::Text::Layout::OptionalTextTagAttrs optional_attrs; _buildLayoutInput(this, optional_attrs, 0, false); layout.calculateFlow(); - for (SPObject *child = firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_TEXTPATH(child)) { - SPTextPath const *textpath = SP_TEXTPATH(child); + for (auto& child: _children) { + if (SP_IS_TEXTPATH(&child)) { + SPTextPath const *textpath = SP_TEXTPATH(&child); if (textpath->originalPath != NULL) { //g_print("%s", layout.dumpAsText().c_str()); layout.fitToPathAlign(textpath->startOffset, *textpath->originalPath); @@ -640,9 +640,9 @@ void SPText::rebuildLayout() //g_print("%s", layout.dumpAsText().c_str()); // set the x,y attributes on role:line spans - for (SPObject *child = firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_TSPAN(child)) { - SPTSpan *tspan = SP_TSPAN(child); + for (auto& child: _children) { + if (SP_IS_TSPAN(&child)) { + SPTSpan *tspan = SP_TSPAN(&child); if ( (tspan->role != SP_TSPAN_ROLE_UNSPECIFIED) && tspan->attributes.singleXYCoordinates() ) { Inkscape::Text::Layout::iterator iter = layout.sourceToIterator(tspan); diff --git a/src/sp-tref.cpp b/src/sp-tref.cpp index ba592058b..66866c9f7 100644 --- a/src/sp-tref.cpp +++ b/src/sp-tref.cpp @@ -506,9 +506,9 @@ sp_tref_convert_to_tspan(SPObject *obj) //////////////////// else { GSList *l = NULL; - for (SPObject *child = obj->firstChild() ; child != NULL ; child = child->getNext() ) { - sp_object_ref(child, obj); - l = g_slist_prepend (l, child); + for (auto& child: obj->_children) { + sp_object_ref(&child, obj); + l = g_slist_prepend (l, &child); } l = g_slist_reverse (l); while (l) { diff --git a/src/sp-tspan.cpp b/src/sp-tspan.cpp index 05f8430ba..23df18503 100644 --- a/src/sp-tspan.cpp +++ b/src/sp-tspan.cpp @@ -96,9 +96,9 @@ void SPTSpan::update(SPCtx *ctx, guint flags) { } childflags &= SP_OBJECT_MODIFIED_CASCADE; - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if ( flags || ( ochild->uflags & SP_OBJECT_MODIFIED_FLAG )) { - ochild->updateDisplay(ctx, childflags); + for (auto& ochild: _children) { + if ( flags || ( ochild.uflags & SP_OBJECT_MODIFIED_FLAG )) { + ochild.updateDisplay(ctx, childflags); } } @@ -128,9 +128,9 @@ void SPTSpan::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (flags || (ochild->mflags & SP_OBJECT_MODIFIED_FLAG)) { - ochild->emitModified(flags); + for (auto& ochild: _children) { + if (flags || (ochild.mflags & SP_OBJECT_MODIFIED_FLAG)) { + ochild.emitModified(flags); } } } @@ -175,15 +175,15 @@ Inkscape::XML::Node* SPTSpan::write(Inkscape::XML::Document *xml_doc, Inkscape:: if ( flags&SP_OBJECT_WRITE_BUILD ) { GSList *l = NULL; - for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node* c_repr=NULL; - if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_TEXTPATH(child) ) { - //c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen - } else if ( SP_IS_STRING(child) ) { - c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_TEXTPATH(&child) ) { + //c_repr = child.updateRepr(xml_doc, NULL, flags); // shouldn't happen + } else if ( SP_IS_STRING(&child) ) { + c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } if ( c_repr ) { @@ -197,13 +197,13 @@ Inkscape::XML::Node* SPTSpan::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = g_slist_remove(l, l->data); } } else { - for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { - if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_TEXTPATH(child) ) { + for (auto& child: _children) { + if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_TEXTPATH(&child) ) { //c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen - } else if ( SP_IS_STRING(child) ) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + } else if ( SP_IS_STRING(&child) ) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } } } @@ -313,9 +313,9 @@ void SPTextPath::update(SPCtx *ctx, guint flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if ( flags || ( ochild->uflags & SP_OBJECT_MODIFIED_FLAG )) { - ochild->updateDisplay(ctx, flags); + for (auto& ochild: _children) { + if ( flags || ( ochild.uflags & SP_OBJECT_MODIFIED_FLAG )) { + ochild.updateDisplay(ctx, flags); } } @@ -367,9 +367,9 @@ void SPTextPath::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (flags || (ochild->mflags & SP_OBJECT_MODIFIED_FLAG)) { - ochild->emitModified(flags); + for (auto& ochild: _children) { + if (flags || (ochild.mflags & SP_OBJECT_MODIFIED_FLAG)) { + ochild.emitModified(flags); } } } @@ -399,15 +399,15 @@ Inkscape::XML::Node* SPTextPath::write(Inkscape::XML::Document *xml_doc, Inkscap if ( flags & SP_OBJECT_WRITE_BUILD ) { GSList *l = NULL; - for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node* c_repr=NULL; - if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_TEXTPATH(child) ) { + if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_TEXTPATH(&child) ) { //c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen - } else if ( SP_IS_STRING(child) ) { - c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + } else if ( SP_IS_STRING(&child) ) { + c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } if ( c_repr ) { @@ -421,13 +421,13 @@ Inkscape::XML::Node* SPTextPath::write(Inkscape::XML::Document *xml_doc, Inkscap l = g_slist_remove(l, l->data); } } else { - for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { - if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_TEXTPATH(child) ) { - //c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen - } else if ( SP_IS_STRING(child) ) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + for (auto& child: _children) { + if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_TEXTPATH(&child) ) { + //c_repr = child.updateRepr(xml_doc, NULL, flags); // shouldn't happen + } else if ( SP_IS_STRING(&child) ) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } } } @@ -466,8 +466,8 @@ void sp_textpath_to_text(SPObject *tp) // make a list of textpath children GSList *tp_reprs = NULL; - for (SPObject *o = tp->firstChild() ; o != NULL; o = o->next) { - tp_reprs = g_slist_prepend(tp_reprs, o->getRepr()); + for (auto& o: tp->_children) { + tp_reprs = g_slist_prepend(tp_reprs, o.getRepr()); } for ( GSList *i = tp_reprs ; i ; i = i->next ) { diff --git a/src/splivarot.cpp b/src/splivarot.cpp index b1f324be2..4ac9143f0 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -883,9 +883,9 @@ void item_outline_add_marker_child( SPItem const *item, Geom::Affine marker_tran // note: a marker child item can be an item group! if (SP_IS_GROUP(item)) { // recurse through all childs: - for (SPObject const *o = item->firstChild() ; o ; o = o->getNext() ) { - if ( SP_IS_ITEM(o) ) { - item_outline_add_marker_child(SP_ITEM(o), tr, pathv_in); + for (auto& o: item->_children) { + if ( SP_IS_ITEM(&o) ) { + item_outline_add_marker_child(SP_ITEM(&o), tr, pathv_in); } } } else { diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp index 86aee1831..f539652c0 100644 --- a/src/text-chemistry.cpp +++ b/src/text-chemistry.cpp @@ -240,9 +240,9 @@ text_remove_all_kerns_recursively(SPObject *o) g_strfreev(xa_comma); } - for (SPObject *i = o->firstChild(); i != NULL; i = i->getNext()) { - text_remove_all_kerns_recursively(i); - i->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG); + for (auto& i: o->_children) { + text_remove_all_kerns_recursively(&i); + i.requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG); } } diff --git a/src/text-editing.cpp b/src/text-editing.cpp index 057523b1e..b03be792b 100644 --- a/src/text-editing.cpp +++ b/src/text-editing.cpp @@ -91,8 +91,8 @@ bool sp_te_input_is_empty(SPObject const *item) if (SP_IS_STRING(item)) { empty = SP_STRING(item)->string.empty(); } else { - for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) { - if (!sp_te_input_is_empty(child)) { + for (auto& child: item->_children) { + if (!sp_te_input_is_empty(&child)) { empty = false; break; } @@ -237,11 +237,11 @@ unsigned sp_text_get_length(SPObject const *item) length++; } - for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) { - if (SP_IS_STRING(child)) { - length += SP_STRING(child)->string.length(); + for (auto& child: item->_children) { + if (SP_IS_STRING(&child)) { + length += SP_STRING(&child)->string.length(); } else { - length += sp_text_get_length(child); + length += sp_text_get_length(&child); } } } @@ -267,22 +267,22 @@ unsigned sp_text_get_length_upto(SPObject const *item, SPObject const *upto) } // Count the length of the children - for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) { - if (upto && child == upto) { + for (auto& child: item->_children) { + if (upto && &child == upto) { // hit upto, return immediately return length; } - if (SP_IS_STRING(child)) { - length += SP_STRING(child)->string.length(); + if (SP_IS_STRING(&child)) { + length += SP_STRING(&child)->string.length(); } else { - if (upto && child->isAncestorOf(upto)) { + if (upto && child.isAncestorOf(upto)) { // upto is below us, recurse and break loop - length += sp_text_get_length_upto(child, upto); + length += sp_text_get_length_upto(&child, upto); return length; } else { // recurse and go to the next sibling - length += sp_text_get_length_upto(child, upto); + length += sp_text_get_length_upto(&child, upto); } } } @@ -323,8 +323,11 @@ to \a item at the same level. */ static unsigned sum_sibling_text_lengths_before(SPObject const *item) { unsigned char_index = 0; - for (SPObject *sibling = item->parent->firstChild() ; sibling && sibling != item ; sibling = sibling->getNext()) { - char_index += sp_text_get_length(sibling); + for (auto& sibling: item->parent->_children) { + if (&sibling == item) { + break; + } + char_index += sp_text_get_length(&sibling); } return char_index; } @@ -857,11 +860,11 @@ static void sp_te_get_ustring_multiline(SPObject const *root, Glib::ustring *str if (*pending_line_break) { *string += '\n'; } - for (SPObject const *child = root->firstChild() ; child ; child = child->getNext()) { - if (SP_IS_STRING(child)) { - *string += SP_STRING(child)->string; + for (auto& child: root->_children) { + if (SP_IS_STRING(&child)) { + *string += SP_STRING(&child)->string; } else { - sp_te_get_ustring_multiline(child, string, pending_line_break); + sp_te_get_ustring_multiline(&child, string, pending_line_break); } } if (!SP_IS_TEXT(root) && !SP_IS_TEXTPATH(root) && is_line_break_object(root)) { @@ -1405,17 +1408,17 @@ static void apply_css_recursive(SPObject *o, SPCSSAttr const *css) { sp_repr_css_change(o->getRepr(), const_cast(css), "style"); - for (SPObject *child = o->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: o->_children) { if (sp_repr_css_property(const_cast(css), "opacity", NULL) != NULL) { // Unset properties which are accumulating and thus should not be set recursively. // For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group. SPCSSAttr *css_recurse = sp_repr_css_attr_new(); sp_repr_css_merge(css_recurse, const_cast(css)); sp_repr_css_set_property(css_recurse, "opacity", NULL); - apply_css_recursive(child, css_recurse); + apply_css_recursive(&child, css_recurse); sp_repr_css_attr_unref(css_recurse); } else { - apply_css_recursive(child, const_cast(css)); + apply_css_recursive(&child, const_cast(css)); } } } @@ -1429,7 +1432,7 @@ static void recursively_apply_style(SPObject *common_ancestor, SPCSSAttr const * { bool passed_start = start_item == NULL ? true : false; Inkscape::XML::Document *xml_doc = common_ancestor->document->getReprDoc(); - + for (SPObject *child = common_ancestor->firstChild() ; child ; child = child->getNext()) { if (start_item == child) { passed_start = true; @@ -2073,8 +2076,8 @@ bool has_visible_text(SPObject *obj) if (SP_IS_STRING(obj) && !SP_STRING(obj)->string.empty()) { hasVisible = true; // maybe we should also check that it's not all whitespace? } else { - for (SPObject const *child = obj->firstChild() ; child ; child = child->getNext()) { - if (has_visible_text(const_cast(child))) { + for (auto& child: obj->_children) { + if (has_visible_text(const_cast(&child))) { hasVisible = true; break; } diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index 9871804f5..75c6c5bcc 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -894,8 +894,8 @@ void ClipboardManagerImpl::_copyPattern(SPPattern *pattern) _copyNode(pattern->getRepr(), _doc, _defs); // items in the pattern may also use gradients and other patterns, so recurse - for ( SPObject *child = pattern->firstChild() ; child ; child = child->getNext() ) { - SPItem *childItem = dynamic_cast(child); + for (auto& child: pattern->_children) { + SPItem *childItem = dynamic_cast(&child); if (childItem) { _copyUsedDefs(childItem); } diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index 87c90c460..11af02e3c 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -2042,12 +2042,12 @@ void CloneTiler::clonetiler_trace_hide_tiled_clones_recursively(SPObject *from) if (!trace_drawing) return; - for (SPObject *o = from->firstChild(); o != NULL; o = o->next) { - SPItem *item = dynamic_cast(o); - if (item && clonetiler_is_a_clone_of(o, NULL)) { + for (auto& o: from->_children) { + SPItem *item = dynamic_cast(&o); + if (item && clonetiler_is_a_clone_of(&o, NULL)) { item->invoke_hide(trace_visionkey); // FIXME: hide each tiled clone's original too! } - clonetiler_trace_hide_tiled_clones_recursively (o); + clonetiler_trace_hide_tiled_clones_recursively (&o); } } @@ -2123,9 +2123,9 @@ void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *) std::vector to_unclump; // not including the original - for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) { - if (clonetiler_is_a_clone_of (child, obj)) { - to_unclump.push_back((SPItem*)child); + for (auto& child: parent->_children) { + if (clonetiler_is_a_clone_of (&child, obj)) { + to_unclump.push_back((SPItem*)&child); } } @@ -2143,8 +2143,8 @@ guint CloneTiler::clonetiler_number_of_clones(SPObject *obj) guint n = 0; - for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) { - if (clonetiler_is_a_clone_of (child, obj)) { + for (auto& child: parent->_children) { + if (clonetiler_is_a_clone_of (&child, obj)) { n ++; } } @@ -2172,9 +2172,9 @@ void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool d // remove old tiling GSList *to_delete = NULL; - for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) { - if (clonetiler_is_a_clone_of (child, obj)) { - to_delete = g_slist_prepend (to_delete, child); + for (auto& child: parent->_children) { + if (clonetiler_is_a_clone_of (&child, obj)) { + to_delete = g_slist_prepend (to_delete, &child); } } for (GSList *i = to_delete; i; i = i->next) { diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index 78e03e2a0..a60d1ddff 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -103,9 +103,7 @@ static int input_count(const SPFilterPrimitive* prim) return 2; else if(SP_IS_FEMERGE(prim)) { // Return the number of feMergeNode connections plus an extra - int count = 1; - for(const SPObject* o = prim->firstChild(); o; o = o->next, ++count){}; - return count; + return (int) (prim->_children.size() + 1); } else return 1; @@ -2343,11 +2341,12 @@ const Gtk::TreeIter FilterEffectsDialog::PrimitiveList::find_result(const Gtk::T if(SP_IS_FEMERGE(prim)) { int c = 0; bool found = false; - for(const SPObject* o = prim->firstChild(); o; o = o->next, ++c) { - if(c == attr && SP_IS_FEMERGENODE(o)) { - image = SP_FEMERGENODE(o)->input; + for (auto& o: prim->_children) { + if(c == attr && SP_IS_FEMERGENODE(&o)) { + image = SP_FEMERGENODE(&o)->input; found = true; } + ++c; } if(!found) return target; @@ -2534,21 +2533,23 @@ bool FilterEffectsDialog::PrimitiveList::on_button_release_event(GdkEventButton* if(SP_IS_FEMERGE(prim)) { int c = 1; bool handled = false; - for(SPObject* o = prim->firstChild(); o && !handled; o = o->next, ++c) { - if(c == _in_drag && SP_IS_FEMERGENODE(o)) { + for (auto& o: prim->_children) { + if(c == _in_drag && SP_IS_FEMERGENODE(&o)) { // If input is null, delete it if(!in_val) { //XML Tree being used directly here while it shouldn't be. - sp_repr_unparent(o->getRepr()); + sp_repr_unparent(o.getRepr()); DocumentUndo::done(prim->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Remove merge node")); (*get_selection()->get_selected())[_columns.primitive] = prim; + } else { + _dialog.set_attr(&o, SP_ATTR_IN, in_val); } - else - _dialog.set_attr(o, SP_ATTR_IN, in_val); handled = true; + break; } + ++c; } // Add new input? if(!handled && c == _in_drag && in_val) { diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp index 013a0ae6a..e156dfa13 100644 --- a/src/ui/dialog/find.cpp +++ b/src/ui/dialog/find.cpp @@ -747,14 +747,14 @@ std::vector &Find::all_items (SPObject *r, std::vector &l, boo return l; // we're not interested in metadata } - for (SPObject *child = r->firstChild(); child; child = child->getNext()) { - SPItem *item = dynamic_cast(child); - if (item && !child->cloned && !desktop->isLayer(item)) { + for (auto& child: r->_children) { + SPItem *item = dynamic_cast(&child); + if (item && !child.cloned && !desktop->isLayer(item)) { if ((hidden || !desktop->itemIsHidden(item)) && (locked || !item->isLocked())) { - l.insert(l.begin(),(SPItem*)child); + l.insert(l.begin(),(SPItem*)&child); } } - l = all_items (child, l, hidden, locked); + l = all_items (&child, l, hidden, locked); } return l; } diff --git a/src/ui/dialog/font-substitution.cpp b/src/ui/dialog/font-substitution.cpp index f219f3db6..eafe5566a 100644 --- a/src/ui/dialog/font-substitution.cpp +++ b/src/ui/dialog/font-substitution.cpp @@ -182,7 +182,7 @@ std::vector FontSubstitution::getFontReplacedItems(SPDocument* doc, Gli family = SP_TEXT(parent_text)->layout.getFontFamily(0); // Add all the spans fonts to the set gint ii = 0; - for (SPObject *child = parent_text->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: parent_text->_children) { family = SP_TEXT(parent_text)->layout.getFontFamily(ii); setFontSpans.insert(family); ii++; diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 9d05c73bc..00482c573 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -1292,9 +1292,9 @@ bool ObjectsPanel::_executeAction() break; case BUTTON_COLLAPSE_ALL: { - for (SPObject* obj = _document->getRoot()->firstChild(); obj != NULL; obj = obj->next) { - if (SP_IS_GROUP(obj)) { - _setCollapsed(SP_GROUP(obj)); + for (auto& obj: _document->getRoot()->_children) { + if (SP_IS_GROUP(&obj)) { + _setCollapsed(SP_GROUP(&obj)); } } _objectsChanged(_document->getRoot()); diff --git a/src/ui/dialog/spellcheck.cpp b/src/ui/dialog/spellcheck.cpp index 6da8acb20..9338a4e8c 100644 --- a/src/ui/dialog/spellcheck.cpp +++ b/src/ui/dialog/spellcheck.cpp @@ -234,14 +234,14 @@ GSList *SpellCheck::allTextItems (SPObject *r, GSList *l, bool hidden, bool lock return l; // we're not interested in metadata } - for (SPObject *child = r->firstChild(); child; child = child->next) { - if (SP_IS_ITEM (child) && !child->cloned && !desktop->isLayer(SP_ITEM(child))) { - if ((hidden || !desktop->itemIsHidden(SP_ITEM(child))) && (locked || !SP_ITEM(child)->isLocked())) { - if (SP_IS_TEXT(child) || SP_IS_FLOWTEXT(child)) - l = g_slist_prepend (l, child); + for (auto& child: r->_children) { + if (SP_IS_ITEM (&child) && !child.cloned && !desktop->isLayer(SP_ITEM(&child))) { + if ((hidden || !desktop->itemIsHidden(SP_ITEM(&child))) && (locked || !SP_ITEM(&child)->isLocked())) { + if (SP_IS_TEXT(&child) || SP_IS_FLOWTEXT(&child)) + l = g_slist_prepend (l, &child); } } - l = allTextItems (child, l, hidden, locked); + l = allTextItems (&child, l, hidden, locked); } return l; } diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index 51d81022f..1fdce34a5 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -658,8 +658,8 @@ GSList* SymbolsDialog::symbols_in_doc_recursive (SPObject *r, GSList *l) l = g_slist_prepend (l, r); } - for (SPObject *child = r->firstChild(); child; child = child->getNext()) { - l = symbols_in_doc_recursive( child, l ); + for (auto& child: r->_children) { + l = symbols_in_doc_recursive( &child, l ); } return l; @@ -680,8 +680,8 @@ GSList* SymbolsDialog::use_in_doc_recursive (SPObject *r, GSList *l) l = g_slist_prepend (l, r); } - for (SPObject *child = r->firstChild(); child; child = child->getNext()) { - l = use_in_doc_recursive( child, l ); + for (auto& child: r->_children) { + l = use_in_doc_recursive( &child, l ); } return l; diff --git a/src/ui/tools/box3d-tool.cpp b/src/ui/tools/box3d-tool.cpp index 27e755add..2adba38c5 100644 --- a/src/ui/tools/box3d-tool.cpp +++ b/src/ui/tools/box3d-tool.cpp @@ -118,8 +118,8 @@ static void sp_box3d_context_ensure_persp_in_defs(SPDocument *document) { SPDefs *defs = document->getDefs(); bool has_persp = false; - for ( SPObject *child = defs->firstChild(); child; child = child->getNext() ) { - if (SP_IS_PERSP3D(child)) { + for (auto& child: defs->_children) { + if (SP_IS_PERSP3D(&child)) { has_persp = true; break; } diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp index b81a630e2..be8ce6d0c 100644 --- a/src/ui/tools/connector-tool.cpp +++ b/src/ui/tools/connector-tool.cpp @@ -1114,9 +1114,9 @@ void ConnectorTool::_setActiveShape(SPItem *item) { // The idea here is to try and add a group's children to solidify // connection handling. We react to path objects with only one node. - for (SPObject *child = item->firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_PATH(child) && SP_PATH(child)->nodesInPath() == 1) { - this->_activeShapeAddKnot((SPItem *) child); + for (auto& child: item->_children) { + if (SP_IS_PATH(&child) && SP_PATH(&child)->nodesInPath() == 1) { + this->_activeShapeAddKnot((SPItem *) &child); } } this->_activeShapeAddKnot(item); diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp index 658cf4617..d048c318b 100644 --- a/src/ui/tools/tweak-tool.cpp +++ b/src/ui/tools/tweak-tool.cpp @@ -385,9 +385,9 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P if (dynamic_cast(item) && !dynamic_cast(item)) { GSList *children = NULL; - for (SPObject *child = item->firstChild() ; child; child = child->getNext() ) { - if (dynamic_cast(static_cast(child))) { - children = g_slist_prepend(children, child); + for (auto& child: item->_children) { + if (dynamic_cast(static_cast(&child))) { + children = g_slist_prepend(children, &child); } } @@ -832,8 +832,8 @@ static void tweak_colors_in_gradient(SPItem *item, Inkscape::PaintTarget fill_or double offset_l = 0; double offset_h = 0; SPObject *child_prev = NULL; - for (SPObject *child = vector->firstChild(); child; child = child->getNext()) { - SPStop *stop = dynamic_cast(child); + for (auto& child: vector->_children) { + SPStop *stop = dynamic_cast(&child); if (!stop) { continue; } @@ -878,7 +878,7 @@ static void tweak_colors_in_gradient(SPItem *item, Inkscape::PaintTarget fill_or } offset_l = offset_h; - child_prev = child; + child_prev = &child; } } @@ -894,8 +894,8 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point, bool did = false; if (dynamic_cast(item)) { - for (SPObject *child = item->firstChild() ; child; child = child->getNext() ) { - SPItem *childItem = dynamic_cast(child); + for (auto& child: item->_children) { + SPItem *childItem = dynamic_cast(&child); if (childItem) { if (sp_tweak_color_recursive (mode, childItem, item_at_point, fill_goal, do_fill, diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index a395d1954..c4b2ed59a 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -720,9 +720,9 @@ static void select_stop_by_drag(GtkWidget *combo_box, SPGradient *gradient, Tool static void select_stop_in_list( GtkWidget *combo_box, SPGradient *gradient, SPStop *new_stop, GtkWidget *data, gboolean block) { int i = 0; - for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { - if (ochild == new_stop) { + for (auto& ochild: gradient->_children) { + if (SP_IS_STOP(&ochild)) { + if (&ochild == new_stop) { blocked = block; gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box) , i); gr_stop_set_offset(GTK_COMBO_BOX(combo_box), data); @@ -765,9 +765,9 @@ static gboolean update_stop_list( GtkWidget *stop_combo, SPGradient *gradient, S /* Populate the combobox store */ std::vector sl; if ( gradient->hasStops() ) { - for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { - sl.push_back(ochild); + for (auto& ochild: gradient->_children) { + if (SP_IS_STOP(&ochild)) { + sl.push_back(&ochild); } } } diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 97e65141f..813a2d28e 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -363,13 +363,13 @@ unsigned long sp_gradient_to_hhssll(SPGradient *gr) static GSList *get_all_doc_items(GSList *list, SPObject *from, bool onlyvisible, bool onlysensitive, bool ingroups, GSList const *exclude) { - for ( SPObject *child = from->firstChild() ; child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - list = g_slist_prepend(list, SP_ITEM(child)); + for (auto& child: from->_children) { + if (SP_IS_ITEM(&child)) { + list = g_slist_prepend(list, SP_ITEM(&child)); } - if (ingroups || SP_IS_ITEM(child)) { - list = get_all_doc_items(list, child, onlyvisible, onlysensitive, ingroups, exclude); + if (ingroups || SP_IS_ITEM(&child)) { + list = get_all_doc_items(list, &child, onlyvisible, onlysensitive, ingroups, exclude); } } @@ -525,10 +525,10 @@ static void verify_grad(SPGradient *gradient) int i = 0; SPStop *stop = NULL; /* count stops */ - for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { + for (auto& ochild: gradient->_children) { + if (SP_IS_STOP(&ochild)) { i++; - stop = SP_STOP(ochild); + stop = SP_STOP(&ochild); } } @@ -568,9 +568,9 @@ static void select_stop_in_list( GtkWidget *vb, SPGradient *gradient, SPStop *ne GtkWidget *combo_box = static_cast(g_object_get_data(G_OBJECT(vb), "combo_box")); int i = 0; - for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { - if (ochild == new_stop) { + for (auto& ochild: gradient->_children) { + if (SP_IS_STOP(&ochild)) { + if (&ochild == new_stop) { gtk_combo_box_set_active (GTK_COMBO_BOX(combo_box) , i); break; } @@ -603,9 +603,9 @@ static void update_stop_list( GtkWidget *vb, SPGradient *gradient, SPStop *new_s /* Populate the combobox store */ GSList *sl = NULL; if ( gradient->hasStops() ) { - for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { - sl = g_slist_append(sl, ochild); + for (auto& ochild: gradient->_children) { + if (SP_IS_STOP(&ochild)) { + sl = g_slist_append(sl, &ochild); } } } diff --git a/src/widgets/stroke-marker-selector.cpp b/src/widgets/stroke-marker-selector.cpp index e273faad7..fd7b5f6cd 100644 --- a/src/widgets/stroke-marker-selector.cpp +++ b/src/widgets/stroke-marker-selector.cpp @@ -335,10 +335,10 @@ GSList *MarkerComboBox::get_marker_list (SPDocument *source) return NULL; } - for ( SPObject *child = defs->firstChild(); child; child = child->getNext() ) + for (auto& child: defs->_children) { - if (SP_IS_MARKER(child)) { - ml = g_slist_prepend (ml, child); + if (SP_IS_MARKER(&child)) { + ml = g_slist_prepend (ml, &child); } } return ml; -- cgit v1.2.3 From 9e210a6d1333c3366681547e3e81593ef69ff73e Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 14 Jul 2016 12:56:49 +0200 Subject: Last part of new SPObject children list (bzr r14954.1.20) --- src/desktop-style.cpp | 6 +-- src/display/nr-svgfonts.cpp | 35 +++++++------ src/extension/internal/metafile-print.cpp | 18 ++++--- src/filters/blend.cpp | 6 +-- src/filters/componenttransfer.cpp | 19 ++++--- src/filters/composite.cpp | 6 +-- src/filters/diffuselighting.cpp | 24 ++++----- src/filters/displacementmap.cpp | 6 +-- src/filters/merge.cpp | 9 ++-- src/filters/specularlighting.cpp | 24 ++++----- src/main.cpp | 6 +-- src/selection-chemistry.cpp | 28 +++++------ src/sp-filter-primitive.cpp | 6 ++- src/sp-filter.cpp | 25 ++++----- src/sp-flowtext.cpp | 4 +- src/sp-item-group.cpp | 2 +- src/sp-item.cpp | 28 +++++------ src/sp-object.cpp | 66 ++++++------------------ src/sp-object.h | 9 +--- src/sp-text.cpp | 12 ++--- src/sp-use.cpp | 32 +++++------- src/text-chemistry.cpp | 10 ++-- src/text-editing.cpp | 9 ++-- src/ui/clipboard.cpp | 8 +-- src/ui/dialog/document-properties.cpp | 14 +++--- src/ui/dialog/filter-effects-dialog.cpp | 54 ++++++++++---------- src/ui/dialog/objects.cpp | 83 +++++++++++++++++------------- src/ui/dialog/svg-fonts-dialog.cpp | 84 ++++++++++++++----------------- src/ui/dialog/tags.cpp | 45 ++++++++--------- src/ui/tools/node-tool.cpp | 4 +- src/ui/tools/tweak-tool.cpp | 6 +-- src/uri-references.cpp | 7 +-- 32 files changed, 320 insertions(+), 375 deletions(-) (limited to 'src') diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp index a52ab3d76..e4b7c6a83 100644 --- a/src/desktop-style.cpp +++ b/src/desktop-style.cpp @@ -1810,9 +1810,8 @@ objects_query_blur (const std::vector &objects, SPStyle *style_res) //if object has a filter if (style->filter.set && style->getFilter()) { //cycle through filter primitives - SPObject *primitive_obj = style->getFilter()->children; - while (primitive_obj) { - SPFilterPrimitive *primitive = dynamic_cast(primitive_obj); + for(auto& primitive_obj: style->getFilter()->_children) { + SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (primitive) { //if primitive is gaussianblur @@ -1830,7 +1829,6 @@ objects_query_blur (const std::vector &objects, SPStyle *style_res) } } } - primitive_obj = primitive_obj->next; } } } diff --git a/src/display/nr-svgfonts.cpp b/src/display/nr-svgfonts.cpp index 011f51977..927093ef4 100644 --- a/src/display/nr-svgfonts.cpp +++ b/src/display/nr-svgfonts.cpp @@ -203,14 +203,19 @@ SvgFont::scaled_font_text_to_glyphs (cairo_scaled_font_t */*scaled_font*/, //check whether is there a glyph declared on the SVG document // that matches with the text string in its current position if ( (len = size_of_substring(this->glyphs[i]->unicode.c_str(), _utf8)) ){ - for(SPObject* node = this->font->children;previous_unicode && node;node=node->next){ + for(auto& node: font->_children) { + if (!previous_unicode) { + break; + } //apply glyph kerning if appropriate - SPHkern *hkern = dynamic_cast(node); - if (hkern && is_horizontal_text && MatchHKerningRule(hkern, this->glyphs[i], previous_unicode, previous_glyph_name) ){ + SPHkern *hkern = dynamic_cast(&node); + if (hkern && is_horizontal_text && + MatchHKerningRule(hkern, this->glyphs[i], previous_unicode, previous_glyph_name)) { x -= (hkern->k / 1000.0);//TODO: use here the height of the font } - SPVkern *vkern = dynamic_cast(node); - if (vkern && !is_horizontal_text && MatchVKerningRule(vkern, this->glyphs[i], previous_unicode, previous_glyph_name) ){ + SPVkern *vkern = dynamic_cast(&node); + if (vkern && !is_horizontal_text && + MatchVKerningRule(vkern, this->glyphs[i], previous_unicode, previous_glyph_name)) { y -= (vkern->k / 1000.0);//TODO: use here the "height" of the font } } @@ -271,10 +276,10 @@ SvgFont::glyph_modified(SPObject* /* blah */, unsigned int /* bleh */){ Geom::PathVector SvgFont::flip_coordinate_system(SPFont* spfont, Geom::PathVector pathv){ double units_per_em = 1000; - for (SPObject *obj = spfont->children; obj; obj = obj->next){ - if (dynamic_cast(obj)) { + for(auto& obj: spfont->_children) { + if (dynamic_cast(&obj)) { //XML Tree being directly used here while it shouldn't be. - sp_repr_get_double(obj->getRepr(), "units_per_em", &units_per_em); + sp_repr_get_double(obj.getRepr(), "units_per_em", &units_per_em); } } @@ -339,19 +344,19 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/, if (node->hasChildren()){ //render the SVG described on this glyph's child nodes. - for(node = node->children; node; node=node->next){ + for(auto& child: node->_children) { { - SPPath *path = dynamic_cast(node); + SPPath *path = dynamic_cast(&child); if (path) { pathv = path->_curve->get_pathvector(); pathv = flip_coordinate_system(spfont, pathv); render_glyph_path(cr, &pathv); } } - if (dynamic_cast(node)) { + if (dynamic_cast(&child)) { g_warning("TODO: svgfonts: render OBJECTGROUP"); } - SPUse *use = dynamic_cast(node); + SPUse *use = dynamic_cast(&child); if (use) { SPItem* item = use->ref->getObject(); SPPath *path = dynamic_cast(item); @@ -374,12 +379,12 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/, cairo_font_face_t* SvgFont::get_font_face(){ if (!this->userfont) { - for(SPObject* node = this->font->children;node;node=node->next){ - SPGlyph *glyph = dynamic_cast(node); + for(auto& node: font->_children) { + SPGlyph *glyph = dynamic_cast(&node); if (glyph) { glyphs.push_back(glyph); } - SPMissingGlyph *missing = dynamic_cast(node); + SPMissingGlyph *missing = dynamic_cast(&node); if (missing) { missingglyph = missing; } diff --git a/src/extension/internal/metafile-print.cpp b/src/extension/internal/metafile-print.cpp index 47ba5971c..5c10f7dd9 100644 --- a/src/extension/internal/metafile-print.cpp +++ b/src/extension/internal/metafile-print.cpp @@ -293,20 +293,22 @@ void PrintMetafile::brush_classify(SPObject *parent, int depth, Inkscape::Pixbuf } // still looking? Look at this pattern's children, if there are any - SPObject *child = pat_i->firstChild(); - while (child && !(*epixbuf) && (*hatchType == -1)) { - brush_classify(child, depth, epixbuf, hatchType, hatchColor, bkColor); - child = child->getNext(); + for (auto& child: pat_i->_children) { + if (*epixbuf || *hatchType != -1) { + break; + } + brush_classify(&child, depth, epixbuf, hatchType, hatchColor, bkColor); } } } else if (SP_IS_IMAGE(parent)) { *epixbuf = ((SPImage *)parent)->pixbuf; return; } else { // some inkscape rearrangements pass through nodes between pattern and image which are not classified as either. - SPObject *child = parent->firstChild(); - while (child && !(*epixbuf) && (*hatchType == -1)) { - brush_classify(child, depth, epixbuf, hatchType, hatchColor, bkColor); - child = child->getNext(); + for (auto& child: parent->_children) { + if (*epixbuf || *hatchType != -1) { + break; + } + brush_classify(&child, depth, epixbuf, hatchType, hatchColor, bkColor); } } } diff --git a/src/filters/blend.cpp b/src/filters/blend.cpp index 6e92ef50f..d3f031257 100644 --- a/src/filters/blend.cpp +++ b/src/filters/blend.cpp @@ -199,11 +199,11 @@ Inkscape::XML::Node* SPFeBlend::write(Inkscape::XML::Document *doc, Inkscape::XM if( !in2_name ) { // This code is very similar to sp_filter_primtive_name_previous_out() - SPObject *i = parent->children; + SPObject *i = parent->firstChild(); // Find previous filter primitive - while (i && i->next != this) { - i = i->next; + while (i && i->getNext() != this) { + i = i->getNext(); } if( i ) { diff --git a/src/filters/componenttransfer.cpp b/src/filters/componenttransfer.cpp index 3d0264390..e52f6d478 100644 --- a/src/filters/componenttransfer.cpp +++ b/src/filters/componenttransfer.cpp @@ -49,11 +49,10 @@ static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_c { if (sp_componenttransfer->renderer) { bool set[4] = {false, false, false, false}; - SPObject* node = sp_componenttransfer->children; - for(;node;node=node->next){ + for(auto& node: sp_componenttransfer->_children) { int i = 4; - SPFeFuncNode *funcNode = SP_FEFUNCNODE(node); + SPFeFuncNode *funcNode = SP_FEFUNCNODE(&node); switch (funcNode->channel) { case SPFeFuncNode::R: @@ -74,13 +73,13 @@ static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_c g_warning("Unrecognized channel for component transfer."); break; } - sp_componenttransfer->renderer->type[i] = ((SPFeFuncNode *) node)->type; - sp_componenttransfer->renderer->tableValues[i] = ((SPFeFuncNode *) node)->tableValues; - sp_componenttransfer->renderer->slope[i] = ((SPFeFuncNode *) node)->slope; - sp_componenttransfer->renderer->intercept[i] = ((SPFeFuncNode *) node)->intercept; - sp_componenttransfer->renderer->amplitude[i] = ((SPFeFuncNode *) node)->amplitude; - sp_componenttransfer->renderer->exponent[i] = ((SPFeFuncNode *) node)->exponent; - sp_componenttransfer->renderer->offset[i] = ((SPFeFuncNode *) node)->offset; + sp_componenttransfer->renderer->type[i] = ((SPFeFuncNode *) &node)->type; + sp_componenttransfer->renderer->tableValues[i] = ((SPFeFuncNode *) &node)->tableValues; + sp_componenttransfer->renderer->slope[i] = ((SPFeFuncNode *) &node)->slope; + sp_componenttransfer->renderer->intercept[i] = ((SPFeFuncNode *) &node)->intercept; + sp_componenttransfer->renderer->amplitude[i] = ((SPFeFuncNode *) &node)->amplitude; + sp_componenttransfer->renderer->exponent[i] = ((SPFeFuncNode *) &node)->exponent; + sp_componenttransfer->renderer->offset[i] = ((SPFeFuncNode *) &node)->offset; set[i] = true; } // Set any types not explicitly set to the identity transform diff --git a/src/filters/composite.cpp b/src/filters/composite.cpp index 3e651a778..42f06915f 100644 --- a/src/filters/composite.cpp +++ b/src/filters/composite.cpp @@ -221,11 +221,11 @@ Inkscape::XML::Node* SPFeComposite::write(Inkscape::XML::Document *doc, Inkscape if( !in2_name ) { // This code is very similar to sp_filter_primitive_name_previous_out() - SPObject *i = parent->children; + SPObject *i = parent->firstChild(); // Find previous filter primitive - while (i && i->next != this) { - i = i->next; + while (i && i->getNext() != this) { + i = i->getNext(); } if( i ) { diff --git a/src/filters/diffuselighting.cpp b/src/filters/diffuselighting.cpp index 120c058d2..a46b367ec 100644 --- a/src/filters/diffuselighting.cpp +++ b/src/filters/diffuselighting.cpp @@ -258,17 +258,17 @@ static void sp_feDiffuseLighting_children_modified(SPFeDiffuseLighting *sp_diffu { if (sp_diffuselighting->renderer) { sp_diffuselighting->renderer->light_type = Inkscape::Filters::NO_LIGHT; - if (SP_IS_FEDISTANTLIGHT(sp_diffuselighting->children)) { + if (SP_IS_FEDISTANTLIGHT(sp_diffuselighting->firstChild())) { sp_diffuselighting->renderer->light_type = Inkscape::Filters::DISTANT_LIGHT; - sp_diffuselighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_diffuselighting->children); + sp_diffuselighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_diffuselighting->firstChild()); } - if (SP_IS_FEPOINTLIGHT(sp_diffuselighting->children)) { + if (SP_IS_FEPOINTLIGHT(sp_diffuselighting->firstChild())) { sp_diffuselighting->renderer->light_type = Inkscape::Filters::POINT_LIGHT; - sp_diffuselighting->renderer->light.point = SP_FEPOINTLIGHT(sp_diffuselighting->children); + sp_diffuselighting->renderer->light.point = SP_FEPOINTLIGHT(sp_diffuselighting->firstChild()); } - if (SP_IS_FESPOTLIGHT(sp_diffuselighting->children)) { + if (SP_IS_FESPOTLIGHT(sp_diffuselighting->firstChild())) { sp_diffuselighting->renderer->light_type = Inkscape::Filters::SPOT_LIGHT; - sp_diffuselighting->renderer->light.spot = SP_FESPOTLIGHT(sp_diffuselighting->children); + sp_diffuselighting->renderer->light.spot = SP_FESPOTLIGHT(sp_diffuselighting->firstChild()); } } } @@ -293,19 +293,19 @@ void SPFeDiffuseLighting::build_renderer(Inkscape::Filters::Filter* filter) { //We assume there is at most one child nr_diffuselighting->light_type = Inkscape::Filters::NO_LIGHT; - if (SP_IS_FEDISTANTLIGHT(this->children)) { + if (SP_IS_FEDISTANTLIGHT(this->firstChild())) { nr_diffuselighting->light_type = Inkscape::Filters::DISTANT_LIGHT; - nr_diffuselighting->light.distant = SP_FEDISTANTLIGHT(this->children); + nr_diffuselighting->light.distant = SP_FEDISTANTLIGHT(this->firstChild()); } - if (SP_IS_FEPOINTLIGHT(this->children)) { + if (SP_IS_FEPOINTLIGHT(this->firstChild())) { nr_diffuselighting->light_type = Inkscape::Filters::POINT_LIGHT; - nr_diffuselighting->light.point = SP_FEPOINTLIGHT(this->children); + nr_diffuselighting->light.point = SP_FEPOINTLIGHT(this->firstChild()); } - if (SP_IS_FESPOTLIGHT(this->children)) { + if (SP_IS_FESPOTLIGHT(this->firstChild())) { nr_diffuselighting->light_type = Inkscape::Filters::SPOT_LIGHT; - nr_diffuselighting->light.spot = SP_FESPOTLIGHT(this->children); + nr_diffuselighting->light.spot = SP_FESPOTLIGHT(this->firstChild()); } //nr_offset->set_dx(sp_offset->dx); diff --git a/src/filters/displacementmap.cpp b/src/filters/displacementmap.cpp index 1dbea67ff..f0ca36079 100644 --- a/src/filters/displacementmap.cpp +++ b/src/filters/displacementmap.cpp @@ -193,11 +193,11 @@ Inkscape::XML::Node* SPFeDisplacementMap::write(Inkscape::XML::Document *doc, In if( !in2_name ) { // This code is very similar to sp_filter_primtive_name_previous_out() - SPObject *i = parent->children; + SPObject *i = parent->firstChild(); // Find previous filter primitive - while (i && i->next != this) { - i = i->next; + while (i && i->getNext() != this) { + i = i->getNext(); } if( i ) { diff --git a/src/filters/merge.cpp b/src/filters/merge.cpp index 68f671b11..6af1e8115 100644 --- a/src/filters/merge.cpp +++ b/src/filters/merge.cpp @@ -92,17 +92,14 @@ void SPFeMerge::build_renderer(Inkscape::Filters::Filter* filter) { sp_filter_primitive_renderer_common(this, nr_primitive); - SPObject *input = this->children; int in_nr = 0; - while (input) { - if (SP_IS_FEMERGENODE(input)) { - SPFeMergeNode *node = SP_FEMERGENODE(input); + for(auto& input: _children) { + if (SP_IS_FEMERGENODE(&input)) { + SPFeMergeNode *node = SP_FEMERGENODE(&input); nr_merge->set_input(in_nr, node->input); in_nr++; } - - input = input->next; } } diff --git a/src/filters/specularlighting.cpp b/src/filters/specularlighting.cpp index bda1a0f30..ac7253ad9 100644 --- a/src/filters/specularlighting.cpp +++ b/src/filters/specularlighting.cpp @@ -266,19 +266,19 @@ static void sp_feSpecularLighting_children_modified(SPFeSpecularLighting *sp_spe if (sp_specularlighting->renderer) { sp_specularlighting->renderer->light_type = Inkscape::Filters::NO_LIGHT; - if (SP_IS_FEDISTANTLIGHT(sp_specularlighting->children)) { + if (SP_IS_FEDISTANTLIGHT(sp_specularlighting->firstChild())) { sp_specularlighting->renderer->light_type = Inkscape::Filters::DISTANT_LIGHT; - sp_specularlighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_specularlighting->children); + sp_specularlighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_specularlighting->firstChild()); } - if (SP_IS_FEPOINTLIGHT(sp_specularlighting->children)) { + if (SP_IS_FEPOINTLIGHT(sp_specularlighting->firstChild())) { sp_specularlighting->renderer->light_type = Inkscape::Filters::POINT_LIGHT; - sp_specularlighting->renderer->light.point = SP_FEPOINTLIGHT(sp_specularlighting->children); + sp_specularlighting->renderer->light.point = SP_FEPOINTLIGHT(sp_specularlighting->firstChild()); } - if (SP_IS_FESPOTLIGHT(sp_specularlighting->children)) { + if (SP_IS_FESPOTLIGHT(sp_specularlighting->firstChild())) { sp_specularlighting->renderer->light_type = Inkscape::Filters::SPOT_LIGHT; - sp_specularlighting->renderer->light.spot = SP_FESPOTLIGHT(sp_specularlighting->children); + sp_specularlighting->renderer->light.spot = SP_FESPOTLIGHT(sp_specularlighting->firstChild()); } } } @@ -304,19 +304,19 @@ void SPFeSpecularLighting::build_renderer(Inkscape::Filters::Filter* filter) { //We assume there is at most one child nr_specularlighting->light_type = Inkscape::Filters::NO_LIGHT; - if (SP_IS_FEDISTANTLIGHT(this->children)) { + if (SP_IS_FEDISTANTLIGHT(this->firstChild())) { nr_specularlighting->light_type = Inkscape::Filters::DISTANT_LIGHT; - nr_specularlighting->light.distant = SP_FEDISTANTLIGHT(this->children); + nr_specularlighting->light.distant = SP_FEDISTANTLIGHT(this->firstChild()); } - if (SP_IS_FEPOINTLIGHT(this->children)) { + if (SP_IS_FEPOINTLIGHT(this->firstChild())) { nr_specularlighting->light_type = Inkscape::Filters::POINT_LIGHT; - nr_specularlighting->light.point = SP_FEPOINTLIGHT(this->children); + nr_specularlighting->light.point = SP_FEPOINTLIGHT(this->firstChild()); } - if (SP_IS_FESPOTLIGHT(this->children)) { + if (SP_IS_FESPOTLIGHT(this->firstChild())) { nr_specularlighting->light_type = Inkscape::Filters::SPOT_LIGHT; - nr_specularlighting->light.spot = SP_FESPOTLIGHT(this->children); + nr_specularlighting->light.spot = SP_FESPOTLIGHT(this->firstChild()); } //nr_offset->set_dx(sp_offset->dx); diff --git a/src/main.cpp b/src/main.cpp index db908f640..7ab27dcb2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1483,10 +1483,8 @@ do_query_all_recurse (SPObject *o) } } - SPObject *child = o->children; - while (child) { - do_query_all_recurse (child); - child = child->next; + for(auto& child: o->_children) { + do_query_all_recurse (&child); } } diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 55f4118b0..28bcadef5 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -1010,7 +1010,7 @@ sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop) for (std::vector::const_iterator item=rev.begin();item!=rev.end();++item) { SPObject *child = *item; // for each selected object, find the next sibling - for (SPObject *newref = child->next; newref; newref = newref->next) { + for (SPObject *newref = child->getNext(); newref; newref = newref->getNext()) { // if the sibling is an item AND overlaps our selection, SPItem *newItem = dynamic_cast(newref); if (newItem) { @@ -1138,15 +1138,16 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des for (std::vector::const_reverse_iterator l=rl.rbegin();l!=rl.rend();++l) { gint minpos; - SPObject *pp, *pc; + SPObject *pp; Inkscape::XML::Node *repr = (*l); pp = document->getObjectByRepr(repr->parent()); minpos = 0; g_assert(dynamic_cast(pp)); - pc = pp->firstChild(); - while (!dynamic_cast(pc)) { + for (auto& pc: pp->_children) { + if(dynamic_cast(&pc)) { + break; + } minpos += 1; - pc = pc->next; } repr->setPosition(minpos); } @@ -1197,8 +1198,8 @@ take_style_from_item(SPObject *object) if (css == NULL) return NULL; - if ((dynamic_cast(object) && object->children) || - (dynamic_cast(object) && object->children && object->children->next == NULL)) { + if ((dynamic_cast(object) && object->firstChild()) || + (dynamic_cast(object) && object->firstChild() && object->firstChild()->getNext() == NULL)) { // if this is a text with exactly one tspan child, merge the style of that tspan as well // If this is a group, merge the style of its topmost (last) child with style auto list = object->_children | boost::adaptors::reversed; @@ -2330,10 +2331,10 @@ typedef struct ListReverse { typedef GSList *Iterator; static Iterator children(SPObject *o) { - return make_list(o->firstChild(), NULL); + return make_list(o, NULL); } static Iterator siblings_after(SPObject *o) { - return make_list(o->parent->firstChild(), o); + return make_list(o->parent, o); } static void dispose(Iterator i) { g_slist_free(i); @@ -2347,13 +2348,12 @@ typedef struct ListReverse { private: static GSList *make_list(SPObject *object, SPObject *limit) { GSList *list = NULL; - while ( object != limit ) { - if (!object) { // TODO check if this happens in practice - g_warning("Unexpected list overrun"); + for (auto &child: object->_children) { + if (&child == limit) { break; } - list = g_slist_prepend(list, object); - object = object->getNext(); + list = g_slist_prepend(list, &child); + } return list; } diff --git a/src/sp-filter-primitive.cpp b/src/sp-filter-primitive.cpp index b18850914..09df234cc 100644 --- a/src/sp-filter-primitive.cpp +++ b/src/sp-filter-primitive.cpp @@ -246,8 +246,10 @@ int sp_filter_primitive_read_result(SPFilterPrimitive *prim, gchar const *name) */ int sp_filter_primitive_name_previous_out(SPFilterPrimitive *prim) { SPFilter *parent = SP_FILTER(prim->parent); - SPObject *i = parent->children; - while (i && i->next != prim) i = i->next; + SPObject *i = parent->firstChild(); + while (i && i->getNext() != prim) { + i = i->getNext(); + } if (i) { SPFilterPrimitive *i_prim = SP_FILTER_PRIMITIVE(i); if (i_prim->image_out < 0) { diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index da3f12f5f..170847c0b 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -420,10 +420,9 @@ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr } nr_filter->clear_primitives(); - SPObject *primitive_obj = sp_filter->children; - while (primitive_obj) { - if (SP_IS_FILTER_PRIMITIVE(primitive_obj)) { - SPFilterPrimitive *primitive = SP_FILTER_PRIMITIVE(primitive_obj); + for(auto& primitive_obj: sp_filter->_children) { + if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { + SPFilterPrimitive *primitive = SP_FILTER_PRIMITIVE(&primitive_obj); g_assert(primitive != NULL); // if (((SPFilterPrimitiveClass*) G_OBJECT_GET_CLASS(primitive))->build_renderer) { @@ -433,7 +432,6 @@ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr // } // CPPIFY: => FilterPrimitive should be abstract. primitive->build_renderer(nr_filter); } - primitive_obj = primitive_obj->next; } } @@ -441,11 +439,12 @@ int sp_filter_primitive_count(SPFilter *filter) { g_assert(filter != NULL); int count = 0; - SPObject *primitive_obj = filter->children; - while (primitive_obj) { - if (SP_IS_FILTER_PRIMITIVE(primitive_obj)) count++; - primitive_obj = primitive_obj->next; + for(auto& primitive_obj: filter->_children) { + if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { + count++; + } } + return count; } @@ -513,10 +512,9 @@ Glib::ustring sp_filter_get_new_result_name(SPFilter *filter) { g_assert(filter != NULL); int largest = 0; - SPObject *primitive_obj = filter->children; - while (primitive_obj) { - if (SP_IS_FILTER_PRIMITIVE(primitive_obj)) { - Inkscape::XML::Node *repr = primitive_obj->getRepr(); + for(auto& primitive_obj: filter->_children) { + if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { + Inkscape::XML::Node *repr = primitive_obj.getRepr(); char const *result = repr->attribute("result"); int index; if (result) @@ -530,7 +528,6 @@ Glib::ustring sp_filter_get_new_result_name(SPFilter *filter) { } } } - primitive_obj = primitive_obj->next; } return "result" + Glib::Ascii::dtostr(largest + 1); diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index eed882800..83fa5a1b4 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -440,9 +440,9 @@ Shape* SPFlowtext::_buildExclusionShape() const Shape *shape = new Shape(); Shape *shape_temp = new Shape(); - for (SPObject *child = children ; child ; child = child->getNext() ) { + for (auto& child: _children) { // RH: is it right that this shouldn't be recursive? - SPFlowregionExclude *c_child = dynamic_cast(child); + SPFlowregionExclude *c_child = dynamic_cast(const_cast(&child)); if ( c_child && c_child->computed && c_child->computed->hasEdges() ) { if (shape->hasEdges()) { shape_temp->Booleen(shape, c_child->computed, bool_op_union); diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 7915b0453..8d482d9b1 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -583,7 +583,7 @@ sp_item_group_ungroup (SPGroup *group, std::vector &children, bool do_d if (text) { //this causes a change in text-on-path appearance when there is a non-conformal transform, see bug #1594565 double scale = (ctrans.expansionX() + ctrans.expansionY()) / 2.0; - SPTextPath * text_path = dynamic_cast(text->children); + SPTextPath * text_path = dynamic_cast(text->firstChild()); if (!text_path) { nrepr->setAttribute("transform", affinestr); } else { diff --git a/src/sp-item.cpp b/src/sp-item.cpp index ba57cec8b..53b4c0879 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -351,8 +351,8 @@ void SPItem::moveTo(SPItem *target, bool intoafter) { // Assume move to the "first" in the top node, find the top node intoafter = false; SPObject* bottom = this->document->getObjectByRepr(our_ref->root())->firstChild(); - while(!dynamic_cast(bottom->next)){ - bottom=bottom->next; + while(!dynamic_cast(bottom->getNext())){ + bottom = bottom->getNext(); } target_ref = bottom->getRepr(); } @@ -974,8 +974,8 @@ void SPItem::getSnappoints(std::vector &p, Inkscap for (std::list::const_iterator o = clips_and_masks.begin(); o != clips_and_masks.end(); ++o) { if (*o) { // obj is a group object, the children are the actual clippers - for (SPObject *child = (*o)->children ; child ; child = child->next) { - SPItem *item = dynamic_cast(child); + for(auto& child: (*o)->_children) { + SPItem *item = dynamic_cast(const_cast(&child)); if (item) { std::vector p_clip_or_mask; // Please note the recursive call here! @@ -1302,8 +1302,8 @@ void SPItem::adjust_stroke_width_recursive(double expansion) // A clone's child is the ghost of its original - we must not touch it, skip recursion if ( !dynamic_cast(this) ) { - for ( SPObject *o = children; o; o = o->getNext() ) { - SPItem *item = dynamic_cast(o); + for (auto& o: _children) { + SPItem *item = dynamic_cast(&o); if (item) { item->adjust_stroke_width_recursive(expansion); } @@ -1317,8 +1317,8 @@ void SPItem::freeze_stroke_width_recursive(bool freeze) // A clone's child is the ghost of its original - we must not touch it, skip recursion if ( !dynamic_cast(this) ) { - for ( SPObject *o = children; o; o = o->getNext() ) { - SPItem *item = dynamic_cast(o); + for (auto& o: _children) { + SPItem *item = dynamic_cast(&o); if (item) { item->freeze_stroke_width_recursive(freeze); } @@ -1337,10 +1337,10 @@ sp_item_adjust_rects_recursive(SPItem *item, Geom::Affine advertized_transform) rect->compensateRxRy(advertized_transform); } - for (SPObject *o = item->children; o != NULL; o = o->next) { - SPItem *item = dynamic_cast(o); - if (item) { - sp_item_adjust_rects_recursive(item, advertized_transform); + for(auto& o: item->_children) { + SPItem *itm = dynamic_cast(&o); + if (itm) { + sp_item_adjust_rects_recursive(itm, advertized_transform); } } } @@ -1357,8 +1357,8 @@ void SPItem::adjust_paint_recursive (Geom::Affine advertized_transform, Geom::Af // also we do not recurse into clones, because a clone's child is the ghost of its original - // we must not touch it if (!(this && (dynamic_cast(this) || dynamic_cast(this)))) { - for (SPObject *o = children; o != NULL; o = o->next) { - SPItem *item = dynamic_cast(o); + for (auto& o: _children) { + SPItem *item = dynamic_cast(&o); if (item) { // At the level of the transformed item, t_ancestors is identity; // below it, it is the accmmulated chain of transforms from this level to the top level diff --git a/src/sp-object.cpp b/src/sp-object.cpp index 2babf0441..587efd4f6 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -118,8 +118,7 @@ static gchar *sp_object_get_unique_id(SPObject *object, */ SPObject::SPObject() : cloned(0), uflags(0), mflags(0), hrefcount(0), _total_hrefcount(0), - document(NULL), parent(NULL), children(NULL), - next(NULL), id(NULL), repr(NULL), refCount(1),hrefList(std::list()), + document(NULL), parent(NULL), id(NULL), repr(NULL), refCount(1), hrefList(std::list()), _successor(NULL), _collection_policy(SPObject::COLLECT_WITH_PARENT), _label(NULL), _default_label(NULL) { @@ -532,15 +531,6 @@ void SPObject::attach(SPObject *object, SPObject *prev) } _children.insert(it, *object); - SPObject *next; - if (prev) { - next = prev->next; - prev->next = object; - } else { - next = this->children; - this->children = object; - } - object->next = next; if (!object->xml_space.set) object->xml_space.value = this->xml_space.value; } @@ -558,29 +548,6 @@ void SPObject::reorder(SPObject* obj, SPObject* prev) { } _children.splice(it, _children, _children.iterator_to(*obj)); - - - SPObject *old_prev=NULL; - for ( SPObject *child = children ; child && child != obj ; - child = child->next ) - { - old_prev = child; - } - - SPObject *next=obj->next; - if (old_prev) { - old_prev->next = next; - } else { - children = next; - } - if (prev) { - next = prev->next; - prev->next = obj; - } else { - next = children; - children = obj; - } - obj->next = next; } void SPObject::detach(SPObject *object) @@ -594,21 +561,6 @@ void SPObject::detach(SPObject *object) _children.erase(_children.iterator_to(*object)); object->releaseReferences(); - SPObject *prev=NULL; - for ( SPObject *child = this->children ; child && child != object ; - child = child->next ) - { - prev = child; - } - - SPObject *next=object->next; - if (prev) { - prev->next = next; - } else { - this->children = next; - } - - object->next = NULL; object->parent = NULL; this->_updateTotalHRefCount(-object->_total_hrefcount); @@ -851,6 +803,15 @@ SPObject *SPObject::getPrev() return prev; } +SPObject* SPObject::getNext() +{ + SPObject *next = nullptr; + if (parent && !parent->_children.empty() && &parent->_children.back() != this) { + next = &*(++parent->_children.iterator_to(*this)); + } + return next; +} + void SPObject::repr_child_added(Inkscape::XML::Node * /*repr*/, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, gpointer data) { SPObject *object = SP_OBJECT(data); @@ -1514,8 +1475,11 @@ bool SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool } else { // remove the current content of the 'text' or 'desc' element - SPObject *child; - while (NULL != (child = elem->firstChild())) child->deleteObject(); + auto tmp = elem->_children | boost::adaptors::transformed([](SPObject& obj) { return &obj; }); + std::vector vec(tmp.begin(), tmp.end()); + for (auto &child: vec) { + child->deleteObject(); + } } // add the new content diff --git a/src/sp-object.h b/src/sp-object.h index 2534b2268..94c9d5629 100644 --- a/src/sp-object.h +++ b/src/sp-object.h @@ -208,8 +208,6 @@ public: unsigned int _total_hrefcount; /* our hrefcount + total descendants */ SPDocument *document; /* Document we are part of */ SPObject *parent; /* Our parent (only one allowed) */ - SPObject *children; /* Our children */ - SPObject *next; /* Next object in linked list */ private: SPObject(const SPObject&); @@ -300,11 +298,8 @@ public: */ SPObject const *nearestCommonAncestor(SPObject const *object) const; - /* A non-const version can be similarly constructed if you want one. - * (Don't just cast away the constness, which would be ill-formed.) */ - SPObject *getNext() {return next;} - - SPObject const *getNext() const {return next;} + /* Returns next object in sibling list or NULL. */ + SPObject *getNext(); /** * Returns previous object in sibling list or NULL. diff --git a/src/sp-text.cpp b/src/sp-text.cpp index 5126ae094..193289c2b 100644 --- a/src/sp-text.cpp +++ b/src/sp-text.cpp @@ -676,9 +676,9 @@ void SPText::_adjustFontsizeRecursive(SPItem *item, double ex, bool is_root) item->updateRepr(); } - for (SPObject *o = item->children; o != NULL; o = o->next) { - if (SP_IS_ITEM(o)) - _adjustFontsizeRecursive(SP_ITEM(o), ex, false); + for(auto& o: item->_children) { + if (SP_IS_ITEM(&o)) + _adjustFontsizeRecursive(SP_ITEM(&o), ex, false); } } @@ -695,9 +695,9 @@ void SPText::_adjustCoordsRecursive(SPItem *item, Geom::Affine const &m, double SP_TREF(item)->attributes.transform(m, ex, ex, is_root); } - for (SPObject *o = item->children; o != NULL; o = o->next) { - if (SP_IS_ITEM(o)) - _adjustCoordsRecursive(SP_ITEM(o), m, ex, false); + for(auto& o: item->_children) { + if (SP_IS_ITEM(&o)) + _adjustCoordsRecursive(SP_ITEM(&o), m, ex, false); } } diff --git a/src/sp-use.cpp b/src/sp-use.cpp index c8a0830c1..cef967c90 100644 --- a/src/sp-use.cpp +++ b/src/sp-use.cpp @@ -436,27 +436,23 @@ void SPUse::move_compensate(Geom::Affine const *mp) { //BUT move clippaths accordingly. //if clone has a clippath, move it accordingly if(clip_ref->getObject()){ - SPObject *clip = clip_ref->getObject()->firstChild() ; - while(clip){ - SPItem *item = (SPItem*) clip; + for(auto& clip: clip_ref->getObject()->_children){ + SPItem *item = (SPItem*) &clip; if(item){ item->transform *= m; Geom::Affine identity; - item->doWriteTransform(clip->getRepr(),item->transform, &identity); + item->doWriteTransform(clip.getRepr(),item->transform, &identity); } - clip = clip->getNext(); } } if(mask_ref->getObject()){ - SPObject *mask = mask_ref->getObject()->firstChild() ; - while(mask){ - SPItem *item = (SPItem*) mask; + for(auto& mask: mask_ref->getObject()->_children){ + SPItem *item = (SPItem*) &mask; if(item){ item->transform *= m; Geom::Affine identity; - item->doWriteTransform(mask->getRepr(),item->transform, &identity); + item->doWriteTransform(mask.getRepr(),item->transform, &identity); } - mask = mask->getNext(); } } return; @@ -480,27 +476,23 @@ void SPUse::move_compensate(Geom::Affine const *mp) { //if clone has a clippath, move it accordingly if(clip_ref->getObject()){ - SPObject *clip = clip_ref->getObject()->firstChild() ; - while(clip){ - SPItem *item = (SPItem*) clip; + for(auto& clip: clip_ref->getObject()->_children){ + SPItem *item = (SPItem*) &clip; if(item){ item->transform *= clone_move.inverse(); Geom::Affine identity; - item->doWriteTransform(clip->getRepr(),item->transform, &identity); + item->doWriteTransform(clip.getRepr(),item->transform, &identity); } - clip = clip->getNext(); } } if(mask_ref->getObject()){ - SPObject *mask = mask_ref->getObject()->firstChild() ; - while(mask){ - SPItem *item = (SPItem*) mask; + for(auto& mask: mask_ref->getObject()->_children){ + SPItem *item = (SPItem*) &mask; if(item){ item->transform *= clone_move.inverse(); Geom::Affine identity; - item->doWriteTransform(mask->getRepr(),item->transform, &identity); + item->doWriteTransform(mask.getRepr(),item->transform, &identity); } - mask = mask->getNext(); } } diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp index f539652c0..56048d1f7 100644 --- a/src/text-chemistry.cpp +++ b/src/text-chemistry.cpp @@ -142,8 +142,8 @@ text_put_on_path() // make a list of text children GSList *text_reprs = NULL; - for (SPObject *o = text->children; o != NULL; o = o->next) { - text_reprs = g_slist_prepend(text_reprs, o->getRepr()); + for(auto& o: text->_children) { + text_reprs = g_slist_prepend(text_reprs, o.getRepr()); } // create textPath and put it into the text @@ -353,9 +353,9 @@ text_flow_into_shape() Inkscape::GC::release(text_repr); } else { // reflow an already flowed text, preserving paras - for (SPObject *o = text->children; o != NULL; o = o->next) { - if (SP_IS_FLOWPARA(o)) { - Inkscape::XML::Node *para_repr = o->getRepr()->duplicate(xml_doc); + for(auto& o: text->_children) { + if (SP_IS_FLOWPARA(&o)) { + Inkscape::XML::Node *para_repr = o.getRepr()->duplicate(xml_doc); root_repr->appendChild(para_repr); object = doc->getObjectByRepr(para_repr); g_return_if_fail(SP_IS_FLOWPARA(object)); diff --git a/src/text-editing.cpp b/src/text-editing.cpp index b03be792b..6ca2fe948 100644 --- a/src/text-editing.cpp +++ b/src/text-editing.cpp @@ -944,13 +944,10 @@ sp_te_set_repr_text_multiline(SPItem *text, gchar const *str) gchar *content = g_strdup (str); repr->setContent(""); - SPObject *child = object->firstChild(); - while (child) { - SPObject *next = child->getNext(); - if (!SP_IS_FLOWREGION(child) && !SP_IS_FLOWREGIONEXCLUDE(child)) { - repr->removeChild(child->getRepr()); + for (auto& child: object->_children) { + if (!SP_IS_FLOWREGION(&child) && !SP_IS_FLOWREGIONEXCLUDE(&child)) { + repr->removeChild(child.getRepr()); } - child = next; } gchar *p = content; diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index 75c6c5bcc..48d53857b 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -839,8 +839,8 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item) SPObject *mask = item->mask_ref->getObject(); _copyNode(mask->getRepr(), _doc, _defs); // recurse into the mask for its gradients etc. - for (SPObject *o = mask->children ; o != NULL ; o = o->next) { - SPItem *childItem = dynamic_cast(o); + for(auto& o: mask->_children) { + SPItem *childItem = dynamic_cast(&o); if (childItem) { _copyUsedDefs(childItem); } @@ -857,8 +857,8 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item) } // recurse - for (SPObject *o = item->children ; o != NULL ; o = o->next) { - SPItem *childItem = dynamic_cast(o); + for(auto& o: item->_children) { + SPItem *childItem = dynamic_cast(&o); if (childItem) { _copyUsedDefs(childItem); } diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp index 589973162..df37eb005 100644 --- a/src/ui/dialog/document-properties.cpp +++ b/src/ui/dialog/document-properties.cpp @@ -1315,12 +1315,7 @@ void DocumentProperties::changeEmbeddedScript(){ for (std::vector::const_iterator it = current.begin(); it != current.end(); ++it) { SPObject* obj = *it; if (id == obj->getId()){ - - int count=0; - for ( SPObject *child = obj->children ; child; child = child->next ) - { - count++; - } + int count = (int) obj->_children.size(); if (count>1) g_warning("TODO: Found a script element with multiple (%d) child nodes! We must implement support for that!", count); @@ -1364,8 +1359,11 @@ void DocumentProperties::editEmbeddedScript(){ //XML Tree being used directly here while it shouldn't be. Inkscape::XML::Node *repr = obj->getRepr(); if (repr){ - SPObject *child; - while (NULL != (child = obj->firstChild())) child->deleteObject(); + auto tmp = obj->_children | boost::adaptors::transformed([](SPObject& o) { return &o; }); + std::vector vec(tmp.begin(), tmp.end()); + for (auto &child: vec) { + child->deleteObject(); + } obj->appendChildRepr(xml_doc->createTextNode(_EmbeddedContent.get_buffer()->get_text().c_str())); //TODO repr->set_content(_EmbeddedContent.get_buffer()->get_text()); diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index a60d1ddff..1be5d540a 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -1058,11 +1058,10 @@ public: // FuncNode can be in any order so we must search to find correct one. SPFeFuncNode* find_node(SPFeComponentTransfer* ct) { - SPObject* node = ct->children; SPFeFuncNode* funcNode = NULL; bool found = false; - for(;node;node=node->next){ - funcNode = SP_FEFUNCNODE(node); + for(auto& node: ct->_children) { + funcNode = SP_FEFUNCNODE(&node); if( funcNode->channel == _channel ) { found = true; break; @@ -1226,7 +1225,7 @@ protected: _locked = true; - SPObject* child = o->children; + SPObject* child = o->firstChild(); if(SP_IS_FEDISTANTLIGHT(child)) _light_source.set_active(0); @@ -1251,7 +1250,7 @@ private: if(prim) { _locked = true; - SPObject* child = prim->children; + SPObject* child = prim->firstChild(); const int ls = _light_source.get_active_row_number(); // Check if the light source type has changed if(!(ls == -1 && !child) && @@ -1285,8 +1284,8 @@ private: _light_box.show_all(); SPFilterPrimitive* prim = _dialog._primitive_list.get_selected(); - if(prim && prim->children) - _settings.show_and_update(_light_source.get_active_data()->id, prim->children); + if(prim && prim->firstChild()) + _settings.show_and_update(_light_source.get_active_data()->id, prim->firstChild()); } FilterEffectsDialog& _dialog; @@ -1869,26 +1868,25 @@ void FilterEffectsDialog::PrimitiveList::update() bool active_found = false; _dialog._primitive_box->set_sensitive(true); _dialog.update_filter_general_settings_view(); - for(SPObject *prim_obj = f->children; - prim_obj && SP_IS_FILTER_PRIMITIVE(prim_obj); - prim_obj = prim_obj->next) { - SPFilterPrimitive *prim = SP_FILTER_PRIMITIVE(prim_obj); - if(prim) { - Gtk::TreeModel::Row row = *_model->append(); - row[_columns.primitive] = prim; - - //XML Tree being used directly here while it shouldn't be. - row[_columns.type_id] = FPConverter.get_id_from_key(prim->getRepr()->name()); - row[_columns.type] = _(FPConverter.get_label(row[_columns.type_id]).c_str()); - - if (prim->getId()) { - row[_columns.id] = Glib::ustring(prim->getId()); - } - - if(prim == active_prim) { - get_selection()->select(row); - active_found = true; - } + for(auto& prim_obj: f->_children) { + SPFilterPrimitive *prim = SP_FILTER_PRIMITIVE(&prim_obj); + if(!prim) { + break; + } + Gtk::TreeModel::Row row = *_model->append(); + row[_columns.primitive] = prim; + + //XML Tree being used directly here while it shouldn't be. + row[_columns.type_id] = FPConverter.get_id_from_key(prim->getRepr()->name()); + row[_columns.type] = _(FPConverter.get_label(row[_columns.type_id]).c_str()); + + if (prim->getId()) { + row[_columns.id] = Glib::ustring(prim->getId()); + } + + if(prim == active_prim) { + get_selection()->select(row); + active_found = true; } } @@ -3098,7 +3096,7 @@ void FilterEffectsDialog::set_filternode_attr(const AttrWidget* input) void FilterEffectsDialog::set_child_attr_direct(const AttrWidget* input) { - set_attr(_primitive_list.get_selected()->children, input->get_attribute(), input->get_as_attribute().c_str()); + set_attr(_primitive_list.get_selected()->firstChild(), input->get_attribute(), input->get_as_attribute().c_str()); } void FilterEffectsDialog::set_attr(SPObject* o, const SPAttributeEnum attr, const gchar* val) diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 00482c573..e4639745f 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -340,12 +340,11 @@ void ObjectsPanel::_objectsChanged(SPObject */*obj*/) void ObjectsPanel::_addObject(SPObject* obj, Gtk::TreeModel::Row* parentRow) { if ( _desktop && obj ) { - for ( SPObject *child = obj->children; child != NULL; child = child->next) { - - if (SP_IS_ITEM(child)) + for(auto& child: obj->_children) { + if (SP_IS_ITEM(&child)) { - SPItem * item = SP_ITEM(child); - SPGroup * group = SP_IS_GROUP(child) ? SP_GROUP(child) : 0; + SPItem * item = SP_ITEM(&child); + SPGroup * group = SP_IS_GROUP(&child) ? SP_GROUP(&child) : 0; //Add the item to the tree and set the column information Gtk::TreeModel::iterator iter = parentRow ? _store->prepend(parentRow->children()) : _store->prepend(); @@ -372,14 +371,14 @@ void ObjectsPanel::_addObject(SPObject* obj, Gtk::TreeModel::Row* parentRow) } //Add an object watcher to the item - ObjectsPanel::ObjectWatcher *w = new ObjectsPanel::ObjectWatcher(this, child); - child->getRepr()->addObserver(*w); + ObjectsPanel::ObjectWatcher *w = new ObjectsPanel::ObjectWatcher(this, &child); + child.getRepr()->addObserver(*w); _objectWatchers.push_back(w); //If the item is a group, recursively add its children if (group) { - _addObject( child, &row ); + _addObject( &child, &row ); } } } @@ -399,9 +398,8 @@ void ObjectsPanel::_updateObject( SPObject *obj, bool recurse ) { //end mark if (recurse) { - for (SPObject * iter = obj->children; iter != NULL; iter = iter->next) - { - _updateObject(iter, recurse); + for (auto& iter: obj->_children) { + _updateObject(&iter, recurse); } } } @@ -520,19 +518,22 @@ void ObjectsPanel::_setCompositingValues(SPItem *item) SPGaussianBlur *spblur = NULL; if (item->style->getFilter()) { - for(SPObject *primitive_obj = item->style->getFilter()->children; primitive_obj && SP_IS_FILTER_PRIMITIVE(primitive_obj); primitive_obj = primitive_obj->next) { - if(SP_IS_FEBLEND(primitive_obj) && !spblend) { - //Get the blend mode - spblend = SP_FEBLEND(primitive_obj); - } - - if(SP_IS_GAUSSIANBLUR(primitive_obj) && !spblur) { - //Get the blur value - spblur = SP_GAUSSIANBLUR(primitive_obj); - } + for (auto& primitive_obj: item->style->getFilter()->_children) { + if (!SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { + break; } + if(SP_IS_FEBLEND(&primitive_obj) && !spblend) { + //Get the blend mode + spblend = SP_FEBLEND(&primitive_obj); + } + + if(SP_IS_GAUSSIANBLUR(&primitive_obj) && !spblur) { + //Get the blur value + spblur = SP_GAUSSIANBLUR(&primitive_obj); + } + } } - + //Set the blend mode _fe_cb.set_blend_mode(spblend ? spblend->blend_mode : Inkscape::Filters::BLEND_NORMAL); @@ -1404,9 +1405,10 @@ void ObjectsPanel::_setCollapsed(SPGroup * group) { group->setExpanded(false); group->updateRepr(SP_OBJECT_WRITE_NO_CHILDREN | SP_OBJECT_WRITE_EXT); - for (SPObject *iter = group->children; iter != NULL; iter = iter->next) - { - if (SP_IS_GROUP(iter)) _setCollapsed(SP_GROUP(iter)); + for (auto& iter: group->_children) { + if (SP_IS_GROUP(&iter)) { + _setCollapsed(SP_GROUP(&iter)); + } } } @@ -1521,11 +1523,14 @@ void ObjectsPanel::_blendChangedIter(const Gtk::TreeIter& iter, Glib::ustring bl if (blendmode != "normal") { gdouble radius = 0; if (item->style->getFilter()) { - for (SPObject *primitive = item->style->getFilter()->children; primitive && SP_IS_FILTER_PRIMITIVE(primitive); primitive = primitive->next) { - if (SP_IS_GAUSSIANBLUR(primitive)) { + for (auto& primitive: item->style->getFilter()->_children) { + if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { + break; + } + if (SP_IS_GAUSSIANBLUR(&primitive)) { Geom::OptRect bbox = item->bounds(SPItem::GEOMETRIC_BBOX); if (bbox) { - radius = SP_GAUSSIANBLUR(primitive)->stdDeviation.getNumber(); + radius = SP_GAUSSIANBLUR(&primitive)->stdDeviation.getNumber(); } } } @@ -1533,13 +1538,16 @@ void ObjectsPanel::_blendChangedIter(const Gtk::TreeIter& iter, Glib::ustring bl SPFilter *filter = new_filter_simple_from_item(_document, item, blendmode.c_str(), radius); sp_style_set_property_url(item, "filter", filter, false); } else { - for (SPObject *primitive = item->style->getFilter()->children; primitive && SP_IS_FILTER_PRIMITIVE(primitive); primitive = primitive->next) { - if (SP_IS_FEBLEND(primitive)) { - primitive->deleteObject(); + for (auto& primitive: item->style->getFilter()->_children) { + if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { + break; + } + if (SP_IS_FEBLEND(&primitive)) { + primitive.deleteObject(); break; } } - if (!item->style->getFilter()->children) { + if (!item->style->getFilter()->firstChild()) { remove_filter(item, false); } } @@ -1590,13 +1598,16 @@ void ObjectsPanel::_blurChangedIter(const Gtk::TreeIter& iter, double blur) SPFilter *filter = modify_filter_gaussian_blur_from_item(_document, item, radius); sp_style_set_property_url(item, "filter", filter, false); } else if (item->style->filter.set && item->style->getFilter()) { - for (SPObject *primitive = item->style->getFilter()->children; primitive && SP_IS_FILTER_PRIMITIVE(primitive); primitive = primitive->next) { - if (SP_IS_GAUSSIANBLUR(primitive)) { - primitive->deleteObject(); + for (auto& primitive: item->style->getFilter()->_children) { + if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { + break; + } + if (SP_IS_GAUSSIANBLUR(&primitive)) { + primitive.deleteObject(); break; } } - if (!item->style->getFilter()->children) { + if (!item->style->getFilter()->firstChild()) { remove_filter(item, false); } } diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp index 7b256fc8f..93bd67a3d 100644 --- a/src/ui/dialog/svg-fonts-dialog.cpp +++ b/src/ui/dialog/svg-fonts-dialog.cpp @@ -115,11 +115,11 @@ void SvgFontsDialog::AttrEntry::set_text(char* t){ void SvgFontsDialog::AttrEntry::on_attr_changed(){ SPObject* o = NULL; - for(SPObject* node = this->dialog->get_selected_spfont()->children; node; node=node->next){ + for (auto& node: dialog->get_selected_spfont()->_children) { switch(this->attr){ case SP_PROP_FONT_FAMILY: - if (SP_IS_FONTFACE(node)){ - o = node; + if (SP_IS_FONTFACE(&node)){ + o = &node; continue; } break; @@ -170,9 +170,9 @@ void GlyphComboBox::update(SPFont* spfont){ this->append(""); //Gtk is refusing to clear the combobox when I comment out this line this->remove_all(); - for(SPObject* node = spfont->children; node; node=node->next){ - if (SP_IS_GLYPH(node)){ - this->append((static_cast(node))->unicode); + for (auto& node: spfont->_children) { + if (SP_IS_GLYPH(&node)){ + this->append((static_cast(&node))->unicode); } } } @@ -308,10 +308,9 @@ void SvgFontsDialog::update_global_settings_tab(){ SPFont* font = get_selected_spfont(); if (!font) return; - SPObject* obj; - for (obj=font->children; obj; obj=obj->next){ - if (SP_IS_FONTFACE(obj)){ - _familyname_entry->set_text((SP_FONTFACE(obj))->font_family); + for (auto& obj: font->_children) { + if (SP_IS_FONTFACE(&obj)){ + _familyname_entry->set_text((SP_FONTFACE(&obj))->font_family); } } } @@ -414,12 +413,12 @@ SvgFontsDialog::populate_glyphs_box() SPFont* spfont = this->get_selected_spfont(); _glyphs_observer.set(spfont); - for(SPObject* node = spfont->children; node; node=node->next){ - if (SP_IS_GLYPH(node)){ + for (auto& node: spfont->_children) { + if (SP_IS_GLYPH(&node)){ Gtk::TreeModel::Row row = *(_GlyphsListStore->append()); - row[_GlyphsListColumns.glyph_node] = static_cast(node); - row[_GlyphsListColumns.glyph_name] = (static_cast(node))->glyph_name; - row[_GlyphsListColumns.unicode] = (static_cast(node))->unicode; + row[_GlyphsListColumns.glyph_node] = static_cast(&node); + row[_GlyphsListColumns.glyph_name] = (static_cast(&node))->glyph_name; + row[_GlyphsListColumns.unicode] = (static_cast(&node))->unicode; } } } @@ -432,13 +431,13 @@ SvgFontsDialog::populate_kerning_pairs_box() SPFont* spfont = this->get_selected_spfont(); - for(SPObject* node = spfont->children; node; node=node->next){ - if (SP_IS_HKERN(node)){ + for (auto& node: spfont->_children) { + if (SP_IS_HKERN(&node)){ Gtk::TreeModel::Row row = *(_KerningPairsListStore->append()); - row[_KerningPairsListColumns.first_glyph] = (static_cast(node))->u1->attribute_string().c_str(); - row[_KerningPairsListColumns.second_glyph] = (static_cast(node))->u2->attribute_string().c_str(); - row[_KerningPairsListColumns.kerning_value] = (static_cast(node))->k; - row[_KerningPairsListColumns.spnode] = static_cast(node); + row[_KerningPairsListColumns.first_glyph] = (static_cast(&node))->u1->attribute_string().c_str(); + row[_KerningPairsListColumns.second_glyph] = (static_cast(&node))->u2->attribute_string().c_str(); + row[_KerningPairsListColumns.kerning_value] = (static_cast(&node))->k; + row[_KerningPairsListColumns.spnode] = static_cast(&node); } } } @@ -493,11 +492,10 @@ void SvgFontsDialog::add_glyph(){ Geom::PathVector SvgFontsDialog::flip_coordinate_system(Geom::PathVector pathv){ double units_per_em = 1000; - SPObject* obj; - for (obj = get_selected_spfont()->children; obj; obj=obj->next){ - if (SP_IS_FONTFACE(obj)){ + for (auto& obj: get_selected_spfont()->_children) { + if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. - sp_repr_get_double(obj->getRepr(), "units-per-em", &units_per_em); + sp_repr_get_double(obj.getRepr(), "units-per-em", &units_per_em); } } @@ -576,13 +574,12 @@ void SvgFontsDialog::missing_glyph_description_from_selected_path(){ Geom::PathVector pathv = sp_svg_read_pathv(node->attribute("d")); - SPObject* obj; - for (obj = get_selected_spfont()->children; obj; obj=obj->next){ - if (SP_IS_MISSING_GLYPH(obj)){ + for (auto& obj: get_selected_spfont()->_children) { + if (SP_IS_MISSING_GLYPH(&obj)){ //XML Tree being directly used here while it shouldn't be. gchar *str = sp_svg_write_path (flip_coordinate_system(pathv)); - obj->getRepr()->setAttribute("d", str); + obj.getRepr()->setAttribute("d", str); g_free(str); DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph curves")); } @@ -599,11 +596,10 @@ void SvgFontsDialog::reset_missing_glyph_description(){ } SPDocument* doc = desktop->getDocument(); - SPObject* obj; - for (obj = get_selected_spfont()->children; obj; obj=obj->next){ - if (SP_IS_MISSING_GLYPH(obj)){ + for (auto& obj: get_selected_spfont()->_children) { + if (SP_IS_MISSING_GLYPH(&obj)){ //XML Tree being directly used here while it shouldn't be. - obj->getRepr()->setAttribute("d", (char*) "M0,0h1000v1024h-1000z"); + obj.getRepr()->setAttribute("d", (char*) "M0,0h1000v1024h-1000z"); DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Reset missing-glyph")); } } @@ -738,12 +734,12 @@ void SvgFontsDialog::add_kerning_pair(){ //look for this kerning pair on the currently selected font this->kerning_pair = NULL; - for(SPObject* node = this->get_selected_spfont()->children; node; node=node->next){ + for (auto& node: get_selected_spfont()->_children) { //TODO: It is not really correct to get only the first byte of each string. //TODO: We should also support vertical kerning - if (SP_IS_HKERN(node) && (static_cast(node))->u1->contains((gchar) first_glyph.get_active_text().c_str()[0]) - && (static_cast(node))->u2->contains((gchar) second_glyph.get_active_text().c_str()[0]) ){ - this->kerning_pair = static_cast(node); + if (SP_IS_HKERN(&node) && (static_cast(&node))->u1->contains((gchar) first_glyph.get_active_text().c_str()[0]) + && (static_cast(&node))->u2->contains((gchar) second_glyph.get_active_text().c_str()[0]) ){ + this->kerning_pair = static_cast(&node); continue; } } @@ -852,11 +848,10 @@ SPFont *new_font(SPDocument *document) void set_font_family(SPFont* font, char* str){ if (!font) return; - SPObject* obj; - for (obj=font->children; obj; obj=obj->next){ - if (SP_IS_FONTFACE(obj)){ + for (auto& obj: font->_children) { + if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. - obj->getRepr()->setAttribute("font-family", str); + obj.getRepr()->setAttribute("font-family", str); } } @@ -873,11 +868,10 @@ void SvgFontsDialog::add_font(){ font->setLabel(os.str().c_str()); os2 << "SVGFont " << count; - SPObject* obj; - for (obj=font->children; obj; obj=obj->next){ - if (SP_IS_FONTFACE(obj)){ + for (auto& obj: font->_children) { + if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. - obj->getRepr()->setAttribute("font-family", os2.str().c_str()); + obj.getRepr()->setAttribute("font-family", os2.str().c_str()); } } diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index 53641c0de..61c8b5d37 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -399,26 +399,26 @@ void TagsPanel::_objectsChanged(SPObject* root) void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* parentRow ) { if ( _desktop && obj ) { - for ( SPObject *child = obj->children; child != NULL; child = child->next) { - if (SP_IS_TAG(child)) + for (auto& child: obj->_children) { + if (SP_IS_TAG(&child)) { Gtk::TreeModel::iterator iter = parentRow ? _store->prepend(parentRow->children()) : _store->prepend(); Gtk::TreeModel::Row row = *iter; - row[_model->_colObject] = child; + row[_model->_colObject] = &child; row[_model->_colParentObject] = NULL; - row[_model->_colLabel] = child->label() ? child->label() : child->getId(); + row[_model->_colLabel] = child.label() ? child.label() : child.getId(); row[_model->_colAddRemove] = true; row[_model->_colAllowAddRemove] = true; _tree.expand_to_path( _store->get_path(iter) ); - TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, child); - child->getRepr()->addObserver(*w); + TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, &child); + child.getRepr()->addObserver(*w); _objectWatchers.push_back(w); - _addObject( doc, child, &row ); + _addObject( doc, &child, &row ); } } - if (SP_IS_TAG(obj) && obj->children) + if (SP_IS_TAG(obj) && obj->firstChild()) { Gtk::TreeModel::iterator iteritems = parentRow ? _store->append(parentRow->children()) : _store->prepend(); Gtk::TreeModel::Row rowitems = *iteritems; @@ -429,16 +429,16 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* rowitems[_model->_colAllowAddRemove] = false; _tree.expand_to_path( _store->get_path(iteritems) ); - - for ( SPObject *child = obj->children; child != NULL; child = child->next) { - if (SP_IS_TAG_USE(child)) + + for (auto& child: obj->_children) { + if (SP_IS_TAG_USE(&child)) { - SPItem *item = SP_TAG_USE(child)->ref->getObject(); + SPItem *item = SP_TAG_USE(&child)->ref->getObject(); Gtk::TreeModel::iterator iter = _store->prepend(rowitems->children()); Gtk::TreeModel::Row row = *iter; - row[_model->_colObject] = child; + row[_model->_colObject] = &child; row[_model->_colParentObject] = NULL; - row[_model->_colLabel] = item ? (item->label() ? item->label() : item->getId()) : SP_TAG_USE(child)->href; + row[_model->_colLabel] = item ? (item->label() ? item->label() : item->getId()) : SP_TAG_USE(&child)->href; row[_model->_colAddRemove] = false; row[_model->_colAllowAddRemove] = true; @@ -447,7 +447,7 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* } if (item) { - TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, child, item->getRepr()); + TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, &child, item->getRepr()); item->getRepr()->addObserver(*w); _objectWatchers.push_back(w); } @@ -459,12 +459,11 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* void TagsPanel::_select_tag( SPTag * tag ) { - for (SPObject * child = tag->children; child != NULL; child = child->next) - { - if (SP_IS_TAG(child)) { - _select_tag(SP_TAG(child)); - } else if (SP_IS_TAG_USE(child)) { - SPObject * obj = SP_TAG_USE(child)->ref->getObject(); + for (auto& child: tag->_children) { + if (SP_IS_TAG(&child)) { + _select_tag(SP_TAG(&child)); + } else if (SP_IS_TAG_USE(&child)) { + SPObject * obj = SP_TAG_USE(&child)->ref->getObject(); if (obj) { if (_desktop->selection->isEmpty()) _desktop->setCurrentLayer(obj->parent); _desktop->selection->add(obj); @@ -650,8 +649,8 @@ bool TagsPanel::_handleButtonEvent(GdkEventButton* event) for(auto i=items.begin();i!=items.end();++i){ SPObject *newobj = *i; bool addchild = true; - for ( SPObject *child = obj->children; child != NULL; child = child->next) { - if (SP_IS_TAG_USE(child) && SP_TAG_USE(child)->ref->getObject() == newobj) { + for (auto& child: obj->_children) { + if (SP_IS_TAG_USE(&child) && SP_TAG_USE(&child)->ref->getObject() == newobj) { addchild = false; } } diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index 736dafa50..3dfac5e3d 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -378,8 +378,8 @@ void gather_items(NodeTool *nt, SPItem *base, SPObject *obj, Inkscape::UI::Shape r.role = role; s.insert(r); } else if (role != SHAPE_ROLE_NORMAL && (SP_IS_GROUP(obj) || SP_IS_OBJECTGROUP(obj))) { - for (SPObject *c = obj->children; c; c = c->next) { - gather_items(nt, base, c, role, s); + for (auto& c: obj->_children) { + gather_items(nt, base, &c, role, s); } } else if (SP_IS_ITEM(obj)) { SPItem *item = static_cast(obj); diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp index d048c318b..7da0973d5 100644 --- a/src/ui/tools/tweak-tool.cpp +++ b/src/ui/tools/tweak-tool.cpp @@ -951,9 +951,8 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point, Geom::Affine i2dt = item->i2dt_affine (); if (style->filter.set && style->getFilter()) { //cycle through filter primitives - SPObject *primitive_obj = style->getFilter()->children; - while (primitive_obj) { - SPFilterPrimitive *primitive = dynamic_cast(primitive_obj); + for (auto& primitive_obj: style->getFilter()->_children) { + SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (primitive) { //if primitive is gaussianblur SPGaussianBlur * spblur = dynamic_cast(primitive); @@ -962,7 +961,6 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point, blur_now += num * i2dt.descrim(); // sum all blurs in the filter } } - primitive_obj = primitive_obj->next; } } double perimeter = bbox->dimensions()[Geom::X] + bbox->dimensions()[Geom::Y]; diff --git a/src/uri-references.cpp b/src/uri-references.cpp index 078834131..23802ae65 100644 --- a/src/uri-references.cpp +++ b/src/uri-references.cpp @@ -76,10 +76,11 @@ bool URIReference::_acceptObject(SPObject *obj) const std::vector positions; while (owner->cloned) { int position = 0; - SPObject *c = owner->parent->firstChild(); - while (c != owner && dynamic_cast(c)) { + for (auto &child: owner->parent->_children) { + if(&child == owner) { + break; + } position++; - c = c->next; } positions.push_back(position); owner = owner->parent; -- cgit v1.2.3 From 24d3f50003ca3cec6a03a7f5267cc4fe5588c69f Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 14 Jul 2016 13:17:21 +0200 Subject: Renamed children list in SPObject (bzr r14954.1.21) --- src/box3d.cpp | 10 +++--- src/conn-avoid-ref.cpp | 2 +- src/desktop-style.cpp | 8 ++--- src/display/nr-svgfonts.cpp | 8 ++--- src/document.cpp | 22 ++++++------- src/extension/internal/cairo-render-context.cpp | 6 ++-- src/extension/internal/cairo-renderer.cpp | 4 +-- src/extension/internal/emf-print.cpp | 4 +-- src/extension/internal/javafx-out.cpp | 4 +-- src/extension/internal/metafile-print.cpp | 4 +-- src/extension/internal/pov-out.cpp | 2 +- src/file.cpp | 4 +-- src/filter-chemistry.cpp | 10 +++--- src/filters/componenttransfer.cpp | 2 +- src/filters/merge.cpp | 2 +- src/gradient-chemistry.cpp | 6 ++-- src/gradient-drag.cpp | 2 +- src/helper/pixbuf-ops.cpp | 2 +- src/helper/png-write.cpp | 2 +- src/helper/stock-items.cpp | 6 ++-- src/id-clash.cpp | 4 +-- src/layer-fns.cpp | 12 +++---- src/libnrtype/font-lister.cpp | 2 +- src/live_effects/lpe-perspective_path.cpp | 2 +- src/main.cpp | 4 +-- src/object-set.cpp | 6 ++-- src/object-snapper.cpp | 2 +- src/persp3d.cpp | 4 +-- src/selection-chemistry.cpp | 20 +++++------ src/sp-clippath.cpp | 10 +++--- src/sp-defs.cpp | 6 ++-- src/sp-filter.cpp | 10 +++--- src/sp-flowdiv.cpp | 24 +++++++------- src/sp-flowregion.cpp | 20 +++++------ src/sp-flowtext.cpp | 18 +++++----- src/sp-gradient.cpp | 16 ++++----- src/sp-hatch.cpp | 6 ++-- src/sp-item-group.cpp | 22 ++++++------- src/sp-item.cpp | 34 +++++++++---------- src/sp-mask.cpp | 4 +-- src/sp-mesh-array.cpp | 12 +++---- src/sp-namedview.cpp | 4 +-- src/sp-object-group.cpp | 4 +-- src/sp-object.cpp | 44 ++++++++++++------------- src/sp-object.h | 12 +++---- src/sp-pattern.cpp | 10 +++--- src/sp-root.cpp | 6 ++-- src/sp-switch.cpp | 2 +- src/sp-text.cpp | 18 +++++----- src/sp-tref.cpp | 2 +- src/sp-tspan.cpp | 18 +++++----- src/sp-use.cpp | 8 ++--- src/splivarot.cpp | 2 +- src/text-chemistry.cpp | 6 ++-- src/text-editing.cpp | 16 ++++----- src/ui/clipboard.cpp | 6 ++-- src/ui/dialog/clonetiler.cpp | 8 ++--- src/ui/dialog/document-properties.cpp | 4 +-- src/ui/dialog/filter-effects-dialog.cpp | 10 +++--- src/ui/dialog/find.cpp | 2 +- src/ui/dialog/font-substitution.cpp | 2 +- src/ui/dialog/objects.cpp | 16 ++++----- src/ui/dialog/spellcheck.cpp | 2 +- src/ui/dialog/svg-fonts-dialog.cpp | 22 ++++++------- src/ui/dialog/symbols.cpp | 4 +-- src/ui/dialog/tags.cpp | 8 ++--- src/ui/tools/box3d-tool.cpp | 2 +- src/ui/tools/connector-tool.cpp | 2 +- src/ui/tools/node-tool.cpp | 2 +- src/ui/tools/tweak-tool.cpp | 8 ++--- src/ui/widget/layer-selector.cpp | 2 +- src/uri-references.cpp | 2 +- src/widgets/gradient-toolbar.cpp | 4 +-- src/widgets/gradient-vector.cpp | 8 ++--- src/widgets/stroke-marker-selector.cpp | 2 +- 75 files changed, 308 insertions(+), 308 deletions(-) (limited to 'src') diff --git a/src/box3d.cpp b/src/box3d.cpp index 0a33ee306..f8ef158b2 100644 --- a/src/box3d.cpp +++ b/src/box3d.cpp @@ -259,7 +259,7 @@ void box3d_position_set(SPBox3D *box) { /* This draws the curve and calls requestDisplayUpdate() for each side (the latter is done in box3d_side_position_set() to avoid update conflicts with the parent box) */ - for (auto& obj: box->_children) { + for (auto& obj: box->children) { Box3DSide *side = dynamic_cast(&obj); if (side) { box3d_side_position_set(side); @@ -275,7 +275,7 @@ Geom::Affine SPBox3D::set_transform(Geom::Affine const &xform) { gdouble const sw = hypot(ret[0], ret[1]); gdouble const sh = hypot(ret[2], ret[3]); - for (auto& child: _children) { + for (auto& child: children) { SPItem *childitem = dynamic_cast(&child); if (childitem) { // Adjust stroke width @@ -1074,7 +1074,7 @@ box3d_recompute_z_orders (SPBox3D *box) { static std::map box3d_get_sides(SPBox3D *box) { std::map sides; - for (auto& obj: box->_children) { + for (auto& obj: box->children) { Box3DSide *side = dynamic_cast(&obj); if (side) { sides[Box3D::face_to_int(side->getFaceId())] = side; @@ -1217,7 +1217,7 @@ static void box3d_extract_boxes_rec(SPObject *obj, std::list &boxes) if (box) { boxes.push_back(box); } else if (dynamic_cast(obj)) { - for (auto& child: obj->_children) { + for (auto& child: obj->children) { box3d_extract_boxes_rec(&child, boxes); } } @@ -1276,7 +1276,7 @@ SPGroup *box3d_convert_to_group(SPBox3D *box) // create a new group and add the sides (converted to ordinary paths) as its children Inkscape::XML::Node *grepr = xml_doc->createElement("svg:g"); - for (auto& obj: box->_children) { + for (auto& obj: box->children) { Box3DSide *side = dynamic_cast(&obj); if (side) { Inkscape::XML::Node *repr = box3d_side_convert_to_path(side); diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp index 638ba48e3..560f660b2 100644 --- a/src/conn-avoid-ref.cpp +++ b/src/conn-avoid-ref.cpp @@ -334,7 +334,7 @@ static Avoid::Polygon avoid_item_poly(SPItem const *item) std::vector get_avoided_items(std::vector &list, SPObject *from, SPDesktop *desktop, bool initialised) { - for (auto& child: from->_children) { + for (auto& child: from->children) { if (SP_IS_ITEM(&child) && !desktop->isLayer(SP_ITEM(&child)) && !SP_ITEM(&child)->isLocked() && diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp index e4b7c6a83..01586096c 100644 --- a/src/desktop-style.cpp +++ b/src/desktop-style.cpp @@ -163,7 +163,7 @@ sp_desktop_apply_css_recursive(SPObject *o, SPCSSAttr *css, bool skip_lines) return; } - for (auto& child: o->_children) { + for (auto& child: o->children) { if (sp_repr_css_property(css, "opacity", NULL) != NULL) { // Unset properties which are accumulating and thus should not be set recursively. // For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group. @@ -1714,7 +1714,7 @@ objects_query_blend (const std::vector &objects, SPStyle *style_res) int blendcount = 0; // determine whether filter is simple (blend and/or blur) or complex - for(auto& primitive_obj: style->getFilter()->_children) { + for(auto& primitive_obj: style->getFilter()->children) { SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (!primitive) { break; @@ -1731,7 +1731,7 @@ objects_query_blend (const std::vector &objects, SPStyle *style_res) // simple filter if(blurcount == 1 || blendcount == 1) { - for(auto& primitive_obj: style->getFilter()->_children) { + for(auto& primitive_obj: style->getFilter()->children) { SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (!primitive) { break; @@ -1810,7 +1810,7 @@ objects_query_blur (const std::vector &objects, SPStyle *style_res) //if object has a filter if (style->filter.set && style->getFilter()) { //cycle through filter primitives - for(auto& primitive_obj: style->getFilter()->_children) { + for(auto& primitive_obj: style->getFilter()->children) { SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (primitive) { diff --git a/src/display/nr-svgfonts.cpp b/src/display/nr-svgfonts.cpp index 927093ef4..53a5cba49 100644 --- a/src/display/nr-svgfonts.cpp +++ b/src/display/nr-svgfonts.cpp @@ -203,7 +203,7 @@ SvgFont::scaled_font_text_to_glyphs (cairo_scaled_font_t */*scaled_font*/, //check whether is there a glyph declared on the SVG document // that matches with the text string in its current position if ( (len = size_of_substring(this->glyphs[i]->unicode.c_str(), _utf8)) ){ - for(auto& node: font->_children) { + for(auto& node: font->children) { if (!previous_unicode) { break; } @@ -276,7 +276,7 @@ SvgFont::glyph_modified(SPObject* /* blah */, unsigned int /* bleh */){ Geom::PathVector SvgFont::flip_coordinate_system(SPFont* spfont, Geom::PathVector pathv){ double units_per_em = 1000; - for(auto& obj: spfont->_children) { + for(auto& obj: spfont->children) { if (dynamic_cast(&obj)) { //XML Tree being directly used here while it shouldn't be. sp_repr_get_double(obj.getRepr(), "units_per_em", &units_per_em); @@ -344,7 +344,7 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/, if (node->hasChildren()){ //render the SVG described on this glyph's child nodes. - for(auto& child: node->_children) { + for(auto& child: node->children) { { SPPath *path = dynamic_cast(&child); if (path) { @@ -379,7 +379,7 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/, cairo_font_face_t* SvgFont::get_font_face(){ if (!this->userfont) { - for(auto& node: font->_children) { + for(auto& node: font->children) { SPGlyph *glyph = dynamic_cast(&node); if (glyph) { glyphs.push_back(glyph); diff --git a/src/document.cpp b/src/document.cpp index 3dcec4795..aebb7829f 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -257,7 +257,7 @@ void SPDocument::setCurrentPersp3D(Persp3D * const persp) { void SPDocument::getPerspectivesInDefs(std::vector &list) const { - for (auto& i: root->defs->_children) { + for (auto& i: root->defs->children) { if (SP_IS_PERSP3D(&i)) { list.push_back(SP_PERSP3D(&i)); } @@ -1256,7 +1256,7 @@ static std::vector &find_items_in_area(std::vector &s, SPGroup { g_return_val_if_fail(SP_IS_GROUP(group), s); - for (auto& o: group->_children) { + for (auto& o: group->children) { if ( SP_IS_ITEM(&o) ) { if (SP_IS_GROUP(&o) && (SP_GROUP(&o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) { s = find_items_in_area(s, SP_GROUP(&o), dkey, area, test, take_insensitive, into_groups); @@ -1278,7 +1278,7 @@ Returns true if an item is among the descendants of group (recursively). */ static bool item_is_in_group(SPItem *item, SPGroup *group) { - for (auto& o: group->_children) { + for (auto& o: group->children) { if ( SP_IS_ITEM(&o) ) { if (SP_ITEM(&o) == item) { return true; @@ -1298,7 +1298,7 @@ SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *gro Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0); - for (auto& o: group->_children) { + for (auto& o: group->children) { if (bottomMost) { break; } @@ -1328,7 +1328,7 @@ The list can be persisted, which improves "find at multiple points" speed. */ void SPDocument::build_flat_item_list(unsigned int dkey, SPGroup *group, gboolean into_groups) const { - for (auto& o: group->_children) { + for (auto& o: group->children) { if (!SP_IS_ITEM(&o)) { continue; } @@ -1392,7 +1392,7 @@ static SPItem *find_group_at_point(unsigned int dkey, SPGroup *group, Geom::Poin Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0); - for (auto& o: group->_children) { + for (auto& o: group->children) { if (!SP_IS_ITEM(&o)) { continue; } @@ -1597,7 +1597,7 @@ static unsigned int count_objects_recursive(SPObject *obj, unsigned int count) { count++; // obj itself - for (auto& i: obj->_children) { + for (auto& i: obj->children) { count = count_objects_recursive(&i, count); } @@ -1623,12 +1623,12 @@ static unsigned int objects_in_document(SPDocument *document) static void vacuum_document_recursive(SPObject *obj) { if (SP_IS_DEFS(obj)) { - for (auto& def: obj->_children) { + for (auto& def: obj->children) { // fixme: some inkscape-internal nodes in the future might not be collectable def.requestOrphanCollection(); } } else { - for (auto& i: obj->_children) { + for (auto& i: obj->children) { vacuum_document_recursive(&i); } } @@ -1757,7 +1757,7 @@ void SPDocument::importDefsNode(SPDocument *source, Inkscape::XML::Node *defs, I // Prevent duplicates of solid swatches by checking if equivalent swatch already exists if (src && SP_IS_GRADIENT(src)) { SPGradient *s_gr = SP_GRADIENT(src); - for (auto& trg: getDefs()->_children) { + for (auto& trg: getDefs()->children) { if (&trg && (src != &trg) && SP_IS_GRADIENT(&trg)) { SPGradient *t_gr = SP_GRADIENT(&trg); if (t_gr && s_gr->isEquivalent(t_gr)) { @@ -1828,7 +1828,7 @@ void SPDocument::importDefsNode(SPDocument *source, Inkscape::XML::Node *defs, I id.erase( pos ); // Check that it really is a duplicate - for (auto& trg: getDefs()->_children) { + for (auto& trg: getDefs()->children) { if(&trg && SP_IS_SYMBOL(&trg) && src != &trg ) { std::string id2 = trg.getRepr()->attribute("id"); diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp index bedf2fa7f..1310bb343 100644 --- a/src/extension/internal/cairo-render-context.cpp +++ b/src/extension/internal/cairo-render-context.cpp @@ -986,7 +986,7 @@ void CairoRenderContext::popState(void) static bool pattern_hasItemChildren(SPPattern *pat) { - for (auto& child: pat->_children) { + for (auto& child: pat->children) { if (SP_IS_ITEM (&child)) { return true; } @@ -1086,7 +1086,7 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver // show items and render them for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i && SP_IS_OBJECT(pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children - for (auto& child: pat_i->_children) { + for (auto& child: pat_i->children) { if (SP_IS_ITEM(&child)) { SP_ITEM(&child)->invoke_show(drawing, dkey, SP_ITEM_REFERENCE_FLAGS); _renderer->renderItem(pattern_ctx, SP_ITEM(&child)); @@ -1115,7 +1115,7 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver // hide all items for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i && SP_IS_OBJECT(pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children - for (auto& child: pat_i->_children) { + for (auto& child: pat_i->children) { if (SP_IS_ITEM(&child)) { SP_ITEM(&child)->invoke_hide(dkey); } diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 088eaf11d..cd96a7f58 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -741,7 +741,7 @@ CairoRenderer::applyClipPath(CairoRenderContext *ctx, SPClipPath const *cp) TRACE(("BEGIN clip\n")); SPObject const *co = cp; - for (auto& child: co->_children) { + for (auto& child: co->children) { SPItem const *item = dynamic_cast(&child); if (item) { @@ -800,7 +800,7 @@ CairoRenderer::applyMask(CairoRenderContext *ctx, SPMask const *mask) TRACE(("BEGIN mask\n")); SPObject const *co = mask; - for (auto& child: co->_children) { + for (auto& child: co->children) { SPItem const *item = dynamic_cast(&child); if (item) { // TODO fix const correctness: diff --git a/src/extension/internal/emf-print.cpp b/src/extension/internal/emf-print.cpp index c0c086c7a..d4c5d95a3 100644 --- a/src/extension/internal/emf-print.cpp +++ b/src/extension/internal/emf-print.cpp @@ -1042,7 +1042,7 @@ void PrintEmf::do_clip_if_present(SPStyle const *style){ /* find the clipping path */ Geom::PathVector combined_pathvector; Geom::Affine tfc; // clipping transform, generally not the same as item transform - for (auto& child: scp->_children) { + for (auto& child: scp->children) { item = SP_ITEM(&child); if (!item) { break; @@ -1085,7 +1085,7 @@ Geom::PathVector PrintEmf::merge_PathVector_with_group(Geom::PathVector const &c new_combined_pathvector = combined_pathvector; SPGroup *group = SP_GROUP(item); Geom::Affine tfc = item->transform * transform; - for (auto& child: group->_children) { + for (auto& child: group->children) { item = SP_ITEM(&child); if (!item) { break; diff --git a/src/extension/internal/javafx-out.cpp b/src/extension/internal/javafx-out.cpp index 51608e4fa..d7ad7e6f7 100644 --- a/src/extension/internal/javafx-out.cpp +++ b/src/extension/internal/javafx-out.cpp @@ -732,7 +732,7 @@ bool JavaFXOutput::doTreeRecursive(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (auto &child: obj->_children) + for (auto &child: obj->children) { if (!doTreeRecursive(doc, &child)) { return false; @@ -804,7 +804,7 @@ bool JavaFXOutput::doBody(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (auto &child: obj->_children) + for (auto &child: obj->children) { if (!doBody(doc, &child)) { return false; diff --git a/src/extension/internal/metafile-print.cpp b/src/extension/internal/metafile-print.cpp index 5c10f7dd9..061eb634d 100644 --- a/src/extension/internal/metafile-print.cpp +++ b/src/extension/internal/metafile-print.cpp @@ -293,7 +293,7 @@ void PrintMetafile::brush_classify(SPObject *parent, int depth, Inkscape::Pixbuf } // still looking? Look at this pattern's children, if there are any - for (auto& child: pat_i->_children) { + for (auto& child: pat_i->children) { if (*epixbuf || *hatchType != -1) { break; } @@ -304,7 +304,7 @@ void PrintMetafile::brush_classify(SPObject *parent, int depth, Inkscape::Pixbuf *epixbuf = ((SPImage *)parent)->pixbuf; return; } else { // some inkscape rearrangements pass through nodes between pattern and image which are not classified as either. - for (auto& child: parent->_children) { + for (auto& child: parent->children) { if (*epixbuf || *hatchType != -1) { break; } diff --git a/src/extension/internal/pov-out.cpp b/src/extension/internal/pov-out.cpp index 08f533010..8df883069 100644 --- a/src/extension/internal/pov-out.cpp +++ b/src/extension/internal/pov-out.cpp @@ -479,7 +479,7 @@ bool PovOutput::doTreeRecursive(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (auto &child: obj->_children) + for (auto &child: obj->children) { if (!doTreeRecursive(doc, &child)) return false; diff --git a/src/file.cpp b/src/file.cpp index 11e5f0a42..9ba180cb4 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -1204,7 +1204,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, // Count the number of top-level items in the imported document. guint items_count = 0; - for (auto& child: doc->getRoot()->_children) { + for (auto& child: doc->getRoot()->children) { if (SP_IS_ITEM(&child)) { items_count++; } @@ -1234,7 +1234,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, // Construct a new object representing the imported image, // and insert it into the current document. SPObject *new_obj = NULL; - for (auto& child: doc->getRoot()->_children) { + for (auto& child: doc->getRoot()->children) { if (SP_IS_ITEM(&child)) { Inkscape::XML::Node *newitem = child.getRepr()->duplicate(xml_in_doc); diff --git a/src/filter-chemistry.cpp b/src/filter-chemistry.cpp index 2e99842ec..3255bfb70 100644 --- a/src/filter-chemistry.cpp +++ b/src/filter-chemistry.cpp @@ -51,7 +51,7 @@ static guint count_filter_hrefs(SPObject *o, SPFilter *filter) i ++; } - for (auto& child: o->_children) { + for (auto& child: o->children) { i += count_filter_hrefs(&child, filter); } @@ -491,14 +491,14 @@ void remove_filter_gaussian_blur (SPObject *item) bool filter_is_single_gaussian_blur(SPFilter *filter) { - return (filter->_children.size() == 1 && - SP_IS_GAUSSIANBLUR(&filter->_children.front())); + return (filter->children.size() == 1 && + SP_IS_GAUSSIANBLUR(&filter->children.front())); } double get_single_gaussian_blur_radius(SPFilter *filter) { - if (filter->_children.size() == 1 && - SP_IS_GAUSSIANBLUR(&filter->_children.front())) { + if (filter->children.size() == 1 && + SP_IS_GAUSSIANBLUR(&filter->children.front())) { SPGaussianBlur *gb = SP_GAUSSIANBLUR(filter->firstChild()); double x = gb->stdDeviation.getNumber(); diff --git a/src/filters/componenttransfer.cpp b/src/filters/componenttransfer.cpp index e52f6d478..bc91e58a7 100644 --- a/src/filters/componenttransfer.cpp +++ b/src/filters/componenttransfer.cpp @@ -49,7 +49,7 @@ static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_c { if (sp_componenttransfer->renderer) { bool set[4] = {false, false, false, false}; - for(auto& node: sp_componenttransfer->_children) { + for(auto& node: sp_componenttransfer->children) { int i = 4; SPFeFuncNode *funcNode = SP_FEFUNCNODE(&node); diff --git a/src/filters/merge.cpp b/src/filters/merge.cpp index 6af1e8115..8ec40cb46 100644 --- a/src/filters/merge.cpp +++ b/src/filters/merge.cpp @@ -94,7 +94,7 @@ void SPFeMerge::build_renderer(Inkscape::Filters::Filter* filter) { int in_nr = 0; - for(auto& input: _children) { + for(auto& input: children) { if (SP_IS_FEMERGENODE(&input)) { SPFeMergeNode *node = SP_FEMERGENODE(&input); nr_merge->set_input(in_nr, node->input); diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp index 9c46a2efb..b6ea0d8c1 100644 --- a/src/gradient-chemistry.cpp +++ b/src/gradient-chemistry.cpp @@ -199,7 +199,7 @@ static guint count_gradient_hrefs(SPObject *o, SPGradient *gr) i ++; } - for (auto& child: o->_children) { + for (auto& child: o->children) { i += count_gradient_hrefs(&child, gr); } @@ -926,7 +926,7 @@ void sp_item_gradient_reverse_vector(SPItem *item, Inkscape::PaintTarget fill_or GSList *child_objects = NULL; std::vector offsets; double offset; - for (auto& child: vector->_children) { + for (auto& child: vector->children) { child_reprs = g_slist_prepend (child_reprs, child.getRepr()); child_objects = g_slist_prepend (child_objects, &child); offset=0; @@ -979,7 +979,7 @@ void sp_item_gradient_invert_vector_color(SPItem *item, Inkscape::PaintTarget fi sp_gradient_repr_set_link(gradient->getRepr(), vector); } - for (auto& child: vector->_children) { + for (auto& child: vector->children) { if (SP_IS_STOP(&child)) { guint32 color = SP_STOP(&child)->get_rgba32(); //g_message("Stop color %d", color); diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index b9d1fe109..fd2f4b33b 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -2539,7 +2539,7 @@ void GrDrag::deleteSelected(bool just_one) // cannot use vector->vector.stops.size() because the vector might be invalidated by deletion of a midstop // manually count the children, don't know if there already exists a function for this... int len = 0; - for (auto& child: stopinfo->vector->_children) + for (auto& child: stopinfo->vector->children) { if ( SP_IS_STOP(&child) ) { len ++; diff --git a/src/helper/pixbuf-ops.cpp b/src/helper/pixbuf-ops.cpp index fb1740fc5..24d2d7f1e 100644 --- a/src/helper/pixbuf-ops.cpp +++ b/src/helper/pixbuf-ops.cpp @@ -53,7 +53,7 @@ static void hide_other_items_recursively(SPObject *o, GSList *list, unsigned dke // recurse if (!g_slist_find(list, o)) { - for (auto& child: o->_children) { + for (auto& child: o->children) { hide_other_items_recursively(&child, list, dkey); } } diff --git a/src/helper/png-write.cpp b/src/helper/png-write.cpp index c59db9df6..2255157e2 100644 --- a/src/helper/png-write.cpp +++ b/src/helper/png-write.cpp @@ -374,7 +374,7 @@ static void hide_other_items_recursively(SPObject *o, const std::vector // recurse if (list.end()==find(list.begin(),list.end(),o)) { - for (auto& child: o->_children) { + for (auto& child: o->children) { hide_other_items_recursively(&child, list, dkey); } } diff --git a/src/helper/stock-items.cpp b/src/helper/stock-items.cpp index cf10a6c4d..647e42916 100644 --- a/src/helper/stock-items.cpp +++ b/src/helper/stock-items.cpp @@ -204,7 +204,7 @@ SPObject *get_stock_item(gchar const *urn, gboolean stock) } SPObject *object = NULL; if (!strcmp(base, "marker") && !stock) { - for (auto& child: defs->_children) + for (auto& child: defs->children) { if (child.getRepr()->attribute("inkscape:stockid") && !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && @@ -216,7 +216,7 @@ SPObject *get_stock_item(gchar const *urn, gboolean stock) } else if (!strcmp(base,"pattern") && !stock) { - for (auto& child: defs->_children) + for (auto& child: defs->children) { if (child.getRepr()->attribute("inkscape:stockid") && !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && @@ -228,7 +228,7 @@ SPObject *get_stock_item(gchar const *urn, gboolean stock) } else if (!strcmp(base,"gradient") && !stock) { - for (auto& child: defs->_children) + for (auto& child: defs->children) { if (child.getRepr()->attribute("inkscape:stockid") && !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && diff --git a/src/id-clash.cpp b/src/id-clash.cpp index fecad9eee..cb5893133 100644 --- a/src/id-clash.cpp +++ b/src/id-clash.cpp @@ -187,7 +187,7 @@ find_references(SPObject *elem, refmap_type &refmap) } // recurse - for (auto& child: elem->_children) + for (auto& child: elem->children) { find_references(&child, refmap); } @@ -242,7 +242,7 @@ change_clashing_ids(SPDocument *imported_doc, SPDocument *current_doc, // recurse - for (auto& child: elem->_children) + for (auto& child: elem->children) { change_clashing_ids(imported_doc, current_doc, &child, refmap, id_changes); } diff --git a/src/layer-fns.cpp b/src/layer-fns.cpp index d149089db..030ebc07e 100644 --- a/src/layer-fns.cpp +++ b/src/layer-fns.cpp @@ -36,7 +36,7 @@ bool is_layer(SPObject &object) { * @returns NULL if there are no further layers under a parent */ SPObject *next_sibling_layer(SPObject *layer) { - SPObject::ChildrenList &list = layer->parent->_children; + SPObject::ChildrenList &list = layer->parent->children; auto l = std::find_if(++list.iterator_to(*layer), list.end(), &is_layer); return l != list.end() ? &*l : nullptr; } @@ -48,7 +48,7 @@ SPObject *next_sibling_layer(SPObject *layer) { SPObject *previous_sibling_layer(SPObject *layer) { using Inkscape::Algorithms::find_last_if; - SPObject::ChildrenList &list = layer->parent->_children; + SPObject::ChildrenList &list = layer->parent->children; auto l = find_last_if(list.begin(), list.iterator_to(*layer), &is_layer); return l != list.iterator_to(*layer) ? &*(l) : nullptr; } @@ -60,8 +60,8 @@ SPObject *previous_sibling_layer(SPObject *layer) { SPObject *first_descendant_layer(SPObject *layer) { SPObject *first_descendant = nullptr; while (true) { - auto tmp = std::find_if(layer->_children.begin(), layer->_children.end(), &is_layer); - if (tmp != layer->_children.end()) { + auto tmp = std::find_if(layer->children.begin(), layer->children.end(), &is_layer); + if (tmp != layer->children.end()) { first_descendant = layer; } else { break; @@ -79,8 +79,8 @@ SPObject *first_descendant_layer(SPObject *layer) { SPObject *last_child_layer(SPObject *layer) { using Inkscape::Algorithms::find_last_if; - auto l = find_last_if(layer->_children.begin(), layer->_children.end(), &is_layer); - return l != layer->_children.end() ? &*l : nullptr; + auto l = find_last_if(layer->children.begin(), layer->children.end(), &is_layer); + return l != layer->children.end() ? &*l : nullptr; } SPObject *last_elder_layer(SPObject *root, SPObject *layer) { diff --git a/src/libnrtype/font-lister.cpp b/src/libnrtype/font-lister.cpp index 937d67895..4deae821a 100644 --- a/src/libnrtype/font-lister.cpp +++ b/src/libnrtype/font-lister.cpp @@ -298,7 +298,7 @@ void FontLister::update_font_list_recursive(SPObject *r, std::listpush_back(Glib::ustring(font_family)); } - for (auto& child: r->_children) { + for (auto& child: r->children) { update_font_list_recursive(&child, l); } } diff --git a/src/live_effects/lpe-perspective_path.cpp b/src/live_effects/lpe-perspective_path.cpp index c62ead2b3..049e10f0f 100644 --- a/src/live_effects/lpe-perspective_path.cpp +++ b/src/live_effects/lpe-perspective_path.cpp @@ -107,7 +107,7 @@ void LPEPerspectivePath::refresh(Gtk::Entry* perspective) { perspectiveID = perspective->get_text(); Persp3D *first = 0; Persp3D *persp = 0; - for (auto& child: lpeobj->document->getDefs()->_children) { + for (auto& child: lpeobj->document->getDefs()->children) { if (SP_IS_PERSP3D(&child) && first == 0) { first = SP_PERSP3D(&child); } diff --git a/src/main.cpp b/src/main.cpp index 7ab27dcb2..c01c4ee46 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1228,7 +1228,7 @@ static int sp_process_file_list(GSList *fl) std::vector items; SPRoot *root = doc->getRoot(); doc->ensureUpToDate(); - for (auto& iter: root->_children) { + for (auto& iter: root->children) { SPItem* item = (SPItem*) &iter; if (! (SP_IS_TEXT(item) || SP_IS_FLOWTEXT(item) || SP_IS_GROUP(item))) { continue; @@ -1483,7 +1483,7 @@ do_query_all_recurse (SPObject *o) } } - for(auto& child: o->_children) { + for(auto& child: o->children) { do_query_all_recurse (&child); } } diff --git a/src/object-set.cpp b/src/object-set.cpp index b7b84e163..1b994106a 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -93,7 +93,7 @@ bool ObjectSet::_anyAncestorIsInSet(SPObject *object) { } void ObjectSet::_removeDescendantsFromSet(SPObject *object) { - for (auto& child: object->_children) { + for (auto& child: object->children) { if (includes(&child)) { _remove(&child); // there is certainly no children of this child in the set @@ -130,7 +130,7 @@ SPObject *ObjectSet::_getMutualAncestor(SPObject *object) { bool flag = true; while (o->parent != nullptr) { - for (auto &child: o->parent->_children) { + for (auto &child: o->parent->children) { if(&child != o && !includes(&child)) { flag = false; break; @@ -147,7 +147,7 @@ SPObject *ObjectSet::_getMutualAncestor(SPObject *object) { void ObjectSet::_removeAncestorsFromSet(SPObject *object) { SPObject* o = object; while (o->parent != nullptr) { - for (auto &child: o->parent->_children) { + for (auto &child: o->parent->children) { if (&child != o) { _add(&child); } diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp index 580fb5fc7..307dcf062 100644 --- a/src/object-snapper.cpp +++ b/src/object-snapper.cpp @@ -90,7 +90,7 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent, Geom::Rect bbox_to_snap_incl = bbox_to_snap; // _incl means: will include the snapper tolerance bbox_to_snap_incl.expandBy(getSnapperTolerance()); // see? - for (auto& o: parent->_children) { + for (auto& o: parent->children) { g_assert(dt != NULL); SPItem *item = dynamic_cast(&o); if (item && !(dt->itemIsHidden(item) && !clip_or_mask)) { diff --git a/src/persp3d.cpp b/src/persp3d.cpp index 849e332bf..e260af8e5 100644 --- a/src/persp3d.cpp +++ b/src/persp3d.cpp @@ -215,7 +215,7 @@ Persp3D *persp3d_create_xml_element(SPDocument *document, Persp3DImpl *dup) {// Persp3D *persp3d_document_first_persp(SPDocument *document) { Persp3D *first = 0; - for (auto& child: document->getDefs()->_children) { + for (auto& child: document->getDefs()->children) { if (SP_IS_PERSP3D(&child)) { first = SP_PERSP3D(&child); break; @@ -534,7 +534,7 @@ persp3d_print_debugging_info (Persp3D *persp) { void persp3d_print_debugging_info_all(SPDocument *document) { - for (auto& child: document->getDefs()->_children) { + for (auto& child: document->getDefs()->children) { if (SP_IS_PERSP3D(&child)) { persp3d_print_debugging_info(SP_PERSP3D(&child)); } diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 28bcadef5..81d711e77 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -433,7 +433,7 @@ static void add_ids_recursive(std::vector &ids, SPObject *obj) ids.push_back(obj->getId()); if (dynamic_cast(obj)) { - for (auto& child: obj->_children) { + for (auto& child: obj->children) { add_ids_recursive(ids, &child); } } @@ -587,7 +587,7 @@ void sp_edit_clear_all(Inkscape::Selection *selection) */ std::vector &get_all_items(std::vector &list, SPObject *from, SPDesktop *desktop, bool onlyvisible, bool onlysensitive, bool ingroups, std::vector const &exclude) { - for (auto& child: from->_children) { + for (auto& child: from->children) { SPItem *item = dynamic_cast(&child); if (item && !desktop->isLayer(item) && @@ -1143,7 +1143,7 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des pp = document->getObjectByRepr(repr->parent()); minpos = 0; g_assert(dynamic_cast(pp)); - for (auto& pc: pp->_children) { + for (auto& pc: pp->children) { if(dynamic_cast(&pc)) { break; } @@ -1202,7 +1202,7 @@ take_style_from_item(SPObject *object) (dynamic_cast(object) && object->firstChild() && object->firstChild()->getNext() == NULL)) { // if this is a text with exactly one tspan child, merge the style of that tspan as well // If this is a group, merge the style of its topmost (last) child with style - auto list = object->_children | boost::adaptors::reversed; + auto list = object->children | boost::adaptors::reversed; for (auto& element: list) { if (element.style ) { SPCSSAttr *temp = sp_css_attr_from_object(&element, SP_STYLE_FLAG_IFSET); @@ -1624,9 +1624,9 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons } else if (transform_flowtext_with_frame) { // apply the inverse of the region's transform to the so that the flow remains // the same (even though the output itself gets transformed) - for (auto& region: item->_children) { + for (auto& region: item->children) { if (dynamic_cast(®ion) || dynamic_cast(®ion)) { - for (auto& itm: region._children) { + for (auto& itm: region.children) { SPUse *use = dynamic_cast(&itm); if ( use ) { use->doWriteTransform(use->getRepr(), use->transform.inverse(), NULL, compensate); @@ -2348,7 +2348,7 @@ typedef struct ListReverse { private: static GSList *make_list(SPObject *object, SPObject *limit) { GSList *list = NULL; - for (auto &child: object->_children) { + for (auto &child: object->children) { if (&child == limit) { break; } @@ -3435,7 +3435,7 @@ void sp_selection_untile(SPDesktop *desktop) Geom::Affine pat_transform = basePat->getTransform(); pat_transform *= item->transform; - for (auto& child: pattern->_children) { + for (auto& child: pattern->children) { if (dynamic_cast(&child)) { Inkscape::XML::Node *copy = child.getRepr()->duplicate(xml_doc); SPItem *i = dynamic_cast(desktop->currentLayer()->appendChildRepr(copy)); @@ -4103,7 +4103,7 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) { for ( std::map::iterator it = referenced_objects.begin() ; it != referenced_objects.end() ; ++it) { SPObject *obj = (*it).first; // Group containing the clipped paths or masks GSList *items_to_move = NULL; - for (auto& child: obj->_children) { + for (auto& child: obj->children) { // Collect all clipped paths and masks within a single group Inkscape::XML::Node *copy = child.getRepr()->duplicate(xml_doc); if(copy->attribute("inkscape:original-d") && copy->attribute("inkscape:path-effect")) @@ -4264,7 +4264,7 @@ static void itemtree_map(void (*f)(SPItem *, SPDesktop *), SPObject *root, SPDes f(item, desktop); } } - for (auto& child: root->_children) { + for (auto& child: root->children) { //don't recurse into locked layers SPItem *item = dynamic_cast(&child); if (!(item && desktop->isLayer(item) && item->isLocked())) { diff --git a/src/sp-clippath.cpp b/src/sp-clippath.cpp index 25bf77f00..c0c848bbd 100644 --- a/src/sp-clippath.cpp +++ b/src/sp-clippath.cpp @@ -128,7 +128,7 @@ void SPClipPath::update(SPCtx* ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -167,7 +167,7 @@ void SPClipPath::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -200,7 +200,7 @@ Inkscape::DrawingItem *SPClipPath::show(Inkscape::Drawing &drawing, unsigned int Inkscape::DrawingGroup *ai = new Inkscape::DrawingGroup(drawing); display = sp_clippath_view_new_prepend(display, key, ai); - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM(&child)) { Inkscape::DrawingItem *ac = SP_ITEM(&child)->invoke_show(drawing, key, SP_ITEM_REFERENCE_FLAGS); @@ -223,7 +223,7 @@ Inkscape::DrawingItem *SPClipPath::show(Inkscape::Drawing &drawing, unsigned int } void SPClipPath::hide(unsigned int key) { - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM(&child)) { SP_ITEM(&child)->invoke_hide(key); } @@ -252,7 +252,7 @@ void SPClipPath::setBBox(unsigned int key, Geom::OptRect const &bbox) { Geom::OptRect SPClipPath::geometricBounds(Geom::Affine const &transform) { Geom::OptRect bbox; - for (auto& i: _children) { + for (auto& i: children) { if (SP_IS_ITEM(&i)) { Geom::OptRect tmp = SP_ITEM(&i)->geometricBounds(Geom::Affine(SP_ITEM(&i)->transform) * transform); bbox.unionWith(tmp); diff --git a/src/sp-defs.cpp b/src/sp-defs.cpp index af4ea96d7..865c6891e 100644 --- a/src/sp-defs.cpp +++ b/src/sp-defs.cpp @@ -54,7 +54,7 @@ void SPDefs::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -79,7 +79,7 @@ Inkscape::XML::Node* SPDefs::write(Inkscape::XML::Document *xml_doc, Inkscape::X } GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); @@ -93,7 +93,7 @@ Inkscape::XML::Node* SPDefs::write(Inkscape::XML::Document *xml_doc, Inkscape::X } } else { - for (auto& child: _children) { + for (auto& child: children) { child.updateRepr(flags); } } diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 170847c0b..9ecee6a5f 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -268,7 +268,7 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML } GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *crepr = child.updateRepr(doc, NULL, flags); if (crepr) { @@ -282,7 +282,7 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML l = g_slist_remove (l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { child.updateRepr(flags); } } @@ -420,7 +420,7 @@ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr } nr_filter->clear_primitives(); - for(auto& primitive_obj: sp_filter->_children) { + for(auto& primitive_obj: sp_filter->children) { if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { SPFilterPrimitive *primitive = SP_FILTER_PRIMITIVE(&primitive_obj); g_assert(primitive != NULL); @@ -439,7 +439,7 @@ int sp_filter_primitive_count(SPFilter *filter) { g_assert(filter != NULL); int count = 0; - for(auto& primitive_obj: filter->_children) { + for(auto& primitive_obj: filter->children) { if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { count++; } @@ -512,7 +512,7 @@ Glib::ustring sp_filter_get_new_result_name(SPFilter *filter) { g_assert(filter != NULL); int largest = 0; - for(auto& primitive_obj: filter->_children) { + for(auto& primitive_obj: filter->children) { if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { Inkscape::XML::Node *repr = primitive_obj.getRepr(); char const *result = repr->attribute("result"); diff --git a/src/sp-flowdiv.cpp b/src/sp-flowdiv.cpp index ad04f0d78..17b841e37 100644 --- a/src/sp-flowdiv.cpp +++ b/src/sp-flowdiv.cpp @@ -27,7 +27,7 @@ void SPFlowdiv::update(SPCtx *ctx, unsigned int flags) { childflags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -65,7 +65,7 @@ void SPFlowdiv::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -104,7 +104,7 @@ Inkscape::XML::Node* SPFlowdiv::write(Inkscape::XML::Document *xml_doc, Inkscape GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node* c_repr = NULL; if ( SP_IS_FLOWTSPAN (&child) ) { @@ -126,7 +126,7 @@ Inkscape::XML::Node* SPFlowdiv::write(Inkscape::XML::Document *xml_doc, Inkscape l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( SP_IS_FLOWTSPAN (&child) ) { child.updateRepr(flags); } else if ( SP_IS_FLOWPARA(&child) ) { @@ -168,7 +168,7 @@ void SPFlowtspan::update(SPCtx *ctx, unsigned int flags) { childflags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -206,7 +206,7 @@ void SPFlowtspan::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -242,7 +242,7 @@ Inkscape::XML::Node *SPFlowtspan::write(Inkscape::XML::Document *xml_doc, Inksca GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node* c_repr = NULL; if ( SP_IS_FLOWTSPAN(&child) ) { @@ -264,7 +264,7 @@ Inkscape::XML::Node *SPFlowtspan::write(Inkscape::XML::Document *xml_doc, Inksca l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( SP_IS_FLOWTSPAN(&child) ) { child.updateRepr(flags); } else if ( SP_IS_FLOWPARA(&child) ) { @@ -307,7 +307,7 @@ void SPFlowpara::update(SPCtx *ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -343,7 +343,7 @@ void SPFlowpara::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -379,7 +379,7 @@ Inkscape::XML::Node *SPFlowpara::write(Inkscape::XML::Document *xml_doc, Inkscap GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node* c_repr = NULL; if ( SP_IS_FLOWTSPAN(&child) ) { @@ -401,7 +401,7 @@ Inkscape::XML::Node *SPFlowpara::write(Inkscape::XML::Document *xml_doc, Inkscap l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( SP_IS_FLOWTSPAN(&child) ) { child.updateRepr(flags); } else if ( SP_IS_FLOWPARA(&child) ) { diff --git a/src/sp-flowregion.cpp b/src/sp-flowregion.cpp index 71e029072..716a09914 100644 --- a/src/sp-flowregion.cpp +++ b/src/sp-flowregion.cpp @@ -63,7 +63,7 @@ void SPFlowregion::update(SPCtx *ctx, unsigned int flags) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -102,7 +102,7 @@ void SPFlowregion::UpdateComputed(void) } computed.clear(); - for (auto& child: _children) { + for (auto& child: children) { Shape *shape = 0; GetDest(&child, &shape); computed.push_back(shape); @@ -118,7 +118,7 @@ void SPFlowregion::modified(guint flags) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -145,7 +145,7 @@ Inkscape::XML::Node *SPFlowregion::write(Inkscape::XML::Document *xml_doc, Inksc } GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); @@ -161,7 +161,7 @@ Inkscape::XML::Node *SPFlowregion::write(Inkscape::XML::Document *xml_doc, Inksc l = g_slist_remove(l, l->data); } - for (auto& child: _children) { + for (auto& child: children) { if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { child.updateRepr(flags); } @@ -220,7 +220,7 @@ void SPFlowregionExclude::update(SPCtx *ctx, unsigned int flags) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -258,7 +258,7 @@ void SPFlowregionExclude::UpdateComputed(void) computed = NULL; } - for (auto& child: _children) { + for (auto& child: children) { GetDest(&child, &computed); } } @@ -272,7 +272,7 @@ void SPFlowregionExclude::modified(guint flags) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -300,7 +300,7 @@ Inkscape::XML::Node *SPFlowregionExclude::write(Inkscape::XML::Document *xml_doc GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { @@ -315,7 +315,7 @@ Inkscape::XML::Node *SPFlowregionExclude::write(Inkscape::XML::Document *xml_doc } } else { - for (auto& child: _children) { + for (auto& child: children) { child.updateRepr(flags); } } diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 83fa5a1b4..79988bdc2 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -72,7 +72,7 @@ void SPFlowtext::update(SPCtx* ctx, unsigned int flags) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -135,7 +135,7 @@ void SPFlowtext::modified(unsigned int flags) { } } - for (auto& o: _children) { + for (auto& o: children) { if (dynamic_cast(&o)) { region = &o; break; @@ -223,7 +223,7 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *c_repr = NULL; if ( dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child)) { @@ -241,7 +241,7 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child)) { child.updateRepr(flags); } @@ -390,7 +390,7 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape, *pending_line_break_object = NULL; } - for (auto& child: root->_children) { + for (auto& child: root->children) { SPString *str = dynamic_cast(&child); if (str) { if (*pending_line_break_object) { @@ -440,7 +440,7 @@ Shape* SPFlowtext::_buildExclusionShape() const Shape *shape = new Shape(); Shape *shape_temp = new Shape(); - for (auto& child: _children) { + for (auto& child: children) { // RH: is it right that this shouldn't be recursive? SPFlowregionExclude *c_child = dynamic_cast(const_cast(&child)); if ( c_child && c_child->computed && c_child->computed->hasEdges() ) { @@ -593,7 +593,7 @@ SPItem *SPFlowtext::get_frame(SPItem const *after) SPItem *frame = 0; SPObject *region = 0; - for (auto& o: _children) { + for (auto& o: children) { if (dynamic_cast(&o)) { region = &o; break; @@ -603,7 +603,7 @@ SPItem *SPFlowtext::get_frame(SPItem const *after) if (region) { bool past = false; - for (auto& o: region->_children) { + for (auto& o: region->children) { SPItem *item = dynamic_cast(&o); if (item) { if ( (after == NULL) || past ) { @@ -707,7 +707,7 @@ Geom::Affine SPFlowtext::set_transform (Geom::Affine const &xform) } SPObject *region = NULL; - for (auto& o: _children) { + for (auto& o: children) { if (dynamic_cast(&o)) { region = &o; break; diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index abfae1a1f..afa209dbe 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -276,7 +276,7 @@ void SPGradient::build(SPDocument *document, Inkscape::XML::Node *repr) SPPaintServer::build(document, repr); - for (auto& ochild: _children) { + for (auto& ochild: children) { if (SP_IS_STOP(&ochild)) { this->has_stops = TRUE; break; @@ -481,7 +481,7 @@ void SPGradient::remove_child(Inkscape::XML::Node *child) SPPaintServer::remove_child(child); this->has_stops = FALSE; - for (auto& ochild: _children) { + for (auto& ochild: children) { if (SP_IS_STOP(&ochild)) { this->has_stops = TRUE; break; @@ -536,7 +536,7 @@ void SPGradient::modified(guint flags) // FIXME: climb up the ladder of hrefs GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -558,7 +558,7 @@ void SPGradient::modified(guint flags) SPStop* SPGradient::getFirstStop() { SPStop* first = nullptr; - for (auto& ochild: _children) { + for (auto& ochild: children) { if (SP_IS_STOP(&ochild)) { first = SP_STOP(&ochild); break; @@ -588,7 +588,7 @@ Inkscape::XML::Node *SPGradient::write(Inkscape::XML::Document *xml_doc, Inkscap if (flags & SP_OBJECT_WRITE_BUILD) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { @@ -916,7 +916,7 @@ bool SPGradient::invalidateArray() void SPGradient::rebuildVector() { gint len = 0; - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_STOP(&child)) { len ++; } @@ -938,7 +938,7 @@ void SPGradient::rebuildVector() } } - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_STOP(&child)) { SPStop *stop = SP_STOP(&child); @@ -1023,7 +1023,7 @@ void SPGradient::rebuildArray() array.read( SP_MESH( this ) ); has_patches = false; - for (auto& ro: _children) { + for (auto& ro: children) { if (SP_IS_MESHROW(&ro)) { has_patches = true; // std::cout << " Has Patches" << std::endl; diff --git a/src/sp-hatch.cpp b/src/sp-hatch.cpp index c06045e8f..f667017fa 100644 --- a/src/sp-hatch.cpp +++ b/src/sp-hatch.cpp @@ -233,7 +233,7 @@ void SPHatch::set(unsigned int key, const gchar* value) bool SPHatch::_hasHatchPatchChildren(SPHatch const *hatch) { - for (auto& child: hatch->_children) { + for (auto& child: hatch->children) { SPHatchPath const *hatchPath = dynamic_cast(&child); if (hatchPath) { return true; @@ -248,7 +248,7 @@ std::vector SPHatch::hatchPaths() SPHatch *src = chase_hrefs(this, sigc::ptr_fun(&_hasHatchPatchChildren)); if (src) { - for (auto& child: src->_children) { + for (auto& child: src->children) { SPHatchPath *hatchPath = dynamic_cast(&child); if (hatchPath) { list.push_back(hatchPath); @@ -264,7 +264,7 @@ std::vector SPHatch::hatchPaths() const SPHatch const *src = chase_hrefs(this, sigc::ptr_fun(&_hasHatchPatchChildren)); if (src) { - for (auto& child: src->_children) { + for (auto& child: src->children) { SPHatchPath const *hatchPath = dynamic_cast(&child); if (hatchPath) { list.push_back(hatchPath); diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 8d482d9b1..63edb3c84 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -235,7 +235,7 @@ Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = NULL; - for (auto& child: _children) { + for (auto& child: children) { if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); @@ -251,7 +251,7 @@ Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = g_slist_remove (l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { child.updateRepr(flags); } @@ -297,7 +297,7 @@ Geom::OptRect SPGroup::bbox(Geom::Affine const &transform, SPItem::BBoxType bbox } void SPGroup::print(SPPrintContext *ctx) { - for(auto& child: _children){ + for(auto& child: children){ SPObject *o = &child; SPItem *item = dynamic_cast(o); if (item) { @@ -365,7 +365,7 @@ void SPGroup::hide (unsigned int key) { void SPGroup::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) const { - for (auto& o: _children) + for (auto& o: children) { SPItem const *item = dynamic_cast(&o); if (item) { @@ -511,13 +511,13 @@ sp_item_group_ungroup (SPGroup *group, std::vector &children, bool do_d GSList *objects = NULL; Geom::Affine const g(group->transform); - for (auto& child: group->_children) { + for (auto& child: group->children) { if (SPItem *citem = dynamic_cast(&child)) { sp_item_group_ungroup_handle_clones(citem, g); } } - for (auto& child: group->_children) { + for (auto& child: group->children) { SPItem *citem = dynamic_cast(&child); if (citem) { /* Merging of style */ @@ -662,7 +662,7 @@ std::vector sp_item_group_item_list(SPGroup * group) std::vector s; g_return_val_if_fail(group != NULL, s); - for (auto& o: group->_children) { + for (auto& o: group->children) { if ( dynamic_cast(&o) ) { s.push_back((SPItem*)&o); } @@ -735,7 +735,7 @@ void SPGroup::_updateLayerMode(unsigned int display_key) { void SPGroup::translateChildItems(Geom::Translate const &tr) { if ( hasChildren() ) { - for (auto& o: _children) { + for (auto& o: children) { SPItem *item = dynamic_cast(&o); if ( item ) { sp_item_move_rel(item, tr); @@ -748,9 +748,9 @@ void SPGroup::translateChildItems(Geom::Translate const &tr) void SPGroup::scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p, bool noRecurse) { if ( hasChildren() ) { - for (auto& o: _children) { + for (auto& o: children) { if ( SPDefs *defs = dynamic_cast(&o) ) { // select symbols from defs, ignore clips, masks, patterns - for (auto& defschild: defs->_children) { + for (auto& defschild: defs->children) { SPGroup *defsgroup = dynamic_cast(&defschild); if (defsgroup) defsgroup->scaleChildItemsRec(sc, p, false); @@ -871,7 +871,7 @@ void SPGroup::scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p, bo gint SPGroup::getItemCount() const { gint len = 0; - for (auto& child: _children) { + for (auto& child: children) { if (dynamic_cast(&child)) { len++; } diff --git a/src/sp-item.cpp b/src/sp-item.cpp index 53b4c0879..69da28c66 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -308,15 +308,15 @@ bool is_item(SPObject const &object) { void SPItem::raiseToTop() { using Inkscape::Algorithms::find_last_if; - auto topmost = find_last_if(++parent->_children.iterator_to(*this), parent->_children.end(), &is_item); - if (topmost != parent->_children.end()) { + auto topmost = find_last_if(++parent->children.iterator_to(*this), parent->children.end(), &is_item); + if (topmost != parent->children.end()) { getRepr()->parent()->changeOrder( getRepr(), topmost->getRepr() ); } } void SPItem::raiseOne() { - auto next_higher = std::find_if(++parent->_children.iterator_to(*this), parent->_children.end(), &is_item); - if (next_higher != parent->_children.end()) { + auto next_higher = std::find_if(++parent->children.iterator_to(*this), parent->children.end(), &is_item); + if (next_higher != parent->children.end()) { Inkscape::XML::Node *ref = next_higher->getRepr(); getRepr()->parent()->changeOrder(getRepr(), ref); } @@ -325,8 +325,8 @@ void SPItem::raiseOne() { void SPItem::lowerOne() { using Inkscape::Algorithms::find_last_if; - auto next_lower = find_last_if(parent->_children.begin(), parent->_children.iterator_to(*this), &is_item); - if (next_lower != parent->_children.iterator_to(*this)) { + auto next_lower = find_last_if(parent->children.begin(), parent->children.iterator_to(*this), &is_item); + if (next_lower != parent->children.iterator_to(*this)) { next_lower--; Inkscape::XML::Node *ref = next_lower->getRepr(); getRepr()->parent()->changeOrder(getRepr(), ref); @@ -334,8 +334,8 @@ void SPItem::lowerOne() { } void SPItem::lowerToBottom() { - auto bottom = std::find_if(parent->_children.begin(), parent->_children.iterator_to(*this), &is_item); - if (bottom != parent->_children.iterator_to(*this)) { + auto bottom = std::find_if(parent->children.begin(), parent->children.iterator_to(*this), &is_item); + if (bottom != parent->children.iterator_to(*this)) { bottom--; Inkscape::XML::Node *ref = bottom->getRepr() ; parent->getRepr()->changeOrder(getRepr(), ref); @@ -705,7 +705,7 @@ Inkscape::XML::Node* SPItem::write(Inkscape::XML::Document *xml_doc, Inkscape::X // so we need to add any children from the underlying object to the new repr if (flags & SP_OBJECT_WRITE_BUILD) { GSList *l = NULL; - for (auto& child: object->_children) { + for (auto& child: object->children) { if (dynamic_cast(&child) || dynamic_cast(&child)) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { @@ -719,7 +719,7 @@ Inkscape::XML::Node* SPItem::write(Inkscape::XML::Document *xml_doc, Inkscape::X l = g_slist_remove (l, l->data); } } else { - for (auto& child: object->_children) { + for (auto& child: object->children) { if (dynamic_cast(&child) || dynamic_cast(&child)) { child.updateRepr(flags); } @@ -928,7 +928,7 @@ unsigned int SPItem::pos_in_parent() const { unsigned int pos = 0; - for (auto& iter: parent->_children) { + for (auto& iter: parent->children) { if (&iter == this) { return pos; } @@ -974,7 +974,7 @@ void SPItem::getSnappoints(std::vector &p, Inkscap for (std::list::const_iterator o = clips_and_masks.begin(); o != clips_and_masks.end(); ++o) { if (*o) { // obj is a group object, the children are the actual clippers - for(auto& child: (*o)->_children) { + for(auto& child: (*o)->children) { SPItem *item = dynamic_cast(const_cast(&child)); if (item) { std::vector p_clip_or_mask; @@ -1302,7 +1302,7 @@ void SPItem::adjust_stroke_width_recursive(double expansion) // A clone's child is the ghost of its original - we must not touch it, skip recursion if ( !dynamic_cast(this) ) { - for (auto& o: _children) { + for (auto& o: children) { SPItem *item = dynamic_cast(&o); if (item) { item->adjust_stroke_width_recursive(expansion); @@ -1317,7 +1317,7 @@ void SPItem::freeze_stroke_width_recursive(bool freeze) // A clone's child is the ghost of its original - we must not touch it, skip recursion if ( !dynamic_cast(this) ) { - for (auto& o: _children) { + for (auto& o: children) { SPItem *item = dynamic_cast(&o); if (item) { item->freeze_stroke_width_recursive(freeze); @@ -1337,7 +1337,7 @@ sp_item_adjust_rects_recursive(SPItem *item, Geom::Affine advertized_transform) rect->compensateRxRy(advertized_transform); } - for(auto& o: item->_children) { + for(auto& o: item->children) { SPItem *itm = dynamic_cast(&o); if (itm) { sp_item_adjust_rects_recursive(itm, advertized_transform); @@ -1357,7 +1357,7 @@ void SPItem::adjust_paint_recursive (Geom::Affine advertized_transform, Geom::Af // also we do not recurse into clones, because a clone's child is the ghost of its original - // we must not touch it if (!(this && (dynamic_cast(this) || dynamic_cast(this)))) { - for (auto& o: _children) { + for (auto& o: children) { SPItem *item = dynamic_cast(&o); if (item) { // At the level of the transformed item, t_ancestors is identity; @@ -1666,7 +1666,7 @@ SPItem const *sp_item_first_item_child(SPObject const *obj) SPItem *sp_item_first_item_child(SPObject *obj) { SPItem *child = 0; - for (auto& iter: obj->_children) { + for (auto& iter: obj->children) { SPItem *tmp = dynamic_cast(&iter); if ( tmp ) { child = tmp; diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index e643cc9bd..1b44c26ff 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -227,7 +227,7 @@ Inkscape::DrawingItem *SPMask::sp_mask_show(Inkscape::Drawing &drawing, unsigned Inkscape::DrawingGroup *ai = new Inkscape::DrawingGroup(drawing); this->display = sp_mask_view_new_prepend (this->display, key, ai); - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM (&child)) { Inkscape::DrawingItem *ac = SP_ITEM (&child)->invoke_show (drawing, key, SP_ITEM_REFERENCE_FLAGS); @@ -250,7 +250,7 @@ void SPMask::sp_mask_hide(unsigned int key) { g_return_if_fail (this != NULL); g_return_if_fail (SP_IS_MASK (this)); - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM (&child)) { SP_ITEM(&child)->invoke_hide (key); } diff --git a/src/sp-mesh-array.cpp b/src/sp-mesh-array.cpp index 20d6d0d85..6bd5c85d7 100644 --- a/src/sp-mesh-array.cpp +++ b/src/sp-mesh-array.cpp @@ -632,12 +632,12 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { guint max_column = 0; guint irow = 0; // Corresponds to top of patch being read in. - for (auto& ro: mg->_children) { + for (auto& ro: mg->children) { if (SP_IS_MESHROW(&ro)) { guint icolumn = 0; // Corresponds to left of patch being read in. - for (auto& po: ro._children) { + for (auto& po: ro.children) { if (SP_IS_MESHPATCH(&po)) { @@ -652,7 +652,7 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { // Only 'top' side defined for first row. if( irow != 0 ) ++istop; - for (auto& so: po._children) { + for (auto& so: po.children) { if (SP_IS_STOP(&so)) { if( istop > 3 ) { @@ -848,13 +848,13 @@ void SPMeshNodeArray::write( SPMesh *mg ) { // First we must delete reprs for old mesh rows and patches. GSList *descendant_reprs = NULL; GSList *descendant_objects = NULL; - for (auto& row: mg->_children) { + for (auto& row: mg->children) { descendant_reprs = g_slist_prepend (descendant_reprs, row.getRepr()); descendant_objects = g_slist_prepend (descendant_objects, &row); - for (auto& patch: row._children) { + for (auto& patch: row.children) { descendant_reprs = g_slist_prepend (descendant_reprs, patch.getRepr()); descendant_objects = g_slist_prepend (descendant_objects, &patch); - for (auto& stop: patch._children) { + for (auto& stop: patch.children) { descendant_reprs = g_slist_prepend (descendant_reprs, stop.getRepr()); descendant_objects = g_slist_prepend (descendant_objects, &stop); } diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 173055dbd..e1d69e297 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -248,7 +248,7 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { this->readAttr( "inkscape:lockguides" ); /* Construct guideline list */ - for (auto& o: _children) { + for (auto& o: children) { if (SP_IS_GUIDE(&o)) { SPGuide * g = SP_GUIDE(&o); this->guides.push_back(g); @@ -858,7 +858,7 @@ void sp_namedview_update_layers_from_document (SPDesktop *desktop) } // if that didn't work out, look for the topmost layer if (!layer) { - for (auto& iter: document->getRoot()->_children) { + for (auto& iter: document->getRoot()->children) { if (desktop->isLayer(&iter)) { layer = &iter; } diff --git a/src/sp-object-group.cpp b/src/sp-object-group.cpp index bfed08218..62c6f7a87 100644 --- a/src/sp-object-group.cpp +++ b/src/sp-object-group.cpp @@ -50,7 +50,7 @@ Inkscape::XML::Node *SPObjectGroup::write(Inkscape::XML::Document *xml_doc, Inks } GSList *l = 0; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { @@ -64,7 +64,7 @@ Inkscape::XML::Node *SPObjectGroup::write(Inkscape::XML::Document *xml_doc, Inks l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { child.updateRepr(flags); } } diff --git a/src/sp-object.cpp b/src/sp-object.cpp index 587efd4f6..ccd70f4cb 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -400,7 +400,7 @@ void SPObject::changeCSS(SPCSSAttr *css, gchar const *attr) std::vector SPObject::childList(bool add_ref, Action) { std::vector l; - for (auto& child: _children) { + for (auto& child: children) { if (add_ref) { sp_object_ref(&child); } @@ -467,7 +467,7 @@ void SPObject::requestOrphanCollection() { } void SPObject::_sendDeleteSignalRecursive() { - for (auto& child: _children) { + for (auto& child: children) { child._delete_signal.emit(&child); child._sendDeleteSignalRecursive(); } @@ -497,7 +497,7 @@ void SPObject::deleteObject(bool propagate, bool propagate_descendants) void SPObject::cropToObject(SPObject *except) { std::vector toDelete; - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM(&child)) { if (child.isAncestorOf(except)) { child.cropToObject(except); @@ -525,11 +525,11 @@ void SPObject::attach(SPObject *object, SPObject *prev) object->parent = this; this->_updateTotalHRefCount(object->_total_hrefcount); - auto it = _children.begin(); + auto it = children.begin(); if (prev != nullptr) { - it = ++_children.iterator_to(*prev); + it = ++children.iterator_to(*prev); } - _children.insert(it, *object); + children.insert(it, *object); if (!object->xml_space.set) object->xml_space.value = this->xml_space.value; @@ -542,12 +542,12 @@ void SPObject::reorder(SPObject* obj, SPObject* prev) { g_return_if_fail(obj != prev); g_return_if_fail(!prev || prev->parent == obj->parent); - auto it = _children.begin(); + auto it = children.begin(); if (prev != nullptr) { - it = ++_children.iterator_to(*prev); + it = ++children.iterator_to(*prev); } - _children.splice(it, _children, _children.iterator_to(*obj)); + children.splice(it, children, children.iterator_to(*obj)); } void SPObject::detach(SPObject *object) @@ -558,7 +558,7 @@ void SPObject::detach(SPObject *object) g_return_if_fail(SP_IS_OBJECT(object)); g_return_if_fail(object->parent == this); - _children.erase(_children.iterator_to(*object)); + children.erase(children.iterator_to(*object)); object->releaseReferences(); object->parent = NULL; @@ -572,10 +572,10 @@ SPObject *SPObject::get_child_by_repr(Inkscape::XML::Node *repr) g_return_val_if_fail(repr != NULL, NULL); SPObject *result = nullptr; - if (_children.size() > 0 && _children.back().getRepr() == repr) { - result = &_children.back(); // optimization for common scenario + if (children.size() > 0 && children.back().getRepr() == repr) { + result = &children.back(); // optimization for common scenario } else { - for (auto& child: _children) { + for (auto& child: children) { if (child.getRepr() == repr) { result = &child; break; @@ -609,7 +609,7 @@ void SPObject::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) void SPObject::release() { SPObject* object = this; debug("id=%p, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object)); - auto tmp = _children | boost::adaptors::transformed([](SPObject& obj){return &obj;}); + auto tmp = children | boost::adaptors::transformed([](SPObject& obj){return &obj;}); std::vector toRelease(tmp.begin(), tmp.end()); for (auto& p: toRelease) { @@ -797,8 +797,8 @@ void SPObject::releaseReferences() { SPObject *SPObject::getPrev() { SPObject *prev = nullptr; - if (parent && !parent->_children.empty() && &parent->_children.front() != this) { - prev = &*(--parent->_children.iterator_to(*this)); + if (parent && !parent->children.empty() && &parent->children.front() != this) { + prev = &*(--parent->children.iterator_to(*this)); } return prev; } @@ -806,8 +806,8 @@ SPObject *SPObject::getPrev() SPObject* SPObject::getNext() { SPObject *next = nullptr; - if (parent && !parent->_children.empty() && &parent->_children.back() != this) { - next = &*(++parent->_children.iterator_to(*this)); + if (parent && !parent->children.empty() && &parent->children.back() != this) { + next = &*(++parent->children.iterator_to(*this)); } return next; } @@ -1475,7 +1475,7 @@ bool SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool } else { // remove the current content of the 'text' or 'desc' element - auto tmp = elem->_children | boost::adaptors::transformed([](SPObject& obj) { return &obj; }); + auto tmp = elem->children | boost::adaptors::transformed([](SPObject& obj) { return &obj; }); std::vector vec(tmp.begin(), tmp.end()); for (auto &child: vec) { child->deleteObject(); @@ -1489,7 +1489,7 @@ bool SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool SPObject* SPObject::findFirstChild(gchar const *tagname) const { - for (auto& child: const_cast(this)->_children) + for (auto& child: const_cast(this)->children) { if (child.repr->type() == Inkscape::XML::ELEMENT_NODE && !strcmp(child.repr->name(), tagname)) { @@ -1503,7 +1503,7 @@ char* SPObject::textualContent() const { GString* text = g_string_new(""); - for (auto& child: _children) + for (auto& child: children) { Inkscape::XML::NodeType child_type = child.repr->type(); @@ -1530,7 +1530,7 @@ void SPObject::recursivePrintTree( unsigned level ) std::cout << " "; } std::cout << (getId()?getId():"No object id") << std::endl; - for (auto& child: _children) { + for (auto& child: children) { child.recursivePrintTree(level + 1); } } diff --git a/src/sp-object.h b/src/sp-object.h index 94c9d5629..1c6212664 100644 --- a/src/sp-object.h +++ b/src/sp-object.h @@ -306,13 +306,13 @@ public: */ SPObject *getPrev(); - bool hasChildren() const { return ( _children.size() > 0 ); } + bool hasChildren() const { return ( children.size() > 0 ); } - SPObject *firstChild() { return _children.empty() ? nullptr : &_children.front(); } - SPObject const *firstChild() const { return _children.empty() ? nullptr : &_children.front(); } + SPObject *firstChild() { return children.empty() ? nullptr : &children.front(); } + SPObject const *firstChild() const { return children.empty() ? nullptr : &children.front(); } - SPObject *lastChild() { return _children.empty() ? nullptr : &_children.back(); } - SPObject const *lastChild() const { return _children.empty() ? nullptr : &_children.back(); } + SPObject *lastChild() { return children.empty() ? nullptr : &children.back(); } + SPObject const *lastChild() const { return children.empty() ? nullptr : &children.back(); } enum Action { ActionGeneral, ActionBBox, ActionUpdate, ActionShow }; @@ -857,7 +857,7 @@ public: ListHook, &SPObject::_child_hook >> ChildrenList; - ChildrenList _children; + ChildrenList children; virtual void read_content(); void recursivePrintTree(unsigned level = 0); // For debugging diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index fde9f90f1..3b1ae3f0b 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -223,7 +223,7 @@ void SPPattern::_getChildren(std::list &l) { for (SPPattern *pat_i = this; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i->firstChild()) { // find the first one with children - for (auto& child: pat_i->_children) { + for (auto& child: pat_i->children) { l.push_back(&child); } break; // do not go further up the chain if children are found @@ -319,7 +319,7 @@ guint SPPattern::_countHrefs(SPObject *o) const i++; } - for (auto& child: o->_children) { + for (auto& child: o->children) { i += _countHrefs(&child); } @@ -508,7 +508,7 @@ Geom::OptRect SPPattern::viewbox() const bool SPPattern::_hasItemChildren() const { - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM(&child)) { return true; } @@ -558,7 +558,7 @@ cairo_pattern_t *SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b Inkscape::DrawingGroup *root = new Inkscape::DrawingGroup(drawing); drawing.setRoot(root); - for (auto& child: shown->_children) { + for (auto& child: shown->children) { if (SP_IS_ITEM(&child)) { // for each item in pattern, show it on our drawing, add to the group, // and connect to the release signal in case the item gets deleted @@ -654,7 +654,7 @@ cairo_pattern_t *SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b // Render drawing to pattern_surface via drawing context, this calls root->render // which is really DrawingItem->render(). drawing.render(dc, one_tile); - for (auto& child: shown->_children) { + for (auto& child: shown->children) { if (SP_IS_ITEM(&child)) { SP_ITEM(&child)->invoke_hide(dkey); } diff --git a/src/sp-root.cpp b/src/sp-root.cpp index cfd0ced10..34047054a 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -73,7 +73,7 @@ void SPRoot::build(SPDocument *document, Inkscape::XML::Node *repr) SPGroup::build(document, repr); // Search for first node - for (auto& o: _children) { + for (auto& o: children) { if (SP_IS_DEFS(&o)) { this->defs = SP_DEFS(&o); break; @@ -174,7 +174,7 @@ void SPRoot::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) if (co && SP_IS_DEFS(co)) { // We search for first node - it is not beautiful, but works - for (auto& c: _children) { + for (auto& c: children) { if (SP_IS_DEFS(&c)) { this->defs = SP_DEFS(&c); break; @@ -189,7 +189,7 @@ void SPRoot::remove_child(Inkscape::XML::Node *child) SPObject *iter = 0; // We search for first remaining node - it is not beautiful, but works - for (auto& child: _children) { + for (auto& child: children) { iter = &child; if (SP_IS_DEFS(iter) && (SPDefs *)iter != this->defs) { this->defs = (SPDefs *)iter; diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index 7679cc31e..971583a9a 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -32,7 +32,7 @@ SPSwitch::~SPSwitch() { SPObject *SPSwitch::_evaluateFirst() { SPObject *first = 0; - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM(&child) && sp_item_evaluate(SP_ITEM(&child))) { first = &child; break; diff --git a/src/sp-text.cpp b/src/sp-text.cpp index 193289c2b..e52869942 100644 --- a/src/sp-text.cpp +++ b/src/sp-text.cpp @@ -155,7 +155,7 @@ void SPText::update(SPCtx *ctx, guint flags) { // Create temporary list of children GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child, this); l = g_slist_prepend (l, &child); } @@ -235,7 +235,7 @@ void SPText::modified(guint flags) { // Create temporary list of children GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child, this); l = g_slist_prepend (l, &child); } @@ -262,7 +262,7 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) { continue; } @@ -286,7 +286,7 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X l = g_slist_remove (l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) { continue; } @@ -606,7 +606,7 @@ unsigned SPText::_buildLayoutInput(SPObject *root, Inkscape::Text::Layout::Optio } } - for (auto& child: root->_children) { + for (auto& child: root->children) { SPString *str = dynamic_cast(&child); if (str) { Glib::ustring const &string = str->string; @@ -628,7 +628,7 @@ void SPText::rebuildLayout() Inkscape::Text::Layout::OptionalTextTagAttrs optional_attrs; _buildLayoutInput(this, optional_attrs, 0, false); layout.calculateFlow(); - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_TEXTPATH(&child)) { SPTextPath const *textpath = SP_TEXTPATH(&child); if (textpath->originalPath != NULL) { @@ -640,7 +640,7 @@ void SPText::rebuildLayout() //g_print("%s", layout.dumpAsText().c_str()); // set the x,y attributes on role:line spans - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_TSPAN(&child)) { SPTSpan *tspan = SP_TSPAN(&child); if ( (tspan->role != SP_TSPAN_ROLE_UNSPECIFIED) @@ -676,7 +676,7 @@ void SPText::_adjustFontsizeRecursive(SPItem *item, double ex, bool is_root) item->updateRepr(); } - for(auto& o: item->_children) { + for(auto& o: item->children) { if (SP_IS_ITEM(&o)) _adjustFontsizeRecursive(SP_ITEM(&o), ex, false); } @@ -695,7 +695,7 @@ void SPText::_adjustCoordsRecursive(SPItem *item, Geom::Affine const &m, double SP_TREF(item)->attributes.transform(m, ex, ex, is_root); } - for(auto& o: item->_children) { + for(auto& o: item->children) { if (SP_IS_ITEM(&o)) _adjustCoordsRecursive(SP_ITEM(&o), m, ex, false); } diff --git a/src/sp-tref.cpp b/src/sp-tref.cpp index 66866c9f7..48e2b41f6 100644 --- a/src/sp-tref.cpp +++ b/src/sp-tref.cpp @@ -506,7 +506,7 @@ sp_tref_convert_to_tspan(SPObject *obj) //////////////////// else { GSList *l = NULL; - for (auto& child: obj->_children) { + for (auto& child: obj->children) { sp_object_ref(&child, obj); l = g_slist_prepend (l, &child); } diff --git a/src/sp-tspan.cpp b/src/sp-tspan.cpp index 23df18503..5a82f2c05 100644 --- a/src/sp-tspan.cpp +++ b/src/sp-tspan.cpp @@ -96,7 +96,7 @@ void SPTSpan::update(SPCtx *ctx, guint flags) { } childflags &= SP_OBJECT_MODIFIED_CASCADE; - for (auto& ochild: _children) { + for (auto& ochild: children) { if ( flags || ( ochild.uflags & SP_OBJECT_MODIFIED_FLAG )) { ochild.updateDisplay(ctx, childflags); } @@ -128,7 +128,7 @@ void SPTSpan::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for (auto& ochild: _children) { + for (auto& ochild: children) { if (flags || (ochild.mflags & SP_OBJECT_MODIFIED_FLAG)) { ochild.emitModified(flags); } @@ -175,7 +175,7 @@ Inkscape::XML::Node* SPTSpan::write(Inkscape::XML::Document *xml_doc, Inkscape:: if ( flags&SP_OBJECT_WRITE_BUILD ) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node* c_repr=NULL; if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { @@ -197,7 +197,7 @@ Inkscape::XML::Node* SPTSpan::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { child.updateRepr(flags); } else if ( SP_IS_TEXTPATH(&child) ) { @@ -313,7 +313,7 @@ void SPTextPath::update(SPCtx *ctx, guint flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for (auto& ochild: _children) { + for (auto& ochild: children) { if ( flags || ( ochild.uflags & SP_OBJECT_MODIFIED_FLAG )) { ochild.updateDisplay(ctx, flags); } @@ -367,7 +367,7 @@ void SPTextPath::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for (auto& ochild: _children) { + for (auto& ochild: children) { if (flags || (ochild.mflags & SP_OBJECT_MODIFIED_FLAG)) { ochild.emitModified(flags); } @@ -399,7 +399,7 @@ Inkscape::XML::Node* SPTextPath::write(Inkscape::XML::Document *xml_doc, Inkscap if ( flags & SP_OBJECT_WRITE_BUILD ) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node* c_repr=NULL; if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { @@ -421,7 +421,7 @@ Inkscape::XML::Node* SPTextPath::write(Inkscape::XML::Document *xml_doc, Inkscap l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { child.updateRepr(flags); } else if ( SP_IS_TEXTPATH(&child) ) { @@ -466,7 +466,7 @@ void sp_textpath_to_text(SPObject *tp) // make a list of textpath children GSList *tp_reprs = NULL; - for (auto& o: tp->_children) { + for (auto& o: tp->children) { tp_reprs = g_slist_prepend(tp_reprs, o.getRepr()); } diff --git a/src/sp-use.cpp b/src/sp-use.cpp index cef967c90..b24363278 100644 --- a/src/sp-use.cpp +++ b/src/sp-use.cpp @@ -436,7 +436,7 @@ void SPUse::move_compensate(Geom::Affine const *mp) { //BUT move clippaths accordingly. //if clone has a clippath, move it accordingly if(clip_ref->getObject()){ - for(auto& clip: clip_ref->getObject()->_children){ + for(auto& clip: clip_ref->getObject()->children){ SPItem *item = (SPItem*) &clip; if(item){ item->transform *= m; @@ -446,7 +446,7 @@ void SPUse::move_compensate(Geom::Affine const *mp) { } } if(mask_ref->getObject()){ - for(auto& mask: mask_ref->getObject()->_children){ + for(auto& mask: mask_ref->getObject()->children){ SPItem *item = (SPItem*) &mask; if(item){ item->transform *= m; @@ -476,7 +476,7 @@ void SPUse::move_compensate(Geom::Affine const *mp) { //if clone has a clippath, move it accordingly if(clip_ref->getObject()){ - for(auto& clip: clip_ref->getObject()->_children){ + for(auto& clip: clip_ref->getObject()->children){ SPItem *item = (SPItem*) &clip; if(item){ item->transform *= clone_move.inverse(); @@ -486,7 +486,7 @@ void SPUse::move_compensate(Geom::Affine const *mp) { } } if(mask_ref->getObject()){ - for(auto& mask: mask_ref->getObject()->_children){ + for(auto& mask: mask_ref->getObject()->children){ SPItem *item = (SPItem*) &mask; if(item){ item->transform *= clone_move.inverse(); diff --git a/src/splivarot.cpp b/src/splivarot.cpp index 4ac9143f0..a4c4ac6cd 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -883,7 +883,7 @@ void item_outline_add_marker_child( SPItem const *item, Geom::Affine marker_tran // note: a marker child item can be an item group! if (SP_IS_GROUP(item)) { // recurse through all childs: - for (auto& o: item->_children) { + for (auto& o: item->children) { if ( SP_IS_ITEM(&o) ) { item_outline_add_marker_child(SP_ITEM(&o), tr, pathv_in); } diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp index 56048d1f7..a950dfebe 100644 --- a/src/text-chemistry.cpp +++ b/src/text-chemistry.cpp @@ -142,7 +142,7 @@ text_put_on_path() // make a list of text children GSList *text_reprs = NULL; - for(auto& o: text->_children) { + for(auto& o: text->children) { text_reprs = g_slist_prepend(text_reprs, o.getRepr()); } @@ -240,7 +240,7 @@ text_remove_all_kerns_recursively(SPObject *o) g_strfreev(xa_comma); } - for (auto& i: o->_children) { + for (auto& i: o->children) { text_remove_all_kerns_recursively(&i); i.requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG); } @@ -353,7 +353,7 @@ text_flow_into_shape() Inkscape::GC::release(text_repr); } else { // reflow an already flowed text, preserving paras - for(auto& o: text->_children) { + for(auto& o: text->children) { if (SP_IS_FLOWPARA(&o)) { Inkscape::XML::Node *para_repr = o.getRepr()->duplicate(xml_doc); root_repr->appendChild(para_repr); diff --git a/src/text-editing.cpp b/src/text-editing.cpp index 6ca2fe948..658cdf816 100644 --- a/src/text-editing.cpp +++ b/src/text-editing.cpp @@ -91,7 +91,7 @@ bool sp_te_input_is_empty(SPObject const *item) if (SP_IS_STRING(item)) { empty = SP_STRING(item)->string.empty(); } else { - for (auto& child: item->_children) { + for (auto& child: item->children) { if (!sp_te_input_is_empty(&child)) { empty = false; break; @@ -237,7 +237,7 @@ unsigned sp_text_get_length(SPObject const *item) length++; } - for (auto& child: item->_children) { + for (auto& child: item->children) { if (SP_IS_STRING(&child)) { length += SP_STRING(&child)->string.length(); } else { @@ -267,7 +267,7 @@ unsigned sp_text_get_length_upto(SPObject const *item, SPObject const *upto) } // Count the length of the children - for (auto& child: item->_children) { + for (auto& child: item->children) { if (upto && &child == upto) { // hit upto, return immediately return length; @@ -323,7 +323,7 @@ to \a item at the same level. */ static unsigned sum_sibling_text_lengths_before(SPObject const *item) { unsigned char_index = 0; - for (auto& sibling: item->parent->_children) { + for (auto& sibling: item->parent->children) { if (&sibling == item) { break; } @@ -860,7 +860,7 @@ static void sp_te_get_ustring_multiline(SPObject const *root, Glib::ustring *str if (*pending_line_break) { *string += '\n'; } - for (auto& child: root->_children) { + for (auto& child: root->children) { if (SP_IS_STRING(&child)) { *string += SP_STRING(&child)->string; } else { @@ -944,7 +944,7 @@ sp_te_set_repr_text_multiline(SPItem *text, gchar const *str) gchar *content = g_strdup (str); repr->setContent(""); - for (auto& child: object->_children) { + for (auto& child: object->children) { if (!SP_IS_FLOWREGION(&child) && !SP_IS_FLOWREGIONEXCLUDE(&child)) { repr->removeChild(child.getRepr()); } @@ -1405,7 +1405,7 @@ static void apply_css_recursive(SPObject *o, SPCSSAttr const *css) { sp_repr_css_change(o->getRepr(), const_cast(css), "style"); - for (auto& child: o->_children) { + for (auto& child: o->children) { if (sp_repr_css_property(const_cast(css), "opacity", NULL) != NULL) { // Unset properties which are accumulating and thus should not be set recursively. // For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group. @@ -2073,7 +2073,7 @@ bool has_visible_text(SPObject *obj) if (SP_IS_STRING(obj) && !SP_STRING(obj)->string.empty()) { hasVisible = true; // maybe we should also check that it's not all whitespace? } else { - for (auto& child: obj->_children) { + for (auto& child: obj->children) { if (has_visible_text(const_cast(&child))) { hasVisible = true; break; diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index 48d53857b..b25a70b15 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -839,7 +839,7 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item) SPObject *mask = item->mask_ref->getObject(); _copyNode(mask->getRepr(), _doc, _defs); // recurse into the mask for its gradients etc. - for(auto& o: mask->_children) { + for(auto& o: mask->children) { SPItem *childItem = dynamic_cast(&o); if (childItem) { _copyUsedDefs(childItem); @@ -857,7 +857,7 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item) } // recurse - for(auto& o: item->_children) { + for(auto& o: item->children) { SPItem *childItem = dynamic_cast(&o); if (childItem) { _copyUsedDefs(childItem); @@ -894,7 +894,7 @@ void ClipboardManagerImpl::_copyPattern(SPPattern *pattern) _copyNode(pattern->getRepr(), _doc, _defs); // items in the pattern may also use gradients and other patterns, so recurse - for (auto& child: pattern->_children) { + for (auto& child: pattern->children) { SPItem *childItem = dynamic_cast(&child); if (childItem) { _copyUsedDefs(childItem); diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index 11af02e3c..1e8ca4405 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -2042,7 +2042,7 @@ void CloneTiler::clonetiler_trace_hide_tiled_clones_recursively(SPObject *from) if (!trace_drawing) return; - for (auto& o: from->_children) { + for (auto& o: from->children) { SPItem *item = dynamic_cast(&o); if (item && clonetiler_is_a_clone_of(&o, NULL)) { item->invoke_hide(trace_visionkey); // FIXME: hide each tiled clone's original too! @@ -2123,7 +2123,7 @@ void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *) std::vector to_unclump; // not including the original - for (auto& child: parent->_children) { + for (auto& child: parent->children) { if (clonetiler_is_a_clone_of (&child, obj)) { to_unclump.push_back((SPItem*)&child); } @@ -2143,7 +2143,7 @@ guint CloneTiler::clonetiler_number_of_clones(SPObject *obj) guint n = 0; - for (auto& child: parent->_children) { + for (auto& child: parent->children) { if (clonetiler_is_a_clone_of (&child, obj)) { n ++; } @@ -2172,7 +2172,7 @@ void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool d // remove old tiling GSList *to_delete = NULL; - for (auto& child: parent->_children) { + for (auto& child: parent->children) { if (clonetiler_is_a_clone_of (&child, obj)) { to_delete = g_slist_prepend (to_delete, &child); } diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp index df37eb005..6f5f14d80 100644 --- a/src/ui/dialog/document-properties.cpp +++ b/src/ui/dialog/document-properties.cpp @@ -1315,7 +1315,7 @@ void DocumentProperties::changeEmbeddedScript(){ for (std::vector::const_iterator it = current.begin(); it != current.end(); ++it) { SPObject* obj = *it; if (id == obj->getId()){ - int count = (int) obj->_children.size(); + int count = (int) obj->children.size(); if (count>1) g_warning("TODO: Found a script element with multiple (%d) child nodes! We must implement support for that!", count); @@ -1359,7 +1359,7 @@ void DocumentProperties::editEmbeddedScript(){ //XML Tree being used directly here while it shouldn't be. Inkscape::XML::Node *repr = obj->getRepr(); if (repr){ - auto tmp = obj->_children | boost::adaptors::transformed([](SPObject& o) { return &o; }); + auto tmp = obj->children | boost::adaptors::transformed([](SPObject& o) { return &o; }); std::vector vec(tmp.begin(), tmp.end()); for (auto &child: vec) { child->deleteObject(); diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index 1be5d540a..3e3ede019 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -103,7 +103,7 @@ static int input_count(const SPFilterPrimitive* prim) return 2; else if(SP_IS_FEMERGE(prim)) { // Return the number of feMergeNode connections plus an extra - return (int) (prim->_children.size() + 1); + return (int) (prim->children.size() + 1); } else return 1; @@ -1060,7 +1060,7 @@ public: { SPFeFuncNode* funcNode = NULL; bool found = false; - for(auto& node: ct->_children) { + for(auto& node: ct->children) { funcNode = SP_FEFUNCNODE(&node); if( funcNode->channel == _channel ) { found = true; @@ -1868,7 +1868,7 @@ void FilterEffectsDialog::PrimitiveList::update() bool active_found = false; _dialog._primitive_box->set_sensitive(true); _dialog.update_filter_general_settings_view(); - for(auto& prim_obj: f->_children) { + for(auto& prim_obj: f->children) { SPFilterPrimitive *prim = SP_FILTER_PRIMITIVE(&prim_obj); if(!prim) { break; @@ -2339,7 +2339,7 @@ const Gtk::TreeIter FilterEffectsDialog::PrimitiveList::find_result(const Gtk::T if(SP_IS_FEMERGE(prim)) { int c = 0; bool found = false; - for (auto& o: prim->_children) { + for (auto& o: prim->children) { if(c == attr && SP_IS_FEMERGENODE(&o)) { image = SP_FEMERGENODE(&o)->input; found = true; @@ -2531,7 +2531,7 @@ bool FilterEffectsDialog::PrimitiveList::on_button_release_event(GdkEventButton* if(SP_IS_FEMERGE(prim)) { int c = 1; bool handled = false; - for (auto& o: prim->_children) { + for (auto& o: prim->children) { if(c == _in_drag && SP_IS_FEMERGENODE(&o)) { // If input is null, delete it if(!in_val) { diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp index e156dfa13..b09ce6078 100644 --- a/src/ui/dialog/find.cpp +++ b/src/ui/dialog/find.cpp @@ -747,7 +747,7 @@ std::vector &Find::all_items (SPObject *r, std::vector &l, boo return l; // we're not interested in metadata } - for (auto& child: r->_children) { + for (auto& child: r->children) { SPItem *item = dynamic_cast(&child); if (item && !child.cloned && !desktop->isLayer(item)) { if ((hidden || !desktop->itemIsHidden(item)) && (locked || !item->isLocked())) { diff --git a/src/ui/dialog/font-substitution.cpp b/src/ui/dialog/font-substitution.cpp index eafe5566a..b927096ab 100644 --- a/src/ui/dialog/font-substitution.cpp +++ b/src/ui/dialog/font-substitution.cpp @@ -182,7 +182,7 @@ std::vector FontSubstitution::getFontReplacedItems(SPDocument* doc, Gli family = SP_TEXT(parent_text)->layout.getFontFamily(0); // Add all the spans fonts to the set gint ii = 0; - for (auto& child: parent_text->_children) { + for (auto& child: parent_text->children) { family = SP_TEXT(parent_text)->layout.getFontFamily(ii); setFontSpans.insert(family); ii++; diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index e4639745f..f4d3a3f70 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -340,7 +340,7 @@ void ObjectsPanel::_objectsChanged(SPObject */*obj*/) void ObjectsPanel::_addObject(SPObject* obj, Gtk::TreeModel::Row* parentRow) { if ( _desktop && obj ) { - for(auto& child: obj->_children) { + for(auto& child: obj->children) { if (SP_IS_ITEM(&child)) { SPItem * item = SP_ITEM(&child); @@ -398,7 +398,7 @@ void ObjectsPanel::_updateObject( SPObject *obj, bool recurse ) { //end mark if (recurse) { - for (auto& iter: obj->_children) { + for (auto& iter: obj->children) { _updateObject(&iter, recurse); } } @@ -518,7 +518,7 @@ void ObjectsPanel::_setCompositingValues(SPItem *item) SPGaussianBlur *spblur = NULL; if (item->style->getFilter()) { - for (auto& primitive_obj: item->style->getFilter()->_children) { + for (auto& primitive_obj: item->style->getFilter()->children) { if (!SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { break; } @@ -1293,7 +1293,7 @@ bool ObjectsPanel::_executeAction() break; case BUTTON_COLLAPSE_ALL: { - for (auto& obj: _document->getRoot()->_children) { + for (auto& obj: _document->getRoot()->children) { if (SP_IS_GROUP(&obj)) { _setCollapsed(SP_GROUP(&obj)); } @@ -1405,7 +1405,7 @@ void ObjectsPanel::_setCollapsed(SPGroup * group) { group->setExpanded(false); group->updateRepr(SP_OBJECT_WRITE_NO_CHILDREN | SP_OBJECT_WRITE_EXT); - for (auto& iter: group->_children) { + for (auto& iter: group->children) { if (SP_IS_GROUP(&iter)) { _setCollapsed(SP_GROUP(&iter)); } @@ -1523,7 +1523,7 @@ void ObjectsPanel::_blendChangedIter(const Gtk::TreeIter& iter, Glib::ustring bl if (blendmode != "normal") { gdouble radius = 0; if (item->style->getFilter()) { - for (auto& primitive: item->style->getFilter()->_children) { + for (auto& primitive: item->style->getFilter()->children) { if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { break; } @@ -1538,7 +1538,7 @@ void ObjectsPanel::_blendChangedIter(const Gtk::TreeIter& iter, Glib::ustring bl SPFilter *filter = new_filter_simple_from_item(_document, item, blendmode.c_str(), radius); sp_style_set_property_url(item, "filter", filter, false); } else { - for (auto& primitive: item->style->getFilter()->_children) { + for (auto& primitive: item->style->getFilter()->children) { if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { break; } @@ -1598,7 +1598,7 @@ void ObjectsPanel::_blurChangedIter(const Gtk::TreeIter& iter, double blur) SPFilter *filter = modify_filter_gaussian_blur_from_item(_document, item, radius); sp_style_set_property_url(item, "filter", filter, false); } else if (item->style->filter.set && item->style->getFilter()) { - for (auto& primitive: item->style->getFilter()->_children) { + for (auto& primitive: item->style->getFilter()->children) { if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { break; } diff --git a/src/ui/dialog/spellcheck.cpp b/src/ui/dialog/spellcheck.cpp index 9338a4e8c..ac8ef5c15 100644 --- a/src/ui/dialog/spellcheck.cpp +++ b/src/ui/dialog/spellcheck.cpp @@ -234,7 +234,7 @@ GSList *SpellCheck::allTextItems (SPObject *r, GSList *l, bool hidden, bool lock return l; // we're not interested in metadata } - for (auto& child: r->_children) { + for (auto& child: r->children) { if (SP_IS_ITEM (&child) && !child.cloned && !desktop->isLayer(SP_ITEM(&child))) { if ((hidden || !desktop->itemIsHidden(SP_ITEM(&child))) && (locked || !SP_ITEM(&child)->isLocked())) { if (SP_IS_TEXT(&child) || SP_IS_FLOWTEXT(&child)) diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp index 93bd67a3d..a723c86d8 100644 --- a/src/ui/dialog/svg-fonts-dialog.cpp +++ b/src/ui/dialog/svg-fonts-dialog.cpp @@ -115,7 +115,7 @@ void SvgFontsDialog::AttrEntry::set_text(char* t){ void SvgFontsDialog::AttrEntry::on_attr_changed(){ SPObject* o = NULL; - for (auto& node: dialog->get_selected_spfont()->_children) { + for (auto& node: dialog->get_selected_spfont()->children) { switch(this->attr){ case SP_PROP_FONT_FAMILY: if (SP_IS_FONTFACE(&node)){ @@ -170,7 +170,7 @@ void GlyphComboBox::update(SPFont* spfont){ this->append(""); //Gtk is refusing to clear the combobox when I comment out this line this->remove_all(); - for (auto& node: spfont->_children) { + for (auto& node: spfont->children) { if (SP_IS_GLYPH(&node)){ this->append((static_cast(&node))->unicode); } @@ -308,7 +308,7 @@ void SvgFontsDialog::update_global_settings_tab(){ SPFont* font = get_selected_spfont(); if (!font) return; - for (auto& obj: font->_children) { + for (auto& obj: font->children) { if (SP_IS_FONTFACE(&obj)){ _familyname_entry->set_text((SP_FONTFACE(&obj))->font_family); } @@ -413,7 +413,7 @@ SvgFontsDialog::populate_glyphs_box() SPFont* spfont = this->get_selected_spfont(); _glyphs_observer.set(spfont); - for (auto& node: spfont->_children) { + for (auto& node: spfont->children) { if (SP_IS_GLYPH(&node)){ Gtk::TreeModel::Row row = *(_GlyphsListStore->append()); row[_GlyphsListColumns.glyph_node] = static_cast(&node); @@ -431,7 +431,7 @@ SvgFontsDialog::populate_kerning_pairs_box() SPFont* spfont = this->get_selected_spfont(); - for (auto& node: spfont->_children) { + for (auto& node: spfont->children) { if (SP_IS_HKERN(&node)){ Gtk::TreeModel::Row row = *(_KerningPairsListStore->append()); row[_KerningPairsListColumns.first_glyph] = (static_cast(&node))->u1->attribute_string().c_str(); @@ -492,7 +492,7 @@ void SvgFontsDialog::add_glyph(){ Geom::PathVector SvgFontsDialog::flip_coordinate_system(Geom::PathVector pathv){ double units_per_em = 1000; - for (auto& obj: get_selected_spfont()->_children) { + for (auto& obj: get_selected_spfont()->children) { if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. sp_repr_get_double(obj.getRepr(), "units-per-em", &units_per_em); @@ -574,7 +574,7 @@ void SvgFontsDialog::missing_glyph_description_from_selected_path(){ Geom::PathVector pathv = sp_svg_read_pathv(node->attribute("d")); - for (auto& obj: get_selected_spfont()->_children) { + for (auto& obj: get_selected_spfont()->children) { if (SP_IS_MISSING_GLYPH(&obj)){ //XML Tree being directly used here while it shouldn't be. @@ -596,7 +596,7 @@ void SvgFontsDialog::reset_missing_glyph_description(){ } SPDocument* doc = desktop->getDocument(); - for (auto& obj: get_selected_spfont()->_children) { + for (auto& obj: get_selected_spfont()->children) { if (SP_IS_MISSING_GLYPH(&obj)){ //XML Tree being directly used here while it shouldn't be. obj.getRepr()->setAttribute("d", (char*) "M0,0h1000v1024h-1000z"); @@ -734,7 +734,7 @@ void SvgFontsDialog::add_kerning_pair(){ //look for this kerning pair on the currently selected font this->kerning_pair = NULL; - for (auto& node: get_selected_spfont()->_children) { + for (auto& node: get_selected_spfont()->children) { //TODO: It is not really correct to get only the first byte of each string. //TODO: We should also support vertical kerning if (SP_IS_HKERN(&node) && (static_cast(&node))->u1->contains((gchar) first_glyph.get_active_text().c_str()[0]) @@ -848,7 +848,7 @@ SPFont *new_font(SPDocument *document) void set_font_family(SPFont* font, char* str){ if (!font) return; - for (auto& obj: font->_children) { + for (auto& obj: font->children) { if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. obj.getRepr()->setAttribute("font-family", str); @@ -868,7 +868,7 @@ void SvgFontsDialog::add_font(){ font->setLabel(os.str().c_str()); os2 << "SVGFont " << count; - for (auto& obj: font->_children) { + for (auto& obj: font->children) { if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. obj.getRepr()->setAttribute("font-family", os2.str().c_str()); diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index 1fdce34a5..84088052e 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -658,7 +658,7 @@ GSList* SymbolsDialog::symbols_in_doc_recursive (SPObject *r, GSList *l) l = g_slist_prepend (l, r); } - for (auto& child: r->_children) { + for (auto& child: r->children) { l = symbols_in_doc_recursive( &child, l ); } @@ -680,7 +680,7 @@ GSList* SymbolsDialog::use_in_doc_recursive (SPObject *r, GSList *l) l = g_slist_prepend (l, r); } - for (auto& child: r->_children) { + for (auto& child: r->children) { l = use_in_doc_recursive( &child, l ); } diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index 61c8b5d37..fcc9b804c 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -399,7 +399,7 @@ void TagsPanel::_objectsChanged(SPObject* root) void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* parentRow ) { if ( _desktop && obj ) { - for (auto& child: obj->_children) { + for (auto& child: obj->children) { if (SP_IS_TAG(&child)) { Gtk::TreeModel::iterator iter = parentRow ? _store->prepend(parentRow->children()) : _store->prepend(); @@ -430,7 +430,7 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* _tree.expand_to_path( _store->get_path(iteritems) ); - for (auto& child: obj->_children) { + for (auto& child: obj->children) { if (SP_IS_TAG_USE(&child)) { SPItem *item = SP_TAG_USE(&child)->ref->getObject(); @@ -459,7 +459,7 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* void TagsPanel::_select_tag( SPTag * tag ) { - for (auto& child: tag->_children) { + for (auto& child: tag->children) { if (SP_IS_TAG(&child)) { _select_tag(SP_TAG(&child)); } else if (SP_IS_TAG_USE(&child)) { @@ -649,7 +649,7 @@ bool TagsPanel::_handleButtonEvent(GdkEventButton* event) for(auto i=items.begin();i!=items.end();++i){ SPObject *newobj = *i; bool addchild = true; - for (auto& child: obj->_children) { + for (auto& child: obj->children) { if (SP_IS_TAG_USE(&child) && SP_TAG_USE(&child)->ref->getObject() == newobj) { addchild = false; } diff --git a/src/ui/tools/box3d-tool.cpp b/src/ui/tools/box3d-tool.cpp index 2adba38c5..9a0b37913 100644 --- a/src/ui/tools/box3d-tool.cpp +++ b/src/ui/tools/box3d-tool.cpp @@ -118,7 +118,7 @@ static void sp_box3d_context_ensure_persp_in_defs(SPDocument *document) { SPDefs *defs = document->getDefs(); bool has_persp = false; - for (auto& child: defs->_children) { + for (auto& child: defs->children) { if (SP_IS_PERSP3D(&child)) { has_persp = true; break; diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp index be8ce6d0c..11752726b 100644 --- a/src/ui/tools/connector-tool.cpp +++ b/src/ui/tools/connector-tool.cpp @@ -1114,7 +1114,7 @@ void ConnectorTool::_setActiveShape(SPItem *item) { // The idea here is to try and add a group's children to solidify // connection handling. We react to path objects with only one node. - for (auto& child: item->_children) { + for (auto& child: item->children) { if (SP_IS_PATH(&child) && SP_PATH(&child)->nodesInPath() == 1) { this->_activeShapeAddKnot((SPItem *) &child); } diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index 3dfac5e3d..87b7bf7e3 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -378,7 +378,7 @@ void gather_items(NodeTool *nt, SPItem *base, SPObject *obj, Inkscape::UI::Shape r.role = role; s.insert(r); } else if (role != SHAPE_ROLE_NORMAL && (SP_IS_GROUP(obj) || SP_IS_OBJECTGROUP(obj))) { - for (auto& c: obj->_children) { + for (auto& c: obj->children) { gather_items(nt, base, &c, role, s); } } else if (SP_IS_ITEM(obj)) { diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp index 7da0973d5..361986d0c 100644 --- a/src/ui/tools/tweak-tool.cpp +++ b/src/ui/tools/tweak-tool.cpp @@ -385,7 +385,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P if (dynamic_cast(item) && !dynamic_cast(item)) { GSList *children = NULL; - for (auto& child: item->_children) { + for (auto& child: item->children) { if (dynamic_cast(static_cast(&child))) { children = g_slist_prepend(children, &child); } @@ -832,7 +832,7 @@ static void tweak_colors_in_gradient(SPItem *item, Inkscape::PaintTarget fill_or double offset_l = 0; double offset_h = 0; SPObject *child_prev = NULL; - for (auto& child: vector->_children) { + for (auto& child: vector->children) { SPStop *stop = dynamic_cast(&child); if (!stop) { continue; @@ -894,7 +894,7 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point, bool did = false; if (dynamic_cast(item)) { - for (auto& child: item->_children) { + for (auto& child: item->children) { SPItem *childItem = dynamic_cast(&child); if (childItem) { if (sp_tweak_color_recursive (mode, childItem, item_at_point, @@ -951,7 +951,7 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point, Geom::Affine i2dt = item->i2dt_affine (); if (style->filter.set && style->getFilter()) { //cycle through filter primitives - for (auto& primitive_obj: style->getFilter()->_children) { + for (auto& primitive_obj: style->getFilter()->children) { SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (primitive) { //if primitive is gaussianblur diff --git a/src/ui/widget/layer-selector.cpp b/src/ui/widget/layer-selector.cpp index 46a0b3547..c080579f1 100644 --- a/src/ui/widget/layer-selector.cpp +++ b/src/ui/widget/layer-selector.cpp @@ -352,7 +352,7 @@ void LayerSelector::_buildSiblingEntries( ) { using Inkscape::Util::rest; - auto siblings = parent._children | boost::adaptors::filtered(is_layer(_desktop)) | boost::adaptors::reversed; + auto siblings = parent.children | boost::adaptors::filtered(is_layer(_desktop)) | boost::adaptors::reversed; SPObject *layer( hierarchy ? &*hierarchy : NULL ); diff --git a/src/uri-references.cpp b/src/uri-references.cpp index 23802ae65..6ef933982 100644 --- a/src/uri-references.cpp +++ b/src/uri-references.cpp @@ -76,7 +76,7 @@ bool URIReference::_acceptObject(SPObject *obj) const std::vector positions; while (owner->cloned) { int position = 0; - for (auto &child: owner->parent->_children) { + for (auto &child: owner->parent->children) { if(&child == owner) { break; } diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index c4b2ed59a..1565e16f3 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -720,7 +720,7 @@ static void select_stop_by_drag(GtkWidget *combo_box, SPGradient *gradient, Tool static void select_stop_in_list( GtkWidget *combo_box, SPGradient *gradient, SPStop *new_stop, GtkWidget *data, gboolean block) { int i = 0; - for (auto& ochild: gradient->_children) { + for (auto& ochild: gradient->children) { if (SP_IS_STOP(&ochild)) { if (&ochild == new_stop) { blocked = block; @@ -765,7 +765,7 @@ static gboolean update_stop_list( GtkWidget *stop_combo, SPGradient *gradient, S /* Populate the combobox store */ std::vector sl; if ( gradient->hasStops() ) { - for (auto& ochild: gradient->_children) { + for (auto& ochild: gradient->children) { if (SP_IS_STOP(&ochild)) { sl.push_back(&ochild); } diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 813a2d28e..5f549a77c 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -363,7 +363,7 @@ unsigned long sp_gradient_to_hhssll(SPGradient *gr) static GSList *get_all_doc_items(GSList *list, SPObject *from, bool onlyvisible, bool onlysensitive, bool ingroups, GSList const *exclude) { - for (auto& child: from->_children) { + for (auto& child: from->children) { if (SP_IS_ITEM(&child)) { list = g_slist_prepend(list, SP_ITEM(&child)); } @@ -525,7 +525,7 @@ static void verify_grad(SPGradient *gradient) int i = 0; SPStop *stop = NULL; /* count stops */ - for (auto& ochild: gradient->_children) { + for (auto& ochild: gradient->children) { if (SP_IS_STOP(&ochild)) { i++; stop = SP_STOP(&ochild); @@ -568,7 +568,7 @@ static void select_stop_in_list( GtkWidget *vb, SPGradient *gradient, SPStop *ne GtkWidget *combo_box = static_cast(g_object_get_data(G_OBJECT(vb), "combo_box")); int i = 0; - for (auto& ochild: gradient->_children) { + for (auto& ochild: gradient->children) { if (SP_IS_STOP(&ochild)) { if (&ochild == new_stop) { gtk_combo_box_set_active (GTK_COMBO_BOX(combo_box) , i); @@ -603,7 +603,7 @@ static void update_stop_list( GtkWidget *vb, SPGradient *gradient, SPStop *new_s /* Populate the combobox store */ GSList *sl = NULL; if ( gradient->hasStops() ) { - for (auto& ochild: gradient->_children) { + for (auto& ochild: gradient->children) { if (SP_IS_STOP(&ochild)) { sl = g_slist_append(sl, &ochild); } diff --git a/src/widgets/stroke-marker-selector.cpp b/src/widgets/stroke-marker-selector.cpp index fd7b5f6cd..af3f03420 100644 --- a/src/widgets/stroke-marker-selector.cpp +++ b/src/widgets/stroke-marker-selector.cpp @@ -335,7 +335,7 @@ GSList *MarkerComboBox::get_marker_list (SPDocument *source) return NULL; } - for (auto& child: defs->_children) + for (auto& child: defs->children) { if (SP_IS_MARKER(&child)) { ml = g_slist_prepend (ml, &child); -- cgit v1.2.3 From 3c593bb8da3357514ff5b4f3154d08c4508ad47e Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 20 Jul 2016 11:01:17 +0200 Subject: Changed arguments and names of selection chemistry functions (bzr r14954.1.22) --- src/object-set.h | 43 ++++++- src/persp3d.cpp | 4 +- src/persp3d.h | 2 +- src/selection-chemistry.cpp | 289 ++++++++++++++++++++++---------------------- src/selection-chemistry.h | 34 +++--- src/selection.cpp | 5 +- src/selection.h | 10 +- src/ui/interface.cpp | 2 +- src/verbs.cpp | 12 +- 9 files changed, 217 insertions(+), 184 deletions(-) (limited to 'src') diff --git a/src/object-set.h b/src/object-set.h index 0f06e373b..a0bca7889 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -26,11 +26,14 @@ #include #include #include +#include #include "sp-object.h" #include "sp-item.h" +#include "sp-item-group.h" class SPBox3D; class Persp3D; +class SPDesktop; namespace Inkscape { @@ -47,6 +50,12 @@ struct is_item { } }; +struct is_group { + bool operator()(SPObject* obj) { + return SP_IS_GROUP(obj); + } +}; + struct object_to_item { typedef SPItem* result_type; SPItem* operator()(SPObject* obj) const { @@ -61,6 +70,13 @@ struct object_to_node { } }; +struct object_to_group { + typedef SPGroup* result_type; + SPGroup* operator()(SPObject* obj) const { + return SP_GROUP(obj); + } +}; + typedef boost::multi_index_container< SPObject*, boost::multi_index::indexed_by< @@ -82,9 +98,10 @@ class ObjectSet { public: enum CompareSize {HORIZONTAL, VERTICAL, AREA}; typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())) SPItemRange; + typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_group()) | boost::adaptors::transformed(object_to_group())) SPGroupRange; typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())) XMLNodeRange; - ObjectSet() {}; + ObjectSet(SPDesktop* desktop): _desktop(desktop) {}; virtual ~ObjectSet(); /** @@ -177,18 +194,25 @@ public: /** Returns the list of selected objects. */ SPObjectRange objects(); - /** Returns the list of selected SPItems. */ + /** Returns a range of selected SPItems. */ SPItemRange items() { return SPItemRange(container.get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())); }; - /** Returns a list of the xml nodes of all selected objects. */ + /** Returns a range of selected groups. */ + SPGroupRange groups() { + return SPGroupRange (container.get() + | boost::adaptors::filtered(is_group()) + | boost::adaptors::transformed(object_to_group())); + } + + /** Returns a range of the xml nodes of all selected objects. */ XMLNodeRange xmlNodes() { return XMLNodeRange(container.get() - | boost::adaptors::filtered(is_item()) - | boost::adaptors::transformed(object_to_node())); + | boost::adaptors::filtered(is_item()) + | boost::adaptors::transformed(object_to_node())); } /** @@ -254,6 +278,13 @@ public: */ std::list const box3DList(Persp3D *persp = NULL); + /** + * Returns the desktop the selection is bound to + * + * @return the desktop the selection is bound to, or NULL if in console mode + */ + SPDesktop *desktop() { return _desktop; } + protected: virtual void _connectSignals(SPObject* object) {}; virtual void _releaseSignals(SPObject* object) {}; @@ -270,12 +301,14 @@ protected: virtual void _remove_3D_boxes_recursively(SPObject *obj); multi_index_container container; + GC::soft_ptr _desktop; std::list _3dboxes; std::unordered_map releaseConnections; }; typedef ObjectSet::SPItemRange SPItemRange; +typedef ObjectSet::SPGroupRange SPGroupRange; typedef ObjectSet::XMLNodeRange XMLNodeRange; } // namespace Inkscape diff --git a/src/persp3d.cpp b/src/persp3d.cpp index e260af8e5..7d79d3ab5 100644 --- a/src/persp3d.cpp +++ b/src/persp3d.cpp @@ -494,10 +494,10 @@ persp3d_on_repr_attr_changed ( Inkscape::XML::Node * /*repr*/, /* checks whether all boxes linked to this perspective are currently selected */ bool -persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::Selection *selection) { +persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::ObjectSet *set) { Persp3DImpl *persp_impl = persp->perspective_impl; - std::list selboxes = selection->box3DList(); + std::list selboxes = set->box3DList(); for (std::vector::iterator i = persp_impl->boxes.begin(); i != persp_impl->boxes.end(); ++i) { if (std::find(selboxes.begin(), selboxes.end(), *i) == selboxes.end()) { diff --git a/src/persp3d.h b/src/persp3d.h index be5680bcb..ce0e3c120 100644 --- a/src/persp3d.h +++ b/src/persp3d.h @@ -107,7 +107,7 @@ void persp3d_absorb(Persp3D *persp1, Persp3D *persp2); Persp3D * persp3d_create_xml_element (SPDocument *document, Persp3DImpl *dup = NULL); Persp3D * persp3d_document_first_persp (SPDocument *document); -bool persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::Selection *selection); +bool persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::ObjectSet *set); void persp3d_print_debugging_info (Persp3D *persp); void persp3d_print_debugging_info_all(SPDocument *doc); diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 81d711e77..e8c408ed8 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -12,8 +12,9 @@ * Abhishek Sharma * Kris De Gussem * Tavmjong Bah (Symbol additions) + * Adrian Boguszewski * - * Copyright (C) 1999-2010,2012 authors + * Copyright (C) 1999-2016 authors * Copyright (C) 2001-2002 Ximian, Inc. * * Released under GNU GPL, read the file 'COPYING' for more information @@ -109,6 +110,7 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS; #include "live_effects/effect-enum.h" #include "live_effects/parameter/originalpath.h" #include "layer-manager.h" +#include "object-set.h" #include "enums.h" #include "sp-item-group.h" @@ -124,6 +126,7 @@ using Inkscape::DocumentUndo; using Geom::X; using Geom::Y; using Inkscape::UI::Tools::NodeTool; +using namespace Inkscape; /* The clipboard handling is in ui/clipboard.cpp now. There are some legacy functions left here, because the layer manipulation code uses them. It should be rewritten specifically @@ -691,9 +694,13 @@ void sp_edit_invert_in_all_layers(SPDesktop *desktop) sp_edit_select_all_full(desktop, true, true); } -static void sp_selection_group_impl(std::vector p, Inkscape::XML::Node *group, Inkscape::XML::Document *xml_doc, SPDocument *doc) { +static Inkscape::XML::Node* sp_selection_group(ObjectSet *set) { + SPDocument *doc = set->desktop()->getDocument(); + Inkscape::XML::Document *xml_doc = doc->getReprDoc(); + Inkscape::XML::Node *group = xml_doc->createElement("svg:g"); - sort(p.begin(),p.end(),sp_repr_compare_position_bool); + std::vector p(set->xmlNodes().begin(), set->xmlNodes().end()); + std::sort(p.begin(), p.end(), sp_repr_compare_position_bool); // Remember the position and parent of the topmost object. gint topmost = p.back()->position(); @@ -751,31 +758,24 @@ static void sp_selection_group_impl(std::vector p, Inkscap // Move to the position of the topmost, reduced by the number of items deleted from topmost_parent group->setPosition(topmost + 1); + + set->set(doc->getObjectByRepr(group)); + + return group; } -void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_group_ui(Inkscape::Selection *selection, SPDesktop *desktop) { - SPDocument *doc = selection->layers()->getDocument(); - Inkscape::XML::Document *xml_doc = doc->getReprDoc(); - // Check if something is selected. if (selection->isEmpty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select some objects to group.")); return; } + Inkscape::XML::Node* group = sp_selection_group(selection); - std::vector p (selection->xmlNodes().begin(), selection->xmlNodes().end()); - - selection->clear(); - - Inkscape::XML::Node *group = xml_doc->createElement("svg:g"); - - sp_selection_group_impl(p, group, xml_doc, doc); - - DocumentUndo::done(doc, SP_VERB_SELECTION_GROUP, + DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_GROUP, C_("Verb", "Group")); - selection->set(group); Inkscape::GC::release(group); } @@ -823,32 +823,16 @@ void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDeskto } - -void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop) +static void sp_selection_ungroup(ObjectSet *set) { - if (selection->isEmpty()) { - selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select a group to ungroup.")); - } - - // first check whether there is anything to ungroup - auto old_select = selection->items(); - std::vector new_select; GSList *groups = NULL; - for (auto item = old_select.begin(); item!=old_select.end(); ++item) { - SPItem *obj = *item; - if (dynamic_cast(obj)) { - groups = g_slist_prepend(groups, obj); - } - } - - if (groups == NULL) { - selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("No groups to ungroup in the selection.")); - g_slist_free(groups); - return; + for (auto g: set->groups()) { + groups = g_slist_prepend(groups, g); } + std::vector new_select; + auto old_select = set->items(); std::vector items(old_select.begin(), old_select.end()); - selection->clear(); // If any of the clones refer to the groups, unlink them and replace them with successors // in the items list. @@ -895,7 +879,21 @@ void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop) } } - selection->addList(new_select); + set->setList(new_select); +} + +void sp_selection_ungroup_ui(Inkscape::Selection *selection, SPDesktop *desktop) +{ + if (selection->isEmpty()) { + selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select a group to ungroup.")); + } + + if (boost::distance(selection->groups()) == 0) { + selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("No groups to ungroup in the selection.")); + return; + } + + sp_selection_ungroup(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_UNGROUP, _("Ungroup")); @@ -931,18 +929,18 @@ sp_degroup_list(std::vector &items) /** If items in the list have a common parent, return it, otherwise return NULL */ static SPGroup * -sp_item_list_common_parent_group(std::vector const &items) +sp_item_list_common_parent_group(const SPItemRange &items) { if (items.empty()) { return NULL; } - SPObject *parent = items[0]->parent; + SPObject *parent = items.front()->parent; // Strictly speaking this CAN happen, if user selects from Inkscape::XML editor if (!dynamic_cast(parent)) { return NULL; } - for (std::vector::const_iterator item=items.begin();item!=items.end();++item) { - if((*item)==items[0])continue; + for (auto item=items.begin();item!=items.end();++item) { + if((*item)==items.front())continue; if ((*item)->parent != parent) { return NULL; } @@ -980,23 +978,9 @@ bool sp_item_repr_compare_position_bool(SPObject const *first, SPObject const *s ((SPItem*)second)->getRepr())<0; } -void -sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop) -{ - std::vector items(selection->items().begin(), selection->items().end()); - - if (items.empty()) { - selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise.")); - return; - } - - SPGroup const *group = sp_item_list_common_parent_group(items); - if (!group) { - selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); - return; - } - - Inkscape::XML::Node *grepr = const_cast(group->getRepr()); +void sp_selection_raise(ObjectSet* set) { + std::vector items(set->items().begin(), set->items().end()); + Inkscape::XML::Node *grepr = const_cast(items.front()->parent->getRepr()); /* Construct reverse-ordered list of selected children. */ std::vector rev(items); @@ -1027,55 +1011,61 @@ sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop) } } } - DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_RAISE, - //TRANSLATORS: "Raise" means "to raise an object" in the undo history - C_("Undo action", "Raise")); } -void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_raise_ui(Inkscape::Selection *selection, SPDesktop *desktop) { - SPDocument *document = selection->layers()->getDocument(); - - if (selection->isEmpty()) { - selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise to top.")); + if (selection->items().empty()) { + selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise.")); return; } - std::vector items(selection->items().begin(), selection->items().end()); - - SPGroup const *group = sp_item_list_common_parent_group(items); + SPGroup const *group = sp_item_list_common_parent_group(selection->items()); if (!group) { selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); return; } + sp_selection_raise(selection); + + DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_RAISE, + //TRANSLATORS: "Raise" means "to raise an object" in the undo history + C_("Undo action", "Raise")); +} - std::vector rl(selection->xmlNodes().begin(), selection->xmlNodes().end()); +void sp_selection_raise_to_top(ObjectSet* set) { + std::vector rl(set->xmlNodes().begin(), set->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_iterator l=rl.begin(); l!=rl.end();++l) { Inkscape::XML::Node *repr =(*l); repr->setPosition(-1); } - - DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT, - _("Raise to top")); } -void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_raise_to_top_ui(Inkscape::Selection *selection, SPDesktop *desktop) { - std::vector items(selection->items().begin(), selection->items().end()); - if (items.empty()) { - selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower.")); + SPDocument *document = selection->layers()->getDocument(); + + if (selection->isEmpty()) { + selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise to top.")); return; } - SPGroup const *group = sp_item_list_common_parent_group(items); + SPGroup const *group = sp_item_list_common_parent_group(selection->items()); if (!group) { selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); return; } - Inkscape::XML::Node *grepr = const_cast(group->getRepr()); + sp_selection_raise_to_top(selection); + + DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT, + _("Raise to top")); +} + +void sp_selection_lower(ObjectSet *set) { + std::vector items(set->items().begin(), set->items().end()); + Inkscape::XML::Node *grepr = const_cast(items.front()->parent->getRepr()); // Determine the common bbox of the selected items. Geom::OptRect selected = enclose_items(items); @@ -1110,37 +1100,37 @@ void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop) } } } - - DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_LOWER, - //TRANSLATORS: "Lower" means "to lower an object" in the undo history - C_("Undo action", "Lower")); } -void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_lower_ui(Inkscape::Selection *selection, SPDesktop *desktop) { - SPDocument *document = selection->layers()->getDocument(); - - if (selection->isEmpty()) { - selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower to bottom.")); + if (selection->items().empty()) { + selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower.")); return; } - std::vector items(selection->items().begin(), selection->items().end()); - - SPGroup const *group = sp_item_list_common_parent_group(items); + SPGroup const *group = sp_item_list_common_parent_group(selection->items()); if (!group) { selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); return; } - std::vector rl(selection->xmlNodes().begin(), selection->xmlNodes().end()); + sp_selection_lower(selection); + + DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_LOWER, + //TRANSLATORS: "Lower" means "to lower an object" in the undo history + C_("Undo action", "Lower")); +} + +void sp_selection_lower_to_bottom(ObjectSet *set) { + std::vector rl(set->xmlNodes().begin(), set->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_reverse_iterator l=rl.rbegin();l!=rl.rend();++l) { gint minpos; SPObject *pp; Inkscape::XML::Node *repr = (*l); - pp = document->getObjectByRepr(repr->parent()); + pp = set->desktop()->getDocument()->getObjectByRepr(repr->parent()); minpos = 0; g_assert(dynamic_cast(pp)); for (auto& pc: pp->children) { @@ -1151,8 +1141,24 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des } repr->setPosition(minpos); } +} + +void sp_selection_lower_to_bottom_ui(Inkscape::Selection *selection, SPDesktop *desktop) +{ + if (selection->isEmpty()) { + selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower to bottom.")); + return; + } + + SPGroup const *group = sp_item_list_common_parent_group(selection->items()); + if (!group) { + selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); + return; + } + + sp_selection_lower_to_bottom(selection); - DocumentUndo::done(document, SP_VERB_SELECTION_TO_BACK, + DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_TO_BACK, _("Lower to bottom")); } @@ -1478,7 +1484,7 @@ void sp_selection_to_layer(SPDesktop *dt, SPObject *moveto, bool suppressDone) } static bool -selection_contains_original(SPItem *item, Inkscape::Selection *selection) +selection_contains_original(SPItem *item, ObjectSet* set) { bool contains_original = false; @@ -1489,7 +1495,7 @@ selection_contains_original(SPItem *item, Inkscape::Selection *selection) { item_use = use->get_original(); use = dynamic_cast(item_use); - contains_original |= selection->includes(item_use); + contains_original |= set->includes(item_use); if (item_use == item_use_first) break; } @@ -1498,7 +1504,7 @@ selection_contains_original(SPItem *item, Inkscape::Selection *selection) // data is part of the selection SPTRef *tref = dynamic_cast(item); if (!contains_original && tref) { - contains_original = selection->includes(tref->getObjectReferredTo()); + contains_original = set->includes(tref->getObjectReferredTo()); } return contains_original; @@ -1506,14 +1512,14 @@ selection_contains_original(SPItem *item, Inkscape::Selection *selection) static bool -selection_contains_both_clone_and_original(Inkscape::Selection *selection) +selection_contains_both_clone_and_original(ObjectSet *set) { bool clone_with_original = false; - auto items = selection->items(); + auto items = set->items(); for (auto l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; if (item) { - clone_with_original |= selection_contains_original(item, selection); + clone_with_original |= selection_contains_original(item, set); if (clone_with_original) break; } @@ -1527,21 +1533,21 @@ value of set_i2d==false is only used by seltrans when it's dragging objects live that case, items are already in the new position, but the repr is in the old, and this function then simply updates the repr from item->transform. */ -void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine const &affine, bool set_i2d, bool compensate, bool adjust_transf_center) +void sp_selection_apply_affine(ObjectSet *set, Geom::Affine const &affine, bool set_i2d, bool compensate, bool adjust_transf_center) { - if (selection->isEmpty()) + if (set->isEmpty()) return; // For each perspective with a box in selection, check whether all boxes are selected and // unlink all non-selected boxes. Persp3D *persp; Persp3D *transf_persp; - std::list plist = selection->perspList(); + std::list plist = set->perspList(); for (std::list::iterator i = plist.begin(); i != plist.end(); ++i) { persp = (Persp3D *) (*i); - if (!persp3d_has_all_boxes_in_selection (persp, selection)) { - std::list selboxes = selection->box3DList(persp); + if (!persp3d_has_all_boxes_in_selection (persp, set)) { + std::list selboxes = set->box3DList(persp); // create a new perspective as a copy of the current one and link the selected boxes to it transf_persp = persp3d_create_xml_element (persp->document, persp->perspective_impl); @@ -1554,14 +1560,14 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons persp3d_apply_affine_transformation(transf_persp, affine); } - auto items = selection->items(); + auto items = set->items(); for (auto l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; if( dynamic_cast(item) ) { // An SVG element cannot have a transform. We could change 'x' and 'y' in response // to a translation... but leave that for another day. - selection->desktop()->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot transform an embedded SVG.")); + set->desktop()->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot transform an embedded SVG.")); break; } @@ -1575,17 +1581,17 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons #endif // we're moving both a clone and its original or any ancestor in clone chain? - bool transform_clone_with_original = selection_contains_original(item, selection); + bool transform_clone_with_original = selection_contains_original(item, set); // ...both a text-on-path and its path? bool transform_textpath_with_path = ((dynamic_cast(item) && item->firstChild() && dynamic_cast(item->firstChild())) - && selection->includes( sp_textpath_get_path_item(dynamic_cast(item->firstChild())) )); + && set->includes( sp_textpath_get_path_item(dynamic_cast(item->firstChild())) )); // ...both a flowtext and its frame? - bool transform_flowtext_with_frame = (dynamic_cast(item) && selection->includes( dynamic_cast(item)->get_frame(NULL))); // (only the first frame is checked so far) + bool transform_flowtext_with_frame = (dynamic_cast(item) && set->includes( dynamic_cast(item)->get_frame(NULL))); // (only the first frame is checked so far) // ...both an offset and its source? - bool transform_offset_with_source = (dynamic_cast(item) && dynamic_cast(item)->sourceHref) && selection->includes( sp_offset_get_source(dynamic_cast(item)) ); + bool transform_offset_with_source = (dynamic_cast(item) && dynamic_cast(item)->sourceHref) && set->includes( sp_offset_get_source(dynamic_cast(item)) ); // If we're moving a connector, we want to detach it // from shapes that aren't part of the selection, but @@ -1596,7 +1602,7 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons SPItem *attItem[2] = {0, 0}; path->connEndPair.getAttachedItems(attItem); for (int n = 0; n < 2; ++n) { - if (!selection->includes(attItem[n])) { + if (!set->includes(attItem[n])) { sp_conn_end_detach(item, n); } } @@ -1735,14 +1741,14 @@ void sp_selection_remove_transform(SPDesktop *desktop) } void -sp_selection_scale_absolute(Inkscape::Selection *selection, +sp_selection_scale_absolute(ObjectSet *set, double const x0, double const x1, double const y0, double const y1) { - if (selection->isEmpty()) + if (set->isEmpty()) return; - Geom::OptRect bbox = selection->visualBounds(); + Geom::OptRect bbox = set->visualBounds(); if ( !bbox ) { return; } @@ -1755,16 +1761,16 @@ sp_selection_scale_absolute(Inkscape::Selection *selection, Geom::Translate const o2n(x0, y0); Geom::Affine const final( p2o * scale * o2n ); - sp_selection_apply_affine(selection, final); + sp_selection_apply_affine(set, final); } -void sp_selection_scale_relative(Inkscape::Selection *selection, Geom::Point const &align, Geom::Scale const &scale) +void sp_selection_scale_relative(ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale) { - if (selection->isEmpty()) + if (set->isEmpty()) return; - Geom::OptRect bbox = selection->visualBounds(); + Geom::OptRect bbox = set->visualBounds(); if ( !bbox ) { return; @@ -1780,21 +1786,21 @@ void sp_selection_scale_relative(Inkscape::Selection *selection, Geom::Point con Geom::Translate const n2d(-align); Geom::Translate const d2n(align); Geom::Affine const final( n2d * scale * d2n ); - sp_selection_apply_affine(selection, final); + sp_selection_apply_affine(set, final); } void -sp_selection_rotate_relative(Inkscape::Selection *selection, Geom::Point const ¢er, gdouble const angle_degrees) +sp_selection_rotate_relative(ObjectSet *set, Geom::Point const ¢er, gdouble const angle_degrees) { Geom::Translate const d2n(center); Geom::Translate const n2d(-center); Geom::Rotate const rotate(Geom::Rotate::from_degrees(angle_degrees)); Geom::Affine const final( Geom::Affine(n2d) * rotate * d2n ); - sp_selection_apply_affine(selection, final); + sp_selection_apply_affine(set, final); } void -sp_selection_skew_relative(Inkscape::Selection *selection, Geom::Point const &align, double dx, double dy) +sp_selection_skew_relative(ObjectSet *set, Geom::Point const &align, double dx, double dy) { Geom::Translate const d2n(align); Geom::Translate const n2d(-align); @@ -1802,17 +1808,17 @@ sp_selection_skew_relative(Inkscape::Selection *selection, Geom::Point const &al dx, 1, 0, 0); Geom::Affine const final( n2d * skew * d2n ); - sp_selection_apply_affine(selection, final); + sp_selection_apply_affine(set, final); } -void sp_selection_move_relative(Inkscape::Selection *selection, Geom::Point const &move, bool compensate) +void sp_selection_move_relative(ObjectSet *set, Geom::Point const &move, bool compensate) { - sp_selection_apply_affine(selection, Geom::Affine(Geom::Translate(move)), true, compensate); + sp_selection_apply_affine(set, Geom::Affine(Geom::Translate(move)), true, compensate); } -void sp_selection_move_relative(Inkscape::Selection *selection, double dx, double dy) +void sp_selection_move_relative(ObjectSet *set, double dx, double dy) { - sp_selection_apply_affine(selection, Geom::Affine(Geom::Translate(dx, dy))); + sp_selection_apply_affine(set, Geom::Affine(Geom::Translate(dx, dy))); } /** @@ -2244,8 +2250,7 @@ sp_selection_scale(Inkscape::Selection *selection, gdouble grow) void sp_selection_scale_screen(Inkscape::Selection *selection, gdouble grow_pixels) { - sp_selection_scale(selection, - grow_pixels / selection->desktop()->current_zoom()); + sp_selection_scale(selection, grow_pixels / selection->desktop()->current_zoom()); } void @@ -3471,13 +3476,13 @@ void sp_selection_untile(SPDesktop *desktop) } } -void sp_selection_get_export_hints(Inkscape::Selection *selection, Glib::ustring &filename, float *xdpi, float *ydpi) +void sp_selection_get_export_hints(ObjectSet *set, Glib::ustring &filename, float *xdpi, float *ydpi) { - if (selection->isEmpty()) { + if (set->isEmpty()) { return; } - auto reprlst = selection->xmlNodes(); + auto reprlst = set->xmlNodes(); bool filename_search = TRUE; bool xdpi_search = TRUE; bool ydpi_search = TRUE; @@ -3947,18 +3952,13 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ if (grouping == PREFS_MASKOBJECT_GROUPING_ALL) { // group all those objects into one group // and apply mask to that - Inkscape::XML::Node *group = xml_doc->createElement("svg:g"); + ObjectSet* set = new ObjectSet(selection->desktop()); + set->add(apply_to_items.begin(), apply_to_items.end()); - // make a note we should ungroup this when unsetting mask - group->setAttribute("inkscape:groupmode", "maskhelper"); - - std::vector reprs_to_group; - for (std::vector::const_iterator i = apply_to_items.begin(); i != apply_to_items.end(); ++i) { - reprs_to_group.push_back(static_cast(*i)->getRepr()); - } items_to_select.clear(); - sp_selection_group_impl(reprs_to_group, group, xml_doc, doc); + Inkscape::XML::Node *group = sp_selection_group(set); + group->setAttribute("inkscape:groupmode", "maskhelper"); // apply clip/mask only to newly created group apply_to_items.clear(); @@ -3966,6 +3966,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ items_to_select.push_back((SPItem*)(doc->getObjectByRepr(group))); + delete set; Inkscape::GC::release(group); } if (grouping == PREFS_MASKOBJECT_GROUPING_SEPARATE) { diff --git a/src/selection-chemistry.h b/src/selection-chemistry.h index 82b91c617..cfae84eef 100644 --- a/src/selection-chemistry.h +++ b/src/selection-chemistry.h @@ -26,6 +26,7 @@ class SPDesktop; namespace Inkscape { class Selection; +class ObjectSet; namespace LivePathEffect { class PathParam; @@ -74,14 +75,19 @@ void sp_selection_unsymbol(SPDesktop *desktop); void sp_selection_tile(SPDesktop *desktop, bool apply = true); void sp_selection_untile(SPDesktop *desktop); -void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_group_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_ungroup_ui(Inkscape::Selection *selection, SPDesktop *desktop); void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_raise(Inkscape::ObjectSet* set); +void sp_selection_raise_to_top(Inkscape::ObjectSet* set); +void sp_selection_lower(Inkscape::ObjectSet *set); +void sp_selection_lower_to_bottom(Inkscape::ObjectSet *set); + +void sp_selection_raise_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_raise_to_top_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_lower_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_lower_to_bottom_ui(Inkscape::Selection *selection, SPDesktop *desktop); SPCSSAttr *take_style_from_item (SPObject *object); @@ -103,14 +109,14 @@ void sp_selection_to_next_layer( SPDesktop *desktop, bool suppressDone = false ) void sp_selection_to_prev_layer( SPDesktop *desktop, bool suppressDone = false ); void sp_selection_to_layer( SPDesktop *desktop, SPObject *layer, bool suppressDone = false ); -void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine const &affine, bool set_i2d = true, bool compensate = true, bool adjust_transf_center = true); +void sp_selection_apply_affine(Inkscape::ObjectSet *selection, Geom::Affine const &affine, bool set_i2d = true, bool compensate = true, bool adjust_transf_center = true); void sp_selection_remove_transform (SPDesktop *desktop); -void sp_selection_scale_absolute (Inkscape::Selection *selection, double x0, double x1, double y0, double y1); -void sp_selection_scale_relative(Inkscape::Selection *selection, Geom::Point const &align, Geom::Scale const &scale); -void sp_selection_rotate_relative (Inkscape::Selection *selection, Geom::Point const ¢er, double angle); -void sp_selection_skew_relative (Inkscape::Selection *selection, Geom::Point const &align, double dx, double dy); -void sp_selection_move_relative (Inkscape::Selection *selection, Geom::Point const &move, bool compensate = true); -void sp_selection_move_relative (Inkscape::Selection *selection, double dx, double dy); +void sp_selection_scale_absolute (Inkscape::ObjectSet *set, double x0, double x1, double y0, double y1); +void sp_selection_scale_relative(Inkscape::ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale); +void sp_selection_rotate_relative (Inkscape::ObjectSet *set, Geom::Point const ¢er, double angle); +void sp_selection_skew_relative (Inkscape::ObjectSet *set, Geom::Point const &align, double dx, double dy); +void sp_selection_move_relative (Inkscape::ObjectSet *set, Geom::Point const &move, bool compensate = true); +void sp_selection_move_relative (Inkscape::ObjectSet *set, double dx, double dy); void sp_selection_rotate_90 (SPDesktop *desktop, bool ccw); void sp_selection_rotate (Inkscape::Selection *selection, double angle); @@ -151,7 +157,7 @@ void scroll_to_show_item(SPDesktop *desktop, SPItem *item); void sp_undo (SPDesktop *desktop, SPDocument *doc); void sp_redo (SPDesktop *desktop, SPDocument *doc); -void sp_selection_get_export_hints (Inkscape::Selection *selection, Glib::ustring &filename, float *xdpi, float *ydpi); +void sp_selection_get_export_hints (Inkscape::ObjectSet* set, Glib::ustring &filename, float *xdpi, float *ydpi); void sp_document_get_export_hints (SPDocument * doc, Glib::ustring &filename, float *xdpi, float *ydpi); void sp_selection_create_bitmap_copy (SPDesktop *desktop); diff --git a/src/selection.cpp b/src/selection.cpp index 09eaf6c0e..bdd4f0dc7 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -27,15 +27,16 @@ #include "sp-shape.h" #include "sp-path.h" +#include "desktop.h" #include "document.h" #define SP_SELECTION_UPDATE_PRIORITY (G_PRIORITY_HIGH_IDLE + 1) namespace Inkscape { -Selection::Selection(LayerModel *layers, SPDesktop *desktop) : +Selection::Selection(LayerModel *layers, SPDesktop *desktop): + ObjectSet(desktop), _layers(layers), - _desktop(desktop), _selection_context(NULL), _flags(0), _idle(0) diff --git a/src/selection.h b/src/selection.h index 7027a388f..4ea70c38d 100644 --- a/src/selection.h +++ b/src/selection.h @@ -23,11 +23,9 @@ #include "inkgc/gc-managed.h" #include "gc-finalized.h" #include "gc-anchored.h" -#include "inkgc/gc-soft-ptr.h" #include "sp-item.h" #include "object-set.h" -class SPDesktop; class SPItem; namespace Inkscape { @@ -80,12 +78,7 @@ public: */ LayerModel *layers() { return _layers; } - /** - * Returns the desktop the selection is bound to - * - * @return the desktop the selection is bound to, or NULL if in console mode - */ - SPDesktop *desktop() { return _desktop; } + /** * Returns active layer for selection (currentLayer or its parent). @@ -228,7 +221,6 @@ private: void _releaseContext(SPObject *obj); LayerModel *_layers; - GC::soft_ptr _desktop; SPObject* _selection_context; unsigned int _flags; unsigned int _idle; diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index bcf055654..d19526105 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -1916,7 +1916,7 @@ void ContextMenu::MakeGroupMenu(void) void ContextMenu::ActivateGroup(void) { - sp_selection_group(_desktop->selection, _desktop); + sp_selection_group_ui(_desktop->selection, _desktop); } void ContextMenu::ActivateUngroup(void) diff --git a/src/verbs.cpp b/src/verbs.cpp index 299cfe8e7..8255ea1ea 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -1133,22 +1133,22 @@ void SelectionVerb::perform(SPAction *action, void *data) sp_selected_path_slice(selection, dt); break; case SP_VERB_SELECTION_TO_FRONT: - sp_selection_raise_to_top(selection, dt); + sp_selection_raise_to_top_ui(selection, dt); break; case SP_VERB_SELECTION_TO_BACK: - sp_selection_lower_to_bottom(selection, dt); + sp_selection_lower_to_bottom_ui(selection, dt); break; case SP_VERB_SELECTION_RAISE: - sp_selection_raise(selection, dt); + sp_selection_raise_ui(selection, dt); break; case SP_VERB_SELECTION_LOWER: - sp_selection_lower(selection, dt); + sp_selection_lower_ui(selection, dt); break; case SP_VERB_SELECTION_GROUP: - sp_selection_group(selection, dt); + sp_selection_group_ui(selection, dt); break; case SP_VERB_SELECTION_UNGROUP: - sp_selection_ungroup(selection, dt); + sp_selection_ungroup_ui(selection, dt); break; case SP_VERB_SELECTION_UNGROUP_POP_SELECTION: sp_selection_ungroup_pop_selection(selection, dt); -- cgit v1.2.3 From a227e8d45e7eaa6bf25d8ab65fbd404bc4597306 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 20 Jul 2016 13:45:05 +0200 Subject: Changed signatures of boolean functions (bzr r14954.1.24) --- src/object-set.h | 1 + src/splivarot.cpp | 170 +++++++++++++++++++++++-------------- src/splivarot.h | 10 ++- src/ui/tools/calligraphic-tool.cpp | 4 +- src/ui/tools/eraser-tool.cpp | 6 +- src/ui/tools/flood-tool.cpp | 2 +- src/ui/tools/spray-tool.cpp | 2 +- 7 files changed, 121 insertions(+), 74 deletions(-) (limited to 'src') diff --git a/src/object-set.h b/src/object-set.h index a0bca7889..c7f1921cf 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -102,6 +102,7 @@ public: typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())) XMLNodeRange; ObjectSet(SPDesktop* desktop): _desktop(desktop) {}; + ObjectSet(): _desktop(nullptr) {}; virtual ~ObjectSet(); /** diff --git a/src/splivarot.cpp b/src/splivarot.cpp index a4c4ac6cd..54b9bff2c 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -13,7 +13,6 @@ */ #ifdef HAVE_CONFIG_H -# include #endif #include @@ -23,14 +22,11 @@ #include "xml/repr.h" #include "svg/svg.h" #include "sp-path.h" -#include "sp-shape.h" #include "sp-image.h" #include "sp-marker.h" -#include "enums.h" #include "sp-text.h" #include "sp-flowtext.h" #include "text-editing.h" -#include "sp-item-group.h" #include "style.h" #include "document.h" #include "document-undo.h" @@ -38,15 +34,9 @@ #include "message-stack.h" #include "selection.h" -#include "desktop.h" -#include "display/canvas-bpath.h" -#include "display/curve.h" #include -#include "preferences.h" -#include "xml/repr.h" #include "xml/repr-sorting.h" -#include <2geom/pathvector.h> #include <2geom/svg-path-writer.h> #include "helper/geom.h" @@ -57,65 +47,96 @@ #include "verbs.h" #include "2geom/svg-path-parser.h" // to get from SVG on boolean to Geom::Path +enum BoolOpErrors { + DONE, + DONE_NO_PATH, + DONE_NO_ACTION, + ERR_TOO_LESS_PATHS_1, + ERR_TOO_LESS_PATHS_2, + ERR_NO_PATHS, + ERR_Z_ORDER +}; + using Inkscape::DocumentUndo; bool Ancetre(Inkscape::XML::Node *a, Inkscape::XML::Node *who); -void sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb=SP_VERB_NONE, const Glib::ustring description=""); +void sp_selected_path_boolop_ui(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, + const unsigned int verb = SP_VERB_NONE, const Glib::ustring description = ""); +BoolOpErrors sp_selected_path_boolop(Inkscape::ObjectSet *set, bool_op bop); void sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset); void sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updating); void sp_selected_path_union(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_union, SP_VERB_SELECTION_UNION, _("Union")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_union, SP_VERB_SELECTION_UNION, _("Union")); } void -sp_selected_path_union_skip_undo(Inkscape::Selection *selection, SPDesktop *desktop) +sp_selected_path_union_skip_undo(Inkscape::ObjectSet *set) { - sp_selected_path_boolop(selection, desktop, bool_op_union, SP_VERB_NONE, _("Union")); + sp_selected_path_boolop(set, bool_op_union); } void sp_selected_path_intersect(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_inters, SP_VERB_SELECTION_INTERSECT, _("Intersection")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_inters, SP_VERB_SELECTION_INTERSECT, _("Intersection")); +} + +void +sp_selected_path_intersect_skip_undo(Inkscape::ObjectSet *set) +{ + sp_selected_path_boolop(set, bool_op_inters); } void sp_selected_path_diff(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_diff, SP_VERB_SELECTION_DIFF, _("Difference")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_diff, SP_VERB_SELECTION_DIFF, _("Difference")); } void -sp_selected_path_diff_skip_undo(Inkscape::Selection *selection, SPDesktop *desktop) +sp_selected_path_diff_skip_undo(Inkscape::ObjectSet *set) { - sp_selected_path_boolop(selection, desktop, bool_op_diff, SP_VERB_NONE, _("Difference")); + sp_selected_path_boolop(set, bool_op_diff); } void sp_selected_path_symdiff(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_symdiff, SP_VERB_SELECTION_SYMDIFF, _("Exclusion")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_symdiff, SP_VERB_SELECTION_SYMDIFF, _("Exclusion")); } + +void +sp_selected_path_symdiff_skip_undo(Inkscape::ObjectSet *set) +{ + sp_selected_path_boolop(set, bool_op_symdiff); +} + void sp_selected_path_cut(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_cut, SP_VERB_SELECTION_CUT, _("Division")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_cut, SP_VERB_SELECTION_CUT, _("Division")); } void -sp_selected_path_cut_skip_undo(Inkscape::Selection *selection, SPDesktop *desktop) +sp_selected_path_cut_skip_undo(Inkscape::ObjectSet *set) { - sp_selected_path_boolop(selection, desktop, bool_op_cut, SP_VERB_NONE, _("Division")); + sp_selected_path_boolop(set, bool_op_cut); } void sp_selected_path_slice(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_slice, SP_VERB_SELECTION_SLICE, _("Cut path")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_slice, SP_VERB_SELECTION_SLICE, _("Cut path")); +} + +void +sp_selected_path_slice_skip_undo(Inkscape::ObjectSet *set) +{ + sp_selected_path_boolop(set, bool_op_slice); } // helper for printing error messages, regardless of whether we have a GUI or not @@ -331,20 +352,17 @@ Geom::PathVector pathliv_to_pathvector(Path *pathliv){ // boolean operations on the desktop // take the source paths from the file, do the operation, delete the originals and add the results -void -sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb, const Glib::ustring description) +BoolOpErrors sp_selected_path_boolop(Inkscape::ObjectSet * set, bool_op bop) { - SPDocument *doc = selection->layers()->getDocument(); - std::vector il(selection->items().begin(), selection->items().end()); - + SPDocument *doc = set->desktop()->getDocument(); + std::vector il(set->items().begin(), set->items().end()); + // allow union on a single object for the purpose of removing self overlapse (svn log, revision 13334) - if ( (il.size() < 2) && (bop != bool_op_union)) { - boolop_display_error_message(desktop, _("Select at least 2 paths to perform a boolean operation.")); - return; + if (il.size() < 2 && bop != bool_op_union) { + return ERR_TOO_LESS_PATHS_2; } - else if ( il.size() < 1 ) { - boolop_display_error_message(desktop, _("Select at least 1 path to perform a boolean union.")); - return; + else if (il.size() < 1) { + return ERR_TOO_LESS_PATHS_1; } g_assert(!il.empty()); @@ -360,8 +378,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool Inkscape::XML::Node *b = il.back()->getRepr(); if (a == NULL || b == NULL) { - boolop_display_error_message(desktop, _("Unable to determine the z-order of the objects selected for difference, XOR, division, or path cut.")); - return; + return ERR_Z_ORDER; } if (Ancetre(a, b)) { @@ -375,8 +392,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool // find their lowest common ancestor Inkscape::XML::Node *parent = LCA(a, b); if (parent == NULL) { - boolop_display_error_message(desktop, _("Unable to determine the z-order of the objects selected for difference, XOR, division, or path cut.")); - return; + return ERR_Z_ORDER; } // find the children of the LCA that lead from it to the a and b @@ -405,8 +421,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool SPItem *item = *l; if (!SP_IS_SHAPE(item) && !SP_IS_TEXT(item) && !SP_IS_FLOWTEXT(item)) { - boolop_display_error_message(desktop, _("One of the objects is not a path, cannot perform boolean operation.")); - return; + return ERR_NO_PATHS; } } @@ -439,7 +454,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool if (originaux[curOrig] == NULL || originaux[curOrig]->descr_cmd.size() <= 1) { for (int i = curOrig; i >= 0; i--) delete originaux[i]; - return; + return DONE_NO_ACTION; } curOrig++; } @@ -500,18 +515,18 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool bool zeroA = theShapeA->numberOfEdges() == 0; bool zeroB = theShapeB->numberOfEdges() == 0; if (zeroA || zeroB) { - // We might need to do a swap. Apply the above rules depending on operation type. - bool resultIsB = ((bop == bool_op_union || bop == bool_op_symdiff) && zeroA) - || ((bop == bool_op_inters) && zeroB) - || (bop == bool_op_diff); + // We might need to do a swap. Apply the above rules depending on operation type. + bool resultIsB = ((bop == bool_op_union || bop == bool_op_symdiff) && zeroA) + || ((bop == bool_op_inters) && zeroB) + || (bop == bool_op_diff); if (resultIsB) { - // Swap A and B to use B as the result + // Swap A and B to use B as the result Shape *swap = theShapeB; theShapeB = theShapeA; theShapeA = swap; } } else { - // Just do the Boolean operation as usual + // Just do the Boolean operation as usual // les elements arrivent en ordre inverse dans la liste theShape->Booleen(theShapeB, theShapeA, bop); Shape *swap = theShape; @@ -672,24 +687,23 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ (*l)->deleteObject(); } - DocumentUndo::done(doc, SP_VERB_NONE, description); - selection->clear(); + set->clear(); delete res; - return; + return DONE_NO_PATH; } // get the source path object SPObject *source; if ( bop == bool_op_diff || bop == bool_op_cut || bop == bool_op_slice ) { if (reverseOrderForOp) { - source = il[0]; + source = il[0]; } else { - source = il.back(); + source = il.back(); } } else { // find out the bottom object - std::vector sorted(selection->xmlNodes().begin(), selection->xmlNodes().end()); + std::vector sorted(set->xmlNodes().begin(), set->xmlNodes().end()); sort(sorted.begin(),sorted.end(),sp_repr_compare_position_bool); @@ -717,7 +731,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool gchar *title = source->title(); gchar *desc = source->desc(); // remove source paths - selection->clear(); + set->clear(); for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ // if this is the bottommost object, if (!strcmp(reinterpret_cast(*l)->getRepr()->attribute("id"), id)) { @@ -796,7 +810,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool // move to the saved position repr->setPosition(pos > 0 ? pos : 0); - selection->add(repr); + set->add(doc->getObjectByRepr(repr)); Inkscape::GC::release(repr); delete resPath[i]; @@ -824,14 +838,14 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool repr->setAttribute("id", id); parent->appendChild(repr); if (title) { - doc->getObjectByRepr(repr)->setTitle(title); - } + doc->getObjectByRepr(repr)->setTitle(title); + } if (desc) { - doc->getObjectByRepr(repr)->setDesc(desc); + doc->getObjectByRepr(repr)->setDesc(desc); } - repr->setPosition(pos > 0 ? pos : 0); + repr->setPosition(pos > 0 ? pos : 0); - selection->add(repr); + set->add(doc->getObjectByRepr(repr)); Inkscape::GC::release(repr); } @@ -839,11 +853,39 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool if (title) g_free(title); if (desc) g_free(desc); - if (verb != SP_VERB_NONE) { - DocumentUndo::done(doc, verb, description); - } - delete res; + + return DONE; +} + +void sp_selected_path_boolop_ui(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb, + const Glib::ustring description) +{ + SPDocument *doc = selection->desktop()->getDocument(); + BoolOpErrors returnCode = sp_selected_path_boolop(selection, bop); + switch(returnCode) { + case ERR_TOO_LESS_PATHS_1: + boolop_display_error_message(desktop, _("Select at least 1 path to perform a boolean union.")); + return; + case ERR_TOO_LESS_PATHS_2: + boolop_display_error_message(desktop, _("Select at least 2 paths to perform a boolean operation.")); + return; + case ERR_NO_PATHS: + boolop_display_error_message(desktop, _("One of the objects is not a path, cannot perform boolean operation.")); + return; + case ERR_Z_ORDER: + boolop_display_error_message(desktop, _("Unable to determine the z-order of the objects selected for difference, XOR, division, or path cut.")); + return; + case DONE_NO_PATH: + DocumentUndo::done(doc, SP_VERB_NONE, description); + return; + case DONE: + DocumentUndo::done(doc, verb, description); + return; + case DONE_NO_ACTION: + default: + return; + } } static diff --git a/src/splivarot.h b/src/splivarot.h index 421c9c4b8..9b07a5a71 100644 --- a/src/splivarot.h +++ b/src/splivarot.h @@ -17,6 +17,7 @@ class SPItem; namespace Inkscape { class Selection; + class ObjectSet; } // boolean operations @@ -27,14 +28,17 @@ namespace Inkscape { // command-line mode, i.e. without a desktop. If a desktop is not // provided (desktop == NULL), error messages will be shown on stderr. void sp_selected_path_union (Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selected_path_union_skip_undo (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_union_skip_undo (Inkscape::ObjectSet *set); void sp_selected_path_intersect (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_intersect_skip_undo (Inkscape::ObjectSet *set); void sp_selected_path_diff (Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selected_path_diff_skip_undo (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_diff_skip_undo (Inkscape::ObjectSet *set); void sp_selected_path_symdiff (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_symdiff_skip_undo (Inkscape::ObjectSet *set); void sp_selected_path_cut (Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selected_path_cut_skip_undo (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_cut_skip_undo (Inkscape::ObjectSet *set); void sp_selected_path_slice (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_slice_skip_undo (Inkscape::ObjectSet *set); // offset/inset of a curve // takes the fill-rule in consideration diff --git a/src/ui/tools/calligraphic-tool.cpp b/src/ui/tools/calligraphic-tool.cpp index 28195eb75..12dcedd21 100644 --- a/src/ui/tools/calligraphic-tool.cpp +++ b/src/ui/tools/calligraphic-tool.cpp @@ -930,10 +930,10 @@ void CalligraphicTool::set_to_accumulated(bool unionize, bool subtract) { if (unionize) { desktop->getSelection()->add(this->repr); - sp_selected_path_union_skip_undo(desktop->getSelection(), desktop); + sp_selected_path_union_skip_undo(desktop->getSelection()); } else if (subtract) { desktop->getSelection()->add(this->repr); - sp_selected_path_diff_skip_undo(desktop->getSelection(), desktop); + sp_selected_path_diff_skip_undo(desktop->getSelection()); } else { if (this->keep_selected) { desktop->getSelection()->set(this->repr); diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index 534123e90..8ed75fbdb 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -718,7 +718,7 @@ void EraserTool::set_to_accumulated() { Inkscape::GC::release(dup); // parent takes over selection->set(dup); if (!this->nowidth) { - sp_selected_path_union_skip_undo(selection, desktop); + sp_selected_path_union_skip_undo(selection); } selection->add(item); if(item->style->fill_rule.value == SP_WIND_RULE_EVENODD){ @@ -729,9 +729,9 @@ void EraserTool::set_to_accumulated() { css = 0; } if (this->nowidth) { - sp_selected_path_cut_skip_undo(selection, desktop); + sp_selected_path_cut_skip_undo(selection); } else { - sp_selected_path_diff_skip_undo(selection, desktop); + sp_selected_path_diff_skip_undo(selection); } workDone = true; // TODO set this only if something was cut. bool break_apart = prefs->getBool("/tools/eraser/break_apart", false); diff --git a/src/ui/tools/flood-tool.cpp b/src/ui/tools/flood-tool.cpp index 748c82717..b5a2fd871 100644 --- a/src/ui/tools/flood-tool.cpp +++ b/src/ui/tools/flood-tool.cpp @@ -456,7 +456,7 @@ static void do_trace(bitmap_coords_info bci, guchar *trace_px, SPDesktop *deskto ngettext("Area filled, path with %d node created and unioned with selection.","Area filled, path with %d nodes created and unioned with selection.", SP_PATH(reprobj)->nodesInPath()), SP_PATH(reprobj)->nodesInPath() ); selection->add(reprobj); - sp_selected_path_union_skip_undo(desktop->getSelection(), desktop); + sp_selected_path_union_skip_undo(desktop->getSelection()); } else { desktop->messageStack()->flashF( Inkscape::WARNING_MESSAGE, ngettext("Area filled, path with %d node created.","Area filled, path with %d nodes created.", diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp index 5d804a9bd..a95e5aa96 100644 --- a/src/ui/tools/spray-tool.cpp +++ b/src/ui/tools/spray-tool.cpp @@ -1050,7 +1050,7 @@ static bool sp_spray_recursive(SPDesktop *desktop, if (unionResult) { // No need to add the very first item (initialized with NULL). selection->add(unionResult); } - sp_selected_path_union_skip_undo(selection, selection->desktop()); + sp_selected_path_union_skip_undo(selection); selection->add(parent_item); Inkscape::GC::release(copy); did = true; -- cgit v1.2.3 From d31923a399f3c7cde85aae8406191e37ad877eb7 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Fri, 22 Jul 2016 11:32:35 +0200 Subject: Improved spray tool, changed selection to object set (bzr r14954.1.25) --- src/object-set.h | 1 + src/ui/tools/spray-tool.cpp | 54 +++++++++++++++++++++------------------------ src/ui/tools/spray-tool.h | 9 +++++++- 3 files changed, 34 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/object-set.h b/src/object-set.h index c7f1921cf..b4178bd37 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -121,6 +121,7 @@ public: for(auto it = from; it != to; ++it) { _add(*it); } + _emitSignals(); } /** diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp index a95e5aa96..49ff50428 100644 --- a/src/ui/tools/spray-tool.cpp +++ b/src/ui/tools/spray-tool.cpp @@ -13,6 +13,7 @@ * Jon A. Cruz * Abhishek Sharma * Jabiertxo Arraiza + * Adrian Boguszewski * * Copyright (C) 2009 authors * @@ -196,6 +197,7 @@ SprayTool::SprayTool() } SprayTool::~SprayTool() { + object_set.clear(); this->enableGrDrag(false); this->style_set_connection.disconnect(); @@ -862,7 +864,7 @@ static bool fit_item(SPDesktop *desktop, } static bool sp_spray_recursive(SPDesktop *desktop, - Inkscape::Selection *selection, + Inkscape::ObjectSet *set, SPItem *item, Geom::Point p, Geom::Point /*vector*/, @@ -907,7 +909,7 @@ static bool sp_spray_recursive(SPDesktop *desktop, if (box) { // convert 3D boxes to ordinary groups before spraying their shapes item = box3d_convert_to_group(box); - selection->add(item); + set->add(item); } } @@ -996,23 +998,11 @@ static bool sp_spray_recursive(SPDesktop *desktop, } #ifdef ENABLE_SPRAY_MODE_SINGLE_PATH } else if (mode == SPRAY_MODE_SINGLE_PATH) { + long setSize = boost::distance(set->items()); + SPItem *parent_item = setSize > 0 ? set->items().front() : nullptr; // Initial object + SPItem *unionResult = setSize > 1 ? *(++set->items().begin()) : nullptr; // Previous union + SPItem *item_copied = nullptr; // Projected object - SPItem *parent_item = NULL; // Initial object - SPItem *item_copied = NULL; // Projected object - SPItem *unionResult = NULL; // Previous union - - int i=1; - auto items= selection->items(); - for(auto it=items.begin();it!=items.end(); ++it){ - SPItem *item1 = *it; - if (i == 1) { - parent_item = item1; - } - if (i == 2) { - unionResult = item1; - } - i++; - } if (parent_item) { SPDocument *doc = parent_item->document; Inkscape::XML::Document* xml_doc = doc->getReprDoc(); @@ -1045,13 +1035,13 @@ static bool sp_spray_recursive(SPDesktop *desktop, sp_item_move_rel(item_copied, Geom::Translate(move[Geom::X], -move[Geom::Y])); // Union and duplication - selection->clear(); - selection->add(item_copied); + set->clear(); + set->add(item_copied); if (unionResult) { // No need to add the very first item (initialized with NULL). - selection->add(unionResult); + set->add(unionResult); } - sp_selected_path_union_skip_undo(selection); - selection->add(parent_item); + sp_selected_path_union_skip_undo(set); + set->add(parent_item); Inkscape::GC::release(copy); did = true; } @@ -1146,9 +1136,8 @@ static bool sp_spray_recursive(SPDesktop *desktop, static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point p, Geom::Point vector, bool reverse) { SPDesktop *desktop = tc->desktop; - Inkscape::Selection *selection = desktop->getSelection(); - - if (selection->isEmpty()) { + Inkscape::ObjectSet *set = tc->objectSet(); + if (set->isEmpty()) { return false; } @@ -1170,7 +1159,7 @@ static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point double move_standard_deviation = get_move_standard_deviation(tc); { - std::vector const items(selection->items().begin(), selection->items().end()); + std::vector const items(set->items().begin(), set->items().end()); for(std::vector::const_iterator i=items.begin();i!=items.end(); ++i){ SPItem *item = *i; @@ -1182,7 +1171,7 @@ static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point SPItem *item = *i; g_assert(item != NULL); if (sp_spray_recursive(desktop - , selection + , set , item , p, vector , tc->mode @@ -1276,6 +1265,11 @@ bool SprayTool::root_handler(GdkEvent* event) { this->is_dilating = true; this->has_dilated = false; + object_set = *desktop->getSelection(); + if (mode == SPRAY_MODE_SINGLE_PATH) { + desktop->getSelection()->clear(); + } + if(this->is_dilating && event->button.button == 1 && !this->space_panning) { sp_spray_dilate(this, motion_w, desktop->dt2doc(motion_dt), Geom::Point(0,0), MOD__SHIFT(event)); } @@ -1299,7 +1293,7 @@ bool SprayTool::root_handler(GdkEvent* event) { guint num = 0; if (!desktop->selection->isEmpty()) { - num = boost::distance(desktop->selection->items() ); + num = (guint) boost::distance(desktop->selection->items()); } if (num == 0) { this->message_context->flash(Inkscape::ERROR_MESSAGE, _("Nothing selected! Select objects to spray.")); @@ -1384,6 +1378,8 @@ bool SprayTool::root_handler(GdkEvent* event) { SP_VERB_CONTEXT_SPRAY, _("Spray with clones")); break; case SPRAY_MODE_SINGLE_PATH: + sp_selected_path_union_skip_undo(objectSet()); + desktop->getSelection()->add(object_set.objects().begin(), object_set.objects().end()); DocumentUndo::done(this->desktop->getDocument(), SP_VERB_CONTEXT_SPRAY, _("Spray in single path")); break; diff --git a/src/ui/tools/spray-tool.h b/src/ui/tools/spray-tool.h index c81110b37..d5504d565 100644 --- a/src/ui/tools/spray-tool.h +++ b/src/ui/tools/spray-tool.h @@ -13,6 +13,7 @@ * Vincent MONTAGNE * Pierre BARBRY-BLOT * Jabiertxo ARRAIZA + * Adrian Boguszewski * * Copyright (C) 2009 authors * @@ -120,8 +121,14 @@ public: virtual const std::string& getPrefsPath(); - void update_cursor(bool /*with_shift*/); + + ObjectSet* objectSet() { + return &object_set; + } + +private: + ObjectSet object_set; }; } -- cgit v1.2.3 From 40136abc93171fd163a78472cdeaf5d875acefda Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sun, 24 Jul 2016 22:27:21 -0700 Subject: Revert the canvas widget changes, which cause performance regressions on GTK2 on some platforms. (bzr r15023.3.1) --- src/desktop.cpp | 19 ++- src/desktop.h | 1 + src/display/sp-canvas.cpp | 376 ++++++++++++++++++++++++---------------------- src/display/sp-canvas.h | 33 ++-- 4 files changed, 229 insertions(+), 200 deletions(-) (limited to 'src') diff --git a/src/desktop.cpp b/src/desktop.cpp index d482d0d7f..331ab3351 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -111,6 +111,7 @@ SPDesktop::SPDesktop() : sketch( NULL ), controls( NULL ), tempgroup ( NULL ), + table( NULL ), page( NULL ), page_border( NULL ), current( NULL ), @@ -210,7 +211,11 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid g_signal_connect (G_OBJECT (main), "event", G_CALLBACK (sp_desktop_root_handler), this); /* This is the background the page sits on. */ - canvas->setBackgroundColor(0xffffff00); + table = sp_canvas_item_new (main, SP_TYPE_CTRLRECT, NULL); + SP_CTRLRECT(table)->setRectangle(Geom::Rect(Geom::Point(-80000, -80000), Geom::Point(80000, 80000))); + SP_CTRLRECT(table)->setColor(0x00000000, true, 0x00000000); + SP_CTRLRECT(table)->setCheckerboard( false ); + sp_canvas_item_move_to_z (table, 0); page = sp_canvas_item_new (main, SP_TYPE_CTRLRECT, NULL); ((CtrlRect *) page)->setColor(0x00000000, FALSE, 0x00000000); @@ -1728,11 +1733,17 @@ static void _namedview_modified (SPObject *obj, guint flags, SPDesktop *desktop) SPNamedView *nv=SP_NAMEDVIEW(obj); if (flags & SP_OBJECT_MODIFIED_FLAG) { + + /* Set page background */ + sp_canvas_item_show (desktop->table); if (nv->pagecheckerboard) { - desktop->canvas->setBackgroundCheckerboard(); + ((CtrlRect *) desktop->table)->setCheckerboard( true ); + ((CtrlRect *) desktop->table)->setColor(0x00000000, true, nv->pagecolor ); // | 0xff); } else { - desktop->canvas->setBackgroundColor(nv->pagecolor); + ((CtrlRect *) desktop->table)->setCheckerboard( false ); + ((CtrlRect *) desktop->table)->setColor(0x00000000, true, nv->pagecolor | 0xff); } + sp_canvas_item_move_to_z (desktop->table, 0); /* Show/hide page border */ if (nv->showborder) { @@ -1745,7 +1756,7 @@ static void _namedview_modified (SPObject *obj, guint flags, SPDesktop *desktop) } // place in the z-order stack if (nv->borderlayer == SP_BORDER_LAYER_BOTTOM) { - sp_canvas_item_move_to_z (desktop->page_border, 1); + sp_canvas_item_move_to_z (desktop->page_border, 2); } else { int order = sp_canvas_item_order (desktop->page_border); int morder = sp_canvas_item_order (desktop->drawing); diff --git a/src/desktop.h b/src/desktop.h index 3652d4a97..f1444ba7b 100644 --- a/src/desktop.h +++ b/src/desktop.h @@ -174,6 +174,7 @@ public: SPCanvasGroup *sketch; SPCanvasGroup *controls; SPCanvasGroup *tempgroup; ///< contains temporary canvas items + SPCanvasItem *table; ///< outside-of-page background SPCanvasItem *page; ///< page background SPCanvasItem *page_border; ///< page border SPCSSAttr *current; ///< current style diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index 7d76fa043..df84e379c 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -8,11 +8,9 @@ * fred * bbyak * Jon A. Cruz - * Krzysztof KosiÅ„ski * * Copyright (C) 1998 The Free Software Foundation * Copyright (C) 2002-2006 authors - * Copyright (C) 2016 Google Inc. * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -27,7 +25,6 @@ #include "helper/sp-marshal.h" #include <2geom/rect.h> #include <2geom/affine.h> -#include "display/cairo-utils.h" #include "display/sp-canvas.h" #include "display/sp-canvas-group.h" #include "preferences.h" @@ -38,7 +35,6 @@ #include "display/cairo-utils.h" #include "debug/gdk-event-latency-tracker.h" #include "desktop.h" -#include "color.h" using Inkscape::Debug::GdkEventLatencyTracker; @@ -126,7 +122,7 @@ struct SPCanvasClass { namespace { -gint const UPDATE_PRIORITY = G_PRIORITY_DEFAULT_IDLE; +gint const UPDATE_PRIORITY = G_PRIORITY_HIGH_IDLE; GdkWindow *getWindow(SPCanvas *canvas) { @@ -939,6 +935,7 @@ void sp_canvas_class_init(SPCanvasClass *klass) static void sp_canvas_init(SPCanvas *canvas) { gtk_widget_set_has_window (GTK_WIDGET (canvas), TRUE); + gtk_widget_set_double_buffered (GTK_WIDGET (canvas), FALSE); gtk_widget_set_can_focus (GTK_WIDGET (canvas), TRUE); canvas->_pick_event.type = GDK_LEAVE_NOTIFY; @@ -959,10 +956,9 @@ static void sp_canvas_init(SPCanvas *canvas) canvas->_drawing_disabled = false; - canvas->_backing_store = NULL; - canvas->_clean_region = cairo_region_create(); - canvas->_background = cairo_pattern_create_rgb(1, 1, 1); - canvas->_background_is_checkerboard = false; + canvas->_tiles=NULL; + canvas->_tLeft=canvas->_tTop=canvas->_tRight=canvas->_tBottom=0; + canvas->_tile_h=canvas->_tile_h=0; canvas->_forced_redraw_count = 0; canvas->_forced_redraw_limit = -1; @@ -971,12 +967,22 @@ static void sp_canvas_init(SPCanvas *canvas) canvas->_enable_cms_display_adj = false; new (&canvas->_cms_key) Glib::ustring(""); #endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) + + canvas->_is_scrolling = false; } void SPCanvas::shutdownTransients() { - // Reset the clean region - dirtyAll(); + // We turn off the need_redraw flag, since if the canvas is mapped again + // it will request a redraw anyways. We do not turn off the need_update + // flag, though, because updates are not queued when the canvas remaps + // itself. + // + _need_redraw = FALSE; + if (_tiles) g_free(_tiles); + _tiles = NULL; + _tLeft = _tTop = _tRight = _tBottom = 0; + _tile_h = _tile_h = 0; if (_grabbed_item) { _grabbed_item = NULL; @@ -999,18 +1005,6 @@ void SPCanvas::dispose(GObject *object) g_object_unref (canvas->_root); canvas->_root = NULL; } - if (canvas->_backing_store) { - cairo_surface_destroy(canvas->_backing_store); - canvas->_backing_store = NULL; - } - if (canvas->_clean_region) { - cairo_region_destroy(canvas->_clean_region); - canvas->_clean_region = NULL; - } - if (canvas->_background) { - cairo_pattern_destroy(canvas->_background); - canvas->_background = NULL; - } canvas->shutdownTransients(); #if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) @@ -1144,48 +1138,41 @@ void SPCanvas::handle_size_request(GtkWidget *widget, GtkRequisition *req) void SPCanvas::handle_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { SPCanvas *canvas = SP_CANVAS (widget); - GtkAllocation old_allocation; + GtkAllocation widg_allocation; - gtk_widget_get_allocation(widget, &old_allocation); + gtk_widget_get_allocation (widget, &widg_allocation); -// Geom::IntRect old_area = Geom::IntRect::from_xywh(canvas->_x0, canvas->_y0, -// old_allocation.width, old_allocation.height); +// Geom::IntRect old_area = Geom::IntRect::from_xywh(canvas->x0, canvas->y0, +// widg_allocation.width, widg_allocation.height); Geom::IntRect new_area = Geom::IntRect::from_xywh(canvas->_x0, canvas->_y0, allocation->width, allocation->height); - // resize backing store - cairo_surface_t *new_backing_store = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, - allocation->width, allocation->height); - if (canvas->_backing_store) { - cairo_t *cr = cairo_create(new_backing_store); - cairo_translate(cr, -canvas->_x0, -canvas->_y0); - cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); - cairo_set_source(cr, canvas->_background); - cairo_paint(cr); - cairo_set_source_surface(cr, canvas->_backing_store, canvas->_x0, canvas->_y0); - cairo_paint(cr); - cairo_destroy(cr); - cairo_surface_destroy(canvas->_backing_store); - } - canvas->_backing_store = new_backing_store; - - // Clip the clean region to the new allocation - cairo_rectangle_int_t crect = { canvas->_x0, canvas->_y0, allocation->width, allocation->height }; - cairo_region_intersect_rectangle(canvas->_clean_region, &crect); - - gtk_widget_set_allocation (widget, allocation); - + // Schedule redraw of new region + canvas->resizeTiles(canvas->_x0, canvas->_y0, canvas->_x0 + allocation->width, canvas->_y0 + allocation->height); if (SP_CANVAS_ITEM_GET_CLASS (canvas->_root)->viewbox_changed) SP_CANVAS_ITEM_GET_CLASS (canvas->_root)->viewbox_changed (canvas->_root, new_area); + if (allocation->width > widg_allocation.width) { + canvas->requestRedraw(canvas->_x0 + widg_allocation.width, + 0, + canvas->_x0 + allocation->width, + canvas->_y0 + allocation->height); + } + if (allocation->height > widg_allocation.height) { + canvas->requestRedraw(0, + canvas->_y0 + widg_allocation.height, + canvas->_x0 + allocation->width, + canvas->_y0 + allocation->height); + } + + gtk_widget_set_allocation (widget, allocation); + if (gtk_widget_get_realized (widget)) { gdk_window_move_resize (gtk_widget_get_window (widget), allocation->x, allocation->y, allocation->width, allocation->height); } - // Schedule redraw of any newly exposed regions - canvas->addIdle(); } int SPCanvas::emitEvent(GdkEvent *event) @@ -1539,23 +1526,48 @@ int SPCanvas::handle_motion(GtkWidget *widget, GdkEventMotion *event) void SPCanvas::paintSingleBuffer(Geom::IntRect const &paint_rect, Geom::IntRect const &canvas_rect, int /*sw*/) { + GtkWidget *widget = GTK_WIDGET (this); + + // Mark the region clean + markRect(paint_rect, 0); + SPCanvasBuf buf; buf.buf = NULL; buf.buf_rowstride = 0; buf.rect = paint_rect; buf.visible_rect = canvas_rect; buf.is_empty = true; + //buf.ct = gdk_cairo_create(widget->window); // create temporary surface cairo_surface_t *imgs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, paint_rect.width(), paint_rect.height()); buf.ct = cairo_create(imgs); + //cairo_translate(buf.ct, -x0, -y0); + + // fix coordinates, clip all drawing to the tile and clear the background + //cairo_translate(buf.ct, paint_rect.left() - canvas->x0, paint_rect.top() - canvas->y0); + //cairo_rectangle(buf.ct, 0, 0, paint_rect.width(), paint_rect.height()); + //cairo_set_line_width(buf.ct, 3); + //cairo_set_source_rgba(buf.ct, 1.0, 0.0, 0.0, 0.1); + //cairo_stroke_preserve(buf.ct); + //cairo_clip(buf.ct); + +#if GTK_CHECK_VERSION(3,0,0) + GtkStyleContext *context = gtk_widget_get_style_context(widget); + GdkRGBA color; + gtk_style_context_get_background_color(context, + gtk_widget_get_state_flags(widget), + &color); + gdk_cairo_set_source_rgba(buf.ct, &color); +#else + GtkStyle *style = gtk_widget_get_style (widget); + gdk_cairo_set_source_color(buf.ct, &style->bg[GTK_STATE_NORMAL]); +#endif - cairo_save(buf.ct); - cairo_translate(buf.ct, -paint_rect.left(), -paint_rect.top()); - cairo_set_source(buf.ct, _background); cairo_set_operator(buf.ct, CAIRO_OPERATOR_SOURCE); + //cairo_rectangle(buf.ct, 0, 0, paint_rect.width(), paint_rec.height()); cairo_paint(buf.ct); - cairo_restore(buf.ct); + cairo_set_operator(buf.ct, CAIRO_OPERATOR_OVER); if (_root->visible) { SP_CANVAS_ITEM_GET_CLASS(_root)->render(_root, &buf); @@ -1588,8 +1600,7 @@ void SPCanvas::paintSingleBuffer(Geom::IntRect const &paint_rect, Geom::IntRect } #endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) - //cairo_t *xct = gdk_cairo_create(gtk_widget_get_window (widget)); - cairo_t *xct = cairo_create(_backing_store); + cairo_t *xct = gdk_cairo_create(gtk_widget_get_window (widget)); cairo_translate(xct, paint_rect.left() - _x0, paint_rect.top() - _y0); cairo_rectangle(xct, 0, 0, paint_rect.width(), paint_rect.height()); cairo_clip(xct); @@ -1598,12 +1609,6 @@ void SPCanvas::paintSingleBuffer(Geom::IntRect const &paint_rect, Geom::IntRect cairo_paint(xct); cairo_destroy(xct); cairo_surface_destroy(imgs); - - // Mark the painted rectangle clean - markRect(paint_rect, 0); - - gtk_widget_queue_draw_area(GTK_WIDGET(this), paint_rect.left() -_x0, paint_rect.top() - _y0, - paint_rect.width(), paint_rect.height()); } struct PaintRectSetup { @@ -1787,49 +1792,52 @@ void SPCanvas::endForcedFullRedraws() _forced_redraw_limit = -1; } +#if GTK_CHECK_VERSION(3,0,0) gboolean SPCanvas::handle_draw(GtkWidget *widget, cairo_t *cr) { SPCanvas *canvas = SP_CANVAS(widget); - // Blit from the backing store, without regard for the clean region. - // This is necessary because GTK clears the widget for us, which causes - // severe flicker while drawing if we don't blit the old contents. - cairo_set_source_surface(cr, canvas->_backing_store, 0, 0); - cairo_paint(cr); - cairo_rectangle_list_t *rects = cairo_copy_clip_rectangle_list(cr); - cairo_region_t *dirty_region = cairo_region_create(); for (int i = 0; i < rects->num_rectangles; i++) { cairo_rectangle_t rectangle = rects->rectangles[i]; - Geom::Rect dr = Geom::Rect::from_xywh(rectangle.x + canvas->_x0, rectangle.y + canvas->_y0, - rectangle.width, rectangle.height); - Geom::IntRect ir = dr.roundOutwards(); - cairo_rectangle_int_t irect = { ir.left(), ir.top(), ir.width(), ir.height() }; - cairo_region_union_rectangle(dirty_region, &irect); - } - cairo_rectangle_list_destroy(rects); - cairo_region_subtract(dirty_region, canvas->_clean_region); - // Render the dirty portion in the background - if (!cairo_region_is_empty(dirty_region)) { - canvas->addIdle(); + Geom::IntRect r = Geom::IntRect::from_xywh(rectangle.x + canvas->_x0, rectangle.y + canvas->_y0, + rectangle.width, rectangle.height); + + canvas->requestRedraw(r.left(), r.top(), r.right(), r.bottom()); } - cairo_region_destroy(dirty_region); - return TRUE; + cairo_rectangle_list_destroy(rects); + + return FALSE; } -#if !GTK_CHECK_VERSION(3,0,0) +#else gboolean SPCanvas::handle_expose(GtkWidget *widget, GdkEventExpose *event) { - cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(widget)); + SPCanvas *canvas = SP_CANVAS(widget); + + if (!gtk_widget_is_drawable (widget) || + (event->window != getWindow(canvas))) { + return FALSE; + } + + int n_rects = 0; + GdkRectangle *rects = NULL; + gdk_region_get_rectangles(event->region, &rects, &n_rects); - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - gboolean result = SPCanvas::handle_draw(widget, cr); + if(rects == NULL) + return FALSE; + + for (int i = 0; i < n_rects; i++) { + GdkRectangle rectangle = rects[i]; - cairo_destroy (cr); + Geom::IntRect r = Geom::IntRect::from_xywh(rectangle.x + canvas->_x0, rectangle.y + canvas->_y0, + rectangle.width, rectangle.height); + + canvas->requestRedraw(r.left(), r.top(), r.right(), r.bottom()); + } - return result; + return FALSE; } #endif @@ -1882,22 +1890,42 @@ int SPCanvas::paint() _need_update = FALSE; } - GtkAllocation allocation; - gtk_widget_get_allocation(GTK_WIDGET(this), &allocation); - cairo_rectangle_int_t crect = { _x0, _y0, allocation.width, allocation.height }; - cairo_region_t *to_draw = cairo_region_create_rectangle(&crect); - cairo_region_subtract(to_draw, _clean_region); + if (!_need_redraw) { + return TRUE; + } - int n_rects = cairo_region_num_rectangles(to_draw); - for (int i = 0; i < n_rects; ++i) { - cairo_rectangle_int_t crect; - cairo_region_get_rectangle(to_draw, i, &crect); - if (!paintRect(crect.x, crect.y, crect.x + crect.width, crect.y + crect.height)) { - // Aborted - return FALSE; - }; + Cairo::RefPtr to_paint = Cairo::Region::create(); + + for (int j = _tTop; j < _tBottom; ++j) { + for (int i = _tLeft; i < _tRight; ++i) { + int tile_index = (i - _tLeft) + (j - _tTop) * _tile_h; + + if (_tiles[tile_index]) { // if this tile is dirtied (nonzero) + Cairo::RectangleInt rect = {i*TILE_SIZE, j*TILE_SIZE, + TILE_SIZE, TILE_SIZE}; + to_paint->do_union(rect); + } + } + } + + int n_rect = to_paint->get_num_rectangles(); + + if (n_rect > 0) { + for (int i=0; i < n_rect; i++) { + Cairo::RectangleInt rect = to_paint->get_rectangle(i); + int x0 = rect.x; + int y0 = rect.y; + int x1 = x0 + rect.width; + int y1 = y0 + rect.height; + if (!paintRect(x0, y0, x1, y1)) { + // Aborted + return FALSE; + }; + } } + _need_redraw = FALSE; + // we've had a full unaborted redraw, reset the full redraw counter if (_forced_redraw_limit != -1) { _forced_redraw_count = 0; @@ -1976,41 +2004,15 @@ void SPCanvas::scrollTo(double cx, double cy, unsigned int clear, bool is_scroll Geom::IntRect old_area = getViewboxIntegers(); Geom::IntRect new_area = old_area + Geom::IntPoint(dx, dy); - - gtk_widget_get_allocation(&_widget, &allocation); - - // adjust backing store contents - assert(_backing_store); - cairo_surface_t *new_backing_store = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, - allocation.width, allocation.height); - cairo_t *cr = cairo_create(new_backing_store); - cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); - // Paint the background - cairo_translate(cr, -ix, -iy); - cairo_set_source(cr, _background); - cairo_paint(cr); - // Copy the old backing store contents - cairo_set_source_surface(cr, _backing_store, _x0, _y0); - cairo_rectangle(cr, _x0, _y0, allocation.width, allocation.height); - cairo_clip(cr); - cairo_paint(cr); - cairo_destroy(cr); - cairo_surface_destroy(_backing_store); - _backing_store = new_backing_store; - + _dx0 = cx; // here the 'd' stands for double, not delta! _dy0 = cy; _x0 = ix; _y0 = iy; - // Adjust the clean region - if (clear) { - dirtyAll(); - } else { - cairo_rectangle_int_t crect = { _x0, _y0, allocation.width, allocation.height }; - cairo_region_intersect_rectangle(_clean_region, &crect); - } + gtk_widget_get_allocation(&_widget, &allocation); + resizeTiles(_x0, _y0, _x0 + allocation.width, _y0 + allocation.height); if (SP_CANVAS_ITEM_GET_CLASS(_root)->viewbox_changed) { SP_CANVAS_ITEM_GET_CLASS(_root)->viewbox_changed(_root, new_area); } @@ -2018,17 +2020,19 @@ void SPCanvas::scrollTo(double cx, double cy, unsigned int clear, bool is_scroll if (!clear) { // scrolling without zoom; redraw only the newly exposed areas if ((dx != 0) || (dy != 0)) { + this->_is_scrolling = is_scrolling; if (gtk_widget_get_realized(GTK_WIDGET(this))) { gdk_window_scroll(getWindow(this), -dx, -dy); } } + } else { + // scrolling as part of zoom; do nothing here - the next do_update will perform full redraw } - addIdle(); } void SPCanvas::updateNow() { - if (_need_update) { + if (_need_update || _need_redraw) { doUpdate(); } } @@ -2041,45 +2045,26 @@ void SPCanvas::requestUpdate() void SPCanvas::requestRedraw(int x0, int y0, int x1, int y1) { + GtkAllocation allocation; + if (!gtk_widget_is_drawable( GTK_WIDGET(this) )) { return; } - if (x0 >= x1 || y0 >= y1) { + if ((x0 >= x1) || (y0 >= y1)) { return; } Geom::IntRect bbox(x0, y0, x1, y1); - dirtyRect(bbox); - addIdle(); -} - -void SPCanvas::setBackgroundColor(guint32 rgba) { - double new_r = SP_RGBA32_R_F(rgba); - double new_g = SP_RGBA32_G_F(rgba); - double new_b = SP_RGBA32_B_F(rgba); - if (!_background_is_checkerboard) { - double old_r, old_g, old_b; - cairo_pattern_get_rgba(_background, &old_r, &old_g, &old_b, NULL); - if (new_r == old_r && new_g == old_g && new_b == old_b) return; - } - if (_background) { - cairo_pattern_destroy(_background); - } - _background = cairo_pattern_create_rgb(new_r, new_g, new_b); - _background_is_checkerboard = false; - dirtyAll(); - addIdle(); -} + gtk_widget_get_allocation(GTK_WIDGET(this), &allocation); -void SPCanvas::setBackgroundCheckerboard() { - if (_background_is_checkerboard) return; - if (_background) { - cairo_pattern_destroy(_background); + Geom::IntRect canvas_rect = Geom::IntRect::from_xywh(this->_x0, this->_y0, + allocation.width, allocation.height); + + Geom::OptIntRect clip = bbox & canvas_rect; + if (clip) { + dirtyRect(*clip); + addIdle(); } - _background = ink_cairo_pattern_create_checkerboard(); - _background_is_checkerboard = true; - dirtyAll(); - addIdle(); } /** @@ -2183,24 +2168,63 @@ inline int sp_canvas_tile_ceil(int x) return ((x + (TILE_SIZE - 1)) & (~(TILE_SIZE - 1))) / TILE_SIZE; } -void SPCanvas::dirtyRect(Geom::IntRect const &area) { - markRect(area, 1); +void SPCanvas::resizeTiles(int nl, int nt, int nr, int nb) +{ + if ( nl >= nr || nt >= nb ) { + if (_tiles) g_free(_tiles); + _tLeft = _tTop = _tRight = _tBottom = 0; + _tile_h = _tile_h = 0; + _tiles = NULL; + return; + } + int tl = sp_canvas_tile_floor(nl); + int tt = sp_canvas_tile_floor(nt); + int tr = sp_canvas_tile_ceil(nr); + int tb = sp_canvas_tile_ceil(nb); + + int nh = tr-tl, nv = tb-tt; + uint8_t *ntiles = (uint8_t*) g_malloc(nh * nv * sizeof(uint8_t)); + for (int i = tl; i < tr; i++) { + for (int j = tt; j < tb; j++) { + int ind = (i-tl) + (j-tt)*nh; + if ( i >= _tLeft && i < _tRight && j >= _tTop && j < _tBottom ) { + ntiles[ind] = _tiles[(i - _tLeft) + (j - _tTop) * _tile_h]; // copy from the old tile + } else { + ntiles[ind] = 0; // newly exposed areas get 0 + } + } + } + if (_tiles) g_free(_tiles); + _tiles = ntiles; + _tLeft = tl; + _tTop = tt; + _tRight = tr; + _tBottom = tb; + _tile_h = nh; + _tile_h = nv; } -void SPCanvas::dirtyAll() { - if (_clean_region && !cairo_region_is_empty(_clean_region)) { - cairo_region_destroy(_clean_region); - _clean_region = cairo_region_create(); - } +void SPCanvas::dirtyRect(Geom::IntRect const &area) { + _need_redraw = TRUE; + markRect(area, 1); } void SPCanvas::markRect(Geom::IntRect const &area, uint8_t val) { - cairo_rectangle_int_t crect = { area.left(), area.top(), area.width(), area.height() }; - if (val) { - cairo_region_subtract_rectangle(_clean_region, &crect); - } else { - cairo_region_union_rectangle(_clean_region, &crect); + int tl = sp_canvas_tile_floor(area.left()); + int tt = sp_canvas_tile_floor(area.top()); + int tr = sp_canvas_tile_ceil(area.right()); + int tb = sp_canvas_tile_ceil(area.bottom()); + if ( tl >= _tRight || tr <= _tLeft || tt >= _tBottom || tb <= _tTop ) return; + if ( tl < _tLeft ) tl = _tLeft; + if ( tr > _tRight ) tr = _tRight; + if ( tt < _tTop ) tt = _tTop; + if ( tb > _tBottom ) tb = _tBottom; + + for (int i=tl; i * Lauris Kaplinski * Jon A. Cruz - * Krzysztof KosiÅ„ski * * Copyright (C) 1998 The Free Software Foundation * Copyright (C) 2002 Lauris Kaplinski - * Copyright (C) 2016 Google Inc. * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -87,9 +85,6 @@ struct SPCanvas { Geom::IntRect getViewboxIntegers() const; SPCanvasGroup *getRoot(); - void setBackgroundColor(guint32 rgba); - void setBackgroundCheckerboard(); - /// Returns new canvas as widget. static GtkWidget *createAA(); @@ -108,8 +103,7 @@ private: /// Marks the specified area as dirty (requiring redraw) void dirtyRect(Geom::IntRect const &area); - /// Marks the whole widget for redraw - void dirtyAll(); + /// Marks specific canvas rectangle as clean (val == 0) or dirty (otherwise) void markRect(Geom::IntRect const &area, uint8_t val); /// Invokes update, paint, and repick on canvas. @@ -161,8 +155,9 @@ public: */ static gint handle_scroll(GtkWidget *widget, GdkEventScroll *event); static gint handle_motion(GtkWidget *widget, GdkEventMotion *event); +#if GTK_CHECK_VERSION(3,0,0) static gboolean handle_draw(GtkWidget *widget, cairo_t *cr); -#if !GTK_CHECK_VERSION(3,0,0) +#else static gboolean handle_expose(GtkWidget *widget, GdkEventExpose *event); #endif static gint handle_key_event(GtkWidget *widget, GdkEventKey *event); @@ -181,18 +176,15 @@ public: bool _is_dragging; double _dx0; double _dy0; - int _x0; ///< World coordinate of the leftmost pixels - int _y0; ///< World coordinate of the topmost pixels - - /// Image surface storing the contents of the widget - cairo_surface_t *_backing_store; - /// Area of the widget that has up-to-date content - cairo_region_t *_clean_region; - /// Widget background, defaults to white - cairo_pattern_t *_background; - bool _background_is_checkerboard; - - /// Last known modifier state, for deferred repick when a button is down. + int _x0; + int _y0; + + /* Area that needs redrawing, stored as a microtile array */ + int _tLeft, _tTop, _tRight, _tBottom; + int _tile_w, _tile_h; + uint8_t *_tiles; + + /** Last known modifier state, for deferred repick when a button is down. */ int _state; /** The item containing the mouse pointer, or NULL if none. */ @@ -216,6 +208,7 @@ public: int _close_enough; unsigned int _need_update : 1; + unsigned int _need_redraw : 1; unsigned int _need_repick : 1; int _forced_redraw_count; -- cgit v1.2.3 From 300d24dedddefb2f68ebd680fcd2234bfca53ad7 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Mon, 25 Jul 2016 22:16:54 +0200 Subject: Changed coding style (bzr r14954.1.27) --- src/object-set.cpp | 47 ++++++++++++++++++++++++++++------------------- src/object-set.h | 25 ++++++++++++++++++------- src/selection-chemistry.h | 2 +- 3 files changed, 47 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/object-set.cpp b/src/object-set.cpp index 1b994106a..92bcf6b07 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -24,7 +24,6 @@ bool ObjectSet::add(SPObject* object) { g_return_val_if_fail(object != NULL, false); g_return_val_if_fail(SP_IS_OBJECT(object), false); - // any ancestor is in the set - do nothing if (_anyAncestorIsInSet(object)) { return false; @@ -68,7 +67,7 @@ bool ObjectSet::includes(SPObject *object) { g_return_val_if_fail(object != NULL, false); g_return_val_if_fail(SP_IS_OBJECT(object), false); - return container.get().find(object) != container.get().end(); + return _container.get().find(object) != _container.get().end(); } void ObjectSet::clear() { @@ -77,7 +76,7 @@ void ObjectSet::clear() { } int ObjectSet::size() { - return container.size(); + return _container.size(); } bool ObjectSet::_anyAncestorIsInSet(SPObject *object) { @@ -105,22 +104,22 @@ void ObjectSet::_removeDescendantsFromSet(SPObject *object) { } void ObjectSet::_remove(SPObject *object) { - releaseConnections[object].disconnect(); - releaseConnections.erase(object); - container.get().erase(object); - _remove_3D_boxes_recursively(object); + _releaseConnections[object].disconnect(); + _releaseConnections.erase(object); + _container.get().erase(object); + _remove3DBoxesRecursively(object); _releaseSignals(object); } void ObjectSet::_add(SPObject *object) { - releaseConnections[object] = object->connectRelease(sigc::hide_return(sigc::mem_fun(*this, &ObjectSet::remove))); - container.push_back(object); - _add_3D_boxes_recursively(object); + _releaseConnections[object] = object->connectRelease(sigc::hide_return(sigc::mem_fun(*this, &ObjectSet::remove))); + _container.push_back(object); + _add3DBoxesRecursively(object); _connectSignals(object); } void ObjectSet::_clear() { - for (auto object: container) { + for (auto object: _container) { _remove(object); } } @@ -173,16 +172,16 @@ void ObjectSet::toggle(SPObject *obj) { } bool ObjectSet::isEmpty() { - return container.size() == 0; + return _container.size() == 0; } SPObject *ObjectSet::single() { - return container.size() == 1 ? *container.begin() : nullptr; + return _container.size() == 1 ? *_container.begin() : nullptr; } SPItem *ObjectSet::singleItem() { - if (container.size() == 1) { - SPObject* obj = *container.begin(); + if (_container.size() == 1) { + SPObject* obj = *_container.begin(); if (SP_IS_ITEM(obj)) { return SP_ITEM(obj); } @@ -225,7 +224,7 @@ SPItem *ObjectSet::_sizeistItem(bool sml, CompareSize compare) { } SPObjectRange ObjectSet::objects() { - return SPObjectRange(container.get().begin(), container.get().end()); + return SPObjectRange(_container.get().begin(), _container.get().end()); } Inkscape::XML::Node *ObjectSet::singleRepr() { @@ -309,7 +308,6 @@ boost::optional ObjectSet::center() const { } } - std::list const ObjectSet::perspList() { std::list pl; for (std::list::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) { @@ -335,7 +333,7 @@ std::list const ObjectSet::box3DList(Persp3D *persp) { return boxes; } -void ObjectSet::_add_3D_boxes_recursively(SPObject *obj) { +void ObjectSet::_add3DBoxesRecursively(SPObject *obj) { std::list boxes = box3d_extract_boxes(obj); for (std::list::iterator i = boxes.begin(); i != boxes.end(); ++i) { @@ -344,7 +342,7 @@ void ObjectSet::_add_3D_boxes_recursively(SPObject *obj) { } } -void ObjectSet::_remove_3D_boxes_recursively(SPObject *obj) { +void ObjectSet::_remove3DBoxesRecursively(SPObject *obj) { std::list boxes = box3d_extract_boxes(obj); for (std::list::iterator i = boxes.begin(); i != boxes.end(); ++i) { @@ -359,3 +357,14 @@ void ObjectSet::_remove_3D_boxes_recursively(SPObject *obj) { } } // namespace Inkscape + +/* + 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 : diff --git a/src/object-set.h b/src/object-set.h index b4178bd37..2772afbe2 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -198,21 +198,21 @@ public: /** Returns a range of selected SPItems. */ SPItemRange items() { - return SPItemRange(container.get() + return SPItemRange(_container.get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())); }; /** Returns a range of selected groups. */ SPGroupRange groups() { - return SPGroupRange (container.get() + return SPGroupRange (_container.get() | boost::adaptors::filtered(is_group()) | boost::adaptors::transformed(object_to_group())); } /** Returns a range of the xml nodes of all selected objects. */ XMLNodeRange xmlNodes() { - return XMLNodeRange(container.get() + return XMLNodeRange(_container.get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())); } @@ -299,13 +299,13 @@ protected: void _removeAncestorsFromSet(SPObject *object); SPItem *_sizeistItem(bool sml, CompareSize compare); SPObject *_getMutualAncestor(SPObject *object); - virtual void _add_3D_boxes_recursively(SPObject *obj); - virtual void _remove_3D_boxes_recursively(SPObject *obj); + virtual void _add3DBoxesRecursively(SPObject *obj); + virtual void _remove3DBoxesRecursively(SPObject *obj); - multi_index_container container; + multi_index_container _container; GC::soft_ptr _desktop; std::list _3dboxes; - std::unordered_map releaseConnections; + std::unordered_map _releaseConnections; }; @@ -316,3 +316,14 @@ typedef ObjectSet::XMLNodeRange XMLNodeRange; } // namespace Inkscape #endif //INKSCAPE_PROTOTYPE_OBJECTSET_H + +/* + 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 : diff --git a/src/selection-chemistry.h b/src/selection-chemistry.h index cfae84eef..f6cd4829a 100644 --- a/src/selection-chemistry.h +++ b/src/selection-chemistry.h @@ -109,7 +109,7 @@ void sp_selection_to_next_layer( SPDesktop *desktop, bool suppressDone = false ) void sp_selection_to_prev_layer( SPDesktop *desktop, bool suppressDone = false ); void sp_selection_to_layer( SPDesktop *desktop, SPObject *layer, bool suppressDone = false ); -void sp_selection_apply_affine(Inkscape::ObjectSet *selection, Geom::Affine const &affine, bool set_i2d = true, bool compensate = true, bool adjust_transf_center = true); +void sp_selection_apply_affine(Inkscape::ObjectSet *set, Geom::Affine const &affine, bool set_i2d = true, bool compensate = true, bool adjust_transf_center = true); void sp_selection_remove_transform (SPDesktop *desktop); void sp_selection_scale_absolute (Inkscape::ObjectSet *set, double x0, double x1, double y0, double y1); void sp_selection_scale_relative(Inkscape::ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale); -- cgit v1.2.3 From ff4fbbc93f67afd6cbf851691833a50d6c76b350 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 27 Jul 2016 12:19:03 +0200 Subject: Renamed some functions, fixed tests (bzr r14954.1.28) --- src/file.cpp | 10 ++--- src/object-set.h | 10 ++--- src/selection-chemistry.cpp | 97 ++++++++++++++++++++-------------------- src/selection-chemistry.h | 39 ++++++++-------- src/seltrans.cpp | 2 +- src/sp-object.cpp | 3 ++ src/ui/clipboard.cpp | 4 +- src/ui/dialog/export.cpp | 2 +- src/ui/dialog/transformation.cpp | 22 ++++----- src/ui/interface.cpp | 4 +- src/verbs.cpp | 18 ++++---- src/widgets/select-toolbar.cpp | 2 +- 12 files changed, 109 insertions(+), 104 deletions(-) (limited to 'src') diff --git a/src/file.cpp b/src/file.cpp index 9ba180cb4..8743e3b67 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -1129,14 +1129,14 @@ void sp_import_document(SPDesktop *desktop, SPDocument *clipdoc, bool in_place) Inkscape::Selection *selection = desktop->getSelection(); selection->setReprList(pasted_objects_not); Geom::Affine doc2parent = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse(); - sp_selection_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false); + sp_object_set_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false); sp_selection_delete(desktop); // Change the selection to the freshly pasted objects selection->setReprList(pasted_objects); // Apply inverse of parent transform - sp_selection_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false); + sp_object_set_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false); // Update (among other things) all curves in paths, for bounds() to work target_document->ensureUpToDate(); @@ -1166,7 +1166,7 @@ void sp_import_document(SPDesktop *desktop, SPDocument *clipdoc, bool in_place) m.unSetup(); } - sp_selection_move_relative(selection, offset); + sp_object_set_move_relative(selection, offset); } } @@ -1271,7 +1271,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, // c2p is identity matrix at this point unless ensureUpToDate is called doc->ensureUpToDate(); Geom::Affine affine = doc->getRoot()->c2p * SP_ITEM(place_to_insert)->i2doc_affine().inverse(); - sp_selection_apply_affine(selection, desktop->dt2doc() * affine * desktop->doc2dt(), true, false, false); + sp_object_set_apply_affine(selection, desktop->dt2doc() * affine * desktop->doc2dt(), true, false, false); // move to mouse pointer { @@ -1279,7 +1279,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, Geom::OptRect sel_bbox = selection->visualBounds(); if (sel_bbox) { Geom::Point m( desktop->point() - sel_bbox->midpoint() ); - sp_selection_move_relative(selection, m, false); + sp_object_set_move_relative(selection, m, false); } } } diff --git a/src/object-set.h b/src/object-set.h index 2772afbe2..fae365f70 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -86,7 +86,7 @@ typedef boost::multi_index_container< boost::multi_index::hashed_unique< boost::multi_index::tag, boost::multi_index::identity> - >> multi_index_container; + >> MultiIndexContainer; typedef boost::any_range< SPObject*, @@ -97,9 +97,9 @@ typedef boost::any_range< class ObjectSet { public: enum CompareSize {HORIZONTAL, VERTICAL, AREA}; - typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())) SPItemRange; - typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_group()) | boost::adaptors::transformed(object_to_group())) SPGroupRange; - typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())) XMLNodeRange; + typedef decltype(MultiIndexContainer().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())) SPItemRange; + typedef decltype(MultiIndexContainer().get() | boost::adaptors::filtered(is_group()) | boost::adaptors::transformed(object_to_group())) SPGroupRange; + typedef decltype(MultiIndexContainer().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())) XMLNodeRange; ObjectSet(SPDesktop* desktop): _desktop(desktop) {}; ObjectSet(): _desktop(nullptr) {}; @@ -302,7 +302,7 @@ protected: virtual void _add3DBoxesRecursively(SPObject *obj); virtual void _remove3DBoxesRecursively(SPObject *obj); - multi_index_container _container; + MultiIndexContainer _container; GC::soft_ptr _desktop; std::list _3dboxes; std::unordered_map _releaseConnections; diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index e8c408ed8..cd0a29b05 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -694,7 +694,7 @@ void sp_edit_invert_in_all_layers(SPDesktop *desktop) sp_edit_select_all_full(desktop, true, true); } -static Inkscape::XML::Node* sp_selection_group(ObjectSet *set) { +static Inkscape::XML::Node* sp_object_set_group(ObjectSet *set) { SPDocument *doc = set->desktop()->getDocument(); Inkscape::XML::Document *xml_doc = doc->getReprDoc(); Inkscape::XML::Node *group = xml_doc->createElement("svg:g"); @@ -764,14 +764,14 @@ static Inkscape::XML::Node* sp_selection_group(ObjectSet *set) { return group; } -void sp_selection_group_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop) { // Check if something is selected. if (selection->isEmpty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select some objects to group.")); return; } - Inkscape::XML::Node* group = sp_selection_group(selection); + Inkscape::XML::Node* group = sp_object_set_group(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_GROUP, C_("Verb", "Group")); @@ -823,7 +823,7 @@ void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDeskto } -static void sp_selection_ungroup(ObjectSet *set) +static void sp_object_set_ungroup(ObjectSet *set) { GSList *groups = NULL; for (auto g: set->groups()) { @@ -882,7 +882,7 @@ static void sp_selection_ungroup(ObjectSet *set) set->setList(new_select); } -void sp_selection_ungroup_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop) { if (selection->isEmpty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select a group to ungroup.")); @@ -893,7 +893,7 @@ void sp_selection_ungroup_ui(Inkscape::Selection *selection, SPDesktop *desktop) return; } - sp_selection_ungroup(selection); + sp_object_set_ungroup(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_UNGROUP, _("Ungroup")); @@ -978,7 +978,7 @@ bool sp_item_repr_compare_position_bool(SPObject const *first, SPObject const *s ((SPItem*)second)->getRepr())<0; } -void sp_selection_raise(ObjectSet* set) { +void sp_object_set_raise(ObjectSet *set) { std::vector items(set->items().begin(), set->items().end()); Inkscape::XML::Node *grepr = const_cast(items.front()->parent->getRepr()); @@ -1013,7 +1013,7 @@ void sp_selection_raise(ObjectSet* set) { } } -void sp_selection_raise_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop) { if (selection->items().empty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise.")); @@ -1025,14 +1025,14 @@ void sp_selection_raise_ui(Inkscape::Selection *selection, SPDesktop *desktop) selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); return; } - sp_selection_raise(selection); + sp_object_set_raise(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_RAISE, //TRANSLATORS: "Raise" means "to raise an object" in the undo history C_("Undo action", "Raise")); } -void sp_selection_raise_to_top(ObjectSet* set) { +void sp_object_set_raise_to_top(ObjectSet *set) { std::vector rl(set->xmlNodes().begin(), set->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); @@ -1042,7 +1042,7 @@ void sp_selection_raise_to_top(ObjectSet* set) { } } -void sp_selection_raise_to_top_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop) { SPDocument *document = selection->layers()->getDocument(); @@ -1057,13 +1057,13 @@ void sp_selection_raise_to_top_ui(Inkscape::Selection *selection, SPDesktop *des return; } - sp_selection_raise_to_top(selection); + sp_object_set_raise_to_top(selection); DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT, _("Raise to top")); } -void sp_selection_lower(ObjectSet *set) { +void sp_object_set_lower(ObjectSet *set) { std::vector items(set->items().begin(), set->items().end()); Inkscape::XML::Node *grepr = const_cast(items.front()->parent->getRepr()); @@ -1102,7 +1102,7 @@ void sp_selection_lower(ObjectSet *set) { } } -void sp_selection_lower_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop) { if (selection->items().empty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower.")); @@ -1115,14 +1115,14 @@ void sp_selection_lower_ui(Inkscape::Selection *selection, SPDesktop *desktop) return; } - sp_selection_lower(selection); + sp_object_set_lower(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_LOWER, //TRANSLATORS: "Lower" means "to lower an object" in the undo history C_("Undo action", "Lower")); } -void sp_selection_lower_to_bottom(ObjectSet *set) { +void sp_object_set_lower_to_bottom(ObjectSet *set) { std::vector rl(set->xmlNodes().begin(), set->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); @@ -1143,7 +1143,7 @@ void sp_selection_lower_to_bottom(ObjectSet *set) { } } -void sp_selection_lower_to_bottom_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop) { if (selection->isEmpty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower to bottom.")); @@ -1156,7 +1156,7 @@ void sp_selection_lower_to_bottom_ui(Inkscape::Selection *selection, SPDesktop * return; } - sp_selection_lower_to_bottom(selection); + sp_object_set_lower_to_bottom(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_TO_BACK, _("Lower to bottom")); @@ -1484,7 +1484,7 @@ void sp_selection_to_layer(SPDesktop *dt, SPObject *moveto, bool suppressDone) } static bool -selection_contains_original(SPItem *item, ObjectSet* set) +object_set_contains_original(SPItem *item, ObjectSet *set) { bool contains_original = false; @@ -1512,14 +1512,14 @@ selection_contains_original(SPItem *item, ObjectSet* set) static bool -selection_contains_both_clone_and_original(ObjectSet *set) +object_set_contains_both_clone_and_original(ObjectSet *set) { bool clone_with_original = false; auto items = set->items(); for (auto l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; if (item) { - clone_with_original |= selection_contains_original(item, set); + clone_with_original |= object_set_contains_original(item, set); if (clone_with_original) break; } @@ -1533,7 +1533,8 @@ value of set_i2d==false is only used by seltrans when it's dragging objects live that case, items are already in the new position, but the repr is in the old, and this function then simply updates the repr from item->transform. */ -void sp_selection_apply_affine(ObjectSet *set, Geom::Affine const &affine, bool set_i2d, bool compensate, bool adjust_transf_center) +void sp_object_set_apply_affine(ObjectSet *set, Geom::Affine const &affine, bool set_i2d, bool compensate, + bool adjust_transf_center) { if (set->isEmpty()) return; @@ -1581,7 +1582,7 @@ void sp_selection_apply_affine(ObjectSet *set, Geom::Affine const &affine, bool #endif // we're moving both a clone and its original or any ancestor in clone chain? - bool transform_clone_with_original = selection_contains_original(item, set); + bool transform_clone_with_original = object_set_contains_original(item, set); // ...both a text-on-path and its path? bool transform_textpath_with_path = ((dynamic_cast(item) && item->firstChild() && dynamic_cast(item->firstChild())) @@ -1724,7 +1725,7 @@ void sp_selection_apply_affine(ObjectSet *set, Geom::Affine const &affine, bool } } -void sp_selection_remove_transform(SPDesktop *desktop) +void sp_object_set_remove_transform(SPDesktop *desktop) { if (desktop == NULL) return; @@ -1741,9 +1742,9 @@ void sp_selection_remove_transform(SPDesktop *desktop) } void -sp_selection_scale_absolute(ObjectSet *set, - double const x0, double const x1, - double const y0, double const y1) +sp_object_set_scale_absolute(ObjectSet *set, + double x0, double x1, + double y0, double y1) { if (set->isEmpty()) return; @@ -1761,11 +1762,11 @@ sp_selection_scale_absolute(ObjectSet *set, Geom::Translate const o2n(x0, y0); Geom::Affine const final( p2o * scale * o2n ); - sp_selection_apply_affine(set, final); + sp_object_set_apply_affine(set, final); } -void sp_selection_scale_relative(ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale) +void sp_object_set_scale_relative(ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale) { if (set->isEmpty()) return; @@ -1786,21 +1787,21 @@ void sp_selection_scale_relative(ObjectSet *set, Geom::Point const &align, Geom: Geom::Translate const n2d(-align); Geom::Translate const d2n(align); Geom::Affine const final( n2d * scale * d2n ); - sp_selection_apply_affine(set, final); + sp_object_set_apply_affine(set, final); } void -sp_selection_rotate_relative(ObjectSet *set, Geom::Point const ¢er, gdouble const angle_degrees) +sp_object_set_rotate_relative(ObjectSet *set, Geom::Point const ¢er, double angle_degrees) { Geom::Translate const d2n(center); Geom::Translate const n2d(-center); Geom::Rotate const rotate(Geom::Rotate::from_degrees(angle_degrees)); Geom::Affine const final( Geom::Affine(n2d) * rotate * d2n ); - sp_selection_apply_affine(set, final); + sp_object_set_apply_affine(set, final); } void -sp_selection_skew_relative(ObjectSet *set, Geom::Point const &align, double dx, double dy) +sp_object_set_skew_relative(ObjectSet *set, Geom::Point const &align, double dx, double dy) { Geom::Translate const d2n(align); Geom::Translate const n2d(-align); @@ -1808,17 +1809,17 @@ sp_selection_skew_relative(ObjectSet *set, Geom::Point const &align, double dx, dx, 1, 0, 0); Geom::Affine const final( n2d * skew * d2n ); - sp_selection_apply_affine(set, final); + sp_object_set_apply_affine(set, final); } -void sp_selection_move_relative(ObjectSet *set, Geom::Point const &move, bool compensate) +void sp_object_set_move_relative(ObjectSet *set, Geom::Point const &move, bool compensate) { - sp_selection_apply_affine(set, Geom::Affine(Geom::Translate(move)), true, compensate); + sp_object_set_apply_affine(set, Geom::Affine(Geom::Translate(move)), true, compensate); } -void sp_selection_move_relative(ObjectSet *set, double dx, double dy) +void sp_object_set_move_relative(ObjectSet *set, double dx, double dy) { - sp_selection_apply_affine(set, Geom::Affine(Geom::Translate(dx, dy))); + sp_object_set_apply_affine(set, Geom::Affine(Geom::Translate(dx, dy))); } /** @@ -1858,7 +1859,7 @@ sp_selection_rotate(Inkscape::Selection *selection, gdouble const angle_degrees) return; } - sp_selection_rotate_relative(selection, *center, angle_degrees); + sp_object_set_rotate_relative(selection, *center, angle_degrees); DocumentUndo::maybeDone(selection->desktop()->getDocument(), ( ( angle_degrees > 0 ) @@ -2207,7 +2208,7 @@ sp_selection_rotate_screen(Inkscape::Selection *selection, gdouble angle) gdouble const zangle = 180 * atan2(zmove, r) / M_PI; - sp_selection_rotate_relative(selection, *center, zangle); + sp_object_set_rotate_relative(selection, *center, zangle); DocumentUndo::maybeDone(selection->desktop()->getDocument(), ( (angle > 0) @@ -2237,7 +2238,7 @@ sp_selection_scale(Inkscape::Selection *selection, gdouble grow) } double const times = 1.0 + grow / max_len; - sp_selection_scale_relative(selection, center, Geom::Scale(times, times)); + sp_object_set_scale_relative(selection, center, Geom::Scale(times, times)); DocumentUndo::maybeDone(selection->desktop()->getDocument(), ( (grow > 0) @@ -2266,7 +2267,7 @@ sp_selection_scale_times(Inkscape::Selection *selection, gdouble times) } Geom::Point const center(sel_bbox->midpoint()); - sp_selection_scale_relative(selection, center, Geom::Scale(times, times)); + sp_object_set_scale_relative(selection, center, Geom::Scale(times, times)); DocumentUndo::done(selection->desktop()->getDocument(), SP_VERB_CONTEXT_SELECT, _("Scale by whole factor")); } @@ -2278,7 +2279,7 @@ sp_selection_move(Inkscape::Selection *selection, gdouble dx, gdouble dy) return; } - sp_selection_move_relative(selection, dx, dy); + sp_object_set_move_relative(selection, dx, dy); SPDocument *doc = selection->layers()->getDocument(); if (dx == 0) { @@ -2304,7 +2305,7 @@ sp_selection_move_screen(Inkscape::Selection *selection, gdouble dx, gdouble dy) gdouble const zoom = selection->desktop()->current_zoom(); gdouble const zdx = dx / zoom; gdouble const zdy = dy / zoom; - sp_selection_move_relative(selection, zdx, zdy); + sp_object_set_move_relative(selection, zdx, zdy); SPDocument *doc = selection->layers()->getDocument(); if (dx == 0) { @@ -3476,7 +3477,7 @@ void sp_selection_untile(SPDesktop *desktop) } } -void sp_selection_get_export_hints(ObjectSet *set, Glib::ustring &filename, float *xdpi, float *ydpi) +void sp_object_set_get_export_hints(ObjectSet *set, Glib::ustring &filename, float *xdpi, float *ydpi) { if (set->isEmpty()) { return; @@ -3627,7 +3628,7 @@ void sp_selection_create_bitmap_copy(SPDesktop *desktop) float hint_xdpi = 0, hint_ydpi = 0; Glib::ustring hint_filename; // take resolution hint from the selected objects - sp_selection_get_export_hints(selection, hint_filename, &hint_xdpi, &hint_ydpi); + sp_object_set_get_export_hints(selection, hint_filename, &hint_xdpi, &hint_ydpi); if (hint_xdpi != 0) { res = hint_xdpi; } else { @@ -3892,7 +3893,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ // FIXME: temporary patch to prevent crash! // Remove this when bboxes are fixed to not blow up on an item clipped/masked with its own clone - bool clone_with_original = selection_contains_both_clone_and_original(selection); + bool clone_with_original = object_set_contains_both_clone_and_original(selection); if (clone_with_original) { return; // in this version, you cannot clip/mask an object with its own clone } @@ -3957,7 +3958,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ items_to_select.clear(); - Inkscape::XML::Node *group = sp_selection_group(set); + Inkscape::XML::Node *group = sp_object_set_group(set); group->setAttribute("inkscape:groupmode", "maskhelper"); // apply clip/mask only to newly created group diff --git a/src/selection-chemistry.h b/src/selection-chemistry.h index f6cd4829a..ca9062320 100644 --- a/src/selection-chemistry.h +++ b/src/selection-chemistry.h @@ -75,19 +75,19 @@ void sp_selection_unsymbol(SPDesktop *desktop); void sp_selection_tile(SPDesktop *desktop, bool apply = true); void sp_selection_untile(SPDesktop *desktop); -void sp_selection_group_ui(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_ungroup_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop); void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_raise(Inkscape::ObjectSet* set); -void sp_selection_raise_to_top(Inkscape::ObjectSet* set); -void sp_selection_lower(Inkscape::ObjectSet *set); -void sp_selection_lower_to_bottom(Inkscape::ObjectSet *set); +void sp_object_set_raise(Inkscape::ObjectSet *set); +void sp_object_set_raise_to_top(Inkscape::ObjectSet *set); +void sp_object_set_lower(Inkscape::ObjectSet *set); +void sp_object_set_lower_to_bottom(Inkscape::ObjectSet *set); -void sp_selection_raise_ui(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_raise_to_top_ui(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_lower_ui(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_lower_to_bottom_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop); SPCSSAttr *take_style_from_item (SPObject *object); @@ -109,14 +109,15 @@ void sp_selection_to_next_layer( SPDesktop *desktop, bool suppressDone = false ) void sp_selection_to_prev_layer( SPDesktop *desktop, bool suppressDone = false ); void sp_selection_to_layer( SPDesktop *desktop, SPObject *layer, bool suppressDone = false ); -void sp_selection_apply_affine(Inkscape::ObjectSet *set, Geom::Affine const &affine, bool set_i2d = true, bool compensate = true, bool adjust_transf_center = true); -void sp_selection_remove_transform (SPDesktop *desktop); -void sp_selection_scale_absolute (Inkscape::ObjectSet *set, double x0, double x1, double y0, double y1); -void sp_selection_scale_relative(Inkscape::ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale); -void sp_selection_rotate_relative (Inkscape::ObjectSet *set, Geom::Point const ¢er, double angle); -void sp_selection_skew_relative (Inkscape::ObjectSet *set, Geom::Point const &align, double dx, double dy); -void sp_selection_move_relative (Inkscape::ObjectSet *set, Geom::Point const &move, bool compensate = true); -void sp_selection_move_relative (Inkscape::ObjectSet *set, double dx, double dy); +void sp_object_set_apply_affine(Inkscape::ObjectSet *set, Geom::Affine const &affine, bool set_i2d = true, + bool compensate = true, bool adjust_transf_center = true); +void sp_object_set_remove_transform(SPDesktop *desktop); +void sp_object_set_scale_absolute(Inkscape::ObjectSet *set, double x0, double x1, double y0, double y1); +void sp_object_set_scale_relative(Inkscape::ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale); +void sp_object_set_rotate_relative(Inkscape::ObjectSet *set, Geom::Point const ¢er, double angle); +void sp_object_set_skew_relative(Inkscape::ObjectSet *set, Geom::Point const &align, double dx, double dy); +void sp_object_set_move_relative(Inkscape::ObjectSet *set, Geom::Point const &move, bool compensate = true); +void sp_object_set_move_relative(Inkscape::ObjectSet *set, double dx, double dy); void sp_selection_rotate_90 (SPDesktop *desktop, bool ccw); void sp_selection_rotate (Inkscape::Selection *selection, double angle); @@ -157,7 +158,7 @@ void scroll_to_show_item(SPDesktop *desktop, SPItem *item); void sp_undo (SPDesktop *desktop, SPDocument *doc); void sp_redo (SPDesktop *desktop, SPDocument *doc); -void sp_selection_get_export_hints (Inkscape::ObjectSet* set, Glib::ustring &filename, float *xdpi, float *ydpi); +void sp_object_set_get_export_hints(Inkscape::ObjectSet *set, Glib::ustring &filename, float *xdpi, float *ydpi); void sp_document_get_export_hints (SPDocument * doc, Glib::ustring &filename, float *xdpi, float *ydpi); void sp_selection_create_bitmap_copy (SPDesktop *desktop); diff --git a/src/seltrans.cpp b/src/seltrans.cpp index f6cb9166c..3054913b6 100644 --- a/src/seltrans.cpp +++ b/src/seltrans.cpp @@ -445,7 +445,7 @@ void Inkscape::SelTrans::ungrab() if (!_current_relative_affine.isIdentity()) { // we can have a identity affine // when trying to stretch a perfectly vertical line in horizontal direction, which will not be allowed by the handles; - sp_selection_apply_affine(selection, _current_relative_affine, (_show == SHOW_OUTLINE)? true : false); + sp_object_set_apply_affine(selection, _current_relative_affine, (_show == SHOW_OUTLINE) ? true : false); if (_center) { *_center *= _current_relative_affine; _center_is_set = true; diff --git a/src/sp-object.cpp b/src/sp-object.cpp index ccd70f4cb..27c788d75 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -151,6 +151,9 @@ SPObject::~SPObject() { sp_object_unref(this->_successor, NULL); this->_successor = NULL; } + if (parent) { + parent->children.erase(parent->children.iterator_to(*this)); + } if( style == NULL ) { // style pointer could be NULL if unreffed too many times. diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index b25a70b15..504a5e2ce 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -539,8 +539,8 @@ bool ClipboardManagerImpl::pasteSize(SPDesktop *desktop, bool separately, bool a else { Geom::OptRect sel_size = selection->visualBounds(); if ( sel_size ) { - sp_selection_scale_relative(selection, sel_size->midpoint(), - _getScale(desktop, min, max, *sel_size, apply_x, apply_y)); + sp_object_set_scale_relative(selection, sel_size->midpoint(), + _getScale(desktop, min, max, *sel_size, apply_x, apply_y)); } } pasted = true; diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 4ab007408..08fc25464 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -814,7 +814,7 @@ void Export::onAreaToggled () case SELECTION_SELECTION: if ((SP_ACTIVE_DESKTOP->getSelection())->isEmpty() == false) { - sp_selection_get_export_hints (SP_ACTIVE_DESKTOP->getSelection(), filename, &xdpi, &ydpi); + sp_object_set_get_export_hints(SP_ACTIVE_DESKTOP->getSelection(), filename, &xdpi, &ydpi); /* If we still don't have a filename -- let's build one that's nice */ diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp index d4a0ffd68..d82b5ded3 100644 --- a/src/ui/dialog/transformation.cpp +++ b/src/ui/dialog/transformation.cpp @@ -723,12 +723,12 @@ void Transformation::applyPageMove(Inkscape::Selection *selection) if (!prefs->getBool("/dialogs/transformation/applyseparately")) { // move selection as a whole if (_check_move_relative.get_active()) { - sp_selection_move_relative(selection, x, y); + sp_object_set_move_relative(selection, x, y); } else { Geom::OptRect bbox = selection->preferredBounds(); if (bbox) { - sp_selection_move_relative(selection, - x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]); + sp_object_set_move_relative(selection, + x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]); } } } else { @@ -791,8 +791,8 @@ void Transformation::applyPageMove(Inkscape::Selection *selection) } else { Geom::OptRect bbox = selection->preferredBounds(); if (bbox) { - sp_selection_move_relative(selection, - x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]); + sp_object_set_move_relative(selection, + x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]); } } } @@ -856,7 +856,7 @@ void Transformation::applyPageScale(Inkscape::Selection *selection) double y1 = bbox_pref->midpoint()[Geom::Y] + new_height/2; Geom::Affine scaler = get_scale_transform_for_variable_stroke (*bbox_pref, *bbox_geom, transform_stroke, preserve, x0, y0, x1, y1); - sp_selection_apply_affine(selection, scaler); + sp_object_set_apply_affine(selection, scaler); } } @@ -882,7 +882,7 @@ void Transformation::applyPageRotate(Inkscape::Selection *selection) } else { boost::optional center = selection->center(); if (center) { - sp_selection_rotate_relative(selection, *center, angle); + sp_object_set_rotate_relative(selection, *center, angle); } } @@ -949,7 +949,7 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection) getDesktop()->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Transform matrix is singular, not used.")); return; } - sp_selection_skew_relative(selection, *center, 0.01*skewX, 0.01*skewY); + sp_object_set_skew_relative(selection, *center, 0.01 * skewX, 0.01 * skewY); } else if (_units_skew.isRadial()) { //deg or rad double angleX = _scalar_skew_horizontal.getValue("rad"); double angleY = _scalar_skew_vertical.getValue("rad"); @@ -962,7 +962,7 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection) } double skewX = tan(-angleX); double skewY = tan(angleY); - sp_selection_skew_relative(selection, *center, skewX, skewY); + sp_object_set_skew_relative(selection, *center, skewX, skewY); } else { // absolute displacement double skewX = _scalar_skew_horizontal.getValue("px"); double skewY = _scalar_skew_vertical.getValue("px"); @@ -970,7 +970,7 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection) getDesktop()->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Transform matrix is singular, not used.")); return; } - sp_selection_skew_relative(selection, *center, skewX/height, skewY/width); + sp_object_set_skew_relative(selection, *center, skewX / height, skewY / width); } } } @@ -1003,7 +1003,7 @@ void Transformation::applyPageTransform(Inkscape::Selection *selection) item->updateRepr(); } } else { - sp_selection_apply_affine(selection, displayed); // post-multiply each object's transform + sp_object_set_apply_affine(selection, displayed); // post-multiply each object's transform } DocumentUndo::done(selection->desktop()->getDocument(), SP_VERB_DIALOG_TRANSFORM, diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index d19526105..eb3034ca3 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -1250,7 +1250,7 @@ sp_ui_drag_data_received(GtkWidget *widget, Geom::OptRect sel_bbox = selection->visualBounds(); if (sel_bbox) { Geom::Point m( desktop->point() - sel_bbox->midpoint() ); - sp_selection_move_relative(selection, m, false); + sp_object_set_move_relative(selection, m, false); } } @@ -1916,7 +1916,7 @@ void ContextMenu::MakeGroupMenu(void) void ContextMenu::ActivateGroup(void) { - sp_selection_group_ui(_desktop->selection, _desktop); + sp_selection_group(_desktop->selection, _desktop); } void ContextMenu::ActivateUngroup(void) diff --git a/src/verbs.cpp b/src/verbs.cpp index 8255ea1ea..d6c239e86 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -1133,22 +1133,22 @@ void SelectionVerb::perform(SPAction *action, void *data) sp_selected_path_slice(selection, dt); break; case SP_VERB_SELECTION_TO_FRONT: - sp_selection_raise_to_top_ui(selection, dt); + sp_selection_raise_to_top(selection, dt); break; case SP_VERB_SELECTION_TO_BACK: - sp_selection_lower_to_bottom_ui(selection, dt); + sp_selection_lower_to_bottom(selection, dt); break; case SP_VERB_SELECTION_RAISE: - sp_selection_raise_ui(selection, dt); + sp_selection_raise(selection, dt); break; case SP_VERB_SELECTION_LOWER: - sp_selection_lower_ui(selection, dt); + sp_selection_lower(selection, dt); break; case SP_VERB_SELECTION_GROUP: - sp_selection_group_ui(selection, dt); + sp_selection_group(selection, dt); break; case SP_VERB_SELECTION_UNGROUP: - sp_selection_ungroup_ui(selection, dt); + sp_selection_ungroup(selection, dt); break; case SP_VERB_SELECTION_UNGROUP_POP_SELECTION: sp_selection_ungroup_pop_selection(selection, dt); @@ -1520,7 +1520,7 @@ void ObjectVerb::perform( SPAction *action, void *data) sp_selection_rotate_90(dt, true); break; case SP_VERB_OBJECT_FLATTEN: - sp_selection_remove_transform(dt); + sp_object_set_remove_transform(dt); break; case SP_VERB_OBJECT_FLOW_TEXT: text_flow_into_shape(); @@ -1532,12 +1532,12 @@ void ObjectVerb::perform( SPAction *action, void *data) flowtext_to_text(); break; case SP_VERB_OBJECT_FLIP_HORIZONTAL: - sp_selection_scale_relative(sel, center, Geom::Scale(-1.0, 1.0)); + sp_object_set_scale_relative(sel, center, Geom::Scale(-1.0, 1.0)); DocumentUndo::done(dt->getDocument(), SP_VERB_OBJECT_FLIP_HORIZONTAL, _("Flip horizontally")); break; case SP_VERB_OBJECT_FLIP_VERTICAL: - sp_selection_scale_relative(sel, center, Geom::Scale(1.0, -1.0)); + sp_object_set_scale_relative(sel, center, Geom::Scale(1.0, -1.0)); DocumentUndo::done(dt->getDocument(), SP_VERB_OBJECT_FLIP_VERTICAL, _("Flip vertically")); break; diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp index 9851b0606..322c33cc3 100644 --- a/src/widgets/select-toolbar.cpp +++ b/src/widgets/select-toolbar.cpp @@ -257,7 +257,7 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, GObject *tbl) scaler = get_scale_transform_for_uniform_stroke (*bbox_geom, 0, 0, false, false, x0, y0, x1, y1); } - sp_selection_apply_affine(selection, scaler); + sp_object_set_apply_affine(selection, scaler); DocumentUndo::maybeDone(document, actionkey, SP_VERB_CONTEXT_SELECT, _("Transform by toolbar")); -- cgit v1.2.3 From 3078d10fcf276c0d36975bfd48ef064b46f60b3d Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 27 Jul 2016 17:21:52 +0100 Subject: Disable GTK+ 2 support and delete internal copy of GDL Fixed bugs: - https://launchpad.net/bugs/1424830 - https://launchpad.net/bugs/1606558 (bzr r15023.2.1) --- src/CMakeLists.txt | 6 - src/Makefile.am | 11 - src/libgdl/CMakeLists.txt | 50 - src/libgdl/Makefile_insert | 92 -- src/libgdl/README.gdl-dock | 184 --- src/libgdl/gdl-dock-bar.c | 1049 -------------- src/libgdl/gdl-dock-bar.h | 74 - src/libgdl/gdl-dock-item-button-image.c | 166 --- src/libgdl/gdl-dock-item-button-image.h | 70 - src/libgdl/gdl-dock-item-grip.c | 809 ----------- src/libgdl/gdl-dock-item-grip.h | 77 - src/libgdl/gdl-dock-item.c | 2401 ------------------------------- src/libgdl/gdl-dock-item.h | 223 --- src/libgdl/gdl-dock-master.c | 1011 ------------- src/libgdl/gdl-dock-master.h | 106 -- src/libgdl/gdl-dock-notebook.c | 530 ------- src/libgdl/gdl-dock-notebook.h | 59 - src/libgdl/gdl-dock-object.c | 1027 ------------- src/libgdl/gdl-dock-object.h | 225 --- src/libgdl/gdl-dock-paned.c | 678 --------- src/libgdl/gdl-dock-paned.h | 64 - src/libgdl/gdl-dock-placeholder.c | 827 ----------- src/libgdl/gdl-dock-placeholder.h | 69 - src/libgdl/gdl-dock-tablabel.c | 632 -------- src/libgdl/gdl-dock-tablabel.h | 74 - src/libgdl/gdl-dock.c | 1365 ------------------ src/libgdl/gdl-dock.h | 99 -- src/libgdl/gdl-i18n.c | 43 - src/libgdl/gdl-i18n.h | 72 - src/libgdl/gdl-switcher.c | 1031 ------------- src/libgdl/gdl-switcher.h | 67 - src/libgdl/gdl-win32.c | 42 - src/libgdl/gdl-win32.h | 21 - src/libgdl/gdl.h | 32 - src/libgdl/libgdlmarshal.c | 173 --- src/libgdl/libgdlmarshal.h | 48 - src/libgdl/libgdlmarshal.list | 7 - src/libgdl/libgdltypebuiltins.c | 162 --- src/libgdl/libgdltypebuiltins.h | 38 - src/libgdl/makefile.in | 17 - src/widgets/CMakeLists.txt | 7 +- src/widgets/Makefile_insert | 8 +- 42 files changed, 4 insertions(+), 13742 deletions(-) delete mode 100644 src/libgdl/CMakeLists.txt delete mode 100644 src/libgdl/Makefile_insert delete mode 100644 src/libgdl/README.gdl-dock delete mode 100644 src/libgdl/gdl-dock-bar.c delete mode 100644 src/libgdl/gdl-dock-bar.h delete mode 100644 src/libgdl/gdl-dock-item-button-image.c delete mode 100644 src/libgdl/gdl-dock-item-button-image.h delete mode 100644 src/libgdl/gdl-dock-item-grip.c delete mode 100644 src/libgdl/gdl-dock-item-grip.h delete mode 100644 src/libgdl/gdl-dock-item.c delete mode 100644 src/libgdl/gdl-dock-item.h delete mode 100644 src/libgdl/gdl-dock-master.c delete mode 100644 src/libgdl/gdl-dock-master.h delete mode 100644 src/libgdl/gdl-dock-notebook.c delete mode 100644 src/libgdl/gdl-dock-notebook.h delete mode 100644 src/libgdl/gdl-dock-object.c delete mode 100644 src/libgdl/gdl-dock-object.h delete mode 100644 src/libgdl/gdl-dock-paned.c delete mode 100644 src/libgdl/gdl-dock-paned.h delete mode 100644 src/libgdl/gdl-dock-placeholder.c delete mode 100644 src/libgdl/gdl-dock-placeholder.h delete mode 100644 src/libgdl/gdl-dock-tablabel.c delete mode 100644 src/libgdl/gdl-dock-tablabel.h delete mode 100644 src/libgdl/gdl-dock.c delete mode 100644 src/libgdl/gdl-dock.h delete mode 100644 src/libgdl/gdl-i18n.c delete mode 100644 src/libgdl/gdl-i18n.h delete mode 100644 src/libgdl/gdl-switcher.c delete mode 100644 src/libgdl/gdl-switcher.h delete mode 100644 src/libgdl/gdl-win32.c delete mode 100644 src/libgdl/gdl-win32.h delete mode 100644 src/libgdl/gdl.h delete mode 100644 src/libgdl/libgdlmarshal.c delete mode 100644 src/libgdl/libgdlmarshal.h delete mode 100644 src/libgdl/libgdlmarshal.list delete mode 100644 src/libgdl/libgdltypebuiltins.c delete mode 100644 src/libgdl/libgdltypebuiltins.h delete mode 100644 src/libgdl/makefile.in (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d4ba9b1f0..41e7a7967 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -467,7 +467,6 @@ add_subdirectory(libavoid) add_subdirectory(libcola) add_subdirectory(libcroco) add_subdirectory(inkgc) -add_subdirectory(libgdl) add_subdirectory(libuemf) add_subdirectory(libvpsc) add_subdirectory(livarot) @@ -540,11 +539,6 @@ set(INKSCAPE_TARGET_LIBS ${INKSCAPE_LIBS} ) -if (NOT "${WITH_EXT_GDL}") - # Insert it at the beginning of the list as the windows build fails otherwise - list (INSERT INKSCAPE_TARGET_LIBS 0 "gdl_LIB") -endif() - # Link the inkscape_base library against all external dependencies target_link_libraries(inkscape_base ${INKSCAPE_TARGET_LIBS}) diff --git a/src/Makefile.am b/src/Makefile.am index 087a727de..6e1dabdbd 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -16,16 +16,9 @@ bin_PROGRAMS = inkscape inkview # Libraries which should be compiled by "make" but not installed. # Use this only for libraries that are really standalone, rather than for # source tree subdirectories. - -if !WITH_EXT_GDL -internal_GDL = libgdl/libgdl.a -endif - - noinst_LIBRARIES = \ libcroco/libcroco.a \ libavoid/libavoid.a \ - $(internal_GDL) \ libuemf/libuemf.a \ libcola/libcola.a \ inkgc/libinkgc.a \ @@ -51,7 +44,6 @@ all_libs = \ $(LIBVISIO_LIBS) \ $(LIBCDR_LIBS) \ $(DBUS_LIBS) \ - $(GDL_LIBS) \ $(IMAGEMAGICK_LIBS) \ $(X11_LIBS) @@ -82,7 +74,6 @@ AM_CPPFLAGS = \ $(LIBVISIO_CFLAGS) \ $(LIBCDR_CFLAGS) \ $(DBUS_CFLAGS) \ - $(GDL_CFLAGS) \ $(XFT_CFLAGS) \ $(LCMS_CFLAGS) \ $(POPPLER_CFLAGS) \ @@ -122,7 +113,6 @@ include helper/Makefile_insert include io/Makefile_insert include libcroco/Makefile_insert include inkgc/Makefile_insert -include libgdl/Makefile_insert include libnrtype/Makefile_insert include libavoid/Makefile_insert include livarot/Makefile_insert @@ -160,7 +150,6 @@ EXTRA_DIST += \ io/makefile.in \ libavoid/makefile.in \ libcroco/makefile.in \ - libgdl/makefile.in \ libnrtype/makefile.in \ libuemf/makefile.in \ livarot/makefile.in \ diff --git a/src/libgdl/CMakeLists.txt b/src/libgdl/CMakeLists.txt deleted file mode 100644 index a452320f7..000000000 --- a/src/libgdl/CMakeLists.txt +++ /dev/null @@ -1,50 +0,0 @@ -if (NOT "${WITH_EXT_GDL}") - - set(libgdl_SRC - gdl-dock-bar.c - gdl-dock-item-button-image.c - gdl-dock-item-grip.c - gdl-dock-item.c - gdl-dock-master.c - gdl-dock-notebook.c - gdl-dock-object.c - gdl-dock-paned.c - gdl-dock-placeholder.c - gdl-dock-tablabel.c - gdl-dock.c - gdl-i18n.c - gdl-switcher.c - libgdlmarshal.c - libgdltypebuiltins.c - - - # ------- - # Headers - gdl-dock-bar.h - gdl-dock-item-button-image.h - gdl-dock-item-grip.h - gdl-dock-item.h - gdl-dock-master.h - gdl-dock-notebook.h - gdl-dock-object.h - gdl-dock-paned.h - gdl-dock-placeholder.h - gdl-dock-tablabel.h - gdl-dock.h - gdl-i18n.h - gdl-switcher.h - gdl.h - libgdlmarshal.h - libgdltypebuiltins.h - ) - - if(WIN32) - list(APPEND libgdl_SRC - gdl-win32.c - gdl-win32.h - ) - endif() - - add_inkscape_lib(gdl_LIB "${libgdl_SRC}") - -endif() diff --git a/src/libgdl/Makefile_insert b/src/libgdl/Makefile_insert deleted file mode 100644 index e4cab95fc..000000000 --- a/src/libgdl/Makefile_insert +++ /dev/null @@ -1,92 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -if WITH_EXT_GDL - -EXTRA_DIST += \ - libgdl/gdl-dock-object.h \ - libgdl/gdl-dock-master.h \ - libgdl/gdl-dock.h \ - libgdl/gdl-dock-item.h \ - libgdl/gdl-dock-notebook.h \ - libgdl/gdl-dock-paned.h \ - libgdl/gdl-dock-tablabel.h \ - libgdl/gdl-dock-placeholder.h \ - libgdl/gdl-dock-bar.h \ - libgdl/gdl-i18n.h \ - libgdl/gdl-i18n.c \ - libgdl/gdl-dock-object.c \ - libgdl/gdl-dock-master.c \ - libgdl/gdl-dock.c \ - libgdl/gdl-dock-item.c \ - libgdl/gdl-dock-item-button-image.c \ - libgdl/gdl-dock-item-button-image.h \ - libgdl/gdl-dock-item-grip.h \ - libgdl/gdl-dock-item-grip.c \ - libgdl/gdl-dock-notebook.c \ - libgdl/gdl-dock-paned.c \ - libgdl/gdl-dock-tablabel.c \ - libgdl/gdl-dock-placeholder.c \ - libgdl/gdl-dock-bar.c \ - libgdl/gdl-switcher.h \ - libgdl/gdl-switcher.c \ - libgdl/gdl-win32.h \ - libgdl/gdl-win32.c \ - libgdl/libgdltypebuiltins.h \ - libgdl/libgdltypebuiltins.c \ - libgdl/libgdlmarshal.h \ - libgdl/libgdlmarshal.c \ - libgdl/gdl.h - -else # WITH_EXT_GDL - -libgdl/all: libgdl/libgdl.a - -libgdl/clean: - rm -f libgdl/libgdl.a $(libgdl_gdl_a_OBJECTS) - -# Suppress some non-critical warnings for libgdl. We will drop our forked copy -# of GDL once we upgrade to Gtk+ 3 so it's more important to minimise the number -# of changes we make to GDL than to fix these minor issues in trunk. - -if CC_WNO_UNUSED_BUT_SET_VARIABLE_SUPPORTED -libgdl_libgdl_a_CFLAGS = -Wno-unused-parameter -Wno-sign-compare -Wno-unused-variable -Wno-unused-but-set-variable -Wno-missing-field-initializers $(AM_CFLAGS) -else -libgdl_libgdl_a_CFLAGS = -Wno-unused-parameter -Wno-sign-compare -Wno-unused-variable -Wno-missing-field-initializers $(AM_CFLAGS) -endif - -libgdl_libgdl_a_SOURCES = \ - libgdl/gdl-dock-object.h \ - libgdl/gdl-dock-master.h \ - libgdl/gdl-dock.h \ - libgdl/gdl-dock-item.h \ - libgdl/gdl-dock-notebook.h \ - libgdl/gdl-dock-paned.h \ - libgdl/gdl-dock-tablabel.h \ - libgdl/gdl-dock-placeholder.h \ - libgdl/gdl-dock-bar.h \ - libgdl/gdl-i18n.h \ - libgdl/gdl-i18n.c \ - libgdl/gdl-dock-object.c \ - libgdl/gdl-dock-master.c \ - libgdl/gdl-dock.c \ - libgdl/gdl-dock-item.c \ - libgdl/gdl-dock-item-button-image.c \ - libgdl/gdl-dock-item-button-image.h \ - libgdl/gdl-dock-item-grip.h \ - libgdl/gdl-dock-item-grip.c \ - libgdl/gdl-dock-notebook.c \ - libgdl/gdl-dock-paned.c \ - libgdl/gdl-dock-tablabel.c \ - libgdl/gdl-dock-placeholder.c \ - libgdl/gdl-dock-bar.c \ - libgdl/gdl-switcher.h \ - libgdl/gdl-switcher.c \ - libgdl/gdl-win32.h \ - libgdl/gdl-win32.c \ - libgdl/libgdltypebuiltins.h \ - libgdl/libgdltypebuiltins.c \ - libgdl/libgdlmarshal.h \ - libgdl/libgdlmarshal.c \ - libgdl/gdl.h - -endif diff --git a/src/libgdl/README.gdl-dock b/src/libgdl/README.gdl-dock deleted file mode 100644 index 113926dbe..000000000 --- a/src/libgdl/README.gdl-dock +++ /dev/null @@ -1,184 +0,0 @@ -This file is meant to contain a little documentation about the GdlDock -and related widgets. It's incomplete and probably a bit out of date. -And it probably belongs to a doc/ subdirectory. - -Please send comments to the devtools list (gnome-devtools@gnome.org) -and report bugs to bugzilla (bugzilla.gnome.org). Also check the todo -list at the end of this document. - -Have fun, -Gustavo - - -Overview --------- - -The GdlDock is a hierarchical based docking widget. It is composed of -widgets derived from the abstract class GdlDockObject which defines -the basic interface for docking widgets on top of others. - -The toplevel entries for docks are GdlDock widgets, which in turn hold -a tree of GdlDockItem widgets. For the toplevel docks to be able to -interact with each other (when the user drags items from one place to -another) they're all kept in a user-invisible and automatic object -called the master. To participate in docking operations every -GdlDockObject must have the same master (the binding to the master is -done automatically). The master also keeps track of the manual items -(mostly those created with gdl_dock_*_new functions) which are in the -dock. - -Layout loading/saving service is provided by a separate object called -GdlDockLayout. Currently it stores information in XML format, but -another backend could be easily written. To keep the external XML -file in sync with the dock, monitor the "dirty" property of the layout -object and call gdl_dock_layout_save_to_file when this changes to -TRUE. No other action is required (the layout_changed is monitored by -the layout object for you now). - - -GdlDockObject -============= - -A DockObject has: - -- a master, which manages all the objects in a dock ring ("master" - property, construct only). - -- a name. If the object is manual the name can be used to recall the - object from any other object in the ring ("name" property). - -- a long, descriptive name ("long-name" property). - -A DockObject can be: - -- automatic or manual. If it's automatic it means the lifecycle of - the object is entirely managed by the dock master. If it's manual - in general means the user specified such object, and so it's not to - be destroyed automatically at any time. - -- frozen. In this case any call to reduce on the object has no - immediate effect. When the object is later thawn, any pending - reduce calls are made (maybe leading to the destruction of the - object). - -- attached or detached. In general for dock items, being attached - will mean the item has its widget->parent set. For docks it will - mean they belong to some dock master's ring. In general, automatic - objects which are detached will be destroyed (unless frozen). - -- bound to a master or free. In order to participate in dock - operations, each dock object must be bound to a dock master (which - is a separate, non-gui object). In general, bindings are treated - automatically by the object, and this is entirely true for automatic - objects. For manual objects, the master holds an additional - reference and has structures to store and recall them by nick names. - Normally, a manual object will only be destroyed when it's unbound - from the master. - -- simple or compound. This actually depends on the subclass of the - dock object. The difference is made so we can put restrictions in - how the objects are docked on top of another (e.g. you can't dock a - compound object inside a notebook). If you look at the whole - docking layout as a tree, simple objects are the leaves, while all - the interior nodes are compound. - -- reduced. This is only meaningful for compound objects. If the - number of contained items has decreased to one the compound type - object is no longer necessary to hold the child. In this case the - child is reattached to the object's parent. If the number of - contained items has reached zero, the object is detached and reduce - is called on its parent. For toplevel docks, the object is only - detached if it's automatic. In any case, the future of the object - itself depends on whether it's automatic or manual. - -- requested to possibly dock another object. Depending on the - type's behavior, the object can accept or reject this request. If - it accepts it, it should fill in some additional information - regarding how it will host the peer object. - -- asked to dock another object. Depending on the object's internal - structure and behavior two options can be taken: to dock the object - directly (e.g. a notebook docking another object); or to create an - automatic compound object which will be attached in place of the - actual object, and will host both the original object and the - requestor (e.g. a simple item docking another simple item, which - should create a paned/notebook). The type of the new object will be - decided by the original objet based on the docking position. - - -DETACHING: the action by which an object is unparented. The object is -then ready to be docked in some other place. Newly created objects -are always detached, except for toplevels (which are created attached -by default). An automatic object which is detached gets destroyed -afterwards, since its ref count drops to zero. Floating automatic -toplevels never reach a zero ref count when detached, since the -GtkWindow always keeps a reference to it (and the GtkWindow has a user -reference). That's why floating automatic toplevels are destroyed -when reduced. - -REDUCING: for compound objects, when the number of contained children -drops to one or zero, the container is no longer necessary. In this -case, the object is detached, and any remaining child is reattached to -the object's former parent. The limit for toplevels is one for -automatic objects and zero for manual (i.e. they can even be empty). -For simple (not compound) objects reducing doesn't make sense. - -UNBINDING: to participate in a dock ring, every object must be bound -to a master. The master connects to dock item signals and keeps a -list of bound toplevels. Additionally, a reference is kept for manual -objects (this is so the user doesn't need to keep track of them, but -can perform operations like hiding and such). - - - -GdlDock -======= - -- Properties: - - "floating" (gboolean, construct-only): whether the dock is floating in - its own window or not. - - "default-title" (gchar, read-write): title for new floating docks. - This property is proxied to the master, which truly holds it. - -The title for the floating docks is: the user supplied title -(GdlDockObject's long_name property) if it's set, the default title -(from the master) or an automatically generated title. - - -- Signals: - - "layout-changed": emitted when the user changed the layout of the - dock somehow. - - -TODO LIST -========= - -- Functionality for the item grip: provide a11y - -- Implement notebook tab reordering - -- Implement dock bands for toolbars and menus. - -- A dock-related thing is to build resizable toolbars (something like - the ones Windows have, where the buttons are reflowed according to - the space available). - -- Redesign paneds so they can hold more than two items and resize all - of them at once by using the handle (see if gimpdock does that). - -- Find a way to allow the merging of menu items to the item's popup - menu. Also, there should be a way for the master to insert some - menu items. - -- Bonobo UI synchronizer. - -- Item behavoirs: implement the ones missing and maybe think more of - them (e.g. positions where it's possible to dock the item, etc.) - -- Make a nicer dragbar for the items, with buttons for undocking, - closing, hidding, etc. (See sodipodi, kdevelop) - - diff --git a/src/libgdl/gdl-dock-bar.c b/src/libgdl/gdl-dock-bar.c deleted file mode 100644 index c1fe21872..000000000 --- a/src/libgdl/gdl-dock-bar.c +++ /dev/null @@ -1,1049 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2003 Jeroen Zwartepoorte - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include - -#include "gdl-dock.h" -#include "gdl-dock-master.h" -#include "gdl-dock-bar.h" -#include "libgdltypebuiltins.h" - -enum { - PROP_0, - PROP_MASTER, - PROP_DOCKBAR_STYLE -}; - -/* ----- Private prototypes ----- */ - -static void gdl_dock_bar_class_init (GdlDockBarClass *klass); - -static void gdl_dock_bar_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); -static void gdl_dock_bar_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); - -static void gdl_dock_bar_destroy (GtkObject *object); - -static void gdl_dock_bar_attach (GdlDockBar *dockbar, - GdlDockMaster *master); -static void gdl_dock_bar_remove_item (GdlDockBar *dockbar, - GdlDockItem *item); - -/* ----- Class variables and definitions ----- */ - -struct _GdlDockBarPrivate { - GdlDockMaster *master; - GSList *items; - GtkOrientation orientation; - GdlDockBarStyle dockbar_style; -}; - -/* ----- Private functions ----- */ - -G_DEFINE_TYPE (GdlDockBar, gdl_dock_bar, GTK_TYPE_BOX) - -static void gdl_dock_bar_size_request (GtkWidget *widget, - GtkRequisition *requisition ); -static void gdl_dock_bar_size_allocate (GtkWidget *widget, - GtkAllocation *allocation ); -static void gdl_dock_bar_size_vrequest (GtkWidget *widget, - GtkRequisition *requisition ); -static void gdl_dock_bar_size_vallocate (GtkWidget *widget, - GtkAllocation *allocation ); -static void gdl_dock_bar_size_hrequest (GtkWidget *widget, - GtkRequisition *requisition ); -static void gdl_dock_bar_size_hallocate (GtkWidget *widget, - GtkAllocation *allocation ); -static void update_dock_items (GdlDockBar *dockbar, gboolean full_update); - -void -gdl_dock_bar_class_init (GdlDockBarClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - - g_object_class->get_property = gdl_dock_bar_get_property; - g_object_class->set_property = gdl_dock_bar_set_property; - - gtk_object_class->destroy = gdl_dock_bar_destroy; - - g_object_class_install_property ( - g_object_class, PROP_MASTER, - g_param_spec_object ("master", _("Master"), - _("GdlDockMaster object which the dockbar widget " - "is attached to"), - GDL_TYPE_DOCK_MASTER, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_DOCKBAR_STYLE, - g_param_spec_enum ("dockbar-style", _("Dockbar style"), - _("Dockbar style to show items on it"), - GDL_TYPE_DOCK_BAR_STYLE, - GDL_DOCK_BAR_BOTH, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - - widget_class = GTK_WIDGET_CLASS (klass); - widget_class->size_request = gdl_dock_bar_size_request; - widget_class->size_allocate = gdl_dock_bar_size_allocate; -} - -static void -gdl_dock_bar_init (GdlDockBar *dockbar) -{ - dockbar->_priv = g_new0 (GdlDockBarPrivate, 1); - dockbar->_priv->master = NULL; - dockbar->_priv->items = NULL; - dockbar->_priv->orientation = GTK_ORIENTATION_VERTICAL; - dockbar->_priv->dockbar_style = GDL_DOCK_BAR_BOTH; -} - -static void -gdl_dock_bar_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockBar *dockbar = GDL_DOCK_BAR (object); - - switch (prop_id) { - case PROP_MASTER: - g_value_set_object (value, dockbar->_priv->master); - break; - case PROP_DOCKBAR_STYLE: - g_value_set_enum (value, dockbar->_priv->dockbar_style); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - }; -} - -static void -gdl_dock_bar_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockBar *dockbar = GDL_DOCK_BAR (object); - - switch (prop_id) { - case PROP_MASTER: - gdl_dock_bar_attach (dockbar, g_value_get_object (value)); - break; - case PROP_DOCKBAR_STYLE: - dockbar->_priv->dockbar_style = g_value_get_enum (value); - update_dock_items (dockbar, TRUE); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - }; -} - -static void -on_dock_item_foreach_disconnect (GdlDockItem *item, GdlDockBar *dock_bar) -{ - g_signal_handlers_disconnect_by_func (item, gdl_dock_bar_remove_item, - dock_bar); -} - -static void -gdl_dock_bar_destroy (GtkObject *object) -{ - GdlDockBar *dockbar = GDL_DOCK_BAR (object); - - if (dockbar->_priv) { - GdlDockBarPrivate *priv = dockbar->_priv; - - if (priv->items) { - g_slist_foreach (priv->items, - (GFunc) on_dock_item_foreach_disconnect, - object); - g_slist_free (priv->items); - } - - if (priv->master) { - g_signal_handlers_disconnect_matched (priv->master, - G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, dockbar); - g_object_unref (priv->master); - priv->master = NULL; - } - - dockbar->_priv = NULL; - - g_free (priv); - } - - GTK_OBJECT_CLASS (gdl_dock_bar_parent_class)->destroy (object); -} - -static void -gdl_dock_bar_remove_item (GdlDockBar *dockbar, - GdlDockItem *item) -{ - GdlDockBarPrivate *priv; - GtkWidget *button; - - g_return_if_fail (GDL_IS_DOCK_BAR (dockbar)); - g_return_if_fail (GDL_IS_DOCK_ITEM (item)); - - priv = dockbar->_priv; - - if (g_slist_index (priv->items, item) == -1) { - g_warning ("Item has not been added to the dockbar"); - return; - } - - priv->items = g_slist_remove (priv->items, item); - - button = g_object_get_data (G_OBJECT (item), "GdlDockBarButton"); - g_assert (button != NULL); - gtk_container_remove (GTK_CONTAINER (dockbar), button); - g_object_set_data (G_OBJECT (item), "GdlDockBarButton", NULL); - g_signal_handlers_disconnect_by_func (item, - G_CALLBACK (gdl_dock_bar_remove_item), - dockbar); -} - -static void -gdl_dock_bar_item_clicked (GtkWidget *button, - GdlDockItem *item) -{ - GdlDockBar *dockbar; - GdlDockObject *controller; - - g_return_if_fail (item != NULL); - - dockbar = g_object_get_data (G_OBJECT (item), "GdlDockBar"); - g_assert (dockbar != NULL); - g_object_set_data (G_OBJECT (item), "GdlDockBar", NULL); - - controller = gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (item)); - - GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_ICONIFIED); - gdl_dock_item_show_item (item); - gdl_dock_bar_remove_item (dockbar, item); - gtk_widget_queue_resize (GTK_WIDGET (controller)); -} - -static void -gdl_dock_bar_add_item (GdlDockBar *dockbar, - GdlDockItem *item) -{ - GdlDockBarPrivate *priv; - GtkWidget *button; - gchar *stock_id; - gchar *name; - GdkPixbuf *pixbuf_icon; - GtkWidget *image, *box, *label; - - g_return_if_fail (GDL_IS_DOCK_BAR (dockbar)); - g_return_if_fail (GDL_IS_DOCK_ITEM (item)); - - priv = dockbar->_priv; - - if (g_slist_index (priv->items, item) != -1) { - g_warning ("Item has already been added to the dockbar"); - return; - } - - priv->items = g_slist_append (priv->items, item); - - /* Create a button for the item. */ - button = gtk_button_new (); - gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE); - - if (dockbar->_priv->orientation == GTK_ORIENTATION_HORIZONTAL) - box = gtk_hbox_new (FALSE, 0); - else - box = gtk_vbox_new (FALSE, 0); - - g_object_get (item, "stock-id", &stock_id, "pixbuf-icon", &pixbuf_icon, - "long-name", &name, NULL); - - if (dockbar->_priv->dockbar_style == GDL_DOCK_BAR_TEXT || - dockbar->_priv->dockbar_style == GDL_DOCK_BAR_BOTH) { - label = gtk_label_new (name); - if (dockbar->_priv->orientation == GTK_ORIENTATION_VERTICAL) - gtk_label_set_angle (GTK_LABEL (label), 90); - gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); - } - - /* FIXME: For now AUTO behaves same as BOTH */ - - if (dockbar->_priv->dockbar_style == GDL_DOCK_BAR_ICONS || - dockbar->_priv->dockbar_style == GDL_DOCK_BAR_BOTH || - dockbar->_priv->dockbar_style == GDL_DOCK_BAR_AUTO) { - if (stock_id) { - image = gtk_image_new_from_stock (stock_id, - GTK_ICON_SIZE_SMALL_TOOLBAR); - g_free (stock_id); - } else if (pixbuf_icon) { - image = gtk_image_new_from_pixbuf (pixbuf_icon); - } else { - image = gtk_image_new_from_stock ("gtk-new", - GTK_ICON_SIZE_SMALL_TOOLBAR); - } - gtk_box_pack_start (GTK_BOX (box), image, TRUE, TRUE, 0); - } - - gtk_container_add (GTK_CONTAINER (button), box); - gtk_box_pack_start (GTK_BOX (dockbar), button, FALSE, FALSE, 0); - - gtk_widget_set_tooltip_text (button, name); - g_free (name); - - g_object_set_data (G_OBJECT (item), "GdlDockBar", dockbar); - g_object_set_data (G_OBJECT (item), "GdlDockBarButton", button); - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (gdl_dock_bar_item_clicked), item); - - gtk_widget_show_all (button); - - /* Set up destroy notify */ - g_signal_connect_swapped (item, "destroy", - G_CALLBACK (gdl_dock_bar_remove_item), - dockbar); -} - -static void -build_list (GdlDockObject *object, GList **list) -{ - /* add only items, not toplevels */ - if (GDL_IS_DOCK_ITEM (object)) - *list = g_list_prepend (*list, object); -} - -static void -update_dock_items (GdlDockBar *dockbar, gboolean full_update) -{ - GdlDockMaster *master; - GList *items, *l; - - g_return_if_fail (dockbar != NULL); - - if (!dockbar->_priv->master) - return; - - master = dockbar->_priv->master; - - /* build items list */ - items = NULL; - gdl_dock_master_foreach (master, (GFunc) build_list, &items); - - if (!full_update) { - for (l = items; l != NULL; l = l->next) { - GdlDockItem *item = GDL_DOCK_ITEM (l->data); - - if (g_slist_index (dockbar->_priv->items, item) != -1 && - !GDL_DOCK_ITEM_ICONIFIED (item)) - gdl_dock_bar_remove_item (dockbar, item); - else if (g_slist_index (dockbar->_priv->items, item) == -1 && - GDL_DOCK_ITEM_ICONIFIED (item)) - gdl_dock_bar_add_item (dockbar, item); - } - } else { - for (l = items; l != NULL; l = l->next) { - GdlDockItem *item = GDL_DOCK_ITEM (l->data); - - if (g_slist_index (dockbar->_priv->items, item) != -1) - gdl_dock_bar_remove_item (dockbar, item); - if (GDL_DOCK_ITEM_ICONIFIED (item)) - gdl_dock_bar_add_item (dockbar, item); - } - } - g_list_free (items); -} - -static void -gdl_dock_bar_layout_changed_cb (GdlDockMaster *master, - GdlDockBar *dockbar) -{ - update_dock_items (dockbar, FALSE); -} - -static void -gdl_dock_bar_attach (GdlDockBar *dockbar, - GdlDockMaster *master) -{ - g_return_if_fail (dockbar != NULL); - g_return_if_fail (master == NULL || GDL_IS_DOCK_MASTER (master)); - - if (dockbar->_priv->master) { - g_signal_handlers_disconnect_matched (dockbar->_priv->master, - G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, dockbar); - g_object_unref (dockbar->_priv->master); - } - - dockbar->_priv->master = master; - if (dockbar->_priv->master) { - g_object_ref (dockbar->_priv->master); - g_signal_connect (dockbar->_priv->master, "layout-changed", - G_CALLBACK (gdl_dock_bar_layout_changed_cb), - dockbar); - } - - update_dock_items (dockbar, FALSE); -} - -static void gdl_dock_bar_size_request (GtkWidget *widget, - GtkRequisition *requisition ) -{ - GdlDockBar *dockbar; - - dockbar = GDL_DOCK_BAR (widget); - - /* default to vertical for unknown values */ - switch (dockbar->_priv->orientation) { - case GTK_ORIENTATION_HORIZONTAL: - gdl_dock_bar_size_hrequest (widget, requisition); - break; - case GTK_ORIENTATION_VERTICAL: - default: - gdl_dock_bar_size_vrequest (widget, requisition); - break; - } -} - -static void gdl_dock_bar_size_allocate (GtkWidget *widget, - GtkAllocation *allocation ) -{ - GdlDockBar *dockbar; - - dockbar = GDL_DOCK_BAR (widget); - - /* default to vertical for unknown values */ - switch (dockbar->_priv->orientation) { - case GTK_ORIENTATION_HORIZONTAL: - gdl_dock_bar_size_hallocate (widget, allocation); - break; - case GTK_ORIENTATION_VERTICAL: - default: - gdl_dock_bar_size_vallocate (widget, allocation); - break; - } -} - -static void gdl_dock_bar_size_vrequest (GtkWidget *widget, - GtkRequisition *requisition ) -{ - GtkBox *box; - GtkRequisition child_requisition; - GList *child; - gint nvis_children; - gint height; - guint border_width; - - box = GTK_BOX (widget); - requisition->width = 0; - requisition->height = 0; - nvis_children = 0; - - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - if (gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_widget_size_request (GTK_WIDGET (child->data), &child_requisition); - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if (gtk_box_get_homogeneous (box)) - { - height = child_requisition.height + padding * 2; - requisition->height = MAX (requisition->height, height); - } - else - { - requisition->height += child_requisition.height + padding * 2; - } - - requisition->width = MAX (requisition->width, child_requisition.width); - - nvis_children += 1; - } - } - - if (nvis_children > 0) - { - if (gtk_box_get_homogeneous (box)) - requisition->height *= nvis_children; - requisition->height += (nvis_children - 1) * gtk_box_get_spacing (box); - } - - border_width = gtk_container_get_border_width (GTK_CONTAINER (box)); - requisition->width += border_width * 2; - requisition->height += border_width * 2; - -} - -static void gdl_dock_bar_size_vallocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GtkBox *box; - GList *child; - GtkAllocation child_allocation; - gint nvis_children; - gint nexpand_children; - gint child_height; - gint height; - gint extra; - gint y; - guint border_width; - GtkRequisition requisition; - - box = GTK_BOX (widget); - gtk_widget_set_allocation (widget, allocation); - - gtk_widget_get_requisition (widget, &requisition); - - nvis_children = 0; - nexpand_children = 0; - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - if (gtk_widget_get_visible (GTK_WIDGET(child->data))) - { - nvis_children += 1; - if (expand) - nexpand_children += 1; - } - } - - border_width = gtk_container_get_border_width (GTK_CONTAINER (box)); - - if (nvis_children > 0) - { - if (gtk_box_get_homogeneous (box)) - { - height = (allocation->height - - border_width * 2 - - (nvis_children - 1) * gtk_box_get_spacing (box)); - extra = height / nvis_children; - } - else if (nexpand_children > 0) - { - height = (gint) allocation->height - (gint) requisition.height; - extra = height / nexpand_children; - } - else - { - height = 0; - extra = 0; - } - - y = allocation->y + border_width; - child_allocation.x = allocation->x + border_width; - child_allocation.width = MAX (1, (gint) allocation->width - (gint) border_width * 2); - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if ((pack_type == GTK_PACK_START) && gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - if (gtk_box_get_homogeneous (box)) - { - if (nvis_children == 1) - child_height = height; - else - child_height = extra; - - nvis_children -= 1; - height -= extra; - } - else - { - GtkRequisition child_requisition; - - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - child_height = child_requisition.height + padding * 2; - - if (expand) - { - if (nexpand_children == 1) - child_height += height; - else - child_height += extra; - - nexpand_children -= 1; - height -= extra; - } - } - - if (fill) - { - child_allocation.height = MAX (1, child_height - padding * 2); - child_allocation.y = y + padding; - } - else - { - GtkRequisition child_requisition; - - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - child_allocation.height = child_requisition.height; - child_allocation.y = y + (child_height - child_allocation.height) / 2; - } - - gtk_widget_size_allocate (GTK_WIDGET (child->data), &child_allocation); - - y += child_height + gtk_box_get_spacing (box); - } - } - - y = allocation->y + allocation->height - border_width; - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if ((pack_type == GTK_PACK_END) && gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - GtkRequisition child_requisition; - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - - if (gtk_box_get_homogeneous (box)) - { - if (nvis_children == 1) - child_height = height; - else - child_height = extra; - - nvis_children -= 1; - height -= extra; - } - else - { - child_height = child_requisition.height + padding * 2; - - if (expand) - { - if (nexpand_children == 1) - child_height += height; - else - child_height += extra; - - nexpand_children -= 1; - height -= extra; - } - } - - if (fill) - { - child_allocation.height = MAX (1, child_height - padding * 2); - child_allocation.y = y + padding - child_height; - } - else - { - child_allocation.height = child_requisition.height; - child_allocation.y = y + (child_height - child_allocation.height) / 2 - child_height; - } - - gtk_widget_size_allocate (GTK_WIDGET (child->data), &child_allocation); - - y -= (child_height + gtk_box_get_spacing (box)); - } - } - } -} - -static void gdl_dock_bar_size_hrequest (GtkWidget *widget, - GtkRequisition *requisition ) -{ - GtkBox *box; - GList *child; - gint nvis_children; - gint width; - guint border_width; - - box = GTK_BOX (widget); - requisition->width = 0; - requisition->height = 0; - nvis_children = 0; - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - - if (gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - GtkRequisition child_requisition; - - gtk_widget_size_request (GTK_WIDGET (child->data), &child_requisition); - - if (gtk_box_get_homogeneous (box)) - { - width = child_requisition.width + padding * 2; - requisition->width = MAX (requisition->width, width); - } - else - { - requisition->width += child_requisition.width + padding * 2; - } - - requisition->height = MAX (requisition->height, child_requisition.height); - - nvis_children += 1; - } - } - - if (nvis_children > 0) - { - if (gtk_box_get_homogeneous (box)) - requisition->width *= nvis_children; - requisition->width += (nvis_children - 1) * gtk_box_get_spacing (box); - } - - border_width = gtk_container_get_border_width (GTK_CONTAINER (box)); - requisition->width += border_width * 2; - requisition->height += border_width * 2; -} - -static void gdl_dock_bar_size_hallocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GtkBox *box; - GList *child; - GtkAllocation child_allocation; - gint nvis_children; - gint nexpand_children; - gint child_width; - gint width; - gint extra; - gint x; - guint border_width; - GtkTextDirection direction; - GtkRequisition requisition; - - box = GTK_BOX (widget); - gtk_widget_set_allocation (widget, allocation); - gtk_widget_get_requisition (widget, &requisition); - - direction = gtk_widget_get_direction (widget); - - nvis_children = 0; - nexpand_children = 0; - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if (gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - nvis_children += 1; - if (expand) - nexpand_children += 1; - } - } - - border_width = gtk_container_get_border_width (GTK_CONTAINER (box)); - - if (nvis_children > 0) - { - if (gtk_box_get_homogeneous (box)) - { - width = (allocation->width - - border_width * 2 - - (nvis_children - 1) * gtk_box_get_spacing (box)); - extra = width / nvis_children; - } - else if (nexpand_children > 0) - { - width = (gint) allocation->width - (gint) requisition.width; - extra = width / nexpand_children; - } - else - { - width = 0; - extra = 0; - } - - x = allocation->x + border_width; - child_allocation.y = allocation->y + border_width; - child_allocation.height = MAX (1, (gint) allocation->height - (gint) border_width * 2); - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if ((pack_type == GTK_PACK_START) && gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - if (gtk_box_get_homogeneous (box)) - { - if (nvis_children == 1) - child_width = width; - else - child_width = extra; - - nvis_children -= 1; - width -= extra; - } - else - { - GtkRequisition child_requisition; - - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - - child_width = child_requisition.width + padding * 2; - - if (expand) - { - if (nexpand_children == 1) - child_width += width; - else - child_width += extra; - - nexpand_children -= 1; - width -= extra; - } - } - - if (fill) - { - child_allocation.width = MAX (1, child_width - padding * 2); - child_allocation.x = x + padding; - } - else - { - GtkRequisition child_requisition; - - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - child_allocation.width = child_requisition.width; - child_allocation.x = x + (child_width - child_allocation.width) / 2; - } - - if (direction == GTK_TEXT_DIR_RTL) - child_allocation.x = allocation->x + allocation->width - (child_allocation.x - allocation->x) - child_allocation.width; - - gtk_widget_size_allocate (GTK_WIDGET (child->data), &child_allocation); - - x += child_width + gtk_box_get_spacing (box); - } - } - - x = allocation->x + allocation->width - border_width; - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if ((pack_type == GTK_PACK_END) && gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - GtkRequisition child_requisition; - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - - if (gtk_box_get_homogeneous (box)) - { - if (nvis_children == 1) - child_width = width; - else - child_width = extra; - - nvis_children -= 1; - width -= extra; - } - else - { - child_width = child_requisition.width + padding * 2; - - if (expand) - { - if (nexpand_children == 1) - child_width += width; - else - child_width += extra; - - nexpand_children -= 1; - width -= extra; - } - } - - if (fill) - { - child_allocation.width = MAX (1, child_width - padding * 2); - child_allocation.x = x + padding - child_width; - } - else - { - child_allocation.width = child_requisition.width; - child_allocation.x = x + (child_width - child_allocation.width) / 2 - child_width; - } - - if (direction == GTK_TEXT_DIR_RTL) - child_allocation.x = allocation->x + allocation->width - (child_allocation.x - allocation->x) - child_allocation.width; - - gtk_widget_size_allocate (GTK_WIDGET (child->data), &child_allocation); - - x -= (child_width + gtk_box_get_spacing (box)); - } - } - } -} - -GtkWidget * -gdl_dock_bar_new (GdlDock *dock) -{ - GdlDockMaster *master = NULL; - - /* get the master of the given dock */ - if (dock) - master = GDL_DOCK_OBJECT_GET_MASTER (dock); - - return g_object_new (GDL_TYPE_DOCK_BAR, - "master", master, NULL); -} - -GtkOrientation gdl_dock_bar_get_orientation (GdlDockBar *dockbar) -{ - g_return_val_if_fail (GDL_IS_DOCK_BAR (dockbar), - GTK_ORIENTATION_VERTICAL); - - return dockbar->_priv->orientation; -} - -void gdl_dock_bar_set_orientation (GdlDockBar *dockbar, - GtkOrientation orientation) -{ - g_return_if_fail (GDL_IS_DOCK_BAR (dockbar)); - - dockbar->_priv->orientation = orientation; - - gtk_widget_queue_resize (GTK_WIDGET (dockbar)); -} - -void gdl_dock_bar_set_style(GdlDockBar* dockbar, - GdlDockBarStyle style) -{ - g_object_set(G_OBJECT(dockbar), "dockbar-style", style, NULL); -} - -GdlDockBarStyle gdl_dock_bar_get_style(GdlDockBar* dockbar) -{ - GdlDockBarStyle style; - g_object_get(G_OBJECT(dockbar), "dockbar-style", &style, NULL); - return style; -} diff --git a/src/libgdl/gdl-dock-bar.h b/src/libgdl/gdl-dock-bar.h deleted file mode 100644 index ca6da1d26..000000000 --- a/src/libgdl/gdl-dock-bar.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2003 Jeroen Zwartepoorte - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_BAR_H__ -#define __GDL_DOCK_BAR_H__ - -#include - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_BAR (gdl_dock_bar_get_type ()) -#define GDL_DOCK_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_BAR, GdlDockBar)) -#define GDL_DOCK_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_BAR, GdlDockBarClass)) -#define GDL_IS_DOCK_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_BAR)) -#define GDL_IS_DOCK_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_BAR)) -#define GDL_DOCK_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_BAR, GdlDockBarClass)) - -/* data types & structures */ -typedef struct _GdlDockBar GdlDockBar; -typedef struct _GdlDockBarClass GdlDockBarClass; -typedef struct _GdlDockBarPrivate GdlDockBarPrivate; - -typedef enum { - GDL_DOCK_BAR_ICONS, - GDL_DOCK_BAR_TEXT, - GDL_DOCK_BAR_BOTH, - GDL_DOCK_BAR_AUTO -} GdlDockBarStyle; - -struct _GdlDockBar { - GtkBox parent; - - GdlDock *dock; - - GdlDockBarPrivate *_priv; -}; - -struct _GdlDockBarClass { - GtkVBoxClass parent_class; -}; - -GType gdl_dock_bar_get_type (void); - -GtkWidget *gdl_dock_bar_new (GdlDock *dock); - -GtkOrientation gdl_dock_bar_get_orientation (GdlDockBar *dockbar); -void gdl_dock_bar_set_orientation (GdlDockBar *dockbar, - GtkOrientation orientation); -void gdl_dock_bar_set_style (GdlDockBar *dockbar, - GdlDockBarStyle style); -GdlDockBarStyle gdl_dock_bar_get_style (GdlDockBar *dockbar); - -G_END_DECLS - -#endif /* __GDL_DOCK_BAR_H__ */ diff --git a/src/libgdl/gdl-dock-item-button-image.c b/src/libgdl/gdl-dock-item-button-image.c deleted file mode 100644 index 77cfe5d6c..000000000 --- a/src/libgdl/gdl-dock-item-button-image.c +++ /dev/null @@ -1,166 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-item-button-image.c - * - * Author: Joel Holdsworth - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "gdl-dock-item-button-image.h" - -#include - -#define ICON_SIZE 12 - -G_DEFINE_TYPE (GdlDockItemButtonImage, - gdl_dock_item_button_image, - GTK_TYPE_WIDGET); - -static gint -gdl_dock_item_button_image_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - GdlDockItemButtonImage *button_image; - GtkStyle *style; - GdkColor *color; - - g_return_val_if_fail (widget != NULL, 0); - button_image = GDL_DOCK_ITEM_BUTTON_IMAGE (widget); - - cairo_t *cr = gdk_cairo_create (event->window); - cairo_translate (cr, event->area.x, event->area.y); - - /* Set up the pen */ - cairo_set_line_width(cr, 1.0); - - style = gtk_widget_get_style (widget); - g_return_val_if_fail (style != NULL, 0); - color = &style->fg[GTK_STATE_NORMAL]; - cairo_set_source_rgba(cr, color->red / 65535.0, - color->green / 65535.0, color->blue / 65535.0, 0.55); - - /* Draw the icon border */ - cairo_move_to (cr, 10.5, 2.5); - cairo_arc (cr, 10.5, 4.5, 2, -0.5 * M_PI, 0); - cairo_line_to (cr, 12.5, 10.5); - cairo_arc (cr, 10.5, 10.5, 2, 0, 0.5 * M_PI); - cairo_line_to (cr, 4.5, 12.5); - cairo_arc (cr, 4.5, 10.5, 2, 0.5 * M_PI, M_PI); - cairo_line_to (cr, 2.5, 4.5); - cairo_arc (cr, 4.5, 4.5, 2, M_PI, 1.5 * M_PI); - cairo_close_path (cr); - - cairo_stroke (cr); - - /* Draw the icon */ - cairo_new_path (cr); - - switch(button_image->image_type) { - case GDL_DOCK_ITEM_BUTTON_IMAGE_CLOSE: - cairo_move_to (cr, 4.0, 5.5); - cairo_line_to (cr, 4.0, 5.5); - cairo_line_to (cr, 6.0, 7.5); - cairo_line_to (cr, 4.0, 9.5); - cairo_line_to (cr, 5.5, 11.0); - cairo_line_to (cr, 7.5, 9.0); - cairo_line_to (cr, 9.5, 11.0); - cairo_line_to (cr, 11.0, 9.5); - cairo_line_to (cr, 9.0, 7.5); - cairo_line_to (cr, 11.0, 5.5); - cairo_line_to (cr, 9.5, 4.0); - cairo_line_to (cr, 7.5, 6.0); - cairo_line_to (cr, 5.5, 4.0); - cairo_close_path (cr); - break; - - case GDL_DOCK_ITEM_BUTTON_IMAGE_ICONIFY: - if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL) { - cairo_move_to (cr, 4.5, 7.5); - cairo_line_to (cr, 10.0, 4.75); - cairo_line_to (cr, 10.0, 10.25); - cairo_close_path (cr); - } else { - cairo_move_to (cr, 10.5, 7.5); - cairo_line_to (cr, 5, 4.75); - cairo_line_to (cr, 5, 10.25); - cairo_close_path (cr); - } - break; - - default: - break; - } - - cairo_fill (cr); - - /* Finish up */ - cairo_destroy (cr); - - return 0; -} - -static void -gdl_dock_item_button_image_init ( - GdlDockItemButtonImage *button_image) -{ - gtk_widget_set_has_window (GTK_WIDGET (button_image), FALSE); -} - -static void -gdl_dock_item_button_image_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - g_return_if_fail (GDL_IS_DOCK_ITEM_BUTTON_IMAGE (widget)); - g_return_if_fail (requisition != NULL); - - requisition->width = ICON_SIZE; - requisition->height = ICON_SIZE; -} - -static void -gdl_dock_item_button_image_class_init ( - GdlDockItemButtonImageClass *klass) -{ - //GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - //GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - widget_class->expose_event = - gdl_dock_item_button_image_expose; - widget_class->size_request = - gdl_dock_item_button_image_size_request; -} - -/* ----- Public interface ----- */ - -/** - * gdl_dock_item_button_image_new: - * @image_type: Specifies what type of image the widget should - * display - * - * Creates a new GDL dock button image object. - * Returns: The newly created dock item button image widget. - **/ -GtkWidget* -gdl_dock_item_button_image_new (GdlDockItemButtonImageType image_type) -{ - GdlDockItemButtonImage *button_image = g_object_new ( - GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE, NULL); - button_image->image_type = image_type; - - return GTK_WIDGET (button_image); -} diff --git a/src/libgdl/gdl-dock-item-button-image.h b/src/libgdl/gdl-dock-item-button-image.h deleted file mode 100644 index ce0c6faaf..000000000 --- a/src/libgdl/gdl-dock-item-button-image.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-item-button-image.h - * - * Author: Joel Holdsworth - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GDL_DOCK_ITEM_BUTTON_IMAGE_H_ -#define _GDL_DOCK_ITEM_BUTTON_IMAGE_H_ - -#include - -G_BEGIN_DECLS - -/* Standard Macros */ -#define GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE \ - (gdl_dock_item_button_image_get_type()) -#define GDL_DOCK_ITEM_BUTTON_IMAGE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE, GdlDockItemButtonImage)) -#define GDL_DOCK_ITEM_BUTTON_IMAGE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE, GdlDockItemButtonImageClass)) -#define GDL_IS_DOCK_ITEM_BUTTON_IMAGE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE)) -#define GDL_IS_DOCK_ITEM_BUTTON_IMAGE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE)) -#define GDL_DOCK_ITEM_BUTTON_IMAGE_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE, GdlDockItemButtonImageClass)) - -/* Data Types & Structures */ -typedef enum { - GDL_DOCK_ITEM_BUTTON_IMAGE_CLOSE, - GDL_DOCK_ITEM_BUTTON_IMAGE_ICONIFY -} GdlDockItemButtonImageType; - -typedef struct _GdlDockItemButtonImage GdlDockItemButtonImage; -typedef struct _GdlDockItemButtonImageClass GdlDockItemButtonImageClass; - -struct _GdlDockItemButtonImage { - GtkWidget parent; - - GdlDockItemButtonImageType image_type; -}; - -struct _GdlDockItemButtonImageClass { - GtkWidgetClass parent_class; -}; - -/* Data Public Functions */ -GType gdl_dock_item_button_image_get_type (void); -GtkWidget *gdl_dock_item_button_image_new ( - GdlDockItemButtonImageType image_type); - -G_END_DECLS - -#endif /* _GDL_DOCK_ITEM_BUTTON_IMAGE_H_ */ diff --git a/src/libgdl/gdl-dock-item-grip.c b/src/libgdl/gdl-dock-item-grip.c deleted file mode 100644 index 9b3810c20..000000000 --- a/src/libgdl/gdl-dock-item-grip.c +++ /dev/null @@ -1,809 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 8 -*- */ -/* - * gdl-dock-item-grip.c - * - * Author: Michael Meeks Copyright (C) 2002 Sun Microsystems, Inc. - * - * Based on BonoboDockItemGrip. Original copyright notice follows. - * - * Copyright (C) 1998 Ettore Perazzoli - * Copyright (C) 1998 Elliot Lee - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include -#include -#include "gdl-dock-item.h" -#include "gdl-dock-item-grip.h" -#include "gdl-dock-item-button-image.h" -#include "gdl-switcher.h" - -#define ALIGN_BORDER 5 -#define DRAG_HANDLE_SIZE 10 - -enum { - PROP_0, - PROP_ITEM -}; - -struct _GdlDockItemGripPrivate { - GtkWidget *label; - - GtkWidget *close_button; - GtkWidget *iconify_button; - - gboolean handle_shown; -}; - -G_DEFINE_TYPE (GdlDockItemGrip, gdl_dock_item_grip, GTK_TYPE_CONTAINER); - -GtkWidget* -gdl_dock_item_create_label_widget(GdlDockItemGrip *grip) -{ - GtkHBox *label_box; - GtkImage *image; - GtkLabel *label; - gchar *stock_id = NULL; - gchar *title = NULL; - GdkPixbuf *pixbuf; - - label_box = (GtkHBox*)gtk_hbox_new (FALSE, 0); - - g_object_get (G_OBJECT (grip->item), "stock-id", &stock_id, NULL); - g_object_get (G_OBJECT (grip->item), "pixbuf-icon", &pixbuf, NULL); - if(stock_id) { - image = GTK_IMAGE(gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU)); - - gtk_widget_show (GTK_WIDGET(image)); - gtk_box_pack_start(GTK_BOX(label_box), GTK_WIDGET(image), FALSE, TRUE, 0); - - g_free (stock_id); - } - else if (pixbuf) { - image = GTK_IMAGE(gtk_image_new_from_pixbuf (pixbuf)); - - gtk_widget_show (GTK_WIDGET(image)); - gtk_box_pack_start(GTK_BOX(label_box), GTK_WIDGET(image), FALSE, TRUE, 0); - } - - g_object_get (G_OBJECT (grip->item), "long-name", &title, NULL); - if (title) { - label = GTK_LABEL(gtk_label_new(title)); - gtk_label_set_ellipsize(label, PANGO_ELLIPSIZE_END); - gtk_label_set_justify(label, GTK_JUSTIFY_LEFT); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_widget_show (GTK_WIDGET(label)); - - if (gtk_widget_get_direction (GTK_WIDGET(grip)) == GTK_TEXT_DIR_RTL) { - gtk_box_pack_end(GTK_BOX(label_box), GTK_WIDGET(label), TRUE, TRUE, 1); - } else { - gtk_box_pack_start(GTK_BOX(label_box), GTK_WIDGET(label), TRUE, TRUE, 1); - } - - g_free(title); - } - - return GTK_WIDGET(label_box); -} - -static gint -gdl_dock_item_grip_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - GdlDockItemGrip *grip; - GtkAllocation allocation; - GdkRectangle handle_area; - GdkRectangle expose_area; - - grip = GDL_DOCK_ITEM_GRIP (widget); - - if(grip->_priv->handle_shown) { - - gtk_widget_get_allocation (widget, &allocation); - - if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL) { - handle_area.x = allocation.x; - handle_area.y = allocation.y; - handle_area.width = DRAG_HANDLE_SIZE; - handle_area.height = allocation.height; - } else { - handle_area.x = allocation.x + allocation.width - DRAG_HANDLE_SIZE; - handle_area.y = allocation.y; - handle_area.width = DRAG_HANDLE_SIZE; - handle_area.height = allocation.height; - } - - if (gdk_rectangle_intersect (&handle_area, &event->area, &expose_area)) { - - gtk_paint_handle (gtk_widget_get_style (widget), - gtk_widget_get_window (widget), - gtk_widget_get_state (widget), - GTK_SHADOW_NONE, &expose_area, widget, - "handlebox", handle_area.x, handle_area.y, - handle_area.width, handle_area.height, - GTK_ORIENTATION_VERTICAL); - - } - - } - -/* see bug #950556: may contribute to regression with GTK2/Quartz */ -#if !defined(GDK_WINDOWING_QUARTZ) - if (gdl_dock_item_or_child_has_focus(grip->item)) { - - gtk_paint_focus (gtk_widget_get_style (widget), - gtk_widget_get_window (widget), - gtk_widget_get_state (widget), - &event->area, widget, - NULL, 0, 0, -1, -1); - } -#endif //GDK_WINDOWING_QUARTZ - - return GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->expose_event (widget, event); -} - -static void -gdl_dock_item_grip_item_notify (GObject *master, - GParamSpec *pspec, - gpointer data) -{ - GdlDockItemGrip *grip; - gboolean cursor; - - grip = GDL_DOCK_ITEM_GRIP (data); - - if ((strcmp (pspec->name, "stock-id") == 0) || - (strcmp (pspec->name, "long-name") == 0)) { - - gdl_dock_item_grip_set_label (grip, - gdl_dock_item_create_label_widget(grip)); - - } else if (strcmp (pspec->name, "behavior") == 0) { - cursor = FALSE; - if (grip->_priv->close_button) { - if (GDL_DOCK_ITEM_CANT_CLOSE (grip->item)) { - gtk_widget_hide (GTK_WIDGET (grip->_priv->close_button)); - } else { - gtk_widget_show (GTK_WIDGET (grip->_priv->close_button)); - cursor = TRUE; - } - } - if (grip->_priv->iconify_button) { - if (GDL_DOCK_ITEM_CANT_ICONIFY (grip->item)) { - gtk_widget_hide (GTK_WIDGET (grip->_priv->iconify_button)); - } else { - gtk_widget_show (GTK_WIDGET (grip->_priv->iconify_button)); - cursor = TRUE; - } - } - if (grip->title_window && !cursor) - gdk_window_set_cursor (grip->title_window, NULL); - - } -} - -static void -gdl_dock_item_grip_destroy (GtkObject *object) -{ - GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP (object); - - if (grip->_priv) { - GdlDockItemGripPrivate *priv = grip->_priv; - - if (priv->label) { - gtk_widget_unparent(grip->_priv->label); - priv->label = NULL; - } - - if (grip->item) - g_signal_handlers_disconnect_by_func (grip->item, - gdl_dock_item_grip_item_notify, - grip); - grip->item = NULL; - - grip->_priv = NULL; - g_free (priv); - } - - GTK_OBJECT_CLASS (gdl_dock_item_grip_parent_class)->destroy (object); -} - -static void -gdl_dock_item_grip_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockItemGrip *grip; - - g_return_if_fail (GDL_IS_DOCK_ITEM_GRIP (object)); - - grip = GDL_DOCK_ITEM_GRIP (object); - - switch (prop_id) { - case PROP_ITEM: - grip->item = g_value_get_object (value); - if (grip->item) { - g_signal_connect (grip->item, "notify::long-name", - G_CALLBACK (gdl_dock_item_grip_item_notify), - grip); - g_signal_connect (grip->item, "notify::stock-id", - G_CALLBACK (gdl_dock_item_grip_item_notify), - grip); - g_signal_connect (grip->item, "notify::behavior", - G_CALLBACK (gdl_dock_item_grip_item_notify), - grip); - - if (!GDL_DOCK_ITEM_CANT_CLOSE (grip->item) && grip->_priv->close_button) - gtk_widget_show (grip->_priv->close_button); - if (!GDL_DOCK_ITEM_CANT_ICONIFY (grip->item) && grip->_priv->iconify_button) - gtk_widget_show (grip->_priv->iconify_button); - } - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_item_grip_close_clicked (GtkWidget *widget, - GdlDockItemGrip *grip) -{ - (void)widget; - g_return_if_fail (grip->item != NULL); - - gdl_dock_item_hide_item (grip->item); -} - -static void -gdl_dock_item_grip_fix_iconify_button (GdlDockItemGrip *grip) -{ - GtkWidget *iconify_button = grip->_priv->iconify_button; - GdkWindow *window = NULL; - GdkEvent *event = NULL; - - GdkModifierType modifiers; - gint x = 0, y = 0; - gboolean ev_ret; - - g_return_if_fail (gtk_widget_get_realized (iconify_button)); - - window = gtk_widget_get_parent_window (iconify_button); - event = gdk_event_new (GDK_LEAVE_NOTIFY); - - g_assert (GDK_IS_WINDOW (window)); - gdk_window_get_pointer (window, &x, &y, &modifiers); - - event->crossing.window = g_object_ref (window); - event->crossing.send_event = FALSE; - event->crossing.subwindow = g_object_ref (window); - event->crossing.time = GDK_CURRENT_TIME; - event->crossing.x = x; - event->crossing.y = y; - event->crossing.x_root = event->crossing.y_root = 0; - event->crossing.mode = GDK_CROSSING_STATE_CHANGED; - event->crossing.detail = GDK_NOTIFY_NONLINEAR; - event->crossing.focus = FALSE; - event->crossing.state = modifiers; - - //GTK_BUTTON (iconify_button)->in_button = FALSE; - g_signal_emit_by_name (iconify_button, "leave-notify-event", - event, &ev_ret, 0); - - gdk_event_free (event); -} - -static void -gdl_dock_item_grip_iconify_clicked (GtkWidget *widget, - GdlDockItemGrip *grip) -{ - GtkWidget *parent; - - g_return_if_fail (grip->item != NULL); - - /* Workaround to unhighlight the iconify button. */ - gdl_dock_item_grip_fix_iconify_button (grip); - - parent = gtk_widget_get_parent (GTK_WIDGET (grip->item)); - if (GDL_IS_SWITCHER (parent)) - { - /* Note: We can not use gtk_container_foreach (parent) here because - * during iconificatoin, the internal children changes in parent. - * Instead we keep a list of items to iconify and iconify them - * one by one. - */ - GList *node; - GList *items = - gtk_container_get_children (GTK_CONTAINER (parent)); - for (node = items; node != NULL; node = node->next) - { - GdlDockItem *item = GDL_DOCK_ITEM (node->data); - if (!GDL_DOCK_ITEM_CANT_ICONIFY (item)) - gdl_dock_item_iconify_item (item); - } - g_list_free (items); - } - else - { - gdl_dock_item_iconify_item (grip->item); - } -} - -static void -gdl_dock_item_grip_init (GdlDockItemGrip *grip) -{ - GtkWidget *image; - - gtk_widget_set_has_window (GTK_WIDGET (grip), FALSE); - - grip->_priv = g_new0 (GdlDockItemGripPrivate, 1); - grip->_priv->label = NULL; - grip->_priv->handle_shown = FALSE; - - /* create the close button */ - gtk_widget_push_composite_child (); - grip->_priv->close_button = gtk_button_new (); - gtk_widget_pop_composite_child (); - - gtk_widget_set_can_focus (grip->_priv->close_button, FALSE); - gtk_widget_set_parent (grip->_priv->close_button, GTK_WIDGET (grip)); - gtk_button_set_relief (GTK_BUTTON (grip->_priv->close_button), GTK_RELIEF_NONE); - gtk_widget_show (grip->_priv->close_button); - - image = gdl_dock_item_button_image_new(GDL_DOCK_ITEM_BUTTON_IMAGE_CLOSE); - gtk_container_add (GTK_CONTAINER (grip->_priv->close_button), image); - gtk_widget_show (image); - - g_signal_connect (G_OBJECT (grip->_priv->close_button), "clicked", - G_CALLBACK (gdl_dock_item_grip_close_clicked), grip); - - /* create the iconify button */ - gtk_widget_push_composite_child (); - grip->_priv->iconify_button = gtk_button_new (); - gtk_widget_pop_composite_child (); - - gtk_widget_set_can_focus (grip->_priv->iconify_button, FALSE); - gtk_widget_set_parent (grip->_priv->iconify_button, GTK_WIDGET (grip)); - gtk_button_set_relief (GTK_BUTTON (grip->_priv->iconify_button), GTK_RELIEF_NONE); - gtk_widget_show (grip->_priv->iconify_button); - - image = gdl_dock_item_button_image_new(GDL_DOCK_ITEM_BUTTON_IMAGE_ICONIFY); - gtk_container_add (GTK_CONTAINER (grip->_priv->iconify_button), image); - gtk_widget_show (image); - - g_signal_connect (G_OBJECT (grip->_priv->iconify_button), "clicked", - G_CALLBACK (gdl_dock_item_grip_iconify_clicked), grip); - - /* set tooltips on the buttons */ - gtk_widget_set_tooltip_text (grip->_priv->iconify_button, - _("Iconify this dock")); - gtk_widget_set_tooltip_text (grip->_priv->close_button, - _("Close this dock")); -} - -static void -gdl_dock_item_grip_realize (GtkWidget *widget) -{ - GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP (widget); - - GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->realize (widget); - - g_return_if_fail (grip->_priv != NULL); - - if (!grip->title_window) { - GtkAllocation allocation; - GdkWindowAttr attributes; - GdkCursor *cursor; - - g_return_if_fail (grip->_priv->label != NULL); - - gtk_widget_get_allocation (grip->_priv->label, &allocation); - - attributes.x = allocation.x; - attributes.y = allocation.y; - attributes.width = allocation.width; - attributes.height = allocation.height; - attributes.window_type = GDK_WINDOW_CHILD; - attributes.wclass = GDK_INPUT_OUTPUT; - attributes.event_mask = GDK_ALL_EVENTS_MASK; - - grip->title_window = gdk_window_new (gtk_widget_get_parent_window (widget), - &attributes, (GDK_WA_X | GDK_WA_Y)); - - gdk_window_set_user_data (grip->title_window, grip); - - /* Unref the ref from parent realize for NO_WINDOW */ - g_object_unref (gtk_widget_get_window (widget)); - - /* Need to ref widget->window, because parent unrealize unrefs it */ - gtk_widget_set_window (widget, g_object_ref (grip->title_window)); - gtk_widget_set_has_window (widget, TRUE); - - /* Unset the background so as to make the colour match the parent window */ - gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, NULL); - - if (GDL_DOCK_ITEM_CANT_CLOSE (grip->item) && - GDL_DOCK_ITEM_CANT_ICONIFY (grip->item)) - cursor = NULL; - else - cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), - GDK_HAND2); - gdk_window_set_cursor (grip->title_window, cursor); - if (cursor) - gdk_cursor_unref (cursor); - } -} - -static void -gdl_dock_item_grip_unrealize (GtkWidget *widget) -{ - GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP (widget); - - if (grip->title_window) { - gtk_widget_set_has_window (widget, FALSE); - gdk_window_set_user_data (grip->title_window, NULL); - gdk_window_destroy (grip->title_window); - grip->title_window = NULL; - } - - GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->unrealize (widget); -} - -static void -gdl_dock_item_grip_map (GtkWidget *widget) -{ - GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP (widget); - - GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->map (widget); - - if (grip->title_window) - gdk_window_show (grip->title_window); -} - -static void -gdl_dock_item_grip_unmap (GtkWidget *widget) -{ - GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP (widget); - - if (grip->title_window) - gdk_window_hide (grip->title_window); - - GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->unmap (widget); -} - -static void -gdl_dock_item_grip_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GtkRequisition child_requisition; - GdlDockItemGrip *grip; - gint layout_height = 0; - guint border_width; - - g_return_if_fail (GDL_IS_DOCK_ITEM_GRIP (widget)); - g_return_if_fail (requisition != NULL); - - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - grip = GDL_DOCK_ITEM_GRIP (widget); - - requisition->width = border_width * 2/* + ALIGN_BORDER*/; - requisition->height = border_width * 2; - - if(grip->_priv->handle_shown) - requisition->width += DRAG_HANDLE_SIZE; - - gtk_widget_size_request (grip->_priv->close_button, &child_requisition); - layout_height = MAX (layout_height, child_requisition.height); - if (gtk_widget_get_visible (grip->_priv->close_button)) { - requisition->width += child_requisition.width; - } - - gtk_widget_size_request (grip->_priv->iconify_button, &child_requisition); - layout_height = MAX (layout_height, child_requisition.height); - if (gtk_widget_get_visible (grip->_priv->iconify_button)) { - requisition->width += child_requisition.width; - } - - gtk_widget_size_request (grip->_priv->label, &child_requisition); - requisition->width += child_requisition.width; - layout_height = MAX (layout_height, child_requisition.height); - - requisition->height += layout_height; -} - -static void -gdl_dock_item_grip_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GdlDockItemGrip *grip; - GtkRequisition close_requisition = { 0, 0 }; - GtkRequisition iconify_requisition = { 0, 0 }; - GtkAllocation child_allocation; - guint border_width; - - g_return_if_fail (GDL_IS_DOCK_ITEM_GRIP (widget)); - g_return_if_fail (allocation != NULL); - - grip = GDL_DOCK_ITEM_GRIP (widget); - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - - GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->size_allocate (widget, allocation); - - gtk_widget_size_request (grip->_priv->close_button, - &close_requisition); - gtk_widget_size_request (grip->_priv->iconify_button, - &iconify_requisition); - - /* Calculate the Minimum Width where buttons will fit */ - int min_width = close_requisition.width + iconify_requisition.width - + border_width * 2; - if(grip->_priv->handle_shown) - min_width += DRAG_HANDLE_SIZE; - const gboolean space_for_buttons = (allocation->width >= min_width); - - /* Set up the rolling child_allocation rectangle */ - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - child_allocation.x = border_width/* + ALIGN_BORDER*/; - else - child_allocation.x = allocation->width - border_width; - child_allocation.y = border_width; - - /* Layout Close Button */ - if (gtk_widget_get_visible (grip->_priv->close_button)) { - - if(space_for_buttons) { - if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL) - child_allocation.x -= close_requisition.width; - - child_allocation.width = close_requisition.width; - child_allocation.height = close_requisition.height; - } else { - child_allocation.width = 0; - } - - gtk_widget_size_allocate (grip->_priv->close_button, &child_allocation); - - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - child_allocation.x += close_requisition.width; - } - - /* Layout Iconify Button */ - if (gtk_widget_get_visible (grip->_priv->iconify_button)) { - - if(space_for_buttons) { - if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL) - child_allocation.x -= iconify_requisition.width; - - child_allocation.width = iconify_requisition.width; - child_allocation.height = iconify_requisition.height; - } else { - child_allocation.width = 0; - } - - gtk_widget_size_allocate (grip->_priv->iconify_button, &child_allocation); - - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - child_allocation.x += iconify_requisition.width; - } - - /* Layout the Grip Handle*/ - if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL) { - child_allocation.width = child_allocation.x; - child_allocation.x = border_width/* + ALIGN_BORDER*/; - - if(grip->_priv->handle_shown) { - child_allocation.x += DRAG_HANDLE_SIZE; - child_allocation.width -= DRAG_HANDLE_SIZE; - } - - } else { - child_allocation.width = allocation->width - - (child_allocation.x - allocation->x)/* - ALIGN_BORDER*/; - - if(grip->_priv->handle_shown) - child_allocation.width -= DRAG_HANDLE_SIZE; - } - - if(child_allocation.width < 0) - child_allocation.width = 0; - - child_allocation.y = border_width; - child_allocation.height = allocation->height - border_width * 2; - if(grip->_priv->label) { - gtk_widget_size_allocate (grip->_priv->label, &child_allocation); - } - - if (grip->title_window) { - gdk_window_move_resize (grip->title_window, - allocation->x, - allocation->y, - allocation->width, - allocation->height); - } -} - -static void -gdl_dock_item_grip_add (GtkContainer *container, - GtkWidget *widget) -{ - g_warning ("gtk_container_add not implemented for GdlDockItemGrip"); -} - -static void -gdl_dock_item_grip_remove (GtkContainer *container, - GtkWidget *widget) -{ - gdl_dock_item_grip_set_label (GDL_DOCK_ITEM_GRIP (container), NULL); -} - -static void -gdl_dock_item_grip_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - GdlDockItemGrip *grip; - - g_return_if_fail (GDL_IS_DOCK_ITEM_GRIP (container)); - grip = GDL_DOCK_ITEM_GRIP (container); - - if (grip->_priv) { - if(grip->_priv->label) { - (* callback) (grip->_priv->label, callback_data); - } - - if (include_internals) { - (* callback) (grip->_priv->close_button, callback_data); - (* callback) (grip->_priv->iconify_button, callback_data); - } - } -} - -static GType -gdl_dock_item_grip_child_type (GtkContainer *container) -{ - return G_TYPE_NONE; -} - -static void -gdl_dock_item_grip_class_init (GdlDockItemGripClass *klass) -{ - GObjectClass *gobject_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - - gobject_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - - gobject_class->set_property = gdl_dock_item_grip_set_property; - - gtk_object_class->destroy = gdl_dock_item_grip_destroy; - - widget_class->expose_event = gdl_dock_item_grip_expose; - widget_class->realize = gdl_dock_item_grip_realize; - widget_class->unrealize = gdl_dock_item_grip_unrealize; - widget_class->map = gdl_dock_item_grip_map; - widget_class->unmap = gdl_dock_item_grip_unmap; - widget_class->size_request = gdl_dock_item_grip_size_request; - widget_class->size_allocate = gdl_dock_item_grip_size_allocate; - - container_class->add = gdl_dock_item_grip_add; - container_class->remove = gdl_dock_item_grip_remove; - container_class->forall = gdl_dock_item_grip_forall; - container_class->child_type = gdl_dock_item_grip_child_type; - - g_object_class_install_property ( - gobject_class, PROP_ITEM, - g_param_spec_object ("item", _("Controlling dock item"), - _("Dockitem which 'owns' this grip"), - GDL_TYPE_DOCK_ITEM, - G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); -} - -static void -gdl_dock_item_grip_showhide_handle (GdlDockItemGrip *grip) -{ - gtk_widget_queue_resize (GTK_WIDGET (grip)); -} - -/* ----- Public interface ----- */ - -/** - * gdl_dock_item_grip_new: - * @item: The dock item that will "own" this grip widget. - * - * Creates a new GDL dock item grip object. - * Returns: The newly created dock item grip widget. - **/ -GtkWidget * -gdl_dock_item_grip_new (GdlDockItem *item) -{ - GdlDockItemGrip *grip = g_object_new (GDL_TYPE_DOCK_ITEM_GRIP, "item", item, - NULL); - - return GTK_WIDGET (grip); -} - -/** - * gdl_dock_item_grip_set_label: - * @grip: The grip that will get it's label widget set. - * @label: The widget that will become the label. - * - * Replaces the current label widget with another widget. - **/ -void -gdl_dock_item_grip_set_label (GdlDockItemGrip *grip, - GtkWidget *label) -{ - g_return_if_fail (grip != NULL); - - if (grip->_priv->label) { - gtk_widget_unparent(grip->_priv->label); - g_object_unref (grip->_priv->label); - grip->_priv->label = NULL; - } - - if (label) { - g_object_ref (label); - gtk_widget_set_parent (label, GTK_WIDGET (grip)); - gtk_widget_show (label); - grip->_priv->label = label; - } -} -/** - * gdl_dock_item_grip_hide_handle: - * @grip: The dock item grip to hide the handle of. - * - * This function hides the dock item's grip widget handle hatching. - **/ -void -gdl_dock_item_grip_hide_handle (GdlDockItemGrip *grip) -{ - g_return_if_fail (grip != NULL); - if (grip->_priv->handle_shown) { - grip->_priv->handle_shown = FALSE; - gdl_dock_item_grip_showhide_handle (grip); - }; -} - -/** - * gdl_dock_item_grip_show_handle: - * @grip: The dock item grip to show the handle of. - * - * This function shows the dock item's grip widget handle hatching. - **/ -void -gdl_dock_item_grip_show_handle (GdlDockItemGrip *grip) -{ - g_return_if_fail (grip != NULL); - if (!grip->_priv->handle_shown) { - grip->_priv->handle_shown = TRUE; - gdl_dock_item_grip_showhide_handle (grip); - }; -} diff --git a/src/libgdl/gdl-dock-item-grip.h b/src/libgdl/gdl-dock-item-grip.h deleted file mode 100644 index a44ef91fb..000000000 --- a/src/libgdl/gdl-dock-item-grip.h +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 8 -*- */ -/* - * gdl-dock-item-grip.h - * - * Author: Michael Meeks Copyright (C) 2002 Sun Microsystems, Inc. - * - * Based on BonoboDockItemGrip. Original copyright notice follows. - * - * Copyright (C) 1998 Ettore Perazzoli - * Copyright (C) 1998 Elliot Lee - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GDL_DOCK_ITEM_GRIP_H_ -#define _GDL_DOCK_ITEM_GRIP_H_ - -#include -#include "libgdl/gdl-dock-item.h" - -G_BEGIN_DECLS - -#define GDL_TYPE_DOCK_ITEM_GRIP (gdl_dock_item_grip_get_type()) -#define GDL_DOCK_ITEM_GRIP(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGrip)) -#define GDL_DOCK_ITEM_GRIP_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass)) -#define GDL_IS_DOCK_ITEM_GRIP(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_ITEM_GRIP)) -#define GDL_IS_DOCK_ITEM_GRIP_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM_GRIP)) -#define GDL_DOCK_ITEM_GRIP_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass)) - -typedef struct _GdlDockItemGrip GdlDockItemGrip; -typedef struct _GdlDockItemGripClass GdlDockItemGripClass; -typedef struct _GdlDockItemGripPrivate GdlDockItemGripPrivate; - -struct _GdlDockItemGrip { - GtkContainer parent; - - GdlDockItem *item; - - GdkWindow *title_window; - - GdlDockItemGripPrivate *_priv; -}; - -struct _GdlDockItemGripClass { - GtkContainerClass parent_class; -}; - -GType gdl_dock_item_grip_get_type (void); -GtkWidget *gdl_dock_item_grip_new (GdlDockItem *item); -void gdl_dock_item_grip_set_label (GdlDockItemGrip *grip, - GtkWidget *label); -void gdl_dock_item_grip_hide_handle (GdlDockItemGrip *grip); -void gdl_dock_item_grip_show_handle (GdlDockItemGrip *grip); - -G_END_DECLS - -#endif /* _GDL_DOCK_ITEM_GRIP_H_ */ diff --git a/src/libgdl/gdl-dock-item.c b/src/libgdl/gdl-dock-item.c deleted file mode 100644 index af630e681..000000000 --- a/src/libgdl/gdl-dock-item.c +++ /dev/null @@ -1,2401 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-item.c - * - * Author: Gustavo Giráldez - * Naba Kumar - * - * Based on GnomeDockItem/BonoboDockItem. Original copyright notice follows. - * - * Copyright (C) 1998 Ettore Perazzoli - * Copyright (C) 1998 Elliot Lee - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include - -#include "gdl-dock.h" -#include "gdl-dock-item.h" -#include "gdl-dock-item-grip.h" -#include "gdl-dock-notebook.h" -#include "gdl-dock-paned.h" -#include "gdl-dock-tablabel.h" -#include "gdl-dock-placeholder.h" -#include "gdl-dock-master.h" -#include "libgdltypebuiltins.h" -#include "libgdlmarshal.h" - -#define NEW_DOCK_ITEM_RATIO 0.3 - -/* ----- Private prototypes ----- */ - -static void gdl_dock_item_class_init (GdlDockItemClass *class); - -static GObject *gdl_dock_item_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param); - -static void gdl_dock_item_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_item_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_dock_item_destroy (GtkObject *object); - -static void gdl_dock_item_add (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_item_remove (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_item_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data); -static GType gdl_dock_item_child_type (GtkContainer *container); - -static void gdl_dock_item_set_focus_child (GtkContainer *container, - GtkWidget *widget); - -static void gdl_dock_item_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void gdl_dock_item_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); -static void gdl_dock_item_map (GtkWidget *widget); -static void gdl_dock_item_unmap (GtkWidget *widget); -static void gdl_dock_item_realize (GtkWidget *widget); -static void gdl_dock_item_style_set (GtkWidget *widget, - GtkStyle *previous_style); -static gint gdl_dock_item_expose (GtkWidget *widget, - GdkEventExpose *event); - -static void gdl_dock_item_move_focus_child (GdlDockItem *item, - GtkDirectionType dir); - -static gint gdl_dock_item_button_changed (GtkWidget *widget, - GdkEventButton *event); -static gint gdl_dock_item_motion (GtkWidget *widget, - GdkEventMotion *event); -static gboolean gdl_dock_item_key_press (GtkWidget *widget, - GdkEventKey *event); - -static gboolean gdl_dock_item_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request); -static void gdl_dock_item_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - -static void gdl_dock_item_popup_menu (GdlDockItem *item, - guint button, - guint32 time); -static void gdl_dock_item_drag_start (GdlDockItem *item); -static void gdl_dock_item_drag_end (GdlDockItem *item, - gboolean cancel); - -static void gdl_dock_item_tab_button (GtkWidget *widget, - GdkEventButton *event, - gpointer data); - -static void gdl_dock_item_hide_cb (GtkWidget *widget, - GdlDockItem *item); - -static void gdl_dock_item_lock_cb (GtkWidget *widget, - GdlDockItem *item); - -static void gdl_dock_item_unlock_cb (GtkWidget *widget, - GdlDockItem *item); - -static void gdl_dock_item_showhide_grip (GdlDockItem *item); - -static void gdl_dock_item_real_set_orientation (GdlDockItem *item, - GtkOrientation orientation); - -static void gdl_dock_param_export_gtk_orientation (const GValue *src, - GValue *dst); -static void gdl_dock_param_import_gtk_orientation (const GValue *src, - GValue *dst); - - - -/* ----- Class variables and definitions ----- */ - -enum { - PROP_0, - PROP_ORIENTATION, - PROP_RESIZE, - PROP_BEHAVIOR, - PROP_LOCKED, - PROP_PREFERRED_WIDTH, - PROP_PREFERRED_HEIGHT -}; - -enum { - DOCK_DRAG_BEGIN, - DOCK_DRAG_MOTION, - DOCK_DRAG_END, - SELECTED, - MOVE_FOCUS_CHILD, - LAST_SIGNAL -}; - -static guint gdl_dock_item_signals [LAST_SIGNAL] = { 0 }; - -#define GDL_DOCK_ITEM_GRIP_SHOWN(item) \ - (GDL_DOCK_ITEM_HAS_GRIP (item)) - -struct _GdlDockItemPrivate { - GtkWidget *menu; - - gboolean grip_shown; - GtkWidget *grip; - guint grip_size; - - GtkWidget *tab_label; - gboolean intern_tab_label; - guint notify_label; - guint notify_stock_id; - - gint preferred_width; - gint preferred_height; - - GdlDockPlaceholder *ph; - - gint start_x, start_y; -}; - -/* FIXME: implement the rest of the behaviors */ - -#define SPLIT_RATIO 0.4 - - -/* ----- Private functions ----- */ - -G_DEFINE_TYPE (GdlDockItem, gdl_dock_item, GDL_TYPE_DOCK_OBJECT); - -static void -add_tab_bindings (GtkBindingSet *binding_set, - GdkModifierType modifiers, - GtkDirectionType direction) -{ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Tab, modifiers, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Tab, modifiers, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); -} - -static void -add_arrow_bindings (GtkBindingSet *binding_set, - guint keysym, - GtkDirectionType direction) -{ - guint keypad_keysym = keysym - GDK_KEY_Left + GDK_KEY_KP_Left; - - gtk_binding_entry_add_signal (binding_set, keysym, 0, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); - gtk_binding_entry_add_signal (binding_set, keysym, GDK_CONTROL_MASK, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); - gtk_binding_entry_add_signal (binding_set, keysym, GDK_CONTROL_MASK, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); - gtk_binding_entry_add_signal (binding_set, keypad_keysym, GDK_CONTROL_MASK, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); -} - -static void -gdl_dock_item_class_init (GdlDockItemClass *klass) -{ - static gboolean style_initialized = FALSE; - - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - GdlDockObjectClass *object_class; - GtkBindingSet *binding_set; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - object_class = GDL_DOCK_OBJECT_CLASS (klass); - - g_object_class->constructor = gdl_dock_item_constructor; - g_object_class->set_property = gdl_dock_item_set_property; - g_object_class->get_property = gdl_dock_item_get_property; - - gtk_object_class->destroy = gdl_dock_item_destroy; - - widget_class->realize = gdl_dock_item_realize; - widget_class->map = gdl_dock_item_map; - widget_class->unmap = gdl_dock_item_unmap; - widget_class->size_request = gdl_dock_item_size_request; - widget_class->size_allocate = gdl_dock_item_size_allocate; - widget_class->style_set = gdl_dock_item_style_set; - widget_class->expose_event = gdl_dock_item_expose; - widget_class->button_press_event = gdl_dock_item_button_changed; - widget_class->button_release_event = gdl_dock_item_button_changed; - widget_class->motion_notify_event = gdl_dock_item_motion; - widget_class->key_press_event = gdl_dock_item_key_press; - - container_class->add = gdl_dock_item_add; - container_class->remove = gdl_dock_item_remove; - container_class->forall = gdl_dock_item_forall; - container_class->child_type = gdl_dock_item_child_type; - container_class->set_focus_child = gdl_dock_item_set_focus_child; - - object_class->is_compound = FALSE; - - object_class->dock_request = gdl_dock_item_dock_request; - object_class->dock = gdl_dock_item_dock; - - /* properties */ - - /** - * GdlDockItem:orientation: - * - * The orientation of the docking item. If the orientation is set to - * #GTK_ORIENTATION_VERTICAL, the grip widget will be shown along - * the top of the edge of item (if it is not hidden). If the - * orientation is set to #GTK_ORIENTATION_HORIZONTAL, the grip - * widget will be shown down the left edge of the item (even if the - * widget text direction is set to RTL). - */ - g_object_class_install_property ( - g_object_class, PROP_ORIENTATION, - g_param_spec_enum ("orientation", _("Orientation"), - _("Orientation of the docking item"), - GTK_TYPE_ORIENTATION, - GTK_ORIENTATION_VERTICAL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - /* --- register exporter/importer for GTK_ORIENTATION */ - g_value_register_transform_func (GTK_TYPE_ORIENTATION, GDL_TYPE_DOCK_PARAM, - gdl_dock_param_export_gtk_orientation); - g_value_register_transform_func (GDL_TYPE_DOCK_PARAM, GTK_TYPE_ORIENTATION, - gdl_dock_param_import_gtk_orientation); - /* --- end of registration */ - - g_object_class_install_property ( - g_object_class, PROP_RESIZE, - g_param_spec_boolean ("resize", _("Resizable"), - _("If set, the dock item can be resized when " - "docked in a GtkPanel widget"), - TRUE, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_BEHAVIOR, - g_param_spec_flags ("behavior", _("Item behavior"), - _("General behavior for the dock item (i.e. " - "whether it can float, if it's locked, etc.)"), - GDL_TYPE_DOCK_ITEM_BEHAVIOR, - GDL_DOCK_ITEM_BEH_NORMAL, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_LOCKED, - g_param_spec_boolean ("locked", _("Locked"), - _("If set, the dock item cannot be dragged around " - "and it doesn't show a grip"), - FALSE, - G_PARAM_READWRITE | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_PREFERRED_WIDTH, - g_param_spec_int ("preferred-width", _("Preferred width"), - _("Preferred width for the dock item"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_PREFERRED_HEIGHT, - g_param_spec_int ("preferred-height", _("Preferred height"), - _("Preferred height for the dock item"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE)); - - /* signals */ - - /** - * GdlDockItem::dock-drag-begin: - * @item: The dock item which is being dragged. - * - * Signals that the dock item has begun to be dragged. - **/ - gdl_dock_item_signals [DOCK_DRAG_BEGIN] = - g_signal_new ("dock-drag-begin", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GdlDockItemClass, dock_drag_begin), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__VOID, - G_TYPE_NONE, - 0); - - /** - * GdlDockItem::dock-drag-motion: - * @item: The dock item which is being dragged. - * @x: The x-position that the dock item has been dragged to. - * @y: The y-position that the dock item has been dragged to. - * - * Signals that a dock item dragging motion event has occured. - **/ - gdl_dock_item_signals [DOCK_DRAG_MOTION] = - g_signal_new ("dock-drag-motion", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GdlDockItemClass, dock_drag_motion), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__INT_INT, - G_TYPE_NONE, - 2, - G_TYPE_INT, - G_TYPE_INT); - - /** - * GdlDockItem::dock-drag-end: - * @item: The dock item which is no longer being dragged. - * @cancel: This value is set to TRUE if the drag was cancelled by - * the user. #cancel is set to FALSE if the drag was accepted. - * - * Signals that the dock item dragging has ended. - **/ - gdl_dock_item_signals [DOCK_DRAG_END] = - g_signal_new ("dock_drag_end", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GdlDockItemClass, dock_drag_end), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__BOOLEAN, - G_TYPE_NONE, - 1, - G_TYPE_BOOLEAN); - - /** - * GdlDockItem::selected: - * - * Signals that this dock has been selected from a switcher. - */ - gdl_dock_item_signals [SELECTED] = - g_signal_new ("selected", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - 0, - NULL, - NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); - - gdl_dock_item_signals [MOVE_FOCUS_CHILD] = - g_signal_new ("move_focus_child", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (GdlDockItemClass, move_focus_child), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__ENUM, - G_TYPE_NONE, - 1, - GTK_TYPE_DIRECTION_TYPE); - - - /* key bindings */ - - binding_set = gtk_binding_set_by_class (klass); - - add_arrow_bindings (binding_set, GDK_KEY_Up, GTK_DIR_UP); - add_arrow_bindings (binding_set, GDK_KEY_Down, GTK_DIR_DOWN); - add_arrow_bindings (binding_set, GDK_KEY_Left, GTK_DIR_LEFT); - add_arrow_bindings (binding_set, GDK_KEY_Right, GTK_DIR_RIGHT); - - add_tab_bindings (binding_set, 0, GTK_DIR_TAB_FORWARD); - add_tab_bindings (binding_set, GDK_CONTROL_MASK, GTK_DIR_TAB_FORWARD); - add_tab_bindings (binding_set, GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); - add_tab_bindings (binding_set, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); - - klass->has_grip = TRUE; - klass->dock_drag_begin = NULL; - klass->dock_drag_motion = NULL; - klass->dock_drag_end = NULL; - klass->move_focus_child = gdl_dock_item_move_focus_child; - klass->set_orientation = gdl_dock_item_real_set_orientation; - - if (!style_initialized) - { - style_initialized = TRUE; - gtk_rc_parse_string ( - "style \"gdl-dock-item-default\" {\n" - "xthickness = 0\n" - "ythickness = 0\n" - "}\n" - "class \"GdlDockItem\" " - "style : gtk \"gdl-dock-item-default\"\n"); - } -} - -static void -gdl_dock_item_init (GdlDockItem *item) -{ - gtk_widget_set_has_window (GTK_WIDGET (item), TRUE); - gtk_widget_set_can_focus (GTK_WIDGET (item), TRUE); - - item->child = NULL; - - item->orientation = GTK_ORIENTATION_VERTICAL; - item->behavior = GDL_DOCK_ITEM_BEH_NORMAL; - - item->resize = TRUE; - - item->dragoff_x = item->dragoff_y = 0; - - item->_priv = g_new0 (GdlDockItemPrivate, 1); - item->_priv->menu = NULL; - - item->_priv->preferred_width = item->_priv->preferred_height = -1; - item->_priv->tab_label = NULL; - item->_priv->intern_tab_label = FALSE; - - item->_priv->ph = NULL; -} - -static void -on_long_name_changed (GObject* item, - GParamSpec* spec, - gpointer user_data) -{ - gchar* long_name; - g_object_get (item, "long-name", &long_name, NULL); - gtk_label_set_label (GTK_LABEL (user_data), long_name); - g_free(long_name); -} - -static void -on_stock_id_changed (GObject* item, - GParamSpec* spec, - gpointer user_data) -{ - gchar* stock_id; - g_object_get (item, "stock_id", &stock_id, NULL); - gtk_image_set_from_stock (GTK_IMAGE (user_data), stock_id, GTK_ICON_SIZE_MENU); - g_free(stock_id); -} - -static GObject * -gdl_dock_item_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param) -{ - GObject *g_object; - - g_object = G_OBJECT_CLASS (gdl_dock_item_parent_class)-> constructor (type, - n_construct_properties, - construct_param); - if (g_object) { - GdlDockItem *item = GDL_DOCK_ITEM (g_object); - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *icon; - gchar* long_name; - gchar* stock_id; - - if (GDL_DOCK_ITEM_HAS_GRIP (item)) { - item->_priv->grip_shown = TRUE; - item->_priv->grip = gdl_dock_item_grip_new (item); - gtk_widget_set_parent (item->_priv->grip, GTK_WIDGET (item)); - gtk_widget_show (item->_priv->grip); - } - else { - item->_priv->grip_shown = FALSE; - } - - g_object_get (g_object, "long-name", &long_name, "stock-id", &stock_id, NULL); - - hbox = gtk_hbox_new (FALSE, 5); - label = gtk_label_new (long_name); - icon = gtk_image_new (); - if (stock_id) - gtk_image_set_from_stock (GTK_IMAGE (icon), stock_id, - GTK_ICON_SIZE_MENU); - gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - - item->_priv->notify_label = - g_signal_connect (item, "notify::long-name", G_CALLBACK (on_long_name_changed), - label); - item->_priv->notify_stock_id = - g_signal_connect (item, "notify::stock-id", G_CALLBACK (on_stock_id_changed), - icon); - - gtk_widget_show_all (hbox); - - gdl_dock_item_set_tablabel (item, hbox); - item->_priv->intern_tab_label = TRUE; - - g_free (long_name); - g_free (stock_id); - } - - return g_object; -} - -static void -gdl_dock_item_set_property (GObject *g_object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (g_object); - - switch (prop_id) { - case PROP_ORIENTATION: - gdl_dock_item_set_orientation (item, g_value_get_enum (value)); - break; - case PROP_RESIZE: - item->resize = g_value_get_boolean (value); - gtk_widget_queue_resize (GTK_WIDGET (item)); - break; - case PROP_BEHAVIOR: - { - GdlDockItemBehavior old_beh = item->behavior; - item->behavior = g_value_get_flags (value); - - if ((old_beh ^ item->behavior) & GDL_DOCK_ITEM_BEH_LOCKED) { - if (GDL_DOCK_OBJECT_GET_MASTER (item)) - g_signal_emit_by_name (GDL_DOCK_OBJECT_GET_MASTER (item), - "layout-changed"); - g_object_notify (g_object, "locked"); - gdl_dock_item_showhide_grip (item); - } - - break; - } - case PROP_LOCKED: - { - GdlDockItemBehavior old_beh = item->behavior; - - if (g_value_get_boolean (value)) - item->behavior |= GDL_DOCK_ITEM_BEH_LOCKED; - else - item->behavior &= ~GDL_DOCK_ITEM_BEH_LOCKED; - - if (old_beh ^ item->behavior) { - gdl_dock_item_showhide_grip (item); - g_object_notify (g_object, "behavior"); - - if (GDL_DOCK_OBJECT_GET_MASTER (item)) - g_signal_emit_by_name (GDL_DOCK_OBJECT_GET_MASTER (item), - "layout-changed"); - } - break; - } - case PROP_PREFERRED_WIDTH: - item->_priv->preferred_width = g_value_get_int (value); - break; - case PROP_PREFERRED_HEIGHT: - item->_priv->preferred_height = g_value_get_int (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (g_object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_item_get_property (GObject *g_object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (g_object); - - switch (prop_id) { - case PROP_ORIENTATION: - g_value_set_enum (value, item->orientation); - break; - case PROP_RESIZE: - g_value_set_boolean (value, item->resize); - break; - case PROP_BEHAVIOR: - g_value_set_flags (value, item->behavior); - break; - case PROP_LOCKED: - g_value_set_boolean (value, !GDL_DOCK_ITEM_NOT_LOCKED (item)); - break; - case PROP_PREFERRED_WIDTH: - g_value_set_int (value, item->_priv->preferred_width); - break; - case PROP_PREFERRED_HEIGHT: - g_value_set_int (value, item->_priv->preferred_height); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (g_object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_item_destroy (GtkObject *object) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - if (item->_priv) { - GdlDockItemPrivate *priv = item->_priv; - - if (priv->tab_label) { - gdl_dock_item_set_tablabel (item, NULL); - }; - if (priv->menu) { - gtk_menu_detach (GTK_MENU (priv->menu)); - priv->menu = NULL; - }; - if (priv->grip) { - gtk_container_remove (GTK_CONTAINER (item), priv->grip); - priv->grip = NULL; - } - if (priv->ph) { - g_object_unref (priv->ph); - priv->ph = NULL; - } - - item->_priv = NULL; - g_free (priv); - } - - GTK_OBJECT_CLASS (gdl_dock_item_parent_class)->destroy (object); -} - -static void -gdl_dock_item_add (GtkContainer *container, - GtkWidget *widget) -{ - GdlDockItem *item; - - g_return_if_fail (GDL_IS_DOCK_ITEM (container)); - - item = GDL_DOCK_ITEM (container); - if (GDL_IS_DOCK_OBJECT (widget)) { - g_warning (_("You can't add a dock object (%p of type %s) inside a %s. " - "Use a GdlDock or some other compound dock object."), - widget, G_OBJECT_TYPE_NAME (widget), G_OBJECT_TYPE_NAME (item)); - return; - } - - if (item->child != NULL) { - g_warning (_("Attempting to add a widget with type %s to a %s, " - "but it can only contain one widget at a time; " - "it already contains a widget of type %s"), - G_OBJECT_TYPE_NAME (widget), - G_OBJECT_TYPE_NAME (item), - G_OBJECT_TYPE_NAME (item->child)); - return; - } - - gtk_widget_set_parent (widget, GTK_WIDGET (item)); - item->child = widget; -} - -static void -gdl_dock_item_remove (GtkContainer *container, - GtkWidget *widget) -{ - GdlDockItem *item; - gboolean was_visible; - - g_return_if_fail (GDL_IS_DOCK_ITEM (container)); - - item = GDL_DOCK_ITEM (container); - if (item->_priv && widget == item->_priv->grip) { - gboolean grip_was_visible = gtk_widget_get_visible (widget); - gtk_widget_unparent (widget); - item->_priv->grip = NULL; - if (grip_was_visible) - gtk_widget_queue_resize (GTK_WIDGET (item)); - return; - } - - if (GDL_DOCK_ITEM_IN_DRAG (item)) { - gdl_dock_item_drag_end (item, TRUE); - } - - g_return_if_fail (item->child == widget); - - was_visible = gtk_widget_get_visible (widget); - - gtk_widget_unparent (widget); - item->child = NULL; - - if (was_visible) - gtk_widget_queue_resize (GTK_WIDGET (container)); -} - -static void -gdl_dock_item_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - GdlDockItem *item = (GdlDockItem *) container; - - g_return_if_fail (callback != NULL); - - if (include_internals && item->_priv->grip) - (* callback) (item->_priv->grip, callback_data); - - if (item->child) - (* callback) (item->child, callback_data); -} - -static GType -gdl_dock_item_child_type (GtkContainer *container) -{ - g_return_val_if_fail (GDL_IS_DOCK_ITEM (container), G_TYPE_NONE); - - if (!GDL_DOCK_ITEM (container)->child) - return GTK_TYPE_WIDGET; - else - return G_TYPE_NONE; -} - -static void -gdl_dock_item_set_focus_child (GtkContainer *container, - GtkWidget *child) -{ - g_return_if_fail (GDL_IS_DOCK_ITEM (container)); - - if (GTK_CONTAINER_CLASS (gdl_dock_item_parent_class)->set_focus_child) { - (* GTK_CONTAINER_CLASS (gdl_dock_item_parent_class)->set_focus_child) (container, child); - } - - gdl_dock_item_showhide_grip (GDL_DOCK_ITEM (container)); -} - -static void -gdl_dock_item_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GdlDockItem *item; - GtkRequisition child_requisition; - GtkRequisition grip_requisition; - GtkStyle *style; - guint border_width; - - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - g_return_if_fail (requisition != NULL); - - item = GDL_DOCK_ITEM (widget); - - /* If our child is not visible, we still request its size, since - we won't have any useful hint for our size otherwise. */ - if (item->child) - gtk_widget_size_request (item->child, &child_requisition); - else { - child_requisition.width = 0; - child_requisition.height = 0; - } - - if (item->orientation == GTK_ORIENTATION_HORIZONTAL) { - if (GDL_DOCK_ITEM_GRIP_SHOWN (item)) { - gtk_widget_size_request (item->_priv->grip, &grip_requisition); - requisition->width = grip_requisition.width; - } else { - requisition->width = 0; - } - - if (item->child) { - requisition->width += child_requisition.width; - requisition->height = child_requisition.height; - } else - requisition->height = 0; - } else { - if (GDL_DOCK_ITEM_GRIP_SHOWN (item)) { - gtk_widget_size_request (item->_priv->grip, &grip_requisition); - requisition->height = grip_requisition.height; - } else { - requisition->height = 0; - } - - if (item->child) { - requisition->width = child_requisition.width; - requisition->height += child_requisition.height; - } else - requisition->width = 0; - } - - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - style = gtk_widget_get_style (widget); - - requisition->width += (border_width + style->xthickness) * 2; - requisition->height += (border_width + style->ythickness) * 2; - - //gtk_widget_size_request (widget, requisition); -} - -static void -gdl_dock_item_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GdlDockItem *item; - - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - g_return_if_fail (allocation != NULL); - - item = GDL_DOCK_ITEM (widget); - - gtk_widget_set_allocation (widget, allocation); - - /* Once size is allocated, preferred size is no longer necessary */ - item->_priv->preferred_height = -1; - item->_priv->preferred_width = -1; - - if (gtk_widget_get_realized (widget)) - gdk_window_move_resize (gtk_widget_get_window (widget), - allocation->x, - allocation->y, - allocation->width, - allocation->height); - - if (item->child && gtk_widget_get_visible (item->child)) { - GtkAllocation child_allocation; - GtkStyle *style; - guint border_width; - - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - style = gtk_widget_get_style (widget); - - child_allocation.x = border_width + style->xthickness; - child_allocation.y = border_width + style->ythickness; - child_allocation.width = allocation->width - - 2 * (border_width + style->xthickness); - child_allocation.height = allocation->height - - 2 * (border_width + style->ythickness); - - if (GDL_DOCK_ITEM_GRIP_SHOWN (item)) { - GtkAllocation grip_alloc = child_allocation; - GtkRequisition grip_req; - - gtk_widget_size_request (item->_priv->grip, &grip_req); - - if (item->orientation == GTK_ORIENTATION_HORIZONTAL) { - child_allocation.x += grip_req.width; - child_allocation.width -= grip_req.width; - grip_alloc.width = grip_req.width; - } else { - child_allocation.y += grip_req.height; - child_allocation.height -= grip_req.height; - grip_alloc.height = grip_req.height; - } - if (item->_priv->grip) - gtk_widget_size_allocate (item->_priv->grip, &grip_alloc); - } - /* Allocation can't be negative */ - if (child_allocation.width < 0) - child_allocation.width = 0; - if (child_allocation.height < 0) - child_allocation.height = 0; - gtk_widget_size_allocate (item->child, &child_allocation); - } -} - -static void -gdl_dock_item_map (GtkWidget *widget) -{ - GdlDockItem *item; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - gtk_widget_set_mapped (widget, TRUE); - - item = GDL_DOCK_ITEM (widget); - - gdk_window_show (gtk_widget_get_window (widget)); - - if (item->child - && gtk_widget_get_visible (item->child) - && !gtk_widget_get_mapped (item->child)) - gtk_widget_map (item->child); - - if (item->_priv->grip - && gtk_widget_get_visible (GTK_WIDGET (item->_priv->grip)) - && !gtk_widget_get_mapped (GTK_WIDGET (item->_priv->grip))) - gtk_widget_map (item->_priv->grip); -} - -static void -gdl_dock_item_unmap (GtkWidget *widget) -{ - GdlDockItem *item; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - gtk_widget_set_mapped (widget, FALSE); - - item = GDL_DOCK_ITEM (widget); - - gdk_window_hide (gtk_widget_get_window (widget)); - - if (item->_priv->grip) - gtk_widget_unmap (item->_priv->grip); -} - -static void -gdl_dock_item_realize (GtkWidget *widget) -{ - GdlDockItem *item; - GtkAllocation allocation; - GdkWindow *window; - GdkWindowAttr attributes; - gint attributes_mask; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - item = GDL_DOCK_ITEM (widget); - - gtk_widget_set_realized (widget, TRUE); - - /* widget window */ - gtk_widget_get_allocation (widget, &allocation); - attributes.x = allocation.x; - attributes.y = allocation.y; - attributes.width = allocation.width; - attributes.height = allocation.height; - attributes.window_type = GDK_WINDOW_CHILD; - attributes.wclass = GDK_INPUT_OUTPUT; - attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); - attributes.event_mask = (gtk_widget_get_events (widget) | - GDK_EXPOSURE_MASK | - GDK_BUTTON1_MOTION_MASK | - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK); - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; - window = gdk_window_new (gtk_widget_get_parent_window (widget), - &attributes, attributes_mask); - gtk_widget_set_window (widget, window); - gdk_window_set_user_data (window, widget); - - gtk_widget_style_attach (widget); - gtk_style_set_background (gtk_widget_get_style (widget), window, - gtk_widget_get_state (GTK_WIDGET (item))); - gdk_window_set_back_pixmap (window, NULL, TRUE); - - if (item->child) - gtk_widget_set_parent_window (item->child, window); - - if (item->_priv->grip) - gtk_widget_set_parent_window (item->_priv->grip, window); -} - -static void -gdl_dock_item_style_set (GtkWidget *widget, - GtkStyle *previous_style) -{ - GdkWindow *window; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - if (gtk_widget_get_realized (widget) && - gtk_widget_get_has_window (widget)) - { - window = gtk_widget_get_window (widget); - gtk_style_set_background (gtk_widget_get_style (widget), - window, - gtk_widget_get_state (widget)); - if (gtk_widget_is_drawable (widget)) - gdk_window_clear (window); - } -} - -static void -gdl_dock_item_paint (GtkWidget *widget, - GdkEventExpose *event) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (widget); - - gtk_paint_box (gtk_widget_get_style (widget), - gtk_widget_get_window (widget), - gtk_widget_get_state (widget), - GTK_SHADOW_NONE, - &event->area, widget, - "dockitem", - 0, 0, -1, -1); - -/* see bug #950556: avoid regression with GTK2/Quartz */ -#if !defined(GDK_WINDOWING_QUARTZ) - if (GTK_IS_WIDGET(item->_priv->grip)) - gtk_widget_queue_draw (GTK_WIDGET(item->_priv->grip)); -#endif -} - -static gint -gdl_dock_item_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_ITEM (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - if (gtk_widget_is_drawable (widget) && - event->window == gtk_widget_get_window (widget)) - { - gdl_dock_item_paint (widget, event); - GTK_WIDGET_CLASS (gdl_dock_item_parent_class)->expose_event (widget,event); - } - - return FALSE; -} - -static void -gdl_dock_item_move_focus_child (GdlDockItem *item, - GtkDirectionType dir) -{ - g_return_if_fail (GDL_IS_DOCK_ITEM (item)); - gtk_widget_child_focus (GTK_WIDGET (item->child), dir); -} - -#define EVENT_IN_GRIP_EVENT_WINDOW(ev,gr) \ - ((gr) != NULL && (ev)->window == GDL_DOCK_ITEM_GRIP (gr)->title_window) - -#define EVENT_IN_TABLABEL_EVENT_WINDOW(ev,tl) \ - ((tl) != NULL && (ev)->window == GDL_DOCK_TABLABEL (tl)->event_window) - -static gint -gdl_dock_item_button_changed (GtkWidget *widget, - GdkEventButton *event) -{ - GdlDockItem *item; - GtkAllocation allocation; - GdkCursor *cursor; - gboolean locked; - gboolean event_handled; - gboolean in_handle; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_ITEM (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - item = GDL_DOCK_ITEM (widget); - - if (!EVENT_IN_GRIP_EVENT_WINDOW (event, item->_priv->grip)) - return FALSE; - - locked = !GDL_DOCK_ITEM_NOT_LOCKED (item); - - event_handled = FALSE; - - gtk_widget_get_allocation (item->_priv->grip, &allocation); - - /* Check if user clicked on the drag handle. */ - switch (item->orientation) { - case GTK_ORIENTATION_HORIZONTAL: - in_handle = event->x < allocation.width; - break; - case GTK_ORIENTATION_VERTICAL: - in_handle = event->y < allocation.height; - break; - default: - in_handle = FALSE; - break; - } - - /* Left mousebutton click on dockitem. */ - if (!locked && event->button == 1 && event->type == GDK_BUTTON_PRESS) { - - if (!gdl_dock_item_or_child_has_focus (item)) - gtk_widget_grab_focus (GTK_WIDGET (item)); - - /* Set in_drag flag, grab pointer and call begin drag operation. */ - if (in_handle) { - item->_priv->start_x = event->x; - item->_priv->start_y = event->y; - - GDL_DOCK_ITEM_SET_FLAGS (item, GDL_DOCK_IN_PREDRAG); - - cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), - GDK_FLEUR); - gdk_window_set_cursor (GDL_DOCK_ITEM_GRIP (item->_priv->grip)->title_window, - cursor); - gdk_cursor_unref (cursor); - - event_handled = TRUE; - }; - - } else if (!locked &&event->type == GDK_BUTTON_RELEASE && event->button == 1) { - if (GDL_DOCK_ITEM_IN_DRAG (item)) { - /* User dropped widget somewhere. */ - gdl_dock_item_drag_end (item, FALSE); - gtk_widget_grab_focus (GTK_WIDGET (item)); - event_handled = TRUE; - } - else if (GDL_DOCK_ITEM_IN_PREDRAG (item)) { - GDL_DOCK_ITEM_UNSET_FLAGS (item, GDL_DOCK_IN_PREDRAG); - event_handled = TRUE; - } - - /* we check the window since if the item was redocked it's - been unrealized and maybe it's not realized again yet */ - if (GDL_DOCK_ITEM_GRIP (item->_priv->grip)->title_window) { - cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), - GDK_HAND2); - gdk_window_set_cursor (GDL_DOCK_ITEM_GRIP (item->_priv->grip)->title_window, - cursor); - gdk_cursor_unref (cursor); - } - - } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS && in_handle) { - gdl_dock_item_popup_menu (item, event->button, event->time); - event_handled = TRUE; - } - - return event_handled; -} - -static gint -gdl_dock_item_motion (GtkWidget *widget, - GdkEventMotion *event) -{ - GdlDockItem *item; - gint new_x, new_y; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_ITEM (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - item = GDL_DOCK_ITEM (widget); - - if (!EVENT_IN_GRIP_EVENT_WINDOW (event, item->_priv->grip)) - return FALSE; - - if (GDL_DOCK_ITEM_IN_PREDRAG (item)) { - if (gtk_drag_check_threshold (widget, - item->_priv->start_x, - item->_priv->start_y, - event->x, - event->y)) { - GDL_DOCK_ITEM_UNSET_FLAGS (item, GDL_DOCK_IN_PREDRAG); - item->dragoff_x = item->_priv->start_x; - item->dragoff_y = item->_priv->start_y; - - gdl_dock_item_drag_start (item); - } - } - - if (!GDL_DOCK_ITEM_IN_DRAG (item)) - return FALSE; - - new_x = event->x_root; - new_y = event->y_root; - - g_signal_emit (item, gdl_dock_item_signals [DOCK_DRAG_MOTION], - 0, new_x, new_y); - - return TRUE; -} - -static gboolean -gdl_dock_item_key_press (GtkWidget *widget, - GdkEventKey *event) -{ - gboolean event_handled = FALSE; - - if (GDL_DOCK_ITEM_IN_DRAG (widget)) { - if (event->keyval == GDK_Escape) { - gdl_dock_item_drag_end (GDL_DOCK_ITEM (widget), TRUE); - event_handled = TRUE; - } - } - - if (event_handled) - return TRUE; - else - return GTK_WIDGET_CLASS (gdl_dock_item_parent_class)->key_press_event (widget, event); -} - -static gboolean -gdl_dock_item_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request) -{ - GtkAllocation alloc; - gint rel_x, rel_y; - - /* we get (x,y) in our allocation coordinates system */ - - /* Get item's allocation. */ - gtk_widget_get_allocation (GTK_WIDGET (object), &alloc); - - /* Get coordinates relative to our window. */ - rel_x = x - alloc.x; - rel_y = y - alloc.y; - - /* Location is inside. */ - if (rel_x > 0 && rel_x < alloc.width && - rel_y > 0 && rel_y < alloc.height) { - float rx, ry; - GtkRequisition my, other; - gint divider = -1; - - /* this are for calculating the extra docking parameter */ - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (request->applicant), &other); - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (object), &my); - - /* Calculate location in terms of the available space (0-100%). */ - rx = (float) rel_x / alloc.width; - ry = (float) rel_y / alloc.height; - - /* Determine dock location. */ - if (rx < SPLIT_RATIO) { - request->position = GDL_DOCK_LEFT; - divider = other.width; - } - else if (rx > (1 - SPLIT_RATIO)) { - request->position = GDL_DOCK_RIGHT; - rx = 1 - rx; - divider = MAX (0, my.width - other.width); - } - else if (ry < SPLIT_RATIO && ry < rx) { - request->position = GDL_DOCK_TOP; - divider = other.height; - } - else if (ry > (1 - SPLIT_RATIO) && (1 - ry) < rx) { - request->position = GDL_DOCK_BOTTOM; - divider = MAX (0, my.height - other.height); - } - else - request->position = GDL_DOCK_CENTER; - - /* Reset rectangle coordinates to entire item. */ - request->rect.x = 0; - request->rect.y = 0; - request->rect.width = alloc.width; - request->rect.height = alloc.height; - - GdlDockItemBehavior behavior = GDL_DOCK_ITEM(object)->behavior; - - /* Calculate docking indicator rectangle size for new locations. Only - do this when we're not over the item's current location. */ - if (request->applicant != object) { - switch (request->position) { - case GDL_DOCK_TOP: - if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_TOP) - return FALSE; - request->rect.height *= SPLIT_RATIO; - break; - case GDL_DOCK_BOTTOM: - if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_BOTTOM) - return FALSE; - request->rect.y += request->rect.height * (1 - SPLIT_RATIO); - request->rect.height *= SPLIT_RATIO; - break; - case GDL_DOCK_LEFT: - if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_LEFT) - return FALSE; - request->rect.width *= SPLIT_RATIO; - break; - case GDL_DOCK_RIGHT: - if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_RIGHT) - return FALSE; - request->rect.x += request->rect.width * (1 - SPLIT_RATIO); - request->rect.width *= SPLIT_RATIO; - break; - case GDL_DOCK_CENTER: - if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER) - return FALSE; - request->rect.x = request->rect.width * SPLIT_RATIO/2; - request->rect.y = request->rect.height * SPLIT_RATIO/2; - request->rect.width = (request->rect.width * - (1 - SPLIT_RATIO/2)) - request->rect.x; - request->rect.height = (request->rect.height * - (1 - SPLIT_RATIO/2)) - request->rect.y; - break; - default: - break; - } - } - - /* adjust returned coordinates so they are have the same - origin as our window */ - request->rect.x += alloc.x; - request->rect.y += alloc.y; - - /* Set possible target location and return TRUE. */ - request->target = object; - - /* fill-in other dock information */ - if (request->position != GDL_DOCK_CENTER && divider >= 0) { - if (G_IS_VALUE (&request->extra)) - g_value_unset (&request->extra); - g_value_init (&request->extra, G_TYPE_UINT); - g_value_set_uint (&request->extra, (guint) divider); - } - - return TRUE; - } - else /* No docking possible at this location. */ - return FALSE; -} - -static void -gdl_dock_item_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - GdlDockObject *new_parent = NULL; - GdlDockObject *parent, *requestor_parent; - GtkAllocation allocation; - gboolean add_ourselves_first = FALSE; - - guint available_space=0; - gint pref_size=-1; - guint splitpos=0; - GtkRequisition req, object_req, parent_req; - - parent = gdl_dock_object_get_parent_object (object); - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (requestor), &req); - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (object), &object_req); - if (GDL_IS_DOCK_ITEM (parent)) - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (parent), &parent_req); - else - { - gtk_widget_get_allocation (GTK_WIDGET (parent), &allocation); - parent_req.height = allocation.height; - parent_req.width = allocation.width; - } - - /* If preferred size is not set on the requestor (perhaps a new item), - * then estimate and set it. The default value (either 0 or 1 pixels) is - * not any good. - */ - switch (position) { - case GDL_DOCK_TOP: - case GDL_DOCK_BOTTOM: - if (req.width < 2) - { - req.width = object_req.width; - g_object_set (requestor, "preferred-width", req.width, NULL); - } - if (req.height < 2) - { - req.height = NEW_DOCK_ITEM_RATIO * object_req.height; - g_object_set (requestor, "preferred-height", req.height, NULL); - } - if (req.width > 1) - g_object_set (object, "preferred-width", req.width, NULL); - if (req.height > 1) - g_object_set (object, "preferred-height", - object_req.height - req.height, NULL); - break; - case GDL_DOCK_LEFT: - case GDL_DOCK_RIGHT: - if (req.height < 2) - { - req.height = object_req.height; - g_object_set (requestor, "preferred-height", req.height, NULL); - } - if (req.width < 2) - { - req.width = NEW_DOCK_ITEM_RATIO * object_req.width; - g_object_set (requestor, "preferred-width", req.width, NULL); - } - if (req.height > 1) - g_object_set (object, "preferred-height", req.height, NULL); - if (req.width > 1) - g_object_set (object, "preferred-width", - object_req.width - req.width, NULL); - break; - case GDL_DOCK_CENTER: - if (req.height < 2) - { - req.height = object_req.height; - g_object_set (requestor, "preferred-height", req.height, NULL); - } - if (req.width < 2) - { - req.width = object_req.width; - g_object_set (requestor, "preferred-width", req.width, NULL); - } - if (req.height > 1) - g_object_set (object, "preferred-height", req.height, NULL); - if (req.width > 1) - g_object_set (object, "preferred-width", req.width, NULL); - break; - default: - { - GEnumClass *enum_class = G_ENUM_CLASS (g_type_class_ref (GDL_TYPE_DOCK_PLACEMENT)); - GEnumValue *enum_value = g_enum_get_value (enum_class, position); - const gchar *name = enum_value ? enum_value->value_name : NULL; - - g_warning (_("Unsupported docking strategy %s in dock object of type %s"), - name, G_OBJECT_TYPE_NAME (object)); - g_type_class_unref (enum_class); - return; - } - } - switch (position) { - case GDL_DOCK_TOP: - case GDL_DOCK_BOTTOM: - /* get a paned style dock object */ - new_parent = g_object_new (gdl_dock_object_type_from_nick ("paned"), - "orientation", GTK_ORIENTATION_VERTICAL, - "preferred-width", object_req.width, - "preferred-height", object_req.height, - NULL); - add_ourselves_first = (position == GDL_DOCK_BOTTOM); - if (parent) - available_space = parent_req.height; - pref_size = req.height; - break; - case GDL_DOCK_LEFT: - case GDL_DOCK_RIGHT: - new_parent = g_object_new (gdl_dock_object_type_from_nick ("paned"), - "orientation", GTK_ORIENTATION_HORIZONTAL, - "preferred-width", object_req.width, - "preferred-height", object_req.height, - NULL); - add_ourselves_first = (position == GDL_DOCK_RIGHT); - if(parent) - available_space = parent_req.width; - pref_size = req.width; - break; - case GDL_DOCK_CENTER: - /* If the parent is already a DockNotebook, we don't need - to create a new one. */ - if (!GDL_IS_DOCK_NOTEBOOK (parent)) - { - new_parent = g_object_new (gdl_dock_object_type_from_nick ("notebook"), - "preferred-width", object_req.width, - "preferred-height", object_req.height, - NULL); - add_ourselves_first = TRUE; - } - break; - default: - { - GEnumClass *enum_class = G_ENUM_CLASS (g_type_class_ref (GDL_TYPE_DOCK_PLACEMENT)); - GEnumValue *enum_value = g_enum_get_value (enum_class, position); - const gchar *name = enum_value ? enum_value->value_name : NULL; - - g_warning (_("Unsupported docking strategy %s in dock object of type %s"), - name, G_OBJECT_TYPE_NAME (object)); - g_type_class_unref (enum_class); - return; - } - } - - /* freeze the parent so it doesn't reduce automatically */ - if (parent) - gdl_dock_object_freeze (parent); - - - if (new_parent) - { - /* ref ourselves since we could be destroyed when detached */ - g_object_ref (object); - GDL_DOCK_OBJECT_SET_FLAGS (object, GDL_DOCK_IN_REFLOW); - gdl_dock_object_detach (object, FALSE); - - /* freeze the new parent, so reduce won't get called before it's - actually added to our parent */ - gdl_dock_object_freeze (new_parent); - - /* bind the new parent to our master, so the following adds work */ - gdl_dock_object_bind (new_parent, G_OBJECT (GDL_DOCK_OBJECT_GET_MASTER (object))); - - /* add the objects */ - if (add_ourselves_first) { - gtk_container_add (GTK_CONTAINER (new_parent), GTK_WIDGET (object)); - gtk_container_add (GTK_CONTAINER (new_parent), GTK_WIDGET (requestor)); - splitpos = available_space - pref_size; - } else { - gtk_container_add (GTK_CONTAINER (new_parent), GTK_WIDGET (requestor)); - gtk_container_add (GTK_CONTAINER (new_parent), GTK_WIDGET (object)); - splitpos = pref_size; - } - - /* add the new parent to the parent */ - if (parent) - gtk_container_add (GTK_CONTAINER (parent), GTK_WIDGET (new_parent)); - - /* show automatic object */ - if (gtk_widget_get_visible (GTK_WIDGET (object))) - { - gtk_widget_show (GTK_WIDGET (new_parent)); - GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_IN_REFLOW); - } - gdl_dock_object_thaw (new_parent); - - /* use extra docking parameter */ - if (position != GDL_DOCK_CENTER && other_data && - G_VALUE_HOLDS (other_data, G_TYPE_UINT)) { - - g_object_set (G_OBJECT (new_parent), - "position", g_value_get_uint (other_data), - NULL); - } else if (splitpos > 0 && splitpos < available_space) { - g_object_set (G_OBJECT (new_parent), "position", splitpos, NULL); - } - - g_object_unref (object); - } - else - { - /* If the parent is already a DockNotebook, we don't need - to create a new one. */ - gtk_container_add (GTK_CONTAINER (parent), GTK_WIDGET (requestor)); - } - - requestor_parent = gdl_dock_object_get_parent_object (requestor); - if (GDL_IS_DOCK_NOTEBOOK (requestor_parent)) - { - /* Activate the page we just added */ - GdlDockItem* notebook = GDL_DOCK_ITEM (gdl_dock_object_get_parent_object (requestor)); - gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook->child), - gtk_notebook_page_num (GTK_NOTEBOOK (notebook->child), GTK_WIDGET (requestor))); - } - - if (parent) - gdl_dock_object_thaw (parent); -} - -static void -gdl_dock_item_detach_menu (GtkWidget *widget, - GtkMenu *menu) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (widget); - item->_priv->menu = NULL; -} - -static void -gdl_dock_item_popup_menu (GdlDockItem *item, - guint button, - guint32 time) -{ - GtkWidget *mitem; - - if (!item->_priv->menu) { - /* Create popup menu and attach it to the dock item */ - item->_priv->menu = gtk_menu_new (); - gtk_menu_attach_to_widget (GTK_MENU (item->_priv->menu), - GTK_WIDGET (item), - gdl_dock_item_detach_menu); - - if (item->behavior & GDL_DOCK_ITEM_BEH_LOCKED) { - /* UnLock menuitem */ - mitem = gtk_menu_item_new_with_label (_("UnLock")); - gtk_menu_shell_append (GTK_MENU_SHELL (item->_priv->menu), - mitem); - g_signal_connect (mitem, "activate", - G_CALLBACK (gdl_dock_item_unlock_cb), item); - } else { - /* Hide menuitem. */ - mitem = gtk_menu_item_new_with_label (_("Hide")); - gtk_menu_shell_append (GTK_MENU_SHELL (item->_priv->menu), mitem); - g_signal_connect (mitem, "activate", - G_CALLBACK (gdl_dock_item_hide_cb), item); - /* Lock menuitem */ - mitem = gtk_menu_item_new_with_label (_("Lock")); - gtk_menu_shell_append (GTK_MENU_SHELL (item->_priv->menu), mitem); - g_signal_connect (mitem, "activate", - G_CALLBACK (gdl_dock_item_lock_cb), item); - } - } - - /* Show popup menu. */ - gtk_widget_show_all (item->_priv->menu); - gtk_menu_popup (GTK_MENU (item->_priv->menu), NULL, NULL, NULL, NULL, - button, time); -} - -static void -gdl_dock_item_drag_start (GdlDockItem *item) -{ - GdkCursor *fleur; - - if (!gtk_widget_get_realized (GTK_WIDGET (item))) - gtk_widget_realize (GTK_WIDGET (item)); - - GDL_DOCK_ITEM_SET_FLAGS (item, GDL_DOCK_IN_DRAG); - - /* grab the pointer so we receive all mouse events */ - fleur = gdk_cursor_new (GDK_FLEUR); - - /* grab the keyboard & pointer */ - gtk_grab_add (GTK_WIDGET (item)); - - gdk_cursor_unref (fleur); - - g_signal_emit (item, gdl_dock_item_signals [DOCK_DRAG_BEGIN], 0); -} - -static void -gdl_dock_item_drag_end (GdlDockItem *item, - gboolean cancel) -{ - /* Release pointer & keyboard. */ - GtkWidget *widget = gtk_grab_get_current (); - if (widget == NULL) { - widget = GTK_WIDGET (item); - } - gtk_grab_remove (widget); - - g_signal_emit (item, gdl_dock_item_signals [DOCK_DRAG_END], 0, cancel); - - GDL_DOCK_ITEM_UNSET_FLAGS (item, GDL_DOCK_IN_DRAG); -} - -static void -gdl_dock_item_tab_button (GtkWidget *widget, - GdkEventButton *event, - gpointer data) -{ - GdlDockItem *item; - GtkAllocation allocation; - - item = GDL_DOCK_ITEM (data); - - if (!GDL_DOCK_ITEM_NOT_LOCKED (item)) - return; - - switch (event->button) { - case 1: - /* set dragoff_{x,y} as we the user clicked on the middle of the - drag handle */ - switch (item->orientation) { - case GTK_ORIENTATION_HORIZONTAL: - gtk_widget_get_allocation (GTK_WIDGET (data), &allocation); - /*item->dragoff_x = item->_priv->grip_size / 2;*/ - item->dragoff_y = allocation.height / 2; - break; - case GTK_ORIENTATION_VERTICAL: - /*item->dragoff_x = GTK_WIDGET (data)->allocation.width / 2;*/ - item->dragoff_y = item->_priv->grip_size / 2; - break; - }; - gdl_dock_item_drag_start (item); - break; - - case 3: - gdl_dock_item_popup_menu (item, event->button, event->time); - break; - - default: - break; - }; -} - -static void -gdl_dock_item_hide_cb (GtkWidget *widget, - GdlDockItem *item) -{ - GdlDockMaster *master; - - g_return_if_fail (item != NULL); - - master = GDL_DOCK_OBJECT_GET_MASTER (item); - gdl_dock_item_hide_item (item); -} - -static void -gdl_dock_item_lock_cb (GtkWidget *widget, - GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - - gdl_dock_item_lock (item); -} - -static void -gdl_dock_item_unlock_cb (GtkWidget *widget, - GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - - gdl_dock_item_unlock (item); -} - -static void -gdl_dock_item_showhide_grip (GdlDockItem *item) -{ - GdkDisplay *display; - GdkCursor *cursor; - - gdl_dock_item_detach_menu (GTK_WIDGET (item), NULL); - display = gtk_widget_get_display (GTK_WIDGET (item)); - cursor = NULL; - - if (item->_priv->grip) { - if (GDL_DOCK_ITEM_GRIP_SHOWN (item) && - GDL_DOCK_ITEM_NOT_LOCKED(item)) - cursor = gdk_cursor_new_for_display (display, GDK_HAND2); - } - if (item->_priv->grip && GDL_DOCK_ITEM_GRIP (item->_priv->grip)->title_window) - gdk_window_set_cursor (GDL_DOCK_ITEM_GRIP (item->_priv->grip)->title_window, cursor); - - if (cursor) - gdk_cursor_unref (cursor); - - gtk_widget_queue_resize (GTK_WIDGET (item)); -} - -static void -gdl_dock_item_real_set_orientation (GdlDockItem *item, - GtkOrientation orientation) -{ - item->orientation = orientation; - - if (gtk_widget_is_drawable (GTK_WIDGET (item))) - gtk_widget_queue_draw (GTK_WIDGET (item)); - gtk_widget_queue_resize (GTK_WIDGET (item)); -} - - -/* ----- Public interface ----- */ - -/** - * gdl_dock_item_new: - * @name: Unique name for identifying the dock object. - * @long_name: Human readable name for the dock object. - * @behavior: General behavior for the dock item (i.e. whether it can - * float, if it's locked, etc.), as specified by - * #GdlDockItemBehavior flags. - * - * Creates a new dock item widget. - * Returns: The newly created dock item grip widget. - **/ -GtkWidget * -gdl_dock_item_new (const gchar *name, - const gchar *long_name, - GdlDockItemBehavior behavior) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (g_object_new (GDL_TYPE_DOCK_ITEM, - "name", name, - "long-name", long_name, - "behavior", behavior, - NULL)); - GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (item); -} - -/** - * gdl_dock_item_new_with_stock: - * @name: Unique name for identifying the dock object. - * @long_name: Human readable name for the dock object. - * @stock_id: Stock icon for the dock object. - * @behavior: General behavior for the dock item (i.e. whether it can - * float, if it's locked, etc.), as specified by - * #GdlDockItemBehavior flags. - * - * Creates a new dock item grip widget with a given stock id. - * Returns: The newly created dock item grip widget. - **/ -GtkWidget * -gdl_dock_item_new_with_stock (const gchar *name, - const gchar *long_name, - const gchar *stock_id, - GdlDockItemBehavior behavior) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (g_object_new (GDL_TYPE_DOCK_ITEM, - "name", name, - "long-name", long_name, - "stock-id", stock_id, - "behavior", behavior, - NULL)); - GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (item); -} - -GtkWidget * -gdl_dock_item_new_with_pixbuf_icon (const gchar *name, - const gchar *long_name, - const GdkPixbuf *pixbuf_icon, - GdlDockItemBehavior behavior) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (g_object_new (GDL_TYPE_DOCK_ITEM, - "name", name, - "long-name", long_name, - "pixbuf-icon", pixbuf_icon, - "behavior", behavior, - NULL)); - - GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_AUTOMATIC); - gdl_dock_item_set_tablabel (item, gtk_label_new (long_name)); - - return GTK_WIDGET (item); -} - -/* convenient function (and to preserve source compat) */ -/** - * gdl_dock_item_dock_to: - * @item: The dock item that will be relocated to the dock position. - * @target: (allow-none): The dock item that will be used as the point of reference. - * @position: The position to dock #item, relative to #target. - * @docking_param: This value is unused, and will be ignored. - * - * Relocates a dock item to a new location relative to another dock item. - **/ -void -gdl_dock_item_dock_to (GdlDockItem *item, - GdlDockItem *target, - GdlDockPlacement position, - gint docking_param) -{ - g_return_if_fail (item != NULL); - g_return_if_fail (item != target); - g_return_if_fail (target != NULL || position == GDL_DOCK_FLOATING); - g_return_if_fail ((item->behavior & GDL_DOCK_ITEM_BEH_NEVER_FLOATING) == 0 || position != GDL_DOCK_FLOATING); - - if (position == GDL_DOCK_FLOATING || !target) { - GdlDockObject *controller; - - if (!gdl_dock_object_is_bound (GDL_DOCK_OBJECT (item))) { - g_warning (_("Attempt to bind an unbound item %p"), item); - return; - } - - controller = gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (item)); - - /* FIXME: save previous docking position for later - re-docking... does this make sense now? */ - - /* Create new floating dock for widget. */ - item->dragoff_x = item->dragoff_y = 0; - gdl_dock_add_floating_item (GDL_DOCK (controller), - item, 0, 0, -1, -1); - - } else - gdl_dock_object_dock (GDL_DOCK_OBJECT (target), - GDL_DOCK_OBJECT (item), - position, NULL); -} - -/** - * gdl_dock_item_set_orientation: - * @item: The dock item which will get it's orientation set. - * @orientation: The orientation to set the item to. If the orientation - * is set to #GTK_ORIENTATION_VERTICAL, the grip widget will be shown - * along the top of the edge of item (if it is not hidden). If the - * orientation is set to #GTK_ORIENTATION_HORIZONTAL, the grip widget - * will be shown down the left edge of the item (even if the widget - * text direction is set to RTL). - * - * This function sets the layout of the dock item. - **/ -void -gdl_dock_item_set_orientation (GdlDockItem *item, - GtkOrientation orientation) -{ - GParamSpec *pspec; - - g_return_if_fail (item != NULL); - - if (item->orientation != orientation) { - /* push the property down the hierarchy if our child supports it */ - if (item->child != NULL) { - pspec = g_object_class_find_property ( - G_OBJECT_GET_CLASS (item->child), "orientation"); - if (pspec && pspec->value_type == GTK_TYPE_ORIENTATION) - g_object_set (G_OBJECT (item->child), - "orientation", orientation, - NULL); - }; - if (GDL_DOCK_ITEM_GET_CLASS (item)->set_orientation) - GDL_DOCK_ITEM_GET_CLASS (item)->set_orientation (item, orientation); - g_object_notify (G_OBJECT (item), "orientation"); - } -} - -/** - * gdl_dock_item_get_tablabel: - * @item: The dock item from which to get the tab label widget. - * - * Gets the current tab label widget. Note that this label widget is - * only visible when the "switcher-style" property of the #GdlDockMaster - * is set to #GDL_SWITCHER_STYLE_TABS - * - * Returns: Returns the tab label widget. - **/ -GtkWidget * -gdl_dock_item_get_tablabel (GdlDockItem *item) -{ - g_return_val_if_fail (item != NULL, NULL); - g_return_val_if_fail (GDL_IS_DOCK_ITEM (item), NULL); - - return item->_priv->tab_label; -} - -/** - * gdl_dock_item_set_tablabel: - * @item: The dock item which will get it's tab label widget set. - * @tablabel: The widget that will become the tab label. - * - * Replaces the current tab label widget with another widget. Note that - * this label widget is only visible when the "switcher-style" property - * of the #GdlDockMaster is set to #GDL_SWITCHER_STYLE_TABS - **/ -void -gdl_dock_item_set_tablabel (GdlDockItem *item, - GtkWidget *tablabel) -{ - g_return_if_fail (item != NULL); - - if (item->_priv->intern_tab_label) - { - item->_priv->intern_tab_label = FALSE; - g_signal_handler_disconnect (item, item->_priv->notify_label); - g_signal_handler_disconnect (item, item->_priv->notify_stock_id); - } - - if (item->_priv->tab_label) { - /* disconnect and unref the previous tablabel */ - if (GDL_IS_DOCK_TABLABEL (item->_priv->tab_label)) { - g_signal_handlers_disconnect_matched (item->_priv->tab_label, - G_SIGNAL_MATCH_DATA, - 0, 0, NULL, - NULL, item); - g_object_set (item->_priv->tab_label, "item", NULL, NULL); - } - g_object_unref (item->_priv->tab_label); - item->_priv->tab_label = NULL; - } - - if (tablabel) { - g_object_ref_sink (G_OBJECT (tablabel)); - item->_priv->tab_label = tablabel; - if (GDL_IS_DOCK_TABLABEL (tablabel)) { - g_object_set (tablabel, "item", item, NULL); - /* connect to tablabel signal */ - g_signal_connect (tablabel, "button_pressed_handle", - G_CALLBACK (gdl_dock_item_tab_button), item); - } - } -} - -/** - * gdl_dock_item_get_grip: - * @item: The dock item from which to to get the grip of. - * - * This function returns the dock item's grip label widget. - * - * Returns: Returns the current label widget. - **/ -GtkWidget * -gdl_dock_item_get_grip(GdlDockItem *item) -{ - g_return_val_if_fail (item != NULL, NULL); - g_return_val_if_fail (GDL_IS_DOCK_ITEM (item), NULL); - - return item->_priv->grip; -} - -/** - * gdl_dock_item_hide_grip: - * @item: The dock item to hide the grip of. - * - * This function hides the dock item's grip widget. - **/ -void -gdl_dock_item_hide_grip (GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - if (item->_priv->grip_shown) { - item->_priv->grip_shown = FALSE; - gdl_dock_item_showhide_grip (item); - }; - g_warning ("Grips always show unless GDL_DOCK_ITEM_BEH_NO_GRIP is set\n" ); -} - -/** - * gdl_dock_item_show_grip: - * @item: The dock item to show the grip of. - * - * This function shows the dock item's grip widget. - **/ -void -gdl_dock_item_show_grip (GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - if (!item->_priv->grip_shown) { - item->_priv->grip_shown = TRUE; - gdl_dock_item_showhide_grip (item); - }; -} - -/** - * gdl_dock_item_notify_selected: - * @item: the dock item to emit a selected signal on. - * - * This function emits the selected signal. It is to be used by #GdlSwitcher - * to let clients know that this item has been switched to. - **/ -void -gdl_dock_item_notify_selected (GdlDockItem *item) -{ - g_signal_emit (item, gdl_dock_item_signals [SELECTED], 0); -} - -/* convenient function (and to preserve source compat) */ -/** - * gdl_dock_item_bind: - * @item: The item to bind. - * @dock: The #GdlDock widget to bind it to. Note that this widget must - * be a type of #GdlDock. - * - * Binds this dock item to a new dock master. - **/ -void -gdl_dock_item_bind (GdlDockItem *item, - GtkWidget *dock) -{ - g_return_if_fail (item != NULL); - g_return_if_fail (dock == NULL || GDL_IS_DOCK (dock)); - - gdl_dock_object_bind (GDL_DOCK_OBJECT (item), - G_OBJECT (GDL_DOCK_OBJECT_GET_MASTER (dock))); -} - -/* convenient function (and to preserve source compat) */ -/** - * gdl_dock_item_unbind: - * @item: The item to unbind. - * - * Unbinds this dock item from it's dock master. - **/ -void -gdl_dock_item_unbind (GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - - gdl_dock_object_unbind (GDL_DOCK_OBJECT (item)); -} - -/** - * gdl_dock_item_hide_item: - * @item: The dock item to hide. - * - * This function hides the dock item. When dock items are hidden they - * are completely removed from the layout. - * - * The dock item close button causes the panel to be hidden. - **/ -void -gdl_dock_item_hide_item (GdlDockItem *item) -{ - GtkAllocation allocation; - - g_return_if_fail (item != NULL); - - if (!GDL_DOCK_OBJECT_ATTACHED (item)) - /* already hidden/detached */ - return; - - /* if the object is manual, create a new placeholder to be able to - restore the position later */ - if (!GDL_DOCK_OBJECT_AUTOMATIC (item)) { - if (item->_priv->ph) - g_object_unref (item->_priv->ph); - - gboolean isFloating = FALSE; - gint width=0, height=0, x=0, y = 0; - - if (GDL_IS_DOCK (gdl_dock_object_get_parent_object (GDL_DOCK_OBJECT (item)))) - { - GdlDock* dock = GDL_DOCK (gdl_dock_object_get_parent_object (GDL_DOCK_OBJECT (item))); - g_object_get (dock, - "floating", &isFloating, - "width", &width, - "height",&height, - "floatx",&x, - "floaty",&y, - NULL); - } else { - gtk_widget_get_allocation (GTK_WIDGET (item), &allocation); - item->_priv->preferred_width = allocation.width; - item->_priv->preferred_height = allocation.height; - } - item->_priv->ph = GDL_DOCK_PLACEHOLDER ( - g_object_new (GDL_TYPE_DOCK_PLACEHOLDER, - "sticky", FALSE, - "host", item, - "width", width, - "height", height, - "floating", isFloating, - "floatx", x, - "floaty", y, - NULL)); - g_object_ref_sink (item->_priv->ph); - } - - gdl_dock_object_freeze (GDL_DOCK_OBJECT (item)); - - /* hide our children first, so they can also set placeholders */ - if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT (item))) - gtk_container_foreach (GTK_CONTAINER (item), - (GtkCallback) gdl_dock_item_hide_item, - NULL); - - /* detach the item recursively */ - gdl_dock_object_detach (GDL_DOCK_OBJECT (item), TRUE); - - gtk_widget_hide (GTK_WIDGET (item)); - - gdl_dock_object_thaw (GDL_DOCK_OBJECT (item)); -} - -/** - * gdl_dock_item_iconify_item: - * @item: The dock item to iconify. - * - * This function iconifies the dock item. When dock items are iconified - * they are hidden, and appear only as icons in dock bars. - * - * The dock item iconify button causes the panel to be iconified. - **/ -void -gdl_dock_item_iconify_item (GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - - GDL_DOCK_OBJECT_SET_FLAGS (item, GDL_DOCK_ICONIFIED); - gdl_dock_item_hide_item (item); -} - -/** - * gdl_dock_item_show_item: - * @item: The dock item to show. - * - * This function shows the dock item. When dock items are shown, they - * are displayed in their normal layout position. - **/ -void -gdl_dock_item_show_item (GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - - GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_ICONIFIED); - - if (item->_priv->ph) { - gboolean isFloating=FALSE; - gint width = 0, height = 0, x= 0, y = 0; - g_object_get (G_OBJECT(item->_priv->ph), - "width", &width, - "height", &height, - "floating",&isFloating, - "floatx", &x, - "floaty", &y, - NULL); - if (isFloating) { - GdlDockObject *controller = - gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (item)); - gdl_dock_add_floating_item (GDL_DOCK (controller), - item, x, y, width, height); - } else { - gtk_container_add (GTK_CONTAINER (item->_priv->ph), - GTK_WIDGET (item)); - } - g_object_unref (item->_priv->ph); - item->_priv->ph = NULL; - - } else if (gdl_dock_object_is_bound (GDL_DOCK_OBJECT (item))) { - GdlDockObject *toplevel; - - toplevel = gdl_dock_master_get_controller - (GDL_DOCK_OBJECT_GET_MASTER (item)); - - if (item->behavior & GDL_DOCK_ITEM_BEH_NEVER_FLOATING) { - g_warning("Object %s has no default position and flag GDL_DOCK_ITEM_BEH_NEVER_FLOATING is set.\n", - GDL_DOCK_OBJECT(item)->name); - } else if (toplevel) { - gdl_dock_object_dock (toplevel, GDL_DOCK_OBJECT (item), - GDL_DOCK_FLOATING, NULL); - } else - g_warning("There is no toplevel window. GdlDockItem %s cannot be shown.\n", GDL_DOCK_OBJECT(item)->name); - - } else - g_warning("GdlDockItem %s is not bound. It cannot be shown.\n", - GDL_DOCK_OBJECT(item)->name); - - gtk_widget_show (GTK_WIDGET (item)); -} - -/** - * gdl_dock_item_lock: - * @item: The dock item to lock. - * - * This function locks the dock item. When locked the dock item cannot - * be dragged around and it doesn't show a grip. - **/ -void -gdl_dock_item_lock (GdlDockItem *item) -{ - g_object_set (item, "locked", TRUE, NULL); -} - -/** - * gdl_dock_item_unlock: - * @item: The dock item to unlock. - * - * This function unlocks the dock item. When unlocked the dock item can - * be dragged around and can show a grip. - **/ -void -gdl_dock_item_unlock (GdlDockItem *item) -{ - g_object_set (item, "locked", FALSE, NULL); -} - -/** - * gdl_dock_item_set_default_position: - * @item: The dock item - * @reference: The GdlDockObject which is the default dock for @item - * - * This method has only an effect when you add you dock_item with - * GDL_DOCK_ITEM_BEH_NEVER_FLOATING. In this case you have to assign - * it a default position. - **/ -void -gdl_dock_item_set_default_position (GdlDockItem *item, - GdlDockObject *reference) -{ - g_return_if_fail (item != NULL); - - if (item->_priv->ph) { - g_object_unref (item->_priv->ph); - item->_priv->ph = NULL; - } - - if (reference && GDL_DOCK_OBJECT_ATTACHED (reference)) { - if (GDL_IS_DOCK_PLACEHOLDER (reference)) { - g_object_ref_sink (reference); - item->_priv->ph = GDL_DOCK_PLACEHOLDER (reference); - } else { - item->_priv->ph = GDL_DOCK_PLACEHOLDER ( - g_object_new (GDL_TYPE_DOCK_PLACEHOLDER, - "sticky", TRUE, - "host", reference, - NULL)); - g_object_ref_sink (item->_priv->ph); - } - } -} - -/** - * gdl_dock_item_preferred_size: - * @item: The dock item to get the preferred size of. - * @req: A pointer to a #GtkRequisition into which the preferred size - * will be written. - * - * Gets the preferred size of the dock item in pixels. - **/ -void -gdl_dock_item_preferred_size (GdlDockItem *item, - GtkRequisition *req) -{ - GtkAllocation allocation; - - if (!req) - return; - - gtk_widget_get_allocation (GTK_WIDGET (item), &allocation); - - req->width = MAX (item->_priv->preferred_width, allocation.width); - req->height = MAX (item->_priv->preferred_height, allocation.height); -} - - -gboolean -gdl_dock_item_or_child_has_focus (GdlDockItem *item) -{ - GtkWidget *item_child; - gboolean item_or_child_has_focus; - - g_return_val_if_fail (GDL_IS_DOCK_ITEM (item), FALSE); - - for (item_child = gtk_container_get_focus_child (GTK_CONTAINER (item)); - item_child && GTK_IS_CONTAINER (item_child) && gtk_container_get_focus_child (GTK_CONTAINER (item_child)); - item_child = gtk_container_get_focus_child (GTK_CONTAINER (item_child))) ; - - item_or_child_has_focus = - (gtk_widget_has_focus (GTK_WIDGET (item)) || - (GTK_IS_WIDGET (item_child) && gtk_widget_has_focus (item_child))); - - return item_or_child_has_focus; -} - - -/* ----- gtk orientation type exporter/importer ----- */ - -static void -gdl_dock_param_export_gtk_orientation (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = - g_strdup_printf ("%s", (src->data [0].v_int == GTK_ORIENTATION_HORIZONTAL) ? - "horizontal" : "vertical"); -} - -static void -gdl_dock_param_import_gtk_orientation (const GValue *src, - GValue *dst) -{ - if (!strcmp (src->data [0].v_pointer, "horizontal")) - dst->data [0].v_int = GTK_ORIENTATION_HORIZONTAL; - else - dst->data [0].v_int = GTK_ORIENTATION_VERTICAL; -} - diff --git a/src/libgdl/gdl-dock-item.h b/src/libgdl/gdl-dock-item.h deleted file mode 100644 index b9378f783..000000000 --- a/src/libgdl/gdl-dock-item.h +++ /dev/null @@ -1,223 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-item.h - * - * Author: Gustavo Giráldez - * - * Based on GnomeDockItem/BonoboDockItem. Original copyright notice follows. - * - * Copyright (C) 1998 Ettore Perazzoli - * Copyright (C) 1998 Elliot Lee - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GDL_DOCK_ITEM_H__ -#define __GDL_DOCK_ITEM_H__ - -#include "libgdl/gdl-dock-object.h" - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_ITEM (gdl_dock_item_get_type ()) -#define GDL_DOCK_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_ITEM, GdlDockItem)) -#define GDL_DOCK_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM, GdlDockItemClass)) -#define GDL_IS_DOCK_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_ITEM)) -#define GDL_IS_DOCK_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM)) -#define GDL_DOCK_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_ITEM, GdlDockItemClass)) - -/** - * GdlDockItemBehavior: - * @GDL_DOCK_ITEM_BEH_NORMAL: Normal dock item - * @GDL_DOCK_ITEM_BEH_NEVER_FLOATING: item cannot be undocked - * @GDL_DOCK_ITEM_BEH_NEVER_VERTICAL: item cannot be docked vertically - * @GDL_DOCK_ITEM_BEH_NEVER_HORIZONTAL: item cannot be docked horizontally - * @GDL_DOCK_ITEM_BEH_LOCKED: item is locked, it cannot be moved around - * @GDL_DOCK_ITEM_BEH_CANT_DOCK_TOP: item cannot be docked at top - * @GDL_DOCK_ITEM_BEH_CANT_DOCK_BOTTOM: item cannot be docked at bottom - * @GDL_DOCK_ITEM_BEH_CANT_DOCK_LEFT: item cannot be docked left - * @GDL_DOCK_ITEM_BEH_CANT_DOCK_RIGHT: item cannot be docked right - * @GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER: item cannot be docked at center - * @GDL_DOCK_ITEM_BEH_CANT_CLOSE: item cannot be closed - * @GDL_DOCK_ITEM_BEH_CANT_ICONIFY: item cannot be iconified - * @GDL_DOCK_ITEM_BEH_NO_GRIP: item doesn't have a grip - * - * Described the behaviour of a doc item. The item can have multiple flags set. - * - **/ - -typedef enum { - GDL_DOCK_ITEM_BEH_NORMAL = 0, - GDL_DOCK_ITEM_BEH_NEVER_FLOATING = 1 << 0, - GDL_DOCK_ITEM_BEH_NEVER_VERTICAL = 1 << 1, - GDL_DOCK_ITEM_BEH_NEVER_HORIZONTAL = 1 << 2, - GDL_DOCK_ITEM_BEH_LOCKED = 1 << 3, - GDL_DOCK_ITEM_BEH_CANT_DOCK_TOP = 1 << 4, - GDL_DOCK_ITEM_BEH_CANT_DOCK_BOTTOM = 1 << 5, - GDL_DOCK_ITEM_BEH_CANT_DOCK_LEFT = 1 << 6, - GDL_DOCK_ITEM_BEH_CANT_DOCK_RIGHT = 1 << 7, - GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER = 1 << 8, - GDL_DOCK_ITEM_BEH_CANT_CLOSE = 1 << 9, - GDL_DOCK_ITEM_BEH_CANT_ICONIFY = 1 << 10, - GDL_DOCK_ITEM_BEH_NO_GRIP = 1 << 11 -} GdlDockItemBehavior; - - -/** - * GdlDockItemFlags: - * @GDL_DOCK_IN_DRAG: item is in a drag operation - * @GDL_DOCK_IN_PREDRAG: item is in a predrag operation - * @GDL_DOCK_ICONIFIED: item is iconified - * @GDL_DOCK_USER_ACTION: indicates the user has started an action on the dock item - * - * Status flag of a GdlDockItem. Don't use unless you derive a widget from GdlDockItem - * - **/ -typedef enum { - GDL_DOCK_IN_DRAG = 1 << GDL_DOCK_OBJECT_FLAGS_SHIFT, - GDL_DOCK_IN_PREDRAG = 1 << (GDL_DOCK_OBJECT_FLAGS_SHIFT + 1), - GDL_DOCK_ICONIFIED = 1 << (GDL_DOCK_OBJECT_FLAGS_SHIFT + 2), - GDL_DOCK_USER_ACTION = 1 << (GDL_DOCK_OBJECT_FLAGS_SHIFT + 3) -} GdlDockItemFlags; - -typedef struct _GdlDockItem GdlDockItem; -typedef struct _GdlDockItemClass GdlDockItemClass; -typedef struct _GdlDockItemPrivate GdlDockItemPrivate; - -struct _GdlDockItem { - GdlDockObject object; - - GtkWidget *child; - GdlDockItemBehavior behavior; - GtkOrientation orientation; - - guint resize : 1; - - gint dragoff_x, dragoff_y; /* these need to be - accesible from - outside */ - GdlDockItemPrivate *_priv; -}; - -struct _GdlDockItemClass { - GdlDockObjectClass parent_class; - - gboolean has_grip; - - /* virtuals */ - void (* dock_drag_begin) (GdlDockItem *item); - void (* dock_drag_motion) (GdlDockItem *item, - gint x, - gint y); - void (* dock_drag_end) (GdlDockItem *item, - gboolean cancelled); - void (* move_focus_child) (GdlDockItem *item, - GtkDirectionType direction); - void (* set_orientation) (GdlDockItem *item, - GtkOrientation orientation); -}; - -#define GDL_DOCK_ITEM_FLAGS(item) (GDL_DOCK_OBJECT (item)->flags) -#define GDL_DOCK_ITEM_IN_DRAG(item) \ - ((GDL_DOCK_ITEM_FLAGS (item) & GDL_DOCK_IN_DRAG) != 0) -#define GDL_DOCK_ITEM_IN_PREDRAG(item) \ - ((GDL_DOCK_ITEM_FLAGS (item) & GDL_DOCK_IN_PREDRAG) != 0) -#define GDL_DOCK_ITEM_ICONIFIED(item) \ - ((GDL_DOCK_ITEM_FLAGS (item) & GDL_DOCK_ICONIFIED) != 0) -#define GDL_DOCK_ITEM_USER_ACTION(item) \ - ((GDL_DOCK_ITEM_FLAGS (item) & GDL_DOCK_USER_ACTION) != 0) -#define GDL_DOCK_ITEM_NOT_LOCKED(item) !((item)->behavior & GDL_DOCK_ITEM_BEH_LOCKED) -#define GDL_DOCK_ITEM_NO_GRIP(item) ((item)->behavior & GDL_DOCK_ITEM_BEH_NO_GRIP) - -#define GDL_DOCK_ITEM_SET_FLAGS(item,flag) \ - G_STMT_START { (GDL_DOCK_ITEM_FLAGS (item) |= (flag)); } G_STMT_END -#define GDL_DOCK_ITEM_UNSET_FLAGS(item,flag) \ - G_STMT_START { (GDL_DOCK_ITEM_FLAGS (item) &= ~(flag)); } G_STMT_END - -#define GDL_DOCK_ITEM_HAS_GRIP(item) ((GDL_DOCK_ITEM_GET_CLASS (item)->has_grip)&& \ - ! GDL_DOCK_ITEM_NO_GRIP (item)) - -#define GDL_DOCK_ITEM_CANT_CLOSE(item) \ - ((((item)->behavior & GDL_DOCK_ITEM_BEH_CANT_CLOSE) != 0)|| \ - ! GDL_DOCK_ITEM_NOT_LOCKED(item)) - -#define GDL_DOCK_ITEM_CANT_ICONIFY(item) \ - ((((item)->behavior & GDL_DOCK_ITEM_BEH_CANT_ICONIFY) != 0)|| \ - ! GDL_DOCK_ITEM_NOT_LOCKED(item)) - -/* public interface */ - -GtkWidget *gdl_dock_item_new (const gchar *name, - const gchar *long_name, - GdlDockItemBehavior behavior); -GtkWidget *gdl_dock_item_new_with_stock (const gchar *name, - const gchar *long_name, - const gchar *stock_id, - GdlDockItemBehavior behavior); - -GtkWidget *gdl_dock_item_new_with_pixbuf_icon (const gchar *name, - const gchar *long_name, - const GdkPixbuf *pixbuf_icon, - GdlDockItemBehavior behavior); - -GType gdl_dock_item_get_type (void); - -void gdl_dock_item_dock_to (GdlDockItem *item, - GdlDockItem *target, - GdlDockPlacement position, - gint docking_param); - -void gdl_dock_item_set_orientation (GdlDockItem *item, - GtkOrientation orientation); - -GtkWidget *gdl_dock_item_get_tablabel (GdlDockItem *item); -void gdl_dock_item_set_tablabel (GdlDockItem *item, - GtkWidget *tablabel); -GtkWidget *gdl_dock_item_get_grip (GdlDockItem *item); -void gdl_dock_item_hide_grip (GdlDockItem *item); -void gdl_dock_item_show_grip (GdlDockItem *item); -void gdl_dock_item_notify_selected (GdlDockItem *item); - -/* bind and unbind items to a dock */ -void gdl_dock_item_bind (GdlDockItem *item, - GtkWidget *dock); - -void gdl_dock_item_unbind (GdlDockItem *item); - -void gdl_dock_item_hide_item (GdlDockItem *item); - -void gdl_dock_item_iconify_item (GdlDockItem *item); - -void gdl_dock_item_show_item (GdlDockItem *item); - -void gdl_dock_item_lock (GdlDockItem *item); - -void gdl_dock_item_unlock (GdlDockItem *item); - -void gdl_dock_item_set_default_position (GdlDockItem *item, - GdlDockObject *reference); - -void gdl_dock_item_preferred_size (GdlDockItem *item, - GtkRequisition *req); - -gboolean gdl_dock_item_or_child_has_focus (GdlDockItem *item); - -G_END_DECLS - -#endif diff --git a/src/libgdl/gdl-dock-master.c b/src/libgdl/gdl-dock-master.c deleted file mode 100644 index 294614c7e..000000000 --- a/src/libgdl/gdl-dock-master.c +++ /dev/null @@ -1,1011 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-master.c - Object which manages a dock ring - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" - -#include "gdl-dock-master.h" -#include "gdl-dock.h" -#include "gdl-dock-item.h" -#include "gdl-dock-notebook.h" -#include "gdl-switcher.h" -#include "libgdlmarshal.h" -#include "libgdltypebuiltins.h" -#ifdef WIN32 -#include "gdl-win32.h" -#endif - -/* ----- Private prototypes ----- */ - -static void gdl_dock_master_class_init (GdlDockMasterClass *klass); - -static void gdl_dock_master_dispose (GObject *g_object); -static void gdl_dock_master_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_master_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void _gdl_dock_master_remove (GdlDockObject *object, - GdlDockMaster *master); - -static void gdl_dock_master_drag_begin (GdlDockItem *item, - gpointer data); -static void gdl_dock_master_drag_end (GdlDockItem *item, - gboolean cancelled, - gpointer data); -static void gdl_dock_master_drag_motion (GdlDockItem *item, - gint x, - gint y, - gpointer data); - -static void _gdl_dock_master_foreach (gpointer key, - gpointer value, - gpointer user_data); - -static void gdl_dock_master_xor_rect (GdlDockMaster *master); - -static void gdl_dock_master_layout_changed (GdlDockMaster *master); - -static void gdl_dock_master_set_switcher_style (GdlDockMaster *master, - GdlSwitcherStyle switcher_style); - -/* ----- Private data types and variables ----- */ - -enum { - PROP_0, - PROP_DEFAULT_TITLE, - PROP_LOCKED, - PROP_SWITCHER_STYLE -}; - -enum { - LAYOUT_CHANGED, - LAST_SIGNAL -}; - -struct _GdlDockMasterPrivate { - gint number; /* for naming nameless manual objects */ - gchar *default_title; - - GdkGC *root_xor_gc; - gboolean rect_drawn; - GdlDock *rect_owner; - - GdlDockRequest *drag_request; - - /* source id for the idle handler to emit a layout_changed signal */ - guint idle_layout_changed_id; - - /* hashes to quickly calculate the overall locked status: i.e. - * if size(unlocked_items) == 0 then locked = 1 - * else if size(locked_items) == 0 then locked = 0 - * else locked = -1 - */ - GHashTable *locked_items; - GHashTable *unlocked_items; - - GdlSwitcherStyle switcher_style; -}; - -#define COMPUTE_LOCKED(master) \ - (g_hash_table_size ((master)->_priv->unlocked_items) == 0 ? 1 : \ - (g_hash_table_size ((master)->_priv->locked_items) == 0 ? 0 : -1)) - -static guint master_signals [LAST_SIGNAL] = { 0 }; - - -/* ----- Private interface ----- */ - -G_DEFINE_TYPE (GdlDockMaster, gdl_dock_master, G_TYPE_OBJECT); - -static void -gdl_dock_master_class_init (GdlDockMasterClass *klass) -{ - GObjectClass *g_object_class; - - g_object_class = G_OBJECT_CLASS (klass); - - g_object_class->dispose = gdl_dock_master_dispose; - g_object_class->set_property = gdl_dock_master_set_property; - g_object_class->get_property = gdl_dock_master_get_property; - - g_object_class_install_property ( - g_object_class, PROP_DEFAULT_TITLE, - g_param_spec_string ("default-title", _("Default title"), - _("Default title for newly created floating docks"), - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_LOCKED, - g_param_spec_int ("locked", _("Locked"), - _("If is set to 1, all the dock items bound to the master " - "are locked; if it's 0, all are unlocked; -1 indicates " - "inconsistency among the items"), - -1, 1, 0, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_SWITCHER_STYLE, - g_param_spec_enum ("switcher-style", _("Switcher Style"), - _("Switcher buttons style"), - GDL_TYPE_SWITCHER_STYLE, - GDL_SWITCHER_STYLE_BOTH, - G_PARAM_READWRITE)); - - master_signals [LAYOUT_CHANGED] = - g_signal_new ("layout-changed", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GdlDockMasterClass, layout_changed), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__VOID, - G_TYPE_NONE, /* return type */ - 0); - - klass->layout_changed = gdl_dock_master_layout_changed; -} - -static void -gdl_dock_master_init (GdlDockMaster *master) -{ - master->dock_objects = g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, NULL); - master->toplevel_docks = NULL; - master->controller = NULL; - master->dock_number = 1; - - master->_priv = g_new0 (GdlDockMasterPrivate, 1); - master->_priv->number = 1; - master->_priv->switcher_style = GDL_SWITCHER_STYLE_BOTH; - master->_priv->locked_items = g_hash_table_new (g_direct_hash, g_direct_equal); - master->_priv->unlocked_items = g_hash_table_new (g_direct_hash, g_direct_equal); -} - -static void -_gdl_dock_master_remove (GdlDockObject *object, - GdlDockMaster *master) -{ - g_return_if_fail (master != NULL && object != NULL); - - if (GDL_IS_DOCK (object)) { - GList *found_link; - - found_link = g_list_find (master->toplevel_docks, object); - if (found_link) - master->toplevel_docks = g_list_delete_link (master->toplevel_docks, - found_link); - if (object == master->controller) { - GList *last; - GdlDockObject *new_controller = NULL; - - /* now find some other non-automatic toplevel to use as a - new controller. start from the last dock, since it's - probably a non-floating and manual */ - last = g_list_last (master->toplevel_docks); - while (last) { - if (!GDL_DOCK_OBJECT_AUTOMATIC (last->data)) { - new_controller = GDL_DOCK_OBJECT (last->data); - break; - } - last = last->prev; - }; - - if (new_controller) { - /* the new controller gets the ref (implicitly of course) */ - master->controller = new_controller; - } else { - master->controller = NULL; - /* no controller, no master */ - g_object_unref (master); - } - } - } - /* disconnect dock object signals */ - g_signal_handlers_disconnect_matched (object, G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, master); - - /* unref the object from the hash if it's there */ - if (object->name) { - GdlDockObject *found_object; - found_object = g_hash_table_lookup (master->dock_objects, object->name); - if (found_object == object) { - g_hash_table_remove (master->dock_objects, object->name); - g_object_unref (object); - } - } -} - -static void -ht_foreach_build_slist (gpointer key, - gpointer value, - GSList **slist) -{ - *slist = g_slist_prepend (*slist, value); -} - -static void -gdl_dock_master_dispose (GObject *g_object) -{ - GdlDockMaster *master; - - g_return_if_fail (GDL_IS_DOCK_MASTER (g_object)); - - master = GDL_DOCK_MASTER (g_object); - - if (master->toplevel_docks) { - g_list_foreach (master->toplevel_docks, - (GFunc) gdl_dock_object_unbind, NULL); - g_list_free (master->toplevel_docks); - master->toplevel_docks = NULL; - } - - if (master->dock_objects) { - GSList *alive_docks = NULL; - g_hash_table_foreach (master->dock_objects, - (GHFunc) ht_foreach_build_slist, &alive_docks); - while (alive_docks) { - gdl_dock_object_unbind (GDL_DOCK_OBJECT (alive_docks->data)); - alive_docks = g_slist_delete_link (alive_docks, alive_docks); - } - - g_hash_table_destroy (master->dock_objects); - master->dock_objects = NULL; - } - - if (master->_priv) { - if (master->_priv->idle_layout_changed_id) - g_source_remove (master->_priv->idle_layout_changed_id); - - if (master->_priv->root_xor_gc) { - g_object_unref (master->_priv->root_xor_gc); - master->_priv->root_xor_gc = NULL; - } - if (master->_priv->drag_request) { - if (G_IS_VALUE (&master->_priv->drag_request->extra)) - g_value_unset (&master->_priv->drag_request->extra); - g_free (master->_priv->drag_request); - master->_priv->drag_request = NULL; - } - g_free (master->_priv->default_title); - master->_priv->default_title = NULL; - - g_hash_table_destroy (master->_priv->locked_items); - master->_priv->locked_items = NULL; - g_hash_table_destroy (master->_priv->unlocked_items); - master->_priv->unlocked_items = NULL; - - g_free (master->_priv); - master->_priv = NULL; - } - - G_OBJECT_CLASS (gdl_dock_master_parent_class)->dispose (g_object); -} - -static void -foreach_lock_unlock (GdlDockItem *item, - gboolean locked) -{ - if (!GDL_IS_DOCK_ITEM (item)) - return; - - g_object_set (item, "locked", locked, NULL); - if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT (item))) - gtk_container_foreach (GTK_CONTAINER (item), - (GtkCallback) foreach_lock_unlock, - GINT_TO_POINTER (locked)); -} - -static void -gdl_dock_master_lock_unlock (GdlDockMaster *master, - gboolean locked) -{ - GList *l; - - for (l = master->toplevel_docks; l; l = l->next) { - GdlDock *dock = GDL_DOCK (l->data); - if (dock->root) - foreach_lock_unlock (GDL_DOCK_ITEM (dock->root), locked); - } - - /* just to be sure hidden items are set too */ - gdl_dock_master_foreach (master, - (GFunc) foreach_lock_unlock, - GINT_TO_POINTER (locked)); -} - -static void -gdl_dock_master_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockMaster *master = GDL_DOCK_MASTER (object); - - switch (prop_id) { - case PROP_DEFAULT_TITLE: - g_free (master->_priv->default_title); - master->_priv->default_title = g_value_dup_string (value); - break; - case PROP_LOCKED: - if (g_value_get_int (value) >= 0) - gdl_dock_master_lock_unlock (master, (g_value_get_int (value) > 0)); - break; - case PROP_SWITCHER_STYLE: - gdl_dock_master_set_switcher_style (master, g_value_get_enum (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_master_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockMaster *master = GDL_DOCK_MASTER (object); - - switch (prop_id) { - case PROP_DEFAULT_TITLE: - g_value_set_string (value, master->_priv->default_title); - break; - case PROP_LOCKED: - g_value_set_int (value, COMPUTE_LOCKED (master)); - break; - case PROP_SWITCHER_STYLE: - g_value_set_enum (value, master->_priv->switcher_style); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_master_drag_begin (GdlDockItem *item, - gpointer data) -{ - GdlDockMaster *master; - GdlDockRequest *request; - - g_return_if_fail (data != NULL); - g_return_if_fail (item != NULL); - - master = GDL_DOCK_MASTER (data); - - if (!master->_priv->drag_request) - master->_priv->drag_request = g_new0 (GdlDockRequest, 1); - - request = master->_priv->drag_request; - - /* Set the target to itself so it won't go floating with just a click. */ - request->applicant = GDL_DOCK_OBJECT (item); - request->target = GDL_DOCK_OBJECT (item); - request->position = GDL_DOCK_FLOATING; - if (G_IS_VALUE (&request->extra)) - g_value_unset (&request->extra); - - master->_priv->rect_drawn = FALSE; - master->_priv->rect_owner = NULL; -} - -static void -gdl_dock_master_drag_end (GdlDockItem *item, - gboolean cancelled, - gpointer data) -{ - GdlDockMaster *master; - GdlDockRequest *request; - - g_return_if_fail (data != NULL); - g_return_if_fail (item != NULL); - - master = GDL_DOCK_MASTER (data); - request = master->_priv->drag_request; - - g_return_if_fail (GDL_DOCK_OBJECT (item) == request->applicant); - - /* Erase previously drawn rectangle */ - if (master->_priv->rect_drawn) - gdl_dock_master_xor_rect (master); - - /* cancel conditions */ - if (cancelled || request->applicant == request->target) - return; - - /* dock object to the requested position */ - gdl_dock_object_dock (request->target, - request->applicant, - request->position, - &request->extra); - - g_signal_emit (master, master_signals [LAYOUT_CHANGED], 0); -} - -static void -gdl_dock_master_drag_motion (GdlDockItem *item, - gint root_x, - gint root_y, - gpointer data) -{ - GdlDockMaster *master; - GdlDockRequest my_request, *request; - GdkWindow *window; - GdkWindow *widget_window; - gint win_x, win_y; - gint x, y; - GdlDock *dock = NULL; - gboolean may_dock = FALSE; - - g_return_if_fail (item != NULL && data != NULL); - - master = GDL_DOCK_MASTER (data); - request = master->_priv->drag_request; - - g_return_if_fail (GDL_DOCK_OBJECT (item) == request->applicant); - - my_request = *request; - - /* first look under the pointer */ - window = gdk_window_at_pointer (&win_x, &win_y); - if (window) { - GtkWidget *widget; - /* ok, now get the widget who owns that window and see if we can - get to a GdlDock by walking up the hierarchy */ - gdk_window_get_user_data (window, (gpointer) &widget); - if (GTK_IS_WIDGET (widget)) { - while (widget && (!GDL_IS_DOCK (widget) || - GDL_DOCK_OBJECT_GET_MASTER (widget) != master)) - widget = gtk_widget_get_parent (widget); - if (widget) { - gint win_w, win_h; - - widget_window = gtk_widget_get_window (widget); - - /* verify that the pointer is still in that dock - (the user could have moved it) */ - gdk_window_get_geometry (widget_window, - NULL, NULL, &win_w, &win_h, NULL); - gdk_window_get_origin (widget_window, &win_x, &win_y); - if (root_x >= win_x && root_x < win_x + win_w && - root_y >= win_y && root_y < win_y + win_h) - dock = GDL_DOCK (widget); - } - } - } - - if (dock) { - GdkWindow *dock_window = gtk_widget_get_window (GTK_WIDGET (dock)); - - /* translate root coordinates into dock object coordinates - (i.e. widget coordinates) */ - gdk_window_get_origin (dock_window, &win_x, &win_y); - x = root_x - win_x; - y = root_y - win_y; - may_dock = gdl_dock_object_dock_request (GDL_DOCK_OBJECT (dock), - x, y, &my_request); - } - else { - GList *l; - - /* try to dock the item in all the docks in the ring in turn */ - for (l = master->toplevel_docks; l; l = l->next) { - GdkWindow *dock_window; - dock = GDL_DOCK (l->data); - dock_window = gtk_widget_get_window (GTK_WIDGET (dock)); - /* translate root coordinates into dock object coordinates - (i.e. widget coordinates) */ - gdk_window_get_origin (dock_window, &win_x, &win_y); - x = root_x - win_x; - y = root_y - win_y; - may_dock = gdl_dock_object_dock_request (GDL_DOCK_OBJECT (dock), - x, y, &my_request); - if (may_dock) - break; - } - } - - - if (!may_dock) { - GtkRequisition req; - /* Special case for GdlDockItems : they must respect the flags */ - if(GDL_IS_DOCK_ITEM(item) - && GDL_DOCK_ITEM(item)->behavior & GDL_DOCK_ITEM_BEH_NEVER_FLOATING) - return; - - dock = NULL; - my_request.target = GDL_DOCK_OBJECT ( - gdl_dock_object_get_toplevel (request->applicant)); - my_request.position = GDL_DOCK_FLOATING; - - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (request->applicant), &req); - my_request.rect.width = req.width; - my_request.rect.height = req.height; - - my_request.rect.x = root_x - GDL_DOCK_ITEM (request->applicant)->dragoff_x; - my_request.rect.y = root_y - GDL_DOCK_ITEM (request->applicant)->dragoff_y; - - /* setup extra docking information */ - if (G_IS_VALUE (&my_request.extra)) - g_value_unset (&my_request.extra); - - g_value_init (&my_request.extra, GDK_TYPE_RECTANGLE); - g_value_set_boxed (&my_request.extra, &my_request.rect); - } - /* if we want to enforce GDL_DOCK_ITEM_BEH_NEVER_FLOATING */ - /* the item must remain attached to the controller, otherwise */ - /* it could be inserted in another floating dock */ - /* so check for the flag at this moment */ - else if(GDL_IS_DOCK_ITEM(item) - && GDL_DOCK_ITEM(item)->behavior & GDL_DOCK_ITEM_BEH_NEVER_FLOATING - && dock != GDL_DOCK(master->controller)) - return; - - if (!(my_request.rect.x == request->rect.x && - my_request.rect.y == request->rect.y && - my_request.rect.width == request->rect.width && - my_request.rect.height == request->rect.height && - dock == master->_priv->rect_owner)) { - - /* erase the previous rectangle */ - if (master->_priv->rect_drawn) - gdl_dock_master_xor_rect (master); - } - - /* set the new values */ - *request = my_request; - master->_priv->rect_owner = dock; - - /* draw the previous rectangle */ - if (~master->_priv->rect_drawn) - gdl_dock_master_xor_rect (master); -} - -static void -_gdl_dock_master_foreach (gpointer key, - gpointer value, - gpointer user_data) -{ - struct { - GFunc function; - gpointer user_data; - } *data = user_data; - - (* data->function) (GTK_WIDGET (value), data->user_data); -} - -static void -gdl_dock_master_xor_rect (GdlDockMaster *master) -{ - gint8 dash_list [2]; - GdkWindow *window; - GdkRectangle *rect; - - if (!master->_priv || !master->_priv->drag_request) - return; - - master->_priv->rect_drawn = ~master->_priv->rect_drawn; - - if (master->_priv->rect_owner) { - gdl_dock_xor_rect (master->_priv->rect_owner, - &master->_priv->drag_request->rect); - return; - } - - rect = &master->_priv->drag_request->rect; - window = gdk_get_default_root_window (); - - if (!master->_priv->root_xor_gc) { - GdkGCValues values; - - values.function = GDK_INVERT; - values.subwindow_mode = GDK_INCLUDE_INFERIORS; - master->_priv->root_xor_gc = gdk_gc_new_with_values ( - window, &values, GDK_GC_FUNCTION | GDK_GC_SUBWINDOW); - }; - -#ifdef WIN32 - GdkLineStyle lineStyle = GDK_LINE_ON_OFF_DASH; - if (is_os_vista()) - { - // On Vista the dash-line is increadibly slow to draw, it takes several minutes to draw the tracking lines - // With GDK_LINE_SOLID it is parts of a second - // No performance issue on WinXP - lineStyle = GDK_LINE_SOLID; - } -#else - GdkLineStyle lineStyle = GDK_LINE_ON_OFF_DASH; -#endif - gdk_gc_set_line_attributes (master->_priv->root_xor_gc, 1, - lineStyle, - GDK_CAP_NOT_LAST, - GDK_JOIN_BEVEL); - - dash_list[0] = 1; - dash_list[1] = 1; - gdk_gc_set_dashes (master->_priv->root_xor_gc, 1, dash_list, 2); - - gdk_draw_rectangle (window, master->_priv->root_xor_gc, 0, - rect->x, rect->y, - rect->width, rect->height); - - gdk_gc_set_dashes (master->_priv->root_xor_gc, 0, dash_list, 2); - - gdk_draw_rectangle (window, master->_priv->root_xor_gc, 0, - rect->x + 1, rect->y + 1, - rect->width - 2, rect->height - 2); -} - -static void -gdl_dock_master_layout_changed (GdlDockMaster *master) -{ - g_return_if_fail (GDL_IS_DOCK_MASTER (master)); - - /* emit "layout-changed" on the controller to notify the user who - * normally shouldn't have access to us */ - if (master->controller) - g_signal_emit_by_name (master->controller, "layout-changed"); - - /* remove the idle handler if there is one */ - if (master->_priv->idle_layout_changed_id) { - g_source_remove (master->_priv->idle_layout_changed_id); - master->_priv->idle_layout_changed_id = 0; - } -} - -static gboolean -idle_emit_layout_changed (gpointer user_data) -{ - GdlDockMaster *master = user_data; - - g_return_val_if_fail (master && GDL_IS_DOCK_MASTER (master), FALSE); - - master->_priv->idle_layout_changed_id = 0; - g_signal_emit (master, master_signals [LAYOUT_CHANGED], 0); - - return FALSE; -} - -static void -item_dock_cb (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data, - gpointer user_data) -{ - GdlDockMaster *master = user_data; - - g_return_if_fail (requestor && GDL_IS_DOCK_OBJECT (requestor)); - g_return_if_fail (master && GDL_IS_DOCK_MASTER (master)); - - /* here we are in fact interested in the requestor, since it's - * assumed that object will not change its visibility... for the - * requestor, however, could mean that it's being shown */ - if (!GDL_DOCK_OBJECT_IN_REFLOW (requestor) && - !GDL_DOCK_OBJECT_AUTOMATIC (requestor)) { - if (!master->_priv->idle_layout_changed_id) - master->_priv->idle_layout_changed_id = - g_idle_add (idle_emit_layout_changed, master); - } -} - -static void -item_detach_cb (GdlDockObject *object, - gboolean recursive, - gpointer user_data) -{ - GdlDockMaster *master = user_data; - - g_return_if_fail (object && GDL_IS_DOCK_OBJECT (object)); - g_return_if_fail (master && GDL_IS_DOCK_MASTER (master)); - - if (!GDL_DOCK_OBJECT_IN_REFLOW (object) && - !GDL_DOCK_OBJECT_AUTOMATIC (object)) { - if (!master->_priv->idle_layout_changed_id) - master->_priv->idle_layout_changed_id = - g_idle_add (idle_emit_layout_changed, master); - } -} - -static void -item_notify_cb (GdlDockObject *object, - GParamSpec *pspec, - gpointer user_data) -{ - GdlDockMaster *master = user_data; - gint locked = COMPUTE_LOCKED (master); - gboolean item_locked; - - g_object_get (object, "locked", &item_locked, NULL); - - if (item_locked) { - g_hash_table_remove (master->_priv->unlocked_items, object); - g_hash_table_insert (master->_priv->locked_items, object, NULL); - } else { - g_hash_table_remove (master->_priv->locked_items, object); - g_hash_table_insert (master->_priv->unlocked_items, object, NULL); - } - - if (COMPUTE_LOCKED (master) != locked) - g_object_notify (G_OBJECT (master), "locked"); -} - -/* ----- Public interface ----- */ - -void -gdl_dock_master_add (GdlDockMaster *master, - GdlDockObject *object) -{ - g_return_if_fail (master != NULL && object != NULL); - - if (!GDL_DOCK_OBJECT_AUTOMATIC (object)) { - GdlDockObject *found_object; - - /* create a name for the object if it doesn't have one */ - if (!object->name) - /* directly set the name, since it's a construction only - property */ - object->name = g_strdup_printf ("__dock_%u", master->_priv->number++); - - /* add the object to our hash list */ - if ((found_object = g_hash_table_lookup (master->dock_objects, object->name))) { - g_warning (_("master %p: unable to add object %p[%s] to the hash. " - "There already is an item with that name (%p)."), - master, object, object->name, found_object); - } - else { - g_object_ref_sink (object); - g_hash_table_insert (master->dock_objects, g_strdup (object->name), object); - } - } - - if (GDL_IS_DOCK (object)) { - gboolean floating; - - /* if this is the first toplevel we are adding, name it controller */ - if (!master->toplevel_docks) - /* the dock should already have the ref */ - master->controller = object; - - /* add dock to the toplevel list */ - g_object_get (object, "floating", &floating, NULL); - if (floating) - master->toplevel_docks = g_list_prepend (master->toplevel_docks, object); - else - master->toplevel_docks = g_list_append (master->toplevel_docks, object); - - /* we are interested in the dock request this toplevel - * receives to update the layout */ - g_signal_connect (object, "dock", - G_CALLBACK (item_dock_cb), master); - - } - else if (GDL_IS_DOCK_ITEM (object)) { - /* we need to connect the item's signals */ - g_signal_connect (object, "dock_drag_begin", - G_CALLBACK (gdl_dock_master_drag_begin), master); - g_signal_connect (object, "dock_drag_motion", - G_CALLBACK (gdl_dock_master_drag_motion), master); - g_signal_connect (object, "dock_drag_end", - G_CALLBACK (gdl_dock_master_drag_end), master); - g_signal_connect (object, "dock", - G_CALLBACK (item_dock_cb), master); - g_signal_connect (object, "detach", - G_CALLBACK (item_detach_cb), master); - - /* register to "locked" notification if the item has a grip, - * and add the item to the corresponding hash */ - if (GDL_DOCK_ITEM_HAS_GRIP (GDL_DOCK_ITEM (object))) { - g_signal_connect (object, "notify::locked", - G_CALLBACK (item_notify_cb), master); - item_notify_cb (object, NULL, master); - } - - /* If the item is notebook, set the switcher style */ - if (GDL_IS_DOCK_NOTEBOOK (object) && - GDL_IS_SWITCHER (GDL_DOCK_ITEM (object)->child)) - { - g_object_set (GDL_DOCK_ITEM (object)->child, "switcher-style", - master->_priv->switcher_style, NULL); - } - - /* post a layout_changed emission if the item is not automatic - * (since it should be added to the items model) */ - if (!GDL_DOCK_OBJECT_AUTOMATIC (object)) { - if (!master->_priv->idle_layout_changed_id) - master->_priv->idle_layout_changed_id = - g_idle_add (idle_emit_layout_changed, master); - } - } -} - -void -gdl_dock_master_remove (GdlDockMaster *master, - GdlDockObject *object) -{ - g_return_if_fail (master != NULL && object != NULL); - - /* remove from locked/unlocked hashes and property change if - * that's the case */ - if (GDL_IS_DOCK_ITEM (object) && GDL_DOCK_ITEM_HAS_GRIP (GDL_DOCK_ITEM (object))) { - gint locked = COMPUTE_LOCKED (master); - if (g_hash_table_remove (master->_priv->locked_items, object) || - g_hash_table_remove (master->_priv->unlocked_items, object)) { - if (COMPUTE_LOCKED (master) != locked) - g_object_notify (G_OBJECT (master), "locked"); - } - } - - /* ref the master, since removing the controller could cause master disposal */ - g_object_ref (master); - - /* all the interesting stuff happens in _gdl_dock_master_remove */ - _gdl_dock_master_remove (object, master); - - /* post a layout_changed emission if the item is not automatic - * (since it should be removed from the items model) */ - if (!GDL_DOCK_OBJECT_AUTOMATIC (object)) { - if (!master->_priv->idle_layout_changed_id) - master->_priv->idle_layout_changed_id = - g_idle_add (idle_emit_layout_changed, master); - } - - /* balance ref count */ - g_object_unref (master); -} - -void -gdl_dock_master_foreach (GdlDockMaster *master, - GFunc function, - gpointer user_data) -{ - struct { - GFunc function; - gpointer user_data; - } data; - - g_return_if_fail (master != NULL && function != NULL); - - data.function = function; - data.user_data = user_data; - g_hash_table_foreach (master->dock_objects, _gdl_dock_master_foreach, &data); -} - -void -gdl_dock_master_foreach_toplevel (GdlDockMaster *master, - gboolean include_controller, - GFunc function, - gpointer user_data) -{ - GList *l; - - g_return_if_fail (master != NULL && function != NULL); - - for (l = master->toplevel_docks; l; ) { - GdlDockObject *object = GDL_DOCK_OBJECT (l->data); - l = l->next; - if (object != master->controller || include_controller) - (* function) (GTK_WIDGET (object), user_data); - } -} - -GdlDockObject * -gdl_dock_master_get_object (GdlDockMaster *master, - const gchar *nick_name) -{ - gpointer *found; - - g_return_val_if_fail (master != NULL, NULL); - - if (!nick_name) - return NULL; - - found = g_hash_table_lookup (master->dock_objects, nick_name); - - return found ? GDL_DOCK_OBJECT (found) : NULL; -} - -GdlDockObject * -gdl_dock_master_get_controller (GdlDockMaster *master) -{ - g_return_val_if_fail (master != NULL, NULL); - - return master->controller; -} - -void -gdl_dock_master_set_controller (GdlDockMaster *master, - GdlDockObject *new_controller) -{ - g_return_if_fail (master != NULL); - - if (new_controller) { - if (GDL_DOCK_OBJECT_AUTOMATIC (new_controller)) - g_warning (_("The new dock controller %p is automatic. Only manual " - "dock objects should be named controller."), new_controller); - - /* check that the controller is in the toplevel list */ - if (!g_list_find (master->toplevel_docks, new_controller)) - gdl_dock_master_add (master, new_controller); - master->controller = new_controller; - - } else { - master->controller = NULL; - /* no controller, no master */ - g_object_unref (master); - } -} - -static void -set_switcher_style_foreach (GtkWidget *obj, gpointer user_data) -{ - GdlSwitcherStyle style = GPOINTER_TO_INT (user_data); - - if (!GDL_IS_DOCK_ITEM (obj)) - return; - - if (GDL_IS_DOCK_NOTEBOOK (obj)) { - - GtkWidget *child = GDL_DOCK_ITEM (obj)->child; - if (GDL_IS_SWITCHER (child)) { - - g_object_set (child, "switcher-style", style, NULL); - } - } else if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT (obj))) { - - gtk_container_foreach (GTK_CONTAINER (obj), - set_switcher_style_foreach, - user_data); - } -} - -static void -gdl_dock_master_set_switcher_style (GdlDockMaster *master, - GdlSwitcherStyle switcher_style) -{ - GList *l; - g_return_if_fail (GDL_IS_DOCK_MASTER (master)); - - master->_priv->switcher_style = switcher_style; - for (l = master->toplevel_docks; l; l = l->next) { - GdlDock *dock = GDL_DOCK (l->data); - if (dock->root) - set_switcher_style_foreach (GTK_WIDGET (dock->root), - GINT_TO_POINTER (switcher_style)); - } - - /* just to be sure hidden items are set too */ - gdl_dock_master_foreach (master, (GFunc) set_switcher_style_foreach, - GINT_TO_POINTER (switcher_style)); -} diff --git a/src/libgdl/gdl-dock-master.h b/src/libgdl/gdl-dock-master.h deleted file mode 100644 index 266ca7ee4..000000000 --- a/src/libgdl/gdl-dock-master.h +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-master.h - Object which manages a dock ring - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_MASTER_H__ -#define __GDL_DOCK_MASTER_H__ - -#include -#include -#include "libgdl/gdl-dock-object.h" - - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_MASTER (gdl_dock_master_get_type ()) -#define GDL_DOCK_MASTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_MASTER, GdlDockMaster)) -#define GDL_DOCK_MASTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_MASTER, GdlDockMasterClass)) -#define GDL_IS_DOCK_MASTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_MASTER)) -#define GDL_IS_DOCK_MASTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_MASTER)) -#define GDL_DOCK_MASTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_MASTER, GdlDockMasterClass)) - -/* data types & structures */ -typedef struct _GdlDockMaster GdlDockMaster; -typedef struct _GdlDockMasterClass GdlDockMasterClass; -typedef struct _GdlDockMasterPrivate GdlDockMasterPrivate; - -typedef enum { - GDL_SWITCHER_STYLE_TEXT, - GDL_SWITCHER_STYLE_ICON, - GDL_SWITCHER_STYLE_BOTH, - GDL_SWITCHER_STYLE_TOOLBAR, - GDL_SWITCHER_STYLE_TABS, - GDL_SWITCHER_STYLE_NONE -} GdlSwitcherStyle; - -struct _GdlDockMaster { - GObject object; - - GHashTable *dock_objects; - GList *toplevel_docks; - GdlDockObject *controller; /* GUI root object */ - - gint dock_number; /* for toplevel dock numbering */ - - GdlDockMasterPrivate *_priv; -}; - -struct _GdlDockMasterClass { - GObjectClass parent_class; - - void (* layout_changed) (GdlDockMaster *master); -}; - -/* additional macros */ - -#define GDL_DOCK_OBJECT_GET_MASTER(object) \ - (GDL_DOCK_OBJECT (object)->master ? \ - GDL_DOCK_MASTER (GDL_DOCK_OBJECT (object)->master) : NULL) - -/* public interface */ - -GType gdl_dock_master_get_type (void); - -void gdl_dock_master_add (GdlDockMaster *master, - GdlDockObject *object); -void gdl_dock_master_remove (GdlDockMaster *master, - GdlDockObject *object); -void gdl_dock_master_foreach (GdlDockMaster *master, - GFunc function, - gpointer user_data); - -void gdl_dock_master_foreach_toplevel (GdlDockMaster *master, - gboolean include_controller, - GFunc function, - gpointer user_data); - -GdlDockObject *gdl_dock_master_get_object (GdlDockMaster *master, - const gchar *nick_name); - -GdlDockObject *gdl_dock_master_get_controller (GdlDockMaster *master); -void gdl_dock_master_set_controller (GdlDockMaster *master, - GdlDockObject *new_controller); - -G_END_DECLS - -#endif /* __GDL_DOCK_MASTER_H__ */ diff --git a/src/libgdl/gdl-dock-notebook.c b/src/libgdl/gdl-dock-notebook.c deleted file mode 100644 index 0ffaac902..000000000 --- a/src/libgdl/gdl-dock-notebook.c +++ /dev/null @@ -1,530 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include "gdl-switcher.h" - -#include "gdl-dock-notebook.h" -#include "gdl-dock-tablabel.h" - - -/* Private prototypes */ - -static void gdl_dock_notebook_class_init (GdlDockNotebookClass *klass); -static void gdl_dock_notebook_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_notebook_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_dock_notebook_destroy (GtkObject *object); - -static void gdl_dock_notebook_add (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_notebook_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data); -static GType gdl_dock_notebook_child_type (GtkContainer *container); - -static void gdl_dock_notebook_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - -static void gdl_dock_notebook_switch_page_cb (GtkNotebook *nb, - GtkWidget *page, - gint page_num, - gpointer data); - -static void gdl_dock_notebook_set_orientation (GdlDockItem *item, - GtkOrientation orientation); - -static gboolean gdl_dock_notebook_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement); - -static void gdl_dock_notebook_present (GdlDockObject *object, - GdlDockObject *child); - -static gboolean gdl_dock_notebook_reorder (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement new_position, - GValue *other_data); - - -/* Class variables and definitions */ - -enum { - PROP_0, - PROP_PAGE -}; - - -/* ----- Private functions ----- */ - -G_DEFINE_TYPE (GdlDockNotebook, gdl_dock_notebook, GDL_TYPE_DOCK_ITEM); - -static void -gdl_dock_notebook_class_init (GdlDockNotebookClass *klass) -{ - static gboolean style_initialized = FALSE; - - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - GdlDockObjectClass *object_class; - GdlDockItemClass *item_class; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - object_class = GDL_DOCK_OBJECT_CLASS (klass); - item_class = GDL_DOCK_ITEM_CLASS (klass); - - g_object_class->set_property = gdl_dock_notebook_set_property; - g_object_class->get_property = gdl_dock_notebook_get_property; - - gtk_object_class->destroy = gdl_dock_notebook_destroy; - - container_class->add = gdl_dock_notebook_add; - container_class->forall = gdl_dock_notebook_forall; - container_class->child_type = gdl_dock_notebook_child_type; - - object_class->is_compound = TRUE; - object_class->dock = gdl_dock_notebook_dock; - object_class->child_placement = gdl_dock_notebook_child_placement; - object_class->present = gdl_dock_notebook_present; - object_class->reorder = gdl_dock_notebook_reorder; - - item_class->has_grip = FALSE; - item_class->set_orientation = gdl_dock_notebook_set_orientation; - - g_object_class_install_property ( - g_object_class, PROP_PAGE, - g_param_spec_int ("page", _("Page"), - _("The index of the current page"), - 0, G_MAXINT, - 0, - G_PARAM_READWRITE | - GDL_DOCK_PARAM_EXPORT | GDL_DOCK_PARAM_AFTER)); - - if (!style_initialized) { - style_initialized = TRUE; - - gtk_rc_parse_string ( - "style \"gdl-dock-notebook-default\" {\n" - "xthickness = 2\n" - "ythickness = 2\n" - "}\n" - "widget_class \"*.GtkNotebook.GdlDockItem\" " - "style : gtk \"gdl-dock-notebook-default\"\n"); - } -} - -static void -gdl_dock_notebook_notify_cb (GObject *g_object, - GParamSpec *pspec, - gpointer user_data) -{ - g_return_if_fail (user_data != NULL && GDL_IS_DOCK_NOTEBOOK (user_data)); - - /* chain the notify signal */ - g_object_notify (G_OBJECT (user_data), pspec->name); -} - -static gboolean -gdl_dock_notebook_button_cb (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data) -{ - if (event->type == GDK_BUTTON_PRESS) - GDL_DOCK_ITEM_SET_FLAGS (user_data, GDL_DOCK_USER_ACTION); - else - GDL_DOCK_ITEM_UNSET_FLAGS (user_data, GDL_DOCK_USER_ACTION); - - return FALSE; -} - -static void -gdl_dock_notebook_init (GdlDockNotebook *notebook) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (notebook); - - /* create the container notebook */ - item->child = gdl_switcher_new (); - gtk_widget_set_parent (item->child, GTK_WIDGET (notebook)); - gtk_notebook_set_tab_pos (GTK_NOTEBOOK (item->child), GTK_POS_BOTTOM); - g_signal_connect (item->child, "switch-page", - (GCallback) gdl_dock_notebook_switch_page_cb, (gpointer) item); - g_signal_connect (item->child, "notify::page", - (GCallback) gdl_dock_notebook_notify_cb, (gpointer) item); - g_signal_connect (item->child, "button-press-event", - (GCallback) gdl_dock_notebook_button_cb, (gpointer) item); - g_signal_connect (item->child, "button-release-event", - (GCallback) gdl_dock_notebook_button_cb, (gpointer) item); - gtk_notebook_set_scrollable (GTK_NOTEBOOK (item->child), TRUE); - gtk_widget_show (item->child); -} - -static void -gdl_dock_notebook_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - switch (prop_id) { - case PROP_PAGE: - if (item->child && GTK_IS_NOTEBOOK (item->child)) { - gtk_notebook_set_current_page (GTK_NOTEBOOK (item->child), - g_value_get_int (value)); - } - - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_notebook_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - switch (prop_id) { - case PROP_PAGE: - if (item->child && GTK_IS_NOTEBOOK (item->child)) { - g_value_set_int (value, gtk_notebook_get_current_page - (GTK_NOTEBOOK (item->child))); - } - - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - - -static void -gdl_dock_notebook_destroy (GtkObject *object) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - /* we need to call the virtual first, since in GdlDockDestroy our - children dock objects are detached */ - GTK_OBJECT_CLASS (gdl_dock_notebook_parent_class)->destroy (object); - - /* after that we can remove the GtkNotebook */ - if (item->child) { - gtk_widget_unparent (item->child); - item->child = NULL; - }; -} - -static void -gdl_dock_notebook_switch_page_cb (GtkNotebook *nb, - GtkWidget *page, - gint page_num, - gpointer data) -{ - GdlDockNotebook *notebook; - GtkWidget *tablabel; - GdlDockItem *item; - - notebook = GDL_DOCK_NOTEBOOK (data); - - /* deactivate old tablabel */ - if (gtk_notebook_get_current_page (nb)) { - tablabel = gtk_notebook_get_tab_label ( - nb, gtk_notebook_get_nth_page ( - nb, gtk_notebook_get_current_page (nb))); - if (tablabel && GDL_IS_DOCK_TABLABEL (tablabel)) - gdl_dock_tablabel_deactivate (GDL_DOCK_TABLABEL (tablabel)); - }; - - /* activate new label */ - tablabel = gtk_notebook_get_tab_label ( - nb, page); - if (tablabel && GDL_IS_DOCK_TABLABEL (tablabel)) - gdl_dock_tablabel_activate (GDL_DOCK_TABLABEL (tablabel)); - - if (GDL_DOCK_ITEM_USER_ACTION (notebook) && - GDL_DOCK_OBJECT (notebook)->master) - g_signal_emit_by_name (GDL_DOCK_OBJECT (notebook)->master, - "layout-changed"); - - /* Signal that a new dock item has been selected */ - item = GDL_DOCK_ITEM (page); - gdl_dock_item_notify_selected (item); -} - -static void -gdl_dock_notebook_add (GtkContainer *container, - GtkWidget *widget) -{ - g_return_if_fail (container != NULL && widget != NULL); - g_return_if_fail (GDL_IS_DOCK_NOTEBOOK (container)); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - gdl_dock_object_dock (GDL_DOCK_OBJECT (container), - GDL_DOCK_OBJECT (widget), - GDL_DOCK_CENTER, - NULL); -} - -static void -gdl_dock_notebook_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - GdlDockItem *item; - - g_return_if_fail (container != NULL); - g_return_if_fail (GDL_IS_DOCK_NOTEBOOK (container)); - g_return_if_fail (callback != NULL); - - if (include_internals) { - /* use GdlDockItem's forall */ - GTK_CONTAINER_CLASS (gdl_dock_notebook_parent_class)->forall - (container, include_internals, callback, callback_data); - } - else { - item = GDL_DOCK_ITEM (container); - if (item->child) - gtk_container_foreach (GTK_CONTAINER (item->child), callback, callback_data); - } -} - -static GType -gdl_dock_notebook_child_type (GtkContainer *container) -{ - return GDL_TYPE_DOCK_ITEM; -} - -static void -gdl_dock_notebook_dock_child (GdlDockObject *requestor, - gpointer user_data) -{ - struct { - GdlDockObject *object; - GdlDockPlacement position; - GValue *other_data; - } *data = user_data; - - gdl_dock_object_dock (data->object, requestor, data->position, data->other_data); -} - -static void -gdl_dock_notebook_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - g_return_if_fail (GDL_IS_DOCK_NOTEBOOK (object)); - g_return_if_fail (GDL_IS_DOCK_ITEM (requestor)); - - /* we only add support for GDL_DOCK_CENTER docking strategy here... for the rest - use our parent class' method */ - if (position == GDL_DOCK_CENTER) { - /* we can only dock simple (not compound) items */ - if (gdl_dock_object_is_compound (requestor)) { - struct { - GdlDockObject *object; - GdlDockPlacement position; - GValue *other_data; - } data; - - gdl_dock_object_freeze (requestor); - - data.object = object; - data.position = position; - data.other_data = other_data; - - gtk_container_foreach (GTK_CONTAINER (requestor), - (GtkCallback) gdl_dock_notebook_dock_child, &data); - - gdl_dock_object_thaw (requestor); - } - else { - GdlDockItem *item = GDL_DOCK_ITEM (object); - GdlDockItem *requestor_item = GDL_DOCK_ITEM (requestor); - gchar *long_name, *stock_id; - GdkPixbuf *pixbuf_icon; - GtkWidget *label; - gint position = -1; - - g_object_get (requestor_item, "long-name", &long_name, - "stock-id", &stock_id, "pixbuf-icon", &pixbuf_icon, NULL); - label = gdl_dock_item_get_tablabel (requestor_item); - if (!label) { - label = gtk_label_new (long_name); - gdl_dock_item_set_tablabel (requestor_item, label); - } -#if 0 - if (GDL_IS_DOCK_TABLABEL (label)) { - gdl_dock_tablabel_deactivate (GDL_DOCK_TABLABEL (label)); - /* hide the item grip, as we will use the tablabel's */ - gdl_dock_item_hide_grip (requestor_item); - } -#endif - - if (other_data && G_VALUE_HOLDS (other_data, G_TYPE_INT)) - position = g_value_get_int (other_data); - - position = gdl_switcher_insert_page (GDL_SWITCHER (item->child), - GTK_WIDGET (requestor), label, - long_name, long_name, - stock_id, pixbuf_icon, position); - - GDL_DOCK_OBJECT_SET_FLAGS (requestor, GDL_DOCK_ATTACHED); - - /* Set current page to the newly docked widget. set current page - * really doesn't work if the page widget is not shown - */ - gtk_widget_show (GTK_WIDGET (requestor)); - gtk_notebook_set_current_page (GTK_NOTEBOOK (item->child), - position); - g_free (long_name); - g_free (stock_id); - } - } - else - GDL_DOCK_OBJECT_CLASS (gdl_dock_notebook_parent_class)->dock (object, requestor, position, other_data); -} - -static void -gdl_dock_notebook_set_orientation (GdlDockItem *item, - GtkOrientation orientation) -{ - if (item->child && GTK_IS_NOTEBOOK (item->child)) { - if (orientation == GTK_ORIENTATION_HORIZONTAL) - gtk_notebook_set_tab_pos (GTK_NOTEBOOK (item->child), GTK_POS_TOP); - else - gtk_notebook_set_tab_pos (GTK_NOTEBOOK (item->child), GTK_POS_LEFT); - } - - GDL_DOCK_ITEM_CLASS (gdl_dock_notebook_parent_class)->set_orientation (item, orientation); -} - -static gboolean -gdl_dock_notebook_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - GdlDockPlacement pos = GDL_DOCK_NONE; - - if (item->child) { - GList *children, *l; - - children = gtk_container_get_children (GTK_CONTAINER (item->child)); - for (l = children; l; l = l->next) { - if (l->data == (gpointer) child) { - pos = GDL_DOCK_CENTER; - break; - } - } - g_list_free (children); - } - - if (pos != GDL_DOCK_NONE) { - if (placement) - *placement = pos; - return TRUE; - } - else - return FALSE; -} - -static void -gdl_dock_notebook_present (GdlDockObject *object, - GdlDockObject *child) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - int i; - - i = gtk_notebook_page_num (GTK_NOTEBOOK (item->child), - GTK_WIDGET (child)); - if (i >= 0) - gtk_notebook_set_current_page (GTK_NOTEBOOK (item->child), i); - - GDL_DOCK_OBJECT_CLASS (gdl_dock_notebook_parent_class)->present (object, child); -} - -static gboolean -gdl_dock_notebook_reorder (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement new_position, - GValue *other_data) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - gint current_position, new_pos = -1; - gboolean handled = FALSE; - - if (item->child && new_position == GDL_DOCK_CENTER) { - current_position = gtk_notebook_page_num (GTK_NOTEBOOK (item->child), - GTK_WIDGET (requestor)); - if (current_position >= 0) { - handled = TRUE; - - if (other_data && G_VALUE_HOLDS (other_data, G_TYPE_INT)) - new_pos = g_value_get_int (other_data); - - gtk_notebook_reorder_child (GTK_NOTEBOOK (item->child), - GTK_WIDGET (requestor), - new_pos); - } - } - return handled; -} - -/* ----- Public interface ----- */ - -GtkWidget * -gdl_dock_notebook_new (void) -{ - GdlDockNotebook *notebook; - - notebook = GDL_DOCK_NOTEBOOK (g_object_new (GDL_TYPE_DOCK_NOTEBOOK, NULL)); - GDL_DOCK_OBJECT_UNSET_FLAGS (notebook, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (notebook); -} - diff --git a/src/libgdl/gdl-dock-notebook.h b/src/libgdl/gdl-dock-notebook.h deleted file mode 100644 index 063f53642..000000000 --- a/src/libgdl/gdl-dock-notebook.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_NOTEBOOK_H__ -#define __GDL_DOCK_NOTEBOOK_H__ - -#include "libgdl/gdl-dock-item.h" - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_NOTEBOOK (gdl_dock_notebook_get_type ()) -#define GDL_DOCK_NOTEBOOK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebook)) -#define GDL_DOCK_NOTEBOOK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass)) -#define GDL_IS_DOCK_NOTEBOOK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_NOTEBOOK)) -#define GDL_IS_DOCK_NOTEBOOK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_NOTEBOOK)) -#define GDL_DOCK_NOTEBOOK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass)) - -/* data types & structures */ -typedef struct _GdlDockNotebook GdlDockNotebook; -typedef struct _GdlDockNotebookClass GdlDockNotebookClass; - -struct _GdlDockNotebook { - GdlDockItem item; -}; - -struct _GdlDockNotebookClass { - GdlDockItemClass parent_class; -}; - - -/* public interface */ - -GtkWidget *gdl_dock_notebook_new (void); - -GType gdl_dock_notebook_get_type (void); - -G_END_DECLS - -#endif - diff --git a/src/libgdl/gdl-dock-object.c b/src/libgdl/gdl-dock-object.c deleted file mode 100644 index 4092ecc9f..000000000 --- a/src/libgdl/gdl-dock-object.c +++ /dev/null @@ -1,1027 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-object.c - Abstract base class for all dock related objects - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include - -#include "gdl-dock-object.h" -#include "gdl-dock-master.h" -#include "libgdltypebuiltins.h" -#include "libgdlmarshal.h" - -/* for later use by the registry */ -#include "gdl-dock.h" -#include "gdl-dock-item.h" -#include "gdl-dock-paned.h" -#include "gdl-dock-notebook.h" -#include "gdl-dock-placeholder.h" - - -/* ----- Private prototypes ----- */ - -static void gdl_dock_object_class_init (GdlDockObjectClass *klass); - -static void gdl_dock_object_set_property (GObject *g_object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_object_get_property (GObject *g_object, - guint prop_id, - GValue *value, - GParamSpec *pspec); -static void gdl_dock_object_finalize (GObject *g_object); - -static void gdl_dock_object_destroy (GtkObject *gtk_object); - -static void gdl_dock_object_show (GtkWidget *widget); -static void gdl_dock_object_hide (GtkWidget *widget); - -static void gdl_dock_object_real_detach (GdlDockObject *object, - gboolean recursive); -static void gdl_dock_object_real_reduce (GdlDockObject *object); -static void gdl_dock_object_dock_unimplemented (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); -static void gdl_dock_object_real_present (GdlDockObject *object, - GdlDockObject *child); - - -/* ----- Private data types and variables ----- */ - -enum { - PROP_0, - PROP_NAME, - PROP_LONG_NAME, - PROP_STOCK_ID, - PROP_PIXBUF_ICON, - PROP_MASTER, - PROP_EXPORT_PROPERTIES -}; - -enum { - DETACH, - DOCK, - LAST_SIGNAL -}; - -static guint gdl_dock_object_signals [LAST_SIGNAL] = { 0 }; - -struct DockRegisterItem { - gchar* nick; - gpointer type; -}; - -static GArray *dock_register = NULL; - -/* ----- Private interface ----- */ - -G_DEFINE_TYPE (GdlDockObject, gdl_dock_object, GTK_TYPE_CONTAINER); - -static void -gdl_dock_object_class_init (GdlDockObjectClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - - g_object_class = G_OBJECT_CLASS (klass); - object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - - g_object_class->set_property = gdl_dock_object_set_property; - g_object_class->get_property = gdl_dock_object_get_property; - g_object_class->finalize = gdl_dock_object_finalize; - - g_object_class_install_property ( - g_object_class, PROP_NAME, - g_param_spec_string (GDL_DOCK_NAME_PROPERTY, _("Name"), - _("Unique name for identifying the dock object"), - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_LONG_NAME, - g_param_spec_string ("long-name", _("Long name"), - _("Human readable name for the dock object"), - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - - g_object_class_install_property ( - g_object_class, PROP_STOCK_ID, - g_param_spec_string ("stock-id", _("Stock Icon"), - _("Stock icon for the dock object"), - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - - g_object_class_install_property ( - g_object_class, PROP_PIXBUF_ICON, - g_param_spec_pointer ("pixbuf-icon", _("Pixbuf Icon"), - _("Pixbuf icon for the dock object"), - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_MASTER, - g_param_spec_object ("master", _("Dock master"), - _("Dock master this dock object is bound to"), - GDL_TYPE_DOCK_MASTER, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - - object_class->destroy = gdl_dock_object_destroy; - - widget_class->show = gdl_dock_object_show; - widget_class->hide = gdl_dock_object_hide; - - klass->is_compound = TRUE; - - klass->detach = gdl_dock_object_real_detach; - klass->reduce = gdl_dock_object_real_reduce; - klass->dock_request = NULL; - klass->dock = gdl_dock_object_dock_unimplemented; - klass->reorder = NULL; - klass->present = gdl_dock_object_real_present; - klass->child_placement = NULL; - - gdl_dock_object_signals [DETACH] = - g_signal_new ("detach", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GdlDockObjectClass, detach), - NULL, - NULL, - gdl_marshal_VOID__BOOLEAN, - G_TYPE_NONE, - 1, - G_TYPE_BOOLEAN); - - gdl_dock_object_signals [DOCK] = - g_signal_new ("dock", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GdlDockObjectClass, dock), - NULL, - NULL, - gdl_marshal_VOID__OBJECT_ENUM_BOXED, - G_TYPE_NONE, - 3, - GDL_TYPE_DOCK_OBJECT, - GDL_TYPE_DOCK_PLACEMENT, - G_TYPE_VALUE); -} - -static void -gdl_dock_object_init (GdlDockObject *object) -{ - object->flags = GDL_DOCK_AUTOMATIC; - object->freeze_count = 0; -} - -static void -gdl_dock_object_set_property (GObject *g_object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockObject *object = GDL_DOCK_OBJECT (g_object); - - switch (prop_id) { - case PROP_NAME: - g_free (object->name); - object->name = g_value_dup_string (value); - break; - case PROP_LONG_NAME: - g_free (object->long_name); - object->long_name = g_value_dup_string (value); - break; - case PROP_STOCK_ID: - g_free (object->stock_id); - object->stock_id = g_value_dup_string (value); - break; - case PROP_PIXBUF_ICON: - object->pixbuf_icon = g_value_get_pointer (value); - break; - case PROP_MASTER: - if (g_value_get_object (value)) - gdl_dock_object_bind (object, g_value_get_object (value)); - else - gdl_dock_object_unbind (object); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_object_get_property (GObject *g_object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockObject *object = GDL_DOCK_OBJECT (g_object); - - switch (prop_id) { - case PROP_NAME: - g_value_set_string (value, object->name); - break; - case PROP_LONG_NAME: - g_value_set_string (value, object->long_name); - break; - case PROP_STOCK_ID: - g_value_set_string (value, object->stock_id); - break; - case PROP_PIXBUF_ICON: - g_value_set_pointer (value, object->pixbuf_icon); - break; - case PROP_MASTER: - g_value_set_object (value, object->master); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_object_finalize (GObject *g_object) -{ - GdlDockObject *object; - - g_return_if_fail (g_object != NULL && GDL_IS_DOCK_OBJECT (g_object)); - - object = GDL_DOCK_OBJECT (g_object); - - g_free (object->name); - object->name = NULL; - g_free (object->long_name); - object->long_name = NULL; - g_free (object->stock_id); - object->stock_id = NULL; - object->pixbuf_icon = NULL; - - G_OBJECT_CLASS (gdl_dock_object_parent_class)->finalize (g_object); -} - -static void -gdl_dock_object_foreach_detach (GdlDockObject *object, - gpointer user_data) -{ - gdl_dock_object_detach (object, TRUE); -} - -static void -gdl_dock_object_destroy (GtkObject *gtk_object) -{ - GdlDockObject *object; - - g_return_if_fail (GDL_IS_DOCK_OBJECT (gtk_object)); - - object = GDL_DOCK_OBJECT (gtk_object); - if (gdl_dock_object_is_compound (object)) { - /* detach our dock object children if we have some, and even - if we are not attached, so they can get notification */ - gdl_dock_object_freeze (object); - gtk_container_foreach (GTK_CONTAINER (object), - (GtkCallback) gdl_dock_object_foreach_detach, - NULL); - object->reduce_pending = FALSE; - gdl_dock_object_thaw (object); - } - if (GDL_DOCK_OBJECT_ATTACHED (object)) { - /* detach ourselves */ - gdl_dock_object_detach (object, FALSE); - } - - /* finally unbind us */ - if (object->master) - gdl_dock_object_unbind (object); - - GTK_OBJECT_CLASS(gdl_dock_object_parent_class)->destroy (gtk_object); -} - -static void -gdl_dock_object_foreach_automatic (GdlDockObject *object, - gpointer user_data) -{ - void (* function) (GtkWidget *) = user_data; - - if (GDL_DOCK_OBJECT_AUTOMATIC (object)) - (* function) (GTK_WIDGET (object)); -} - -static void -gdl_dock_object_show (GtkWidget *widget) -{ - if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT (widget))) { - gtk_container_foreach (GTK_CONTAINER (widget), - (GtkCallback) gdl_dock_object_foreach_automatic, - gtk_widget_show); - } - GTK_WIDGET_CLASS (gdl_dock_object_parent_class)->show (widget); -} - -static void -gdl_dock_object_hide (GtkWidget *widget) -{ - if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT (widget))) { - gtk_container_foreach (GTK_CONTAINER (widget), - (GtkCallback) gdl_dock_object_foreach_automatic, - gtk_widget_hide); - } - GTK_WIDGET_CLASS (gdl_dock_object_parent_class)->hide (widget); -} - -static void -gdl_dock_object_real_detach (GdlDockObject *object, - gboolean recursive) -{ - GdlDockObject *parent; - GtkWidget *widget; - - g_return_if_fail (object != NULL); - - /* detach children */ - if (recursive && gdl_dock_object_is_compound (object)) { - gtk_container_foreach (GTK_CONTAINER (object), - (GtkCallback) gdl_dock_object_detach, - GINT_TO_POINTER (recursive)); - } - - /* detach the object itself */ - GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_ATTACHED); - parent = gdl_dock_object_get_parent_object (object); - widget = GTK_WIDGET (object); - if (gtk_widget_get_parent (widget)) - gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (GTK_WIDGET (widget))), widget); - if (parent) - gdl_dock_object_reduce (parent); -} - -static void -gdl_dock_object_real_reduce (GdlDockObject *object) -{ - GdlDockObject *parent; - GList *children; - - g_return_if_fail (object != NULL); - - if (!gdl_dock_object_is_compound (object)) - return; - - parent = gdl_dock_object_get_parent_object (object); - children = gtk_container_get_children (GTK_CONTAINER (object)); - if (g_list_length (children) <= 1) { - GList *l; - GList *dchildren = NULL; - - /* detach ourselves and then re-attach our children to our - current parent. if we are not currently attached, the - children are detached */ - if (parent) - gdl_dock_object_freeze (parent); - gdl_dock_object_freeze (object); - /* Detach the children before detaching this object, since in this - * way the children can have access to the whole object hierarchy. - * Set the InDetach flag now, so the children know that this object - * is going to be detached. */ - - - GDL_DOCK_OBJECT_SET_FLAGS (object, GDL_DOCK_IN_DETACH); - - for (l = children; l; l = l->next) { - GdlDockObject *child; - - if (!GDL_IS_DOCK_OBJECT (l->data)) - continue; - - child = GDL_DOCK_OBJECT (l->data); - - g_object_ref (child); - gdl_dock_object_detach (child, FALSE); - GDL_DOCK_OBJECT_SET_FLAGS (child, GDL_DOCK_IN_REFLOW); - if (parent) - dchildren = g_list_append (dchildren, child); - GDL_DOCK_OBJECT_UNSET_FLAGS (child, GDL_DOCK_IN_REFLOW); - } - /* Now it can be detached */ - gdl_dock_object_detach (object, FALSE); - - /* After detaching the reduced object, we can add the - children (the only child in fact) to the new parent */ - for (l = dchildren; l; l = l->next) { - gtk_container_add (GTK_CONTAINER (parent), l->data); - g_object_unref (l->data); - } - g_list_free (dchildren); - - - /* sink the widget, so any automatic floating widget is destroyed */ - g_object_ref_sink (object); - /* don't reenter */ - object->reduce_pending = FALSE; - gdl_dock_object_thaw (object); - if (parent) - gdl_dock_object_thaw (parent); - } - g_list_free (children); -} - -static void -gdl_dock_object_dock_unimplemented (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - g_warning (_("Call to gdl_dock_object_dock in a dock object %p " - "(object type is %s) which hasn't implemented this method"), - object, G_OBJECT_TYPE_NAME (object)); -} - -static void -gdl_dock_object_real_present (GdlDockObject *object, - GdlDockObject *child) -{ - gtk_widget_show (GTK_WIDGET (object)); -} - - -/* ----- Public interface ----- */ - -gboolean -gdl_dock_object_is_compound (GdlDockObject *object) -{ - GdlDockObjectClass *klass; - - g_return_val_if_fail (object != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_OBJECT (object), FALSE); - - klass = GDL_DOCK_OBJECT_GET_CLASS (object); - return klass->is_compound; -} - -void -gdl_dock_object_detach (GdlDockObject *object, - gboolean recursive) -{ - g_return_if_fail (object != NULL); - - if (!GDL_IS_DOCK_OBJECT (object)) - return; - - if (!GDL_DOCK_OBJECT_ATTACHED (object)) - return; - - /* freeze the object to avoid reducing while detaching children */ - gdl_dock_object_freeze (object); - GDL_DOCK_OBJECT_SET_FLAGS (object, GDL_DOCK_IN_DETACH); - g_signal_emit (object, gdl_dock_object_signals [DETACH], 0, recursive); - GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_IN_DETACH); - gdl_dock_object_thaw (object); -} - -GdlDockObject * -gdl_dock_object_get_parent_object (GdlDockObject *object) -{ - GtkWidget *parent; - - g_return_val_if_fail (object != NULL, NULL); - - parent = gtk_widget_get_parent (GTK_WIDGET (object)); - while (parent && !GDL_IS_DOCK_OBJECT (parent)) { - parent = gtk_widget_get_parent (parent); - } - - return parent ? GDL_DOCK_OBJECT (parent) : NULL; -} - -void -gdl_dock_object_freeze (GdlDockObject *object) -{ - g_return_if_fail (object != NULL); - - if (object->freeze_count == 0) { - g_object_ref (object); /* dock objects shouldn't be - destroyed if they are frozen */ - } - object->freeze_count++; -} - -void -gdl_dock_object_thaw (GdlDockObject *object) -{ - g_return_if_fail (object != NULL); - g_return_if_fail (object->freeze_count > 0); - - object->freeze_count--; - if (object->freeze_count == 0) { - if (object->reduce_pending) { - object->reduce_pending = FALSE; - gdl_dock_object_reduce (object); - } - g_object_unref (object); - } -} - -void -gdl_dock_object_reduce (GdlDockObject *object) -{ - g_return_if_fail (object != NULL); - - if (GDL_DOCK_OBJECT_FROZEN (object)) { - object->reduce_pending = TRUE; - return; - } - - if (GDL_DOCK_OBJECT_GET_CLASS (object)->reduce) - GDL_DOCK_OBJECT_GET_CLASS (object)->reduce (object); -} - -gboolean -gdl_dock_object_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request) -{ - g_return_val_if_fail (object != NULL && request != NULL, FALSE); - - if (GDL_DOCK_OBJECT_GET_CLASS (object)->dock_request) - return GDL_DOCK_OBJECT_GET_CLASS (object)->dock_request (object, x, y, request); - else - return FALSE; -} - -/** - * gdl_dock_object_dock: - * @object: - * @requestor: - * @position: - * @other_data: (allow-none): - **/ -void -gdl_dock_object_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - GdlDockObject *parent; - - g_return_if_fail (object != NULL && requestor != NULL); - - if (object == requestor) - return; - - if (!object->master) - g_warning (_("Dock operation requested in a non-bound object %p. " - "The application might crash"), object); - - if (!gdl_dock_object_is_bound (requestor)) - gdl_dock_object_bind (requestor, object->master); - - if (requestor->master != object->master) { - g_warning (_("Cannot dock %p to %p because they belong to different masters"), - requestor, object); - return; - } - - /* first, see if we can optimize things by reordering */ - if (position != GDL_DOCK_NONE) { - parent = gdl_dock_object_get_parent_object (object); - if (gdl_dock_object_reorder (object, requestor, position, other_data) || - (parent && gdl_dock_object_reorder (parent, requestor, position, other_data))) - return; - } - - /* freeze the object, since under some conditions it might be destroyed when - detaching the requestor */ - gdl_dock_object_freeze (object); - - /* detach the requestor before docking */ - g_object_ref (requestor); - if (GDL_DOCK_OBJECT_ATTACHED (requestor)) - gdl_dock_object_detach (requestor, FALSE); - - if (position != GDL_DOCK_NONE) - g_signal_emit (object, gdl_dock_object_signals [DOCK], 0, - requestor, position, other_data); - - g_object_unref (requestor); - gdl_dock_object_thaw (object); -} - -void -gdl_dock_object_bind (GdlDockObject *object, - GObject *master) -{ - g_return_if_fail (object != NULL && master != NULL); - g_return_if_fail (GDL_IS_DOCK_MASTER (master)); - - if (object->master == master) - /* nothing to do here */ - return; - - if (object->master) { - g_warning (_("Attempt to bind to %p an already bound dock object %p " - "(current master: %p)"), master, object, object->master); - return; - } - - gdl_dock_master_add (GDL_DOCK_MASTER (master), object); - object->master = master; - g_object_add_weak_pointer (master, (gpointer *) &object->master); - - g_object_notify (G_OBJECT (object), "master"); -} - -void -gdl_dock_object_unbind (GdlDockObject *object) -{ - g_return_if_fail (object != NULL); - - g_object_ref (object); - - /* detach the object first */ - if (GDL_DOCK_OBJECT_ATTACHED (object)) - gdl_dock_object_detach (object, TRUE); - - if (object->master) { - GObject *master = object->master; - g_object_remove_weak_pointer (master, (gpointer *) &object->master); - object->master = NULL; - gdl_dock_master_remove (GDL_DOCK_MASTER (master), object); - g_object_notify (G_OBJECT (object), "master"); - } - g_object_unref (object); -} - -gboolean -gdl_dock_object_is_bound (GdlDockObject *object) -{ - g_return_val_if_fail (object != NULL, FALSE); - return (object->master != NULL); -} - -gboolean -gdl_dock_object_reorder (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement new_position, - GValue *other_data) -{ - g_return_val_if_fail (object != NULL && child != NULL, FALSE); - - if (GDL_DOCK_OBJECT_GET_CLASS (object)->reorder) - return GDL_DOCK_OBJECT_GET_CLASS (object)->reorder (object, child, new_position, other_data); - else - return FALSE; -} - -void -gdl_dock_object_present (GdlDockObject *object, - GdlDockObject *child) -{ - GdlDockObject *parent; - - g_return_if_fail (object != NULL && GDL_IS_DOCK_OBJECT (object)); - - parent = gdl_dock_object_get_parent_object (object); - if (parent) - /* chain the call to our parent */ - gdl_dock_object_present (parent, object); - - if (GDL_DOCK_OBJECT_GET_CLASS (object)->present) - GDL_DOCK_OBJECT_GET_CLASS (object)->present (object, child); -} - -/** - * gdl_dock_object_child_placement: - * @object: the dock object we are asking for child placement - * @child: the child of the @object we want the placement for - * @placement: where to return the placement information - * - * This function returns information about placement of a child dock - * object inside another dock object. The function returns %TRUE if - * @child is effectively a child of @object. @placement should - * normally be initially setup to %GDL_DOCK_NONE. If it's set to some - * other value, this function will not touch the stored value if the - * specified placement is "compatible" with the actual placement of - * the child. - * - * @placement can be %NULL, in which case the function simply tells if - * @child is attached to @object. - * - * Returns: %TRUE if @child is a child of @object. - */ -gboolean -gdl_dock_object_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement) -{ - g_return_val_if_fail (object != NULL && child != NULL, FALSE); - - /* simple case */ - if (!gdl_dock_object_is_compound (object)) - return FALSE; - - if (GDL_DOCK_OBJECT_GET_CLASS (object)->child_placement) - return GDL_DOCK_OBJECT_GET_CLASS (object)->child_placement (object, child, placement); - else - return FALSE; -} - - -/* ----- dock param type functions start here ------ */ - -static void -gdl_dock_param_export_int (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = g_strdup_printf ("%d", src->data [0].v_int); -} - -static void -gdl_dock_param_export_uint (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = g_strdup_printf ("%u", src->data [0].v_uint); -} - -static void -gdl_dock_param_export_string (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = g_strdup (src->data [0].v_pointer); -} - -static void -gdl_dock_param_export_bool (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = g_strdup_printf ("%s", src->data [0].v_int ? "yes" : "no"); -} - -static void -gdl_dock_param_export_placement (const GValue *src, - GValue *dst) -{ - switch (src->data [0].v_int) { - case GDL_DOCK_NONE: - dst->data [0].v_pointer = g_strdup (""); - break; - case GDL_DOCK_TOP: - dst->data [0].v_pointer = g_strdup ("top"); - break; - case GDL_DOCK_BOTTOM: - dst->data [0].v_pointer = g_strdup ("bottom"); - break; - case GDL_DOCK_LEFT: - dst->data [0].v_pointer = g_strdup ("left"); - break; - case GDL_DOCK_RIGHT: - dst->data [0].v_pointer = g_strdup ("right"); - break; - case GDL_DOCK_CENTER: - dst->data [0].v_pointer = g_strdup ("center"); - break; - case GDL_DOCK_FLOATING: - dst->data [0].v_pointer = g_strdup ("floating"); - break; - } -} - -static void -gdl_dock_param_import_int (const GValue *src, - GValue *dst) -{ - dst->data [0].v_int = atoi (src->data [0].v_pointer); -} - -static void -gdl_dock_param_import_uint (const GValue *src, - GValue *dst) -{ - dst->data [0].v_uint = (guint) atoi (src->data [0].v_pointer); -} - -static void -gdl_dock_param_import_string (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = g_strdup (src->data [0].v_pointer); -} - -static void -gdl_dock_param_import_bool (const GValue *src, - GValue *dst) -{ - dst->data [0].v_int = !strcmp (src->data [0].v_pointer, "yes"); -} - -static void -gdl_dock_param_import_placement (const GValue *src, - GValue *dst) -{ - if (!strcmp (src->data [0].v_pointer, "top")) - dst->data [0].v_int = GDL_DOCK_TOP; - else if (!strcmp (src->data [0].v_pointer, "bottom")) - dst->data [0].v_int = GDL_DOCK_BOTTOM; - else if (!strcmp (src->data [0].v_pointer, "center")) - dst->data [0].v_int = GDL_DOCK_CENTER; - else if (!strcmp (src->data [0].v_pointer, "left")) - dst->data [0].v_int = GDL_DOCK_LEFT; - else if (!strcmp (src->data [0].v_pointer, "right")) - dst->data [0].v_int = GDL_DOCK_RIGHT; - else if (!strcmp (src->data [0].v_pointer, "floating")) - dst->data [0].v_int = GDL_DOCK_FLOATING; - else - dst->data [0].v_int = GDL_DOCK_NONE; -} - -GType -gdl_dock_param_get_type (void) -{ - static GType our_type = 0; - - if (our_type == 0) { - GTypeInfo tinfo = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - our_type = g_type_register_static (G_TYPE_STRING, "GdlDockParam", &tinfo, 0); - - /* register known transform functions */ - /* exporters */ - g_value_register_transform_func (G_TYPE_INT, our_type, gdl_dock_param_export_int); - g_value_register_transform_func (G_TYPE_UINT, our_type, gdl_dock_param_export_uint); - g_value_register_transform_func (G_TYPE_STRING, our_type, gdl_dock_param_export_string); - g_value_register_transform_func (G_TYPE_BOOLEAN, our_type, gdl_dock_param_export_bool); - g_value_register_transform_func (GDL_TYPE_DOCK_PLACEMENT, our_type, gdl_dock_param_export_placement); - /* importers */ - g_value_register_transform_func (our_type, G_TYPE_INT, gdl_dock_param_import_int); - g_value_register_transform_func (our_type, G_TYPE_UINT, gdl_dock_param_import_uint); - g_value_register_transform_func (our_type, G_TYPE_STRING, gdl_dock_param_import_string); - g_value_register_transform_func (our_type, G_TYPE_BOOLEAN, gdl_dock_param_import_bool); - g_value_register_transform_func (our_type, GDL_TYPE_DOCK_PLACEMENT, gdl_dock_param_import_placement); - } - - return our_type; -} - -/* -------------- nick <-> type conversion functions --------------- */ - -static void -gdl_dock_object_register_init (void) -{ - const size_t n_default = 5; - guint i = 0; - struct DockRegisterItem default_items[n_default]; - - if (dock_register) - return; - - dock_register - = g_array_new (FALSE, FALSE, sizeof (struct DockRegisterItem)); - - /* add known types */ - default_items[0].nick = "dock"; - default_items[0].type = (gpointer) GDL_TYPE_DOCK; - default_items[1].nick = "item"; - default_items[1].type = (gpointer) GDL_TYPE_DOCK_ITEM; - default_items[2].nick = "paned"; - default_items[2].type = (gpointer) GDL_TYPE_DOCK_PANED; - default_items[3].nick = "notebook"; - default_items[3].type = (gpointer) GDL_TYPE_DOCK_NOTEBOOK; - default_items[4].nick = "placeholder"; - default_items[4].type = (gpointer) GDL_TYPE_DOCK_PLACEHOLDER; - - for (i = 0; i < n_default; i++) - g_array_append_val (dock_register, default_items[i]); -} - -/** - * gdl_dock_object_nick_from_type: - * @type: The type for which to find the nickname - * - * Finds the nickname for a given type - * - * Returns: If the object has a nickname, then it is returned. - * Otherwise, the type name. - */ -const gchar * -gdl_dock_object_nick_from_type (GType type) -{ - gchar *nick = NULL; - guint i = 0; - - if (!dock_register) - gdl_dock_object_register_init (); - - for (i=0; i < dock_register->len; i++) { - struct DockRegisterItem item - = g_array_index (dock_register, struct DockRegisterItem, i); - - if (g_direct_equal (item.type, (gpointer) type)) - nick = g_strdup (item.nick); - } - - return nick ? nick : g_type_name (type); -} - -/** - * gdl_dock_object_type_from_nick: - * @nick: The nickname for the object type - * - * Finds the object type assigned to a given nickname. - * - * Returns: If the nickname has previously been assigned, then the corresponding - * object type is returned. Otherwise, %G_TYPE_NONE. - */ -GType -gdl_dock_object_type_from_nick (const gchar *nick) -{ - GType type = G_TYPE_NONE; - gboolean nick_is_in_register = FALSE; - guint i = 0; - - if (!dock_register) - gdl_dock_object_register_init (); - - for (i = 0; i < dock_register->len; i++) { - struct DockRegisterItem item - = g_array_index (dock_register, struct DockRegisterItem, i); - - if (!g_strcmp0 (nick, item.nick)) { - nick_is_in_register = TRUE; - type = (GType) item.type; - } - } - if (!nick_is_in_register) { - /* try searching in the glib type system */ - type = g_type_from_name (nick); - } - - return type; -} - -/** - * gdl_dock_object_set_type_for_nick: - * @nick: The nickname for the object type - * @type: The object type - * - * Assigns an object type to a given nickname. If the nickname already exists, - * then it reassigns it to a new object type. - * - * Returns: If the nick was previously assigned, the old type is returned. - * Otherwise, %G_TYPE_NONE. - */ -GType -gdl_dock_object_set_type_for_nick (const gchar *nick, - GType type) -{ - GType old_type = G_TYPE_NONE; - guint i = 0; - struct DockRegisterItem new_item; - new_item.nick = g_strdup(nick); - new_item.type = (gpointer) type; - - if (!dock_register) - gdl_dock_object_register_init (); - - g_return_val_if_fail (g_type_is_a (type, GDL_TYPE_DOCK_OBJECT), G_TYPE_NONE); - - for (i = 0; i < dock_register->len; i++) { - struct DockRegisterItem item - = g_array_index (dock_register, struct DockRegisterItem, i); - - if (!g_strcmp0 (nick, item.nick)) { - old_type = (GType) item.type; - g_array_insert_val (dock_register, i, new_item); - } - } - - return old_type; -} - diff --git a/src/libgdl/gdl-dock-object.h b/src/libgdl/gdl-dock-object.h deleted file mode 100644 index f8b192f35..000000000 --- a/src/libgdl/gdl-dock-object.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-object.h - Abstract base class for all dock related objects - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_OBJECT_H__ -#define __GDL_DOCK_OBJECT_H__ - -#include - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_OBJECT (gdl_dock_object_get_type ()) -#define GDL_DOCK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_OBJECT, GdlDockObject)) -#define GDL_DOCK_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_OBJECT, GdlDockObjectClass)) -#define GDL_IS_DOCK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_OBJECT)) -#define GDL_IS_DOCK_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_OBJECT)) -#define GDL_DOCK_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_OBJECT, GdlDockObjectClass)) - -/* data types & structures */ -typedef enum { - /* the parameter is to be exported for later layout rebuilding */ - GDL_DOCK_PARAM_EXPORT = 1 << G_PARAM_USER_SHIFT, - /* the parameter must be set after adding the children objects */ - GDL_DOCK_PARAM_AFTER = 1 << (G_PARAM_USER_SHIFT + 1) -} GdlDockParamFlags; - -#define GDL_DOCK_NAME_PROPERTY "name" -#define GDL_DOCK_MASTER_PROPERTY "master" - -typedef enum { - GDL_DOCK_AUTOMATIC = 1 << 0, - GDL_DOCK_ATTACHED = 1 << 1, - GDL_DOCK_IN_REFLOW = 1 << 2, - GDL_DOCK_IN_DETACH = 1 << 3 -} GdlDockObjectFlags; - -#define GDL_DOCK_OBJECT_FLAGS_SHIFT 8 - -typedef enum { - GDL_DOCK_NONE = 0, - GDL_DOCK_TOP, - GDL_DOCK_BOTTOM, - GDL_DOCK_RIGHT, - GDL_DOCK_LEFT, - GDL_DOCK_CENTER, - GDL_DOCK_FLOATING -} GdlDockPlacement; - -typedef struct _GdlDockObject GdlDockObject; -typedef struct _GdlDockObjectClass GdlDockObjectClass; -typedef struct _GdlDockRequest GdlDockRequest; - -struct _GdlDockRequest { - GdlDockObject *applicant; - GdlDockObject *target; - GdlDockPlacement position; - GdkRectangle rect; - GValue extra; -}; - -struct _GdlDockObject { - GtkContainer container; - - GdlDockObjectFlags flags; - gint freeze_count; - - GObject *master; - gchar *name; - gchar *long_name; - gchar *stock_id; - GdkPixbuf *pixbuf_icon; - - gboolean reduce_pending; -}; - -struct _GdlDockObjectClass { - GtkContainerClass parent_class; - - gboolean is_compound; - - void (* detach) (GdlDockObject *object, - gboolean recursive); - void (* reduce) (GdlDockObject *object); - - gboolean (* dock_request) (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request); - - void (* dock) (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - - gboolean (* reorder) (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement new_position, - GValue *other_data); - - void (* present) (GdlDockObject *object, - GdlDockObject *child); - - gboolean (* child_placement) (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement); -}; - -/* additional macros */ -#define GDL_DOCK_OBJECT_FLAGS(obj) (GDL_DOCK_OBJECT (obj)->flags) -#define GDL_DOCK_OBJECT_AUTOMATIC(obj) \ - ((GDL_DOCK_OBJECT_FLAGS (obj) & GDL_DOCK_AUTOMATIC) != 0) -#define GDL_DOCK_OBJECT_ATTACHED(obj) \ - ((GDL_DOCK_OBJECT_FLAGS (obj) & GDL_DOCK_ATTACHED) != 0) -#define GDL_DOCK_OBJECT_IN_REFLOW(obj) \ - ((GDL_DOCK_OBJECT_FLAGS (obj) & GDL_DOCK_IN_REFLOW) != 0) -#define GDL_DOCK_OBJECT_IN_DETACH(obj) \ - ((GDL_DOCK_OBJECT_FLAGS (obj) & GDL_DOCK_IN_DETACH) != 0) - -#define GDL_DOCK_OBJECT_SET_FLAGS(obj,flag) \ - G_STMT_START { (GDL_DOCK_OBJECT_FLAGS (obj) |= (flag)); } G_STMT_END -#define GDL_DOCK_OBJECT_UNSET_FLAGS(obj,flag) \ - G_STMT_START { (GDL_DOCK_OBJECT_FLAGS (obj) &= ~(flag)); } G_STMT_END - -#define GDL_DOCK_OBJECT_FROZEN(obj) (GDL_DOCK_OBJECT (obj)->freeze_count > 0) - - -/* public interface */ - -GType gdl_dock_object_get_type (void); - -gboolean gdl_dock_object_is_compound (GdlDockObject *object); - -void gdl_dock_object_detach (GdlDockObject *object, - gboolean recursive); - -GdlDockObject *gdl_dock_object_get_parent_object (GdlDockObject *object); - -void gdl_dock_object_freeze (GdlDockObject *object); -void gdl_dock_object_thaw (GdlDockObject *object); - -void gdl_dock_object_reduce (GdlDockObject *object); - -gboolean gdl_dock_object_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request); -void gdl_dock_object_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - -void gdl_dock_object_bind (GdlDockObject *object, - GObject *master); -void gdl_dock_object_unbind (GdlDockObject *object); -gboolean gdl_dock_object_is_bound (GdlDockObject *object); - -gboolean gdl_dock_object_reorder (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement new_position, - GValue *other_data); - -void gdl_dock_object_present (GdlDockObject *object, - GdlDockObject *child); - -gboolean gdl_dock_object_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement); - -/* other types */ - -/* this type derives from G_TYPE_STRING and is meant to be the basic - type for serializing object parameters which are exported - (i.e. those that are needed for layout rebuilding) */ -#define GDL_TYPE_DOCK_PARAM (gdl_dock_param_get_type ()) - -GType gdl_dock_param_get_type (void); - -/* functions for setting/retrieving nick names for serializing GdlDockObject types */ -const gchar *gdl_dock_object_nick_from_type (GType type); -GType gdl_dock_object_type_from_nick (const gchar *nick); -GType gdl_dock_object_set_type_for_nick (const gchar *nick, - GType type); - - -/* helper macros */ -#define GDL_TRACE_OBJECT(object, format, args...) \ - G_STMT_START { \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_DEBUG, \ - "%s:%d (%s) %s [%p %d%s:%d]: " format, \ - __FILE__, \ - __LINE__, \ - __PRETTY_FUNCTION__, \ - G_OBJECT_TYPE_NAME (object), object, \ - G_OBJECT (object)->ref_count, \ - (GTK_IS_OBJECT (object) && g_object_is_floating (object)) ? "(float)" : "", \ - GDL_IS_DOCK_OBJECT (object) ? GDL_DOCK_OBJECT (object)->freeze_count : -1, \ - ##args); } G_STMT_END - - - -G_END_DECLS - -#endif /* __GDL_DOCK_OBJECT_H__ */ - diff --git a/src/libgdl/gdl-dock-paned.c b/src/libgdl/gdl-dock-paned.c deleted file mode 100644 index 5b4561ef3..000000000 --- a/src/libgdl/gdl-dock-paned.c +++ /dev/null @@ -1,678 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-paned.h - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include - -#include "gdl-dock-paned.h" - - -/* Private prototypes */ - -static void gdl_dock_paned_class_init (GdlDockPanedClass *klass); -static void gdl_dock_paned_init (GdlDockPaned *paned); -static GObject *gdl_dock_paned_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param); -static void gdl_dock_paned_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_paned_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_dock_paned_destroy (GtkObject *object); - -static void gdl_dock_paned_add (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_paned_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data); -static GType gdl_dock_paned_child_type (GtkContainer *container); - -static gboolean gdl_dock_paned_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request); -static void gdl_dock_paned_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - -static void gdl_dock_paned_set_orientation (GdlDockItem *item, - GtkOrientation orientation); - -static gboolean gdl_dock_paned_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement); - - -/* ----- Class variables and definitions ----- */ - -#define SPLIT_RATIO 0.3 - -enum { - PROP_0, - PROP_POSITION -}; - - -/* ----- Private functions ----- */ - -G_DEFINE_TYPE (GdlDockPaned, gdl_dock_paned, GDL_TYPE_DOCK_ITEM); - -static void -gdl_dock_paned_class_init (GdlDockPanedClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - GdlDockObjectClass *object_class; - GdlDockItemClass *item_class; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - object_class = GDL_DOCK_OBJECT_CLASS (klass); - item_class = GDL_DOCK_ITEM_CLASS (klass); - - g_object_class->set_property = gdl_dock_paned_set_property; - g_object_class->get_property = gdl_dock_paned_get_property; - g_object_class->constructor = gdl_dock_paned_constructor; - - gtk_object_class->destroy = gdl_dock_paned_destroy; - - container_class->add = gdl_dock_paned_add; - container_class->forall = gdl_dock_paned_forall; - container_class->child_type = gdl_dock_paned_child_type; - - object_class->is_compound = TRUE; - - object_class->dock_request = gdl_dock_paned_dock_request; - object_class->dock = gdl_dock_paned_dock; - object_class->child_placement = gdl_dock_paned_child_placement; - - item_class->has_grip = FALSE; - item_class->set_orientation = gdl_dock_paned_set_orientation; - - g_object_class_install_property ( - g_object_class, PROP_POSITION, - g_param_spec_uint ("position", _("Position"), - _("Position of the divider in pixels"), - 0, G_MAXINT, 0, - G_PARAM_READWRITE | - GDL_DOCK_PARAM_EXPORT | GDL_DOCK_PARAM_AFTER)); -} - -static void -gdl_dock_paned_init (GdlDockPaned *paned) -{ - paned->position_changed = FALSE; -} - -static void -gdl_dock_paned_notify_cb (GObject *g_object, - GParamSpec *pspec, - gpointer user_data) -{ - GdlDockPaned *paned; - - g_return_if_fail (user_data != NULL && GDL_IS_DOCK_PANED (user_data)); - - /* chain the notification to the GdlDockPaned */ - g_object_notify (G_OBJECT (user_data), pspec->name); - - paned = GDL_DOCK_PANED (user_data); - - if (GDL_DOCK_ITEM_USER_ACTION (user_data) && !strcmp (pspec->name, "position")) - paned->position_changed = TRUE; -} - -static gboolean -gdl_dock_paned_button_cb (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data) -{ - GdlDockPaned *paned; - - g_return_val_if_fail (user_data != NULL && GDL_IS_DOCK_PANED (user_data), FALSE); - - paned = GDL_DOCK_PANED (user_data); - if (event->button == 1) { - if (event->type == GDK_BUTTON_PRESS) - GDL_DOCK_ITEM_SET_FLAGS (user_data, GDL_DOCK_USER_ACTION); - else { - GDL_DOCK_ITEM_UNSET_FLAGS (user_data, GDL_DOCK_USER_ACTION); - if (paned->position_changed) { - /* emit pending layout changed signal to track separator position */ - if (GDL_DOCK_OBJECT (paned)->master) - g_signal_emit_by_name (GDL_DOCK_OBJECT (paned)->master, "layout-changed"); - paned->position_changed = FALSE; - } - } - } - - return FALSE; -} - -static void -gdl_dock_paned_create_child (GdlDockPaned *paned, - GtkOrientation orientation) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (paned); - - if (item->child) - gtk_widget_unparent (GTK_WIDGET (item->child)); - - /* create the container paned */ - if (orientation == GTK_ORIENTATION_HORIZONTAL) - item->child = gtk_hpaned_new (); - else - item->child = gtk_vpaned_new (); - - /* get notification for propagation */ - g_signal_connect (item->child, "notify::position", - (GCallback) gdl_dock_paned_notify_cb, (gpointer) item); - g_signal_connect (item->child, "button-press-event", - (GCallback) gdl_dock_paned_button_cb, (gpointer) item); - g_signal_connect (item->child, "button-release-event", - (GCallback) gdl_dock_paned_button_cb, (gpointer) item); - - gtk_widget_set_parent (item->child, GTK_WIDGET (item)); - gtk_widget_show (item->child); -} - -static GObject * -gdl_dock_paned_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param) -{ - GObject *g_object; - - g_object = G_OBJECT_CLASS (gdl_dock_paned_parent_class)-> constructor (type, - n_construct_properties, - construct_param); - if (g_object) { - GdlDockItem *item = GDL_DOCK_ITEM (g_object); - - if (!item->child) - gdl_dock_paned_create_child (GDL_DOCK_PANED (g_object), - item->orientation); - /* otherwise, the orientation was set as a construction - parameter and the child is already created */ - } - - return g_object; -} - -static void -gdl_dock_paned_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - switch (prop_id) { - case PROP_POSITION: - if (item->child && GTK_IS_PANED (item->child)) - gtk_paned_set_position (GTK_PANED (item->child), - g_value_get_uint (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_paned_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - switch (prop_id) { - case PROP_POSITION: - if (item->child && GTK_IS_PANED (item->child)) - g_value_set_uint (value, - gtk_paned_get_position (GTK_PANED (item->child))); - else - g_value_set_uint (value, 0); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_paned_destroy (GtkObject *object) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - /* we need to call the virtual first, since in GdlDockDestroy our - children dock objects are detached */ - GTK_OBJECT_CLASS (gdl_dock_paned_parent_class)->destroy (object); - - /* after that we can remove the GtkNotebook */ - if (item->child) { - gtk_widget_unparent (item->child); - item->child = NULL; - }; -} - -static void -gdl_dock_paned_add (GtkContainer *container, - GtkWidget *widget) -{ - GdlDockItem *item; - GdlDockPlacement pos = GDL_DOCK_NONE; - GtkPaned *paned; - GtkWidget *child1, *child2; - - g_return_if_fail (container != NULL && widget != NULL); - g_return_if_fail (GDL_IS_DOCK_PANED (container)); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - item = GDL_DOCK_ITEM (container); - g_return_if_fail (item->child != NULL); - - paned = GTK_PANED (item->child); - child1 = gtk_paned_get_child1 (paned); - child2 = gtk_paned_get_child2 (paned); - g_return_if_fail (!child1 || !child2); - - if (!child1) - pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ? - GDL_DOCK_LEFT : GDL_DOCK_TOP; - else if (!child2) - pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ? - GDL_DOCK_RIGHT : GDL_DOCK_BOTTOM; - - if (pos != GDL_DOCK_NONE) - gdl_dock_object_dock (GDL_DOCK_OBJECT (container), - GDL_DOCK_OBJECT (widget), - pos, NULL); -} - -static void -gdl_dock_paned_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - GdlDockItem *item; - - g_return_if_fail (container != NULL); - g_return_if_fail (GDL_IS_DOCK_PANED (container)); - g_return_if_fail (callback != NULL); - - if (include_internals) { - /* use GdlDockItem's forall */ - GTK_CONTAINER_CLASS (gdl_dock_paned_parent_class)->forall - (container, include_internals, callback, callback_data); - } - else { - item = GDL_DOCK_ITEM (container); - if (item->child) - gtk_container_foreach (GTK_CONTAINER (item->child), callback, callback_data); - } -} - -static GType -gdl_dock_paned_child_type (GtkContainer *container) -{ - GdlDockItem *item = GDL_DOCK_ITEM (container); - - if (gtk_container_child_type (GTK_CONTAINER (item->child)) == G_TYPE_NONE) - return G_TYPE_NONE; - else - return GDL_TYPE_DOCK_ITEM; -} - -static void -gdl_dock_paned_request_foreach (GdlDockObject *object, - gpointer user_data) -{ - struct { - gint x, y; - GdlDockRequest *request; - gboolean may_dock; - } *data = user_data; - - GdlDockRequest my_request; - gboolean may_dock; - - my_request = *data->request; - may_dock = gdl_dock_object_dock_request (object, data->x, data->y, &my_request); - if (may_dock) { - data->may_dock = TRUE; - *data->request = my_request; - } -} - -static gboolean -gdl_dock_paned_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request) -{ - GdlDockItem *item; - guint bw; - gint rel_x, rel_y; - GtkAllocation alloc; - gboolean may_dock = FALSE; - GdlDockRequest my_request; - - g_return_val_if_fail (GDL_IS_DOCK_ITEM (object), FALSE); - - /* we get (x,y) in our allocation coordinates system */ - - item = GDL_DOCK_ITEM (object); - - /* Get item's allocation. */ - gtk_widget_get_allocation (GTK_WIDGET (object), &alloc); - bw = gtk_container_get_border_width (GTK_CONTAINER (object)); - - /* Get coordinates relative to our window. */ - rel_x = x - alloc.x; - rel_y = y - alloc.y; - - if (request) - my_request = *request; - - /* Check if coordinates are inside the widget. */ - if (rel_x > 0 && rel_x < alloc.width && - rel_y > 0 && rel_y < alloc.height) { - GtkRequisition my, other; - gint divider = -1; - - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (my_request.applicant), &other); - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (object), &my); - - /* It's inside our area. */ - may_dock = TRUE; - - /* Set docking indicator rectangle to the widget size. */ - my_request.rect.x = bw; - my_request.rect.y = bw; - my_request.rect.width = alloc.width - 2*bw; - my_request.rect.height = alloc.height - 2*bw; - - my_request.target = object; - - /* See if it's in the border_width band. */ - if (rel_x < (gint)bw) { - my_request.position = GDL_DOCK_LEFT; - my_request.rect.width *= SPLIT_RATIO; - divider = other.width; - } else if (rel_x > alloc.width - (gint)bw) { - my_request.position = GDL_DOCK_RIGHT; - my_request.rect.x += my_request.rect.width * (1 - SPLIT_RATIO); - my_request.rect.width *= SPLIT_RATIO; - divider = MAX (0, my.width - other.width); - } else if (rel_y < (gint)bw) { - my_request.position = GDL_DOCK_TOP; - my_request.rect.height *= SPLIT_RATIO; - divider = other.height; - } else if (rel_y > alloc.height - (gint)bw) { - my_request.position = GDL_DOCK_BOTTOM; - my_request.rect.y += my_request.rect.height * (1 - SPLIT_RATIO); - my_request.rect.height *= SPLIT_RATIO; - divider = MAX (0, my.height - other.height); - - } else { /* Otherwise try our children. */ - struct { - gint x, y; - GdlDockRequest *request; - gboolean may_dock; - } data; - - /* give them coordinates in their allocation system... the - GtkPaned has no window, so our children allocation - coordinates are our window coordinates */ - data.x = rel_x; - data.y = rel_y; - data.request = &my_request; - data.may_dock = FALSE; - - gtk_container_foreach (GTK_CONTAINER (object), - (GtkCallback) gdl_dock_paned_request_foreach, - &data); - - may_dock = data.may_dock; - if (!may_dock) { - /* the pointer is on the handle, so snap to top/bottom - or left/right */ - may_dock = TRUE; - if (item->orientation == GTK_ORIENTATION_HORIZONTAL) { - if (rel_y < alloc.height / 2) { - my_request.position = GDL_DOCK_TOP; - my_request.rect.height *= SPLIT_RATIO; - divider = other.height; - } else { - my_request.position = GDL_DOCK_BOTTOM; - my_request.rect.y += my_request.rect.height * (1 - SPLIT_RATIO); - my_request.rect.height *= SPLIT_RATIO; - divider = MAX (0, my.height - other.height); - } - } else { - if (rel_x < alloc.width / 2) { - my_request.position = GDL_DOCK_LEFT; - my_request.rect.width *= SPLIT_RATIO; - divider = other.width; - } else { - my_request.position = GDL_DOCK_RIGHT; - my_request.rect.x += my_request.rect.width * (1 - SPLIT_RATIO); - my_request.rect.width *= SPLIT_RATIO; - divider = MAX (0, my.width - other.width); - } - } - } - } - - if (divider >= 0 && my_request.position != GDL_DOCK_CENTER) { - if (G_IS_VALUE (&my_request.extra)) - g_value_unset (&my_request.extra); - g_value_init (&my_request.extra, G_TYPE_UINT); - g_value_set_uint (&my_request.extra, (guint) divider); - } - - if (may_dock) { - /* adjust returned coordinates so they are relative to - our allocation */ - my_request.rect.x += alloc.x; - my_request.rect.y += alloc.y; - } - } - - if (may_dock && request) - *request = my_request; - - return may_dock; -} - -static void -gdl_dock_paned_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - GtkPaned *paned; - GtkWidget *child1, *child2; - gboolean done = FALSE; - gboolean hresize = FALSE; - gboolean wresize = FALSE; - gint temp = 0; - - g_return_if_fail (GDL_IS_DOCK_PANED (object)); - g_return_if_fail (GDL_DOCK_ITEM (object)->child != NULL); - - paned = GTK_PANED (GDL_DOCK_ITEM (object)->child); - - if (GDL_IS_DOCK_ITEM (requestor)) { - g_object_get (G_OBJECT (requestor), "preferred_height", &temp, NULL); - if (temp == -2) - hresize = TRUE; - temp = 0; - g_object_get (G_OBJECT (requestor), "preferred_width", &temp, NULL); - if (temp == -2) - wresize = TRUE; - } - - child1 = gtk_paned_get_child1 (paned); - child2 = gtk_paned_get_child2 (paned); - - /* see if we can dock the item in our paned */ - switch (GDL_DOCK_ITEM (object)->orientation) { - case GTK_ORIENTATION_HORIZONTAL: - if (!child1 && position == GDL_DOCK_LEFT) { - gtk_paned_pack1 (paned, GTK_WIDGET (requestor), FALSE, FALSE); - done = TRUE; - } else if (!child2 && position == GDL_DOCK_RIGHT) { - gtk_paned_pack2 (paned, GTK_WIDGET (requestor), TRUE, FALSE); - done = TRUE; - } - break; - case GTK_ORIENTATION_VERTICAL: - if (!child1 && position == GDL_DOCK_TOP) { - gtk_paned_pack1 (paned, GTK_WIDGET (requestor), hresize, FALSE); - done = TRUE; - } else if (!child2 && position == GDL_DOCK_BOTTOM) { - gtk_paned_pack2 (paned, GTK_WIDGET (requestor), hresize, FALSE); - done = TRUE; - } - break; - default: - break; - } - - if (!done) { - /* this will create another paned and reparent us there */ - GDL_DOCK_OBJECT_CLASS (gdl_dock_paned_parent_class)->dock (object, requestor, position, - other_data); - } - else { - gdl_dock_item_show_grip (GDL_DOCK_ITEM (requestor)); - gtk_widget_show (GTK_WIDGET (requestor)); - GDL_DOCK_OBJECT_SET_FLAGS (requestor, GDL_DOCK_ATTACHED); - } -} - -static void -gdl_dock_paned_set_orientation (GdlDockItem *item, - GtkOrientation orientation) -{ - GtkPaned *old_paned = NULL, *new_paned; - GtkWidget *child1, *child2; - - g_return_if_fail (GDL_IS_DOCK_PANED (item)); - - if (item->child) { - old_paned = GTK_PANED (item->child); - g_object_ref (old_paned); - gtk_widget_unparent (GTK_WIDGET (old_paned)); - item->child = NULL; - } - - gdl_dock_paned_create_child (GDL_DOCK_PANED (item), orientation); - - if (old_paned) { - new_paned = GTK_PANED (item->child); - child1 = gtk_paned_get_child1 (old_paned); - child2 = gtk_paned_get_child2 (old_paned); - - if (child1) { - g_object_ref (child1); - gtk_container_remove (GTK_CONTAINER (old_paned), child1); - gtk_paned_pack1 (new_paned, child1, TRUE, FALSE); - g_object_unref (child1); - } - if (child2) { - g_object_ref (child2); - gtk_container_remove (GTK_CONTAINER (old_paned), child2); - gtk_paned_pack1 (new_paned, child2, TRUE, FALSE); - g_object_unref (child2); - } - } - - GDL_DOCK_ITEM_CLASS (gdl_dock_paned_parent_class)->set_orientation (item, orientation); -} - -static gboolean -gdl_dock_paned_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - GtkPaned *paned; - GdlDockPlacement pos = GDL_DOCK_NONE; - - if (item->child) { - paned = GTK_PANED (item->child); - if (GTK_WIDGET (child) == gtk_paned_get_child1 (paned)) - pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ? - GDL_DOCK_LEFT : GDL_DOCK_TOP; - else if (GTK_WIDGET (child) == gtk_paned_get_child2 (paned)) - pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ? - GDL_DOCK_RIGHT : GDL_DOCK_BOTTOM; - } - - if (pos != GDL_DOCK_NONE) { - if (placement) - *placement = pos; - return TRUE; - } - else - return FALSE; -} - - -/* ----- Public interface ----- */ - -GtkWidget * -gdl_dock_paned_new (GtkOrientation orientation) -{ - GdlDockPaned *paned; - - paned = GDL_DOCK_PANED (g_object_new (GDL_TYPE_DOCK_PANED, - "orientation", orientation, NULL)); - GDL_DOCK_OBJECT_UNSET_FLAGS (paned, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (paned); -} - diff --git a/src/libgdl/gdl-dock-paned.h b/src/libgdl/gdl-dock-paned.h deleted file mode 100644 index 2b4a40700..000000000 --- a/src/libgdl/gdl-dock-paned.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-paned.h - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_PANED_H__ -#define __GDL_DOCK_PANED_H__ - -#include "libgdl/gdl-dock-item.h" - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_PANED (gdl_dock_paned_get_type ()) -#define GDL_DOCK_PANED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_PANED, GdlDockPaned)) -#define GDL_DOCK_PANED_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PANED, GdlDockPanedClass)) -#define GDL_IS_DOCK_PANED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_PANED)) -#define GDL_IS_DOCK_PANED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PANED)) -#define GDL_DOCK_PANED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDL_TYE_DOCK_PANED, GdlDockPanedClass)) - -/* data types & structures */ -typedef struct _GdlDockPaned GdlDockPaned; -typedef struct _GdlDockPanedClass GdlDockPanedClass; - -struct _GdlDockPaned { - GdlDockItem dock_item; - - gboolean position_changed; -}; - -struct _GdlDockPanedClass { - GdlDockItemClass parent_class; -}; - - -/* public interface */ - -GType gdl_dock_paned_get_type (void); - -GtkWidget *gdl_dock_paned_new (GtkOrientation orientation); - - -G_END_DECLS - -#endif /* __GDL_DOCK_PANED_H__ */ - diff --git a/src/libgdl/gdl-dock-placeholder.c b/src/libgdl/gdl-dock-placeholder.c deleted file mode 100644 index 8cde7a51d..000000000 --- a/src/libgdl/gdl-dock-placeholder.c +++ /dev/null @@ -1,827 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-placeholder.c - Placeholders for docking items - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" - -#include "gdl-dock-placeholder.h" -#include "gdl-dock-item.h" -#include "gdl-dock-paned.h" -#include "gdl-dock-master.h" -#include "libgdltypebuiltins.h" - - -#undef PLACEHOLDER_DEBUG - -/* ----- Private prototypes ----- */ - -static void gdl_dock_placeholder_class_init (GdlDockPlaceholderClass *klass); - -static void gdl_dock_placeholder_set_property (GObject *g_object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_placeholder_get_property (GObject *g_object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_dock_placeholder_destroy (GtkObject *object); - -static void gdl_dock_placeholder_add (GtkContainer *container, - GtkWidget *widget); - -static void gdl_dock_placeholder_detach (GdlDockObject *object, - gboolean recursive); -static void gdl_dock_placeholder_reduce (GdlDockObject *object); -static void gdl_dock_placeholder_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - -static void gdl_dock_placeholder_weak_notify (gpointer data, - GObject *old_object); - -static void disconnect_host (GdlDockPlaceholder *ph); -static void connect_host (GdlDockPlaceholder *ph, - GdlDockObject *new_host); -static void do_excursion (GdlDockPlaceholder *ph); - -static void gdl_dock_placeholder_present (GdlDockObject *object, - GdlDockObject *child); - -static void detach_cb (GdlDockObject *object, - gboolean recursive, - gpointer user_data); - -/* ----- Private variables and data structures ----- */ - -enum { - PROP_0, - PROP_STICKY, - PROP_HOST, - PROP_NEXT_PLACEMENT, - PROP_WIDTH, - PROP_HEIGHT, - PROP_FLOATING, - PROP_FLOAT_X, - PROP_FLOAT_Y -}; - -struct _GdlDockPlaceholderPrivate { - /* current object this placeholder is pinned to */ - GdlDockObject *host; - gboolean sticky; - - /* when the placeholder is moved up the hierarchy, this stack - keeps track of the necessary dock positions needed to get the - placeholder to the original position */ - GSList *placement_stack; - - /* Width and height of the attachments */ - gint width; - gint height; - - /* connected signal handlers */ - guint host_detach_handler; - guint host_dock_handler; - - /* Window Coordinates if Dock was floating */ - gboolean floating; - gint floatx; - gint floaty; -}; - - -/* ----- Private interface ----- */ - -G_DEFINE_TYPE (GdlDockPlaceholder, gdl_dock_placeholder, GDL_TYPE_DOCK_OBJECT); - -static void -gdl_dock_placeholder_class_init (GdlDockPlaceholderClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkContainerClass *container_class; - GdlDockObjectClass *object_class; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - object_class = GDL_DOCK_OBJECT_CLASS (klass); - - g_object_class->get_property = gdl_dock_placeholder_get_property; - g_object_class->set_property = gdl_dock_placeholder_set_property; - - g_object_class_install_property ( - g_object_class, PROP_STICKY, - g_param_spec_boolean ("sticky", _("Sticky"), - _("Whether the placeholder will stick to its host or " - "move up the hierarchy when the host is redocked"), - FALSE, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - g_object_class_install_property ( - g_object_class, PROP_HOST, - g_param_spec_object ("host", _("Host"), - _("The dock object this placeholder is attached to"), - GDL_TYPE_DOCK_OBJECT, - G_PARAM_READWRITE)); - - /* this will return the top of the placement stack */ - g_object_class_install_property ( - g_object_class, PROP_NEXT_PLACEMENT, - g_param_spec_enum ("next-placement", _("Next placement"), - _("The position an item will be docked to our host if a " - "request is made to dock to us"), - GDL_TYPE_DOCK_PLACEMENT, - GDL_DOCK_CENTER, - G_PARAM_READWRITE | - GDL_DOCK_PARAM_EXPORT | GDL_DOCK_PARAM_AFTER)); - - g_object_class_install_property ( - g_object_class, PROP_WIDTH, - g_param_spec_int ("width", _("Width"), - _("Width for the widget when it's attached to the placeholder"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_HEIGHT, - g_param_spec_int ("height", _("Height"), - _("Height for the widget when it's attached to the placeholder"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - g_object_class_install_property ( - g_object_class, PROP_FLOATING, - g_param_spec_boolean ("floating", _("Floating Toplevel"), - _("Whether the placeholder is standing in for a " - "floating toplevel dock"), - FALSE, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property ( - g_object_class, PROP_FLOAT_X, - g_param_spec_int ("floatx", _("X Coordinate"), - _("X coordinate for dock when floating"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | - GDL_DOCK_PARAM_EXPORT)); - g_object_class_install_property ( - g_object_class, PROP_FLOAT_Y, - g_param_spec_int ("floaty", _("Y Coordinate"), - _("Y coordinate for dock when floating"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | - GDL_DOCK_PARAM_EXPORT)); - - - gtk_object_class->destroy = gdl_dock_placeholder_destroy; - container_class->add = gdl_dock_placeholder_add; - - object_class->is_compound = FALSE; - object_class->detach = gdl_dock_placeholder_detach; - object_class->reduce = gdl_dock_placeholder_reduce; - object_class->dock = gdl_dock_placeholder_dock; - object_class->present = gdl_dock_placeholder_present; -} - -static void -gdl_dock_placeholder_init (GdlDockPlaceholder *ph) -{ - gtk_widget_set_has_window (GTK_WIDGET (ph), FALSE); - gtk_widget_set_can_focus (GTK_WIDGET (ph), FALSE); - - ph->_priv = g_new0 (GdlDockPlaceholderPrivate, 1); -} - -static void -gdl_dock_placeholder_set_property (GObject *g_object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (g_object); - - switch (prop_id) { - case PROP_STICKY: - if (ph->_priv) - ph->_priv->sticky = g_value_get_boolean (value); - break; - case PROP_HOST: - gdl_dock_placeholder_attach (ph, g_value_get_object (value)); - break; - case PROP_NEXT_PLACEMENT: - if (ph->_priv) { - ph->_priv->placement_stack = - g_slist_prepend (ph->_priv->placement_stack, - GINT_TO_POINTER (g_value_get_enum (value))); - } - break; - case PROP_WIDTH: - ph->_priv->width = g_value_get_int (value); - break; - case PROP_HEIGHT: - ph->_priv->height = g_value_get_int (value); - break; - case PROP_FLOATING: - ph->_priv->floating = g_value_get_boolean (value); - break; - case PROP_FLOAT_X: - ph->_priv->floatx = g_value_get_int (value); - break; - case PROP_FLOAT_Y: - ph->_priv->floaty = g_value_get_int (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (g_object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_placeholder_get_property (GObject *g_object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (g_object); - - switch (prop_id) { - case PROP_STICKY: - if (ph->_priv) - g_value_set_boolean (value, ph->_priv->sticky); - else - g_value_set_boolean (value, FALSE); - break; - case PROP_HOST: - if (ph->_priv) - g_value_set_object (value, ph->_priv->host); - else - g_value_set_object (value, NULL); - break; - case PROP_NEXT_PLACEMENT: - if (ph->_priv && ph->_priv->placement_stack) - g_value_set_enum (value, (GdlDockPlacement) ph->_priv->placement_stack->data); - else - g_value_set_enum (value, GDL_DOCK_CENTER); - break; - case PROP_WIDTH: - g_value_set_int (value, ph->_priv->width); - break; - case PROP_HEIGHT: - g_value_set_int (value, ph->_priv->height); - break; - case PROP_FLOATING: - g_value_set_boolean (value, ph->_priv->floating); - break; - case PROP_FLOAT_X: - g_value_set_int (value, ph->_priv->floatx); - break; - case PROP_FLOAT_Y: - g_value_set_int (value, ph->_priv->floaty); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (g_object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_placeholder_destroy (GtkObject *object) -{ - GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (object); - - if (ph->_priv) { - if (ph->_priv->host) - gdl_dock_placeholder_detach (GDL_DOCK_OBJECT (object), FALSE); - g_free (ph->_priv); - ph->_priv = NULL; - } - - GTK_OBJECT_CLASS (gdl_dock_placeholder_parent_class)->destroy (object); -} - -static void -gdl_dock_placeholder_add (GtkContainer *container, - GtkWidget *widget) -{ - GdlDockPlaceholder *ph; - GdlDockPlacement pos = GDL_DOCK_CENTER; /* default position */ - - g_return_if_fail (GDL_IS_DOCK_PLACEHOLDER (container)); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - ph = GDL_DOCK_PLACEHOLDER (container); - if (ph->_priv->placement_stack) - pos = (GdlDockPlacement) ph->_priv->placement_stack->data; - - gdl_dock_object_dock (GDL_DOCK_OBJECT (ph), GDL_DOCK_OBJECT (widget), - pos, NULL); -} - -static void -gdl_dock_placeholder_detach (GdlDockObject *object, - gboolean recursive) -{ - GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (object); - - /* disconnect handlers */ - disconnect_host (ph); - - /* free the placement stack */ - g_slist_free (ph->_priv->placement_stack); - ph->_priv->placement_stack = NULL; - - GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_ATTACHED); -} - -static void -gdl_dock_placeholder_reduce (GdlDockObject *object) -{ - /* placeholders are not reduced */ - return; -} - -static void -find_biggest_dock_item (GtkContainer *container, GtkWidget **biggest_child, - gint *biggest_child_area) -{ - GList *children, *child; - GtkAllocation allocation; - - children = gtk_container_get_children (GTK_CONTAINER (container)); - child = children; - while (child) { - gint area; - GtkWidget *child_widget; - - child_widget = GTK_WIDGET (child->data); - - if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT(child_widget))) { - find_biggest_dock_item (GTK_CONTAINER (child_widget), - biggest_child, biggest_child_area); - child = g_list_next (child); - continue; - } - gtk_widget_get_allocation (child_widget, &allocation); - area = allocation.width * allocation.height; - - if (area > *biggest_child_area) { - *biggest_child_area = area; - *biggest_child = child_widget; - } - child = g_list_next (child); - } -} - -static void -attempt_to_dock_on_host (GdlDockPlaceholder *ph, GdlDockObject *host, - GdlDockObject *requestor, GdlDockPlacement placement, - gpointer other_data) -{ - GdlDockObject *parent; - GtkAllocation allocation; - gint host_width; - gint host_height; - - gtk_widget_get_allocation (GTK_WIDGET (host), &allocation); - host_width = allocation.width; - host_height = allocation.height; - - if (placement != GDL_DOCK_CENTER || !GDL_IS_DOCK_PANED (host)) { - /* we simply act as a proxy for our host */ - gdl_dock_object_dock (host, requestor, - placement, other_data); - } else { - /* If the requested pos is center, we have to make sure that it - * does not colapses existing paned items. Find the larget item - * which is not a paned item to dock to. - */ - GtkWidget *biggest_child = NULL; - gint biggest_child_area = 0; - - find_biggest_dock_item (GTK_CONTAINER (host), &biggest_child, - &biggest_child_area); - - if (biggest_child) { - /* we simply act as a proxy for our host */ - gdl_dock_object_dock (GDL_DOCK_OBJECT (biggest_child), requestor, - placement, other_data); - } else { - g_warning ("No suitable child found! Should not be here!"); - /* we simply act as a proxy for our host */ - gdl_dock_object_dock (GDL_DOCK_OBJECT (host), requestor, - placement, other_data); - } - } - - parent = gdl_dock_object_get_parent_object (requestor); - - /* Restore dock item's dimention */ - switch (placement) { - case GDL_DOCK_LEFT: - if (ph->_priv->width > 0) { - g_object_set (G_OBJECT (parent), "position", - ph->_priv->width, NULL); - } - break; - case GDL_DOCK_RIGHT: - if (ph->_priv->width > 0) { - gint complementary_width = host_width - ph->_priv->width; - - if (complementary_width > 0) - g_object_set (G_OBJECT (parent), "position", - complementary_width, NULL); - } - break; - case GDL_DOCK_TOP: - if (ph->_priv->height > 0) { - g_object_set (G_OBJECT (parent), "position", - ph->_priv->height, NULL); - } - break; - case GDL_DOCK_BOTTOM: - if (ph->_priv->height > 0) { - gint complementary_height = host_height - ph->_priv->height; - - if (complementary_height > 0) - g_object_set (G_OBJECT (parent), "position", - complementary_height, NULL); - } - break; - default: - /* nothing */ - break; - } -} - -static void -gdl_dock_placeholder_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (object); - - if (ph->_priv->host) { - attempt_to_dock_on_host (ph, ph->_priv->host, requestor, - position, other_data); - } - else { - GdlDockObject *toplevel; - - if (!gdl_dock_object_is_bound (GDL_DOCK_OBJECT (ph))) { - g_warning ("%s", _("Attempt to dock a dock object to an unbound placeholder")); - return; - } - - /* dock the item as a floating of the controller */ - toplevel = gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (ph)); - gdl_dock_object_dock (toplevel, requestor, - GDL_DOCK_FLOATING, NULL); - } -} - -#ifdef PLACEHOLDER_DEBUG -static void -print_placement_stack (GdlDockPlaceholder *ph) -{ - GSList *s = ph->_priv->placement_stack; - GEnumClass *enum_class = G_ENUM_CLASS (g_type_class_ref (GDL_TYPE_DOCK_PLACEMENT)); - GEnumValue *enum_value; - gchar *name; - GString *message; - - message = g_string_new (NULL); - g_string_printf (message, "[%p] host: %p (%s), stack: ", - ph, ph->_priv->host, G_OBJECT_TYPE_NAME (ph->_priv->host)); - for (; s; s = s->next) { - enum_value = g_enum_get_value (enum_class, (GdlDockPlacement) s->data); - name = enum_value ? enum_value->value_name : NULL; - g_string_append_printf (message, "%s, ", name); - } - g_message ("%s", message->str); - - g_string_free (message, TRUE); - g_type_class_unref (enum_class); -} -#endif - -static void -gdl_dock_placeholder_present (GdlDockObject *object, - GdlDockObject *child) -{ - /* do nothing */ - return; -} - -/* ----- Public interface ----- */ - -GtkWidget * -gdl_dock_placeholder_new (const gchar *name, - GdlDockObject *object, - GdlDockPlacement position, - gboolean sticky) -{ - GdlDockPlaceholder *ph; - - ph = GDL_DOCK_PLACEHOLDER (g_object_new (GDL_TYPE_DOCK_PLACEHOLDER, - "name", name, - "sticky", sticky, - "next-placement", position, - "host", object, - NULL)); - GDL_DOCK_OBJECT_UNSET_FLAGS (ph, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (ph); -} - -static void -gdl_dock_placeholder_weak_notify (gpointer data, - GObject *old_object) -{ - GdlDockPlaceholder *ph; - - g_return_if_fail (data != NULL && GDL_IS_DOCK_PLACEHOLDER (data)); - - ph = GDL_DOCK_PLACEHOLDER (data); - -#ifdef PLACEHOLDER_DEBUG - g_message ("The placeholder just lost its host, ph = %p", ph); -#endif - - /* we shouldn't get here, so perform an emergency detach. instead - we should have gotten a detach signal from our host */ - ph->_priv->host = NULL; - - /* We didn't get a detach signal from the host. Detach from the - supposedly dead host (consequently attaching to the controller) */ - - detach_cb (NULL, TRUE, data); -#if 0 - /* free the placement stack */ - g_slist_free (ph->_priv->placement_stack); - ph->_priv->placement_stack = NULL; - GDL_DOCK_OBJECT_UNSET_FLAGS (ph, GDL_DOCK_ATTACHED); -#endif -} - -static void -detach_cb (GdlDockObject *object, - gboolean recursive, - gpointer user_data) -{ - GdlDockPlaceholder *ph; - GdlDockObject *new_host, *obj; - - g_return_if_fail (user_data != NULL && GDL_IS_DOCK_PLACEHOLDER (user_data)); - - /* we go up in the hierarchy and we store the hinted placement in - * the placement stack so we can rebuild the docking layout later - * when we get the host's dock signal. */ - - ph = GDL_DOCK_PLACEHOLDER (user_data); - obj = ph->_priv->host; - if (obj != object) { - g_warning (_("Got a detach signal from an object (%p) who is not " - "our host %p"), object, ph->_priv->host); - return; - } - - /* skip sticky objects */ - if (ph->_priv->sticky) - return; - - if (obj) - /* go up in the hierarchy */ - new_host = gdl_dock_object_get_parent_object (obj); - else - /* Detaching from the dead host */ - new_host = NULL; - - while (new_host) { - GdlDockPlacement pos = GDL_DOCK_NONE; - - /* get placement hint from the new host */ - if (gdl_dock_object_child_placement (new_host, obj, &pos)) { - ph->_priv->placement_stack = g_slist_prepend ( - ph->_priv->placement_stack, (gpointer) pos); - } - else { - g_warning (_("Something weird happened while getting the child " - "placement for %p from parent %p"), obj, new_host); - } - - if (!GDL_DOCK_OBJECT_IN_DETACH (new_host)) - /* we found a "stable" dock object */ - break; - - obj = new_host; - new_host = gdl_dock_object_get_parent_object (obj); - } - - /* disconnect host */ - disconnect_host (ph); - - if (!new_host) { -#ifdef PLACEHOLDER_DEBUG - g_message ("Detaching from the toplevel. Assignaing to controller"); -#endif - /* the toplevel was detached: we attach ourselves to the - controller with an initial placement of floating */ - new_host = gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (ph)); - - /* - ph->_priv->placement_stack = g_slist_prepend ( - ph->_priv->placement_stack, (gpointer) GDL_DOCK_FLOATING); - */ - } - if (new_host) - connect_host (ph, new_host); - -#ifdef PLACEHOLDER_DEBUG - print_placement_stack (ph); -#endif -} - -/** - * do_excursion: - * @ph: placeholder object - * - * Tries to shrink the placement stack by examining the host's - * children and see if any of them matches the placement which is at - * the top of the stack. If this is the case, it tries again with the - * new host. - **/ -static void -do_excursion (GdlDockPlaceholder *ph) -{ - if (ph->_priv->host && - !ph->_priv->sticky && - ph->_priv->placement_stack && - gdl_dock_object_is_compound (ph->_priv->host)) { - - GdlDockPlacement pos, stack_pos = - (GdlDockPlacement) ph->_priv->placement_stack->data; - GList *children, *l; - GdlDockObject *host = ph->_priv->host; - - children = gtk_container_get_children (GTK_CONTAINER (host)); - for (l = children; l; l = l->next) { - pos = stack_pos; - gdl_dock_object_child_placement (GDL_DOCK_OBJECT (host), - GDL_DOCK_OBJECT (l->data), - &pos); - if (pos == stack_pos) { - /* remove the stack position */ - ph->_priv->placement_stack = - g_slist_remove_link (ph->_priv->placement_stack, - ph->_priv->placement_stack); - - /* connect to the new host */ - disconnect_host (ph); - connect_host (ph, GDL_DOCK_OBJECT (l->data)); - - /* recurse... */ - if (!GDL_DOCK_OBJECT_IN_REFLOW (l->data)) - do_excursion (ph); - - break; - } - } - g_list_free (children); - } -} - -static void -dock_cb (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data, - gpointer user_data) -{ - GdlDockPlacement pos = GDL_DOCK_NONE; - GdlDockPlaceholder *ph; - - g_return_if_fail (user_data != NULL && GDL_IS_DOCK_PLACEHOLDER (user_data)); - ph = GDL_DOCK_PLACEHOLDER (user_data); - g_return_if_fail (ph->_priv->host == object); - - /* see if the given position is compatible for the stack's top - element */ - if (!ph->_priv->sticky && ph->_priv->placement_stack) { - pos = (GdlDockPlacement) ph->_priv->placement_stack->data; - if (gdl_dock_object_child_placement (object, requestor, &pos)) { - if (pos == (GdlDockPlacement) ph->_priv->placement_stack->data) { - /* the position is compatible: excurse down */ - do_excursion (ph); - } - } - } -#ifdef PLACEHOLDER_DEBUG - print_placement_stack (ph); -#endif -} - -static void -disconnect_host (GdlDockPlaceholder *ph) -{ - if (!ph->_priv->host) - return; - - if (ph->_priv->host_detach_handler) - g_signal_handler_disconnect (ph->_priv->host, ph->_priv->host_detach_handler); - if (ph->_priv->host_dock_handler) - g_signal_handler_disconnect (ph->_priv->host, ph->_priv->host_dock_handler); - ph->_priv->host_detach_handler = 0; - ph->_priv->host_dock_handler = 0; - - /* remove weak ref to object */ - g_object_weak_unref (G_OBJECT (ph->_priv->host), - gdl_dock_placeholder_weak_notify, ph); - ph->_priv->host = NULL; - -#ifdef PLACEHOLDER_DEBUG - g_message ("Host just disconnected!, ph = %p", ph); -#endif -} - -static void -connect_host (GdlDockPlaceholder *ph, - GdlDockObject *new_host) -{ - if (ph->_priv->host) - disconnect_host (ph); - - ph->_priv->host = new_host; - g_object_weak_ref (G_OBJECT (ph->_priv->host), - gdl_dock_placeholder_weak_notify, ph); - - ph->_priv->host_detach_handler = - g_signal_connect (ph->_priv->host, - "detach", - (GCallback) detach_cb, - (gpointer) ph); - - ph->_priv->host_dock_handler = - g_signal_connect (ph->_priv->host, - "dock", - (GCallback) dock_cb, - (gpointer) ph); - -#ifdef PLACEHOLDER_DEBUG - g_message ("Host just connected!, ph = %p", ph); -#endif -} - -void -gdl_dock_placeholder_attach (GdlDockPlaceholder *ph, - GdlDockObject *object) -{ - g_return_if_fail (ph != NULL && GDL_IS_DOCK_PLACEHOLDER (ph)); - g_return_if_fail (ph->_priv != NULL); - g_return_if_fail (object != NULL); - - /* object binding */ - if (!gdl_dock_object_is_bound (GDL_DOCK_OBJECT (ph))) - gdl_dock_object_bind (GDL_DOCK_OBJECT (ph), object->master); - - g_return_if_fail (GDL_DOCK_OBJECT (ph)->master == object->master); - - gdl_dock_object_freeze (GDL_DOCK_OBJECT (ph)); - - /* detach from previous host first */ - if (ph->_priv->host) - gdl_dock_object_detach (GDL_DOCK_OBJECT (ph), FALSE); - - connect_host (ph, object); - - GDL_DOCK_OBJECT_SET_FLAGS (ph, GDL_DOCK_ATTACHED); - - gdl_dock_object_thaw (GDL_DOCK_OBJECT (ph)); -} diff --git a/src/libgdl/gdl-dock-placeholder.h b/src/libgdl/gdl-dock-placeholder.h deleted file mode 100644 index c7e57e204..000000000 --- a/src/libgdl/gdl-dock-placeholder.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-placeholder.h - Placeholders for docking items - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_PLACEHOLDER_H__ -#define __GDL_DOCK_PLACEHOLDER_H__ - -#include "libgdl/gdl-dock-object.h" - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_PLACEHOLDER (gdl_dock_placeholder_get_type ()) -#define GDL_DOCK_PLACEHOLDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholder)) -#define GDL_DOCK_PLACEHOLDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass)) -#define GDL_IS_DOCK_PLACEHOLDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_PLACEHOLDER)) -#define GDL_IS_DOCK_PLACEHOLDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PLACEHOLDER)) -#define GDL_DOCK_PLACEHOLDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass)) - -/* data types & structures */ -typedef struct _GdlDockPlaceholder GdlDockPlaceholder; -typedef struct _GdlDockPlaceholderClass GdlDockPlaceholderClass; -typedef struct _GdlDockPlaceholderPrivate GdlDockPlaceholderPrivate; - -struct _GdlDockPlaceholder { - GdlDockObject object; - - GdlDockPlaceholderPrivate *_priv; -}; - -struct _GdlDockPlaceholderClass { - GdlDockObjectClass parent_class; -}; - -/* public interface */ - -GType gdl_dock_placeholder_get_type (void); - -GtkWidget *gdl_dock_placeholder_new (const gchar *name, - GdlDockObject *object, - GdlDockPlacement position, - gboolean sticky); - -void gdl_dock_placeholder_attach (GdlDockPlaceholder *ph, - GdlDockObject *object); - - -G_END_DECLS - -#endif /* __GDL_DOCK_PLACEHOLDER_H__ */ diff --git a/src/libgdl/gdl-dock-tablabel.c b/src/libgdl/gdl-dock-tablabel.c deleted file mode 100644 index 441db3438..000000000 --- a/src/libgdl/gdl-dock-tablabel.c +++ /dev/null @@ -1,632 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-tablabel.c - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include - -#include "gdl-dock-tablabel.h" -#include "gdl-dock-item.h" -#include "libgdlmarshal.h" - - -/* ----- Private prototypes ----- */ - -static void gdl_dock_tablabel_class_init (GdlDockTablabelClass *klass); - -static void gdl_dock_tablabel_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_tablabel_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_dock_tablabel_item_notify (GObject *master, - GParamSpec *pspec, - gpointer data); - -static void gdl_dock_tablabel_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void gdl_dock_tablabel_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); - -static void gdl_dock_tablabel_paint (GtkWidget *widget, - GdkEventExpose *event); -static gint gdl_dock_tablabel_expose (GtkWidget *widget, - GdkEventExpose *event); - -static gboolean gdl_dock_tablabel_button_event (GtkWidget *widget, - GdkEventButton *event); -static gboolean gdl_dock_tablabel_motion_event (GtkWidget *widget, - GdkEventMotion *event); - -static void gdl_dock_tablabel_realize (GtkWidget *widget); -static void gdl_dock_tablabel_unrealize (GtkWidget *widget); -static void gdl_dock_tablabel_map (GtkWidget *widget); -static void gdl_dock_tablabel_unmap (GtkWidget *widget); - -/* ----- Private data types and variables ----- */ - -#define DEFAULT_DRAG_HANDLE_SIZE 10 -#define HANDLE_RATIO 1.0 - -enum { - BUTTON_PRESSED_HANDLE, - LAST_SIGNAL -}; - -enum { - PROP_0, - PROP_ITEM -}; - - -static guint dock_tablabel_signals [LAST_SIGNAL] = { 0 }; - - -/* ----- Private interface ----- */ - -G_DEFINE_TYPE (GdlDockTablabel, gdl_dock_tablabel, GTK_TYPE_BIN); - -static void -gdl_dock_tablabel_class_init (GdlDockTablabelClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - - g_object_class = G_OBJECT_CLASS (klass); - object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - - g_object_class->set_property = gdl_dock_tablabel_set_property; - g_object_class->get_property = gdl_dock_tablabel_get_property; - - widget_class->size_request = gdl_dock_tablabel_size_request; - widget_class->size_allocate = gdl_dock_tablabel_size_allocate; - widget_class->expose_event = gdl_dock_tablabel_expose; - widget_class->button_press_event = gdl_dock_tablabel_button_event; - widget_class->button_release_event = gdl_dock_tablabel_button_event; - widget_class->motion_notify_event = gdl_dock_tablabel_motion_event; - widget_class->realize = gdl_dock_tablabel_realize; - widget_class->unrealize = gdl_dock_tablabel_unrealize; - widget_class->map = gdl_dock_tablabel_map; - widget_class->unmap = gdl_dock_tablabel_unmap; - - g_object_class_install_property ( - g_object_class, PROP_ITEM, - g_param_spec_object ("item", _("Controlling dock item"), - _("Dockitem which 'owns' this tablabel"), - GDL_TYPE_DOCK_ITEM, - G_PARAM_READWRITE)); - - dock_tablabel_signals [BUTTON_PRESSED_HANDLE] = - g_signal_new ("button_pressed_handle", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GdlDockTablabelClass, - button_pressed_handle), - NULL, NULL, - gdl_marshal_VOID__BOXED, - G_TYPE_NONE, - 1, - GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE); - - klass->button_pressed_handle = NULL; -} - -static void -gdl_dock_tablabel_init (GdlDockTablabel *tablabel) -{ - GtkWidget *widget; - GtkWidget *label_widget; - - widget = GTK_WIDGET (tablabel); - - tablabel->drag_handle_size = DEFAULT_DRAG_HANDLE_SIZE; - tablabel->item = NULL; - - label_widget = gtk_label_new ("Dock item"); - gtk_container_add (GTK_CONTAINER (tablabel), label_widget); - gtk_widget_show (label_widget); - - tablabel->active = FALSE; - gtk_widget_set_state (GTK_WIDGET (tablabel), GTK_STATE_ACTIVE); -} - -static void -gdl_dock_tablabel_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockTablabel *tablabel; - GtkBin *bin; - - tablabel = GDL_DOCK_TABLABEL (object); - - switch (prop_id) { - case PROP_ITEM: - if (tablabel->item) { - g_object_remove_weak_pointer (G_OBJECT (tablabel->item), - (gpointer *) &tablabel->item); - g_signal_handlers_disconnect_by_func ( - tablabel->item, gdl_dock_tablabel_item_notify, tablabel); - }; - - tablabel->item = g_value_get_object (value); - if (tablabel->item) { - gboolean locked; - gchar *long_name; - - g_object_add_weak_pointer (G_OBJECT (tablabel->item), - (gpointer *) &tablabel->item); - - g_signal_connect (tablabel->item, "notify::locked", - G_CALLBACK (gdl_dock_tablabel_item_notify), - tablabel); - g_signal_connect (tablabel->item, "notify::long_name", - G_CALLBACK (gdl_dock_tablabel_item_notify), - tablabel); - g_signal_connect (tablabel->item, "notify::grip_size", - G_CALLBACK (gdl_dock_tablabel_item_notify), - tablabel); - - g_object_get (tablabel->item, - "locked", &locked, - "long-name", &long_name, - "grip-size", &tablabel->drag_handle_size, - NULL); - - if (locked) - tablabel->drag_handle_size = 0; - - bin = GTK_BIN (tablabel); - if (gtk_bin_get_child (bin) && g_object_class_find_property ( - G_OBJECT_GET_CLASS (gtk_bin_get_child (bin)), "label")) - g_object_set (gtk_bin_get_child (bin), "label", long_name, NULL); - g_free (long_name); - }; - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_tablabel_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockTablabel *tablabel; - - tablabel = GDL_DOCK_TABLABEL (object); - - switch (prop_id) { - case PROP_ITEM: - g_value_set_object (value, tablabel->item); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_tablabel_item_notify (GObject *master, - GParamSpec *pspec, - gpointer data) -{ - GdlDockTablabel *tablabel = GDL_DOCK_TABLABEL (data); - gboolean locked; - gchar *label; - GtkBin *bin; - - g_object_get (master, - "locked", &locked, - "grip-size", &tablabel->drag_handle_size, - "long-name", &label, - NULL); - - if (locked) - tablabel->drag_handle_size = 0; - - bin = GTK_BIN (tablabel); - if (gtk_bin_get_child (bin) && g_object_class_find_property ( - G_OBJECT_GET_CLASS (gtk_bin_get_child (bin)), "label")) - g_object_set (gtk_bin_get_child (bin), "label", label, NULL); - g_free (label); - - gtk_widget_queue_resize (GTK_WIDGET (tablabel)); -} - -static void -gdl_dock_tablabel_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GtkBin *bin; - GtkRequisition child_req; - GdlDockTablabel *tablabel; - guint border_width; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_TABLABEL (widget)); - g_return_if_fail (requisition != NULL); - - tablabel = GDL_DOCK_TABLABEL (widget); - bin = GTK_BIN (widget); - - requisition->width = tablabel->drag_handle_size; - requisition->height = 0; - - if (gtk_bin_get_child (bin)) - gtk_widget_size_request (gtk_bin_get_child (bin), &child_req); - else - child_req.width = child_req.height = 0; - - requisition->width += child_req.width; - requisition->height += child_req.height; - - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - - requisition->width += border_width * 2; - requisition->height += border_width * 2; - - //gtk_widget_size_request (widget, requisition); -} - -static void -gdl_dock_tablabel_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GtkBin *bin; - GtkAllocation widget_allocation; - GdlDockTablabel *tablabel; - gint border_width; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_TABLABEL (widget)); - g_return_if_fail (allocation != NULL); - - bin = GTK_BIN (widget); - tablabel = GDL_DOCK_TABLABEL (widget); - - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - - gtk_widget_set_allocation (widget, allocation); - - if (gtk_widget_get_realized (widget)) - gdk_window_move_resize (tablabel->event_window, - allocation->x, - allocation->y, - allocation->width, - allocation->height); - - if (gtk_bin_get_child (bin) && gtk_widget_get_visible (gtk_bin_get_child (bin))) { - GtkAllocation child_allocation; - - gtk_widget_get_allocation (widget, &widget_allocation); - child_allocation.x = widget_allocation.x + border_width; - child_allocation.y = widget_allocation.y + border_width; - - allocation->width = MAX (1, (int) allocation->width - - (int) tablabel->drag_handle_size); - child_allocation.x += tablabel->drag_handle_size; - - child_allocation.width = - MAX (1, (int) allocation->width - 2 * border_width); - child_allocation.height = - MAX (1, (int) allocation->height - 2 * border_width); - - gtk_widget_size_allocate (gtk_bin_get_child (bin), &child_allocation); - } -} - -static void -gdl_dock_tablabel_paint (GtkWidget *widget, - GdkEventExpose *event) -{ - GdkRectangle dest, rect; - GtkBin *bin; - GtkAllocation widget_allocation; - GdlDockTablabel *tablabel; - gint border_width; - - bin = GTK_BIN (widget); - tablabel = GDL_DOCK_TABLABEL (widget); - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - - gtk_widget_get_allocation (widget, &widget_allocation); - rect.x = widget_allocation.x + border_width; - rect.y = widget_allocation.y + border_width; - rect.width = tablabel->drag_handle_size * HANDLE_RATIO; - rect.height = widget_allocation.height - 2*border_width; - - if (gdk_rectangle_intersect (&event->area, &rect, &dest)) { - gtk_paint_handle (gtk_widget_get_style (widget), gtk_widget_get_window (widget), - tablabel->active ? GTK_STATE_NORMAL : GTK_STATE_ACTIVE, - GTK_SHADOW_NONE, - &dest, widget, "dock-tablabel", - rect.x, rect.y, rect.width, rect.height, - GTK_ORIENTATION_VERTICAL); - }; -} - -static gint -gdl_dock_tablabel_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_TABLABEL (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - if (gtk_widget_get_visible (widget) && gtk_widget_get_mapped (widget)) { - GTK_WIDGET_CLASS (gdl_dock_tablabel_parent_class)->expose_event (widget,event); - gdl_dock_tablabel_paint (widget, event); - }; - - return FALSE; -} - -static gboolean -gdl_dock_tablabel_button_event (GtkWidget *widget, - GdkEventButton *event) -{ - GdlDockTablabel *tablabel; - GtkAllocation widget_allocation; - gboolean event_handled; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_TABLABEL (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - tablabel = GDL_DOCK_TABLABEL (widget); - - event_handled = FALSE; - - if (event->window != tablabel->event_window) - return FALSE; - - switch (event->type) { - case GDK_BUTTON_PRESS: - if (tablabel->active) { - gboolean in_handle; - gint rel_x, rel_y; - guint border_width; - GtkBin *bin; - - bin = GTK_BIN (widget); - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - - rel_x = event->x - border_width; - rel_y = event->y - border_width; - - /* Check if user clicked on the drag handle. */ - in_handle = (rel_x < tablabel->drag_handle_size * HANDLE_RATIO) && - (rel_x > 0); - - if (event->button == 1) { - tablabel->pre_drag = TRUE; - tablabel->drag_start_event = *event; - } - else { - g_signal_emit (widget, - dock_tablabel_signals [BUTTON_PRESSED_HANDLE], - 0, - event); - } - - event_handled = TRUE; - } - break; - - case GDK_BUTTON_RELEASE: - tablabel->pre_drag = FALSE; - break; - - default: - break; - } - - if (!event_handled) { - /* propagate the event to the parent's gdkwindow */ - GdkEventButton e; - - e = *event; - e.window = gtk_widget_get_parent_window (widget); - gtk_widget_get_allocation (widget, &widget_allocation); - e.x += widget_allocation.x; - e.y += widget_allocation.y; - - gdk_event_put ((GdkEvent *) &e); - }; - - return event_handled; -} - -static gboolean -gdl_dock_tablabel_motion_event (GtkWidget *widget, - GdkEventMotion *event) -{ - GdlDockTablabel *tablabel; - GtkAllocation widget_allocation; - gboolean event_handled; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_TABLABEL (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - tablabel = GDL_DOCK_TABLABEL (widget); - - event_handled = FALSE; - - if (event->window != tablabel->event_window) - return FALSE; - - if (tablabel->pre_drag) { - if (gtk_drag_check_threshold (widget, - tablabel->drag_start_event.x, - tablabel->drag_start_event.y, - event->x, - event->y)) { - tablabel->pre_drag = FALSE; - g_signal_emit (widget, - dock_tablabel_signals [BUTTON_PRESSED_HANDLE], - 0, - &tablabel->drag_start_event); - event_handled = TRUE; - } - } - - if (!event_handled) { - /* propagate the event to the parent's gdkwindow */ - GdkEventMotion e; - - e = *event; - e.window = gtk_widget_get_parent_window (widget); - gtk_widget_get_allocation (widget, &widget_allocation); - e.x += widget_allocation.x; - e.y += widget_allocation.y; - - gdk_event_put ((GdkEvent *) &e); - }; - - return event_handled; -} - -static void -gdl_dock_tablabel_realize (GtkWidget *widget) -{ - GdlDockTablabel *tablabel; - GdkWindowAttr attributes; - GtkAllocation widget_allocation; - int attributes_mask; - - tablabel = GDL_DOCK_TABLABEL (widget); - - attributes.window_type = GDK_WINDOW_CHILD; - gtk_widget_get_allocation (widget, &widget_allocation); - attributes.x = widget_allocation.x; - attributes.y = widget_allocation.y; - attributes.width = widget_allocation.width; - attributes.height = widget_allocation.height; - attributes.wclass = GDK_INPUT_ONLY; - attributes.event_mask = gtk_widget_get_events (widget); - attributes.event_mask |= (GDK_EXPOSURE_MASK | - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_ENTER_NOTIFY_MASK | - GDK_POINTER_MOTION_MASK | - GDK_LEAVE_NOTIFY_MASK); - attributes_mask = GDK_WA_X | GDK_WA_Y; - - gtk_widget_set_window (widget, gtk_widget_get_parent_window (widget)); - g_object_ref (gtk_widget_get_window (widget)); - - tablabel->event_window = - gdk_window_new (gtk_widget_get_parent_window (widget), - &attributes, attributes_mask); - gdk_window_set_user_data (tablabel->event_window, widget); - - gtk_widget_set_style (widget, gtk_style_attach (gtk_widget_get_style (widget), - gtk_widget_get_window (widget))); - - gtk_widget_set_realized (widget, TRUE); -} - -static void -gdl_dock_tablabel_unrealize (GtkWidget *widget) -{ - GdlDockTablabel *tablabel = GDL_DOCK_TABLABEL (widget); - - if (tablabel->event_window) { - gdk_window_set_user_data (tablabel->event_window, NULL); - gdk_window_destroy (tablabel->event_window); - tablabel->event_window = NULL; - } - - GTK_WIDGET_CLASS (gdl_dock_tablabel_parent_class)->unrealize (widget); -} - -static void -gdl_dock_tablabel_map (GtkWidget *widget) -{ - GdlDockTablabel *tablabel = GDL_DOCK_TABLABEL (widget); - - GTK_WIDGET_CLASS (gdl_dock_tablabel_parent_class)->map (widget); - - gdk_window_show (tablabel->event_window); -} - -static void -gdl_dock_tablabel_unmap (GtkWidget *widget) -{ - GdlDockTablabel *tablabel = GDL_DOCK_TABLABEL (widget); - - gdk_window_hide (tablabel->event_window); - - GTK_WIDGET_CLASS (gdl_dock_tablabel_parent_class)->unmap (widget); -} - -/* ----- Public interface ----- */ - -GtkWidget * -gdl_dock_tablabel_new (GdlDockItem *item) -{ - GdlDockTablabel *tablabel; - - tablabel = GDL_DOCK_TABLABEL (g_object_new (GDL_TYPE_DOCK_TABLABEL, - "item", item, - NULL)); - - return GTK_WIDGET (tablabel); -} - -void -gdl_dock_tablabel_activate (GdlDockTablabel *tablabel) -{ - g_return_if_fail (tablabel != NULL); - - tablabel->active = TRUE; - gtk_widget_set_state (GTK_WIDGET (tablabel), GTK_STATE_NORMAL); -} - -void -gdl_dock_tablabel_deactivate (GdlDockTablabel *tablabel) -{ - g_return_if_fail (tablabel != NULL); - - tablabel->active = FALSE; - /* yeah, i know it contradictive */ - gtk_widget_set_state (GTK_WIDGET (tablabel), GTK_STATE_ACTIVE); -} diff --git a/src/libgdl/gdl-dock-tablabel.h b/src/libgdl/gdl-dock-tablabel.h deleted file mode 100644 index b78c1c5c7..000000000 --- a/src/libgdl/gdl-dock-tablabel.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-tablabel.h - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_TABLABEL_H__ -#define __GDL_DOCK_TABLABEL_H__ - -#include -#include "libgdl/gdl-dock-item.h" - - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_TABLABEL (gdl_dock_tablabel_get_type ()) -#define GDL_DOCK_TABLABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabel)) -#define GDL_DOCK_TABLABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabelClass)) -#define GDL_IS_DOCK_TABLABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_TABLABEL)) -#define GDL_IS_DOCK_TABLABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_TABLABEL)) -#define GDL_DOCK_TABLABEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_TABLABEL, GdlDockTablabelClass)) - -/* data types & structures */ -typedef struct _GdlDockTablabel GdlDockTablabel; -typedef struct _GdlDockTablabelClass GdlDockTablabelClass; - -struct _GdlDockTablabel { - GtkBin parent; - - guint drag_handle_size; - GtkWidget *item; - GdkWindow *event_window; - gboolean active; - - GdkEventButton drag_start_event; - gboolean pre_drag; -}; - -struct _GdlDockTablabelClass { - GtkBinClass parent_class; - - void (*button_pressed_handle) (GdlDockTablabel *tablabel, - GdkEventButton *event); -}; - -/* public interface */ - -GtkWidget *gdl_dock_tablabel_new (GdlDockItem *item); -GType gdl_dock_tablabel_get_type (void); - -void gdl_dock_tablabel_activate (GdlDockTablabel *tablabel); -void gdl_dock_tablabel_deactivate (GdlDockTablabel *tablabel); - -G_END_DECLS - -#endif diff --git a/src/libgdl/gdl-dock.c b/src/libgdl/gdl-dock.c deleted file mode 100644 index c87468e5c..000000000 --- a/src/libgdl/gdl-dock.c +++ /dev/null @@ -1,1365 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * 2007 Naba Kumar - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include - -#include "gdl-dock.h" -#include "gdl-dock-master.h" -#include "gdl-dock-paned.h" -#include "gdl-dock-notebook.h" -#include "gdl-dock-placeholder.h" - -#include "libgdlmarshal.h" - -#ifndef __FUNCTION__ -#define __FUNCTION__ __func__ -#endif - -/* ----- Private prototypes ----- */ - -static void gdl_dock_class_init (GdlDockClass *class); - -static GObject *gdl_dock_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param); -static void gdl_dock_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); -static void gdl_dock_notify_cb (GObject *object, - GParamSpec *pspec, - gpointer user_data); - -static void gdl_dock_set_title (GdlDock *dock); - -static void gdl_dock_destroy (GtkObject *object); - -static void gdl_dock_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void gdl_dock_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); -static void gdl_dock_map (GtkWidget *widget); -static void gdl_dock_unmap (GtkWidget *widget); -static void gdl_dock_show (GtkWidget *widget); -static void gdl_dock_hide (GtkWidget *widget); - -static void gdl_dock_add (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_remove (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data); -static GType gdl_dock_child_type (GtkContainer *container); - -static void gdl_dock_detach (GdlDockObject *object, - gboolean recursive); -static void gdl_dock_reduce (GdlDockObject *object); -static gboolean gdl_dock_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request); -static void gdl_dock_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); -static gboolean gdl_dock_reorder (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement new_position, - GValue *other_data); - -static gboolean gdl_dock_floating_window_delete_event_cb (GtkWidget *widget); - -static gboolean gdl_dock_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement); - -static void gdl_dock_present (GdlDockObject *object, - GdlDockObject *child); - - -/* ----- Class variables and definitions ----- */ - -struct _GdlDockPrivate -{ - /* for floating docks */ - gboolean floating; - GtkWidget *window; - gboolean auto_title; - - gint float_x; - gint float_y; - gint width; - gint height; - - /* auxiliary fields */ - GdkGC *xor_gc; -}; - -enum { - LAYOUT_CHANGED, - LAST_SIGNAL -}; - -enum { - PROP_0, - PROP_FLOATING, - PROP_DEFAULT_TITLE, - PROP_WIDTH, - PROP_HEIGHT, - PROP_FLOAT_X, - PROP_FLOAT_Y -}; - -static guint dock_signals [LAST_SIGNAL] = { 0 }; - -#define SPLIT_RATIO 0.3 - - -/* ----- Private functions ----- */ - -G_DEFINE_TYPE (GdlDock, gdl_dock, GDL_TYPE_DOCK_OBJECT); - -static void -gdl_dock_class_init (GdlDockClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - GdlDockObjectClass *object_class; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - object_class = GDL_DOCK_OBJECT_CLASS (klass); - - g_object_class->constructor = gdl_dock_constructor; - g_object_class->set_property = gdl_dock_set_property; - g_object_class->get_property = gdl_dock_get_property; - - /* properties */ - - g_object_class_install_property ( - g_object_class, PROP_FLOATING, - g_param_spec_boolean ("floating", _("Floating"), - _("Whether the dock is floating in its own window"), - FALSE, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_DEFAULT_TITLE, - g_param_spec_string ("default-title", _("Default title"), - _("Default title for the newly created floating docks"), - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_WIDTH, - g_param_spec_int ("width", _("Width"), - _("Width for the dock when it's of floating type"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_HEIGHT, - g_param_spec_int ("height", _("Height"), - _("Height for the dock when it's of floating type"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_FLOAT_X, - g_param_spec_int ("floatx", _("Float X"), - _("X coordinate for a floating dock"), - G_MININT, G_MAXINT, 0, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_FLOAT_Y, - g_param_spec_int ("floaty", _("Float Y"), - _("Y coordinate for a floating dock"), - G_MININT, G_MAXINT, 0, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - gtk_object_class->destroy = gdl_dock_destroy; - - widget_class->size_request = gdl_dock_size_request; - widget_class->size_allocate = gdl_dock_size_allocate; - widget_class->map = gdl_dock_map; - widget_class->unmap = gdl_dock_unmap; - widget_class->show = gdl_dock_show; - widget_class->hide = gdl_dock_hide; - - container_class->add = gdl_dock_add; - container_class->remove = gdl_dock_remove; - container_class->forall = gdl_dock_forall; - container_class->child_type = gdl_dock_child_type; - - object_class->is_compound = TRUE; - - object_class->detach = gdl_dock_detach; - object_class->reduce = gdl_dock_reduce; - object_class->dock_request = gdl_dock_dock_request; - object_class->dock = gdl_dock_dock; - object_class->reorder = gdl_dock_reorder; - object_class->child_placement = gdl_dock_child_placement; - object_class->present = gdl_dock_present; - - /* signals */ - - dock_signals [LAYOUT_CHANGED] = - g_signal_new ("layout-changed", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GdlDockClass, layout_changed), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__VOID, - G_TYPE_NONE, /* return type */ - 0); - - klass->layout_changed = NULL; -} - -static void -gdl_dock_init (GdlDock *dock) -{ - gtk_widget_set_has_window (GTK_WIDGET (dock), FALSE); - - dock->root = NULL; - dock->_priv = g_new0 (GdlDockPrivate, 1); - dock->_priv->width = -1; - dock->_priv->height = -1; -} - -static gboolean -gdl_dock_floating_configure_event_cb (GtkWidget *widget, - GdkEventConfigure *event, - gpointer user_data) -{ - GdlDock *dock; - - g_return_val_if_fail (user_data != NULL && GDL_IS_DOCK (user_data), TRUE); - - dock = GDL_DOCK (user_data); - dock->_priv->float_x = event->x; - dock->_priv->float_y = event->y; - dock->_priv->width = event->width; - dock->_priv->height = event->height; - - return FALSE; -} - -static GObject * -gdl_dock_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param) -{ - GObject *g_object; - - g_object = G_OBJECT_CLASS (gdl_dock_parent_class)-> constructor (type, - n_construct_properties, - construct_param); - if (g_object) { - GdlDock *dock = GDL_DOCK (g_object); - GdlDockMaster *master; - - /* create a master for the dock if none was provided in the construction */ - master = GDL_DOCK_OBJECT_GET_MASTER (GDL_DOCK_OBJECT (dock)); - if (!master) { - GDL_DOCK_OBJECT_UNSET_FLAGS (dock, GDL_DOCK_AUTOMATIC); - master = g_object_new (GDL_TYPE_DOCK_MASTER, NULL); - /* the controller owns the master ref */ - gdl_dock_object_bind (GDL_DOCK_OBJECT (dock), G_OBJECT (master)); - } - - if (dock->_priv->floating) { - /* create floating window for this dock */ - dock->_priv->window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - g_object_set_data (G_OBJECT (dock->_priv->window), "dock", dock); - - /* set position and default size */ - gtk_window_set_position (GTK_WINDOW (dock->_priv->window), - GTK_WIN_POS_MOUSE); - gtk_window_set_default_size (GTK_WINDOW (dock->_priv->window), - dock->_priv->width, - dock->_priv->height); - gtk_window_set_type_hint (GTK_WINDOW (dock->_priv->window), - GDK_WINDOW_TYPE_HINT_NORMAL); - - gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dock->_priv->window), - TRUE); - - /* metacity ignores this */ - gtk_window_move (GTK_WINDOW (dock->_priv->window), - dock->_priv->float_x, - dock->_priv->float_y); - - /* connect to the configure event so we can track down window geometry */ - g_signal_connect (dock->_priv->window, "configure_event", - (GCallback) gdl_dock_floating_configure_event_cb, - dock); - - /* set the title and connect to the long_name notify queue - so we can reset the title when this prop changes */ - gdl_dock_set_title (dock); - g_signal_connect (dock, "notify::long-name", - (GCallback) gdl_dock_notify_cb, NULL); - - gtk_container_add (GTK_CONTAINER (dock->_priv->window), GTK_WIDGET (dock)); - - g_signal_connect (dock->_priv->window, "delete_event", - G_CALLBACK (gdl_dock_floating_window_delete_event_cb), - NULL); - } - GDL_DOCK_OBJECT_SET_FLAGS (dock, GDL_DOCK_ATTACHED); - } - - return g_object; -} - -static void -gdl_dock_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDock *dock = GDL_DOCK (object); - - switch (prop_id) { - case PROP_FLOATING: - dock->_priv->floating = g_value_get_boolean (value); - break; - case PROP_DEFAULT_TITLE: - if (GDL_DOCK_OBJECT (object)->master) - g_object_set (GDL_DOCK_OBJECT (object)->master, - "default-title", g_value_get_string (value), - NULL); - break; - case PROP_WIDTH: - dock->_priv->width = g_value_get_int (value); - break; - case PROP_HEIGHT: - dock->_priv->height = g_value_get_int (value); - break; - case PROP_FLOAT_X: - dock->_priv->float_x = g_value_get_int (value); - break; - case PROP_FLOAT_Y: - dock->_priv->float_y = g_value_get_int (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } - - switch (prop_id) { - case PROP_WIDTH: - case PROP_HEIGHT: - case PROP_FLOAT_X: - case PROP_FLOAT_Y: - if (dock->_priv->floating && dock->_priv->window) { - gtk_window_resize (GTK_WINDOW (dock->_priv->window), - dock->_priv->width, - dock->_priv->height); - } - break; - } -} - -static void -gdl_dock_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDock *dock = GDL_DOCK (object); - - switch (prop_id) { - case PROP_FLOATING: - g_value_set_boolean (value, dock->_priv->floating); - break; - case PROP_DEFAULT_TITLE: - if (GDL_DOCK_OBJECT (object)->master) { - gchar *default_title; - g_object_get (GDL_DOCK_OBJECT (object)->master, - "default-title", &default_title, - NULL); -#if GLIB_CHECK_VERSION(2,3,0) - g_value_take_string (value, default_title); -#else - g_value_set_string_take_ownership (value, default_title); -#endif - } - else - g_value_set_string (value, NULL); - break; - case PROP_WIDTH: - g_value_set_int (value, dock->_priv->width); - break; - case PROP_HEIGHT: - g_value_set_int (value, dock->_priv->height); - break; - case PROP_FLOAT_X: - g_value_set_int (value, dock->_priv->float_x); - break; - case PROP_FLOAT_Y: - g_value_set_int (value, dock->_priv->float_y); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_set_title (GdlDock *dock) -{ - GdlDockObject *object = GDL_DOCK_OBJECT (dock); - gchar *title = NULL; - - if (!dock->_priv->window) - return; - - if (!dock->_priv->auto_title && object->long_name) { - title = object->long_name; - } - else if (object->master) { - g_object_get (object->master, "default-title", &title, NULL); - } - - if (!title && dock->root) { - g_object_get (dock->root, "long-name", &title, NULL); - } - - if (!title) { - /* set a default title in the long_name */ - dock->_priv->auto_title = TRUE; - title = g_strdup_printf ( - _("Dock #%d"), GDL_DOCK_MASTER (object->master)->dock_number++); - } - - gtk_window_set_title (GTK_WINDOW (dock->_priv->window), title); - - g_free (title); -} - -static void -gdl_dock_notify_cb (GObject *object, - GParamSpec *pspec, - gpointer user_data) -{ - GdlDock *dock; - gchar* long_name; - - g_return_if_fail (object != NULL || GDL_IS_DOCK (object)); - - g_object_get (object, "long-name", &long_name, NULL); - - if (long_name) - { - dock = GDL_DOCK (object); - dock->_priv->auto_title = FALSE; - gdl_dock_set_title (dock); - } - g_free (long_name); -} - -static void -gdl_dock_destroy (GtkObject *object) -{ - GdlDock *dock = GDL_DOCK (object); - - if (dock->_priv) { - GdlDockPrivate *priv = dock->_priv; - dock->_priv = NULL; - - if (priv->window) { - gtk_widget_destroy (priv->window); - priv->floating = FALSE; - priv->window = NULL; - } - - /* destroy the xor gc */ - if (priv->xor_gc) { - g_object_unref (priv->xor_gc); - priv->xor_gc = NULL; - } - - g_free (priv); - } - - GTK_OBJECT_CLASS (gdl_dock_parent_class)->destroy (object); -} - -static void -gdl_dock_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GdlDock *dock; - GtkContainer *container; - guint border_width; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - dock = GDL_DOCK (widget); - container = GTK_CONTAINER (widget); - border_width = gtk_container_get_border_width (container); - - /* make request to root */ - if (dock->root && gtk_widget_get_visible (GTK_WIDGET (dock->root))) - gtk_widget_size_request (GTK_WIDGET (dock->root), requisition); - else { - requisition->width = 0; - requisition->height = 0; - }; - - requisition->width += 2 * border_width; - requisition->height += 2 * border_width; - - //gtk_widget_size_request (widget, requisition); -} - -static void -gdl_dock_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GdlDock *dock; - GtkContainer *container; - guint border_width; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - dock = GDL_DOCK (widget); - container = GTK_CONTAINER (widget); - border_width = gtk_container_get_border_width (container); - - gtk_widget_set_allocation (widget, allocation); - - /* reduce allocation by border width */ - allocation->x += border_width; - allocation->y += border_width; - allocation->width = MAX (1, allocation->width - 2 * border_width); - allocation->height = MAX (1, allocation->height - 2 * border_width); - - if (dock->root && gtk_widget_get_visible (GTK_WIDGET (dock->root))) - gtk_widget_size_allocate (GTK_WIDGET (dock->root), allocation); -} - -static void -gdl_dock_map (GtkWidget *widget) -{ - GtkWidget *child; - GdlDock *dock; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - dock = GDL_DOCK (widget); - - GTK_WIDGET_CLASS (gdl_dock_parent_class)->map (widget); - - if (dock->root) { - child = GTK_WIDGET (dock->root); - if (gtk_widget_get_visible (child) && !gtk_widget_get_mapped (child)) - gtk_widget_map (child); - } -} - -static void -gdl_dock_unmap (GtkWidget *widget) -{ - GtkWidget *child; - GdlDock *dock; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - dock = GDL_DOCK (widget); - - GTK_WIDGET_CLASS (gdl_dock_parent_class)->unmap (widget); - - if (dock->root) { - child = GTK_WIDGET (dock->root); - if (gtk_widget_get_visible (child) && gtk_widget_get_mapped (child)) - gtk_widget_unmap (child); - } - - if (dock->_priv->window) - gtk_widget_unmap (dock->_priv->window); -} - -static void -gdl_dock_foreach_automatic (GdlDockObject *object, - gpointer user_data) -{ - void (* function) (GtkWidget *) = user_data; - - if (GDL_DOCK_OBJECT_AUTOMATIC (object)) - (* function) (GTK_WIDGET (object)); -} - -static void -gdl_dock_show (GtkWidget *widget) -{ - GdlDock *dock; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - GTK_WIDGET_CLASS (gdl_dock_parent_class)->show (widget); - - dock = GDL_DOCK (widget); - if (dock->_priv->floating && dock->_priv->window) - gtk_widget_show (dock->_priv->window); - - if (GDL_DOCK_IS_CONTROLLER (dock)) { - gdl_dock_master_foreach_toplevel (GDL_DOCK_OBJECT_GET_MASTER (dock), - FALSE, (GFunc) gdl_dock_foreach_automatic, - gtk_widget_show); - } -} - -static void -gdl_dock_hide (GtkWidget *widget) -{ - GdlDock *dock; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - GTK_WIDGET_CLASS (gdl_dock_parent_class)->hide (widget); - - dock = GDL_DOCK (widget); - if (dock->_priv->floating && dock->_priv->window) - gtk_widget_hide (dock->_priv->window); - - if (GDL_DOCK_IS_CONTROLLER (dock)) { - gdl_dock_master_foreach_toplevel (GDL_DOCK_OBJECT_GET_MASTER (dock), - FALSE, (GFunc) gdl_dock_foreach_automatic, - gtk_widget_hide); - } -} - -static void -gdl_dock_add (GtkContainer *container, - GtkWidget *widget) -{ - g_return_if_fail (container != NULL); - g_return_if_fail (GDL_IS_DOCK (container)); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - gdl_dock_add_item (GDL_DOCK (container), - GDL_DOCK_ITEM (widget), - GDL_DOCK_TOP); /* default position */ -} - -static void -gdl_dock_remove (GtkContainer *container, - GtkWidget *widget) -{ - GdlDock *dock; - gboolean was_visible; - - g_return_if_fail (container != NULL); - g_return_if_fail (widget != NULL); - - dock = GDL_DOCK (container); - was_visible = gtk_widget_get_visible (widget); - - if (GTK_WIDGET (dock->root) == widget) { - dock->root = NULL; - GDL_DOCK_OBJECT_UNSET_FLAGS (widget, GDL_DOCK_ATTACHED); - gtk_widget_unparent (widget); - - if (was_visible && gtk_widget_get_visible (GTK_WIDGET (container))) - gtk_widget_queue_resize (GTK_WIDGET (dock)); - } -} - -static void -gdl_dock_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - GdlDock *dock; - - g_return_if_fail (container != NULL); - g_return_if_fail (GDL_IS_DOCK (container)); - g_return_if_fail (callback != NULL); - - dock = GDL_DOCK (container); - - if (dock->root) - (*callback) (GTK_WIDGET (dock->root), callback_data); -} - -static GType -gdl_dock_child_type (GtkContainer *container) -{ - return GDL_TYPE_DOCK_ITEM; -} - -static void -gdl_dock_detach (GdlDockObject *object, - gboolean recursive) -{ - GdlDock *dock = GDL_DOCK (object); - - /* detach children */ - if (recursive && dock->root) { - gdl_dock_object_detach (dock->root, recursive); - } - GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_ATTACHED); -} - -static void -gdl_dock_reduce (GdlDockObject *object) -{ - GdlDock *dock = GDL_DOCK (object); - GtkWidget *parent; - - if (dock->root) - return; - - if (GDL_DOCK_OBJECT_AUTOMATIC (dock)) { - gtk_widget_destroy (GTK_WIDGET (dock)); - - } else if (!GDL_DOCK_OBJECT_ATTACHED (dock)) { - /* if the user explicitly detached the object */ - if (dock->_priv->floating) - gtk_widget_hide (GTK_WIDGET (dock)); - else { - GtkWidget *widget = GTK_WIDGET (object); - parent = gtk_widget_get_parent (widget); - if (parent) - gtk_container_remove (GTK_CONTAINER (parent), widget); - } - } -} - -static gboolean -gdl_dock_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request) -{ - GdlDock *dock; - guint bw; - gint rel_x, rel_y; - GtkAllocation alloc; - gboolean may_dock = FALSE; - GdlDockRequest my_request; - - g_return_val_if_fail (GDL_IS_DOCK (object), FALSE); - - /* we get (x,y) in our allocation coordinates system */ - - dock = GDL_DOCK (object); - - /* Get dock size. */ - gtk_widget_get_allocation (GTK_WIDGET (dock), &alloc); - bw = gtk_container_get_border_width (GTK_CONTAINER (dock)); - - /* Get coordinates relative to our allocation area. */ - rel_x = x - alloc.x; - rel_y = y - alloc.y; - - if (request) - my_request = *request; - - /* Check if coordinates are in GdlDock widget. */ - if (rel_x > 0 && rel_x < alloc.width && - rel_y > 0 && rel_y < alloc.height) { - - /* It's inside our area. */ - may_dock = TRUE; - - /* Set docking indicator rectangle to the GdlDock size. */ - my_request.rect.x = alloc.x + bw; - my_request.rect.y = alloc.y + bw; - my_request.rect.width = alloc.width - 2*bw; - my_request.rect.height = alloc.height - 2*bw; - - /* If GdlDock has no root item yet, set the dock itself as - possible target. */ - if (!dock->root) { - my_request.position = GDL_DOCK_TOP; - my_request.target = object; - } else { - my_request.target = dock->root; - - /* See if it's in the border_width band. */ - if (rel_x < (gint)bw) { - my_request.position = GDL_DOCK_LEFT; - my_request.rect.width *= SPLIT_RATIO; - } else if (rel_x > alloc.width - (gint)bw) { - my_request.position = GDL_DOCK_RIGHT; - my_request.rect.x += my_request.rect.width * (1 - SPLIT_RATIO); - my_request.rect.width *= SPLIT_RATIO; - } else if (rel_y < (gint)bw) { - my_request.position = GDL_DOCK_TOP; - my_request.rect.height *= SPLIT_RATIO; - } else if (rel_y > alloc.height - (gint)bw) { - my_request.position = GDL_DOCK_BOTTOM; - my_request.rect.y += my_request.rect.height * (1 - SPLIT_RATIO); - my_request.rect.height *= SPLIT_RATIO; - } else { - /* Otherwise try our children. */ - /* give them allocation coordinates (we are a - GTK_NO_WINDOW) widget */ - may_dock = gdl_dock_object_dock_request (GDL_DOCK_OBJECT (dock->root), - x, y, &my_request); - } - } - } - - if (may_dock && request) - *request = my_request; - - return may_dock; -} - -static void -gdl_dock_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *user_data) -{ - GdlDock *dock; - - g_return_if_fail (GDL_IS_DOCK (object)); - /* only dock items allowed at this time */ - g_return_if_fail (GDL_IS_DOCK_ITEM (requestor)); - - dock = GDL_DOCK (object); - - if (position == GDL_DOCK_FLOATING) { - GdlDockItem *item = GDL_DOCK_ITEM (requestor); - gint x, y, width, height; - - if (user_data && G_VALUE_HOLDS (user_data, GDK_TYPE_RECTANGLE)) { - GdkRectangle *rect; - - rect = g_value_get_boxed (user_data); - x = rect->x; - y = rect->y; - width = rect->width; - height = rect->height; - } - else { - x = y = 0; - width = height = -1; - } - - gdl_dock_add_floating_item (dock, item, - x, y, width, height); - } - else if (dock->root) { - /* This is somewhat a special case since we know which item to - pass the request on because we only have on child */ - gdl_dock_object_dock (dock->root, requestor, position, NULL); - gdl_dock_set_title (dock); - - } - else { /* Item about to be added is root item. */ - GtkWidget *widget = GTK_WIDGET (requestor); - - dock->root = requestor; - GDL_DOCK_OBJECT_SET_FLAGS (requestor, GDL_DOCK_ATTACHED); - gtk_widget_set_parent (widget, GTK_WIDGET (dock)); - - gdl_dock_item_show_grip (GDL_DOCK_ITEM (requestor)); - - /* Realize the item (create its corresponding GdkWindow) when - GdlDock has been realized. */ - if (gtk_widget_get_realized (GTK_WIDGET (dock))) - gtk_widget_realize (widget); - - /* Map the widget if it's visible and the parent is visible and has - been mapped. This is done to make sure that the GdkWindow is - visible. */ - if (gtk_widget_get_visible (GTK_WIDGET (dock)) && - gtk_widget_get_visible (widget)) { - if (gtk_widget_get_mapped (GTK_WIDGET (dock))) - gtk_widget_map (widget); - - /* Make the widget resize. */ - gtk_widget_queue_resize (widget); - } - gdl_dock_set_title (dock); - } -} - -static gboolean -gdl_dock_floating_window_delete_event_cb (GtkWidget *widget) -{ - GdlDock *dock; - - g_return_val_if_fail (GTK_IS_WINDOW (widget), FALSE); - - dock = GDL_DOCK (g_object_get_data (G_OBJECT (widget), "dock")); - if (dock->root) { - /* this will call reduce on ourselves, hiding the window if appropiate */ - gdl_dock_item_hide_item (GDL_DOCK_ITEM (dock->root)); - } - - return TRUE; -} - -static void -_gdl_dock_foreach_build_list (GdlDockObject *object, - gpointer user_data) -{ - GList **l = (GList **) user_data; - - if (GDL_IS_DOCK_ITEM (object)) - *l = g_list_prepend (*l, object); -} - -static gboolean -gdl_dock_reorder (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement new_position, - GValue *other_data) -{ - GdlDock *dock = GDL_DOCK (object); - gboolean handled = FALSE; - - if (dock->_priv->floating && - new_position == GDL_DOCK_FLOATING && - dock->root == requestor) { - - if (other_data && G_VALUE_HOLDS (other_data, GDK_TYPE_RECTANGLE)) { - GdkRectangle *rect; - - rect = g_value_get_boxed (other_data); - gtk_window_move (GTK_WINDOW (dock->_priv->window), - rect->x, - rect->y); - handled = TRUE; - } - } - - return handled; -} - -static gboolean -gdl_dock_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement) -{ - GdlDock *dock = GDL_DOCK (object); - gboolean retval = TRUE; - - if (dock->root == child) { - if (placement) { - if (*placement == GDL_DOCK_NONE || *placement == GDL_DOCK_FLOATING) - *placement = GDL_DOCK_TOP; - } - } else - retval = FALSE; - - return retval; -} - -static void -gdl_dock_present (GdlDockObject *object, - GdlDockObject *child) -{ - GdlDock *dock = GDL_DOCK (object); - - if (dock->_priv->floating) - gtk_window_present (GTK_WINDOW (dock->_priv->window)); -} - - -/* ----- Public interface ----- */ - -GtkWidget * -gdl_dock_new (void) -{ - GObject *dock; - - dock = g_object_new (GDL_TYPE_DOCK, NULL); - GDL_DOCK_OBJECT_UNSET_FLAGS (dock, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (dock); -} - -GtkWidget * -gdl_dock_new_from (GdlDock *original, - gboolean floating) -{ - GObject *new_dock; - - g_return_val_if_fail (original != NULL, NULL); - - new_dock = g_object_new (GDL_TYPE_DOCK, - "master", GDL_DOCK_OBJECT_GET_MASTER (original), - "floating", floating, - NULL); - GDL_DOCK_OBJECT_UNSET_FLAGS (new_dock, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (new_dock); -} - -/* Depending on where the dock item (where new item will be docked) locates - * in the dock, we might need to change the docking placement. If the - * item is does not touches the center of dock, the new-item-to-dock would - * require a center dock on this item. - */ -static GdlDockPlacement -gdl_dock_refine_placement (GdlDock *dock, GdlDockItem *dock_item, - GdlDockPlacement placement) -{ - GtkAllocation allocation; - GtkRequisition object_size; - - gdl_dock_item_preferred_size (dock_item, &object_size); - gtk_widget_get_allocation (GTK_WIDGET (dock), &allocation); - - g_return_val_if_fail (allocation.width > 0, placement); - g_return_val_if_fail (allocation.height > 0, placement); - g_return_val_if_fail (object_size.width > 0, placement); - g_return_val_if_fail (object_size.height > 0, placement); - - if (placement == GDL_DOCK_LEFT || placement == GDL_DOCK_RIGHT) { - /* Check if dock_object touches center in terms of width */ - if (allocation.width/2 > object_size.width) { - return GDL_DOCK_CENTER; - } - } else if (placement == GDL_DOCK_TOP || placement == GDL_DOCK_BOTTOM) { - /* Check if dock_object touches center in terms of height */ - if (allocation.height/2 > object_size.height) { - return GDL_DOCK_CENTER; - } - } - return placement; -} - -/* Determines the larger item of the two based on the placement: - * for left/right placement, height determines it. - * for top/bottom placement, width determines it. - * for center placement, area determines it. - */ -static GdlDockItem* -gdl_dock_select_larger_item (GdlDockItem *dock_item_1, - GdlDockItem *dock_item_2, - GdlDockPlacement placement, - gint level /* for debugging */) -{ - GtkRequisition size_1, size_2; - - g_return_val_if_fail (dock_item_1 != NULL, dock_item_2); - g_return_val_if_fail (dock_item_2 != NULL, dock_item_1); - - gdl_dock_item_preferred_size (dock_item_1, &size_1); - gdl_dock_item_preferred_size (dock_item_2, &size_2); - - g_return_val_if_fail (size_1.width > 0, dock_item_2); - g_return_val_if_fail (size_1.height > 0, dock_item_2); - g_return_val_if_fail (size_2.width > 0, dock_item_1); - g_return_val_if_fail (size_2.height > 0, dock_item_1); - - if (placement == GDL_DOCK_LEFT || placement == GDL_DOCK_RIGHT) - { - /* For left/right placement, height is what matters */ - return (size_1.height >= size_2.height? - dock_item_1 : dock_item_2); - } else if (placement == GDL_DOCK_TOP || placement == GDL_DOCK_BOTTOM) - { - /* For top/bottom placement, width is what matters */ - return (size_1.width >= size_2.width? - dock_item_1 : dock_item_2); - } else if (placement == GDL_DOCK_CENTER) { - /* For center place, area is what matters */ - return ((size_1.width * size_1.height) - >= (size_2.width * size_2.height)? - dock_item_1 : dock_item_2); - } else if (placement == GDL_DOCK_NONE) { - return dock_item_1; - } else { - g_warning ("Should not reach here: %s:%d", __FUNCTION__, __LINE__); - } - return dock_item_1; -} - -/* Determines the best dock item to dock a new item with the given placement. - * It traverses the dock tree and (based on the placement) tries to find - * the best located item wrt to the placement. The approach is to find the - * largest item on/around the placement side (for side placements) and to - * find the largest item for center placement. In most situations, this is - * what user wants and the heuristic should be therefore sufficient. - */ -static GdlDockItem* -gdl_dock_find_best_placement_item (GdlDockItem *dock_item, - GdlDockPlacement placement, - gint level /* for debugging */) -{ - GdlDockItem *ret_item = NULL; - - if (GDL_IS_DOCK_PANED (dock_item)) - { - GtkOrientation orientation; - GdlDockItem *dock_item_1, *dock_item_2; - GList* children; - - children = gtk_container_get_children (GTK_CONTAINER (dock_item)); - - g_assert (g_list_length (children) == 2); - - g_object_get (dock_item, "orientation", &orientation, NULL); - if ((orientation == GTK_ORIENTATION_HORIZONTAL && - placement == GDL_DOCK_LEFT) || - (orientation == GTK_ORIENTATION_VERTICAL && - placement == GDL_DOCK_TOP)) { - /* Return left or top pane widget */ - ret_item = - gdl_dock_find_best_placement_item (GDL_DOCK_ITEM - (children->data), - placement, level + 1); - } else if ((orientation == GTK_ORIENTATION_HORIZONTAL && - placement == GDL_DOCK_RIGHT) || - (orientation == GTK_ORIENTATION_VERTICAL && - placement == GDL_DOCK_BOTTOM)) { - /* Return right or top pane widget */ - ret_item = - gdl_dock_find_best_placement_item (GDL_DOCK_ITEM - (children->next->data), - placement, level + 1); - } else { - /* Evaluate which of the two sides is bigger */ - dock_item_1 = - gdl_dock_find_best_placement_item (GDL_DOCK_ITEM - (children->data), - placement, level + 1); - dock_item_2 = - gdl_dock_find_best_placement_item (GDL_DOCK_ITEM - (children->next->data), - placement, level + 1); - ret_item = gdl_dock_select_larger_item (dock_item_1, - dock_item_2, - placement, level); - } - g_list_free (children); - } - else if (GDL_IS_DOCK_ITEM (dock_item)) - { - ret_item = dock_item; - } - else - { - /* should not be here */ - g_warning ("Should not reach here: %s:%d", __FUNCTION__, __LINE__); - } - return ret_item; -} - -void -gdl_dock_add_item (GdlDock *dock, - GdlDockItem *item, - GdlDockPlacement placement) -{ - g_return_if_fail (dock != NULL); - g_return_if_fail (item != NULL); - - if (placement == GDL_DOCK_FLOATING) - /* Add the item to a new floating dock */ - gdl_dock_add_floating_item (dock, item, 0, 0, -1, -1); - - else { - GdlDockItem *best_dock_item; - /* Non-floating item. */ - if (dock->root) { - GdlDockPlacement local_placement; - - best_dock_item = - gdl_dock_find_best_placement_item (GDL_DOCK_ITEM (dock->root), - placement, 0); - local_placement = gdl_dock_refine_placement (dock, best_dock_item, - placement); - gdl_dock_object_dock (GDL_DOCK_OBJECT (best_dock_item), - GDL_DOCK_OBJECT (item), - local_placement, NULL); - } else { - gdl_dock_object_dock (GDL_DOCK_OBJECT (dock), - GDL_DOCK_OBJECT (item), - placement, NULL); - } - } -} - -void -gdl_dock_add_floating_item (GdlDock *dock, - GdlDockItem *item, - gint x, - gint y, - gint width, - gint height) -{ - GdlDock *new_dock; - - g_return_if_fail (dock != NULL); - g_return_if_fail (item != NULL); - - new_dock = GDL_DOCK (g_object_new (GDL_TYPE_DOCK, - "master", GDL_DOCK_OBJECT_GET_MASTER (dock), - "floating", TRUE, - "width", width, - "height", height, - "floatx", x, - "floaty", y, - NULL)); - - if (gtk_widget_get_visible (GTK_WIDGET (dock))) { - gtk_widget_show (GTK_WIDGET (new_dock)); - if (gtk_widget_get_mapped (GTK_WIDGET (dock))) - gtk_widget_map (GTK_WIDGET (new_dock)); - - /* Make the widget resize. */ - gtk_widget_queue_resize (GTK_WIDGET (new_dock)); - } - - gdl_dock_add_item (GDL_DOCK (new_dock), item, GDL_DOCK_TOP); -} - -GdlDockItem * -gdl_dock_get_item_by_name (GdlDock *dock, - const gchar *name) -{ - GdlDockObject *found; - - g_return_val_if_fail (dock != NULL && name != NULL, NULL); - - /* proxy the call to our master */ - found = gdl_dock_master_get_object (GDL_DOCK_OBJECT_GET_MASTER (dock), name); - - return (found && GDL_IS_DOCK_ITEM (found)) ? GDL_DOCK_ITEM (found) : NULL; -} - -GdlDockPlaceholder * -gdl_dock_get_placeholder_by_name (GdlDock *dock, - const gchar *name) -{ - GdlDockObject *found; - - g_return_val_if_fail (dock != NULL && name != NULL, NULL); - - /* proxy the call to our master */ - found = gdl_dock_master_get_object (GDL_DOCK_OBJECT_GET_MASTER (dock), name); - - return (found && GDL_IS_DOCK_PLACEHOLDER (found)) ? - GDL_DOCK_PLACEHOLDER (found) : NULL; -} - -GList * -gdl_dock_get_named_items (GdlDock *dock) -{ - GList *list = NULL; - - g_return_val_if_fail (dock != NULL, NULL); - - gdl_dock_master_foreach (GDL_DOCK_OBJECT_GET_MASTER (dock), - (GFunc) _gdl_dock_foreach_build_list, &list); - - return list; -} - -GdlDock * -gdl_dock_object_get_toplevel (GdlDockObject *object) -{ - GdlDockObject *parent = object; - - g_return_val_if_fail (object != NULL, NULL); - - while (parent && !GDL_IS_DOCK (parent)) - parent = gdl_dock_object_get_parent_object (parent); - - return parent ? GDL_DOCK (parent) : NULL; -} - -void -gdl_dock_xor_rect (GdlDock *dock, - GdkRectangle *rect) -{ - GtkWidget *widget; - GdkWindow *window; - gint8 dash_list [2]; - - widget = GTK_WIDGET (dock); - - if (!dock->_priv->xor_gc) { - if (gtk_widget_get_realized (widget)) { - GdkGCValues values; - - values.function = GDK_INVERT; - values.subwindow_mode = GDK_INCLUDE_INFERIORS; - dock->_priv->xor_gc = gdk_gc_new_with_values - (gtk_widget_get_window (widget), &values, GDK_GC_FUNCTION | GDK_GC_SUBWINDOW); - } else - return; - }; - - gdk_gc_set_line_attributes (dock->_priv->xor_gc, 1, - GDK_LINE_ON_OFF_DASH, - GDK_CAP_NOT_LAST, - GDK_JOIN_BEVEL); - - window = gtk_widget_get_window (widget); - - dash_list [0] = 1; - dash_list [1] = 1; - - gdk_gc_set_dashes (dock->_priv->xor_gc, 1, dash_list, 2); - - gdk_draw_rectangle (window, dock->_priv->xor_gc, FALSE, - rect->x, rect->y, - rect->width, rect->height); - - gdk_gc_set_dashes (dock->_priv->xor_gc, 0, dash_list, 2); - - gdk_draw_rectangle (window, dock->_priv->xor_gc, FALSE, - rect->x + 1, rect->y + 1, - rect->width - 2, rect->height - 2); -} diff --git a/src/libgdl/gdl-dock.h b/src/libgdl/gdl-dock.h deleted file mode 100644 index 2259d395d..000000000 --- a/src/libgdl/gdl-dock.h +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_H__ -#define __GDL_DOCK_H__ - -#include -#include "libgdl/gdl-dock-object.h" -#include "libgdl/gdl-dock-item.h" -#include "libgdl/gdl-dock-placeholder.h" - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK (gdl_dock_get_type ()) -#define GDL_DOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK, GdlDock)) -#define GDL_DOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK, GdlDockClass)) -#define GDL_IS_DOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK)) -#define GDL_IS_DOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK)) -#define GDL_DOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK, GdlDockClass)) - -/* data types & structures */ -typedef struct _GdlDock GdlDock; -typedef struct _GdlDockClass GdlDockClass; -typedef struct _GdlDockPrivate GdlDockPrivate; - -struct _GdlDock { - GdlDockObject object; - - GdlDockObject *root; - - GdlDockPrivate *_priv; -}; - -struct _GdlDockClass { - GdlDockObjectClass parent_class; - - void (* layout_changed) (GdlDock *dock); /* proxy signal for the master */ -}; - -/* additional macros */ -#define GDL_DOCK_IS_CONTROLLER(dock) \ - (gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (dock)) == \ - GDL_DOCK_OBJECT (dock)) - -/* public interface */ - -GtkWidget *gdl_dock_new (void); - -GtkWidget *gdl_dock_new_from (GdlDock *original, - gboolean floating); - -GType gdl_dock_get_type (void); - -void gdl_dock_add_item (GdlDock *dock, - GdlDockItem *item, - GdlDockPlacement place); - -void gdl_dock_add_floating_item (GdlDock *dock, - GdlDockItem *item, - gint x, - gint y, - gint width, - gint height); - -GdlDockItem *gdl_dock_get_item_by_name (GdlDock *dock, - const gchar *name); - -GdlDockPlaceholder *gdl_dock_get_placeholder_by_name (GdlDock *dock, - const gchar *name); - -GList *gdl_dock_get_named_items (GdlDock *dock); - -GdlDock *gdl_dock_object_get_toplevel (GdlDockObject *object); - -void gdl_dock_xor_rect (GdlDock *dock, - GdkRectangle *rect); - -G_END_DECLS - -#endif diff --git a/src/libgdl/gdl-i18n.c b/src/libgdl/gdl-i18n.c deleted file mode 100644 index 5f92b66c7..000000000 --- a/src/libgdl/gdl-i18n.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation - * All rights reserved. - * - * This file is part of the Gnome Devtools Library. - * - * The Gnome Devtools Library is free software; you can redistribute - * it and/or modify it under the terms of the GNU Library General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * The Gnome Devtools Library is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "gdl-i18n.h" - -char * -gdl_gettext (const char *msgid) -{ - static gboolean initialized = FALSE; - - if (!initialized) { -/* bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); */ - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - initialized = TRUE; - } - - return dgettext (GETTEXT_PACKAGE, msgid); -} - - diff --git a/src/libgdl/gdl-i18n.h b/src/libgdl/gdl-i18n.h deleted file mode 100644 index 1582e957d..000000000 --- a/src/libgdl/gdl-i18n.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation - * All rights reserved. - * - * This file is part of the Gnome Devtools Library. - * - * The Gnome Devtools Library is free software; you can redistribute - * it and/or modify it under the terms of the GNU Library General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * The Gnome Devtools Library is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - @NOTATION@ - */ - -/* - * Handles all of the internationalization configuration options. - * Author: Tom Tromey - */ - -#ifndef __GDL_18N_H__ -#define __GDL_18N_H__ 1 - -#include - - -G_BEGIN_DECLS - -#ifdef ENABLE_NLS -# include -# undef _ -# define _(String) gdl_gettext (String) -# ifdef gettext_noop -# define N_(String) gettext_noop (String) -# else -# define N_(String) (String) -# endif -#else -/* Stubs that do something close enough. */ -# undef textdomain -# define textdomain(String) (String) -# undef gettext -# define gettext(String) (String) -# undef dgettext -# define dgettext(Domain,Message) (Message) -# undef dcgettext -# define dcgettext(Domain,Message,Type) (Message) -# undef bindtextdomain -# define bindtextdomain(Domain,Directory) (Domain) -# undef bind_textdomain_codeset -# define bind_textdomain_codeset(Domain,CodeSet) (Domain) -# undef _ -# define _(String) (String) -# undef N_ -# define N_(String) (String) -#endif - -char *gdl_gettext (const char *msgid); - -G_END_DECLS - -#endif /* __GDL_I18N_H__ */ diff --git a/src/libgdl/gdl-switcher.c b/src/libgdl/gdl-switcher.c deleted file mode 100644 index 53a4b1989..000000000 --- a/src/libgdl/gdl-switcher.c +++ /dev/null @@ -1,1031 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 8 -*- */ -/* gdl-switcher.c - * - * Copyright (C) 2003 Ettore Perazzoli, - * 2007 Naba Kumar - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * - * Copied and adapted from ESidebar.[ch] from evolution - * - * Authors: Ettore Perazzoli - * Naba Kumar - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include "gdl-switcher.h" -#include "libgdlmarshal.h" -#include "libgdltypebuiltins.h" - -#include - -static void gdl_switcher_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_switcher_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_switcher_add_button (GdlSwitcher *switcher, - const gchar *label, - const gchar *tooltips, - const gchar *stock_id, - GdkPixbuf *pixbuf_icon, - gint switcher_id, - GtkWidget *page); -/* static void gdl_switcher_remove_button (GdlSwitcher *switcher, gint switcher_id); */ -static void gdl_switcher_select_page (GdlSwitcher *switcher, gint switcher_id); -static void gdl_switcher_select_button (GdlSwitcher *switcher, gint switcher_id); -static void gdl_switcher_set_show_buttons (GdlSwitcher *switcher, gboolean show); -static void gdl_switcher_set_style (GdlSwitcher *switcher, - GdlSwitcherStyle switcher_style); -static GdlSwitcherStyle gdl_switcher_get_style (GdlSwitcher *switcher); - -enum { - PROP_0, - PROP_SWITCHER_STYLE -}; - -typedef struct { - GtkWidget *button_widget; - GtkWidget *label; - GtkWidget *icon; - GtkWidget *arrow; - GtkWidget *hbox; - GtkWidget *page; - int id; -} Button; - -struct _GdlSwitcherPrivate { - GdlSwitcherStyle switcher_style; - GdlSwitcherStyle toolbar_style; - - gboolean show; - GSList *buttons; - - guint style_changed_id; - gint buttons_height_request; - gboolean in_toggle; -}; - -G_DEFINE_TYPE (GdlSwitcher, gdl_switcher, GTK_TYPE_NOTEBOOK) - -#define INTERNAL_MODE(switcher) (switcher->priv->switcher_style == \ - GDL_SWITCHER_STYLE_TOOLBAR ? switcher->priv->toolbar_style : \ - switcher->priv->switcher_style) - -#define H_PADDING 2 -#define V_PADDING 2 - -/* Utility functions. */ - -static void -gdl_switcher_long_name_changed (GObject* object, - GParamSpec* spec, - gpointer user_data) -{ - Button* button = user_data; - gchar* label; - - g_object_get (object, "long-name", &label, NULL); - gtk_label_set_text (GTK_LABEL (button->label), label); - g_free (label); -} - -static void -gdl_switcher_stock_id_changed (GObject* object, - GParamSpec* spec, - gpointer user_data) -{ - Button* button = user_data; - gchar* id; - - g_object_get (object, "stock-id", &id, NULL); - gtk_image_set_from_stock (GTK_IMAGE(button->icon), id, GTK_ICON_SIZE_MENU); - g_free (id); -} - - -static Button * -button_new (GtkWidget *button_widget, GtkWidget *label, GtkWidget *icon, - GtkWidget *arrow, GtkWidget *hbox, int id, GtkWidget *page) -{ - Button *button = g_new (Button, 1); - - button->button_widget = button_widget; - button->label = label; - button->icon = icon; - button->arrow = arrow; - button->hbox = hbox; - button->id = id; - button->page = page; - - g_signal_connect (page, "notify::long-name", G_CALLBACK (gdl_switcher_long_name_changed), - button); - g_signal_connect (page, "notify::stock-id", G_CALLBACK (gdl_switcher_stock_id_changed), - button); - - g_object_ref (button_widget); - g_object_ref (label); - g_object_ref (icon); - g_object_ref (arrow); - g_object_ref (hbox); - - return button; -} - -static void -button_free (Button *button) -{ - g_signal_handlers_disconnect_by_func (button->page, - gdl_switcher_long_name_changed, - button); - g_signal_handlers_disconnect_by_func (button->page, - gdl_switcher_stock_id_changed, - button); - - g_object_unref (button->button_widget); - g_object_unref (button->label); - g_object_unref (button->icon); - g_object_unref (button->hbox); - g_free (button); -} - -static gint -gdl_switcher_get_page_id (GtkWidget *widget) -{ - static gint switcher_id_count = 0; - gint switcher_id; - switcher_id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), - "__switcher_id")); - if (switcher_id <= 0) { - switcher_id = ++switcher_id_count; - g_object_set_data (G_OBJECT (widget), "__switcher_id", - GINT_TO_POINTER (switcher_id)); - } - return switcher_id; -} - -static void -update_buttons (GdlSwitcher *switcher, int new_selected_id) -{ - GSList *p; - - switcher->priv->in_toggle = TRUE; - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - if (button->id == new_selected_id) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON - (button->button_widget), TRUE); - gtk_widget_set_sensitive (button->arrow, TRUE); - } else { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON - (button->button_widget), FALSE); - gtk_widget_set_sensitive (button->arrow, FALSE); - } - } - - switcher->priv->in_toggle = FALSE; -} - -/* Callbacks. */ - -static void -button_toggled_callback (GtkToggleButton *toggle_button, - GdlSwitcher *switcher) -{ - int id = 0; - gboolean is_active = FALSE; - GSList *p; - - if (switcher->priv->in_toggle) - return; - - switcher->priv->in_toggle = TRUE; - - if (gtk_toggle_button_get_active (toggle_button)) - is_active = TRUE; - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - if (button->button_widget != GTK_WIDGET (toggle_button)) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON - (button->button_widget), FALSE); - gtk_widget_set_sensitive (button->arrow, FALSE); - } else { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON - (button->button_widget), TRUE); - gtk_widget_set_sensitive (button->arrow, TRUE); - id = button->id; - } - } - - switcher->priv->in_toggle = FALSE; - - if (is_active) - { - gdl_switcher_select_page (switcher, id); - } -} - -/* Returns -1 if layout didn't happen because a resize request was queued */ -static int -layout_buttons (GdlSwitcher *switcher) -{ - GtkRequisition client_requisition = {0,0}; - GtkAllocation allocation; - GdlSwitcherStyle switcher_style; - gboolean icons_only; - int num_btns = g_slist_length (switcher->priv->buttons); - unsigned int btns_per_row; - GSList **rows, *p; - Button *button; - int row_number; - int max_btn_width = 0, max_btn_height = 0; - int optimal_layout_width = 0; - int row_last; - int x, y; - int i; - int rows_count; - int last_buttons_height; - - gtk_widget_get_allocation (GTK_WIDGET (switcher), &allocation); - - last_buttons_height = switcher->priv->buttons_height_request; - - GTK_WIDGET_CLASS (gdl_switcher_parent_class)->size_request (GTK_WIDGET (switcher), &client_requisition); - - y = allocation.y + allocation.height - V_PADDING - 1; - - if (num_btns == 0) - return y; - - switcher_style = INTERNAL_MODE (switcher); - icons_only = (switcher_style == GDL_SWITCHER_STYLE_ICON); - - /* Figure out the max width and height */ - optimal_layout_width = H_PADDING; - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - GtkRequisition requisition; - - button = p->data; - gtk_widget_size_request (GTK_WIDGET (button->button_widget), - &requisition); - optimal_layout_width += requisition.width + H_PADDING; - max_btn_height = MAX (max_btn_height, requisition.height); - max_btn_width = MAX (max_btn_width, requisition.width); - } - - /* Figure out how many rows and columns we'll use. */ - btns_per_row = allocation.width / (max_btn_width + H_PADDING); - /* Use at least one column */ - if (btns_per_row == 0) btns_per_row = 1; - - /* If all the buttons could fit in the single row, have it so */ - if (allocation.width >= optimal_layout_width) - { - btns_per_row = num_btns; - } - if (!icons_only) { - /* If using text buttons, we want to try to have a - * completely filled-in grid, but if we can't, we want - * the odd row to have just a single button. - */ - while (num_btns % btns_per_row > 1) - btns_per_row--; - } - - rows_count = num_btns / btns_per_row; - if (num_btns % btns_per_row != 0) - rows_count++; - - /* Assign buttons to rows */ - rows = g_new0 (GSList *, rows_count); - - if (!icons_only && num_btns % btns_per_row != 0) { - button = switcher->priv->buttons->data; - rows [0] = g_slist_append (rows [0], button->button_widget); - - p = switcher->priv->buttons->next; - row_number = p ? 1 : 0; - } else { - p = switcher->priv->buttons; - row_number = 0; - } - - for (; p != NULL; p = p->next) { - button = p->data; - - if (g_slist_length (rows [row_number]) == btns_per_row) - row_number ++; - - rows [row_number] = g_slist_append (rows [row_number], - button->button_widget); - } - - row_last = row_number; - - /* If there are more than 1 row of buttons, save the current height - * requirement for subsequent size requests. - */ - if (row_last > 0) - { - switcher->priv->buttons_height_request = - (row_last + 1) * (max_btn_height + V_PADDING) + 1; - } else { /* Otherwize clear it */ - if (last_buttons_height >= 0) { - - switcher->priv->buttons_height_request = -1; - } - } - - /* If it turns out that we now require smaller height for the buttons - * than it was last time, make a resize request to ensure our - * size requisition is properly communicated to the parent (otherwise - * parent tend to keep assuming the older size). - */ - if (last_buttons_height > switcher->priv->buttons_height_request) - { - gtk_widget_queue_resize (GTK_WIDGET (switcher)); - y = -1; // set return value - } - else - { - /* Layout the buttons. */ - for (i = row_last; i >= 0; i --) { - int len, extra_width; - - y -= max_btn_height; - - /* Check for possible size over flow (taking into account client - * requisition - */ - if (y < (allocation.y + client_requisition.height)) { - /* We have an overflow: Insufficient allocation */ - if (last_buttons_height < switcher->priv->buttons_height_request) { - /* Request for a new resize */ - gtk_widget_queue_resize (GTK_WIDGET (switcher)); - y = -1; // set return value - goto exit; - } - } - x = H_PADDING + allocation.x; - len = g_slist_length (rows[i]); - if (switcher_style == GDL_SWITCHER_STYLE_TEXT || - switcher_style == GDL_SWITCHER_STYLE_BOTH) - extra_width = (allocation.width - (len * max_btn_width ) - - (len * H_PADDING)) / len; - else - extra_width = 0; - for (p = rows [i]; p != NULL; p = p->next) { - GtkAllocation child_allocation; - - child_allocation.x = x; - child_allocation.y = y; - if (rows_count == 1 && row_number == 0) - { - GtkRequisition child_requisition; - gtk_widget_size_request (GTK_WIDGET (p->data), - &child_requisition); - child_allocation.width = child_requisition.width; - } - else - { - child_allocation.width = max_btn_width + extra_width; - } - child_allocation.height = max_btn_height; - - gtk_widget_size_allocate (GTK_WIDGET (p->data), &child_allocation); - - x += child_allocation.width + H_PADDING; - } - - y -= V_PADDING; - } - } - - exit: - for (i = 0; i <= row_last; i ++) { - g_slist_free (rows [i]); - } - g_free (rows); - - return y; -} - -static void -do_layout (GdlSwitcher *switcher) -{ - GtkAllocation allocation; - GtkAllocation child_allocation; - int y; - - gtk_widget_get_allocation (GTK_WIDGET (switcher), &allocation); - - if (switcher->priv->show) { - y = layout_buttons (switcher); - if (y < 0) /* Layout did not happen and a resize was requested */ - return; - } - else - y = allocation.y + allocation.height; - - /* Place the parent widget. */ - child_allocation.x = allocation.x; - child_allocation.y = allocation.y; - child_allocation.width = allocation.width; - child_allocation.height = y - allocation.y; - - GTK_WIDGET_CLASS (gdl_switcher_parent_class)->size_allocate (GTK_WIDGET (switcher), &child_allocation); -} - -/* GtkContainer methods. */ - -static void -gdl_switcher_forall (GtkContainer *container, gboolean include_internals, - GtkCallback callback, void *callback_data) -{ - GdlSwitcher *switcher = - GDL_SWITCHER (container); - GSList *p; - - GTK_CONTAINER_CLASS (gdl_switcher_parent_class)->forall (GTK_CONTAINER (switcher), - include_internals, - callback, callback_data); - if (include_internals) { - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - GtkWidget *widget = ((Button *) p->data)->button_widget; - (* callback) (widget, callback_data); - } - } -} - -static void -gdl_switcher_remove (GtkContainer *container, GtkWidget *widget) -{ - gint switcher_id; - GdlSwitcher *switcher = - GDL_SWITCHER (container); - GSList *p; - - switcher_id = gdl_switcher_get_page_id (widget); - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *b = (Button *) p->data; - - if (b->id == switcher_id) { - gtk_widget_unparent (b->button_widget); - switcher->priv->buttons = - g_slist_remove_link (switcher->priv->buttons, p); - button_free (b); - gtk_widget_queue_resize (GTK_WIDGET (switcher)); - break; - } - } - GTK_CONTAINER_CLASS (gdl_switcher_parent_class)->remove (GTK_CONTAINER (switcher), widget); -} - -/* GtkWidget methods. */ - -static void -gdl_switcher_size_request (GtkWidget *widget, GtkRequisition *requisition) -{ - GdlSwitcher *switcher = GDL_SWITCHER (widget); - GSList *p; - gint button_height = 0; - - GTK_WIDGET_CLASS (gdl_switcher_parent_class)->size_request (GTK_WIDGET (switcher), requisition); - - if (!switcher->priv->show) - return; - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - gint button_width; - Button *button = p->data; - GtkRequisition button_requisition; - - gtk_widget_size_request (button->button_widget, &button_requisition); - button_width = button_requisition.width + 2 * H_PADDING; - requisition->width = MAX (requisition->width, button_width); - button_height = MAX (button_height, - button_requisition.height + 2 * V_PADDING); - } - - if (switcher->priv->buttons_height_request > 0) { - requisition->height += switcher->priv->buttons_height_request; - } else { - requisition->height += button_height + V_PADDING; - } -} - -static void -gdl_switcher_size_allocate (GtkWidget *widget, GtkAllocation *allocation) -{ - gtk_widget_set_allocation (widget, allocation); - do_layout (GDL_SWITCHER (widget)); -} - -static gint -gdl_switcher_expose (GtkWidget *widget, GdkEventExpose *event) -{ - GSList *p; - GdlSwitcher *switcher = GDL_SWITCHER (widget); - if (switcher->priv->show) { - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - GtkWidget *button = ((Button *) p->data)->button_widget; - gtk_container_propagate_expose (GTK_CONTAINER (widget), - button, event); - } - } - return GTK_WIDGET_CLASS (gdl_switcher_parent_class)->expose_event (widget, event); -} - -static void -gdl_switcher_map (GtkWidget *widget) -{ - GSList *p; - GdlSwitcher *switcher = GDL_SWITCHER (widget); - - if (switcher->priv->show) { - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - GtkWidget *button = ((Button *) p->data)->button_widget; - gtk_widget_map (button); - } - } - GTK_WIDGET_CLASS (gdl_switcher_parent_class)->map (widget); -} - -/* GObject methods. */ - -static void -gdl_switcher_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlSwitcher *switcher = GDL_SWITCHER (object); - - switch (prop_id) { - case PROP_SWITCHER_STYLE: - gdl_switcher_set_style (switcher, g_value_get_enum (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_switcher_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlSwitcher *switcher = GDL_SWITCHER (object); - - switch (prop_id) { - case PROP_SWITCHER_STYLE: - g_value_set_enum (value, gdl_switcher_get_style (switcher)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_switcher_dispose (GObject *object) -{ - GdlSwitcherPrivate *priv = GDL_SWITCHER (object)->priv; - -#if HAVE_GNOME - GConfClient *gconf_client = gconf_client_get_default (); - - if (priv->style_changed_id) { - gconf_client_notify_remove (gconf_client, priv->style_changed_id); - priv->style_changed_id = 0; - } - g_object_unref (gconf_client); -#endif - - g_slist_foreach (priv->buttons, (GFunc) button_free, NULL); - g_slist_free (priv->buttons); - priv->buttons = NULL; - - G_OBJECT_CLASS (gdl_switcher_parent_class)->dispose (object); -} - -static void -gdl_switcher_finalize (GObject *object) -{ - GdlSwitcherPrivate *priv = GDL_SWITCHER (object)->priv; - - g_free (priv); - - G_OBJECT_CLASS (gdl_switcher_parent_class)->finalize (object); -} - -/* Signal handlers */ - -static void -gdl_switcher_notify_cb (GObject *g_object, GParamSpec *pspec, - GdlSwitcher *switcher) -{ -} - -static void -gdl_switcher_switch_page_cb (GtkNotebook *nb, GtkWidget *page_widget, - gint page_num, GdlSwitcher *switcher) -{ - gint switcher_id; - - /* Change switcher button */ - switcher_id = gdl_switcher_get_page_id (page_widget); - gdl_switcher_select_button (GDL_SWITCHER (switcher), switcher_id); -} - -static void -gdl_switcher_page_added_cb (GtkNotebook *nb, GtkWidget *page, - gint page_num, GdlSwitcher *switcher) -{ - gint switcher_id; - - (void)nb; - (void)page_num; - switcher_id = gdl_switcher_get_page_id (page); - - gdl_switcher_add_button (GDL_SWITCHER (switcher), NULL, NULL, NULL, NULL, - switcher_id, page); - gdl_switcher_select_button (GDL_SWITCHER (switcher), switcher_id); -} - -static void -gdl_switcher_select_page (GdlSwitcher *switcher, gint id) -{ - GList *children, *node; - children = gtk_container_get_children (GTK_CONTAINER (switcher)); - node = children; - while (node) - { - gint switcher_id; - switcher_id = gdl_switcher_get_page_id (GTK_WIDGET (node->data)); - if (switcher_id == id) - { - gint page_num; - page_num = gtk_notebook_page_num (GTK_NOTEBOOK (switcher), - GTK_WIDGET (node->data)); - g_signal_handlers_block_by_func (switcher, - gdl_switcher_switch_page_cb, - switcher); - gtk_notebook_set_current_page (GTK_NOTEBOOK (switcher), page_num); - g_signal_handlers_unblock_by_func (switcher, - gdl_switcher_switch_page_cb, - switcher); - break; - } - node = g_list_next (node); - } - g_list_free (children); -} - -/* Initialization. */ - -static void -gdl_switcher_class_init (GdlSwitcherClass *klass) -{ - GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - container_class->forall = gdl_switcher_forall; - container_class->remove = gdl_switcher_remove; - - widget_class->size_request = gdl_switcher_size_request; - widget_class->size_allocate = gdl_switcher_size_allocate; - widget_class->expose_event = gdl_switcher_expose; - widget_class->map = gdl_switcher_map; - - object_class->dispose = gdl_switcher_dispose; - object_class->finalize = gdl_switcher_finalize; - object_class->set_property = gdl_switcher_set_property; - object_class->get_property = gdl_switcher_get_property; - - g_object_class_install_property ( - object_class, PROP_SWITCHER_STYLE, - g_param_spec_enum ("switcher-style", _("Switcher Style"), - _("Switcher buttons style"), - GDL_TYPE_SWITCHER_STYLE, - GDL_SWITCHER_STYLE_BOTH, - G_PARAM_READWRITE)); - - gtk_rc_parse_string ("style \"gdl-button-style\"\n" - "{\n" - "GtkWidget::focus-padding = 1\n" - "GtkWidget::focus-line-width = 1\n" - "xthickness = 0\n" - "ythickness = 0\n" - "}\n" - "widget \"*.gdl-button\" style \"gdl-button-style\""); -} - -static void -gdl_switcher_init (GdlSwitcher *switcher) -{ - GdlSwitcherPrivate *priv; - - gtk_widget_set_has_window (GTK_WIDGET (switcher), FALSE); - - priv = g_new0 (GdlSwitcherPrivate, 1); - switcher->priv = priv; - - priv->show = TRUE; - priv->buttons_height_request = -1; - - gtk_notebook_set_tab_pos (GTK_NOTEBOOK (switcher), GTK_POS_BOTTOM); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (switcher), FALSE); - gtk_notebook_set_show_border (GTK_NOTEBOOK (switcher), FALSE); - gdl_switcher_set_style (switcher, GDL_SWITCHER_STYLE_BOTH); - - /* notebook signals */ - g_signal_connect (switcher, "switch-page", - G_CALLBACK (gdl_switcher_switch_page_cb), switcher); - g_signal_connect (switcher, "page-added", - G_CALLBACK (gdl_switcher_page_added_cb), switcher); - g_signal_connect (switcher, "notify::show-tabs", - G_CALLBACK (gdl_switcher_notify_cb), switcher); -} - -GtkWidget * -gdl_switcher_new (void) -{ - GdlSwitcher *switcher = g_object_new (gdl_switcher_get_type (), NULL); - return GTK_WIDGET (switcher); -} - -static void -gdl_switcher_add_button (GdlSwitcher *switcher, const gchar *label, - const gchar *tooltips, const gchar *stock_id, - GdkPixbuf *pixbuf_icon, - gint switcher_id, GtkWidget* page) -{ - GtkWidget *button_widget; - GtkWidget *hbox; - GtkWidget *icon_widget; - GtkWidget *label_widget; - GtkWidget *arrow; - - button_widget = gtk_toggle_button_new (); - gtk_widget_set_name (button_widget, "gdl-button"); - gtk_button_set_relief (GTK_BUTTON(button_widget), GTK_RELIEF_HALF); - if (switcher->priv->show) - gtk_widget_show (button_widget); - g_signal_connect (button_widget, "toggled", - G_CALLBACK (button_toggled_callback), - switcher); - hbox = gtk_hbox_new (FALSE, 3); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 0); - gtk_container_add (GTK_CONTAINER (button_widget), hbox); - gtk_widget_show (hbox); - - if (stock_id) { - icon_widget = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU); - } else if (pixbuf_icon) { - icon_widget = gtk_image_new_from_pixbuf (pixbuf_icon); - } else { - icon_widget = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU); - } - - gtk_widget_show (icon_widget); - - if (!label) { - gchar *text = g_strdup_printf ("Item %d", switcher_id); - label_widget = gtk_label_new (text); - g_free (text); - } else { - label_widget = gtk_label_new (label); - } - gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5); - gtk_widget_show (label_widget); - - - gtk_widget_set_tooltip_text (button_widget, - tooltips); - - switch (INTERNAL_MODE (switcher)) { - case GDL_SWITCHER_STYLE_TEXT: - gtk_box_pack_start (GTK_BOX (hbox), label_widget, TRUE, TRUE, 0); - break; - case GDL_SWITCHER_STYLE_ICON: - gtk_box_pack_start (GTK_BOX (hbox), icon_widget, TRUE, TRUE, 0); - break; - case GDL_SWITCHER_STYLE_BOTH: - default: - gtk_box_pack_start (GTK_BOX (hbox), icon_widget, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (hbox), label_widget, TRUE, TRUE, 0); - break; - } - arrow = gtk_arrow_new (GTK_ARROW_UP, GTK_SHADOW_NONE); - gtk_widget_show (arrow); - gtk_box_pack_start (GTK_BOX (hbox), arrow, FALSE, FALSE, 0); - - switcher->priv->buttons = - g_slist_append (switcher->priv->buttons, - button_new (button_widget, label_widget, - icon_widget, - arrow, hbox, switcher_id, page)); - - gtk_widget_set_parent (button_widget, GTK_WIDGET (switcher)); - gtk_widget_queue_resize (GTK_WIDGET (switcher)); -} - -#if 0 -static void -gdl_switcher_remove_button (GdlSwitcher *switcher, gint switcher_id) -{ - GSList *p; - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - if (button->id == switcher_id) - { - gtk_container_remove (GTK_CONTAINER (switcher), - button->button_widget); - break; - } - } - gtk_widget_queue_resize (GTK_WIDGET (switcher)); -} -#endif - -static void -gdl_switcher_select_button (GdlSwitcher *switcher, gint switcher_id) -{ - update_buttons (switcher, switcher_id); - - /* Select the notebook page associated with this button */ - gdl_switcher_select_page (switcher, switcher_id); -} - - -gint -gdl_switcher_insert_page (GdlSwitcher *switcher, GtkWidget *page, - GtkWidget *tab_widget, const gchar *label, - const gchar *tooltips, const gchar *stock_id, - GdkPixbuf *pixbuf_icon, gint position) -{ - gint ret_position; - gint switcher_id; - g_signal_handlers_block_by_func (switcher, - gdl_switcher_page_added_cb, - switcher); - - if (!tab_widget) { - tab_widget = gtk_label_new (label); - gtk_widget_show (tab_widget); - } - switcher_id = gdl_switcher_get_page_id (page); - gdl_switcher_add_button (switcher, label, tooltips, stock_id, pixbuf_icon, switcher_id, page); - - ret_position = gtk_notebook_insert_page (GTK_NOTEBOOK (switcher), page, - tab_widget, position); - g_signal_handlers_unblock_by_func (switcher, - gdl_switcher_page_added_cb, - switcher); - - return ret_position; -} - -static void -set_switcher_style_toolbar (GdlSwitcher *switcher, - GdlSwitcherStyle switcher_style) -{ - GSList *p; - - if (switcher_style == GDL_SWITCHER_STYLE_NONE - || switcher_style == GDL_SWITCHER_STYLE_TABS) - return; - - if (switcher_style == GDL_SWITCHER_STYLE_TOOLBAR) - switcher_style = GDL_SWITCHER_STYLE_BOTH; - - if (switcher_style == INTERNAL_MODE (switcher)) - return; - - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (switcher), FALSE); - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - gtk_container_remove (GTK_CONTAINER (button->hbox), button->arrow); - - if (gtk_widget_get_parent (button->icon)) - gtk_container_remove (GTK_CONTAINER (button->hbox), button->icon); - if (gtk_widget_get_parent (button->label)) - gtk_container_remove (GTK_CONTAINER (button->hbox), button->label); - - switch (switcher_style) { - case GDL_SWITCHER_STYLE_TEXT: - gtk_box_pack_start (GTK_BOX (button->hbox), button->label, - TRUE, TRUE, 0); - gtk_widget_show (button->label); - break; - - case GDL_SWITCHER_STYLE_ICON: - gtk_box_pack_start (GTK_BOX (button->hbox), button->icon, - TRUE, TRUE, 0); - gtk_widget_show (button->icon); - break; - - case GDL_SWITCHER_STYLE_BOTH: - gtk_box_pack_start (GTK_BOX (button->hbox), button->icon, - FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (button->hbox), button->label, - TRUE, TRUE, 0); - gtk_widget_show (button->icon); - gtk_widget_show (button->label); - break; - - default: - break; - } - - gtk_box_pack_start (GTK_BOX (button->hbox), button->arrow, - FALSE, FALSE, 0); - } - - gdl_switcher_set_show_buttons (switcher, TRUE); -} - -static void -gdl_switcher_set_style (GdlSwitcher *switcher, GdlSwitcherStyle switcher_style) -{ - if (switcher->priv->switcher_style == switcher_style) - return; - - if (switcher_style == GDL_SWITCHER_STYLE_NONE) { - gdl_switcher_set_show_buttons (switcher, FALSE); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (switcher), FALSE); - } - else if (switcher_style == GDL_SWITCHER_STYLE_TABS) { - gdl_switcher_set_show_buttons (switcher, FALSE); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (switcher), TRUE); - } - else - set_switcher_style_toolbar (switcher, switcher_style); - - gtk_widget_queue_resize (GTK_WIDGET (switcher)); - switcher->priv->switcher_style = switcher_style; -} - -static void -gdl_switcher_set_show_buttons (GdlSwitcher *switcher, gboolean show) -{ - GSList *p; - - if (switcher->priv->show == show) - return; - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - if (show) - gtk_widget_show (button->button_widget); - else - gtk_widget_hide (button->button_widget); - } - - switcher->priv->show = show; - - gtk_widget_queue_resize (GTK_WIDGET (switcher)); -} - -static GdlSwitcherStyle -gdl_switcher_get_style (GdlSwitcher *switcher) -{ - if (!switcher->priv->show) - return GDL_SWITCHER_STYLE_TABS; - return switcher->priv->switcher_style; -} diff --git a/src/libgdl/gdl-switcher.h b/src/libgdl/gdl-switcher.h deleted file mode 100644 index 0caf3a0aa..000000000 --- a/src/libgdl/gdl-switcher.h +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 8 -*- */ -/* gdl-switcher.h - * - * Copyright (C) 2003 Ettore Perazzoli - * 2007 Naba Kumar - * -* This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * - * Authors: Ettore Perazzoli - * Naba Kumar - */ - -#ifndef _GDL_SWITCHER_H_ -#define _GDL_SWITCHER_H_ - -#include - -G_BEGIN_DECLS - -#define GDL_TYPE_SWITCHER (gdl_switcher_get_type ()) -#define GDL_SWITCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_SWITCHER, GdlSwitcher)) -#define GDL_SWITCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_SWITCHER, GdlSwitcherClass)) -#define GDL_IS_SWITCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_SWITCHER)) -#define GDL_IS_SWITCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), GDL_TYPE_SWITCHER)) - -typedef struct _GdlSwitcher GdlSwitcher; -typedef struct _GdlSwitcherPrivate GdlSwitcherPrivate; -typedef struct _GdlSwitcherClass GdlSwitcherClass; - -struct _GdlSwitcher { - GtkNotebook parent; - - GdlSwitcherPrivate *priv; -}; - -struct _GdlSwitcherClass { - GtkNotebookClass parent_class; -}; - -GType gdl_switcher_get_type (void); -GtkWidget *gdl_switcher_new (void); - -gint gdl_switcher_insert_page (GdlSwitcher *switcher, - GtkWidget *page, - GtkWidget *tab_widget, - const gchar *label, - const gchar *tooltips, - const gchar *stock_id, - GdkPixbuf *pixbuf_icon, - gint position); -G_END_DECLS - -#endif /* _GDL_SWITCHER_H_ */ diff --git a/src/libgdl/gdl-win32.c b/src/libgdl/gdl-win32.c deleted file mode 100644 index f23036ed6..000000000 --- a/src/libgdl/gdl-win32.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Windows stuff - * - * Author: - * Albin Sunnanbo - * Based on code by Lauris Kaplinski (/src/extension/internal/win32.cpp) - * - * This code is in public domain - */ -#ifdef WIN32 - -#include "gdl-win32.h" -#include - -/* Platform detection */ -gboolean -is_os_vista() -{ - static gboolean initialized = FALSE; - static gboolean is_vista = FALSE; - static OSVERSIONINFOA osver; - - if ( !initialized ) - { - BOOL result; - - initialized = TRUE; - - memset (&osver, 0, sizeof(OSVERSIONINFOA)); - osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); - result = GetVersionExA (&osver); - if (result) - { - if (osver.dwMajorVersion == WIN32_MAJORVERSION_VISTA) - is_vista = TRUE; - } - } - - return is_vista; -} - -#endif diff --git a/src/libgdl/gdl-win32.h b/src/libgdl/gdl-win32.h deleted file mode 100644 index 90c0cbafa..000000000 --- a/src/libgdl/gdl-win32.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Windows stuff - * - * Author: - * Albin Sunnanbo - * - * This code is in public domain - */ -#ifndef __INKSCAPE_GDL_WIN32_H__ -#define __INKSCAPE_GDL_WIN32_H__ -#ifdef WIN32 - -#include - -#define WIN32_MAJORVERSION_VISTA 0x0006 - -/* Platform detection */ -gboolean is_os_vista(); - -#endif // ifdef WIN32 -#endif /* __INKSCAPE_GDL_WIN32_H__ */ diff --git a/src/libgdl/gdl.h b/src/libgdl/gdl.h deleted file mode 100644 index 235c5e3eb..000000000 --- a/src/libgdl/gdl.h +++ /dev/null @@ -1,32 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 1999-2000 Dave Camp - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_H__ -#define __GDL_H__ - -#include "libgdl/gdl-dock-object.h" -#include "libgdl/gdl-dock-master.h" -#include "libgdl/gdl-dock.h" -#include "libgdl/gdl-dock-item.h" -#include "libgdl/gdl-dock-item-grip.h" -#include "libgdl/gdl-dock-bar.h" - -#endif diff --git a/src/libgdl/libgdlmarshal.c b/src/libgdl/libgdlmarshal.c deleted file mode 100644 index a2a9fe220..000000000 --- a/src/libgdl/libgdlmarshal.c +++ /dev/null @@ -1,173 +0,0 @@ -#include "libgdlmarshal.h" - -#include - - -#ifdef G_ENABLE_DEBUG -#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) -#define g_marshal_value_peek_char(v) g_value_get_char (v) -#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) -#define g_marshal_value_peek_int(v) g_value_get_int (v) -#define g_marshal_value_peek_uint(v) g_value_get_uint (v) -#define g_marshal_value_peek_long(v) g_value_get_long (v) -#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) -#define g_marshal_value_peek_int64(v) g_value_get_int64 (v) -#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) -#define g_marshal_value_peek_enum(v) g_value_get_enum (v) -#define g_marshal_value_peek_flags(v) g_value_get_flags (v) -#define g_marshal_value_peek_float(v) g_value_get_float (v) -#define g_marshal_value_peek_double(v) g_value_get_double (v) -#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) -#define g_marshal_value_peek_param(v) g_value_get_param (v) -#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) -#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) -#define g_marshal_value_peek_object(v) g_value_get_object (v) -#define g_marshal_value_peek_variant(v) g_value_get_variant (v) -#else /* !G_ENABLE_DEBUG */ -/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. - * Do not access GValues directly in your code. Instead, use the - * g_value_get_*() functions - */ -#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int -#define g_marshal_value_peek_char(v) (v)->data[0].v_int -#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint -#define g_marshal_value_peek_int(v) (v)->data[0].v_int -#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint -#define g_marshal_value_peek_long(v) (v)->data[0].v_long -#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong -#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 -#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 -#define g_marshal_value_peek_enum(v) (v)->data[0].v_long -#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong -#define g_marshal_value_peek_float(v) (v)->data[0].v_float -#define g_marshal_value_peek_double(v) (v)->data[0].v_double -#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer -#endif /* !G_ENABLE_DEBUG */ - - -/* VOID:VOID (./libgdlmarshal.list:1) */ - -/* VOID:ENUM (./libgdlmarshal.list:2) */ - -/* VOID:INT,INT (./libgdlmarshal.list:3) */ -void -gdl_marshal_VOID__INT_INT (GClosure *closure, - GValue *return_value G_GNUC_UNUSED, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint G_GNUC_UNUSED, - gpointer marshal_data) -{ - typedef void (*GMarshalFunc_VOID__INT_INT) (gpointer data1, - gint arg_1, - gint arg_2, - gpointer data2); - register GMarshalFunc_VOID__INT_INT callback; - register GCClosure *cc = (GCClosure*) closure; - register gpointer data1, data2; - - g_return_if_fail (n_param_values == 3); - - if (G_CCLOSURE_SWAP_DATA (closure)) - { - data1 = closure->data; - data2 = g_value_peek_pointer (param_values + 0); - } - else - { - data1 = g_value_peek_pointer (param_values + 0); - data2 = closure->data; - } - callback = (GMarshalFunc_VOID__INT_INT) (marshal_data ? marshal_data : cc->callback); - - callback (data1, - g_marshal_value_peek_int (param_values + 1), - g_marshal_value_peek_int (param_values + 2), - data2); -} - -/* VOID:UINT,UINT (./libgdlmarshal.list:4) */ -void -gdl_marshal_VOID__UINT_UINT (GClosure *closure, - GValue *return_value G_GNUC_UNUSED, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint G_GNUC_UNUSED, - gpointer marshal_data) -{ - typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1, - guint arg_1, - guint arg_2, - gpointer data2); - register GMarshalFunc_VOID__UINT_UINT callback; - register GCClosure *cc = (GCClosure*) closure; - register gpointer data1, data2; - - g_return_if_fail (n_param_values == 3); - - if (G_CCLOSURE_SWAP_DATA (closure)) - { - data1 = closure->data; - data2 = g_value_peek_pointer (param_values + 0); - } - else - { - data1 = g_value_peek_pointer (param_values + 0); - data2 = closure->data; - } - callback = (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data : cc->callback); - - callback (data1, - g_marshal_value_peek_uint (param_values + 1), - g_marshal_value_peek_uint (param_values + 2), - data2); -} - -/* VOID:BOOLEAN (./libgdlmarshal.list:5) */ - -/* VOID:OBJECT,ENUM,BOXED (./libgdlmarshal.list:6) */ -void -gdl_marshal_VOID__OBJECT_ENUM_BOXED (GClosure *closure, - GValue *return_value G_GNUC_UNUSED, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint G_GNUC_UNUSED, - gpointer marshal_data) -{ - typedef void (*GMarshalFunc_VOID__OBJECT_ENUM_BOXED) (gpointer data1, - gpointer arg_1, - gint arg_2, - gpointer arg_3, - gpointer data2); - register GMarshalFunc_VOID__OBJECT_ENUM_BOXED callback; - register GCClosure *cc = (GCClosure*) closure; - register gpointer data1, data2; - - g_return_if_fail (n_param_values == 4); - - if (G_CCLOSURE_SWAP_DATA (closure)) - { - data1 = closure->data; - data2 = g_value_peek_pointer (param_values + 0); - } - else - { - data1 = g_value_peek_pointer (param_values + 0); - data2 = closure->data; - } - callback = (GMarshalFunc_VOID__OBJECT_ENUM_BOXED) (marshal_data ? marshal_data : cc->callback); - - callback (data1, - g_marshal_value_peek_object (param_values + 1), - g_marshal_value_peek_enum (param_values + 2), - g_marshal_value_peek_boxed (param_values + 3), - data2); -} - -/* VOID:BOXED (./libgdlmarshal.list:7) */ - diff --git a/src/libgdl/libgdlmarshal.h b/src/libgdl/libgdlmarshal.h deleted file mode 100644 index 2d6bc800f..000000000 --- a/src/libgdl/libgdlmarshal.h +++ /dev/null @@ -1,48 +0,0 @@ - -#ifndef __gdl_marshal_MARSHAL_H__ -#define __gdl_marshal_MARSHAL_H__ - -#include - -G_BEGIN_DECLS - -/* VOID:VOID (./libgdlmarshal.list:1) */ -#define gdl_marshal_VOID__VOID g_cclosure_marshal_VOID__VOID - -/* VOID:ENUM (./libgdlmarshal.list:2) */ -#define gdl_marshal_VOID__ENUM g_cclosure_marshal_VOID__ENUM - -/* VOID:INT,INT (./libgdlmarshal.list:3) */ -extern void gdl_marshal_VOID__INT_INT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -/* VOID:UINT,UINT (./libgdlmarshal.list:4) */ -extern void gdl_marshal_VOID__UINT_UINT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -/* VOID:BOOLEAN (./libgdlmarshal.list:5) */ -#define gdl_marshal_VOID__BOOLEAN g_cclosure_marshal_VOID__BOOLEAN - -/* VOID:OBJECT,ENUM,BOXED (./libgdlmarshal.list:6) */ -extern void gdl_marshal_VOID__OBJECT_ENUM_BOXED (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -/* VOID:BOXED (./libgdlmarshal.list:7) */ -#define gdl_marshal_VOID__BOXED g_cclosure_marshal_VOID__BOXED - -G_END_DECLS - -#endif /* __gdl_marshal_MARSHAL_H__ */ - diff --git a/src/libgdl/libgdlmarshal.list b/src/libgdl/libgdlmarshal.list deleted file mode 100644 index 750989abc..000000000 --- a/src/libgdl/libgdlmarshal.list +++ /dev/null @@ -1,7 +0,0 @@ -VOID:VOID -VOID:ENUM -VOID:INT,INT -VOID:UINT,UINT -VOID:BOOLEAN -VOID:OBJECT,ENUM,BOXED -VOID:BOXED diff --git a/src/libgdl/libgdltypebuiltins.c b/src/libgdl/libgdltypebuiltins.c deleted file mode 100644 index b347fe6f5..000000000 --- a/src/libgdl/libgdltypebuiltins.c +++ /dev/null @@ -1,162 +0,0 @@ - - - -#include -#include "libgdltypebuiltins.h" - - -/* enumerations from "gdl-dock-object.h" */ -static const GFlagsValue _gdl_dock_param_flags_values[] = { - { GDL_DOCK_PARAM_EXPORT, "GDL_DOCK_PARAM_EXPORT", "export" }, - { GDL_DOCK_PARAM_AFTER, "GDL_DOCK_PARAM_AFTER", "after" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_param_flags_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_flags_register_static ("GdlDockParamFlags", _gdl_dock_param_flags_values); - - return type; -} - -static const GFlagsValue _gdl_dock_object_flags_values[] = { - { GDL_DOCK_AUTOMATIC, "GDL_DOCK_AUTOMATIC", "automatic" }, - { GDL_DOCK_ATTACHED, "GDL_DOCK_ATTACHED", "attached" }, - { GDL_DOCK_IN_REFLOW, "GDL_DOCK_IN_REFLOW", "in-reflow" }, - { GDL_DOCK_IN_DETACH, "GDL_DOCK_IN_DETACH", "in-detach" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_object_flags_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_flags_register_static ("GdlDockObjectFlags", _gdl_dock_object_flags_values); - - return type; -} - -static const GEnumValue _gdl_dock_placement_values[] = { - { GDL_DOCK_NONE, "GDL_DOCK_NONE", "none" }, - { GDL_DOCK_TOP, "GDL_DOCK_TOP", "top" }, - { GDL_DOCK_BOTTOM, "GDL_DOCK_BOTTOM", "bottom" }, - { GDL_DOCK_RIGHT, "GDL_DOCK_RIGHT", "right" }, - { GDL_DOCK_LEFT, "GDL_DOCK_LEFT", "left" }, - { GDL_DOCK_CENTER, "GDL_DOCK_CENTER", "center" }, - { GDL_DOCK_FLOATING, "GDL_DOCK_FLOATING", "floating" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_placement_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_enum_register_static ("GdlDockPlacement", _gdl_dock_placement_values); - - return type; -} - - -/* enumerations from "gdl-dock-master.h" */ -static const GEnumValue _gdl_switcher_style_values[] = { - { GDL_SWITCHER_STYLE_TEXT, "GDL_SWITCHER_STYLE_TEXT", "text" }, - { GDL_SWITCHER_STYLE_ICON, "GDL_SWITCHER_STYLE_ICON", "icon" }, - { GDL_SWITCHER_STYLE_BOTH, "GDL_SWITCHER_STYLE_BOTH", "both" }, - { GDL_SWITCHER_STYLE_TOOLBAR, "GDL_SWITCHER_STYLE_TOOLBAR", "toolbar" }, - { GDL_SWITCHER_STYLE_TABS, "GDL_SWITCHER_STYLE_TABS", "tabs" }, - { GDL_SWITCHER_STYLE_NONE, "GDL_SWITCHER_STYLE_NONE", "none" }, - { 0, NULL, NULL } -}; - -GType -gdl_switcher_style_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_enum_register_static ("GdlSwitcherStyle", _gdl_switcher_style_values); - - return type; -} - - -/* enumerations from "gdl-dock-item.h" */ -static const GFlagsValue _gdl_dock_item_behavior_values[] = { - { GDL_DOCK_ITEM_BEH_NORMAL, "GDL_DOCK_ITEM_BEH_NORMAL", "normal" }, - { GDL_DOCK_ITEM_BEH_NEVER_FLOATING, "GDL_DOCK_ITEM_BEH_NEVER_FLOATING", "never-floating" }, - { GDL_DOCK_ITEM_BEH_NEVER_VERTICAL, "GDL_DOCK_ITEM_BEH_NEVER_VERTICAL", "never-vertical" }, - { GDL_DOCK_ITEM_BEH_NEVER_HORIZONTAL, "GDL_DOCK_ITEM_BEH_NEVER_HORIZONTAL", "never-horizontal" }, - { GDL_DOCK_ITEM_BEH_LOCKED, "GDL_DOCK_ITEM_BEH_LOCKED", "locked" }, - { GDL_DOCK_ITEM_BEH_CANT_DOCK_TOP, "GDL_DOCK_ITEM_BEH_CANT_DOCK_TOP", "cant-dock-top" }, - { GDL_DOCK_ITEM_BEH_CANT_DOCK_BOTTOM, "GDL_DOCK_ITEM_BEH_CANT_DOCK_BOTTOM", "cant-dock-bottom" }, - { GDL_DOCK_ITEM_BEH_CANT_DOCK_LEFT, "GDL_DOCK_ITEM_BEH_CANT_DOCK_LEFT", "cant-dock-left" }, - { GDL_DOCK_ITEM_BEH_CANT_DOCK_RIGHT, "GDL_DOCK_ITEM_BEH_CANT_DOCK_RIGHT", "cant-dock-right" }, - { GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER, "GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER", "cant-dock-center" }, - { GDL_DOCK_ITEM_BEH_CANT_CLOSE, "GDL_DOCK_ITEM_BEH_CANT_CLOSE", "cant-close" }, - { GDL_DOCK_ITEM_BEH_CANT_ICONIFY, "GDL_DOCK_ITEM_BEH_CANT_ICONIFY", "cant-iconify" }, - { GDL_DOCK_ITEM_BEH_NO_GRIP, "GDL_DOCK_ITEM_BEH_NO_GRIP", "no-grip" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_item_behavior_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_flags_register_static ("GdlDockItemBehavior", _gdl_dock_item_behavior_values); - - return type; -} - -static const GFlagsValue _gdl_dock_item_flags_values[] = { - { GDL_DOCK_IN_DRAG, "GDL_DOCK_IN_DRAG", "in-drag" }, - { GDL_DOCK_IN_PREDRAG, "GDL_DOCK_IN_PREDRAG", "in-predrag" }, - { GDL_DOCK_ICONIFIED, "GDL_DOCK_ICONIFIED", "iconified" }, - { GDL_DOCK_USER_ACTION, "GDL_DOCK_USER_ACTION", "user-action" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_item_flags_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_flags_register_static ("GdlDockItemFlags", _gdl_dock_item_flags_values); - - return type; -} - - -/* enumerations from "gdl-dock-bar.h" */ -static const GEnumValue _gdl_dock_bar_style_values[] = { - { GDL_DOCK_BAR_ICONS, "GDL_DOCK_BAR_ICONS", "icons" }, - { GDL_DOCK_BAR_TEXT, "GDL_DOCK_BAR_TEXT", "text" }, - { GDL_DOCK_BAR_BOTH, "GDL_DOCK_BAR_BOTH", "both" }, - { GDL_DOCK_BAR_AUTO, "GDL_DOCK_BAR_AUTO", "auto" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_bar_style_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_enum_register_static ("GdlDockBarStyle", _gdl_dock_bar_style_values); - - return type; -} - - - - diff --git a/src/libgdl/libgdltypebuiltins.h b/src/libgdl/libgdltypebuiltins.h deleted file mode 100644 index 19eac4989..000000000 --- a/src/libgdl/libgdltypebuiltins.h +++ /dev/null @@ -1,38 +0,0 @@ - - - -#ifndef __LIBGDLTYPEBUILTINS_H__ -#define __LIBGDLTYPEBUILTINS_H__ 1 - -#include "libgdl/gdl.h" - -G_BEGIN_DECLS - - -/* --- gdl-dock-object.h --- */ -#define GDL_TYPE_DOCK_PARAM_FLAGS gdl_dock_param_flags_get_type() -GType gdl_dock_param_flags_get_type (void); -#define GDL_TYPE_DOCK_OBJECT_FLAGS gdl_dock_object_flags_get_type() -GType gdl_dock_object_flags_get_type (void); -#define GDL_TYPE_DOCK_PLACEMENT gdl_dock_placement_get_type() -GType gdl_dock_placement_get_type (void); - -/* --- gdl-dock-master.h --- */ -#define GDL_TYPE_SWITCHER_STYLE gdl_switcher_style_get_type() -GType gdl_switcher_style_get_type (void); - -/* --- gdl-dock-item.h --- */ -#define GDL_TYPE_DOCK_ITEM_BEHAVIOR gdl_dock_item_behavior_get_type() -GType gdl_dock_item_behavior_get_type (void); -#define GDL_TYPE_DOCK_ITEM_FLAGS gdl_dock_item_flags_get_type() -GType gdl_dock_item_flags_get_type (void); - -/* --- gdl-dock-bar.h --- */ -#define GDL_TYPE_DOCK_BAR_STYLE gdl_dock_bar_style_get_type() -GType gdl_dock_bar_style_get_type (void); -G_END_DECLS - -#endif /* __LIBGDLTYPEBUILTINS_H__ */ - - - diff --git a/src/libgdl/makefile.in b/src/libgdl/makefile.in deleted file mode 100644 index 9dc8cb2ca..000000000 --- a/src/libgdl/makefile.in +++ /dev/null @@ -1,17 +0,0 @@ -# Convenience stub makefile to call the real Makefile. - -@SET_MAKE@ - -OBJEXT = @OBJEXT@ - -# Explicit so that it's the default rule. -all: - cd .. && $(MAKE) libgdl/all - -clean %.a %.$(OBJEXT): - cd .. && $(MAKE) libgdl/$@ - -.PHONY: all clean - -.SUFFIXES: -.SUFFIXES: .a .$(OBJEXT) diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 225afe317..ba71b39f4 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -33,6 +33,7 @@ set(widgets_SRC gradient-toolbar.cpp gradient-vector.cpp icon.cpp + image-menu-item.c ink-action.cpp ink-comboboxentry-action.cpp paint-selector.cpp @@ -88,6 +89,7 @@ set(widgets_SRC gradient-toolbar.h gradient-vector.h icon.h + image-menu-item.h ink-action.h ink-comboboxentry-action.h paint-selector.h @@ -108,11 +110,6 @@ set(widgets_SRC widget-sizes.h ) -if(${WITH_GTK3_EXPERIMENTAL}) - set(image_menu_item_SRC image-menu-item.h image-menu-item.c) - add_inkscape_source("${image_menu_item_SRC}") -endif() - # add_inkscape_lib(widgets_LIB "${widgets_SRC}") add_inkscape_source("${widgets_SRC}") diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert index c9f04de14..8f10e1d56 100644 --- a/src/widgets/Makefile_insert +++ b/src/widgets/Makefile_insert @@ -1,11 +1,5 @@ ## Makefile.am fragment sourced by src/Makefile.am. -if WITH_GTKMM_3_0 -ink_common_sources += \ - widgets/image-menu-item.c \ - widgets/image-menu-item.h -endif - ink_common_sources += \ widgets/arc-toolbar.cpp \ widgets/arc-toolbar.h \ @@ -50,6 +44,8 @@ ink_common_sources += \ widgets/gradient-vector.h \ widgets/icon.cpp \ widgets/icon.h \ + widgets/image-menu-item.c \ + widgets/image-menu-item.h \ widgets/ink-action.cpp \ widgets/ink-action.h \ widgets/ink-comboboxentry-action.cpp \ -- cgit v1.2.3 From caaf88e07254f7bb824cd60bd13bf6ed4bef0bfa Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 27 Jul 2016 17:33:52 +0100 Subject: device-manager: Drop GTK2 fallbacks (bzr r15023.2.2) --- src/device-manager.cpp | 48 +++++++++--------------------------------------- 1 file changed, 9 insertions(+), 39 deletions(-) (limited to 'src') diff --git a/src/device-manager.cpp b/src/device-manager.cpp index aa3874da8..96d6d6d1b 100644 --- a/src/device-manager.cpp +++ b/src/device-manager.cpp @@ -14,15 +14,12 @@ #include "preferences.h" #include #include +#include -#if WITH_GTKMM_3_0 -# include -#endif +#include #include -#include - #define noDEBUG_VERBOSE 1 @@ -49,11 +46,7 @@ static bool isValidDevice(Glib::RefPtr device) const bool source_matches = (device->get_source() == (*it).source); const bool mode_matches = (device->get_mode() == (*it).mode); const bool num_axes_matches = (device->get_n_axes() == (*it).num_axes); -#if WITH_GTKMM_3_0 const bool num_keys_matches = (device->get_n_keys() == (*it).num_keys); -#else - const bool num_keys_matches = (gdk_device_get_n_keys(device->gobj()) == (*it).num_keys); -#endif if (name_matches && source_matches && mode_matches && num_axes_matches && num_keys_matches) @@ -177,13 +170,7 @@ public: virtual Gdk::InputMode getMode() const {return (device->get_mode());} virtual gint getNumAxes() const {return device->get_n_axes();} virtual bool hasCursor() const {return device->get_has_cursor();} - -#if WITH_GTKMM_3_0 virtual int getNumKeys() const {return device->get_n_keys();} -#else - virtual int getNumKeys() const {return gdk_device_get_n_keys(device->gobj());} -#endif - virtual Glib::ustring getLink() const {return link;} virtual void setLink( Glib::ustring const& link ) {this->link = link;} virtual gint getLiveAxes() const {return liveAxes;} @@ -328,12 +315,8 @@ DeviceManagerImpl::DeviceManagerImpl() : { Glib::RefPtr display = Gdk::Display::get_default(); -#if WITH_GTKMM_3_0 - Glib::RefPtr dm = display->get_device_manager(); - std::vector< Glib::RefPtr > devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); -#else - std::vector< Glib::RefPtr > devList = display->list_devices(); -#endif + auto dm = display->get_device_manager(); + auto devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); if (fakeList.empty()) { createFakeList(); @@ -342,24 +325,19 @@ DeviceManagerImpl::DeviceManagerImpl() : std::set knownIDs; - for ( std::vector< Glib::RefPtr >::iterator dev = devList.begin(); dev != devList.end(); ++dev ) { -#if WITH_GTKMM_3_0 + for (auto dev : devList) { // GTK+ 3 has added keyboards to the list of supported devices. - if((*dev)->get_source() != Gdk::SOURCE_KEYBOARD) { -#endif + if(dev->get_source() != Gdk::SOURCE_KEYBOARD) { #if DEBUG_VERBOSE g_message("device: name[%s] source[0x%x] mode[0x%x] cursor[%s] axis count[%d] key count[%d]", dev->name, dev->source, dev->mode, dev->has_cursor?"Yes":"no", dev->num_axes, dev->num_keys); #endif - InputDeviceImpl* device = new InputDeviceImpl(*dev, knownIDs); + InputDeviceImpl* device = new InputDeviceImpl(dev, knownIDs); device->reference(); devices.push_back(Glib::RefPtr(device)); - -#if WITH_GTKMM_3_0 } -#endif } } @@ -669,12 +647,8 @@ static void createFakeList() { // try to find the first *real* core pointer Glib::RefPtr display = Gdk::Display::get_default(); -#if WITH_GTKMM_3_0 - Glib::RefPtr dm = display->get_device_manager(); - std::vector< Glib::RefPtr > devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); -#else - std::vector< Glib::RefPtr > devList = display->list_devices(); -#endif + auto dm = display->get_device_manager(); + auto devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); // Set iterator to point at beginning of device list std::vector< Glib::RefPtr >::iterator dev = devList.begin(); @@ -691,11 +665,7 @@ static void createFakeList() { fakeList[4].mode = device->get_mode(); fakeList[4].has_cursor = device->get_has_cursor(); fakeList[4].num_axes = device->get_n_axes(); -#if WITH_GTKMM_3_0 fakeList[4].num_keys = device->get_n_keys(); -#else - fakeList[4].num_keys = gdk_device_get_n_keys(device->gobj()); -#endif } else { fakeList[4].name = "Core Pointer"; fakeList[4].source = Gdk::SOURCE_MOUSE; -- cgit v1.2.3 From a2d656579397cef6bdfd4d9501af3b542e3b5617 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 27 Jul 2016 17:37:57 +0100 Subject: display.canvas-*grid: Drop GTK2 fallbacks (bzr r15023.2.3) --- src/display/canvas-axonomgrid.cpp | 40 ++------------------------------------- src/display/canvas-grid.cpp | 40 ++------------------------------------- 2 files changed, 4 insertions(+), 76 deletions(-) (limited to 'src') diff --git a/src/display/canvas-axonomgrid.cpp b/src/display/canvas-axonomgrid.cpp index 14f36376f..421a39fbd 100644 --- a/src/display/canvas-axonomgrid.cpp +++ b/src/display/canvas-axonomgrid.cpp @@ -19,12 +19,7 @@ #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include @@ -94,15 +89,10 @@ namespace Inkscape { #define SPACE_SIZE_X 15 #define SPACE_SIZE_Y 10 static inline void -#if WITH_GTKMM_3_0 attach_all(Gtk::Grid &table, Gtk::Widget const *const arr[], unsigned size, int start = 0) -#else -attach_all(Gtk::Table &table, Gtk::Widget const *const arr[], unsigned size, int start = 0) -#endif { for (unsigned i=0, r=start; i(*arr[i])).set_hexpand(); (const_cast(*arr[i])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i]), 1, r, 1, 1); @@ -110,44 +100,23 @@ attach_all(Gtk::Table &table, Gtk::Widget const *const arr[], unsigned size, int (const_cast(*arr[i+1])).set_hexpand(); (const_cast(*arr[i+1])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i+1]), 2, r, 1, 1); -#else - table.attach (const_cast(*arr[i]), 1, 2, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); - table.attach (const_cast(*arr[i+1]), 2, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { if (arr[i+1]) { -#if WITH_GTKMM_3_0 (const_cast(*arr[i+1])).set_hexpand(); (const_cast(*arr[i+1])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i+1]), 1, r, 2, 1); -#else - table.attach (const_cast(*arr[i+1]), 1, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else if (arr[i]) { Gtk::Label& label = reinterpret_cast (const_cast(*arr[i])); label.set_alignment (0.0); -#if WITH_GTKMM_3_0 label.set_hexpand(); label.set_valign(Gtk::ALIGN_CENTER); table.attach(label, 0, r, 3, 1); -#else - table.attach (label, 0, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 space->set_halign(Gtk::ALIGN_CENTER); space->set_valign(Gtk::ALIGN_CENTER); table.attach(*space, 0, r, 1, 1); -#else - table.attach (*space, 0, 1, r, r+1, - (Gtk::AttachOptions)0, (Gtk::AttachOptions)0,0,0); -#endif } } ++r; @@ -342,14 +311,9 @@ CanvasAxonomGrid::onReprAttrChanged(Inkscape::XML::Node */*repr*/, gchar const * Gtk::Widget * CanvasAxonomGrid::newSpecificWidget() { -#if WITH_GTKMM_3_0 - Gtk::Grid *table = Gtk::manage(new Gtk::Grid()); + auto table = Gtk::manage(new Gtk::Grid()); table->set_row_spacing(2); table->set_column_spacing(2); -#else - Gtk::Table * table = Gtk::manage( new Gtk::Table(1,1) ); - table->set_spacings(2); -#endif _wr.setUpdating (true); diff --git a/src/display/canvas-grid.cpp b/src/display/canvas-grid.cpp index decf93626..fa45fe02c 100644 --- a/src/display/canvas-grid.cpp +++ b/src/display/canvas-grid.cpp @@ -19,12 +19,7 @@ #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include @@ -400,15 +395,10 @@ void CanvasGrid::setOrigin(Geom::Point const &origin_px) **/ #define SPACE_SIZE_X 15 #define SPACE_SIZE_Y 10 -#if WITH_GTKMM_3_0 static inline void attach_all(Gtk::Grid &table, Gtk::Widget const *const arr[], unsigned size, int start = 0) -#else -static inline void attach_all(Gtk::Table &table, Gtk::Widget const *const arr[], unsigned size, int start = 0) -#endif { for (unsigned i=0, r=start; i(*arr[i])).set_hexpand(); (const_cast(*arr[i])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i]), 1, r, 1, 1); @@ -416,44 +406,23 @@ static inline void attach_all(Gtk::Table &table, Gtk::Widget const *const arr[], (const_cast(*arr[i+1])).set_hexpand(); (const_cast(*arr[i+1])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i+1]), 2, r, 1, 1); -#else - table.attach (const_cast(*arr[i]), 1, 2, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); - table.attach (const_cast(*arr[i+1]), 2, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { if (arr[i+1]) { -#if WITH_GTKMM_3_0 (const_cast(*arr[i+1])).set_hexpand(); (const_cast(*arr[i+1])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i+1]), 1, r, 2, 1); -#else - table.attach (const_cast(*arr[i+1]), 1, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else if (arr[i]) { Gtk::Label& label = reinterpret_cast (const_cast(*arr[i])); label.set_alignment (0.0); -#if WITH_GTKMM_3_0 label.set_hexpand(); label.set_valign(Gtk::ALIGN_CENTER); table.attach(label, 0, r, 3, 1); -#else - table.attach (label, 0, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 space->set_halign(Gtk::ALIGN_CENTER); space->set_valign(Gtk::ALIGN_CENTER); table.attach(*space, 0, r, 1, 1); -#else - table.attach (*space, 0, 1, r, r+1, - (Gtk::AttachOptions)0, (Gtk::AttachOptions)0,0,0); -#endif } } ++r; @@ -684,14 +653,9 @@ CanvasXYGrid::onReprAttrChanged(Inkscape::XML::Node */*repr*/, gchar const */*ke Gtk::Widget * CanvasXYGrid::newSpecificWidget() { -#if WITH_GTKMM_3_0 - Gtk::Grid * table = Gtk::manage( new Gtk::Grid() ); + auto table = Gtk::manage( new Gtk::Grid() ); table->set_row_spacing(2); table->set_column_spacing(2); -#else - Gtk::Table * table = Gtk::manage( new Gtk::Table(1,1) ); - table->set_spacings(2); -#endif Inkscape::UI::Widget::RegisteredUnitMenu *_rumg = Gtk::manage( new Inkscape::UI::Widget::RegisteredUnitMenu( _("Grid _units:"), "units", _wr, repr, doc) ); -- cgit v1.2.3 From 9e1a6b6cdc87bde1b85137f2841a510283904b71 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 27 Jul 2016 17:45:46 +0100 Subject: widgets/ruler: Drop GTK2 fallbacks (bzr r15023.2.4) --- src/widgets/ruler.cpp | 154 -------------------------------------------------- 1 file changed, 154 deletions(-) (limited to 'src') diff --git a/src/widgets/ruler.cpp b/src/widgets/ruler.cpp index deffd384a..92c2b611d 100644 --- a/src/widgets/ruler.cpp +++ b/src/widgets/ruler.cpp @@ -120,7 +120,6 @@ static void sp_ruler_unmap (GtkWidget *widget); static void sp_ruler_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -#if GTK_CHECK_VERSION(3,0,0) static void sp_ruler_get_preferred_width (GtkWidget *widget, gint *minimum_width, gint *natural_width); @@ -129,21 +128,11 @@ static void sp_ruler_get_preferred_height (GtkWidget *widget, gint *minimum_height, gint *natural_height); static void sp_ruler_style_updated (GtkWidget *widget); -#else -static void sp_ruler_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void sp_ruler_style_set (GtkWidget *widget, - GtkStyle *prev_style); -#endif static gboolean sp_ruler_motion_notify (GtkWidget *widget, GdkEventMotion *event); static gboolean sp_ruler_draw (GtkWidget *widget, cairo_t *cr); -#if !GTK_CHECK_VERSION(3,0,0) -static gboolean sp_ruler_expose (GtkWidget *widget, - GdkEventExpose *event); -#endif static void sp_ruler_draw_ticks (SPRuler *ruler); static GdkRectangle sp_ruler_get_pos_rect (SPRuler *ruler, gdouble position); @@ -181,16 +170,10 @@ sp_ruler_class_init (SPRulerClass *klass) widget_class->map = sp_ruler_map; widget_class->unmap = sp_ruler_unmap; widget_class->size_allocate = sp_ruler_size_allocate; -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = sp_ruler_get_preferred_width; widget_class->get_preferred_height = sp_ruler_get_preferred_height; widget_class->style_updated = sp_ruler_style_updated; widget_class->draw = sp_ruler_draw; -#else - widget_class->size_request = sp_ruler_size_request; - widget_class->style_set = sp_ruler_style_set; - widget_class->expose_event = sp_ruler_expose; -#endif widget_class->motion_notify_event = sp_ruler_motion_notify; g_type_class_add_private (object_class, sizeof (SPRulerPrivate)); @@ -487,16 +470,10 @@ sp_ruler_realize (GtkWidget *widget) attributes.width = allocation.width; attributes.height = allocation.height; attributes.wclass = GDK_INPUT_ONLY; -#if GTK_CHECK_VERSION(3,0,0) attributes.event_mask = (gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); -#else - attributes.event_mask = (gtk_widget_get_events (widget) | - GDK_EXPOSURE_MASK | - GDK_POINTER_MOTION_MASK); -#endif attributes_mask = GDK_WA_X | GDK_WA_Y; @@ -599,7 +576,6 @@ sp_ruler_size_request (GtkWidget *widget, size = 2 + ink_rect.height * 1.7; -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context = gtk_widget_get_style_context (widget); GtkBorder border; @@ -607,47 +583,25 @@ sp_ruler_size_request (GtkWidget *widget, requisition->width = border.left + border.right; requisition->height = border.top + border.bottom; -#else - GtkStyle *style = gtk_widget_get_style(widget); -#endif if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) { -#if GTK_CHECK_VERSION(3,0,0) requisition->width += 1; requisition->height += size; -#else - requisition->width = style->xthickness * 2 + 1; - requisition->height = style->ythickness * 2 + size; -#endif } else { -#if GTK_CHECK_VERSION(3,0,0) requisition->width += size; requisition->height += 1; -#else - requisition->width = style->xthickness * 2 + size; - requisition->height = style->ythickness * 2 + 1; -#endif } } static void -#if GTK_CHECK_VERSION(3,0,0) sp_ruler_style_updated (GtkWidget *widget) -#else -sp_ruler_style_set (GtkWidget *widget, - GtkStyle *prev_style) -#endif { SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); -#if GTK_CHECK_VERSION(3,0,0) GTK_WIDGET_CLASS (sp_ruler_parent_class)->style_updated (widget); -#else - GTK_WIDGET_CLASS (sp_ruler_parent_class)->style_set (widget, prev_style); -#endif gtk_widget_style_get (widget, "font-scale", &priv->font_scale, @@ -660,7 +614,6 @@ sp_ruler_style_set (GtkWidget *widget, } } -#if GTK_CHECK_VERSION(3,0,0) static void sp_ruler_get_preferred_width (GtkWidget *widget, gint *minimum_width, @@ -684,26 +637,6 @@ sp_ruler_get_preferred_height (GtkWidget *widget, *minimum_height = *natural_height = requisition.height; } -#else -static gboolean -sp_ruler_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(widget)); - GtkAllocation allocation; - - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - - gtk_widget_get_allocation (widget, &allocation); - - gboolean result = sp_ruler_draw (widget, cr); - - cairo_destroy (cr); - - return result; -} -#endif static gboolean sp_ruler_draw (GtkWidget *widget, @@ -749,13 +682,8 @@ sp_ruler_draw_pos (SPRuler *ruler, { GtkWidget *widget = GTK_WIDGET (ruler); -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context = gtk_widget_get_style_context (widget); GdkRGBA color; -#else - GtkStyle *style = gtk_widget_get_style (widget); - GtkStateType state = gtk_widget_get_state (widget); -#endif SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); GdkRectangle pos_rect; @@ -767,13 +695,9 @@ sp_ruler_draw_pos (SPRuler *ruler, if ((pos_rect.width > 0) && (pos_rect.height > 0)) { -#if GTK_CHECK_VERSION(3,0,0) gtk_style_context_get_color (context, gtk_widget_get_state_flags (widget), &color); gdk_cairo_set_source_rgba (cr, &color); -#else - gdk_cairo_set_source_color (cr, &style->fg[state]); -#endif cairo_move_to (cr, pos_rect.x, pos_rect.y); @@ -1112,16 +1036,9 @@ sp_ruler_draw_ticks (SPRuler *ruler) { GtkWidget *widget = GTK_WIDGET (ruler); -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context = gtk_widget_get_style_context (widget); GtkBorder border; GdkRGBA color; -#else - GtkStyle *style = gtk_widget_get_style (widget); - GtkStateType state = gtk_widget_get_state (widget); - gint xthickness; - gint ythickness; -#endif SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); GtkAllocation allocation; @@ -1150,12 +1067,7 @@ sp_ruler_draw_ticks (SPRuler *ruler) gtk_widget_get_allocation (widget, &allocation); -#if GTK_CHECK_VERSION(3,0,0) gtk_style_context_get_border (context, static_cast(0), &border); -#else - xthickness = style->xthickness; - ythickness = style->ythickness; -#endif layout = sp_ruler_get_layout (widget, "0123456789"); pango_layout_get_extents (layout, &ink_rect, &logical_rect); @@ -1166,25 +1078,16 @@ sp_ruler_draw_ticks (SPRuler *ruler) if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) { width = allocation.width; -#if GTK_CHECK_VERSION(3,0,0) height = allocation.height - (border.top + border.bottom); -#else - height = allocation.height - ythickness * 2; -#endif } else { width = allocation.height; -#if GTK_CHECK_VERSION(3,0,0) height = allocation.width - (border.top + border.bottom); -#else - height = allocation.width - ythickness * 2; -#endif } cr = cairo_create (priv->backing_store); -#if GTK_CHECK_VERSION(3,0,0) gtk_render_background (context, cr, 0, 0, allocation.width, allocation.height); gtk_render_frame (context, cr, 0, 0, allocation.width, allocation.height); @@ -1208,30 +1111,6 @@ sp_ruler_draw_ticks (SPRuler *ruler) 1, allocation.height - (border.top + border.bottom)); } -#else - gdk_cairo_set_source_color (cr, &style->bg[state]); - - cairo_paint (cr); - - gdk_cairo_set_source_color(cr, &style->fg[state]); - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - cairo_rectangle (cr, - xthickness, - height + ythickness, - allocation.width - 2 * xthickness, - 1); - } - else - { - cairo_rectangle (cr, - height + xthickness, - ythickness, - 1, - allocation.height - 2 * ythickness); - } -#endif sp_ruler_get_range (ruler, &lower, &upper, &max_size); @@ -1312,7 +1191,6 @@ sp_ruler_draw_ticks (SPRuler *ruler) // by a pixel, and jump back on the next redraw). This is suppressed by adding 1e-9 (that's only one nanopixel ;-)) pos = gint(Inkscape::round((cur - lower) * increment + 1e-12)); -#if GTK_CHECK_VERSION(3,0,0) if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) { cairo_rectangle (cr, @@ -1325,20 +1203,6 @@ sp_ruler_draw_ticks (SPRuler *ruler) height + border.left - length, pos, length, 1); } -#else - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - cairo_rectangle (cr, - pos, height + ythickness - length, - 1, length); - } - else - { - cairo_rectangle (cr, - height + xthickness - length, pos, - length, 1); - } -#endif /* draw label */ double label_spacing_px = fabs(increment*(double)ruler_metric.ruler_scale[scale]/ruler_metric.subdivide[i]); @@ -1356,15 +1220,9 @@ sp_ruler_draw_ticks (SPRuler *ruler) pango_layout_set_text (layout, unit_str, -1); pango_layout_get_extents (layout, &logical_rect, NULL); -#if GTK_CHECK_VERSION(3,0,0) cairo_move_to (cr, pos + 2, border.top + PANGO_PIXELS (logical_rect.y - digit_offset)); -#else - cairo_move_to (cr, - pos + 2, - ythickness + PANGO_PIXELS (logical_rect.y - digit_offset)); -#endif pango_cairo_show_layout(cr, layout); } @@ -1378,15 +1236,9 @@ sp_ruler_draw_ticks (SPRuler *ruler) pango_layout_set_text (layout, digit_str, 1); pango_layout_get_extents (layout, NULL, &logical_rect); -#if GTK_CHECK_VERSION(3,0,0) cairo_move_to (cr, border.left + 1, pos + digit_height * j + 2 + PANGO_PIXELS (logical_rect.y - digit_offset)); -#else - cairo_move_to (cr, - xthickness + 1, - pos + digit_height * j + 2 + PANGO_PIXELS (logical_rect.y - digit_offset)); -#endif pango_cairo_show_layout (cr, layout); } } @@ -1423,7 +1275,6 @@ sp_ruler_get_pos_rect (SPRuler *ruler, gtk_widget_get_allocation (widget, &allocation); -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context = gtk_widget_get_style_context (widget); GtkBorder padding; @@ -1431,11 +1282,6 @@ sp_ruler_get_pos_rect (SPRuler *ruler, xthickness = padding.left + padding.right; ythickness = padding.top + padding.bottom; -#else - GtkStyle *style = gtk_widget_get_style (widget); - xthickness = style->xthickness; - ythickness = style->ythickness; -#endif if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) { -- cgit v1.2.3 From cebbe5b970cba85a5e21f8347f0a20e78351d394 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 28 Jul 2016 11:22:07 +0100 Subject: extensions: Drop GTKMM2 fallbacks (bzr r15023.2.5) --- src/extension/error-file.cpp | 6 +---- src/extension/extension.cpp | 22 ++-------------- src/extension/extension.h | 9 ------- src/extension/implementation/script.cpp | 6 +---- src/extension/internal/cdr-input.cpp | 11 +------- src/extension/internal/pdfinput/pdf-input.cpp | 36 +-------------------------- src/extension/internal/pdfinput/pdf-input.h | 15 +---------- src/extension/internal/vsd-input.cpp | 12 +-------- src/extension/param/bool.cpp | 6 +---- src/extension/param/float.cpp | 12 ++------- src/extension/param/int.cpp | 13 ++-------- src/extension/param/notebook.cpp | 8 ------ src/extension/param/radiobutton.cpp | 9 ++----- src/extension/prefdialog.cpp | 27 +------------------- 14 files changed, 16 insertions(+), 176 deletions(-) (limited to 'src') diff --git a/src/extension/error-file.cpp b/src/extension/error-file.cpp index db354c0ce..467ff95be 100644 --- a/src/extension/error-file.cpp +++ b/src/extension/error-file.cpp @@ -56,11 +56,7 @@ ErrorFileNotice::ErrorFileNotice (void) : g_free(ext_error_file); set_message(dialog_text, true); -#if WITH_GTKMM_3_0 - Gtk::Box * vbox = get_content_area(); -#else - Gtk::Box * vbox = get_vbox(); -#endif + auto vbox = get_content_area(); /* This is some filler text, needs to change before relase */ Inkscape::Preferences *prefs = Inkscape::Preferences::get(); diff --git a/src/extension/extension.cpp b/src/extension/extension.cpp index 6f7539360..5d150b703 100644 --- a/src/extension/extension.cpp +++ b/src/extension/extension.cpp @@ -22,12 +22,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include #include "inkscape.h" @@ -766,11 +761,7 @@ Extension::get_info_widget(void) Gtk::Frame * info = Gtk::manage(new Gtk::Frame("General Extension Information")); retval->pack_start(*info, true, true, 5); -#if WITH_GTKMM_3_0 - Gtk::Grid * table = Gtk::manage(new Gtk::Grid()); -#else - Gtk::Table * table = Gtk::manage(new Gtk::Table()); -#endif + auto table = Gtk::manage(new Gtk::Grid()); info->add(*table); @@ -784,11 +775,7 @@ Extension::get_info_widget(void) return retval; } -#if WITH_GTKMM_3_0 void Extension::add_val(Glib::ustring labelstr, Glib::ustring valuestr, Gtk::Grid * table, int * row) -#else -void Extension::add_val(Glib::ustring labelstr, Glib::ustring valuestr, Gtk::Table * table, int * row) -#endif { Gtk::Label * label; Gtk::Label * value; @@ -797,13 +784,8 @@ void Extension::add_val(Glib::ustring labelstr, Glib::ustring valuestr, Gtk::Tab label = Gtk::manage(new Gtk::Label(labelstr)); value = Gtk::manage(new Gtk::Label(valuestr)); -#if WITH_GTKMM_3_0 table->attach(*label, 0, (*row) - 1, 1, 1); table->attach(*value, 1, (*row) - 1, 1, 1); -#else - table->attach(*label, 0, 1, (*row) - 1, *row); - table->attach(*value, 1, 2, (*row) - 1, *row); -#endif label->show(); value->show(); diff --git a/src/extension/extension.h b/src/extension/extension.h index 1fb8bdfec..cd29e1636 100644 --- a/src/extension/extension.h +++ b/src/extension/extension.h @@ -22,12 +22,7 @@ #include namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else - class Table; -#endif - class VBox; class Widget; } @@ -300,11 +295,7 @@ public: Gtk::VBox * get_help_widget(void); Gtk::VBox * get_params_widget(void); protected: -#if WITH_GTKMM_3_0 inline static void add_val(Glib::ustring labelstr, Glib::ustring valuestr, Gtk::Grid * table, int * row); -#else - inline static void add_val(Glib::ustring labelstr, Glib::ustring valuestr, Gtk::Table * table, int * row); -#endif }; diff --git a/src/extension/implementation/script.cpp b/src/extension/implementation/script.cpp index 01323bee2..72a189c3f 100644 --- a/src/extension/implementation/script.cpp +++ b/src/extension/implementation/script.cpp @@ -942,11 +942,7 @@ void Script::checkStderr (const Glib::ustring &data, GtkWidget *dlg = GTK_WIDGET(warning.gobj()); sp_transientize(dlg); -#if WITH_GTKMM_3_0 - Gtk::Box * vbox = warning.get_content_area(); -#else - Gtk::Box * vbox = warning.get_vbox(); -#endif + auto vbox = warning.get_content_area(); /* Gtk::TextView * textview = new Gtk::TextView(Gtk::TextBuffer::create()); */ Gtk::TextView * textview = new Gtk::TextView(); diff --git a/src/extension/internal/cdr-input.cpp b/src/extension/internal/cdr-input.cpp index a26af2078..b94b6d019 100644 --- a/src/extension/internal/cdr-input.cpp +++ b/src/extension/internal/cdr-input.cpp @@ -111,11 +111,7 @@ CdrImportDialog::CdrImportDialog(const std::vector &vec) _previewArea = Gtk::manage(new class Gtk::VBox()); vbox1 = Gtk::manage(new class Gtk::VBox()); vbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 0); -#if WITH_GTKMM_3_0 this->get_content_area()->pack_start(*vbox1); -#else - this->get_vbox()->pack_start(*vbox1); -#endif // CONTROLS @@ -137,13 +133,8 @@ CdrImportDialog::CdrImportDialog(const std::vector &vec) g_free(label_text); // Adjustment + spinner -#if WITH_GTKMM_3_0 - Glib::RefPtr _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _vec.size(), 1, 10, 0); + auto _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _vec.size(), 1, 10, 0); _pageNumberSpin = Gtk::manage(new Gtk::SpinButton(_pageNumberSpin_adj, 1, 0)); -#else - Gtk::Adjustment *_pageNumberSpin_adj = Gtk::manage(new class Gtk::Adjustment(1, 1, _vec.size(), 1, 10, 0)); - _pageNumberSpin = Gtk::manage(new Gtk::SpinButton(*_pageNumberSpin_adj, 1, 0)); -#endif _pageNumberSpin->set_can_focus(); _pageNumberSpin->set_update_policy(Gtk::UPDATE_ALWAYS); _pageNumberSpin->set_numeric(true); diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp index c1940b16a..0c22fa399 100644 --- a/src/extension/internal/pdfinput/pdf-input.cpp +++ b/src/extension/internal/pdfinput/pdf-input.cpp @@ -39,10 +39,8 @@ #include #include -#if WITH_GTKMM_3_0 #include #include -#endif #include "extension/system.h" #include "extension/input.h" @@ -92,14 +90,8 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/) _labelSelect = Gtk::manage(new class Gtk::Label(_("Select page:"))); // Page number -#if WITH_GTKMM_3_0 - Glib::RefPtr _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _pdf_doc->getNumPages(), 1, 10, 0); + auto _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _pdf_doc->getNumPages(), 1, 10, 0); _pageNumberSpin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(_pageNumberSpin_adj, 1, 1)); -#else - Gtk::Adjustment *_pageNumberSpin_adj = Gtk::manage( - new class Gtk::Adjustment(1, 1, _pdf_doc->getNumPages(), 1, 10, 0)); - _pageNumberSpin = Gtk::manage(new class Inkscape::UI::Widget::SpinButton(*_pageNumberSpin_adj, 1, 1)); -#endif _labelTotalPages = Gtk::manage(new class Gtk::Label()); hbox2 = Gtk::manage(new class Gtk::HBox(false, 0)); // Disable the page selector when there's only one page @@ -137,13 +129,8 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/) _labelViaInternal = Gtk::manage(new class Gtk::Label(_("Import via internal (Poppler derived) library. Text is stored as text but white space is missing. Meshes are converted to tiles, the number depends on the precision set below."))); #endif -#if WITH_GTKMM_3_0 _fallbackPrecisionSlider_adj = Gtk::Adjustment::create(2, 1, 256, 1, 10, 10); _fallbackPrecisionSlider = Gtk::manage(new class Gtk::Scale(_fallbackPrecisionSlider_adj)); -#else - _fallbackPrecisionSlider_adj = Gtk::manage(new class Gtk::Adjustment(2, 1, 256, 1, 10, 10)); - _fallbackPrecisionSlider = Gtk::manage(new class Gtk::HScale(*_fallbackPrecisionSlider_adj)); -#endif _fallbackPrecisionSlider->set_value(2.0); _labelPrecisionComment = Gtk::manage(new class Gtk::Label(_("rough"))); hbox6 = Gtk::manage(new class Gtk::HBox(false, 4)); @@ -278,15 +265,9 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/) hbox1->pack_start(*vbox1); hbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 4); -#if WITH_GTKMM_3_0 get_content_area()->set_homogeneous(false); get_content_area()->set_spacing(0); get_content_area()->pack_start(*hbox1); -#else - this->get_vbox()->set_homogeneous(false); - this->get_vbox()->set_spacing(0); - this->get_vbox()->pack_start(*hbox1); -#endif this->set_title(_("PDF Import Settings")); this->set_modal(true); @@ -300,12 +281,7 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/) this->show_all(); // Connect signals -#if WITH_GTKMM_3_0 _previewArea->signal_draw().connect(sigc::mem_fun(*this, &PdfImportDialog::_onDraw)); -#else - _previewArea->signal_expose_event().connect(sigc::mem_fun(*this, &PdfImportDialog::_onExposePreview)); -#endif - _pageNumberSpin_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PdfImportDialog::_onPageNumberChanged)); _cropCheck->signal_toggled().connect(sigc::mem_fun(*this, &PdfImportDialog::_onToggleCropping)); _fallbackPrecisionSlider_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PdfImportDialog::_onPrecisionChanged)); @@ -527,16 +503,6 @@ static void copy_cairo_surface_to_pixbuf (cairo_surface_t *surface, #endif -/** - * \brief Updates the preview area with the previously rendered thumbnail - */ -#if !WITH_GTKMM_3_0 -bool PdfImportDialog::_onExposePreview(GdkEventExpose * /*event*/) { - Cairo::RefPtr cr = _previewArea->get_window()->create_cairo_context(); - return _onDraw(cr); -} -#endif - bool PdfImportDialog::_onDraw(const Cairo::RefPtr& cr) { // Check if we have a thumbnail at all if (!_thumb_data) { diff --git a/src/extension/internal/pdfinput/pdf-input.h b/src/extension/internal/pdfinput/pdf-input.h index 6e36603c3..c338207c1 100644 --- a/src/extension/internal/pdfinput/pdf-input.h +++ b/src/extension/internal/pdfinput/pdf-input.h @@ -39,11 +39,7 @@ namespace Gtk { class DrawingArea; class Frame; class HBox; -#if WITH_GTKMM_3_0 class Scale; -#else - class HScale; -#endif class RadioButton; class VBox; class Label; @@ -79,10 +75,6 @@ private: void _setPreviewPage(int page); // Signal handlers -#if !WITH_GTKMM_3_0 - bool _onExposePreview(GdkEventExpose *event); -#endif - bool _onDraw(const Cairo::RefPtr& cr); void _onPageNumberChanged(); void _onToggleCropping(); @@ -110,13 +102,8 @@ private: class Gtk::RadioButton * _importViaInternal; // Use native (poppler based) importing class Gtk::Label * _labelViaInternal; #endif -#if WITH_GTKMM_3_0 - class Gtk::Scale * _fallbackPrecisionSlider; + Gtk::Scale * _fallbackPrecisionSlider; Glib::RefPtr _fallbackPrecisionSlider_adj; -#else - class Gtk::HScale * _fallbackPrecisionSlider; - class Gtk::Adjustment *_fallbackPrecisionSlider_adj; -#endif class Gtk::Label * _labelPrecisionComment; class Gtk::HBox * hbox6; class Gtk::Label * _labelText; diff --git a/src/extension/internal/vsd-input.cpp b/src/extension/internal/vsd-input.cpp index a3d4aad37..2de2d0ec6 100644 --- a/src/extension/internal/vsd-input.cpp +++ b/src/extension/internal/vsd-input.cpp @@ -113,12 +113,7 @@ VsdImportDialog::VsdImportDialog(const std::vector &vec) _previewArea = Gtk::manage(new class Gtk::VBox()); vbox1 = Gtk::manage(new class Gtk::VBox()); vbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 0); -#if WITH_GTKMM_3_0 this->get_content_area()->pack_start(*vbox1); -#else - this->get_vbox()->pack_start(*vbox1); -#endif - // CONTROLS @@ -140,13 +135,8 @@ VsdImportDialog::VsdImportDialog(const std::vector &vec) g_free(label_text); // Adjustment + spinner -#if WITH_GTKMM_3_0 - Glib::RefPtr _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _vec.size(), 1, 10, 0); + auto _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _vec.size(), 1, 10, 0); _pageNumberSpin = Gtk::manage(new Gtk::SpinButton(_pageNumberSpin_adj, 1, 0)); -#else - Gtk::Adjustment *_pageNumberSpin_adj = Gtk::manage(new class Gtk::Adjustment(1, 1, _vec.size(), 1, 10, 0)); - _pageNumberSpin = Gtk::manage(new Gtk::SpinButton(*_pageNumberSpin_adj, 1, 0)); -#endif _pageNumberSpin->set_can_focus(); _pageNumberSpin->set_update_policy(Gtk::UPDATE_ALWAYS); _pageNumberSpin->set_numeric(true); diff --git a/src/extension/param/bool.cpp b/src/extension/param/bool.cpp index d64f798ba..e67d3e3f5 100644 --- a/src/extension/param/bool.cpp +++ b/src/extension/param/bool.cpp @@ -129,12 +129,8 @@ Gtk::Widget *ParamBool::get_widget(SPDocument * doc, Inkscape::XML::Node * node, return NULL; } -#if WITH_GTKMM_3_0 - Gtk::Box * hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 4)); + auto hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 4)); hbox->set_homogeneous(false); -#else - Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4)); -#endif Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START)); label->show(); diff --git a/src/extension/param/float.cpp b/src/extension/param/float.cpp index dff7cbf46..d4c33ec94 100644 --- a/src/extension/param/float.cpp +++ b/src/extension/param/float.cpp @@ -176,12 +176,8 @@ Gtk::Widget * ParamFloat::get_widget(SPDocument * doc, Inkscape::XML::Node * nod Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4)); -#if WITH_GTKMM_3_0 - ParamFloatAdjustment * pfa = new ParamFloatAdjustment(this, doc, node, changeSignal); + auto pfa = new ParamFloatAdjustment(this, doc, node, changeSignal); Glib::RefPtr fadjust(pfa); -#else - ParamFloatAdjustment * fadjust = Gtk::manage(new ParamFloatAdjustment(this, doc, node, changeSignal)); -#endif if (_mode == FULL) { @@ -197,11 +193,7 @@ Gtk::Widget * ParamFloat::get_widget(SPDocument * doc, Inkscape::XML::Node * nod label->show(); hbox->pack_start(*label, true, true, _indent); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton * spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(fadjust, 0.1, _precision)); -#else - Inkscape::UI::Widget::SpinButton * spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(*fadjust, 0.1, _precision)); -#endif + auto spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(fadjust, 0.1, _precision)); spin->show(); hbox->pack_start(*spin, false, false); } diff --git a/src/extension/param/int.cpp b/src/extension/param/int.cpp index dda801282..533ee3886 100644 --- a/src/extension/param/int.cpp +++ b/src/extension/param/int.cpp @@ -157,13 +157,8 @@ ParamInt::get_widget (SPDocument * doc, Inkscape::XML::Node * node, sigc::signal Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4)); - -#if WITH_GTKMM_3_0 - ParamIntAdjustment * pia = new ParamIntAdjustment(this, doc, node, changeSignal); + auto pia = new ParamIntAdjustment(this, doc, node, changeSignal); Glib::RefPtr fadjust(pia); -#else - ParamIntAdjustment * fadjust = Gtk::manage(new ParamIntAdjustment(this, doc, node, changeSignal)); -#endif if (_mode == FULL) { @@ -178,11 +173,7 @@ ParamInt::get_widget (SPDocument * doc, Inkscape::XML::Node * node, sigc::signal label->show(); hbox->pack_start(*label, true, true, _indent); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton * spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(fadjust, 1.0, 0)); -#else - Inkscape::UI::Widget::SpinButton * spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(*fadjust, 1.0, 0)); -#endif + auto spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(fadjust, 1.0, 0)); spin->show(); hbox->pack_start(*spin, false, false); } diff --git a/src/extension/param/notebook.cpp b/src/extension/param/notebook.cpp index 20c8e8481..957d12d06 100644 --- a/src/extension/param/notebook.cpp +++ b/src/extension/param/notebook.cpp @@ -353,11 +353,7 @@ public: // hook function this->signal_switch_page().connect(sigc::mem_fun(this, &ParamNotebookWdg::changed_page)); }; -#if WITH_GTKMM_3_0 void changed_page(Gtk::Widget *page, guint pagenum); -#else - void changed_page(GtkNotebookPage *page, guint pagenum); -#endif bool activated; }; @@ -368,11 +364,7 @@ public: * is actually visible. This to exclude 'fake' changes when the * notebookpages are added or removed. */ -#if WITH_GTKMM_3_0 void ParamNotebookWdg::changed_page(Gtk::Widget * /*page*/, guint pagenum) -#else -void ParamNotebookWdg::changed_page(GtkNotebookPage * /*page*/, guint pagenum) -#endif { if (get_visible()) { _pref->set((int)pagenum, _doc, _node); diff --git a/src/extension/param/radiobutton.cpp b/src/extension/param/radiobutton.cpp index 1d1b860c6..ed28c0d75 100644 --- a/src/extension/param/radiobutton.cpp +++ b/src/extension/param/radiobutton.cpp @@ -303,15 +303,10 @@ Gtk::Widget * ParamRadioButton::get_widget(SPDocument * doc, Inkscape::XML::Node return NULL; } -#if WITH_GTKMM_3_0 - Gtk::Box * hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 4)); + auto hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 4)); hbox->set_homogeneous(false); - Gtk::Box * vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0)); + auto vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0)); vbox->set_homogeneous(false); -#else - Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4)); - Gtk::VBox * vbox = Gtk::manage(new Gtk::VBox(false, 0)); -#endif Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START, Gtk::ALIGN_START)); label->show(); diff --git a/src/extension/prefdialog.cpp b/src/extension/prefdialog.cpp index 2521dc1de..1ca590e85 100644 --- a/src/extension/prefdialog.cpp +++ b/src/extension/prefdialog.cpp @@ -41,11 +41,7 @@ namespace Extension { them. It also places the passed-in widgets into the dialog. */ PrefDialog::PrefDialog (Glib::ustring name, gchar const * help, Gtk::Widget * controls, Effect * effect) : -#if WITH_GTKMM_3_0 Gtk::Dialog(_(name.c_str()), true), -#else - Gtk::Dialog(_(name.c_str()), true, true), -#endif _help(help), _name(name), _button_ok(NULL), @@ -68,11 +64,7 @@ PrefDialog::PrefDialog (Glib::ustring name, gchar const * help, Gtk::Widget * co hbox->pack_start(*controls, true, true, 6); hbox->show(); -#if WITH_GTKMM_3_0 this->get_content_area()->pack_start(*hbox, true, true, 6); -#else - this->get_vbox()->pack_start(*hbox, true, true, 6); -#endif /* Gtk::Button * help_button = add_button(Gtk::Stock::HELP, Gtk::RESPONSE_HELP); @@ -97,19 +89,10 @@ PrefDialog::PrefDialog (Glib::ustring name, gchar const * help, Gtk::Widget * co _param_preview = Parameter::make(doc->root(), _effect); } -#if WITH_GTKMM_3_0 - Gtk::Separator * sep = Gtk::manage(new Gtk::Separator()); -#else - Gtk::HSeparator * sep = Gtk::manage(new Gtk::HSeparator()); -#endif - + auto sep = Gtk::manage(new Gtk::Separator()); sep->show(); -#if WITH_GTKMM_3_0 this->get_content_area()->pack_start(*sep, true, true, 4); -#else - this->get_vbox()->pack_start(*sep, true, true, 4); -#endif hbox = Gtk::manage(new Gtk::HBox()); _button_preview = _param_preview->get_widget(NULL, NULL, &_signal_preview); @@ -117,19 +100,11 @@ PrefDialog::PrefDialog (Glib::ustring name, gchar const * help, Gtk::Widget * co hbox->pack_start(*_button_preview, true, true,6); hbox->show(); -#if WITH_GTKMM_3_0 this->get_content_area()->pack_start(*hbox, true, true, 6); -#else - this->get_vbox()->pack_start(*hbox, true, true, 6); -#endif Gtk::Box * hbox = dynamic_cast(_button_preview); if (hbox != NULL) { -#if WITH_GTKMM_3_0 _checkbox_preview = dynamic_cast(hbox->get_children().front()); -#else - _checkbox_preview = dynamic_cast(hbox->children().back().get_widget()); -#endif } preview_toggle(); -- cgit v1.2.3 From 58111034d09da960cf9982b703c6ab2647422e0b Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 28 Jul 2016 13:19:42 +0100 Subject: ui/widgets: Drop GTK2 fallbacks (bzr r15023.2.6) --- src/ui/widget/addtoicon.cpp | 33 ----- src/ui/widget/addtoicon.h | 14 -- src/ui/widget/anchor-selector.cpp | 10 -- src/ui/widget/anchor-selector.h | 12 +- src/ui/widget/clipmaskicon.cpp | 33 ----- src/ui/widget/clipmaskicon.h | 13 -- src/ui/widget/color-icc-selector.cpp | 23 --- src/ui/widget/color-icc-selector.h | 8 - src/ui/widget/color-notebook.cpp | 30 ---- src/ui/widget/color-notebook.h | 8 - src/ui/widget/color-picker.cpp | 5 - src/ui/widget/color-preview.cpp | 26 ---- src/ui/widget/color-preview.h | 6 - src/ui/widget/color-scales.cpp | 27 ---- src/ui/widget/color-scales.h | 8 - src/ui/widget/color-slider.cpp | 122 +--------------- src/ui/widget/color-slider.h | 18 --- src/ui/widget/color-wheel-selector.cpp | 46 +----- src/ui/widget/color-wheel-selector.h | 12 -- src/ui/widget/dock-item.cpp | 8 - src/ui/widget/dock.cpp | 12 -- src/ui/widget/gimpspinscale.c | 260 +-------------------------------- src/ui/widget/highlight-picker.cpp | 33 ----- src/ui/widget/highlight-picker.h | 14 -- src/ui/widget/imagetoggler.cpp | 33 ----- src/ui/widget/imagetoggler.h | 14 -- src/ui/widget/insertordericon.cpp | 32 ---- src/ui/widget/insertordericon.h | 13 -- src/ui/widget/layertypeicon.cpp | 33 ----- src/ui/widget/layertypeicon.h | 14 -- src/ui/widget/licensor.cpp | 8 - src/ui/widget/notebook-page.cpp | 12 -- src/ui/widget/notebook-page.h | 13 -- src/ui/widget/page-sizer.cpp | 43 ------ src/ui/widget/page-sizer.h | 26 +--- src/ui/widget/panel.cpp | 6 - src/ui/widget/panel.h | 18 +-- src/ui/widget/point.cpp | 4 - src/ui/widget/point.h | 4 - src/ui/widget/preferences-widget.cpp | 80 +--------- src/ui/widget/preferences-widget.h | 25 ---- src/ui/widget/random.cpp | 4 - src/ui/widget/random.h | 4 - src/ui/widget/scalar.cpp | 10 +- src/ui/widget/scalar.h | 4 - src/ui/widget/selected-style.cpp | 37 ----- src/ui/widget/selected-style.h | 15 +- src/ui/widget/spin-scale.cpp | 28 +--- src/ui/widget/spin-scale.h | 25 +--- src/ui/widget/spin-slider.cpp | 61 +------- src/ui/widget/spin-slider.h | 18 +-- src/ui/widget/style-swatch.cpp | 23 +-- src/ui/widget/style-swatch.h | 8 - src/ui/widget/tolerance-slider.cpp | 10 +- src/ui/widget/tolerance-slider.h | 10 -- src/widgets/desktop-widget.cpp | 1 - 56 files changed, 41 insertions(+), 1376 deletions(-) (limited to 'src') diff --git a/src/ui/widget/addtoicon.cpp b/src/ui/widget/addtoicon.cpp index 10294125d..ab50fcd8f 100644 --- a/src/ui/widget/addtoicon.cpp +++ b/src/ui/widget/addtoicon.cpp @@ -51,8 +51,6 @@ AddToIcon::AddToIcon() : set_pixbuf(); } - -#if WITH_GTKMM_3_0 void AddToIcon::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -82,47 +80,16 @@ void AddToIcon::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void AddToIcon::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width = phys;//+= (*width) >> 1; - } - if ( height ) { - *height =phys;//+= (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void AddToIcon::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void AddToIcon::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { set_pixbuf(); -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool AddToIcon::activate_vfunc(GdkEvent* /*event*/, diff --git a/src/ui/widget/addtoicon.h b/src/ui/widget/addtoicon.h index a8d900d1f..3b2228754 100644 --- a/src/ui/widget/addtoicon.h +++ b/src/ui/widget/addtoicon.h @@ -31,8 +31,6 @@ public: Glib::PropertyProxy< Glib::RefPtr > property_pixbuf_off(); protected: - -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -46,18 +44,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/anchor-selector.cpp b/src/ui/widget/anchor-selector.cpp index df00b786a..0d6030ac6 100644 --- a/src/ui/widget/anchor-selector.cpp +++ b/src/ui/widget/anchor-selector.cpp @@ -28,11 +28,7 @@ void AnchorSelector::setupButton(const Glib::ustring& icon, Gtk::ToggleButton& b AnchorSelector::AnchorSelector() : Gtk::Alignment(0.5, 0, 0, 0), -#if WITH_GTKMM_3_0 _container() -#else - _container(3, 3, true) -#endif { setupButton(INKSCAPE_ICON("boundingbox_top_left"), _buttons[0]); setupButton(INKSCAPE_ICON("boundingbox_top"), _buttons[1]); @@ -44,20 +40,14 @@ AnchorSelector::AnchorSelector() setupButton(INKSCAPE_ICON("boundingbox_bottom"), _buttons[7]); setupButton(INKSCAPE_ICON("boundingbox_bottom_right"), _buttons[8]); -#if WITH_GTKMM_3_0 _container.set_row_homogeneous(); _container.set_column_homogeneous(true); -#endif for(int i = 0; i < 9; ++i) { _buttons[i].signal_clicked().connect( sigc::bind(sigc::mem_fun(*this, &AnchorSelector::btn_activated), i)); -#if WITH_GTKMM_3_0 _container.attach(_buttons[i], i % 3, i / 3, 1, 1); -#else - _container.attach(_buttons[i], i % 3, i % 3+1, i / 3, i / 3+1, Gtk::FILL, Gtk::FILL); -#endif } _selection = 4; _buttons[4].set_active(); diff --git a/src/ui/widget/anchor-selector.h b/src/ui/widget/anchor-selector.h index 0a702d296..96331fae3 100644 --- a/src/ui/widget/anchor-selector.h +++ b/src/ui/widget/anchor-selector.h @@ -16,12 +16,7 @@ #include #include - -#if WITH_GTKMM_3_0 - #include -#else - #include -#endif +#include namespace Inkscape { namespace UI { @@ -32,12 +27,7 @@ class AnchorSelector : public Gtk::Alignment private: Gtk::ToggleButton _buttons[9]; int _selection; - -#if WITH_GTKMM_3_0 Gtk::Grid _container; -#else - Gtk::Table _container; -#endif sigc::signal _selectionChanged; diff --git a/src/ui/widget/clipmaskicon.cpp b/src/ui/widget/clipmaskicon.cpp index 421f1df1e..b914eeb2d 100644 --- a/src/ui/widget/clipmaskicon.cpp +++ b/src/ui/widget/clipmaskicon.cpp @@ -63,8 +63,6 @@ ClipMaskIcon::ClipMaskIcon() : property_pixbuf() = Glib::RefPtr(0); } - -#if WITH_GTKMM_3_0 void ClipMaskIcon::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -94,39 +92,12 @@ void ClipMaskIcon::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void ClipMaskIcon::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width = phys;//+= (*width) >> 1; - } - if ( height ) { - *height =phys;//+= (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void ClipMaskIcon::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void ClipMaskIcon::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { switch (_property_active.get_value()) { @@ -143,11 +114,7 @@ void ClipMaskIcon::render_vfunc( const Glib::RefPtr& window, property_pixbuf() = Glib::RefPtr(0); break; } -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool ClipMaskIcon::activate_vfunc(GdkEvent* /*event*/, diff --git a/src/ui/widget/clipmaskicon.h b/src/ui/widget/clipmaskicon.h index eca852a83..0d149edb8 100644 --- a/src/ui/widget/clipmaskicon.h +++ b/src/ui/widget/clipmaskicon.h @@ -32,7 +32,6 @@ public: protected: -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -46,18 +45,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/color-icc-selector.cpp b/src/ui/widget/color-icc-selector.cpp index e4f58fe8a..04a5ab368 100644 --- a/src/ui/widget/color-icc-selector.cpp +++ b/src/ui/widget/color-icc-selector.cpp @@ -87,7 +87,6 @@ GtkAttachOptions operator|(GtkAttachOptions lhs, GtkAttachOptions rhs) void attachToGridOrTable(GtkWidget *parent, GtkWidget *child, guint left, guint top, guint width, guint height, bool hexpand = false, bool centered = false, guint xpadding = XPAD, guint ypadding = YPAD) { -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(child, xpadding); gtk_widget_set_margin_end(child, xpadding); @@ -106,14 +105,6 @@ void attachToGridOrTable(GtkWidget *parent, GtkWidget *child, guint left, guint gtk_widget_set_valign(child, GTK_ALIGN_CENTER); } gtk_grid_attach(GTK_GRID(parent), child, left, top, width, height); -#else - GtkAttachOptions xoptions = - centered ? static_cast(0) : hexpand ? (GTK_EXPAND | GTK_FILL) : GTK_FILL; - GtkAttachOptions yoptions = centered ? static_cast(0) : GTK_FILL; - - gtk_table_attach(GTK_TABLE(parent), child, left, left + width, top, top + height, xoptions, yoptions, xpadding, - ypadding); -#endif } } // namespace @@ -431,12 +422,7 @@ void ColorICCSelector::init() _impl->_compUI[i]._label = gtk_label_new_with_mnemonic(labelStr.c_str()); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(_impl->_compUI[i]._label, GTK_ALIGN_END); -#else - gtk_misc_set_alignment(GTK_MISC(_impl->_compUI[i]._label), 1.0, 0.5); -#endif - gtk_widget_show(_impl->_compUI[i]._label); gtk_widget_set_no_show_all(_impl->_compUI[i]._label, TRUE); @@ -495,12 +481,7 @@ void ColorICCSelector::init() // Label _impl->_label = gtk_label_new_with_mnemonic(_("_A:")); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(_impl->_label, GTK_ALIGN_END); -#else - gtk_misc_set_alignment(GTK_MISC(_impl->_label), 1.0, 0.5); -#endif - gtk_widget_show(_impl->_label); attachToGridOrTable(t, _impl->_label, 0, row, 1, 1); @@ -727,11 +708,7 @@ void ColorICCSelectorImpl::_profilesChanged(std::string const & /*name*/) {} void ColorICCSelector::on_show() { -#if GTK_CHECK_VERSION(3, 0, 0) Gtk::Grid::on_show(); -#else - Gtk::Table::on_show(); -#endif _colorChanged(); } diff --git a/src/ui/widget/color-icc-selector.h b/src/ui/widget/color-icc-selector.h index 1bcb0a540..aaa8372b8 100644 --- a/src/ui/widget/color-icc-selector.h +++ b/src/ui/widget/color-icc-selector.h @@ -6,11 +6,7 @@ #endif #include -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include "ui/selected-color.h" @@ -24,11 +20,7 @@ namespace Widget { class ColorICCSelectorImpl; class ColorICCSelector -#if GTK_CHECK_VERSION(3, 0, 0) : public Gtk::Grid -#else - : public Gtk::Table -#endif { public: static const gchar *MODE_NAME; diff --git a/src/ui/widget/color-notebook.cpp b/src/ui/widget/color-notebook.cpp index 6d7ada734..d2c4efc74 100644 --- a/src/ui/widget/color-notebook.cpp +++ b/src/ui/widget/color-notebook.cpp @@ -56,13 +56,8 @@ namespace Widget { ColorNotebook::ColorNotebook(SelectedColor &color) -#if GTK_CHECK_VERSION(3, 0, 0) : Gtk::Grid() -#else - : Gtk::Table(2, 3, false) -#endif , _selected_color(color) - { Page *page; @@ -110,12 +105,8 @@ void ColorNotebook::_initUI() notebook->set_show_tabs(false); _book = GTK_WIDGET(notebook->gobj()); -#if GTK_CHECK_VERSION(3, 0, 0) _buttonbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_set_homogeneous(GTK_BOX(_buttonbox), TRUE); -#else - _buttonbox = gtk_hbox_new(TRUE, 2); -#endif gtk_widget_show(_buttonbox); _buttons = new GtkWidget *[_available_pages.size()]; @@ -126,7 +117,6 @@ void ColorNotebook::_initUI() sp_set_font_size_smaller(_buttonbox); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(_buttonbox, XPAD); gtk_widget_set_margin_end(_buttonbox, XPAD); @@ -139,14 +129,9 @@ void ColorNotebook::_initUI() gtk_widget_set_hexpand(_buttonbox, TRUE); gtk_widget_set_valign(_buttonbox, GTK_ALIGN_CENTER); attach(*Glib::wrap(_buttonbox), 0, row, 2, 1); -#else - attach(*Glib::wrap(_buttonbox), 0, 2, row, row + 1, Gtk::EXPAND | Gtk::FILL, static_cast(0), - XPAD, YPAD); -#endif row++; -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(_book, XPAD * 2); gtk_widget_set_margin_end(_book, XPAD * 2); @@ -159,20 +144,13 @@ void ColorNotebook::_initUI() gtk_widget_set_hexpand(_book, TRUE); gtk_widget_set_vexpand(_book, TRUE); attach(*notebook, 0, row, 2, 1); -#else - attach(*notebook, 0, 2, row, row + 1, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, XPAD * 2, YPAD); -#endif // restore the last active page Inkscape::Preferences *prefs = Inkscape::Preferences::get(); _setCurrentPage(prefs->getInt("/colorselector/page", 0)); row++; -#if GTK_CHECK_VERSION(3, 0, 0) GtkWidget *rgbabox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); -#else - GtkWidget *rgbabox = gtk_hbox_new(FALSE, 0); -#endif #if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) /* Create color management icons */ @@ -210,11 +188,7 @@ void ColorNotebook::_initUI() /* Create RGBA entry and color preview */ _rgbal = gtk_label_new_with_mnemonic(_("RGBA_:")); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(_rgbal, GTK_ALIGN_END); -#else - gtk_misc_set_alignment(GTK_MISC(_rgbal), 1.0, 0.5); -#endif gtk_box_pack_start(GTK_BOX(rgbabox), _rgbal, TRUE, TRUE, 2); ColorEntry *rgba_entry = Gtk::manage(new ColorEntry(_selected_color)); @@ -230,7 +204,6 @@ void ColorNotebook::_initUI() gtk_widget_hide(GTK_WIDGET(_box_toomuchink)); #endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(rgbabox, XPAD); gtk_widget_set_margin_end(rgbabox, XPAD); @@ -241,9 +214,6 @@ void ColorNotebook::_initUI() gtk_widget_set_margin_top(rgbabox, YPAD); gtk_widget_set_margin_bottom(rgbabox, YPAD); attach(*Glib::wrap(rgbabox), 0, row, 2, 1); -#else - attach(*Glib::wrap(rgbabox), 0, 2, row, row + 1, Gtk::FILL, Gtk::SHRINK, XPAD, YPAD); -#endif #ifdef SPCS_PREVIEW _p = sp_color_preview_new(0xffffffff); diff --git a/src/ui/widget/color-notebook.h b/src/ui/widget/color-notebook.h index d28028c72..35e46ef14 100644 --- a/src/ui/widget/color-notebook.h +++ b/src/ui/widget/color-notebook.h @@ -19,11 +19,7 @@ #endif #include -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include #include @@ -35,11 +31,7 @@ namespace UI { namespace Widget { class ColorNotebook -#if GTK_CHECK_VERSION(3, 0, 0) : public Gtk::Grid -#else - : public Gtk::Table -#endif { public: ColorNotebook(SelectedColor &color); diff --git a/src/ui/widget/color-picker.cpp b/src/ui/widget/color-picker.cpp index a66fbfc9c..5a62c3c98 100644 --- a/src/ui/widget/color-picker.cpp +++ b/src/ui/widget/color-picker.cpp @@ -59,13 +59,8 @@ void ColorPicker::setupDialog(const Glib::ustring &title) _color_selector = Gtk::manage(new ColorNotebook(_selected_color)); -#if WITH_GTKMM_3_0 _colorSelectorDialog.get_content_area()->pack_start ( *_color_selector, true, true, 0); -#else - _colorSelectorDialog.get_vbox()->pack_start ( - *_color_selector, true, true, 0); -#endif _color_selector->show(); } diff --git a/src/ui/widget/color-preview.cpp b/src/ui/widget/color-preview.cpp index 62c7cca1d..c9b6e56d2 100644 --- a/src/ui/widget/color-preview.cpp +++ b/src/ui/widget/color-preview.cpp @@ -34,7 +34,6 @@ ColorPreview::on_size_allocate (Gtk::Allocation &all) queue_draw(); } -#if WITH_GTKMM_3_0 void ColorPreview::get_preferred_height_vfunc(int& minimum_height, int& natural_height) const { @@ -58,31 +57,6 @@ ColorPreview::get_preferred_width_for_height_vfunc(int /* height */, int& minimu { minimum_width = natural_width = SPCP_DEFAULT_WIDTH; } -#else -void -ColorPreview::on_size_request (Gtk::Requisition *req) -{ - req->width = SPCP_DEFAULT_WIDTH; - req->height = SPCP_DEFAULT_HEIGHT; -} - -bool -ColorPreview::on_expose_event (GdkEventExpose *event) -{ - bool result = true; - - if (get_is_drawable()) - { - Cairo::RefPtr cr = get_window()->create_cairo_context(); - cr->rectangle(event->area.x, event->area.y, - event->area.width, event->area.height); - cr->clip(); - result = on_draw(cr); - } - - return result; -} -#endif void ColorPreview::setRgba32 (guint32 rgba) diff --git a/src/ui/widget/color-preview.h b/src/ui/widget/color-preview.h index caddfb9a2..1276cf42b 100644 --- a/src/ui/widget/color-preview.h +++ b/src/ui/widget/color-preview.h @@ -33,16 +33,10 @@ public: protected: virtual void on_size_allocate (Gtk::Allocation &all); -#if WITH_GTKMM_3_0 virtual void get_preferred_height_vfunc(int& minimum_height, int& natural_height) const; virtual void get_preferred_height_for_width_vfunc(int width, int& minimum_height, int& natural_height) const; virtual void get_preferred_width_vfunc(int& minimum_width, int& natural_width) const; virtual void get_preferred_width_for_height_vfunc(int height, int& minimum_width, int& natural_width) const; -#else - virtual void on_size_request (Gtk::Requisition *req); - virtual bool on_expose_event(GdkEventExpose *event); -#endif - virtual bool on_draw(const Cairo::RefPtr& cr); guint32 _rgba; diff --git a/src/ui/widget/color-scales.cpp b/src/ui/widget/color-scales.cpp index 48a2693bc..6afa7f939 100644 --- a/src/ui/widget/color-scales.cpp +++ b/src/ui/widget/color-scales.cpp @@ -46,11 +46,7 @@ static const gchar *sp_color_scales_hue_map(); const gchar *ColorScales::SUBMODE_NAMES[] = { N_("None"), N_("RGB"), N_("HSL"), N_("CMYK") }; ColorScales::ColorScales(SelectedColor &color, SPColorScalesMode mode) -#if GTK_CHECK_VERSION(3, 0, 0) : Gtk::Grid() -#else - : Gtk::Table(5, 3, false) -#endif , _color(color) , _rangeLimit(255.0) , _updating(FALSE) @@ -93,15 +89,9 @@ void ColorScales::_initUI(SPColorScalesMode mode) /* Label */ _l[i] = gtk_label_new(""); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(_l[i], GTK_ALIGN_END); -#else - gtk_misc_set_alignment(GTK_MISC(_l[i]), 1.0, 0.5); -#endif - gtk_widget_show(_l[i]); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(_l[i], XPAD); gtk_widget_set_margin_end(_l[i], XPAD); @@ -112,9 +102,6 @@ void ColorScales::_initUI(SPColorScalesMode mode) gtk_widget_set_margin_top(_l[i], YPAD); gtk_widget_set_margin_bottom(_l[i], YPAD); gtk_grid_attach(GTK_GRID(t), _l[i], 0, i, 1, 1); -#else - gtk_table_attach(GTK_TABLE(t), _l[i], 0, 1, i, i + 1, GTK_FILL, GTK_FILL, XPAD, YPAD); -#endif /* Adjustment */ _a[i] = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, _rangeLimit, 1.0, 10.0, 10.0)); @@ -122,7 +109,6 @@ void ColorScales::_initUI(SPColorScalesMode mode) _s[i] = Gtk::manage(new Inkscape::UI::Widget::ColorSlider(Glib::wrap(_a[i], true))); _s[i]->show(); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) _s[i]->set_margin_start(XPAD); _s[i]->set_margin_end(XPAD); @@ -134,10 +120,6 @@ void ColorScales::_initUI(SPColorScalesMode mode) _s[i]->set_margin_bottom(YPAD); _s[i]->set_hexpand(true); gtk_grid_attach(GTK_GRID(t), _s[i]->gobj(), 1, i, 1, 1); -#else - gtk_table_attach(GTK_TABLE(t), _s[i]->gobj(), 1, 2, i, i + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - GTK_FILL, XPAD, YPAD); -#endif /* Spinbutton */ _b[i] = gtk_spin_button_new(GTK_ADJUSTMENT(_a[i]), 1.0, 0); @@ -145,7 +127,6 @@ void ColorScales::_initUI(SPColorScalesMode mode) gtk_label_set_mnemonic_widget(GTK_LABEL(_l[i]), _b[i]); gtk_widget_show(_b[i]); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(_b[i], XPAD); gtk_widget_set_margin_end(_b[i], XPAD); @@ -158,9 +139,6 @@ void ColorScales::_initUI(SPColorScalesMode mode) gtk_widget_set_halign(_b[i], GTK_ALIGN_CENTER); gtk_widget_set_valign(_b[i], GTK_ALIGN_CENTER); gtk_grid_attach(GTK_GRID(t), _b[i], 2, i, 1, 1); -#else - gtk_table_attach(GTK_TABLE(t), _b[i], 2, 3, i, i + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD); -#endif /* Attach channel value to adjustment */ g_object_set_data(G_OBJECT(_a[i]), "channel", GINT_TO_POINTER(i)); @@ -272,7 +250,6 @@ void ColorScales::_setRangeLimit(gdouble upper) _rangeLimit = upper; for (gint i = 0; i < static_cast(G_N_ELEMENTS(_a)); i++) { gtk_adjustment_set_upper(_a[i], upper); - gtk_adjustment_changed(_a[i]); } } @@ -286,11 +263,7 @@ void ColorScales::_onColorChanged() void ColorScales::on_show() { -#if GTK_CHECK_VERSION(3, 0, 0) Gtk::Grid::on_show(); -#else - Gtk::Table::on_show(); -#endif _updateDisplay(); } diff --git a/src/ui/widget/color-scales.h b/src/ui/widget/color-scales.h index aeacfbcc1..1e86d762d 100644 --- a/src/ui/widget/color-scales.h +++ b/src/ui/widget/color-scales.h @@ -5,11 +5,7 @@ #include #endif -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include "ui/selected-color.h" @@ -27,11 +23,7 @@ typedef enum { } SPColorScalesMode; class ColorScales -#if GTK_CHECK_VERSION(3, 0, 0) : public Gtk::Grid -#else - : public Gtk::Table -#endif { public: static const gchar *SUBMODE_NAMES[]; diff --git a/src/ui/widget/color-slider.cpp b/src/ui/widget/color-slider.cpp index 0c9586a67..2a8b6a7a2 100644 --- a/src/ui/widget/color-slider.cpp +++ b/src/ui/widget/color-slider.cpp @@ -19,12 +19,7 @@ #include #include #include -#if WITH_GTKMM_3_0 #include -#else -#include -#endif -#include #include "ui/widget/color-scales.h" #include "ui/widget/color-slider.h" @@ -43,14 +38,8 @@ namespace Inkscape { namespace UI { namespace Widget { -#if GTK_CHECK_VERSION(3, 0, 0) ColorSlider::ColorSlider(Glib::RefPtr adjustment) : _dragging(false) -#else -ColorSlider::ColorSlider(Gtk::Adjustment *adjustment) - : _dragging(false) - , _adjustment(NULL) -#endif , _value(0.0) , _oldvalue(0.0) , _mapsize(0) @@ -83,12 +72,7 @@ ColorSlider::~ColorSlider() if (_adjustment) { _adjustment_changed_connection.disconnect(); _adjustment_value_changed_connection.disconnect(); -#if GTK_CHECK_VERSION(3, 0, 0) _adjustment.reset(); -#else - _adjustment->unreference(); - _adjustment = NULL; -#endif } } @@ -109,26 +93,15 @@ void ColorSlider::on_realize() attributes.window_type = GDK_WINDOW_CHILD; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gdk_screen_get_system_visual(gdk_screen_get_default()); -#if !GTK_CHECK_VERSION(3, 0, 0) - attributes.colormap = gdk_screen_get_system_colormap(gdk_screen_get_default()); -#endif attributes.event_mask = get_events(); attributes.event_mask |= (Gdk::EXPOSURE_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::POINTER_MOTION_MASK | Gdk::ENTER_NOTIFY_MASK | Gdk::LEAVE_NOTIFY_MASK); -#if GTK_CHECK_VERSION(3, 0, 0) attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL; -#else - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; -#endif _gdk_window = Gdk::Window::create(get_parent_window(), &attributes, attributes_mask); set_window(_gdk_window); _gdk_window->set_user_data(gobj()); - -#if !GTK_CHECK_VERSION(3, 0, 0) - style_attach(); -#endif } } @@ -149,8 +122,6 @@ void ColorSlider::on_size_allocate(Gtk::Allocation &allocation) } } -#if GTK_CHECK_VERSION(3, 0, 0) - void ColorSlider::get_preferred_width_vfunc(int &minimum_width, int &natural_width) const { Glib::RefPtr style_context = get_style_context(); @@ -177,38 +148,12 @@ void ColorSlider::get_preferred_height_for_width_vfunc(int /*width*/, int &minim get_preferred_height(minimum_height, natural_height); } -#else - -void ColorSlider::on_size_request(Gtk::Requisition *requisition) -{ - GtkStyle *style = gtk_widget_get_style(gobj()); - requisition->width = SLIDER_WIDTH + style->xthickness * 2; - requisition->height = SLIDER_HEIGHT + style->ythickness * 2; -} - -bool ColorSlider::on_expose_event(GdkEventExpose *event) -{ - bool result = false; - - if (get_is_drawable()) { - Cairo::RefPtr cr = _gdk_window->create_cairo_context(); - result = on_draw(cr); - } - return result; -} - -#endif - bool ColorSlider::on_button_press_event(GdkEventButton *event) { if (event->button == 1) { Gtk::Allocation allocation = get_allocation(); gint cx, cw; -#if GTK_CHECK_VERSION(3, 0, 0) cx = get_style_context()->get_padding(get_state_flags()).get_left(); -#else - cx = get_style()->get_xthickness(); -#endif cw = allocation.get_width() - 2 * cx; signal_grabbed.emit(); _dragging = true; @@ -216,15 +161,9 @@ bool ColorSlider::on_button_press_event(GdkEventButton *event) ColorScales::setScaled(_adjustment->gobj(), CLAMP((gfloat)(event->x - cx) / cw, 0.0, 1.0)); signal_dragged.emit(); -#if GTK_CHECK_VERSION(3, 0, 0) gdk_device_grab( gdk_event_get_device(reinterpret_cast(event)), _gdk_window->gobj(), GDK_OWNERSHIP_NONE, FALSE, static_cast(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK), NULL, event->time); -#else - gdk_pointer_grab(get_window()->gobj(), FALSE, - static_cast(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK), NULL, NULL, - event->time); -#endif } return false; @@ -233,13 +172,8 @@ bool ColorSlider::on_button_press_event(GdkEventButton *event) bool ColorSlider::on_button_release_event(GdkEventButton *event) { if (event->button == 1) { - -#if GTK_CHECK_VERSION(3, 0, 0) gdk_device_ungrab(gdk_event_get_device(reinterpret_cast(event)), gdk_event_get_time(reinterpret_cast(event))); -#else - get_window()->pointer_ungrab(event->time); -#endif _dragging = false; signal_released.emit(); @@ -256,11 +190,7 @@ bool ColorSlider::on_motion_notify_event(GdkEventMotion *event) if (_dragging) { gint cx, cw; Gtk::Allocation allocation = get_allocation(); -#if GTK_CHECK_VERSION(3, 0, 0) cx = get_style_context()->get_padding(get_state_flags()).get_left(); -#else - cx = get_style()->get_xthickness(); -#endif cw = allocation.get_width() - 2 * cx; ColorScales::setScaled(_adjustment->gobj(), CLAMP((gfloat)(event->x - cx) / cw, 0.0, 1.0)); signal_dragged.emit(); @@ -269,19 +199,10 @@ bool ColorSlider::on_motion_notify_event(GdkEventMotion *event) return false; } -#if GTK_CHECK_VERSION(3, 0, 0) void ColorSlider::setAdjustment(Glib::RefPtr adjustment) { -#else -void ColorSlider::setAdjustment(Gtk::Adjustment *adjustment) -{ -#endif if (!adjustment) { -#if GTK_CHECK_VERSION(3, 0, 0) _adjustment = Gtk::Adjustment::create(0.0, 0.0, 1.0, 0.01, 0.0, 0.0); -#else - _adjustment = Gtk::manage(new Gtk::Adjustment(0.0, 0.0, 1.0, 0.01, 0.0, 0.0)); -#endif } else { adjustment->set_page_increment(0.0); @@ -292,9 +213,6 @@ void ColorSlider::setAdjustment(Gtk::Adjustment *adjustment) if (_adjustment) { _adjustment_changed_connection.disconnect(); _adjustment_value_changed_connection.disconnect(); -#if !GTK_CHECK_VERSION(3, 0, 0) - _adjustment->unreference(); -#endif } _adjustment = adjustment; @@ -315,18 +233,11 @@ void ColorSlider::_onAdjustmentValueChanged() { if (_value != ColorScales::getScaled(_adjustment->gobj())) { gint cx, cy, cw, ch; -#if GTK_CHECK_VERSION(3, 0, 0) - Glib::RefPtr style_context = get_style_context(); - Gtk::Allocation allocation = get_allocation(); - Gtk::Border padding = style_context->get_padding(get_state_flags()); + auto style_context = get_style_context(); + auto allocation = get_allocation(); + auto padding = style_context->get_padding(get_state_flags()); cx = padding.get_left(); cy = padding.get_top(); -#else - Glib::RefPtr style = get_style(); - Gtk::Allocation allocation = get_allocation(); - cx = style->get_xthickness(); - cy = style->get_ythickness(); -#endif cw = allocation.get_width() - 2 * cx; ch = allocation.get_height() - 2 * cy; if ((gint)(ColorScales::getScaled(_adjustment->gobj()) * cw) != (gint)(_value * cw)) { @@ -390,40 +301,22 @@ bool ColorSlider::on_draw(const Cairo::RefPtr &cr) { gboolean colorsOnTop = Inkscape::Preferences::get()->getBool("/options/workarounds/colorsontop", false); - Gtk::Allocation allocation = get_allocation(); - -#if GTK_CHECK_VERSION(3, 0, 0) - Glib::RefPtr style_context = get_style_context(); -#else - Glib::RefPtr window = get_window(); - Glib::RefPtr style = get_style(); -#endif + auto allocation = get_allocation(); + auto style_context = get_style_context(); // Draw shadow if (colorsOnTop) { -#if GTK_CHECK_VERSION(3, 0, 0) style_context->render_frame(cr, 0, 0, allocation.get_width(), allocation.get_height()); -#else - gtk_paint_shadow(style->gobj(), window->gobj(), gtk_widget_get_state(gobj()), GTK_SHADOW_IN, NULL, gobj(), - "colorslider", 0, 0, allocation.get_width(), allocation.get_height()); -#endif } /* Paintable part of color gradient area */ Gdk::Rectangle carea; - -#if GTK_CHECK_VERSION(3, 0, 0) Gtk::Border padding; padding = style_context->get_padding(get_state_flags()); carea.set_x(padding.get_left()); carea.set_y(padding.get_top()); - ; -#else - carea.set_x(style->get_xthickness()); - carea.set_y(style->get_ythickness()); -#endif carea.set_width(allocation.get_width() - 2 * carea.get_x()); carea.set_height(allocation.get_height() - 2 * carea.get_y()); @@ -491,12 +384,7 @@ bool ColorSlider::on_draw(const Cairo::RefPtr &cr) /* Draw shadow */ if (!colorsOnTop) { -#if GTK_CHECK_VERSION(3, 0, 0) style_context->render_frame(cr, 0, 0, allocation.get_width(), allocation.get_height()); -#else - gtk_paint_shadow(style->gobj(), window->gobj(), gtk_widget_get_state(gobj()), GTK_SHADOW_IN, NULL, gobj(), - "colorslider", 0, 0, allocation.get_width(), allocation.get_height()); -#endif } /* Draw arrow */ diff --git a/src/ui/widget/color-slider.h b/src/ui/widget/color-slider.h index 253f3123c..9be6c356a 100644 --- a/src/ui/widget/color-slider.h +++ b/src/ui/widget/color-slider.h @@ -24,18 +24,10 @@ namespace Widget { */ class ColorSlider : public Gtk::Widget { public: -#if GTK_CHECK_VERSION(3, 0, 0) ColorSlider(Glib::RefPtr adjustment); -#else - ColorSlider(Gtk::Adjustment *adjustment); -#endif ~ColorSlider(); -#if GTK_CHECK_VERSION(3, 0, 0) void setAdjustment(Glib::RefPtr adjustment); -#else - void setAdjustment(Gtk::Adjustment *adjustment); -#endif void setColors(guint32 start, guint32 mid, guint32 end); @@ -56,16 +48,10 @@ protected: bool on_button_release_event(GdkEventButton *event); bool on_motion_notify_event(GdkEventMotion *event); bool on_draw(const Cairo::RefPtr &cr); - -#if GTK_CHECK_VERSION(3, 0, 0) void get_preferred_width_vfunc(int &minimum_width, int &natural_width) const; void get_preferred_width_for_height_vfunc(int height, int &minimum_width, int &natural_width) const; void get_preferred_height_vfunc(int &minimum_height, int &natural_height) const; void get_preferred_height_for_width_vfunc(int width, int &minimum_height, int &natural_height) const; -#else - void on_size_request(Gtk::Requisition *requisition); - bool on_expose_event(GdkEventExpose *event); -#endif private: void _onAdjustmentChanged(); @@ -73,11 +59,7 @@ private: bool _dragging; -#if GTK_CHECK_VERSION(3, 0, 0) Glib::RefPtr _adjustment; -#else - Gtk::Adjustment *_adjustment; -#endif sigc::connection _adjustment_changed_connection; sigc::connection _adjustment_value_changed_connection; diff --git a/src/ui/widget/color-wheel-selector.cpp b/src/ui/widget/color-wheel-selector.cpp index 22c616325..9b4119572 100644 --- a/src/ui/widget/color-wheel-selector.cpp +++ b/src/ui/widget/color-wheel-selector.cpp @@ -29,16 +29,9 @@ namespace Widget { const gchar *ColorWheelSelector::MODE_NAME = N_("Wheel"); ColorWheelSelector::ColorWheelSelector(SelectedColor &color) -#if GTK_CHECK_VERSION(3, 0, 0) : Gtk::Grid() -#else - : Gtk::Table(5, 3, false) -#endif , _color(color) , _updating(false) -#if !GTK_CHECK_VERSION(3, 0, 0) - , _alpha_adjustment(NULL) -#endif , _wheel(0) , _slider(0) { @@ -50,9 +43,6 @@ ColorWheelSelector::ColorWheelSelector(SelectedColor &color) ColorWheelSelector::~ColorWheelSelector() { _wheel = 0; -#if !GTK_CHECK_VERSION(3, 0, 0) - delete _alpha_adjustment; -#endif _color_changed_connection.disconnect(); _color_dragged_connection.disconnect(); @@ -66,16 +56,11 @@ void ColorWheelSelector::_initUI() _wheel = gimp_color_wheel_new(); gtk_widget_show(_wheel); -#if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_set_halign(_wheel, GTK_ALIGN_FILL); gtk_widget_set_valign(_wheel, GTK_ALIGN_FILL); gtk_widget_set_hexpand(_wheel, TRUE); gtk_widget_set_vexpand(_wheel, TRUE); gtk_grid_attach(GTK_GRID(gobj()), _wheel, 0, row, 3, 1); -#else - gtk_table_attach(GTK_TABLE(gobj()), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); -#endif row++; @@ -84,7 +69,6 @@ void ColorWheelSelector::_initUI() label->set_alignment(1.0, 0.5); label->show(); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) label->set_margin_start(XPAD); label->set_margin_end(XPAD); @@ -97,22 +81,15 @@ void ColorWheelSelector::_initUI() label->set_halign(Gtk::ALIGN_FILL); label->set_valign(Gtk::ALIGN_FILL); attach(*label, 0, row, 1, 1); -#else - attach(*label, 0, 1, row, row + 1, Gtk::FILL, Gtk::FILL, XPAD, YPAD); -#endif -/* Adjustment */ -#if GTK_CHECK_VERSION(3, 0, 0) + /* Adjustment */ _alpha_adjustment = Gtk::Adjustment::create(0.0, 0.0, 255.0, 1.0, 10.0, 10.0); -#else - _alpha_adjustment = new Gtk::Adjustment(0.0, 0.0, 255.0, 1.0, 10.0, 10.0); -#endif + /* Slider */ _slider = Gtk::manage(new Inkscape::UI::Widget::ColorSlider(_alpha_adjustment)); _slider->set_tooltip_text(_("Alpha (opacity)")); _slider->show(); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) _slider->set_margin_start(XPAD); _slider->set_margin_end(XPAD); @@ -126,25 +103,17 @@ void ColorWheelSelector::_initUI() _slider->set_halign(Gtk::ALIGN_FILL); _slider->set_valign(Gtk::ALIGN_FILL); attach(*_slider, 1, row, 1, 1); -#else - attach(*_slider, 1, 2, row, row + 1, Gtk::EXPAND | Gtk::FILL, Gtk::FILL, XPAD, YPAD); -#endif _slider->setColors(SP_RGBA32_F_COMPOSE(1.0, 1.0, 1.0, 0.0), SP_RGBA32_F_COMPOSE(1.0, 1.0, 1.0, 0.5), SP_RGBA32_F_COMPOSE(1.0, 1.0, 1.0, 1.0)); -/* Spinbutton */ -#if GTK_CHECK_VERSION(3, 0, 0) - Gtk::SpinButton *spin_button = Gtk::manage(new Gtk::SpinButton(_alpha_adjustment, 1.0, 0)); -#else - Gtk::SpinButton *spin_button = Gtk::manage(new Gtk::SpinButton(*_alpha_adjustment, 1.0, 0)); -#endif + /* Spinbutton */ + auto spin_button = Gtk::manage(new Gtk::SpinButton(_alpha_adjustment, 1.0, 0)); spin_button->set_tooltip_text(_("Alpha (opacity)")); sp_dialog_defocus_on_enter(GTK_WIDGET(spin_button->gobj())); label->set_mnemonic_widget(*spin_button); spin_button->show(); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) spin_button->set_margin_start(XPAD); spin_button->set_margin_end(XPAD); @@ -157,9 +126,6 @@ void ColorWheelSelector::_initUI() spin_button->set_halign(Gtk::ALIGN_CENTER); spin_button->set_valign(Gtk::ALIGN_CENTER); attach(*spin_button, 2, row, 1, 1); -#else - attach(*spin_button, 2, 3, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, XPAD, YPAD); -#endif /* Signals */ _alpha_adjustment->signal_value_changed().connect(sigc::mem_fun(this, &ColorWheelSelector::_adjustmentChanged)); @@ -172,11 +138,7 @@ void ColorWheelSelector::_initUI() void ColorWheelSelector::on_show() { -#if GTK_CHECK_VERSION(3, 0, 0) Gtk::Grid::on_show(); -#else - Gtk::Table::on_show(); -#endif _updateDisplay(); } diff --git a/src/ui/widget/color-wheel-selector.h b/src/ui/widget/color-wheel-selector.h index 5711d417c..ee7bd9b83 100644 --- a/src/ui/widget/color-wheel-selector.h +++ b/src/ui/widget/color-wheel-selector.h @@ -16,11 +16,7 @@ #include #endif -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include "ui/selected-color.h" @@ -33,11 +29,7 @@ namespace Widget { class ColorSlider; class ColorWheelSelector -#if GTK_CHECK_VERSION(3, 0, 0) : public Gtk::Grid -#else - : public Gtk::Table -#endif { public: static const gchar *MODE_NAME; @@ -61,11 +53,7 @@ protected: SelectedColor &_color; bool _updating; -#if GTK_CHECK_VERSION(3, 0, 0) Glib::RefPtr _alpha_adjustment; -#else - Gtk::Adjustment *_alpha_adjustment; -#endif GtkWidget *_wheel; Inkscape::UI::Widget::ColorSlider *_slider; diff --git a/src/ui/widget/dock-item.cpp b/src/ui/widget/dock-item.cpp index 8d960ddc3..fc41efe52 100644 --- a/src/ui/widget/dock-item.cpp +++ b/src/ui/widget/dock-item.cpp @@ -59,11 +59,7 @@ DockItem::DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& l Gtk::StockItem item; Gtk::StockID stockId(icon_name); if ( Gtk::StockItem::lookup(stockId, item) ) { -#if WITH_GTKMM_3_0 _icon_pixbuf = _dock.getWidget().render_icon_pixbuf( stockId, Gtk::ICON_SIZE_MENU ); -#else - _icon_pixbuf = _dock.getWidget().render_icon( stockId, Gtk::ICON_SIZE_MENU ); -#endif } } } @@ -175,12 +171,8 @@ DockItem::set_size_request(int width, int height) void DockItem::size_request(Gtk::Requisition& requisition) { -#if WITH_GTKMM_3_0 Gtk::Requisition req_natural; getWidget().get_preferred_size(req_natural, requisition); -#else - requisition = getWidget().size_request(); -#endif } void diff --git a/src/ui/widget/dock.cpp b/src/ui/widget/dock.cpp index fda647182..7744cb695 100644 --- a/src/ui/widget/dock.cpp +++ b/src/ui/widget/dock.cpp @@ -65,7 +65,6 @@ Dock::Dock(Gtk::Orientation orientation) static_cast(orientation)); #endif -#if WITH_GTKMM_3_0 switch(orientation) { case Gtk::ORIENTATION_VERTICAL: _dock_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); @@ -75,17 +74,6 @@ Dock::Dock(Gtk::Orientation orientation) } _paned = Gtk::manage(new Gtk::Paned(orientation)); -#else - switch (orientation) { - case Gtk::ORIENTATION_VERTICAL: - _dock_box = Gtk::manage(new Gtk::HBox()); - _paned = Gtk::manage(new Gtk::VPaned()); - break; - case Gtk::ORIENTATION_HORIZONTAL: - _dock_box = Gtk::manage(new Gtk::VBox()); - _paned = Gtk::manage(new Gtk::HPaned()); - } -#endif _scrolled_window->add(*_dock_box); _scrolled_window->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); diff --git a/src/ui/widget/gimpspinscale.c b/src/ui/widget/gimpspinscale.c index d99646a64..8d8c6c935 100644 --- a/src/ui/widget/gimpspinscale.c +++ b/src/ui/widget/gimpspinscale.c @@ -41,10 +41,8 @@ typedef enum { TARGET_NUMBER, TARGET_UPPER, - TARGET_LOWER -#if WITH_GTKMM_3_0 - ,TARGET_NONE -#endif + TARGET_LOWER, + TARGET_NONE } SpinScaleTarget; typedef enum @@ -94,7 +92,6 @@ static void gimp_spin_scale_get_property (GObject *object, static void gimp_spin_scale_style_set (GtkWidget *widget, GtkStyle *prev_style); -#if WITH_GTKMM_3_0 static void gimp_spin_scale_get_preferred_width (GtkWidget *widget, gint *minimum_width, gint *natural_width); @@ -103,13 +100,6 @@ static void gimp_spin_scale_get_preferred_height (GtkWidget *widget gint *natural_width); static gboolean gimp_spin_scale_draw (GtkWidget *widget, cairo_t *cr); -#else -static void gimp_spin_scale_size_request (GtkWidget *widget, - GtkRequisition *requisition); - -static gboolean gimp_spin_scale_expose (GtkWidget *widget, - GdkEventExpose *event); -#endif static gboolean gimp_spin_scale_button_press (GtkWidget *widget, GdkEventButton *event); @@ -145,14 +135,9 @@ gimp_spin_scale_class_init (GimpSpinScaleClass *klass) object_class->get_property = gimp_spin_scale_get_property; widget_class->style_set = gimp_spin_scale_style_set; -#if WITH_GTKMM_3_0 widget_class->get_preferred_width = gimp_spin_scale_get_preferred_width; widget_class->get_preferred_height = gimp_spin_scale_get_preferred_height; widget_class->draw = gimp_spin_scale_draw; -#else - widget_class->size_request = gimp_spin_scale_size_request; - widget_class->expose_event = gimp_spin_scale_expose; -#endif widget_class->button_press_event = gimp_spin_scale_button_press; widget_class->button_release_event = gimp_spin_scale_button_release; widget_class->motion_notify_event = gimp_spin_scale_motion_notify; @@ -294,7 +279,6 @@ gimp_spin_scale_set_appearance( GtkWidget *widget, const gchar *appearance) } } -#if GTK_CHECK_VERSION(3,0,0) static void gimp_spin_scale_get_preferred_width (GtkWidget *widget, gint *minimum_width, @@ -355,48 +339,6 @@ gimp_spin_scale_get_preferred_height (GtkWidget *widget, pango_font_metrics_unref (metrics); } -#else -static void -gimp_spin_scale_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (widget); - GtkStyle *style = gtk_widget_get_style (widget); - PangoContext *context = gtk_widget_get_pango_context (widget); - PangoFontMetrics *metrics; - gint height; - - GTK_WIDGET_CLASS (parent_class)->size_request (widget, requisition); - - metrics = pango_context_get_metrics (context, style->font_desc, - pango_context_get_language (context)); - - height = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics) + - pango_font_metrics_get_descent (metrics)); - - if (private->appearanceMode == APPEARANCE_COMPACT) { - requisition->height += 1; - } else { - requisition->height += height; - } - - if (private->label) - { - gint char_width; - gint digit_width; - gint char_pixels; - - char_width = pango_font_metrics_get_approximate_char_width (metrics); - digit_width = pango_font_metrics_get_approximate_digit_width (metrics); - char_pixels = PANGO_PIXELS (MAX (char_width, digit_width)); - - /* ~3 chars for the ellipses */ - requisition->width += char_pixels * 3; - } - - pango_font_metrics_unref (metrics); -} -#endif static void gimp_spin_scale_style_set (GtkWidget *widget, @@ -415,16 +357,10 @@ gimp_spin_scale_style_set (GtkWidget *widget, static gboolean -#if GTK_CHECK_VERSION(3,0,0) gimp_spin_scale_draw (GtkWidget *widget, cairo_t *cr) -#else - gimp_spin_scale_expose (GtkWidget *widget, - GdkEventExpose *event) -#endif { GimpSpinScalePrivate *private = GET_PRIVATE (widget); -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *style = gtk_widget_get_style_context(widget); GtkAllocation allocation; GdkRGBA color; @@ -434,66 +370,31 @@ static gboolean cairo_restore (cr); gtk_widget_get_allocation (widget, &allocation); -#else - GtkStyle *style = gtk_widget_get_style (widget); - cairo_t *cr; - gint w; - - GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event); - - cr = gdk_cairo_create (event->window); - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - - w = gdk_window_get_width (event->window); -#endif cairo_set_line_width (cr, 1.0); -#if GTK_CHECK_VERSION(3,0,0) if (private->label) { GdkRectangle text_area; gint minimum_width; gint natural_width; -#else - if (private->label && - gtk_widget_is_drawable (widget) && - event->window == gtk_entry_get_text_window (GTK_ENTRY (widget))) - { - GtkRequisition requisition; - GtkAllocation allocation; -#endif PangoRectangle logical; gint layout_offset_x; gint layout_offset_y; -#if GTK_CHECK_VERSION(3,0,0) GtkStateFlags state; GdkRGBA text_color; GdkRGBA bar_text_color; -#else - GtkStateType state; - GdkColor text_color; - GdkColor bar_text_color; - gint window_width; - gint window_height; -#endif gdouble progress_fraction; gint progress_x; gint progress_y; gint progress_width; gint progress_height; -#if GTK_CHECK_VERSION(3,0,0) gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); GTK_WIDGET_CLASS (parent_class)->get_preferred_width (widget, &minimum_width, &natural_width); -#else - GTK_WIDGET_CLASS (parent_class)->size_request (widget, &requisition); - gtk_widget_get_allocation (widget, &allocation); -#endif if (! private->layout) { @@ -504,27 +405,18 @@ static gboolean pango_layout_set_width (private->layout, PANGO_SCALE * -#if GTK_CHECK_VERSION(3,0,0) (allocation.width - minimum_width)); -#else - (allocation.width - requisition.width)); -#endif pango_layout_get_pixel_extents (private->layout, NULL, &logical); gtk_entry_get_layout_offsets (GTK_ENTRY (widget), NULL, &layout_offset_y); if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) -#if GTK_CHECK_VERSION(3,0,0) layout_offset_x = text_area.x + text_area.width - logical.width - 4; -#else - layout_offset_x = w - logical.width - 4; -#endif else layout_offset_x = 4; layout_offset_x -= logical.x; -#if GTK_CHECK_VERSION(3,0,0) state = gtk_widget_get_state_flags (widget); gtk_style_context_get_color (style, state, &text_color); @@ -533,16 +425,6 @@ static gboolean gtk_style_context_add_class (style, GTK_STYLE_CLASS_PROGRESSBAR); gtk_style_context_get_color (style, state, &bar_text_color); gtk_style_context_restore (style); -#else - state = GTK_STATE_SELECTED; - if (! gtk_widget_get_sensitive (widget)) - state = GTK_STATE_INSENSITIVE; - text_color = style->text[gtk_widget_get_state (widget)]; - bar_text_color = style->fg[state]; - - window_width = gdk_window_get_width (event->window); - window_height = gdk_window_get_height (event->window); -#endif progress_fraction = gtk_entry_get_progress_fraction (GTK_ENTRY (widget)); @@ -550,53 +432,30 @@ static gboolean { progress_fraction = 1.0 - progress_fraction; -#if GTK_CHECK_VERSION(3,0,0) progress_x = text_area.width * progress_fraction; -#else - progress_x = window_width * progress_fraction; -#endif progress_y = 0; -#if GTK_CHECK_VERSION(3,0,0) progress_width = text_area.width - progress_x; progress_height = text_area.height; -#else - progress_width = window_width - progress_x; - progress_height = window_height; -#endif } else { progress_x = 0; progress_y = 0; -#if GTK_CHECK_VERSION(3,0,0) progress_width = text_area.width * progress_fraction; progress_height = text_area.height; -#else - progress_width = window_width * progress_fraction; - progress_height = window_height; -#endif } cairo_save (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); -#if GTK_CHECK_VERSION(3,0,0) cairo_rectangle (cr, 0, 0, text_area.width, text_area.height); -#else - cairo_rectangle (cr, 0, 0, window_width, window_height); -#endif cairo_rectangle (cr, progress_x, progress_y, progress_width, progress_height); cairo_clip (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_WINDING); -#if GTK_CHECK_VERSION(3,0,0) cairo_move_to (cr, layout_offset_x, text_area.y + layout_offset_y-3); gdk_cairo_set_source_rgba (cr, &text_color); -#else - cairo_move_to (cr, layout_offset_x, layout_offset_y-3); - gdk_cairo_set_source_color (cr, &text_color); -#endif pango_cairo_show_layout (cr, private->layout); cairo_restore (cr); @@ -604,24 +463,14 @@ static gboolean progress_width, progress_height); cairo_clip (cr); -#if GTK_CHECK_VERSION(3,0,0) cairo_move_to (cr, layout_offset_x, text_area.y + layout_offset_y-3); gdk_cairo_set_source_rgba (cr, &bar_text_color); -#else - cairo_move_to (cr, layout_offset_x, layout_offset_y-3); - gdk_cairo_set_source_color (cr, &bar_text_color); -#endif pango_cairo_show_layout (cr, private->layout); } -#if !GTK_CHECK_VERSION(3,0,0) - cairo_destroy (cr); -#endif - return FALSE; } -#if WITH_GTKMM_3_0 /* Returns TRUE if a translation should be done */ static gboolean gtk_widget_get_translation_to_window (GtkWidget *widget, @@ -685,7 +534,6 @@ gimp_spin_scale_event_to_widget_coords (GtkWidget *widget, *widget_x = event_x; *widget_y = event_y; } -#endif static SpinScaleTarget gimp_spin_scale_get_target (GtkWidget *widget, @@ -702,7 +550,6 @@ gimp_spin_scale_get_target (GtkWidget *widget, pango_layout_get_pixel_extents (gtk_entry_get_layout (GTK_ENTRY (widget)), NULL, &logical); -#if WITH_GTKMM_3_0 GdkRectangle text_area; gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); @@ -726,19 +573,6 @@ gimp_spin_scale_get_target (GtkWidget *widget, } return TARGET_NONE; -#else - if (x > layout_x && x < layout_x + logical.width && - y > layout_y && y < layout_y + logical.height) - { - return TARGET_NUMBER; - } - - else if (y > allocation.height / 2) - { - return TARGET_LOWER; - } - return TARGET_UPPER; -#endif } static void @@ -773,49 +607,21 @@ gimp_spin_scale_change_value (GtkWidget *widget, gdouble lower; gdouble upper; gdouble value; -#if WITH_GTKMM_3_0 -#else -#endif -#if WITH_GTKMM_3_0 GdkRectangle text_area; gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); gimp_spin_scale_get_limits (GIMP_SPIN_SCALE (widget), &lower, &upper); -#else - GdkWindow *text_window = gtk_entry_get_text_window (GTK_ENTRY (widget)); - gint width; - - gimp_spin_scale_get_limits (GIMP_SPIN_SCALE (widget), &lower, &upper); - - width = gdk_window_get_width (text_window); -#endif - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) -#if WITH_GTKMM_3_0 x = text_area.width - x; -#else - x = width - x; -#endif - if (private->relative_change) { gdouble diff; gdouble step; - -#if WITH_GTKMM_3_0 step = (upper - lower) / text_area.width / 10.0; -#else - step = (upper - lower) / width / 10.0; -#endif if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - -#if WITH_GTKMM_3_0 diff = x - (text_area.width - private->start_x); -#else - diff = x - (width - private->start_x); -#endif else diff = x - private->start_x; @@ -825,12 +631,7 @@ gimp_spin_scale_change_value (GtkWidget *widget, { gdouble fraction; - -#if WITH_GTKMM_3_0 fraction = x / (gdouble) text_area.width; -#else - fraction = x / (gdouble) width; -#endif if (fraction > 0.0) fraction = pow (fraction, private->gamma); @@ -849,7 +650,6 @@ gimp_spin_scale_button_press (GtkWidget *widget, private->changing_value = FALSE; private->relative_change = FALSE; -#if WITH_GTKMM_3_0 gint x, y; gimp_spin_scale_event_to_widget_coords (widget, event->window, event->x, event->y, @@ -879,36 +679,6 @@ gimp_spin_scale_button_press (GtkWidget *widget, default: break; } -#else - if (event->window == gtk_entry_get_text_window (GTK_ENTRY (widget))) - { - switch (gimp_spin_scale_get_target (widget, event->x, event->y)) - { - case TARGET_UPPER: - private->changing_value = TRUE; - - gtk_widget_grab_focus (widget); - - gimp_spin_scale_change_value (widget, event->x); - - return TRUE; - - case TARGET_LOWER: - private->changing_value = TRUE; - - gtk_widget_grab_focus (widget); - - private->relative_change = TRUE; - private->start_x = event->x; - private->start_value = gtk_adjustment_get_value (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget))); - - return TRUE; - - default: - break; - } - } -#endif return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, event); } @@ -918,22 +688,16 @@ gimp_spin_scale_button_release (GtkWidget *widget, GdkEventButton *event) { GimpSpinScalePrivate *private = GET_PRIVATE (widget); -#if WITH_GTKMM_3_0 gint x, y; gimp_spin_scale_event_to_widget_coords (widget, event->window, event->x, event->y, &x, &y); -#endif if (private->changing_value) { private->changing_value = FALSE; -#if WITH_GTKMM_3_0 gimp_spin_scale_change_value (widget, x); -#else - gimp_spin_scale_change_value (widget, event->x); -#endif return TRUE; } @@ -948,21 +712,15 @@ gimp_spin_scale_motion_notify (GtkWidget *widget, gdk_event_request_motions (event); -#if WITH_GTKMM_3_0 gint x, y; gimp_spin_scale_event_to_widget_coords (widget, event->window, event->x, event->y, &x, &y); -#endif if (private->changing_value) { -#if WITH_GTKMM_3_0 gimp_spin_scale_change_value (widget, x); -#else - gimp_spin_scale_change_value (widget, event->x); -#endif return TRUE; } @@ -971,20 +729,12 @@ gimp_spin_scale_motion_notify (GtkWidget *widget, if (! (event->state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK)) -#if WITH_GTKMM_3_0 -#else - && event->window == gtk_entry_get_text_window (GTK_ENTRY (widget)) -#endif ) { GdkDisplay *display = gtk_widget_get_display (widget); GdkCursor *cursor = NULL; -#if WITH_GTKMM_3_0 switch (gimp_spin_scale_get_target (widget, x, y)) -#else - switch (gimp_spin_scale_get_target (widget, event->x, event->y)) -#endif { case TARGET_NUMBER: cursor = gdk_cursor_new_for_display (display, GDK_XTERM); @@ -1002,17 +752,11 @@ gimp_spin_scale_motion_notify (GtkWidget *widget, break; } - -#if WITH_GTKMM_3_0 if (cursor) { gdk_window_set_cursor (event->window, cursor); g_object_unref (cursor); } -#else - gdk_window_set_cursor (event->window, cursor); - gdk_cursor_unref (cursor); -#endif } return FALSE; diff --git a/src/ui/widget/highlight-picker.cpp b/src/ui/widget/highlight-picker.cpp index 09999b52d..e4447cb9e 100644 --- a/src/ui/widget/highlight-picker.cpp +++ b/src/ui/widget/highlight-picker.cpp @@ -35,8 +35,6 @@ HighlightPicker::~HighlightPicker() { } - -#if WITH_GTKMM_3_0 void HighlightPicker::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -66,39 +64,12 @@ void HighlightPicker::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void HighlightPicker::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width = 10;//+= (*width) >> 1; - } - if ( height ) { - *height = 20; //cell_area ? cell_area->get_height() / 2 : 50; //+= (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void HighlightPicker::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void HighlightPicker::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { GdkRectangle carea; @@ -140,11 +111,7 @@ void HighlightPicker::render_vfunc( const Glib::RefPtr& window, convert_pixbuf_argb32_to_normal(pixbuf); property_pixbuf() = Glib::wrap(pixbuf); -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool HighlightPicker::activate_vfunc(GdkEvent* /*event*/, diff --git a/src/ui/widget/highlight-picker.h b/src/ui/widget/highlight-picker.h index c5fe4c02c..c459b0dcd 100644 --- a/src/ui/widget/highlight-picker.h +++ b/src/ui/widget/highlight-picker.h @@ -29,8 +29,6 @@ public: Glib::PropertyProxy property_active() { return _property_active.get_proxy(); } protected: - -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -44,18 +42,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/imagetoggler.cpp b/src/ui/widget/imagetoggler.cpp index 29907f4c9..987cc67bb 100644 --- a/src/ui/widget/imagetoggler.cpp +++ b/src/ui/widget/imagetoggler.cpp @@ -53,8 +53,6 @@ ImageToggler::ImageToggler( char const* on, char const* off) : property_pixbuf() = _property_pixbuf_off.get_value(); } - -#if WITH_GTKMM_3_0 void ImageToggler::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -84,46 +82,15 @@ void ImageToggler::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void ImageToggler::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width += (*width) >> 1; - } - if ( height ) { - *height += (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void ImageToggler::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void ImageToggler::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { property_pixbuf() = _property_active.get_value() ? _property_pixbuf_on : _property_pixbuf_off; -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool diff --git a/src/ui/widget/imagetoggler.h b/src/ui/widget/imagetoggler.h index 7b02fa4dc..d4f27cf11 100644 --- a/src/ui/widget/imagetoggler.h +++ b/src/ui/widget/imagetoggler.h @@ -36,8 +36,6 @@ public: Glib::PropertyProxy< Glib::RefPtr > property_pixbuf_off(); protected: - -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -51,18 +49,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/insertordericon.cpp b/src/ui/widget/insertordericon.cpp index 9aec7d135..7ed1ed2e2 100644 --- a/src/ui/widget/insertordericon.cpp +++ b/src/ui/widget/insertordericon.cpp @@ -52,7 +52,6 @@ InsertOrderIcon::InsertOrderIcon() : } -#if WITH_GTKMM_3_0 void InsertOrderIcon::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -82,39 +81,12 @@ void InsertOrderIcon::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void InsertOrderIcon::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width = phys;//+= (*width) >> 1; - } - if ( height ) { - *height =phys;//+= (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void InsertOrderIcon::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void InsertOrderIcon::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { switch (_property_active.get_value()) { @@ -128,11 +100,7 @@ void InsertOrderIcon::render_vfunc( const Glib::RefPtr& window, property_pixbuf() = Glib::RefPtr(0); break; } -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool InsertOrderIcon::activate_vfunc(GdkEvent* /*event*/, diff --git a/src/ui/widget/insertordericon.h b/src/ui/widget/insertordericon.h index bf8ac4fa7..43188fa5b 100644 --- a/src/ui/widget/insertordericon.h +++ b/src/ui/widget/insertordericon.h @@ -33,7 +33,6 @@ public: protected: -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -47,18 +46,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/layertypeicon.cpp b/src/ui/widget/layertypeicon.cpp index 672c607e5..36742b953 100644 --- a/src/ui/widget/layertypeicon.cpp +++ b/src/ui/widget/layertypeicon.cpp @@ -64,8 +64,6 @@ LayerTypeIcon::LayerTypeIcon() : property_pixbuf() = _property_pixbuf_path.get_value(); } - -#if WITH_GTKMM_3_0 void LayerTypeIcon::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -95,46 +93,15 @@ void LayerTypeIcon::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void LayerTypeIcon::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width += (*width) >> 1; - } - if ( height ) { - *height += (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void LayerTypeIcon::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void LayerTypeIcon::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { property_pixbuf() = _property_active.get_value() == 1 ? _property_pixbuf_group : (_property_active.get_value() == 2 ? _property_pixbuf_layer : _property_pixbuf_path); -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool diff --git a/src/ui/widget/layertypeicon.h b/src/ui/widget/layertypeicon.h index 6c71ce361..f12029c12 100644 --- a/src/ui/widget/layertypeicon.h +++ b/src/ui/widget/layertypeicon.h @@ -35,8 +35,6 @@ public: Glib::PropertyProxy< Glib::RefPtr > property_pixbuf_off(); protected: - -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -50,18 +48,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/licensor.cpp b/src/ui/widget/licensor.cpp index d21e848f2..66ee612bf 100644 --- a/src/ui/widget/licensor.cpp +++ b/src/ui/widget/licensor.cpp @@ -134,18 +134,10 @@ void Licensor::update (SPDocument *doc) for (i=0; rdf_licenses[i].name; i++) if (license == &rdf_licenses[i]) break; -#if WITH_GTKMM_3_0 static_cast(get_children()[i+1])->set_active(); -#else - static_cast(children()[i+1].get_widget())->set_active(); -#endif } else { -#if WITH_GTKMM_3_0 static_cast(get_children()[0])->set_active(); -#else - static_cast(children()[0].get_widget())->set_active(); -#endif } /* update the URI */ diff --git a/src/ui/widget/notebook-page.cpp b/src/ui/widget/notebook-page.cpp index 2f03ed23b..6d8ff1d75 100644 --- a/src/ui/widget/notebook-page.cpp +++ b/src/ui/widget/notebook-page.cpp @@ -11,31 +11,19 @@ #include "notebook-page.h" -#if WITH_GTKMM_3_0 # include -#else -# include -#endif namespace Inkscape { namespace UI { namespace Widget { NotebookPage::NotebookPage(int n_rows, int n_columns, bool expand, bool fill, guint padding) -#if WITH_GTKMM_3_0 :_table(Gtk::manage(new Gtk::Grid())) -#else - :_table(Gtk::manage(new Gtk::Table(n_rows, n_columns))) -#endif { set_border_width(2); -#if WITH_GTKMM_3_0 _table->set_row_spacing(2); _table->set_column_spacing(2); -#else - _table->set_spacings(2); -#endif pack_start(*_table, expand, fill, padding); } diff --git a/src/ui/widget/notebook-page.h b/src/ui/widget/notebook-page.h index c11de1b5b..6eb23907c 100644 --- a/src/ui/widget/notebook-page.h +++ b/src/ui/widget/notebook-page.h @@ -17,11 +17,7 @@ #include namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } namespace Inkscape { @@ -42,19 +38,10 @@ public: */ NotebookPage(int n_rows, int n_columns, bool expand=false, bool fill=false, guint padding=0); -#if WITH_GTKMM_3_0 Gtk::Grid& table() { return *_table; } -#else - Gtk::Table& table() { return *_table; } -#endif protected: - -#if WITH_GTKMM_3_0 Gtk::Grid *_table; -#else - Gtk::Table *_table; -#endif }; } // namespace Widget diff --git a/src/ui/widget/page-sizer.cpp b/src/ui/widget/page-sizer.cpp index 19ab1a280..c71130586 100644 --- a/src/ui/widget/page-sizer.cpp +++ b/src/ui/widget/page-sizer.cpp @@ -353,7 +353,6 @@ PageSizer::PageSizer(Registry & _wr) _customDimTable.set_border_width(4); -#if WITH_GTKMM_3_0 _customDimTable.set_row_spacing(4); _customDimTable.set_column_spacing(4); @@ -372,15 +371,6 @@ PageSizer::PageSizer(Registry & _wr) _fitPageMarginExpander.set_hexpand(); _fitPageMarginExpander.set_vexpand(); _customDimTable.attach(_fitPageMarginExpander, 0, 2, 2, 1); -#else - _customDimTable.resize(3, 2); - _customDimTable.set_row_spacings(4); - _customDimTable.set_col_spacings(4); - _customDimTable.attach(_dimensionWidth, 0,1, 0,1); - _customDimTable.attach(_dimensionUnits, 1,2, 0,1); - _customDimTable.attach(_dimensionHeight, 0,1, 1,2); - _customDimTable.attach(_fitPageMarginExpander, 0,2, 2,3); -#endif _dimTabOrderGList = NULL; _dimTabOrderGList = g_list_append(_dimTabOrderGList, _dimensionWidth.gobj()); @@ -398,7 +388,6 @@ PageSizer::PageSizer(Registry & _wr) //## Set up margin settings _marginTable.set_border_width(4); -#if WITH_GTKMM_3_0 _marginTable.set_row_spacing(4); _marginTable.set_column_spacing(4); @@ -421,16 +410,6 @@ PageSizer::PageSizer(Registry & _wr) _fitPageButtonAlign.set_hexpand(); _fitPageButtonAlign.set_vexpand(); _marginTable.attach(_fitPageButtonAlign, 0, 3, 2, 1); -#else - _marginTable.set_border_width(4); - _marginTable.set_row_spacings(4); - _marginTable.set_col_spacings(4); - _marginTable.attach(_marginTopAlign, 0,2, 0,1); - _marginTable.attach(_marginLeftAlign, 0,1, 1,2); - _marginTable.attach(_marginRightAlign, 1,2, 1,2); - _marginTable.attach(_marginBottomAlign, 0,2, 2,3); - _marginTable.attach(_fitPageButtonAlign, 0,2, 3,4); -#endif _marginTopAlign.set(0.5, 0.5, 0.0, 1.0); _marginTopAlign.add(_marginTop); @@ -453,7 +432,6 @@ PageSizer::PageSizer(Registry & _wr) _scaleTable.set_border_width(4); -#if WITH_GTKMM_3_0 _scaleTable.set_row_spacing(4); _scaleTable.set_column_spacing(4); @@ -465,16 +443,6 @@ PageSizer::PageSizer(Registry & _wr) _viewboxExpander.set_hexpand(); _viewboxExpander.set_vexpand(); _scaleTable.attach(_viewboxExpander, 0, 2, 2, 1); -#else - _scaleTable.resize(3, 2); - _scaleTable.set_row_spacings(4); - _scaleTable.set_col_spacings(4); - _scaleTable.attach(_scaleX, 0,1, 0,1); - _scaleTable.attach(_scaleY, 1,2, 0,1); - _scaleTable.attach(_scaleLabel, 2,3, 0,1); - _scaleTable.attach(_scaleWarning, 0,3, 1,2, Gtk::FILL); - _scaleTable.attach(_viewboxExpander, 0,3, 2,3); -#endif _scaleWarning.set_label(_("While SVG allows non-uniform scaling it is recommended to use only uniform scaling in Inkscape. To set a non-uniform scaling, set the 'viewBox' directly.")); _scaleWarning.set_line_wrap( true ); @@ -483,7 +451,6 @@ PageSizer::PageSizer(Registry & _wr) _viewboxExpander.set_label(_("_Viewbox...")); _viewboxExpander.add(_viewboxTable); -#if WITH_GTKMM_3_0 _viewboxTable.set_row_spacing(2); _viewboxTable.set_column_spacing(2); @@ -503,16 +470,6 @@ PageSizer::PageSizer(Registry & _wr) _viewboxH.set_vexpand(); _viewboxTable.attach(_viewboxH, 1, 1, 1, 1); -#else - _viewboxTable.set_border_width(4); - _viewboxTable.set_row_spacings(2); - _viewboxTable.set_col_spacings(2); - _viewboxTable.attach(_viewboxX, 0,1, 0,1); - _viewboxTable.attach(_viewboxY, 1,2, 0,1); - _viewboxTable.attach(_viewboxW, 0,1, 1,2); - _viewboxTable.attach(_viewboxH, 1,2, 1,2); -#endif - _wr.setUpdating (true); updateScaleUI(); _wr.setUpdating (false); diff --git a/src/ui/widget/page-sizer.h b/src/ui/widget/page-sizer.h index 0eea28e61..f1966f848 100644 --- a/src/ui/widget/page-sizer.h +++ b/src/ui/widget/page-sizer.h @@ -23,15 +23,9 @@ #include #include #include +#include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif - #include namespace Inkscape { @@ -222,12 +216,7 @@ protected: //### Custom size frame Gtk::Frame _customFrame; - -#if WITH_GTKMM_3_0 Gtk::Grid _customDimTable; -#else - Gtk::Table _customDimTable; -#endif RegisteredUnitMenu _dimensionUnits; RegisteredScalarUnit _dimensionWidth; @@ -237,12 +226,7 @@ protected: //### Fit Page options Gtk::Expander _fitPageMarginExpander; -#if WITH_GTKMM_3_0 Gtk::Grid _marginTable; -#else - Gtk::Table _marginTable; -#endif - Gtk::Alignment _marginTopAlign; Gtk::Alignment _marginLeftAlign; Gtk::Alignment _marginRightAlign; @@ -257,11 +241,7 @@ protected: // Document scale Gtk::Frame _scaleFrame; -#if WITH_GTKMM_3_0 Gtk::Grid _scaleTable; -#else - Gtk::Table _scaleTable; -#endif Gtk::Label _scaleLabel; Gtk::Label _scaleWarning; @@ -271,11 +251,7 @@ protected: // Viewbox Gtk::Expander _viewboxExpander; -#if WITH_GTKMM_3_0 Gtk::Grid _viewboxTable; -#else - Gtk::Table _viewboxTable; -#endif RegisteredScalar _viewboxX; RegisteredScalar _viewboxY; diff --git a/src/ui/widget/panel.cpp b/src/ui/widget/panel.cpp index ab13577d7..8f695013d 100644 --- a/src/ui/widget/panel.cpp +++ b/src/ui/widget/panel.cpp @@ -74,9 +74,7 @@ Panel::Panel(Glib::ustring const &label, gchar const *prefs_path, _fillable(0) { set_name( "InkscapePanel" ); -#if WITH_GTKMM_3_0 set_orientation( Gtk::ORIENTATION_VERTICAL ); -#endif _init(); } @@ -598,13 +596,9 @@ void Panel::_addResponseButton(Gtk::Button *button, int response_id, bool pack_s { // Create a button box for the response buttons if it's the first button to be added if (!_action_area) { -#if WITH_GTKMM_3_0 _action_area = new Gtk::ButtonBox(); _action_area->set_layout(Gtk::BUTTONBOX_END); _action_area->set_spacing(6); -#else - _action_area = new Gtk::HButtonBox(Gtk::BUTTONBOX_END, 6); -#endif _action_area->set_border_width(4); pack_end(*_action_area, Gtk::PACK_SHRINK, 0); } diff --git a/src/ui/widget/panel.h b/src/ui/widget/panel.h index 7b2836fe8..370779586 100644 --- a/src/ui/widget/panel.h +++ b/src/ui/widget/panel.h @@ -31,13 +31,7 @@ class SPDocument; namespace Gtk { class CheckMenuItem; - -#if WITH_GTKMM_3_0 class ButtonBox; -#else - class HButtonBox; -#endif - class MenuItem; } @@ -64,12 +58,7 @@ namespace Widget { * @see UI::Dialog::DesktopTracker to handle desktop change, selection change and selected object modifications. * @see UI::Dialog::DialogManager manages the dialogs within inkscape. */ -#if WITH_GTKMM_3_0 class Panel : public Gtk::Box { -#else -class Panel : public Gtk::VBox { -#endif - public: static void prep(); @@ -172,12 +161,7 @@ private: Gtk::EventBox _menu_popper; Gtk::Button _close_button; Gtk::Menu *_menu; - -#if WITH_GTKMM_3_0 - Gtk::ButtonBox *_action_area; //< stores response buttons -#else - Gtk::HButtonBox *_action_area; //< stores response buttons -#endif + Gtk::ButtonBox *_action_area; //< stores response buttons std::vector _non_horizontal; std::vector _non_vertical; diff --git a/src/ui/widget/point.cpp b/src/ui/widget/point.cpp index 6aa6196bb..66f5e41a3 100644 --- a/src/ui/widget/point.cpp +++ b/src/ui/widget/point.cpp @@ -53,11 +53,7 @@ Point::Point(Glib::ustring const &label, Glib::ustring const &tooltip, } Point::Point(Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits, Glib::ustring const &suffix, Glib::ustring const &icon, diff --git a/src/ui/widget/point.h b/src/ui/widget/point.h index 17078df8f..71bfd8473 100644 --- a/src/ui/widget/point.h +++ b/src/ui/widget/point.h @@ -82,11 +82,7 @@ public: */ Point( Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits = 0, Glib::ustring const &suffix = "", Glib::ustring const &icon = "", diff --git a/src/ui/widget/preferences-widget.cpp b/src/ui/widget/preferences-widget.cpp index d56506d62..2e6e3f0db 100644 --- a/src/ui/widget/preferences-widget.cpp +++ b/src/ui/widget/preferences-widget.cpp @@ -55,14 +55,9 @@ DialogPage::DialogPage() { set_border_width(12); -#if WITH_GTKMM_3_0 set_orientation(Gtk::ORIENTATION_VERTICAL); set_column_spacing(12); set_row_spacing(6); -#else - set_col_spacings(12); - set_row_spacings(6); -#endif } /** @@ -101,12 +96,7 @@ void DialogPage::add_line(bool indent, // be indented if desired Gtk::Alignment* w_alignment = Gtk::manage(new Gtk::Alignment()); w_alignment->add(*hb); - -#if WITH_GTKMM_3_0 w_alignment->set_valign(Gtk::ALIGN_CENTER); -#else - guint row = property_n_rows(); -#endif // Add a label in the first column if provided if (label != "") @@ -122,17 +112,12 @@ void DialogPage::add_line(bool indent, if (indent) label_alignment->set_padding(0, 0, 12, 0); -#if WITH_GTKMM_3_0 label_alignment->set_valign(Gtk::ALIGN_CENTER); add(*label_alignment); attach_next_to(*w_alignment, *label_alignment, Gtk::POS_RIGHT, 1, 1); -#else - attach(*label_alignment, 0, 1, row, row + 1, Gtk::FILL, Gtk::AttachOptions(), 0, 0); -#endif } // Now add the widget to the bottom of the dialog -#if WITH_GTKMM_3_0 if (label == "") { if (indent) @@ -145,17 +130,6 @@ void DialogPage::add_line(bool indent, g_value_set_int(&width, 2); gtk_container_child_set_property(GTK_CONTAINER(gobj()), GTK_WIDGET(w_alignment->gobj()), "width", &width); } -#else - // The widget should span two columns if there is no label - int w_col_span = 1; - if (label == "") - w_col_span = 2; - - attach(*w_alignment, 2 - w_col_span, 2, row, row + 1, - Gtk::FILL | Gtk::EXPAND, - Gtk::AttachOptions(), - 0, 0); -#endif // Add a label on the right of the widget if desired if (suffix != "") @@ -174,18 +148,8 @@ void DialogPage::add_group_header(Glib::ustring name) Glib::ustring(""/*"*/) , Gtk::ALIGN_START , Gtk::ALIGN_CENTER, true)); label_widget->set_use_markup(true); - -#if WITH_GTKMM_3_0 label_widget->set_valign(Gtk::ALIGN_CENTER); add(*label_widget); -// if (row != 1) - // set_row_spacing(row - 1, 18); -#else - int row = property_n_rows(); - attach(*label_widget , 0, 4, row, row + 1, Gtk::FILL, Gtk::AttachOptions(), 0, 0); - if (row != 1) - set_row_spacing(row - 1, 18); -#endif } } @@ -427,24 +391,6 @@ ZoomCorrRuler::draw_marks(Cairo::RefPtr cr, double dist, int maj } } -#if !WITH_GTKMM_3_0 -bool -ZoomCorrRuler::on_expose_event(GdkEventExpose *event) { - bool result = false; - - if(get_is_drawable()) - { - Cairo::RefPtr cr = get_window()->create_cairo_context(); - cr->rectangle(event->area.x, event->area.y, - event->area.width, event->area.height); - cr->clip(); - result = on_draw(cr); - } - - return result; -} -#endif - bool ZoomCorrRuler::on_draw(const Cairo::RefPtr& cr) { Glib::RefPtr window = get_window(); @@ -548,11 +494,7 @@ ZoomCorrRulerSlider::init(int ruler_width, int ruler_height, double lower, doubl _ruler.set_size(ruler_width, ruler_height); -#if WITH_GTKMM_3_0 _slider = Gtk::manage(new Gtk::Scale(Gtk::ORIENTATION_HORIZONTAL)); -#else - _slider = Gtk::manage(new Gtk::HScale()); -#endif _slider->set_size_request(_ruler.width(), -1); _slider->set_range (lower, upper); @@ -579,21 +521,13 @@ ZoomCorrRulerSlider::init(int ruler_width, int ruler_height, double lower, doubl alignment1->add(_sb); alignment2->add(_unit); -#if WITH_GTKMM_3_0 - Gtk::Grid *table = Gtk::manage(new Gtk::Grid()); + auto table = Gtk::manage(new Gtk::Grid()); table->attach(*_slider, 0, 0, 1, 1); alignment1->set_halign(Gtk::ALIGN_CENTER); table->attach(*alignment1, 1, 0, 1, 1); table->attach(_ruler, 0, 1, 1, 1); alignment2->set_halign(Gtk::ALIGN_CENTER); table->attach(*alignment2, 1, 1, 1, 1); -#else - Gtk::Table *table = Gtk::manage(new Gtk::Table()); - table->attach(*_slider, 0, 1, 0, 1); - table->attach(*alignment1, 1, 2, 0, 1, static_cast(0)); - table->attach(_ruler, 0, 1, 1, 2); - table->attach(*alignment2, 1, 2, 1, 2, static_cast(0)); -#endif pack_start(*table, Gtk::PACK_SHRINK); } @@ -640,11 +574,7 @@ PrefSlider::init(Glib::ustring const &prefs_path, freeze = false; -#if WITH_GTKMM_3_0 _slider = Gtk::manage(new Gtk::Scale(Gtk::ORIENTATION_HORIZONTAL)); -#else - _slider = Gtk::manage(new Gtk::HScale()); -#endif _slider->set_range (lower, upper); _slider->set_increments (step_increment, page_increment); @@ -661,17 +591,11 @@ PrefSlider::init(Glib::ustring const &prefs_path, Gtk::Alignment *alignment1 = Gtk::manage(new Gtk::Alignment(0.5,1,0,0)); alignment1->add(_sb); -#if WITH_GTKMM_3_0 - Gtk::Grid *table = Gtk::manage(new Gtk::Grid()); + auto table = Gtk::manage(new Gtk::Grid()); _slider->set_hexpand(); table->attach(*_slider, 0, 0, 1, 1); alignment1->set_halign(Gtk::ALIGN_CENTER); table->attach(*alignment1, 1, 0, 1, 1); -#else - Gtk::Table *table = Gtk::manage(new Gtk::Table()); - table->attach(*_slider, 0, 1, 0, 1); - table->attach(*alignment1, 1, 2, 0, 1, static_cast(0)); -#endif this->pack_start(*table, Gtk::PACK_EXPAND_WIDGET); } diff --git a/src/ui/widget/preferences-widget.h b/src/ui/widget/preferences-widget.h index 1d2d77699..142793509 100644 --- a/src/ui/widget/preferences-widget.h +++ b/src/ui/widget/preferences-widget.h @@ -30,12 +30,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include "ui/widget/color-picker.h" #include "ui/widget/unit-menu.h" @@ -43,11 +38,7 @@ #include "ui/widget/scalar-unit.h" namespace Gtk { -#if WITH_GTKMM_3_0 class Scale; -#else -class HScale; -#endif } namespace Inkscape { @@ -126,10 +117,6 @@ public: static const double textpadding; private: -#if !WITH_GTKMM_3_0 - bool on_expose_event(GdkEventExpose *event); -#endif - bool on_draw(const Cairo::RefPtr& cr); void draw_marks(Cairo::RefPtr cr, double dist, int major_interval); @@ -155,11 +142,7 @@ private: Inkscape::UI::Widget::SpinButton _sb; UnitMenu _unit; -#if WITH_GTKMM_3_0 Gtk::Scale* _slider; -#else - Gtk::HScale* _slider; -#endif ZoomCorrRuler _ruler; bool freeze; // used to block recursive updates of slider and spinbutton }; @@ -178,11 +161,7 @@ private: Glib::ustring _prefs_path; Inkscape::UI::Widget::SpinButton _sb; -#if WITH_GTKMM_3_0 Gtk::Scale* _slider; -#else - Gtk::HScale* _slider; -#endif bool freeze; // used to block recursive updates of slider and spinbutton }; @@ -279,11 +258,7 @@ protected: void on_changed(); }; -#if WITH_GTKMM_3_0 class DialogPage : public Gtk::Grid -#else -class DialogPage : public Gtk::Table -#endif { public: DialogPage(); diff --git a/src/ui/widget/random.cpp b/src/ui/widget/random.cpp index 0a646b6fb..8551e2add 100644 --- a/src/ui/widget/random.cpp +++ b/src/ui/widget/random.cpp @@ -47,11 +47,7 @@ Random::Random(Glib::ustring const &label, Glib::ustring const &tooltip, } Random::Random(Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits, Glib::ustring const &suffix, Glib::ustring const &icon, diff --git a/src/ui/widget/random.h b/src/ui/widget/random.h index dc2b457c2..d86ab6246 100644 --- a/src/ui/widget/random.h +++ b/src/ui/widget/random.h @@ -75,11 +75,7 @@ public: */ Random(Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits = 0, Glib::ustring const &suffix = "", Glib::ustring const &icon = "", diff --git a/src/ui/widget/scalar.cpp b/src/ui/widget/scalar.cpp index fca8a7974..434c2c0bb 100644 --- a/src/ui/widget/scalar.cpp +++ b/src/ui/widget/scalar.cpp @@ -43,11 +43,7 @@ Scalar::Scalar(Glib::ustring const &label, Glib::ustring const &tooltip, } Scalar::Scalar(Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits, Glib::ustring const &suffix, Glib::ustring const &icon, @@ -141,11 +137,7 @@ void Scalar::update() void Scalar::addSlider() { -#if WITH_GTKMM_3_0 - Gtk::Scale *scale = new Gtk::Scale(static_cast(_widget)->get_adjustment()); -#else - Gtk::HScale *scale = new Gtk::HScale( * static_cast(_widget)->get_adjustment() ); -#endif + auto scale = new Gtk::Scale(static_cast(_widget)->get_adjustment()); scale->set_draw_value(false); add (*manage (scale)); } diff --git a/src/ui/widget/scalar.h b/src/ui/widget/scalar.h index 86d7aee28..847790b96 100644 --- a/src/ui/widget/scalar.h +++ b/src/ui/widget/scalar.h @@ -73,11 +73,7 @@ public: */ Scalar(Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits = 0, Glib::ustring const &suffix = "", Glib::ustring const &icon = "", diff --git a/src/ui/widget/selected-style.cpp b/src/ui/widget/selected-style.cpp index f7fd63f51..7679fadb4 100644 --- a/src/ui/widget/selected-style.cpp +++ b/src/ui/widget/selected-style.cpp @@ -123,11 +123,7 @@ SelectedStyle::SelectedStyle(bool /*layout*/) current_stroke_width(0), _desktop (NULL), -#if WITH_GTKMM_3_0 _table(), -#else - _table(2, 6), -#endif _fill_label (_("Fill:")), _stroke_label (_("Stroke:")), _opacity_label (_("O:")), @@ -139,11 +135,7 @@ SelectedStyle::SelectedStyle(bool /*layout*/) _stroke_flag_place (), _opacity_place (), -#if WITH_GTKMM_3_0 _opacity_adjustment(Gtk::Adjustment::create(100, 0.0, 100, 1.0, 10.0)), -#else - _opacity_adjustment (100, 0.0, 100, 1.0, 10.0), -#endif _opacity_sb (0.02, 0), _stroke (), @@ -166,13 +158,8 @@ SelectedStyle::SelectedStyle(bool /*layout*/) _opacity_label.set_alignment(0.0, 0.5); _opacity_label.set_padding(0, 0); -#if WITH_GTKMM_3_0 _table.set_column_spacing(2); _table.set_row_spacing(0); -#else - _table.set_col_spacings (2); - _table.set_row_spacings (0); -#endif for (int i = SS_FILL; i <= SS_STROKE; i++) { @@ -379,7 +366,6 @@ SelectedStyle::SelectedStyle(bool /*layout*/) _opacity_sb.set_size_request (SELECTED_STYLE_SB_WIDTH, -1); _opacity_sb.set_sensitive (false); -#if WITH_GTKMM_3_0 _table.attach(_fill_label, 0, 0, 1, 1); _table.attach(_stroke_label, 0, 1, 1, 1); @@ -388,26 +374,11 @@ SelectedStyle::SelectedStyle(bool /*layout*/) _table.attach(_fill_place, 2, 0, 1, 1); _table.attach(_stroke, 2, 1, 1, 1); -#else - _table.attach(_fill_label, 0,1, 0,1, Gtk::FILL, Gtk::SHRINK); - _table.attach(_stroke_label, 0,1, 1,2, Gtk::FILL, Gtk::SHRINK); - - _table.attach(_fill_flag_place, 1,2, 0,1, Gtk::SHRINK, Gtk::SHRINK); - _table.attach(_stroke_flag_place, 1,2, 1,2, Gtk::SHRINK, Gtk::SHRINK); - - _table.attach(_fill_place, 2,3, 0,1); - _table.attach(_stroke, 2,3, 1,2); -#endif _opacity_place.add(_opacity_label); -#if WITH_GTKMM_3_0 _table.attach(_opacity_place, 4, 0, 1, 2); _table.attach(_opacity_sb, 5, 0, 1, 2); -#else - _table.attach(_opacity_place, 4,5, 0,2, Gtk::SHRINK, Gtk::SHRINK); - _table.attach(_opacity_sb, 5,6, 0,2, Gtk::SHRINK, Gtk::SHRINK); -#endif pack_start(_table, true, true, 2); @@ -1120,11 +1091,7 @@ SelectedStyle::update() if (_opacity_blocked) break; _opacity_blocked = true; _opacity_sb.set_sensitive(true); -#if WITH_GTKMM_3_0 _opacity_adjustment->set_value(SP_SCALE24_TO_FLOAT(query.opacity.value) * 100); -#else - _opacity_adjustment.set_value(SP_SCALE24_TO_FLOAT(query.opacity.value) * 100); -#endif _opacity_blocked = false; break; } @@ -1224,11 +1191,7 @@ void SelectedStyle::on_opacity_changed () _opacity_blocked = true; SPCSSAttr *css = sp_repr_css_attr_new (); Inkscape::CSSOStringStream os; -#if WITH_GTKMM_3_0 os << CLAMP ((_opacity_adjustment->get_value() / 100), 0.0, 1.0); -#else - os << CLAMP ((_opacity_adjustment.get_value() / 100), 0.0, 1.0); -#endif sp_repr_css_set_property (css, "opacity", os.str().c_str()); // FIXME: workaround for GTK breakage: display interruptibility sometimes results in GTK // sending multiple value-changed events. As if when Inkscape interrupts redraw for main loop diff --git a/src/ui/widget/selected-style.h b/src/ui/widget/selected-style.h index 804a6fef6..efac29f73 100644 --- a/src/ui/widget/selected-style.h +++ b/src/ui/widget/selected-style.h @@ -16,12 +16,7 @@ #endif #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include #include @@ -140,11 +135,7 @@ public: protected: SPDesktop *_desktop; -#if WITH_GTKMM_3_0 Gtk::Grid _table; -#else - Gtk::Table _table; -#endif Gtk::Label _fill_label; Gtk::Label _stroke_label; @@ -157,11 +148,7 @@ protected: Gtk::EventBox _stroke_flag_place; Gtk::EventBox _opacity_place; -#if WITH_GTKMM_3_0 Glib::RefPtr _opacity_adjustment; -#else - Gtk::Adjustment _opacity_adjustment; -#endif Inkscape::UI::Widget::SpinButton _opacity_sb; Gtk::Label _na[2]; diff --git a/src/ui/widget/spin-scale.cpp b/src/ui/widget/spin-scale.cpp index bb08d67df..f2a163c84 100644 --- a/src/ui/widget/spin-scale.cpp +++ b/src/ui/widget/spin-scale.cpp @@ -22,13 +22,8 @@ SpinScale::SpinScale(const char* label, double value, double lower, double upper double /*climb_rate*/, int digits, const SPAttributeEnum a, const char* tip_text) : AttrWidget(a, value) { -#if WITH_GTKMM_3_0 _adjustment = Gtk::Adjustment::create(value, lower, upper, step_inc); _spinscale = gimp_spin_scale_new (_adjustment->gobj(), label, digits); -#else - _adjustment = new Gtk::Adjustment(value, lower, upper, step_inc); - _spinscale = gimp_spin_scale_new (_adjustment->gobj(), label, digits); -#endif signal_value_changed().connect(signal_attr_changed().make_slot()); @@ -42,12 +37,10 @@ SpinScale::SpinScale(const char* label, double value, double lower, double upper } SpinScale::SpinScale(const char* label, -#if WITH_GTKMM_3_0 - Glib::RefPtr adj, -#else - Gtk::Adjustment *adj, -#endif - int digits, const SPAttributeEnum a, const char* tip_text) + Glib::RefPtr adj, + int digits, + const SPAttributeEnum a, + const char* tip_text) : AttrWidget(a, 0.0), _adjustment(adj) @@ -111,19 +104,12 @@ void SpinScale::set_appearance(const gchar* appearance) gimp_spin_scale_set_appearance(_spinscale, appearance); } -#if WITH_GTKMM_3_0 -const Glib::RefPtr SpinScale::get_adjustment() const -#else -const Gtk::Adjustment *SpinScale::get_adjustment() const -#endif +const decltype(SpinScale::_adjustment) SpinScale::get_adjustment() const { return _adjustment; } -#if WITH_GTKMM_3_0 -Glib::RefPtr SpinScale::get_adjustment() -#else -Gtk::Adjustment *SpinScale::get_adjustment() -#endif + +decltype(SpinScale::_adjustment) SpinScale::get_adjustment() { return _adjustment; } diff --git a/src/ui/widget/spin-scale.h b/src/ui/widget/spin-scale.h index 50e4fc953..d7030bed3 100644 --- a/src/ui/widget/spin-scale.h +++ b/src/ui/widget/spin-scale.h @@ -36,12 +36,8 @@ public: int digits, const SPAttributeEnum a = SP_ATTR_INVALID, const char* tip_text = NULL); SpinScale(const char* label, -#if WITH_GTKMM_3_0 - Glib::RefPtr adj, -#else - Gtk::Adjustment *adj, -#endif - int digits, const SPAttributeEnum a = SP_ATTR_INVALID, const char* tip_text = NULL); + Glib::RefPtr adj, + int digits, const SPAttributeEnum a = SP_ATTR_INVALID, const char* tip_text = NULL); virtual Glib::ustring get_as_attribute() const; virtual void set_from_attribute(SPObject*); @@ -52,23 +48,14 @@ public: void set_value(const double); void set_focuswidget(GtkWidget *widget); void set_appearance(const gchar* appearance); - -#if WITH_GTKMM_3_0 - const Glib::RefPtr get_adjustment() const; - Glib::RefPtr get_adjustment(); -#else - const Gtk::Adjustment *get_adjustment() const; - Gtk::Adjustment *get_adjustment(); -#endif private: -#if WITH_GTKMM_3_0 Glib::RefPtr _adjustment; -#else - Gtk::Adjustment *_adjustment; -#endif - GtkWidget *_spinscale; + +public: + const decltype(_adjustment) get_adjustment() const; + decltype(_adjustment) get_adjustment(); }; diff --git a/src/ui/widget/spin-slider.cpp b/src/ui/widget/spin-slider.cpp index 9b361ae78..f17b9b26c 100644 --- a/src/ui/widget/spin-slider.cpp +++ b/src/ui/widget/spin-slider.cpp @@ -20,11 +20,7 @@ namespace Widget { SpinSlider::SpinSlider(double value, double lower, double upper, double step_inc, double climb_rate, int digits, const SPAttributeEnum a, const char* tip_text) : AttrWidget(a, value), -#if WITH_GTKMM_3_0 _adjustment(Gtk::Adjustment::create(value, lower, upper, step_inc)), -#else - _adjustment(value, lower, upper, step_inc), -#endif _scale(_adjustment), _spin(_adjustment, climb_rate, digits) { signal_value_changed().connect(signal_attr_changed().make_slot()); @@ -43,11 +39,7 @@ SpinSlider::SpinSlider(double value, double lower, double upper, double step_inc Glib::ustring SpinSlider::get_as_attribute() const { -#if WITH_GTKMM_3_0 - const double val = _adjustment->get_value(); -#else - const double val = _adjustment.get_value(); -#endif + const auto val = _adjustment->get_value(); if(_spin.get_digits() == 0) return Glib::Ascii::dtostr((int)val); @@ -58,77 +50,43 @@ Glib::ustring SpinSlider::get_as_attribute() const void SpinSlider::set_from_attribute(SPObject* o) { const gchar* val = attribute_value(o); -#if WITH_GTKMM_3_0 if(val) _adjustment->set_value(Glib::Ascii::strtod(val)); else _adjustment->set_value(get_default()->as_double()); -#else - if(val) - _adjustment.set_value(Glib::Ascii::strtod(val)); - else - _adjustment.set_value(get_default()->as_double()); -#endif } Glib::SignalProxy0 SpinSlider::signal_value_changed() { -#if WITH_GTKMM_3_0 return _adjustment->signal_value_changed(); -#else - return _adjustment.signal_value_changed(); -#endif } double SpinSlider::get_value() const { -#if WITH_GTKMM_3_0 return _adjustment->get_value(); -#else - return _adjustment.get_value(); -#endif } void SpinSlider::set_value(const double val) { -#if WITH_GTKMM_3_0 _adjustment->set_value(val); -#else - _adjustment.set_value(val); -#endif } -#if WITH_GTKMM_3_0 -const Glib::RefPtr SpinSlider::get_adjustment() const -#else -const Gtk::Adjustment& SpinSlider::get_adjustment() const -#endif +const decltype(SpinSlider::_adjustment) SpinSlider::get_adjustment() const { return _adjustment; } -#if WITH_GTKMM_3_0 -Glib::RefPtr SpinSlider::get_adjustment() -#else -Gtk::Adjustment& SpinSlider::get_adjustment() -#endif + +decltype(SpinSlider::_adjustment) SpinSlider::get_adjustment() { return _adjustment; } -#if WITH_GTKMM_3_0 const Gtk::Scale& SpinSlider::get_scale() const -#else -const Gtk::HScale& SpinSlider::get_scale() const -#endif { return _scale; } -#if WITH_GTKMM_3_0 Gtk::Scale& SpinSlider::get_scale() -#else -Gtk::HScale& SpinSlider::get_scale() -#endif { return _scale; } @@ -157,15 +115,9 @@ DualSpinSlider::DualSpinSlider(double value, double lower, double upper, double { signal_value_changed().connect(signal_attr_changed().make_slot()); -#if WITH_GTKMM_3_0 _s1.get_adjustment()->signal_value_changed().connect(_signal_value_changed.make_slot()); _s2.get_adjustment()->signal_value_changed().connect(_signal_value_changed.make_slot()); _s1.get_adjustment()->signal_value_changed().connect(sigc::mem_fun(*this, &DualSpinSlider::update_linked)); -#else - _s1.get_adjustment().signal_value_changed().connect(_signal_value_changed.make_slot()); - _s2.get_adjustment().signal_value_changed().connect(_signal_value_changed.make_slot()); - _s1.get_adjustment().signal_value_changed().connect(sigc::mem_fun(*this, &DualSpinSlider::update_linked)); -#endif _link.signal_toggled().connect(sigc::mem_fun(*this, &DualSpinSlider::link_toggled)); Gtk::VBox* vb = Gtk::manage(new Gtk::VBox); @@ -202,13 +154,8 @@ void DualSpinSlider::set_from_attribute(SPObject* o) _link.set_active(toks[1] == 0); -#if WITH_GTKMM_3_0 _s1.get_adjustment()->set_value(v1); _s2.get_adjustment()->set_value(v2); -#else - _s1.get_adjustment().set_value(v1); - _s2.get_adjustment().set_value(v2); -#endif g_strfreev(toks); } diff --git a/src/ui/widget/spin-slider.h b/src/ui/widget/spin-slider.h index a5999f14f..5a29c1b67 100644 --- a/src/ui/widget/spin-slider.h +++ b/src/ui/widget/spin-slider.h @@ -42,17 +42,8 @@ public: double get_value() const; void set_value(const double); -#if WITH_GTKMM_3_0 - const Glib::RefPtr get_adjustment() const; - Glib::RefPtr get_adjustment(); const Gtk::Scale& get_scale() const; Gtk::Scale& get_scale(); -#else - const Gtk::Adjustment& get_adjustment() const; - Gtk::Adjustment& get_adjustment(); - const Gtk::HScale& get_scale() const; - Gtk::HScale& get_scale(); -#endif const Inkscape::UI::Widget::SpinButton& get_spin_button() const; Inkscape::UI::Widget::SpinButton& get_spin_button(); @@ -60,14 +51,13 @@ public: // Change the SpinSlider into a SpinButton with AttrWidget support) void remove_scale(); private: -#if WITH_GTKMM_3_0 Glib::RefPtr _adjustment; Gtk::Scale _scale; -#else - Gtk::Adjustment _adjustment; - Gtk::HScale _scale; -#endif Inkscape::UI::Widget::SpinButton _spin; + +public: + const decltype(_adjustment) get_adjustment() const; + decltype(_adjustment) get_adjustment(); }; /** diff --git a/src/ui/widget/style-swatch.cpp b/src/ui/widget/style-swatch.cpp index 188be705d..21701c4c0 100644 --- a/src/ui/widget/style-swatch.cpp +++ b/src/ui/widget/style-swatch.cpp @@ -34,11 +34,7 @@ #include "verbs.h" #include -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include enum { SS_FILL, @@ -117,11 +113,7 @@ StyleSwatch::StyleSwatch(SPCSSAttr *css, gchar const *main_tip) _css(NULL), _tool_obs(NULL), _style_obs(NULL), -#if WITH_GTKMM_3_0 _table(Gtk::manage(new Gtk::Grid())), -#else - _table(Gtk::manage(new Gtk::Table(2, 6))), -#endif _sw_unit(NULL) { set_name("StyleSwatch"); @@ -139,13 +131,8 @@ StyleSwatch::StyleSwatch(SPCSSAttr *css, gchar const *main_tip) _opacity_value.set_alignment(0.0, 0.5); _opacity_value.set_padding(0, 0); -#if WITH_GTKMM_3_0 _table->set_column_spacing(2); _table->set_row_spacing(0); -#else - _table->set_col_spacings(2); - _table->set_row_spacings(0); -#endif _stroke.pack_start(_place[SS_STROKE]); _stroke_width_place.add(_stroke_width); @@ -153,19 +140,11 @@ StyleSwatch::StyleSwatch(SPCSSAttr *css, gchar const *main_tip) _opacity_place.add(_opacity_value); -#if WITH_GTKMM_3_0 _table->attach(_label[SS_FILL], 0, 0, 1, 1); _table->attach(_label[SS_STROKE], 0, 1, 1, 1); _table->attach(_place[SS_FILL], 1, 0, 1, 1); _table->attach(_stroke, 1, 1, 1, 1); _table->attach(_opacity_place, 2, 0, 1, 2); -#else - _table->attach(_label[SS_FILL], 0,1, 0,1, Gtk::FILL, Gtk::SHRINK); - _table->attach(_label[SS_STROKE], 0,1, 1,2, Gtk::FILL, Gtk::SHRINK); - _table->attach(_place[SS_FILL], 1,2, 0,1); - _table->attach(_stroke, 1,2, 1,2); - _table->attach(_opacity_place, 2,3, 0,2, Gtk::SHRINK, Gtk::SHRINK); -#endif _swatch.add(*_table); pack_start(_swatch, true, true, 0); diff --git a/src/ui/widget/style-swatch.h b/src/ui/widget/style-swatch.h index 0016e0256..81a907d16 100644 --- a/src/ui/widget/style-swatch.h +++ b/src/ui/widget/style-swatch.h @@ -29,11 +29,7 @@ class SPStyle; class SPCSSAttr; namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } namespace Inkscape { @@ -75,11 +71,7 @@ private: Gtk::EventBox _swatch; -#if WITH_GTKMM_3_0 Gtk::Grid *_table; -#else - Gtk::Table *_table; -#endif Gtk::Label _label[2]; Gtk::EventBox _place[2]; diff --git a/src/ui/widget/tolerance-slider.cpp b/src/ui/widget/tolerance-slider.cpp index ced811c57..a87ed7c0f 100644 --- a/src/ui/widget/tolerance-slider.cpp +++ b/src/ui/widget/tolerance-slider.cpp @@ -76,12 +76,8 @@ void ToleranceSlider::init (const Glib::ustring& label1, const Glib::ustring& la // align the label with the checkbox text above by indenting 22 px. _hbox->pack_start(*theLabel1, Gtk::PACK_EXPAND_WIDGET, 22); -#if WITH_GTKMM_3_0 _hscale = Gtk::manage(new Gtk::Scale(Gtk::ORIENTATION_HORIZONTAL)); _hscale->set_range(1.0, 51.0); -#else - _hscale = Gtk::manage (new Gtk::HScale (1.0, 51, 1.0)); -#endif theLabel1->set_mnemonic_widget (*_hscale); _hscale->set_draw_value (true); @@ -121,11 +117,7 @@ void ToleranceSlider::init (const Glib::ustring& label1, const Glib::ustring& la void ToleranceSlider::setValue (double val) { -#if WITH_GTKMM_3_0 - Glib::RefPtr adj = _hscale->get_adjustment(); -#else - Gtk::Adjustment *adj = _hscale->get_adjustment(); -#endif + auto adj = _hscale->get_adjustment(); adj->set_lower (1.0); adj->set_upper (51.0); diff --git a/src/ui/widget/tolerance-slider.h b/src/ui/widget/tolerance-slider.h index 7ae8e4712..3d2548ebe 100644 --- a/src/ui/widget/tolerance-slider.h +++ b/src/ui/widget/tolerance-slider.h @@ -14,11 +14,7 @@ namespace Gtk { class RadioButton; -#if WITH_GTKMM_3_0 class Scale; -#else -class HScale; -#endif } namespace Inkscape { @@ -60,13 +56,7 @@ protected: void on_toggled(); void update (double val); Gtk::HBox *_hbox; - -#if WITH_GTKMM_3_0 Gtk::Scale *_hscale; -#else - Gtk::HScale *_hscale; -#endif - Gtk::RadioButtonGroup _radio_button_group; Gtk::RadioButton *_button1; Gtk::RadioButton *_button2; diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 164a06910..ef1f31751 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -2211,7 +2211,6 @@ set_adjustment (GtkAdjustment *adj, double l, double u, double ps, double si, do gtk_adjustment_set_page_size(adj, ps); gtk_adjustment_set_step_increment(adj, si); gtk_adjustment_set_page_increment(adj, pi); - gtk_adjustment_changed (adj); } } -- cgit v1.2.3 From dcd91f59f597ab4af07cee5929ce0e2e1f9104d5 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 28 Jul 2016 16:16:18 +0100 Subject: Drop remaining GTKMM 2 fallback support (bzr r15023.2.7) --- src/color-profile.cpp | 45 +----- src/desktop-events.cpp | 4 +- src/ui/clipboard.cpp | 11 +- src/ui/dialog/aboutbox.cpp | 14 +- src/ui/dialog/align-and-distribute.cpp | 38 +---- src/ui/dialog/align-and-distribute.h | 38 +---- src/ui/dialog/calligraphic-profile-rename.cpp | 25 +-- src/ui/dialog/calligraphic-profile-rename.h | 9 -- src/ui/dialog/clonetiler.cpp | 217 ++++---------------------- src/ui/dialog/clonetiler.h | 5 - src/ui/dialog/debug.cpp | 7 +- src/ui/dialog/document-metadata.cpp | 31 ---- src/ui/dialog/document-metadata.h | 12 +- src/ui/dialog/document-properties.cpp | 129 +-------------- src/ui/dialog/document-properties.h | 6 +- src/ui/dialog/export.cpp | 90 +---------- src/ui/dialog/export.h | 40 ----- src/ui/dialog/filedialogimpl-gtkmm.cpp | 86 ++-------- src/ui/dialog/filedialogimpl-win32.cpp | 4 - src/ui/dialog/fill-and-stroke.cpp | 19 --- src/ui/dialog/fill-and-stroke.h | 4 - src/ui/dialog/filter-effects-dialog.cpp | 164 ++----------------- src/ui/dialog/filter-effects-dialog.h | 12 -- src/ui/dialog/find.h | 6 - src/ui/dialog/floating-behavior.cpp | 8 - src/ui/dialog/glyphs.cpp | 79 +--------- src/ui/dialog/grid-arrange-tab.cpp | 20 +-- src/ui/dialog/grid-arrange-tab.h | 5 - src/ui/dialog/guides.cpp | 58 +------ src/ui/dialog/guides.h | 12 +- src/ui/dialog/icon-preview.h | 6 - src/ui/dialog/inkscape-preferences.cpp | 42 +---- src/ui/dialog/inkscape-preferences.h | 8 - src/ui/dialog/input.cpp | 131 +--------------- src/ui/dialog/layer-properties.cpp | 31 +--- src/ui/dialog/layer-properties.h | 10 -- src/ui/dialog/layers.cpp | 4 - src/ui/dialog/layers.h | 6 - src/ui/dialog/livepatheffect-add.cpp | 6 +- src/ui/dialog/livepatheffect-editor.cpp | 7 - src/ui/dialog/livepatheffect-editor.h | 4 - src/ui/dialog/new-from-template.cpp | 8 - src/ui/dialog/object-properties.cpp | 94 +---------- src/ui/dialog/object-properties.h | 4 - src/ui/dialog/objects.cpp | 21 --- src/ui/dialog/objects.h | 10 -- src/ui/dialog/ocaldialogs.cpp | 162 +------------------ src/ui/dialog/ocaldialogs.h | 41 +---- src/ui/dialog/polar-arrange-tab.cpp | 31 ---- src/ui/dialog/polar-arrange-tab.h | 11 +- src/ui/dialog/spellcheck.h | 15 -- src/ui/dialog/svg-fonts-dialog.cpp | 5 - src/ui/dialog/svg-fonts-dialog.h | 9 -- src/ui/dialog/swatches.cpp | 4 - src/ui/dialog/symbols.cpp | 49 +----- src/ui/dialog/tags.cpp | 4 - src/ui/dialog/tags.h | 6 - src/ui/dialog/text-edit.cpp | 25 +-- src/ui/dialog/text-edit.h | 11 -- src/ui/dialog/tile.h | 5 - src/ui/dialog/transformation.cpp | 102 ------------ src/ui/dialog/transformation.h | 4 - src/ui/dialog/undo-history.cpp | 33 ---- src/ui/dialog/undo-history.h | 18 --- src/ui/dialog/xml-tree.cpp | 18 --- src/ui/dialog/xml-tree.h | 11 -- src/ui/previewholder.cpp | 119 +++----------- src/ui/previewholder.h | 9 -- src/ui/tools/tool-base.cpp | 6 - src/widgets/dash-selector.cpp | 14 +- src/widgets/dash-selector.h | 5 - src/widgets/desktop-widget.cpp | 178 ++------------------- src/widgets/sp-attribute-widget.cpp | 27 +--- src/widgets/sp-attribute-widget.h | 9 -- src/widgets/stroke-style.cpp | 60 ------- src/widgets/stroke-style.h | 11 -- src/widgets/toolbox.cpp | 55 ++----- 77 files changed, 164 insertions(+), 2483 deletions(-) (limited to 'src') diff --git a/src/color-profile.cpp b/src/color-profile.cpp index aea9ccab0..031d3f6f5 100644 --- a/src/color-profile.cpp +++ b/src/color-profile.cpp @@ -4,11 +4,7 @@ #define noDEBUG_LCMS -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include #include @@ -1002,11 +998,7 @@ void loadProfiles() static bool gamutWarn = false; -#if WITH_GTKMM_3_0 static Gdk::RGBA lastGamutColor("#808080"); -#else -static Gdk::Color lastGamutColor("#808080"); -#endif static bool lastBPC = false; #if defined(cmsFLAGS_PRESERVEBLACK) @@ -1152,12 +1144,7 @@ cmsHTRANSFORM Inkscape::CMSSystem::getDisplayTransform() bool preserveBlack = prefs->getBool( "/options/softproof/preserveblack"); #endif //defined(cmsFLAGS_PRESERVEBLACK) Glib::ustring colorStr = prefs->getString("/options/softproof/gamutcolor"); - -#if WITH_GTKMM_3_0 Gdk::RGBA gamutColor( colorStr.empty() ? "#808080" : colorStr ); -#else - Gdk::Color gamutColor( colorStr.empty() ? "#808080" : colorStr ); -#endif if ( (warn != gamutWarn) || (lastIntent != intent) @@ -1189,15 +1176,9 @@ cmsHTRANSFORM Inkscape::CMSSystem::getDisplayTransform() if ( gamutWarn ) { dwFlags |= cmsFLAGS_GAMUTCHECK; -#if WITH_GTKMM_3_0 - gushort gamutColor_r = gamutColor.get_red_u(); - gushort gamutColor_g = gamutColor.get_green_u(); - gushort gamutColor_b = gamutColor.get_blue_u(); -#else - gushort gamutColor_r = gamutColor.get_red(); - gushort gamutColor_g = gamutColor.get_green(); - gushort gamutColor_b = gamutColor.get_blue(); -#endif + auto gamutColor_r = gamutColor.get_red_u(); + auto gamutColor_g = gamutColor.get_green_u(); + auto gamutColor_b = gamutColor.get_blue_u(); #if HAVE_LIBLCMS1 cmsSetAlarmCodes(gamutColor_r >> 8, gamutColor_g >> 8, gamutColor_b >> 8); @@ -1338,12 +1319,7 @@ cmsHTRANSFORM Inkscape::CMSSystem::getDisplayPer( Glib::ustring const& id ) bool preserveBlack = prefs->getBool( "/options/softproof/preserveblack"); #endif //defined(cmsFLAGS_PRESERVEBLACK) Glib::ustring colorStr = prefs->getString("/options/softproof/gamutcolor"); - -#if WITH_GTKMM_3_0 Gdk::RGBA gamutColor( colorStr.empty() ? "#808080" : colorStr ); -#else - Gdk::Color gamutColor( colorStr.empty() ? "#808080" : colorStr ); -#endif if ( (warn != gamutWarn) || (lastIntent != intent) @@ -1373,16 +1349,9 @@ cmsHTRANSFORM Inkscape::CMSSystem::getDisplayPer( Glib::ustring const& id ) cmsUInt32Number dwFlags = cmsFLAGS_SOFTPROOFING; if ( gamutWarn ) { dwFlags |= cmsFLAGS_GAMUTCHECK; - -#if WITH_GTKMM_3_0 - gushort gamutColor_r = gamutColor.get_red_u(); - gushort gamutColor_g = gamutColor.get_green_u(); - gushort gamutColor_b = gamutColor.get_blue_u(); -#else - gushort gamutColor_r = gamutColor.get_red(); - gushort gamutColor_g = gamutColor.get_green(); - gushort gamutColor_b = gamutColor.get_blue(); -#endif + auto gamutColor_r = gamutColor.get_red_u(); + auto gamutColor_g = gamutColor.get_green_u(); + auto gamutColor_b = gamutColor.get_blue_u(); #if HAVE_LIBLCMS1 cmsSetAlarmCodes(gamutColor_r >> 8, gamutColor_g >> 8, gamutColor_b >> 8); diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp index b9bd949ff..9ad06e2ec 100644 --- a/src/desktop-events.cpp +++ b/src/desktop-events.cpp @@ -21,9 +21,7 @@ #include "ui/dialog/guides.h" #include "desktop-events.h" -#if WITH_GTKMM_3_0 -# include -#endif +#include #include <2geom/line.h> #include <2geom/angle.h> diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index d581dbf7e..6b24c5a2d 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -1300,11 +1300,7 @@ Geom::Scale ClipboardManagerImpl::_getScale(SPDesktop *desktop, Geom::Point cons */ Glib::ustring ClipboardManagerImpl::_getBestTarget() { -#if WITH_GTKMM_3_0 - std::vector targets = _clipboard->wait_for_targets(); -#else - std::list targets = _clipboard->wait_for_targets(); -#endif + auto targets = _clipboard->wait_for_targets(); // clipboard target debugging snippet /* @@ -1363,12 +1359,7 @@ void ClipboardManagerImpl::_setClipboardTargets() { Inkscape::Extension::DB::OutputList outlist; Inkscape::Extension::db.get_output_list(outlist); - -#if WITH_GTKMM_3_0 std::vector target_list; -#else - std::list target_list; -#endif bool plaintextSet = false; for (Inkscape::Extension::DB::OutputList::const_iterator out = outlist.begin() ; out != outlist.end() ; ++out) { diff --git a/src/ui/dialog/aboutbox.cpp b/src/ui/dialog/aboutbox.cpp index 6276d3391..ffb46fd1b 100644 --- a/src/ui/dialog/aboutbox.cpp +++ b/src/ui/dialog/aboutbox.cpp @@ -98,11 +98,7 @@ AboutBox::AboutBox() : Gtk::Dialog(_("About Inkscape")) { tabs->append_page(*manage( make_scrolled_text(license_text)), _("_License"), true); -#if WITH_GTKMM_3_0 get_content_area()->pack_end(*manage(tabs), true, true); -#else - get_vbox()->pack_end(*manage(tabs), true, true); -#endif tabs->show_all(); @@ -130,20 +126,12 @@ AboutBox::AboutBox() : Gtk::Dialog(_("About Inkscape")) { link->set_selectable(true); link->show(); -#if WITH_GTKMM_3_0 get_content_area()->pack_start(*manage(label), false, false); get_content_area()->pack_start(*manage(link), false, false); -#else - get_vbox()->pack_start(*manage(label), false, false); - get_vbox()->pack_start(*manage(link), false, false); -#endif Gtk::Requisition requisition; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_preferred_size(reinterpret_cast(gobj()), &requisition, NULL); -#else - gtk_widget_size_request (reinterpret_cast(gobj()), &requisition); -#endif + // allow window to shrink set_size_request(0, 0); set_default_size(requisition.width, requisition.height); diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp index 8f87932b8..971275e59 100644 --- a/src/ui/dialog/align-and-distribute.cpp +++ b/src/ui/dialog/align-and-distribute.cpp @@ -61,11 +61,7 @@ namespace Dialog { Action::Action(const Glib::ustring &id, const Glib::ustring &tiptext, guint row, guint column, -#if WITH_GTKMM_3_0 - Gtk::Grid &parent, -#else - Gtk::Table &parent, -#endif + Gtk::Grid &parent, AlignAndDistribute &dialog): _dialog(dialog), _id(id), @@ -81,11 +77,7 @@ Action::Action(const Glib::ustring &id, pButton->signal_clicked() .connect(sigc::mem_fun(*this, &Action::on_button_click)); pButton->set_tooltip_text(tiptext); -#if WITH_GTKMM_3_0 parent.attach(*pButton, column, row, 1, 1); -#else - parent.attach(*pButton, column, column+1, row, row+1, Gtk::FILL, Gtk::FILL); -#endif } @@ -447,11 +439,7 @@ public: Action(id, tiptext, row, column + 4, dialog.removeOverlap_table(), dialog) { -#if WITH_GTKMM_3_0 dialog.removeOverlap_table().set_column_spacing(3); -#else - dialog.removeOverlap_table().set_col_spacings(3); -#endif removeOverlapXGap.set_digits(1); removeOverlapXGap.set_size_request(60, -1); @@ -473,17 +461,10 @@ public: removeOverlapYGapLabel.set_text_with_mnemonic(C_("Gap", "_V:")); removeOverlapYGapLabel.set_mnemonic_widget(removeOverlapYGap); -#if WITH_GTKMM_3_0 dialog.removeOverlap_table().attach(removeOverlapXGapLabel, column, row, 1, 1); dialog.removeOverlap_table().attach(removeOverlapXGap, column+1, row, 1, 1); dialog.removeOverlap_table().attach(removeOverlapYGapLabel, column+2, row, 1, 1); dialog.removeOverlap_table().attach(removeOverlapYGap, column+3, row, 1, 1); -#else - dialog.removeOverlap_table().attach(removeOverlapXGapLabel, column, column+1, row, row+1, Gtk::FILL, Gtk::FILL); - dialog.removeOverlap_table().attach(removeOverlapXGap, column+1, column+2, row, row+1, Gtk::FILL, Gtk::FILL); - dialog.removeOverlap_table().attach(removeOverlapYGapLabel, column+2, column+3, row, row+1, Gtk::FILL, Gtk::FILL); - dialog.removeOverlap_table().attach(removeOverlapYGap, column+3, column+4, row, row+1, Gtk::FILL, Gtk::FILL); -#endif } private : @@ -762,11 +743,7 @@ public : guint row, guint column, AlignAndDistribute &dialog, -#if WITH_GTKMM_3_0 Gtk::Grid &table, -#else - Gtk::Table &table, -#endif Geom::Dim2 orientation, bool distribute): Action(id, tiptext, row, column, table, dialog), @@ -939,19 +916,11 @@ AlignAndDistribute::AlignAndDistribute() _rearrangeFrame(_("Rearrange")), _removeOverlapFrame(_("Remove overlaps")), _nodesFrame(_("Nodes")), -#if WITH_GTKMM_3_0 _alignTable(), _distributeTable(), _rearrangeTable(), _removeOverlapTable(), _nodesTable(), -#else - _alignTable(2, 6, true), - _distributeTable(2, 6, true), - _rearrangeTable(1, 5, false), - _removeOverlapTable(1, 5, false), - _nodesTable(1, 4, true), -#endif _anchorLabel(_("Relative to: ")), _anchorLabelNode(_("Relative to: ")), _selgrpLabel(_("_Treat selection as group: "), 1) @@ -1316,13 +1285,8 @@ void AlignAndDistribute::addRandomizeButton(const Glib::ustring &id, const Glib: ); } -#if WITH_GTKMM_3_0 void AlignAndDistribute::addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, guint row, guint col, Gtk::Grid &table, Geom::Dim2 orientation, bool distribute) -#else -void AlignAndDistribute::addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, - guint row, guint col, Gtk::Table &table, Geom::Dim2 orientation, bool distribute) -#endif { _actionList.push_back( new ActionBaseline( diff --git a/src/ui/dialog/align-and-distribute.h b/src/ui/dialog/align-and-distribute.h index f8cc61af2..acb3d02ed 100644 --- a/src/ui/dialog/align-and-distribute.h +++ b/src/ui/dialog/align-and-distribute.h @@ -22,15 +22,11 @@ #include #include #include -#include "2geom/rect.h" -#include "ui/dialog/desktop-tracker.h" - -#if WITH_GTKMM_3_0 #include #include -#else -#include -#endif + +#include "2geom/rect.h" +#include "ui/dialog/desktop-tracker.h" class SPItem; @@ -51,19 +47,11 @@ public: static AlignAndDistribute &getInstance() { return *new AlignAndDistribute(); } -#if WITH_GTKMM_3_0 Gtk::Grid &align_table(){return _alignTable;} Gtk::Grid &distribute_table(){return _distributeTable;} Gtk::Grid &rearrange_table(){return _rearrangeTable;} Gtk::Grid &removeOverlap_table(){return _removeOverlapTable;} Gtk::Grid &nodes_table(){return _nodesTable;} -#else - Gtk::Table &align_table(){return _alignTable;} - Gtk::Table &distribute_table(){return _distributeTable;} - Gtk::Table &rearrange_table(){return _rearrangeTable;} - Gtk::Table &removeOverlap_table(){return _removeOverlapTable;} - Gtk::Table &nodes_table(){return _nodesTable;} -#endif void setMode(bool nodeEdit); @@ -100,22 +88,13 @@ protected: guint row, guint col); void addRandomizeButton(const Glib::ustring &id, const Glib::ustring tiptext, guint row, guint col); -#if WITH_GTKMM_3_0 void addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, guint row, guint col, Gtk::Grid &table, Geom::Dim2 orientation, bool distribute); -#else - void addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, - guint row, guint col, Gtk::Table &table, Geom::Dim2 orientation, bool distribute); -#endif void setTargetDesktop(SPDesktop *desktop); std::list _actionList; UI::Widget::Frame _alignFrame, _distributeFrame, _rearrangeFrame, _removeOverlapFrame, _nodesFrame; -#if WITH_GTKMM_3_0 Gtk::Grid _alignTable, _distributeTable, _rearrangeTable, _removeOverlapTable, _nodesTable; -#else - Gtk::Table _alignTable, _distributeTable, _rearrangeTable, _removeOverlapTable, _nodesTable; -#endif Gtk::HBox _anchorBox; Gtk::HBox _selgrpBox; Gtk::VBox _alignBox; @@ -163,11 +142,7 @@ public : Action(const Glib::ustring &id, const Glib::ustring &tiptext, guint row, guint column, - #if WITH_GTKMM_3_0 - Gtk::Grid &parent, - #else - Gtk::Table &parent, - #endif + Gtk::Grid &parent, AlignAndDistribute &dialog); virtual ~Action(){} @@ -178,12 +153,7 @@ private : virtual void on_button_click(){} Glib::ustring _id; - -#if WITH_GTKMM_3_0 Gtk::Grid &_parent; -#else - Gtk::Table &_parent; -#endif }; diff --git a/src/ui/dialog/calligraphic-profile-rename.cpp b/src/ui/dialog/calligraphic-profile-rename.cpp index 9ae22db2d..50dae0fd8 100644 --- a/src/ui/dialog/calligraphic-profile-rename.cpp +++ b/src/ui/dialog/calligraphic-profile-rename.cpp @@ -16,12 +16,7 @@ #include "calligraphic-profile-rename.h" #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include "desktop.h" @@ -30,40 +25,24 @@ namespace UI { namespace Dialog { CalligraphicProfileRename::CalligraphicProfileRename() : -#if WITH_GTKMM_3_0 _layout_table(Gtk::manage(new Gtk::Grid())), -#else - _layout_table(Gtk::manage(new Gtk::Table(1, 2))), -#endif _applied(false) { set_title(_("Edit profile")); -#if WITH_GTKMM_3_0 - Gtk::Box *mainVBox = get_content_area(); + auto mainVBox = get_content_area(); _layout_table->set_column_spacing(4); _layout_table->set_row_spacing(4); -#else - Gtk::Box *mainVBox = get_vbox(); - _layout_table->set_spacings(4); -#endif _profile_name_entry.set_activates_default(true); _profile_name_label.set_label(_("Profile name:")); _profile_name_label.set_alignment(1.0, 0.5); -#if WITH_GTKMM_3_0 _layout_table->attach(_profile_name_label, 0, 0, 1, 1); _profile_name_entry.set_hexpand(); _layout_table->attach(_profile_name_entry, 1, 0, 1, 1); -#else - _layout_table->attach(_profile_name_label, - 0, 1, 0, 1, Gtk::FILL, Gtk::FILL); - _layout_table->attach(_profile_name_entry, - 1, 2, 0, 1, Gtk::FILL | Gtk::EXPAND, Gtk::FILL); -#endif mainVBox->pack_start(*_layout_table, false, false, 4); // Buttons diff --git a/src/ui/dialog/calligraphic-profile-rename.h b/src/ui/dialog/calligraphic-profile-rename.h index 4ef71900b..b7a97a1e7 100644 --- a/src/ui/dialog/calligraphic-profile-rename.h +++ b/src/ui/dialog/calligraphic-profile-rename.h @@ -20,11 +20,7 @@ #include namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } class SPDesktop; @@ -59,12 +55,7 @@ protected: Gtk::Label _profile_name_label; Gtk::Entry _profile_name_entry; - -#if WITH_GTKMM_3_0 Gtk::Grid* _layout_table; -#else - Gtk::Table* _layout_table; -#endif Gtk::Button _close_button; Gtk::Button _delete_button; diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index b727c87ee..da00b7b00 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -91,12 +91,8 @@ CloneTiler::CloneTiler () : dlg = GTK_WIDGET(gobj()); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *mainbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); + auto mainbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(mainbox), FALSE); -#else - GtkWidget *mainbox = gtk_vbox_new(FALSE, 4); -#endif gtk_container_set_border_width (GTK_CONTAINER (mainbox), 6); contents->pack_start (*Gtk::manage(Glib::wrap(mainbox)), true, true, 0); @@ -651,12 +647,8 @@ CloneTiler::CloneTiler () : GtkWidget *vb = clonetiler_new_tab (nb, _("Co_lor")); { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new (FALSE, 0); -#endif GtkWidget *l = gtk_label_new (_("Initial color: ")); gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0); @@ -777,12 +769,8 @@ CloneTiler::CloneTiler () : { GtkWidget *vb = clonetiler_new_tab (nb, _("_Trace")); { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0); b = gtk_check_button_new_with_label (_("Trace the drawing under the clones/sprayed items")); @@ -797,12 +785,8 @@ CloneTiler::CloneTiler () : } { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *vvb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + auto vvb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_set_homogeneous(GTK_BOX(vvb), FALSE); -#else - GtkWidget *vvb = gtk_vbox_new (FALSE, 0); -#endif gtk_box_pack_start (GTK_BOX (vb), vvb, FALSE, FALSE, 0); g_object_set_data (G_OBJECT(dlg), "dotrace", (gpointer) vvb); @@ -811,15 +795,9 @@ CloneTiler::CloneTiler () : GtkWidget *frame = gtk_frame_new (_("1. Pick from the drawing:")); gtk_box_pack_start (GTK_BOX (vvb), frame, FALSE, FALSE, 0); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *table = gtk_grid_new(); + auto table = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(table), 4); gtk_grid_set_column_spacing(GTK_GRID(table), 6); -#else - GtkWidget *table = gtk_table_new (3, 3, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 6); -#endif gtk_container_add(GTK_CONTAINER(frame), table); @@ -895,15 +873,9 @@ CloneTiler::CloneTiler () : GtkWidget *frame = gtk_frame_new (_("2. Tweak the picked value:")); gtk_box_pack_start (GTK_BOX (vvb), frame, FALSE, FALSE, VB_MARGIN); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *table = gtk_grid_new(); + auto table = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(table), 4); gtk_grid_set_column_spacing(GTK_GRID(table), 6); -#else - GtkWidget *table = gtk_table_new (4, 2, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 6); -#endif gtk_container_add(GTK_CONTAINER(frame), table); @@ -944,15 +916,9 @@ CloneTiler::CloneTiler () : GtkWidget *frame = gtk_frame_new (_("3. Apply the value to the clones':")); gtk_box_pack_start (GTK_BOX (vvb), frame, FALSE, FALSE, 0); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *table = gtk_grid_new(); + auto table = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(table), 4); gtk_grid_set_column_spacing(GTK_GRID(table), 6); -#else - GtkWidget *table = gtk_table_new (2, 2, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 6); -#endif gtk_container_add(GTK_CONTAINER(frame), table); { @@ -1000,12 +966,8 @@ CloneTiler::CloneTiler () : } { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); GtkWidget *l = gtk_label_new(_("")); gtk_label_set_markup (GTK_LABEL(l), _("Apply to tiled clones:")); @@ -1013,42 +975,24 @@ CloneTiler::CloneTiler () : } // Rows/columns, width/height { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *table = gtk_grid_new(); + auto table = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(table), 4); gtk_grid_set_column_spacing(GTK_GRID(table), 6); -#else - GtkWidget *table = gtk_table_new (2, 2, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 6); -#endif gtk_container_set_border_width (GTK_CONTAINER (table), VB_MARGIN); gtk_box_pack_start (GTK_BOX (mainbox), table, FALSE, FALSE, 0); { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif g_object_set_data (G_OBJECT(dlg), "rowscols", (gpointer) hb); { -#if WITH_GTKMM_3_0 - Glib::RefPtra = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0); -#else - Gtk::Adjustment *a = new Gtk::Adjustment (0.0, 1, 500, 1, 10, 0); -#endif + auto a = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0); int value = prefs->getInt(prefs_path + "jmax", 2); a->set_value (value); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0); -#else - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton (*a, 1.0, 0); -#endif + auto sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0); sb->set_tooltip_text (_("How many rows in the tiling")); sb->set_width_chars (7); gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(sb->gobj()), TRUE, TRUE, 0); @@ -1061,28 +1005,16 @@ CloneTiler::CloneTiler () : { GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), "×"); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_END); -#else - gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); -#endif gtk_box_pack_start (GTK_BOX (hb), l, TRUE, TRUE, 0); } { -#if WITH_GTKMM_3_0 - Glib::RefPtr a = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0); -#else - Gtk::Adjustment *a = new Gtk::Adjustment (0.0, 1, 500, 1, 10, 0); -#endif + auto a = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0); int value = prefs->getInt(prefs_path + "imax", 2); a->set_value (value); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0); -#else - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton (*a, 1.0, 0); -#endif + auto sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0); sb->set_tooltip_text (_("How many columns in the tiling")); sb->set_width_chars (7); gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(sb->gobj()), TRUE, TRUE, 0); @@ -1096,12 +1028,8 @@ CloneTiler::CloneTiler () : } { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif g_object_set_data (G_OBJECT(dlg), "widthheight", (gpointer) hb); // unitmenu @@ -1112,59 +1040,39 @@ CloneTiler::CloneTiler () : { // Width spinbutton -#if WITH_GTKMM_3_0 fill_width = Gtk::Adjustment::create(0.0, -1e6, 1e6, 1.0, 10.0, 0); -#else - fill_width = new Gtk::Adjustment (0.0, -1e6, 1e6, 1.0, 10.0, 0); -#endif double value = prefs->getDouble(prefs_path + "fillwidth", 50.0); Inkscape::Util::Unit const *unit = unit_menu->getUnit(); gdouble const units = Inkscape::Util::Quantity::convert(value, "px", unit); fill_width->set_value (units); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton *e = new Inkscape::UI::Widget::SpinButton(fill_width, 1.0, 2); -#else - Inkscape::UI::Widget::SpinButton *e = new Inkscape::UI::Widget::SpinButton (*fill_width, 1.0, 2); -#endif + auto e = new Inkscape::UI::Widget::SpinButton(fill_width, 1.0, 2); e->set_tooltip_text (_("Width of the rectangle to be filled")); e->set_width_chars (7); e->set_digits (4); gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(e->gobj()), TRUE, TRUE, 0); // TODO: C++ification - g_signal_connect(G_OBJECT(fill_width->gobj()), "value_changed", + g_signal_connect(G_OBJECT(fill_width->gobj()), "value_changed", G_CALLBACK(clonetiler_fill_width_changed), unit_menu); } { GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), "×"); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_END); -#else - gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); -#endif gtk_box_pack_start (GTK_BOX (hb), l, TRUE, TRUE, 0); } { // Height spinbutton -#if WITH_GTKMM_3_0 fill_height = Gtk::Adjustment::create(0.0, -1e6, 1e6, 1.0, 10.0, 0); -#else - fill_height = new Gtk::Adjustment (0.0, -1e6, 1e6, 1.0, 10.0, 0); -#endif double value = prefs->getDouble(prefs_path + "fillheight", 50.0); Inkscape::Util::Unit const *unit = unit_menu->getUnit(); gdouble const units = Inkscape::Util::Quantity::convert(value, "px", unit); fill_height->set_value (units); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton *e = new Inkscape::UI::Widget::SpinButton(fill_height, 1.0, 2); -#else - Inkscape::UI::Widget::SpinButton *e = new Inkscape::UI::Widget::SpinButton (*fill_height, 1.0, 2); -#endif + auto e = new Inkscape::UI::Widget::SpinButton(fill_height, 1.0, 2); e->set_tooltip_text (_("Height of the rectangle to be filled")); e->set_width_chars (7); e->set_digits (4); @@ -1206,12 +1114,8 @@ CloneTiler::CloneTiler () : // Use saved pos { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); GtkWidget *b = gtk_check_button_new_with_label (_("Use saved size and position of the tile")); @@ -1226,12 +1130,8 @@ CloneTiler::CloneTiler () : // Statusbar { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif gtk_box_pack_end (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); GtkWidget *l = gtk_label_new(""); g_object_set_data (G_OBJECT(dlg), "status", (gpointer) l); @@ -1240,12 +1140,8 @@ CloneTiler::CloneTiler () : // Buttons { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); { @@ -1259,12 +1155,8 @@ CloneTiler::CloneTiler () : } { // buttons which are enabled only when there are tiled clones -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *sb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto sb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(sb), FALSE); -#else - GtkWidget *sb = gtk_hbox_new(FALSE, 0); -#endif gtk_box_pack_end (GTK_BOX (hb), sb, FALSE, FALSE, 0); g_object_set_data (G_OBJECT(dlg), "buttons_on_tiles", (gpointer) sb); { @@ -2673,12 +2565,8 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg) GtkWidget * CloneTiler::clonetiler_new_tab(GtkWidget *nb, const gchar *label) { GtkWidget *l = gtk_label_new_with_mnemonic (label); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, VB_MARGIN); + auto vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); -#else - GtkWidget *vb = gtk_vbox_new (FALSE, VB_MARGIN); -#endif gtk_container_set_border_width (GTK_CONTAINER (vb), VB_MARGIN); gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l); return vb; @@ -2693,12 +2581,8 @@ void CloneTiler::clonetiler_checkbox_toggled(GtkToggleButton *tb, gpointer *data GtkWidget * CloneTiler::clonetiler_checkbox(const char *tip, const char *attr) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif GtkWidget *b = gtk_check_button_new (); gtk_widget_set_tooltip_text (b, tip); @@ -2725,44 +2609,23 @@ void CloneTiler::clonetiler_value_changed(GtkAdjustment *adj, gpointer data) GtkWidget * CloneTiler::clonetiler_spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent/* = false*/) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, 0); -#endif { -#if WITH_GTKMM_3_0 Glib::RefPtr a; if (exponent) { a = Gtk::Adjustment::create(1.0, lower, upper, 0.01, 0.05, 0); } else { a = Gtk::Adjustment::create(0.0, lower, upper, 0.1, 0.5, 0); } -#else - Gtk::Adjustment *a; - if (exponent) { - a = new Gtk::Adjustment (1.0, lower, upper, 0.01, 0.05, 0); - } else { - a = new Gtk::Adjustment (0.0, lower, upper, 0.1, 0.5, 0); - } -#endif Inkscape::UI::Widget::SpinButton *sb; -#if WITH_GTKMM_3_0 if (exponent) { sb = new Inkscape::UI::Widget::SpinButton(a, 0.01, 2); } else { sb = new Inkscape::UI::Widget::SpinButton(a, 0.1, 1); } -#else - if (exponent) { - sb = new Inkscape::UI::Widget::SpinButton (*a, 0.01, 2); - } else { - sb = new Inkscape::UI::Widget::SpinButton (*a, 0.1, 1); - } -#endif sb->set_tooltip_text (tip); sb->set_width_chars (5); @@ -2786,12 +2649,8 @@ GtkWidget * CloneTiler::clonetiler_spinbox(const char *tip, const char *attr, do { GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), suffix); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_END); gtk_widget_set_valign(l, GTK_ALIGN_START); -#else - gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0); -#endif gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0); } @@ -2867,38 +2726,22 @@ void CloneTiler::clonetiler_reset(GtkWidget */*widget*/, GtkWidget *dlg) void CloneTiler::clonetiler_table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col) { -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(widget, GTK_ALIGN_FILL); gtk_widget_set_valign(widget, GTK_ALIGN_START); gtk_grid_attach(GTK_GRID(table), widget, col, row, 1, 1); -#else - GtkWidget *a = gtk_alignment_new (align, 0, 0, 0); - gtk_container_add(GTK_CONTAINER(a), widget); - gtk_table_attach ( GTK_TABLE (table), a, col, col + 1, row, row + 1, GTK_FILL, (GtkAttachOptions)0, 0, 0 ); -#endif } GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *table = gtk_grid_new(); + auto table = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(table), 6); gtk_grid_set_column_spacing(GTK_GRID(table), 8); -#else - GtkWidget *table = gtk_table_new (values + 2, 5, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 6); - gtk_table_set_col_spacings (GTK_TABLE (table), 8); -#endif gtk_container_set_border_width (GTK_CONTAINER (table), VB_MARGIN); { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new (FALSE, 0); -#endif GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON("object-rows")); gtk_box_pack_start (GTK_BOX (hb), i, FALSE, FALSE, 2); @@ -2911,12 +2754,8 @@ GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values) } { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new (FALSE, 0); -#endif GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON("object-columns")); gtk_box_pack_start (GTK_BOX (hb), i, FALSE, FALSE, 2); diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h index a8f1df0a0..e76ad028e 100644 --- a/src/ui/dialog/clonetiler.h +++ b/src/ui/dialog/clonetiler.h @@ -121,13 +121,8 @@ private: GtkSizeGroup* table_row_labels; Inkscape::UI::Widget::UnitMenu *unit_menu; -#if WITH_GTKMM_3_0 Glib::RefPtr fill_width; Glib::RefPtr fill_height; -#else - Gtk::Adjustment *fill_width; - Gtk::Adjustment *fill_height; -#endif sigc::connection desktopChangeConn; sigc::connection selectChangedConn; diff --git a/src/ui/dialog/debug.cpp b/src/ui/dialog/debug.cpp index d127261c0..48d7abbdd 100644 --- a/src/ui/dialog/debug.cpp +++ b/src/ui/dialog/debug.cpp @@ -68,12 +68,7 @@ DebugDialogImpl::DebugDialogImpl() { set_title(_("Messages")); set_size_request(300, 400); - -#if WITH_GTKMM_3_0 - Gtk::Box *mainVBox = get_content_area(); -#else - Gtk::Box *mainVBox = get_vbox(); -#endif + auto mainVBox = get_content_area(); //## Add a menu for clear() Gtk::MenuItem* item = Gtk::manage(new Gtk::MenuItem(_("_File"), true)); diff --git a/src/ui/dialog/document-metadata.cpp b/src/ui/dialog/document-metadata.cpp index da1facc08..602c3d6be 100644 --- a/src/ui/dialog/document-metadata.cpp +++ b/src/ui/dialog/document-metadata.cpp @@ -61,12 +61,7 @@ DocumentMetadata::getInstance() DocumentMetadata::DocumentMetadata() -#if WITH_GTKMM_3_0 : UI::Widget::Panel ("", "/dialogs/documentmetadata", SP_VERB_DIALOG_METADATA) -#else - : UI::Widget::Panel ("", "/dialogs/documentmetadata", SP_VERB_DIALOG_METADATA), - _page_metadata1(1, 1), _page_metadata2(1, 1) -#endif { hide(); _getContents()->set_spacing (4); @@ -75,15 +70,10 @@ DocumentMetadata::DocumentMetadata() _page_metadata1.set_border_width(2); _page_metadata2.set_border_width(2); -#if WITH_GTKMM_3_0 _page_metadata1.set_column_spacing(2); _page_metadata2.set_column_spacing(2); _page_metadata1.set_row_spacing(2); _page_metadata2.set_row_spacing(2); -#else - _page_metadata1.set_spacings(2); - _page_metadata2.set_spacings(2); -#endif _notebook.append_page(_page_metadata1, _("Metadata")); _notebook.append_page(_page_metadata2, _("License")); @@ -126,12 +116,8 @@ DocumentMetadata::build_metadata() label->set_markup (_("Dublin Core Entities")); label->set_alignment (0.0); -#if WITH_GTKMM_3_0 label->set_valign(Gtk::ALIGN_CENTER); _page_metadata1.attach(*label, 0, 0, 3, 1); -#else - _page_metadata1.attach(*label, 0,3,0,1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif /* add generic metadata entry areas */ struct rdf_work_entity_t * entity; @@ -143,7 +129,6 @@ DocumentMetadata::build_metadata() Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 space->set_valign(Gtk::ALIGN_CENTER); _page_metadata1.attach(*space, 0, row, 1, 1); @@ -153,11 +138,6 @@ DocumentMetadata::build_metadata() w->_packable->set_hexpand(); w->_packable->set_valign(Gtk::ALIGN_CENTER); _page_metadata1.attach(*w->_packable, 2, row, 1, 1); -#else - _page_metadata1.attach(*space, 0,1, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata1.attach(w->_label, 1,2, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata1.attach(*w->_packable, 2,3, row, row+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } } @@ -167,31 +147,20 @@ DocumentMetadata::build_metadata() Gtk::Label *llabel = Gtk::manage (new Gtk::Label); llabel->set_markup (_("License")); llabel->set_alignment (0.0); - -#if WITH_GTKMM_3_0 llabel->set_valign(Gtk::ALIGN_CENTER); _page_metadata2.attach(*llabel, 0, row, 3, 1); -#else - _page_metadata2.attach(*llabel, 0,3, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif /* add license selector pull-down and URI */ ++row; _licensor.init (_wr); Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); - -#if WITH_GTKMM_3_0 space->set_valign(Gtk::ALIGN_CENTER); _page_metadata2.attach(*space, 0, row, 1, 1); _licensor.set_hexpand(); _licensor.set_valign(Gtk::ALIGN_CENTER); _page_metadata2.attach(_licensor, 1, row, 2, 1); -#else - _page_metadata2.attach(*space, 0,1, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata2.attach(_licensor, 1,3, row, row+1, Gtk::EXPAND|Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif } /** diff --git a/src/ui/dialog/document-metadata.h b/src/ui/dialog/document-metadata.h index cde5d92fd..2c56e9317 100644 --- a/src/ui/dialog/document-metadata.h +++ b/src/ui/dialog/document-metadata.h @@ -21,12 +21,7 @@ #include #include "ui/widget/panel.h" #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include "inkscape.h" #include "ui/widget/licensor.h" @@ -62,13 +57,8 @@ protected: Gtk::Notebook _notebook; -#if WITH_GTKMM_3_0 Gtk::Grid _page_metadata1; Gtk::Grid _page_metadata2; -#else - Gtk::Table _page_metadata1; - Gtk::Table _page_metadata2; -#endif //--------------------------------------------------------------- RDElist _rdflist; diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp index 589973162..33f134c11 100644 --- a/src/ui/dialog/document-properties.cpp +++ b/src/ui/dialog/document-properties.cpp @@ -223,25 +223,16 @@ DocumentProperties::~DocumentProperties() * widget in columns 2-3; (non-0, 0) means label in columns 1-3; and * (non-0, non-0) means two widgets in columns 2 and 3. */ -#if WITH_GTKMM_3_0 inline void attach_all(Gtk::Grid &table, Gtk::Widget *const arr[], unsigned const n, int start = 0, int docum_prop_flag = 0) -#else -inline void attach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned const n, int start = 0, int docum_prop_flag = 0) -#endif { for (unsigned i = 0, r = start; i < n; i += 2) { if (arr[i] && arr[i+1]) { -#if WITH_GTKMM_3_0 arr[i]->set_hexpand(); arr[i+1]->set_hexpand(); arr[i]->set_valign(Gtk::ALIGN_CENTER); arr[i+1]->set_valign(Gtk::ALIGN_CENTER); table.attach(*arr[i], 1, r, 1, 1); table.attach(*arr[i+1], 2, r, 1, 1); -#else - table.attach(*arr[i], 1, 2, r, r+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); - table.attach(*arr[i+1], 2, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { if (arr[i+1]) { Gtk::AttachOptions yoptions = (Gtk::AttachOptions)0; @@ -252,7 +243,6 @@ inline void attach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned con if (docum_prop_flag) { // this sets the padding for subordinate widgets on the "Page" page if( i==(n-8) || i==(n-10) ) { -#if WITH_GTKMM_3_0 arr[i+1]->set_hexpand(); arr[i+1]->set_margin_left(20); arr[i+1]->set_margin_right(20); @@ -263,11 +253,7 @@ inline void attach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned con arr[i+1]->set_valign(Gtk::ALIGN_CENTER); table.attach(*arr[i+1], 1, r, 2, 1); -#else - table.attach(*arr[i+1], 1, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, yoptions, 20,0); -#endif } else { -#if WITH_GTKMM_3_0 arr[i+1]->set_hexpand(); if (yoptions & Gtk::EXPAND) @@ -276,12 +262,8 @@ inline void attach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned con arr[i+1]->set_valign(Gtk::ALIGN_CENTER); table.attach(*arr[i+1], 1, r, 2, 1); -#else - table.attach(*arr[i+1], 1, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, yoptions, 0,0); -#endif } } else { -#if WITH_GTKMM_3_0 arr[i+1]->set_hexpand(); if (yoptions & Gtk::EXPAND) @@ -290,32 +272,21 @@ inline void attach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned con arr[i+1]->set_valign(Gtk::ALIGN_CENTER); table.attach(*arr[i+1], 1, r, 2, 1); -#else - table.attach(*arr[i+1], 1, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, yoptions, 0,0); -#endif } } else if (arr[i]) { Gtk::Label& label = reinterpret_cast(*arr[i]); label.set_alignment (0.0); -#if WITH_GTKMM_3_0 label.set_hexpand(); label.set_valign(Gtk::ALIGN_CENTER); table.attach(label, 0, r, 3, 1); -#else - table.attach (label, 0, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 space->set_halign(Gtk::ALIGN_CENTER); space->set_valign(Gtk::ALIGN_CENTER); table.attach(*space, 0, r, 1, 1); -#else - table.attach (*space, 0, 1, r, r+1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0,0,0); -#endif } } ++r; @@ -685,52 +656,35 @@ void DocumentProperties::build_cms() label_link->set_alignment(0.0); -#if WITH_GTKMM_3_0 label_link->set_hexpand(); label_link->set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(*label_link, 0, row, 3, 1); -#else - _page_cms->table().attach(*label_link, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _LinkedProfilesListScroller.set_hexpand(); _LinkedProfilesListScroller.set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(_LinkedProfilesListScroller, 0, row, 3, 1); -#else - _page_cms->table().attach(_LinkedProfilesListScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; Gtk::HBox* spacer = Gtk::manage(new Gtk::HBox()); spacer->set_size_request(SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 spacer->set_hexpand(); spacer->set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(*spacer, 0, row, 3, 1); -#else - _page_cms->table().attach(*spacer, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; label_avail->set_alignment(0.0); -#if WITH_GTKMM_3_0 label_avail->set_hexpand(); label_avail->set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(*label_avail, 0, row, 3, 1); -#else - _page_cms->table().attach(*label_avail, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _AvailableProfilesList.set_hexpand(); _AvailableProfilesList.set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(_AvailableProfilesList, 0, row, 1, 1); @@ -744,11 +698,6 @@ void DocumentProperties::build_cms() _unlink_btn.set_halign(Gtk::ALIGN_CENTER); _unlink_btn.set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(_unlink_btn, 2, row, 1, 1); -#else - _page_cms->table().attach(_AvailableProfilesList, 0, 1, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); - _page_cms->table().attach(_link_btn, 1, 2, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, 2, 0); - _page_cms->table().attach(_unlink_btn, 2, 3, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, 0, 0); -#endif // Set up the Avialable Profiles combo box _AvailableProfilesListStore = Gtk::ListStore::create(_AvailableProfilesListColumns); @@ -815,41 +764,27 @@ void DocumentProperties::build_scripting() gint row = 0; label_external->set_alignment(0.0); - -#if WITH_GTKMM_3_0 label_external->set_hexpand(); label_external->set_valign(Gtk::ALIGN_CENTER); _page_external_scripts->table().attach(*label_external, 0, row, 3, 1); -#else - _page_external_scripts->table().attach(*label_external, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _ExternalScriptsListScroller.set_hexpand(); _ExternalScriptsListScroller.set_valign(Gtk::ALIGN_CENTER); _page_external_scripts->table().attach(_ExternalScriptsListScroller, 0, row, 3, 1); -#else - _page_external_scripts->table().attach(_ExternalScriptsListScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; Gtk::HBox* spacer_external = Gtk::manage(new Gtk::HBox()); spacer_external->set_size_request(SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 spacer_external->set_hexpand(); spacer_external->set_valign(Gtk::ALIGN_CENTER); _page_external_scripts->table().attach(*spacer_external, 0, row, 3, 1); -#else - _page_external_scripts->table().attach(*spacer_external, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _script_entry.set_hexpand(); _script_entry.set_valign(Gtk::ALIGN_CENTER); _page_external_scripts->table().attach(_script_entry, 0, row, 1, 1); @@ -863,11 +798,6 @@ void DocumentProperties::build_scripting() _external_remove_btn.set_halign(Gtk::ALIGN_CENTER); _external_remove_btn.set_valign(Gtk::ALIGN_CENTER); _page_external_scripts->table().attach(_external_remove_btn, 2, row, 1, 1); -#else - _page_external_scripts->table().attach(_script_entry, 0, 1, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); - _page_external_scripts->table().attach(_external_add_btn, 1, 2, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, 2, 0); - _page_external_scripts->table().attach(_external_remove_btn, 2, 3, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, 0, 0); -#endif //# Set up the External Scripts box _ExternalScriptsListStore = Gtk::ListStore::create(_ExternalScriptsListColumns); @@ -888,12 +818,6 @@ void DocumentProperties::build_scripting() _embed_remove_btn.set_tooltip_text(_("Remove")); docprops_style_button(_embed_remove_btn, INKSCAPE_ICON("list-remove")); -#if !WITH_GTKMM_3_0 - // TODO: This has been removed from Gtkmm 3.0. Check that - // everything still looks OK! - _embed_button_box.set_child_min_width( 16 ); - _embed_button_box.set_spacing( 4 ); -#endif _embed_button_box.set_layout (Gtk::BUTTONBOX_START); _embed_button_box.add(_embed_new_btn); _embed_button_box.add(_embed_remove_btn); @@ -902,47 +826,29 @@ void DocumentProperties::build_scripting() row = 0; label_embedded->set_alignment(0.0); - -#if WITH_GTKMM_3_0 label_embedded->set_hexpand(); label_embedded->set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(*label_embedded, 0, row, 3, 1); -#else - _page_embedded_scripts->table().attach(*label_embedded, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _EmbeddedScriptsListScroller.set_hexpand(); _EmbeddedScriptsListScroller.set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(_EmbeddedScriptsListScroller, 0, row, 3, 1); -#else - _page_embedded_scripts->table().attach(_EmbeddedScriptsListScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _embed_button_box.set_hexpand(); _embed_button_box.set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(_embed_button_box, 0, row, 1, 1); -#else - _page_embedded_scripts->table().attach(_embed_button_box, 0, 1, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; Gtk::HBox* spacer_embedded = Gtk::manage(new Gtk::HBox()); spacer_embedded->set_size_request(SPACE_SIZE_X, SPACE_SIZE_Y); - -#if WITH_GTKMM_3_0 spacer_embedded->set_hexpand(); spacer_embedded->set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(*spacer_embedded, 0, row, 3, 1); -#else - _page_embedded_scripts->table().attach(*spacer_embedded, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; @@ -958,24 +864,15 @@ void DocumentProperties::build_scripting() label_embedded_content->set_markup (_("Content:")); label_embedded_content->set_alignment(0.0); - -#if WITH_GTKMM_3_0 label_embedded_content->set_hexpand(); label_embedded_content->set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(*label_embedded_content, 0, row, 3, 1); -#else - _page_embedded_scripts->table().attach(*label_embedded_content, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _EmbeddedContentScroller.set_hexpand(); _EmbeddedContentScroller.set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(_EmbeddedContentScroller, 0, row, 3, 1); -#else - _page_embedded_scripts->table().attach(_EmbeddedContentScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif _EmbeddedContentScroller.add(_EmbeddedContent); _EmbeddedContentScroller.set_shadow_type(Gtk::SHADOW_IN); @@ -1037,12 +934,8 @@ void DocumentProperties::build_metadata() label->set_markup (_("Dublin Core Entities")); label->set_alignment (0.0); -#if WITH_GTKMM_3_0 label->set_valign(Gtk::ALIGN_CENTER); _page_metadata1->table().attach (*label, 0,0,3,1); -#else - _page_metadata1->table().attach (*label, 0,3,0,1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif /* add generic metadata entry areas */ struct rdf_work_entity_t * entity; @@ -1053,8 +946,6 @@ void DocumentProperties::build_metadata() _rdflist.push_back (w); Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); - -#if WITH_GTKMM_3_0 space->set_valign(Gtk::ALIGN_CENTER); _page_metadata1->table().attach(*space, 0, row, 1, 1); @@ -1064,11 +955,6 @@ void DocumentProperties::build_metadata() w->_packable->set_hexpand(); w->_packable->set_valign(Gtk::ALIGN_CENTER); _page_metadata1->table().attach(*w->_packable, 2, row, 1, 1); -#else - _page_metadata1->table().attach (*space, 0,1, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata1->table().attach (w->_label, 1,2, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata1->table().attach (*w->_packable, 2,3, row, row+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } } @@ -1077,11 +963,7 @@ void DocumentProperties::build_metadata() Gtk::Button *button_load = Gtk::manage (new Gtk::Button(_("Use _default"),1)); button_load->set_tooltip_text(_("Use the previously saved default metadata here")); -#if WITH_GTKMM_3_0 - Gtk::ButtonBox *box_buttons = Gtk::manage (new Gtk::ButtonBox); -#else - Gtk::HButtonBox *box_buttons = Gtk::manage (new Gtk::HButtonBox); -#endif + auto box_buttons = Gtk::manage (new Gtk::ButtonBox); box_buttons->set_layout(Gtk::BUTTONBOX_END); box_buttons->set_spacing(4); @@ -1099,12 +981,8 @@ void DocumentProperties::build_metadata() llabel->set_markup (_("License")); llabel->set_alignment (0.0); -#if WITH_GTKMM_3_0 llabel->set_valign(Gtk::ALIGN_CENTER); _page_metadata2->table().attach(*llabel, 0, row, 3, 1); -#else - _page_metadata2->table().attach (*llabel, 0,3, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif /* add license selector pull-down and URI */ ++row; @@ -1112,17 +990,12 @@ void DocumentProperties::build_metadata() Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 space->set_valign(Gtk::ALIGN_CENTER); _page_metadata2->table().attach(*space, 0, row, 1, 1); _licensor.set_hexpand(); _licensor.set_valign(Gtk::ALIGN_CENTER); _page_metadata2->table().attach(_licensor, 1, row, 3, 1); -#else - _page_metadata2->table().attach (*space, 0,1, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata2->table().attach (_licensor, 1,3, row, row+1, Gtk::EXPAND|Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif } void DocumentProperties::addExternalScript(){ diff --git a/src/ui/dialog/document-properties.h b/src/ui/dialog/document-properties.h index 7f91d9ea0..8d1c6b38a 100644 --- a/src/ui/dialog/document-properties.h +++ b/src/ui/dialog/document-properties.h @@ -173,11 +173,7 @@ protected: Gtk::Button _external_remove_btn; Gtk::Button _embed_new_btn; Gtk::Button _embed_remove_btn; -#if WITH_GTKMM_3_0 - Gtk::ButtonBox _embed_button_box; -#else - Gtk::HButtonBox _embed_button_box; -#endif + Gtk::ButtonBox _embed_button_box; class ExternalScriptsColumns : public Gtk::TreeModel::ColumnRecord { diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 2fb5f9e3b..5e7c68985 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -29,11 +29,7 @@ #include #include #include -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include #include @@ -218,15 +214,9 @@ Export::Export (void) : selectiontype_buttons[i]->signal_clicked().connect(sigc::mem_fun(*this, &Export::onAreaToggled)); } -#if WITH_GTKMM_3_0 - Gtk::Grid* t = new Gtk::Grid(); + auto t = new Gtk::Grid(); t->set_row_spacing(4); t->set_column_spacing(4); -#else - Gtk::Table* t = new Gtk::Table(3, 4, false); - t->set_row_spacings (4); - t->set_col_spacings (4); -#endif x0_adj = createSpinbutton ( "x0", 0.0, -1000000.0, 1000000.0, 0.1, 1.0, t, 0, 0, _("_x0:"), "", EXPORT_COORD_PRECISION, 1, @@ -268,15 +258,9 @@ Export::Export (void) : bm_label->set_use_markup(true); size_box.pack_start(*bm_label, false, false, 0); -#if WITH_GTKMM_3_0 - Gtk::Grid *t = new Gtk::Grid(); + auto t = new Gtk::Grid(); t->set_row_spacing(4); t->set_column_spacing(4); -#else - Gtk::Table *t = new Gtk::Table(2, 5, false); - t->set_row_spacings (4); - t->set_col_spacings (4); -#endif size_box.pack_start(*t); @@ -484,27 +468,14 @@ void Export::set_default_filename () { } } -#if WITH_GTKMM_3_0 Glib::RefPtr Export::createSpinbutton( gchar const * /*key*/, float val, float min, float max, float step, float page, Gtk::Grid *t, int x, int y, const Glib::ustring& ll, const Glib::ustring& lr, int digits, unsigned int sensitive, void (Export::*cb)() ) -#else -Gtk::Adjustment * Export::createSpinbutton( gchar const * /*key*/, float val, float min, float max, - float step, float page, - Gtk::Table *t, int x, int y, - const Glib::ustring& ll, const Glib::ustring& lr, - int digits, unsigned int sensitive, - void (Export::*cb)() ) -#endif { -#if WITH_GTKMM_3_0 - Glib::RefPtr adj = Gtk::Adjustment::create(val, min, max, step, page, 0); -#else - Gtk::Adjustment *adj = new Gtk::Adjustment ( val, min, max, step, page, 0 ); -#endif + auto adj = Gtk::Adjustment::create(val, min, max, step, page, 0); int pos = 0; Gtk::Label *l = NULL; @@ -512,28 +483,17 @@ Gtk::Adjustment * Export::createSpinbutton( gchar const * /*key*/, float val, fl if (!ll.empty()) { l = new Gtk::Label(ll,true); l->set_alignment (1.0, 0.5); - -#if WITH_GTKMM_3_0 l->set_hexpand(); l->set_vexpand(); t->attach(*l, x + pos, y, 1, 1); -#else - t->attach (*l, x + pos, x + pos + 1, y, y + 1, Gtk::EXPAND, Gtk::EXPAND, 0, 0 ); -#endif - l->set_sensitive(sensitive); pos++; } -#if WITH_GTKMM_3_0 - Gtk::SpinButton *sb = new Gtk::SpinButton(adj, 1.0, digits); + auto sb = new Gtk::SpinButton(adj, 1.0, digits); sb->set_hexpand(); sb->set_vexpand(); t->attach(*sb, x + pos, y, 1, 1); -#else - Gtk::SpinButton *sb = new Gtk::SpinButton(*adj, 1.0, digits); - t->attach (*sb, x + pos, x + pos + 1, y, y + 1, Gtk::EXPAND, Gtk::EXPAND, 0, 0 ); -#endif sb->set_width_chars(7); sb->set_sensitive (sensitive); @@ -546,15 +506,9 @@ Gtk::Adjustment * Export::createSpinbutton( gchar const * /*key*/, float val, fl if (!lr.empty()) { l = new Gtk::Label(lr,true); l->set_alignment (0.0, 0.5); - -#if WITH_GTKMM_3_0 l->set_hexpand(); l->set_vexpand(); t->attach(*l, x + pos, y, 1, 1); -#else - t->attach (*l, x + pos, x + pos + 1, y, y + 1, Gtk::EXPAND, Gtk::EXPAND, 0, 0 ); -#endif - l->set_sensitive (sensitive); pos++; l->set_mnemonic_widget (*sb); @@ -932,11 +886,7 @@ Gtk::Dialog * Export::create_progress_dialog (Glib::ustring progress_text) { Gtk::ProgressBar *prg = new Gtk::ProgressBar (); prg->set_text(progress_text); dlg->set_data ("progress", prg); -#if GTK_CHECK_VERSION(3,0,0) - Gtk::Box* CA = dlg->get_content_area(); -#else - Gtk::Box* CA = dlg->get_vbox(); -#endif + auto CA = dlg->get_content_area(); CA->pack_start(*prg, FALSE, FALSE, 4); Gtk::Button* btn = dlg->add_button (Gtk::Stock::CANCEL,Gtk::RESPONSE_CANCEL ); @@ -1357,11 +1307,7 @@ void Export::onBrowse () Glib::RefPtr parentWindow = desktop->getToplevel()->get_window(); g_assert(parentWindow->gobj() != NULL); -#if WITH_GTKMM_3_0 opf.hwndOwner = (HWND)gdk_win32_window_get_handle((GdkWindow*)parentWindow->gobj()); -#else - opf.hwndOwner = (HWND)gdk_win32_drawable_get_handle((GdkDrawable*)parentWindow->gobj()); -#endif opf.lpstrFilter = filter_string; opf.lpstrCustomFilter = 0; opf.nMaxCustFilter = 0L; @@ -1521,11 +1467,7 @@ void Export::detectSize() { } /* sp_export_detect_size */ /// Called when area x0 value is changed -#if WITH_GTKMM_3_0 void Export::areaXChange(Glib::RefPtr& adj) -#else -void Export::areaXChange (Gtk::Adjustment *adj) -#endif { float x0, x1, xdpi, width; @@ -1564,11 +1506,7 @@ void Export::areaXChange (Gtk::Adjustment *adj) } // end of sp_export_area_x_value_changed() /// Called when area y0 value is changed. -#if WITH_GTKMM_3_0 void Export::areaYChange(Glib::RefPtr& adj) -#else -void Export::areaYChange (Gtk::Adjustment *adj) -#endif { float y0, y1, ydpi, height; @@ -1875,11 +1813,7 @@ void Export::setArea( double x0, double y0, double x1, double y1 ) * @param adj The adjustment widget * @param val What value to set it to. */ -#if WITH_GTKMM_3_0 void Export::setValue(Glib::RefPtr& adj, double val ) -#else -void Export::setValue( Gtk::Adjustment *adj, double val ) -#endif { if (adj) { adj->set_value(val); @@ -1897,11 +1831,7 @@ void Export::setValue( Gtk::Adjustment *adj, double val ) * @param adj The adjustment widget * @param val What the value should be in points. */ -#if WITH_GTKMM_3_0 void Export::setValuePx(Glib::RefPtr& adj, double val) -#else -void Export::setValuePx( Gtk::Adjustment *adj, double val) -#endif { Unit const *unit = unit_selector.getUnit(); @@ -1920,11 +1850,7 @@ void Export::setValuePx( Gtk::Adjustment *adj, double val) * * @return The value in the specified adjustment. */ -#if WITH_GTKMM_3_0 float Export::getValue(Glib::RefPtr& adj) -#else -float Export::getValue( Gtk::Adjustment *adj ) -#endif { if (!adj) { g_message("sp_export_value_get : adj is NULL"); @@ -1946,11 +1872,7 @@ float Export::getValue( Gtk::Adjustment *adj ) * * @return The value in the adjustment in points. */ -#if WITH_GTKMM_3_0 float Export::getValuePx(Glib::RefPtr& adj) -#else -float Export::getValuePx( Gtk::Adjustment *adj ) -#endif { float value = getValue( adj); Unit const *unit = unit_selector.getUnit(); diff --git a/src/ui/dialog/export.h b/src/ui/dialog/export.h index 23af0109b..a1c44714b 100644 --- a/src/ui/dialog/export.h +++ b/src/ui/dialog/export.h @@ -79,17 +79,10 @@ private: /* * Getter/setter style functions for the spinbuttons */ -#if WITH_GTKMM_3_0 void setValue(Glib::RefPtr& adj, double val); void setValuePx(Glib::RefPtr& adj, double val); float getValue(Glib::RefPtr& adj); float getValuePx(Glib::RefPtr& adj); -#else - void setValue (Gtk::Adjustment *adj, double val); - void setValuePx (Gtk::Adjustment *adj, double val); - float getValue (Gtk::Adjustment *adj); - float getValuePx (Gtk::Adjustment *adj); -#endif /** * Helper function to create, style and pack spinbuttons for the export dialog. @@ -112,21 +105,12 @@ private: * * No unit_selector is stored in the created spinbutton, relies on external unit management */ -#if WITH_GTKMM_3_0 Glib::RefPtr createSpinbutton( gchar const *key, float val, float min, float max, float step, float page, Gtk::Grid *t, int x, int y, const Glib::ustring& ll, const Glib::ustring& lr, int digits, unsigned int sensitive, void (Export::*cb)() ); -#else - Gtk::Adjustment * createSpinbutton( gchar const *key, float val, float min, float max, - float step, float page, - Gtk::Table *t, int x, int y, - const Glib::ustring& ll, const Glib::ustring& lr, - int digits, unsigned int sensitive, - void (Export::*cb)() ); -#endif /** * One of the area select radio buttons was pressed @@ -152,11 +136,7 @@ private: void onAreaX1Change() { areaXChange(x1_adj); } ; -#if WITH_GTKMM_3_0 void areaXChange(Glib::RefPtr& adj); -#else - void areaXChange ( Gtk::Adjustment *adj); -#endif /** * Area Y value changed callback @@ -167,11 +147,7 @@ private: void onAreaY1Change() { areaYChange(y1_adj); } ; -#if WITH_GTKMM_3_0 void areaYChange(Glib::RefPtr& adj); -#else - void areaYChange ( Gtk::Adjustment *adj); -#endif /** * Unit changed callback @@ -298,7 +274,6 @@ private: Gtk::VBox area_box; Gtk::VBox singleexport_box; -#if WITH_GTKMM_3_0 /* Custom size widgets */ Glib::RefPtr x0_adj; Glib::RefPtr x1_adj; @@ -312,21 +287,6 @@ private: Glib::RefPtr bmheight_adj; Glib::RefPtr xdpi_adj; Glib::RefPtr ydpi_adj; -#else - /* Custom size widgets */ - Gtk::Adjustment *x0_adj; - Gtk::Adjustment *x1_adj; - Gtk::Adjustment *y0_adj; - Gtk::Adjustment *y1_adj; - Gtk::Adjustment *width_adj; - Gtk::Adjustment *height_adj; - - /* Bitmap size widgets */ - Gtk::Adjustment *bmwidth_adj; - Gtk::Adjustment *bmheight_adj; - Gtk::Adjustment *xdpi_adj; - Gtk::Adjustment *ydpi_adj; -#endif Gtk::VBox size_box; Gtk::Label* bm_label; diff --git a/src/ui/dialog/filedialogimpl-gtkmm.cpp b/src/ui/dialog/filedialogimpl-gtkmm.cpp index 042637d22..e8c1bf723 100644 --- a/src/ui/dialog/filedialogimpl-gtkmm.cpp +++ b/src/ui/dialog/filedialogimpl-gtkmm.cpp @@ -754,16 +754,9 @@ FileOpenDialogImplGtk::~FileOpenDialogImplGtk() void FileOpenDialogImplGtk::addFilterMenu(Glib::ustring name, Glib::ustring pattern) { - -#if WITH_GTKMM_3_0 - Glib::RefPtr allFilter = Gtk::FileFilter::create(); + auto allFilter = Gtk::FileFilter::create(); allFilter->set_name(_(name.c_str())); allFilter->add_pattern(pattern); -#else - Gtk::FileFilter allFilter; - allFilter.set_name(_(name.c_str())); - allFilter.add_pattern(pattern); -#endif extensionMap[Glib::ustring(_("All Files"))] = NULL; add_filter(allFilter); } @@ -775,51 +768,27 @@ void FileOpenDialogImplGtk::createFilterMenu() } if (_dialogType == EXE_TYPES) { -#if WITH_GTKMM_3_0 - Glib::RefPtr allFilter = Gtk::FileFilter::create(); + auto allFilter = Gtk::FileFilter::create(); allFilter->set_name(_("All Files")); allFilter->add_pattern("*"); -#else - Gtk::FileFilter allFilter; - allFilter.set_name(_("All Files")); - allFilter.add_pattern("*"); -#endif extensionMap[Glib::ustring(_("All Files"))] = NULL; add_filter(allFilter); } else { -#if WITH_GTKMM_3_0 - Glib::RefPtr allInkscapeFilter = Gtk::FileFilter::create(); + auto allInkscapeFilter = Gtk::FileFilter::create(); allInkscapeFilter->set_name(_("All Inkscape Files")); - Glib::RefPtr allFilter = Gtk::FileFilter::create(); + auto allFilter = Gtk::FileFilter::create(); allFilter->set_name(_("All Files")); allFilter->add_pattern("*"); - Glib::RefPtr allImageFilter = Gtk::FileFilter::create(); + auto allImageFilter = Gtk::FileFilter::create(); allImageFilter->set_name(_("All Images")); - Glib::RefPtr allVectorFilter = Gtk::FileFilter::create(); + auto allVectorFilter = Gtk::FileFilter::create(); allVectorFilter->set_name(_("All Vectors")); - Glib::RefPtr allBitmapFilter = Gtk::FileFilter::create(); + auto allBitmapFilter = Gtk::FileFilter::create(); allBitmapFilter->set_name(_("All Bitmaps")); -#else - Gtk::FileFilter allInkscapeFilter; - allInkscapeFilter.set_name(_("All Inkscape Files")); - - Gtk::FileFilter allFilter; - allFilter.set_name(_("All Files")); - allFilter.add_pattern("*"); - - Gtk::FileFilter allImageFilter; - allImageFilter.set_name(_("All Images")); - - Gtk::FileFilter allVectorFilter; - allVectorFilter.set_name(_("All Vectors")); - - Gtk::FileFilter allBitmapFilter; - allBitmapFilter.set_name(_("All Bitmaps")); -#endif extensionMap[Glib::ustring(_("All Inkscape Files"))] = NULL; add_filter(allInkscapeFilter); @@ -854,29 +823,16 @@ void FileOpenDialogImplGtk::createFilterMenu() Glib::ustring uname(_(imod->get_filetypename())); -#if WITH_GTKMM_3_0 - Glib::RefPtr filter = Gtk::FileFilter::create(); + auto filter = Gtk::FileFilter::create(); filter->set_name(uname); filter->add_pattern(upattern); -#else - Gtk::FileFilter filter; - filter.set_name(uname); - filter.add_pattern(upattern); -#endif - add_filter(filter); extensionMap[uname] = imod; // g_message("ext %s:%s '%s'\n", ioext->name, ioext->mimetype, upattern.c_str()); -#if WITH_GTKMM_3_0 allInkscapeFilter->add_pattern(upattern); if (strncmp("image", imod->get_mimetype(), 5) == 0) allImageFilter->add_pattern(upattern); -#else - allInkscapeFilter.add_pattern(upattern); - if (strncmp("image", imod->get_mimetype(), 5) == 0) - allImageFilter.add_pattern(upattern); -#endif // uncomment this to find out all mime types supported by Inkscape import/open // g_print ("%s\n", imod->get_mimetype()); @@ -896,17 +852,9 @@ void FileOpenDialogImplGtk::createFilterMenu() strncmp("image/x-tga", imod->get_mimetype(), 11) == 0 || strncmp("image/x-pcx", imod->get_mimetype(), 11) == 0) { -#if WITH_GTKMM_3_0 allBitmapFilter->add_pattern(upattern); -#else - allBitmapFilter.add_pattern(upattern); -#endif } else { -#if WITH_GTKMM_3_0 allVectorFilter->add_pattern(upattern); -#else - allVectorFilter.add_pattern(upattern); -#endif } } } @@ -972,18 +920,13 @@ Glib::ustring FileOpenDialogImplGtk::getFilename(void) */ std::vector FileOpenDialogImplGtk::getFilenames() { -#if WITH_GTKMM_3_0 - std::vector result_tmp = get_filenames(); + auto result_tmp = get_filenames(); // Copy filenames to a vector of type Glib::ustring std::vector result; - for (std::vector::iterator it = result_tmp.begin(); it != result_tmp.end(); ++it) - result.push_back(*it); - -#else - std::vector result = get_filenames(); -#endif + for (auto it : result_tmp) + result.push_back(it); #ifdef WITH_GNOME_VFS if (result.empty() && gnome_vfs_initialized()) @@ -1170,13 +1113,8 @@ void FileSaveDialogImplGtk::fileTypeChangedCallback() // g_message("selected: %s\n", type.name.c_str()); extension = type.extension; -#if WITH_GTKMM_3_0 - Glib::RefPtr filter = Gtk::FileFilter::create(); + auto filter = Gtk::FileFilter::create(); filter->add_pattern(type.pattern); -#else - Gtk::FileFilter filter; - filter.add_pattern(type.pattern); -#endif set_filter(filter); updateNameAndExtension(); diff --git a/src/ui/dialog/filedialogimpl-win32.cpp b/src/ui/dialog/filedialogimpl-win32.cpp index cafc3be4f..02d77cba1 100644 --- a/src/ui/dialog/filedialogimpl-win32.cpp +++ b/src/ui/dialog/filedialogimpl-win32.cpp @@ -128,11 +128,7 @@ FileDialogBaseWin32::FileDialogBaseWin32(Gtk::Window &parent, Glib::RefPtr parentWindow = parent.get_window(); g_assert(parentWindow->gobj() != NULL); -#if WITH_GTKMM_3_0 _ownerHwnd = (HWND)gdk_win32_window_get_handle((GdkWindow*)parentWindow->gobj()); -#else - _ownerHwnd = (HWND)gdk_win32_drawable_get_handle((GdkDrawable*)parentWindow->gobj()); -#endif } FileDialogBaseWin32::~FileDialogBaseWin32() diff --git a/src/ui/dialog/fill-and-stroke.cpp b/src/ui/dialog/fill-and-stroke.cpp index 8141f7696..923993514 100644 --- a/src/ui/dialog/fill-and-stroke.cpp +++ b/src/ui/dialog/fill-and-stroke.cpp @@ -111,11 +111,7 @@ void FillAndStroke::setTargetDesktop(SPDesktop *desktop) } } -#if WITH_GTKMM_3_0 void FillAndStroke::_onSwitchPage(Gtk::Widget * /*page*/, guint pagenum) -#else -void FillAndStroke::_onSwitchPage(GtkNotebookPage * /*page*/, guint pagenum) -#endif { _savePagePref(pagenum); } @@ -132,24 +128,14 @@ void FillAndStroke::_layoutPageFill() { fillWdgt = Gtk::manage(sp_fill_style_widget_new()); - -#if WITH_GTKMM_3_0 _page_fill->table().attach(*fillWdgt, 0, 0, 1, 1); -#else - _page_fill->table().attach(*fillWdgt, 0, 1, 0, 1); -#endif } void FillAndStroke::_layoutPageStrokePaint() { strokeWdgt = Gtk::manage(sp_stroke_style_paint_widget_new()); - -#if WITH_GTKMM_3_0 _page_stroke_paint->table().attach(*strokeWdgt, 0, 0, 1, 1); -#else - _page_stroke_paint->table().attach(*strokeWdgt, 0, 1, 0, 1); -#endif } void @@ -158,12 +144,7 @@ FillAndStroke::_layoutPageStrokeStyle() //Gtk::Widget *strokeStyleWdgt = manage(Glib::wrap(sp_stroke_style_line_widget_new())); //Gtk::Widget *strokeStyleWdgt = static_cast(sp_stroke_style_line_widget_new()); strokeStyleWdgt = sp_stroke_style_line_widget_new(); - -#if WITH_GTKMM_3_0 _page_stroke_style->table().attach(*strokeStyleWdgt, 0, 0, 1, 1); -#else - _page_stroke_style->table().attach(*strokeStyleWdgt, 0, 1, 0, 1); -#endif } void diff --git a/src/ui/dialog/fill-and-stroke.h b/src/ui/dialog/fill-and-stroke.h index f2a6bf39d..67e9d60ed 100644 --- a/src/ui/dialog/fill-and-stroke.h +++ b/src/ui/dialog/fill-and-stroke.h @@ -64,11 +64,7 @@ protected: void _layoutPageStrokePaint(); void _layoutPageStrokeStyle(); void _savePagePref(guint page_num); -#if WITH_GTKMM_3_0 void _onSwitchPage(Gtk::Widget *page, guint pagenum); -#else - void _onSwitchPage(GtkNotebookPage *page, guint pagenum); -#endif private: FillAndStroke(FillAndStroke const &d); diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index d3ad5d1da..acf230b7f 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -22,9 +22,7 @@ #include "dialog-manager.h" #include -#if GTK_CHECK_VERSION(3,0,0) -# include -#endif +#include #include "ui/widget/spinbutton.h" @@ -319,15 +317,9 @@ public: set_tooltip_text(tip_text); } -#if WITH_GTKMM_3_0 Gdk::RGBA col; col.set_rgba_u(65535, 65535, 65535); set_rgba(col); -#else - Gdk::Color col; - col.set_rgb(65535, 65535, 65535); - set_color(col); -#endif } // Returns the color in 'rgb(r,g,b)' form. @@ -336,13 +328,8 @@ public: // no doubles here, so we can use the standard string stream. std::ostringstream os; -#if WITH_GTKMM_3_0 - const Gdk::RGBA c = get_rgba(); - const int r = c.get_red_u() / 257, g = c.get_green_u() / 257, b = c.get_blue_u() / 257;//TO-DO: verify this. This sounds a lot strange! shouldn't it be 256? -#else - const Gdk::Color c = get_color(); - const int r = c.get_red() / 257, g = c.get_green() / 257, b = c.get_blue() / 257;//TO-DO: verify this. This sounds a lot strange! shouldn't it be 256? -#endif + const auto c = get_rgba(); + const int r = c.get_red_u() / 257, g = c.get_green_u() / 257, b = c.get_blue_u() / 257;//TO-DO: verify this. This sounds a lot strange! shouldn't it be 256? os << "rgb(" << r << "," << g << "," << b << ")"; return os.str(); } @@ -359,15 +346,9 @@ public: } const int r = SP_RGBA32_R_U(i), g = SP_RGBA32_G_U(i), b = SP_RGBA32_B_U(i); -#if WITH_GTKMM_3_0 Gdk::RGBA col; col.set_rgba_u(r * 256, g * 256, b * 256); set_rgba(col); -#else - Gdk::Color col; - col.set_rgb(r * 256, g * 256, b * 256); - set_color(col); -#endif } }; @@ -1730,7 +1711,6 @@ Glib::PropertyProxy FilterEffectsDialog::CellRendererConnection::property return _primitive.get_proxy(); } -#if WITH_GTKMM_3_0 void FilterEffectsDialog::CellRendererConnection::get_preferred_width_vfunc(Gtk::Widget& widget, int& minimum_width, int& natural_width) const @@ -1764,27 +1744,6 @@ void FilterEffectsDialog::CellRendererConnection::get_preferred_height_for_width { get_preferred_height(widget, minimum_height, natural_height); } -#else -void FilterEffectsDialog::CellRendererConnection::get_size_vfunc( - Gtk::Widget& widget, const Gdk::Rectangle* /*cell_area*/, - int* x_offset, int* y_offset, int* width, int* height) const -{ - PrimitiveList& primlist = dynamic_cast(widget); - - if(x_offset) - (*x_offset) = 0; - if(y_offset) - (*y_offset) = 0; - if(width) - (*width) = size * primlist.primitive_count() + (primlist.get_input_type_width()) * 6; - if(height) { - // Scale the height depending on the number of inputs, unless it's - // the first primitive, in which case there are no connections - SPFilterPrimitive* prim = SP_FILTER_PRIMITIVE(_primitive.get_value()); - (*height) = size * input_count(prim); - } -} -#endif /*** PrimitiveList ***/ FilterEffectsDialog::PrimitiveList::PrimitiveList(FilterEffectsDialog& d) @@ -1792,13 +1751,8 @@ FilterEffectsDialog::PrimitiveList::PrimitiveList(FilterEffectsDialog& d) _in_drag(0), _observer(new Inkscape::XML::SignalObserver) { -#if WITH_GTKMM_3_0 d.signal_draw().connect(sigc::mem_fun(*this, &PrimitiveList::on_draw_signal)); signal_draw().connect(sigc::mem_fun(*this, &PrimitiveList::on_draw_signal)); -#else - d.signal_expose_event().connect(sigc::mem_fun(*this, &PrimitiveList::on_expose_signal)); - signal_expose_event().connect(sigc::mem_fun(*this, &PrimitiveList::on_expose_signal)); -#endif add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK); @@ -1961,25 +1915,9 @@ void FilterEffectsDialog::PrimitiveList::remove_selected() } } -#if !WITH_GTKMM_3_0 -bool FilterEffectsDialog::PrimitiveList::on_expose_signal(GdkEventExpose * /*evt*/) -{ - bool result = false; - - if (get_is_drawable()) - { - Cairo::RefPtr cr = get_bin_window()->create_cairo_context(); - result = on_draw_signal(cr); - } - - return result; -} -#endif - bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtr & cr) { cr->set_line_width(1.0); -#if GTK_CHECK_VERSION(3,0,0) // In GTK+ 3, the draw function receives the widget window, not the // bin_window (i.e., just the area under the column headers). We // therefore translate the origin of our coordinate system to account for this @@ -1987,7 +1925,7 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrtranslate(x_origin, y_origin); - GtkStyleContext *sc = gtk_widget_get_style_context(GTK_WIDGET(gobj())); + auto sc = gtk_widget_get_style_context(GTK_WIDGET(gobj())); GdkRGBA bg_color, fg_color; gtk_style_context_get_background_color(sc, GTK_STATE_FLAG_NORMAL, &bg_color); gtk_style_context_get_color(sc, GTK_STATE_FLAG_NORMAL, &fg_color); @@ -2005,9 +1943,6 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrchildren().size(); @@ -2026,25 +1961,15 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrsave(); cr->rectangle(x, 0, get_input_type_width(), vis.get_height()); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), &bg_color); cr->fill_preserve(); gdk_cairo_set_source_rgba(cr->cobj(), &fg_color); -#else - gdk_cairo_set_source_color(cr->cobj(), &(style->bg[GTK_STATE_NORMAL])); - cr->fill_preserve(); - gdk_cairo_set_source_color(cr->cobj(), &(style->text[GTK_STATE_NORMAL])); -#endif cr->move_to(x+get_input_type_width(), 0); cr->rotate_degrees(90); _vertical_layout->show_in_cairo_context(cr); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), &mid_color); -#else - gdk_cairo_set_source_color(cr->cobj(), &(style->dark[GTK_STATE_NORMAL])); -#endif cr->move_to(x, 0); cr->line_to(x, vis.get_height()); cr->stroke(); @@ -2061,24 +1986,16 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtr display = get_bin_window()->get_display(); - Glib::RefPtr dm = display->get_device_manager(); - Glib::RefPtr device = dm->get_client_pointer(); + auto display = get_bin_window()->get_display(); + auto dm = display->get_device_manager(); + auto device = dm->get_client_pointer(); get_bin_window()->get_device_position(device, mx, my, mask); -#else - get_bin_window()->get_pointer(mx, my, mask); -#endif // Outline the bottom of the connection area const int outline_x = x + fheight * (row_count - row_index); cr->save(); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), &mid_color); -#else - gdk_cairo_set_source_color(cr->cobj(), &(style->dark[GTK_STATE_NORMAL])); -#endif cr->move_to(x, y + h); cr->line_to(outline_x, y + h); @@ -2101,17 +2018,10 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrsave(); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), inside && mask & GDK_BUTTON1_MASK ? &mid_color : &mid_color_active); -#else - gdk_cairo_set_source_color(cr->cobj(), - inside && mask & GDK_BUTTON1_MASK ? - &(style->dark[GTK_STATE_NORMAL]) : - &(style->dark[GTK_STATE_ACTIVE])); -#endif draw_connection_node(cr, con_poly, inside); @@ -2137,17 +2047,10 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrsave(); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), inside && mask & GDK_BUTTON1_MASK ? &mid_color : &mid_color_active); -#else - gdk_cairo_set_source_color(cr->cobj(), - inside && mask & GDK_BUTTON1_MASK ? - &(style->dark[GTK_STATE_NORMAL]) : - &(style->dark[GTK_STATE_ACTIVE])); -#endif draw_connection_node(cr, con_poly, inside); @@ -2170,17 +2073,10 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrsave(); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), inside && mask & GDK_BUTTON1_MASK ? &mid_color : &mid_color_active); -#else - gdk_cairo_set_source_color(cr->cobj(), - inside && mask & GDK_BUTTON1_MASK ? - &(style->dark[GTK_STATE_NORMAL]) : - &(style->dark[GTK_STATE_ACTIVE])); -#endif draw_connection_node(cr, con_poly, inside); @@ -2216,8 +2112,7 @@ void FilterEffectsDialog::PrimitiveList::draw_connection(const Cairo::RefPtrsave(); -#if GTK_CHECK_VERSION(3,0,0) - GtkStyleContext *sc = gtk_widget_get_style_context(GTK_WIDGET(gobj())); + auto sc = gtk_widget_get_style_context(GTK_WIDGET(gobj())); GdkRGBA bg_color, fg_color; gtk_style_context_get_background_color(sc, GTK_STATE_FLAG_NORMAL, &bg_color); @@ -2227,9 +2122,6 @@ void FilterEffectsDialog::PrimitiveList::draw_connection(const Cairo::RefPtrcobj(), &mid_color); -#else - gdk_cairo_set_source_color(cr->cobj(), &(style->dark[GTK_STATE_NORMAL])); -#endif else cr->set_source_rgb(0.0, 0.0, 0.0); @@ -2669,8 +2557,7 @@ void FilterEffectsDialog::PrimitiveList::on_drag_end(const Glib::RefPtr a = dynamic_cast(get_parent())->get_vadjustment(); + auto a = dynamic_cast(get_parent())->get_vadjustment(); double v = a->get_value() + _autoscroll_y; if(v < 0) @@ -2679,25 +2566,13 @@ bool FilterEffectsDialog::PrimitiveList::on_scroll_timeout() v = a->get_upper() - a->get_page_size(); a->set_value(v); -#else - Gtk::Adjustment& a = *dynamic_cast(get_parent())->get_vadjustment(); - double v = a.get_value() + _autoscroll_y; - - if(v < 0) - v = 0; - if(v > a.get_upper() - a.get_page_size()) - v = a.get_upper() - a.get_page_size(); - - a.set_value(v); -#endif queue_draw(); } if(_autoscroll_x) { -#if WITH_GTKMM_3_0 - Glib::RefPtr a_h = dynamic_cast(get_parent())->get_hadjustment(); + auto a_h = dynamic_cast(get_parent())->get_hadjustment(); double h = a_h->get_value() + _autoscroll_x; if(h < 0) @@ -2706,18 +2581,6 @@ bool FilterEffectsDialog::PrimitiveList::on_scroll_timeout() h = a_h->get_upper() - a_h->get_page_size(); a_h->set_value(h); -#else - Gtk::Adjustment& a_h = *dynamic_cast(get_parent())->get_hadjustment(); - double h = a_h.get_value() + _autoscroll_x; - - if(h < 0) - h = 0; - if(h > a_h.get_upper() - a_h.get_page_size()) - h = a_h.get_upper() - a_h.get_page_size(); - - a_h.set_value(h); - -#endif queue_draw(); } @@ -2759,13 +2622,8 @@ FilterEffectsDialog::FilterEffectsDialog() _sizegroup->set_ignore_hidden(); // Initialize widget hierarchy -#if WITH_GTKMM_3_0 - Gtk::Paned* hpaned = Gtk::manage(new Gtk::Paned); + auto hpaned = Gtk::manage(new Gtk::Paned); _primitive_box = Gtk::manage(new Gtk::Paned); -#else - Gtk::HPaned* hpaned = Gtk::manage(new Gtk::HPaned); - _primitive_box = Gtk::manage(new Gtk::VPaned); -#endif _sw_infobox = Gtk::manage(new Gtk::ScrolledWindow); Gtk::ScrolledWindow* sw_prims = Gtk::manage(new Gtk::ScrolledWindow); diff --git a/src/ui/dialog/filter-effects-dialog.h b/src/ui/dialog/filter-effects-dialog.h index 7c715327e..eae0fc317 100644 --- a/src/ui/dialog/filter-effects-dialog.h +++ b/src/ui/dialog/filter-effects-dialog.h @@ -163,7 +163,6 @@ private: static const int size = 24; protected: -#if WITH_GTKMM_3_0 virtual void get_preferred_width_vfunc(Gtk::Widget& widget, int& minimum_width, int& natural_width) const; @@ -181,10 +180,6 @@ private: int width, int& minimum_height, int& natural_height) const; -#else - virtual void get_size_vfunc(Gtk::Widget& widget, const Gdk::Rectangle* cell_area, - int* x_offset, int* y_offset, int* width, int* height) const; -#endif private: // void* should be SPFilterPrimitive*, some weirdness with properties prevents this Glib::Property _primitive; @@ -211,9 +206,6 @@ private: protected: bool on_draw_signal(const Cairo::RefPtr &cr); -#if !WITH_GTKMM_3_0 - bool on_expose_signal(GdkEventExpose*); -#endif bool on_button_press_event(GdkEventButton*); bool on_motion_notify_event(GdkEventMotion*); @@ -283,11 +275,7 @@ private: Gtk::ScrolledWindow* _sw_infobox; // View/add primitives -#if WITH_GTKMM_3_0 Gtk::Paned* _primitive_box; -#else - Gtk::VPaned* _primitive_box; -#endif UI::Widget::ComboBoxEnum _add_primitive_type; Gtk::Button _add_primitive; diff --git a/src/ui/dialog/find.h b/src/ui/dialog/find.h index 4bcb900b6..94d635037 100644 --- a/src/ui/dialog/find.h +++ b/src/ui/dialog/find.h @@ -286,13 +286,7 @@ private: Gtk::Label status; UI::Widget::Button button_find; UI::Widget::Button button_replace; - -#if WITH_GTKMM_3_0 Gtk::ButtonBox box_buttons; -#else - Gtk::HButtonBox box_buttons; -#endif - Gtk::HBox hboxbutton_row; /** diff --git a/src/ui/dialog/floating-behavior.cpp b/src/ui/dialog/floating-behavior.cpp index 55ef0c5bb..20209e2c9 100644 --- a/src/ui/dialog/floating-behavior.cpp +++ b/src/ui/dialog/floating-behavior.cpp @@ -140,11 +140,7 @@ FloatingBehavior::create(Dialog &dialog) inline FloatingBehavior::operator Gtk::Widget &() { return *_d; } inline GtkWidget *FloatingBehavior::gobj() { return GTK_WIDGET(_d->gobj()); } inline Gtk::Box* FloatingBehavior::get_vbox() { -#if WITH_GTKMM_3_0 return _d->get_content_area(); -#else - return _d->get_vbox(); -#endif } inline void FloatingBehavior::present() { _d->present(); } inline void FloatingBehavior::hide() { _d->hide(); } @@ -155,12 +151,8 @@ inline void FloatingBehavior::move(int x, int y) { _d-> inline void FloatingBehavior::set_position(Gtk::WindowPosition position) { _d->set_position(position); } inline void FloatingBehavior::set_size_request(int width, int height) { _d->set_size_request(width, height); } inline void FloatingBehavior::size_request(Gtk::Requisition &requisition) { -#if WITH_GTKMM_3_0 Gtk::Requisition requisition_natural; _d->get_preferred_size(requisition, requisition_natural); -#else - requisition = _d->size_request(); -#endif } inline void FloatingBehavior::get_position(int &x, int &y) { _d->get_position(x, y); } inline void FloatingBehavior::get_size(int &width, int &height) { _d->get_size(width, height); } diff --git a/src/ui/dialog/glyphs.cpp b/src/ui/dialog/glyphs.cpp index 56b001291..1453797de 100644 --- a/src/ui/dialog/glyphs.cpp +++ b/src/ui/dialog/glyphs.cpp @@ -19,13 +19,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif - +#include #include #include @@ -342,12 +336,7 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : instanceConns(), desktopConns() { -#if WITH_GTKMM_3_0 - Gtk::Grid *table = new Gtk::Grid(); -#else - Gtk::Table *table = new Gtk::Table(3, 1, false); -#endif - + auto table = new Gtk::Grid(); _getContents()->pack_start(*Gtk::manage(table), Gtk::PACK_EXPAND_WIDGET); guint row = 0; @@ -360,29 +349,16 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : gtk_widget_set_size_request (fontsel, 0, 150); g_signal_connect( G_OBJECT(fontsel), "font_set", G_CALLBACK(fontChangeCB), this ); -#if WITH_GTKMM_3_0 table->attach(*Gtk::manage(Glib::wrap(fontsel)), 0, row, 3, 1); -#else - table->attach(*Gtk::manage(Glib::wrap(fontsel)), - 0, 3, row, row + 1, - Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL); -#endif - row++; // ------------------------------- { - Gtk::Label *label = new Gtk::Label(_("Script: ")); + auto label = new Gtk::Label(_("Script: ")); -#if WITH_GTKMM_3_0 table->attach( *Gtk::manage(label), 0, row, 1, 1); -#else - table->attach( *Gtk::manage(label), - 0, 1, row, row + 1, - Gtk::SHRINK, Gtk::SHRINK); -#endif scriptCombo = new Gtk::ComboBoxText(); for (std::map::iterator it = getScriptToName().begin(); it != getScriptToName().end(); ++it) @@ -396,14 +372,8 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : Gtk::Alignment *align = Gtk::manage(new Gtk::Alignment(Gtk::ALIGN_START, Gtk::ALIGN_START, 0.0, 0.0)); align->add(*Gtk::manage(scriptCombo)); -#if WITH_GTKMM_3_0 align->set_hexpand(); table->attach( *align, 1, row, 1, 1); -#else - table->attach( *align, - 1, 2, row, row + 1, - Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK); -#endif } row++; @@ -411,15 +381,8 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : // ------------------------------- { - Gtk::Label *label = new Gtk::Label(_("Range: ")); - -#if WITH_GTKMM_3_0 + auto label = new Gtk::Label(_("Range: ")); table->attach( *Gtk::manage(label), 0, row, 1, 1); -#else - table->attach( *Gtk::manage(label), - 0, 1, row, row + 1, - Gtk::SHRINK, Gtk::SHRINK); -#endif rangeCombo = new Gtk::ComboBoxText(); for ( std::vector::iterator it = getRanges().begin(); it != getRanges().end(); ++it ) { @@ -431,15 +394,8 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : instanceConns.push_back(conn); Gtk::Alignment *align = new Gtk::Alignment(Gtk::ALIGN_START, Gtk::ALIGN_START, 0.0, 0.0); align->add(*Gtk::manage(rangeCombo)); - -#if WITH_GTKMM_3_0 align->set_hexpand(); table->attach( *Gtk::manage(align), 1, row, 1, 1); -#else - table->attach( *Gtk::manage(align), - 1, 2, row, row + 1, - Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK); -#endif } row++; @@ -462,16 +418,9 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : Gtk::ScrolledWindow *scroller = new Gtk::ScrolledWindow(); scroller->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS); scroller->add(*Gtk::manage(iconView)); - -#if WITH_GTKMM_3_0 scroller->set_hexpand(); scroller->set_vexpand(); table->attach(*Gtk::manage(scroller), 0, row, 3, 1); -#else - table->attach(*Gtk::manage(scroller), - 0, 3, row, row + 1, - Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL); -#endif row++; @@ -501,15 +450,8 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : insertBtn->set_sensitive(false); box->pack_end(*Gtk::manage(insertBtn), Gtk::PACK_SHRINK); - -#if WITH_GTKMM_3_0 box->set_hexpand(); table->attach( *Gtk::manage(box), 0, row, 3, 1); -#else - table->attach( *Gtk::manage(box), - 0, 3, row, row + 1, - Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK); -#endif row++; @@ -591,12 +533,7 @@ void GlyphsPanel::insertText() if (entry->get_text_length() > 0) { glyphs = entry->get_text(); } else { - -#if WITH_GTKMM_3_0 - std::vector itemArray = iconView->get_selected_items(); -#else - Gtk::IconView::ArrayHandle_TreePaths itemArray = iconView->get_selected_items(); -#endif + auto itemArray = iconView->get_selected_items(); if (!itemArray.empty()) { Gtk::TreeModel::Path const & path = *itemArray.begin(); @@ -641,11 +578,7 @@ void GlyphsPanel::glyphActivated(Gtk::TreeModel::Path const & path) void GlyphsPanel::glyphSelectionChanged() { -#if WITH_GTKMM_3_0 - std::vector itemArray = iconView->get_selected_items(); -#else - Gtk::IconView::ArrayHandle_TreePaths itemArray = iconView->get_selected_items(); -#endif + auto itemArray = iconView->get_selected_items(); if (itemArray.empty()) { label->set_text(" "); diff --git a/src/ui/dialog/grid-arrange-tab.cpp b/src/ui/dialog/grid-arrange-tab.cpp index 639e463ea..eaf4e8ec0 100644 --- a/src/ui/dialog/grid-arrange-tab.cpp +++ b/src/ui/dialog/grid-arrange-tab.cpp @@ -19,12 +19,7 @@ #include //for GTK_RESPONSE* types #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include <2geom/transforms.h> @@ -570,11 +565,7 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent) : Parent(parent), XPadding(_("X:"), _("Horizontal spacing between columns."), UNIT_TYPE_LINEAR, "", "object-columns", &PaddingUnitMenu), YPadding(_("Y:"), _("Vertical spacing between rows."), XPadding, "", "object-rows", &PaddingUnitMenu), -#if WITH_GTKMM_3_0 PaddingTable(Gtk::manage(new Gtk::Grid())) -#else - PaddingTable(Gtk::manage(new Gtk::Table(2, 2, false))) -#endif { // bool used by spin button callbacks to stop loops where they change each other. updating = false; @@ -736,20 +727,11 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent) } PaddingTable->set_border_width(MARGIN); - -#if WITH_GTKMM_3_0 PaddingTable->set_row_spacing(MARGIN); PaddingTable->set_column_spacing(MARGIN); PaddingTable->attach(XPadding, 0, 0, 1, 1); PaddingTable->attach(PaddingUnitMenu, 1, 0, 1, 1); PaddingTable->attach(YPadding, 0, 1, 1, 1); -#else - PaddingTable->set_row_spacings(MARGIN); - PaddingTable->set_col_spacings(MARGIN); - PaddingTable->attach(XPadding, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - PaddingTable->attach(PaddingUnitMenu, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - PaddingTable->attach(YPadding, 0, 1, 1, 2, Gtk::SHRINK, Gtk::SHRINK); -#endif TileBox.pack_start(*PaddingTable, false, false, MARGIN); diff --git a/src/ui/dialog/grid-arrange-tab.h b/src/ui/dialog/grid-arrange-tab.h index a137d1694..891849f1a 100644 --- a/src/ui/dialog/grid-arrange-tab.h +++ b/src/ui/dialog/grid-arrange-tab.h @@ -111,12 +111,7 @@ private: Inkscape::UI::Widget::UnitMenu PaddingUnitMenu; Inkscape::UI::Widget::ScalarUnit XPadding; Inkscape::UI::Widget::ScalarUnit YPadding; - -#if WITH_GTKMM_3_0 Gtk::Grid *PaddingTable; -#else - Gtk::Table *PaddingTable; -#endif // BBox or manual spacing Gtk::VBox SpacingVBox; diff --git a/src/ui/dialog/guides.cpp b/src/ui/dialog/guides.cpp index 556d77a28..eb0fce978 100644 --- a/src/ui/dialog/guides.cpp +++ b/src/ui/dialog/guides.cpp @@ -124,13 +124,8 @@ void GuidelinePropertiesDialog::_onOK() g_free((gpointer) name); -#if WITH_GTKMM_3_0 - const Gdk::RGBA c = _color.get_rgba(); + const auto c = _color.get_rgba(); unsigned r = c.get_red_u()/257, g = c.get_green_u()/257, b = c.get_blue_u()/257; -#else - const Gdk::Color c = _color.get_color(); - unsigned r = c.get_red()/257, g = c.get_green()/257, b = c.get_blue()/257; -#endif //TODO: why 257? verify this! _guide->set_color(r, g, b, true); @@ -171,15 +166,9 @@ void GuidelinePropertiesDialog::_setup() { add_button(Gtk::Stock::DELETE, -12); add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); -#if WITH_GTKMM_3_0 - Gtk::Box *mainVBox = get_content_area(); + auto mainVBox = get_content_area(); _layout_table.set_row_spacing(4); _layout_table.set_column_spacing(4); -#else - Gtk::Box *mainVBox = get_vbox(); - _layout_table.set_spacings(4); - _layout_table.resize (3, 4); -#endif mainVBox->pack_start(_layout_table, false, false, 0); @@ -189,7 +178,6 @@ void GuidelinePropertiesDialog::_setup() { _label_descr.set_label("foo1"); _label_descr.set_alignment(0, 0.5); -#if WITH_GTKMM_3_0 _label_name.set_halign(Gtk::ALIGN_FILL); _label_name.set_valign(Gtk::ALIGN_FILL); _layout_table.attach(_label_name, 0, 0, 3, 1); @@ -207,19 +195,6 @@ void GuidelinePropertiesDialog::_setup() { _color.set_valign(Gtk::ALIGN_FILL); _color.set_hexpand(); _layout_table.attach(_color, 1, 3, 2, 1); -#else - _layout_table.attach(_label_name, - 0, 3, 0, 1, Gtk::FILL, Gtk::FILL); - - _layout_table.attach(_label_descr, - 0, 3, 1, 2, Gtk::FILL, Gtk::FILL); - - _layout_table.attach(_label_entry, - 1, 3, 2, 3, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); - - _layout_table.attach(_color, - 1, 3, 3, 4, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); -#endif // unitmenus /* fixme: We should allow percents here too, as percents of the canvas size */ @@ -238,7 +213,6 @@ void GuidelinePropertiesDialog::_setup() { _spin_button_y.setIncrements(1.0, 10.0); _spin_button_y.setRange(-1e6, 1e6); -#if WITH_GTKMM_3_0 _spin_button_x.set_halign(Gtk::ALIGN_FILL); _spin_button_x.set_valign(Gtk::ALIGN_FILL); _spin_button_x.set_hexpand(); @@ -252,22 +226,12 @@ void GuidelinePropertiesDialog::_setup() { _unit_menu.set_halign(Gtk::ALIGN_FILL); _unit_menu.set_valign(Gtk::ALIGN_FILL); _layout_table.attach(_unit_menu, 2, 4, 1, 1); -#else - _layout_table.attach(_spin_button_x, - 1, 2, 4, 5, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); - _layout_table.attach(_spin_button_y, - 1, 2, 5, 6, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); - - _layout_table.attach(_unit_menu, - 2, 3, 4, 5, Gtk::FILL, Gtk::FILL); -#endif // angle spinbutton _spin_angle.setDigits(3); _spin_angle.setIncrements(1.0, 10.0); _spin_angle.setRange(-3600., 3600.); -#if WITH_GTKMM_3_0 _spin_angle.set_halign(Gtk::ALIGN_FILL); _spin_angle.set_valign(Gtk::ALIGN_FILL); _spin_angle.set_hexpand(); @@ -284,18 +248,6 @@ void GuidelinePropertiesDialog::_setup() { _locked_toggle.set_valign(Gtk::ALIGN_FILL); _locked_toggle.set_hexpand(); _layout_table.attach(_locked_toggle, 1, 8, 2, 1); -#else - _layout_table.attach(_spin_angle, - 1, 3, 6, 7, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); - - // mode radio button - _layout_table.attach(_relative_toggle, - 1, 3, 7, 8, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); - - // locked radio button - _layout_table.attach(_locked_toggle, - 1, 3, 8, 9, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); -#endif _relative_toggle.signal_toggled().connect(sigc::mem_fun(*this, &GuidelinePropertiesDialog::_modeChanged)); _relative_toggle.set_active(_relative_toggle_status); @@ -348,15 +300,9 @@ void GuidelinePropertiesDialog::_setup() { // init name entry _label_entry.getEntry()->set_text(_guide->getLabel() ? _guide->getLabel() : ""); -#if WITH_GTKMM_3_0 Gdk::RGBA c; c.set_rgba(((_guide->getColor()>>24)&0xff) / 255.0, ((_guide->getColor()>>16)&0xff) / 255.0, ((_guide->getColor()>>8)&0xff) / 255.0); _color.set_rgba(c); -#else - Gdk::Color c; - c.set_rgb_p(((_guide->getColor()>>24)&0xff) / 255.0, ((_guide->getColor()>>16)&0xff) / 255.0, ((_guide->getColor()>>8)&0xff) / 255.0); - _color.set_color(c); -#endif _modeChanged(); // sets values of spinboxes. diff --git a/src/ui/dialog/guides.h b/src/ui/dialog/guides.h index 5dce0d6ed..25d32015c 100644 --- a/src/ui/dialog/guides.h +++ b/src/ui/dialog/guides.h @@ -16,12 +16,7 @@ #endif #include - -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include #include @@ -71,12 +66,7 @@ private: SPDesktop *_desktop; SPGuide *_guide; -#if WITH_GTKMM_3_0 - Gtk::Grid _layout_table; -#else - Gtk::Table _layout_table; -#endif - + Gtk::Grid _layout_table; Gtk::Label _label_name; Gtk::Label _label_descr; Inkscape::UI::Widget::CheckButton _locked_toggle; diff --git a/src/ui/dialog/icon-preview.h b/src/ui/dialog/icon-preview.h index 8a6e19a25..caec7e3b5 100644 --- a/src/ui/dialog/icon-preview.h +++ b/src/ui/dialog/icon-preview.h @@ -66,13 +66,7 @@ private: gdouble minDelay; Gtk::VBox iconBox; - -#if WITH_GTKMM_3_0 Gtk::Paned splitter; -#else - Gtk::HPaned splitter; -#endif - Glib::ustring targetId; int hot; int numEntries; diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 6dd62d3bb..8a69ef8e1 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -86,12 +86,8 @@ InkscapePreferences::InkscapePreferences() _getContents()->add(*sb); show_all_children(); Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; sb->get_preferred_size(sreq_natural, sreq); -#else - sreq = sb->size_request(); -#endif _sb_width = sreq.width; _getContents()->remove(*sb); delete sb; @@ -863,17 +859,10 @@ static void proofComboChanged( Gtk::ComboBoxText* combo ) } static void gamutColorChanged( Gtk::ColorButton* btn ) { -#if WITH_GTKMM_3_0 - Gdk::RGBA rgba = btn->get_rgba(); - gushort r = rgba.get_red_u(); - gushort g = rgba.get_green_u(); - gushort b = rgba.get_blue_u(); -#else - Gdk::Color color = btn->get_color(); - gushort r = color.get_red(); - gushort g = color.get_green(); - gushort b = color.get_blue(); -#endif + auto rgba = btn->get_rgba(); + auto r = rgba.get_red_u(); + auto g = rgba.get_green_u(); + auto b = rgba.get_blue_u(); gchar* tmp = g_strdup_printf("#%02x%02x%02x", (r >> 8), (g >> 8), (b >> 8) ); @@ -1043,13 +1032,8 @@ void InkscapePreferences::initPageIO() Glib::ustring colorStr = prefs->getString("/options/softproof/gamutcolor"); -#if WITH_GTKMM_3_0 Gdk::RGBA tmpColor( colorStr.empty() ? "#00ff00" : colorStr); _cms_gamutcolor.set_rgba( tmpColor ); -#else - Gdk::Color tmpColor( colorStr.empty() ? "#00ff00" : colorStr); - _cms_gamutcolor.set_color( tmpColor ); -#endif _page_cms.add_line( true, _("Out of gamut warning color:"), _cms_gamutcolor, "", _("Selects the color used for out of gamut warning"), false); @@ -1594,31 +1578,19 @@ void InkscapePreferences::initKeyboardShortcuts(Gtk::TreeModel::iterator iter_ui int row = 3; -#if WITH_GTKMM_3_0 scroller->set_hexpand(); scroller->set_vexpand(); _page_keyshortcuts.attach(*scroller, 0, row, 2, 1); -#else - _page_keyshortcuts.attach(*scroller, 0, 2, row, row+1, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL); -#endif row++; -#if WITH_GTKMM_3_0 - Gtk::ButtonBox *box_buttons = Gtk::manage(new Gtk::ButtonBox); -#else - Gtk::HButtonBox *box_buttons = Gtk::manage (new Gtk::HButtonBox); -#endif + auto box_buttons = Gtk::manage(new Gtk::ButtonBox); box_buttons->set_layout(Gtk::BUTTONBOX_END); box_buttons->set_spacing(4); -#if WITH_GTKMM_3_0 box_buttons->set_hexpand(); _page_keyshortcuts.attach(*box_buttons, 0, row, 3, 1); -#else - _page_keyshortcuts.attach(*box_buttons, 0, 3, row, row+1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK); -#endif UI::Widget::Button *kb_reset = Gtk::manage(new UI::Widget::Button(_("Reset"), _("Remove all your customized keyboard shortcuts, and revert to the shortcuts in the shortcut file listed above"))); box_buttons->pack_start(*kb_reset, true, true, 6); @@ -2051,12 +2023,8 @@ bool InkscapePreferences::SetMaxDialogSize(const Gtk::TreeModel::iterator& iter) _page_frame.add(*page); this->show_all_children(); Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; this->get_preferred_size(sreq_natural, sreq); -#else - sreq = this->size_request(); -#endif _max_dialog_width=std::max(_max_dialog_width, sreq.width); _max_dialog_height=std::max(_max_dialog_height, sreq.height); _page_frame.remove(); diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h index d1abcfc58..781b5e48e 100644 --- a/src/ui/dialog/inkscape-preferences.h +++ b/src/ui/dialog/inkscape-preferences.h @@ -97,11 +97,7 @@ enum { }; namespace Gtk { -#if WITH_GTKMM_3_0 class Scale; -#else -class HScale; -#endif } namespace Inkscape { @@ -206,11 +202,7 @@ protected: UI::Widget::PrefCheckButton _scroll_space; UI::Widget::PrefCheckButton _wheel_zoom; -#if WITH_GTKMM_3_0 Gtk::Scale *_slider_snapping_delay; -#else - Gtk::HScale *_slider_snapping_delay; -#endif UI::Widget::PrefCheckButton _snap_indicator; UI::Widget::PrefCheckButton _snap_closest_only; diff --git a/src/ui/dialog/input.cpp b/src/ui/dialog/input.cpp index 8343cd6fe..e731ed3ff 100644 --- a/src/ui/dialog/input.cpp +++ b/src/ui/dialog/input.cpp @@ -33,13 +33,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif - +#include #include #include #include @@ -431,13 +425,7 @@ private: Blink watcher; Gtk::CheckButton useExt; Gtk::Button save; - -#if WITH_GTKMM_3_0 Gtk::Paned pane; -#else - Gtk::HPaned pane; -#endif - Gtk::VBox detailsBox; Gtk::HBox titleFrame; Gtk::Label titleLabel; @@ -498,27 +486,14 @@ private: Inkscape::UI::Widget::Frame axisFrame; Gtk::ScrolledWindow treeScroller; Gtk::ScrolledWindow detailScroller; - -#if WITH_GTKMM_3_0 Gtk::Paned splitter; Gtk::Paned split2; -#else - Gtk::HPaned splitter; - Gtk::VPaned split2; -#endif - Gtk::Label devName; Gtk::Label devKeyCount; Gtk::Label devAxesCount; Gtk::ComboBoxText axesCombo; Gtk::ProgressBar axesValues[6]; - -#if WITH_GTKMM_3_0 Gtk::Grid axisTable; -#else - Gtk::Table axisTable; -#endif - Gtk::ComboBoxText buttonCombo; Gtk::ComboBoxText linkCombo; sigc::connection linkConnection; @@ -528,13 +503,7 @@ private: Gtk::Image testThumb; Gtk::Image testButtons[24]; Gtk::Image testAxes[8]; - -#if WITH_GTKMM_3_0 Gtk::Grid imageTable; -#else - Gtk::Table imageTable; -#endif - Gtk::EventBox testDetector; ConfPanel cfgPanel; @@ -620,20 +589,11 @@ InputDialogImpl::InputDialogImpl() : treeScroller(), detailScroller(), splitter(), -#if WITH_GTKMM_3_0 split2(Gtk::ORIENTATION_VERTICAL), axisTable(), -#else - split2(), - axisTable(11, 2), -#endif linkCombo(), topHolder(), -#if WITH_GTKMM_3_0 imageTable(), -#else - imageTable(8, 7), -#endif testDetector(), cfgPanel() { @@ -655,27 +615,16 @@ InputDialogImpl::InputDialogImpl() : testFrame.add(testDetector); testThumb.set(getPix(PIX_TABLET)); testThumb.set_padding(24, 24); - -#if WITH_GTKMM_3_0 testThumb.set_hexpand(); testThumb.set_vexpand(); imageTable.attach(testThumb, 0, 0, 8, 1); -#else - imageTable.attach(testThumb, 0, 8, 0, 1, ::Gtk::EXPAND, ::Gtk::EXPAND); -#endif { guint col = 0; guint row = 1; for ( guint num = 0; num < G_N_ELEMENTS(testButtons); num++ ) { testButtons[num].set(getPix(PIX_BUTTONS_NONE)); - -#if WITH_GTKMM_3_0 imageTable.attach(testButtons[num], col, row, 1, 1); -#else - imageTable.attach(testButtons[num], col, col + 1, row, row + 1, ::Gtk::FILL, ::Gtk::FILL); -#endif - col++; if (col > 7) { col = 0; @@ -686,13 +635,7 @@ InputDialogImpl::InputDialogImpl() : col = 0; for ( guint num = 0; num < G_N_ELEMENTS(testAxes); num++ ) { testAxes[num].set(getPix(PIX_AXIS_NONE)); - -#if WITH_GTKMM_3_0 imageTable.attach(testAxes[num], col * 2, row, 2, 1); -#else - imageTable.attach(testAxes[num], col * 2, (col + 1) * 2, row, row + 1, ::Gtk::FILL, ::Gtk::FILL); -#endif - col++; if (col > 3) { col = 0; @@ -730,45 +673,17 @@ InputDialogImpl::InputDialogImpl() : axisFrame.add(axisTable); Gtk::Label *lbl = Gtk::manage(new Gtk::Label(_("Link:"))); - -#if WITH_GTKMM_3_0 axisTable.attach(*lbl, 0, rowNum, 1, 1); -#else - axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1, - ::Gtk::FILL, - ::Gtk::SHRINK); -#endif - linkCombo.append(_("None")); linkCombo.set_active_text(_("None")); linkCombo.set_sensitive(false); linkConnection = linkCombo.signal_changed().connect(sigc::mem_fun(*this, &InputDialogImpl::linkComboChanged)); - -#if WITH_GTKMM_3_0 axisTable.attach(linkCombo, 1, rowNum, 1, 1); -#else - axisTable.attach(linkCombo, 1, 2, rowNum, rowNum + 1, - ::Gtk::FILL, - ::Gtk::SHRINK); -#endif - rowNum++; - lbl = Gtk::manage(new Gtk::Label(_("Axes count:"))); - -#if WITH_GTKMM_3_0 axisTable.attach(*lbl, 0, rowNum, 1, 1); axisTable.attach(devAxesCount, 1, rowNum, 1, 1); -#else - axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1, - ::Gtk::FILL, - ::Gtk::SHRINK); - axisTable.attach(devAxesCount, 1, 2, rowNum, rowNum + 1, - ::Gtk::SHRINK, - ::Gtk::SHRINK); -#endif - rowNum++; @@ -786,22 +701,11 @@ InputDialogImpl::InputDialogImpl() : for ( guint barNum = 0; barNum < static_cast(G_N_ELEMENTS(axesValues)); barNum++ ) { lbl = Gtk::manage(new Gtk::Label(_("axis:"))); - -#if WITH_GTKMM_3_0 lbl->set_hexpand(); axisTable.attach(*lbl, 0, rowNum, 1, 1); axesValues[barNum].set_hexpand(); axisTable.attach(axesValues[barNum], 1, rowNum, 1, 1); -#else - axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1, - ::Gtk::EXPAND, - ::Gtk::SHRINK); - axisTable.attach(axesValues[barNum], 1, 2, rowNum, rowNum + 1, - ::Gtk::EXPAND, - ::Gtk::SHRINK); -#endif - axesValues[barNum].set_sensitive(false); rowNum++; @@ -811,17 +715,8 @@ InputDialogImpl::InputDialogImpl() : lbl = Gtk::manage(new Gtk::Label(_("Button count:"))); -#if WITH_GTKMM_3_0 axisTable.attach(*lbl, 0, rowNum, 1, 1); axisTable.attach(devKeyCount, 1, rowNum, 1, 1); -#else - axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1, - ::Gtk::FILL, - ::Gtk::SHRINK); - axisTable.attach(devKeyCount, 1, 2, rowNum, rowNum + 1, - ::Gtk::SHRINK, - ::Gtk::SHRINK); -#endif rowNum++; @@ -837,13 +732,7 @@ InputDialogImpl::InputDialogImpl() : rowNum++; */ -#if WITH_GTKMM_3_0 axisTable.attach(keyVal, 0, rowNum, 2, 1); -#else - axisTable.attach(keyVal, 0, 2, rowNum, rowNum + 1, - ::Gtk::FILL, - ::Gtk::SHRINK); -#endif rowNum++; @@ -857,18 +746,9 @@ InputDialogImpl::InputDialogImpl() : // TODO: Extension event stuff has been removed from public API in GTK+ 3 // Need to check that this hasn't broken anything -#if !GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_extension_events( GTK_WIDGET(testDetector.gobj()), GDK_EXTENSION_EVENTS_ALL ); -#endif testDetector.add_events(Gdk::POINTER_MOTION_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK |Gdk::PROXIMITY_IN_MASK|Gdk::PROXIMITY_OUT_MASK|Gdk::SCROLL_MASK); -#if WITH_GTKMM_3_0 axisTable.attach(keyEntry, 0, rowNum, 2, 1); -#else - axisTable.attach(keyEntry, 0, 2, rowNum, rowNum + 1, - ::Gtk::FILL, - ::Gtk::SHRINK); -#endif rowNum++; @@ -1150,12 +1030,7 @@ InputDialogImpl::ConfPanel::ConfPanel() : useExt.set_active(Preferences::get()->getBool("/options/useextinput/value")); useExt.signal_toggled().connect(sigc::mem_fun(*this, &InputDialogImpl::ConfPanel::useExtToggled)); -#if WITH_GTKMM_3_0 - Gtk::ButtonBox *buttonBox = Gtk::manage(new Gtk::ButtonBox); -#else - Gtk::HButtonBox *buttonBox = Gtk::manage (new Gtk::HButtonBox); -#endif - + auto buttonBox = Gtk::manage(new Gtk::ButtonBox); buttonBox->set_layout (Gtk::BUTTONBOX_END); //Gtk::Alignment *align = new Gtk::Alignment(Gtk::ALIGN_END, Gtk::ALIGN_START, 0, 0); buttonBox->add(save); @@ -1939,7 +1814,6 @@ bool InputDialogImpl::eventSnoop(GdkEvent* event) testThumb.set(getPix(PIX_ERASER)); break; } -#if WITH_GTKMM_3_0 /// \fixme GTK3 added new GDK_SOURCEs that should be handled here! case GDK_SOURCE_KEYBOARD: case GDK_SOURCE_TOUCHSCREEN: @@ -1947,7 +1821,6 @@ bool InputDialogImpl::eventSnoop(GdkEvent* event) g_warning("InputDialogImpl::eventSnoop : unhandled GDK_SOURCE type!"); break; } -#endif } updateTestButtons(key, hotButton); diff --git a/src/ui/dialog/layer-properties.cpp b/src/ui/dialog/layer-properties.cpp index 5d550ed48..6f5def886 100644 --- a/src/ui/dialog/layer-properties.cpp +++ b/src/ui/dialog/layer-properties.cpp @@ -40,22 +40,15 @@ namespace Dialogs { LayerPropertiesDialog::LayerPropertiesDialog() : _strategy(NULL), _desktop(NULL), _layer(NULL), _position_visible(false) { -#if WITH_GTKMM_3_0 - Gtk::Box *mainVBox = get_content_area(); + auto mainVBox = get_content_area(); _layout_table.set_row_spacing(4); _layout_table.set_column_spacing(4); -#else - Gtk::Box *mainVBox = get_vbox(); - _layout_table.set_spacings(4); - _layout_table.resize (1, 2); -#endif // Layer name widgets _layer_name_entry.set_activates_default(true); _layer_name_label.set_label(_("Layer name:")); _layer_name_label.set_alignment(1.0, 0.5); -#if WITH_GTKMM_3_0 _layer_name_label.set_halign(Gtk::ALIGN_FILL); _layer_name_label.set_valign(Gtk::ALIGN_FILL); _layout_table.attach(_layer_name_label, 0, 0, 1, 1); @@ -64,12 +57,6 @@ LayerPropertiesDialog::LayerPropertiesDialog() _layer_name_entry.set_valign(Gtk::ALIGN_FILL); _layer_name_entry.set_hexpand(); _layout_table.attach(_layer_name_entry, 1, 0, 1, 1); -#else - _layout_table.attach(_layer_name_label, - 0, 1, 0, 1, Gtk::FILL, Gtk::FILL); - _layout_table.attach(_layer_name_entry, - 1, 2, 0, 1, Gtk::FILL | Gtk::EXPAND, Gtk::FILL); -#endif mainVBox->pack_start(_layout_table, true, true, 4); @@ -166,10 +153,6 @@ LayerPropertiesDialog::_setup_position_controls() { _layer_position_combo.set_cell_data_func(_label_renderer, sigc::mem_fun(*this, &LayerPropertiesDialog::_prepareLabelRenderer)); -#if !WITH_GTKMM_3_0 - _layout_table.resize (2, 2); -#endif - Gtk::ListStore::iterator row; row = _dropdown_list->append(); row->set_value(_dropdown_columns.position, LPOS_ABOVE); @@ -185,7 +168,6 @@ LayerPropertiesDialog::_setup_position_controls() { _layer_position_label.set_label(_("Position:")); _layer_position_label.set_alignment(1.0, 0.5); -#if WITH_GTKMM_3_0 _layer_position_combo.set_halign(Gtk::ALIGN_FILL); _layer_position_combo.set_valign(Gtk::ALIGN_FILL); _layer_position_combo.set_hexpand(); @@ -194,12 +176,6 @@ LayerPropertiesDialog::_setup_position_controls() { _layer_position_label.set_halign(Gtk::ALIGN_FILL); _layer_position_label.set_valign(Gtk::ALIGN_FILL); _layout_table.attach(_layer_position_label, 0, 1, 1, 1); -#else - _layout_table.attach(_layer_position_combo, - 1, 2, 1, 2, Gtk::FILL | Gtk::EXPAND, Gtk::FILL); - _layout_table.attach(_layer_position_label, - 0, 1, 1, 2, Gtk::FILL, Gtk::FILL); -#endif show_all_children(); } @@ -254,16 +230,11 @@ LayerPropertiesDialog::_setup_layers_controls() { _layout_table.remove(_layer_name_entry); _layout_table.remove(_layer_name_label); -#if WITH_GTKMM_3_0 _scroller.set_halign(Gtk::ALIGN_FILL); _scroller.set_valign(Gtk::ALIGN_FILL); _scroller.set_hexpand(); _scroller.set_vexpand(); _layout_table.attach(_scroller, 0, 1, 2, 1); -#else - _layout_table.attach(_scroller, - 0, 2, 1, 2, Gtk::FILL | Gtk::EXPAND, Gtk::FILL | Gtk::EXPAND); -#endif show_all_children(); } diff --git a/src/ui/dialog/layer-properties.h b/src/ui/dialog/layer-properties.h index c75a7f190..f62f22782 100644 --- a/src/ui/dialog/layer-properties.h +++ b/src/ui/dialog/layer-properties.h @@ -19,12 +19,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include #include @@ -102,12 +97,7 @@ protected: Gtk::Entry _layer_name_entry; Gtk::Label _layer_position_label; Gtk::ComboBox _layer_position_combo; - -#if WITH_GTKMM_3_0 Gtk::Grid _layout_table; -#else - Gtk::Table _layout_table; -#endif bool _position_visible; diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp index 1c022ecad..77ced6d71 100644 --- a/src/ui/dialog/layers.cpp +++ b/src/ui/dialog/layers.cpp @@ -866,12 +866,8 @@ LayersPanel::LayersPanel() : _scroller.set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC ); _scroller.set_shadow_type(Gtk::SHADOW_IN); Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; _scroller.get_preferred_size(sreq_natural, sreq); -#else - sreq = _scroller.size_request(); -#endif int minHeight = 70; if (sreq.height < minHeight) { // Set a min height to see the layers when used with Ubuntu liboverlay-scrollbar diff --git a/src/ui/dialog/layers.h b/src/ui/dialog/layers.h index 9cd2c3b92..893b31557 100644 --- a/src/ui/dialog/layers.h +++ b/src/ui/dialog/layers.h @@ -124,15 +124,9 @@ private: Gtk::TreeView _tree; Gtk::CellRendererText *_text_renderer; Gtk::TreeView::Column *_name_column; -#if WITH_GTKMM_3_0 Gtk::Box _buttonsRow; Gtk::Box _buttonsPrimary; Gtk::Box _buttonsSecondary; -#else - Gtk::HBox _buttonsRow; - Gtk::HBox _buttonsPrimary; - Gtk::HBox _buttonsSecondary; -#endif Gtk::ScrolledWindow _scroller; Gtk::Menu _popupMenu; Inkscape::UI::Widget::SpinButton _spinBtn; diff --git a/src/ui/dialog/livepatheffect-add.cpp b/src/ui/dialog/livepatheffect-add.cpp index c558eddaf..4346ebd3d 100644 --- a/src/ui/dialog/livepatheffect-add.cpp +++ b/src/ui/dialog/livepatheffect-add.cpp @@ -74,11 +74,7 @@ LivePathEffectAdd::LivePathEffectAdd() : add_button.set_use_underline(true); add_button.set_can_default(); -#if WITH_GTKMM_3_0 - Gtk::Box *mainVBox = get_content_area(); -#else - Gtk::Box *mainVBox = get_vbox(); -#endif + auto mainVBox = get_content_area(); mainVBox->pack_start(scrolled_window, true, true); add_action_widget(close_button, Gtk::RESPONSE_CLOSE); diff --git a/src/ui/dialog/livepatheffect-editor.cpp b/src/ui/dialog/livepatheffect-editor.cpp index 422ec10ae..f19652746 100644 --- a/src/ui/dialog/livepatheffect-editor.cpp +++ b/src/ui/dialog/livepatheffect-editor.cpp @@ -134,13 +134,6 @@ LivePathEffectEditor::LivePathEffectEditor() // Add toolbar items to toolbar toolbar_hbox.set_layout (Gtk::BUTTONBOX_END); - -#if !WITH_GTKMM_3_0 - // TODO: This has been removed from Gtkmm 3.0. Check that - // everything still looks OK! - toolbar_hbox.set_child_min_width( 16 ); -#endif - toolbar_hbox.add( button_add ); toolbar_hbox.set_child_secondary( button_add , true); toolbar_hbox.add( button_remove ); diff --git a/src/ui/dialog/livepatheffect-editor.h b/src/ui/dialog/livepatheffect-editor.h index 4aac25eaa..b69ee007a 100644 --- a/src/ui/dialog/livepatheffect-editor.h +++ b/src/ui/dialog/livepatheffect-editor.h @@ -112,11 +112,7 @@ private: void on_visibility_toggled( Glib::ustring const& str ); -#if WITH_GTKMM_3_0 Gtk::ButtonBox toolbar_hbox; -#else - Gtk::HButtonBox toolbar_hbox; -#endif Gtk::Button button_add; Gtk::Button button_remove; Gtk::Button button_up; diff --git a/src/ui/dialog/new-from-template.cpp b/src/ui/dialog/new-from-template.cpp index 74ec7111e..aed57871a 100644 --- a/src/ui/dialog/new-from-template.cpp +++ b/src/ui/dialog/new-from-template.cpp @@ -31,20 +31,12 @@ NewFromTemplate::NewFromTemplate() _main_widget = new TemplateLoadTab(this); -#if WITH_GTKMM_3_0 get_content_area()->pack_start(*_main_widget); -#else - get_vbox()->pack_start(*_main_widget); -#endif Gtk::Alignment *align; align = Gtk::manage(new Gtk::Alignment(Gtk::ALIGN_END, Gtk::ALIGN_CENTER, 0.0, 0.0)); -#if WITH_GTKMM_3_0 get_content_area()->pack_end(*align, Gtk::PACK_SHRINK); -#else - get_vbox()->pack_end(*align, Gtk::PACK_SHRINK); -#endif align->set_padding(0, 0, 0, 15); align->add(_create_template_button); diff --git a/src/ui/dialog/object-properties.cpp b/src/ui/dialog/object-properties.cpp index be46129c4..9e10bbbeb 100644 --- a/src/ui/dialog/object-properties.cpp +++ b/src/ui/dialog/object-properties.cpp @@ -40,12 +40,7 @@ #include "xml/repr.h" #include -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif - +#include namespace Inkscape { namespace UI { @@ -106,16 +101,9 @@ void ObjectProperties::_init() Gtk::Box *contents = _getContents(); contents->set_spacing(0); -#if WITH_GTKMM_3_0 - Gtk::Grid *grid_top = Gtk::manage(new Gtk::Grid()); + auto grid_top = Gtk::manage(new Gtk::Grid()); grid_top->set_row_spacing(4); grid_top->set_column_spacing(0); -#else - Gtk::Table *grid_top = Gtk::manage(new Gtk::Table(4, 4)); - grid_top->set_row_spacings(4); - grid_top->set_col_spacings(0); -#endif - grid_top->set_border_width(4); contents->pack_start(*grid_top, false, false, 0); @@ -124,29 +112,14 @@ void ObjectProperties::_init() /* Create the label for the object id */ _label_id.set_label(_label_id.get_label() + " "); _label_id.set_alignment(1, 0.5); - -#if WITH_GTKMM_3_0 _label_id.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_label_id, 0, 0, 1, 1); -#else - grid_top->attach(_label_id, 0, 1, 0, 1, - Gtk::SHRINK | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif - /* Create the entry box for the object id */ _entry_id.set_tooltip_text(_("The id= attribute (only letters, digits, and the characters .-_: allowed)")); _entry_id.set_max_length(64); - -#if WITH_GTKMM_3_0 _entry_id.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_entry_id, 1, 0, 1, 1); -#else - grid_top->attach(_entry_id, 1, 2, 0, 1, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _label_id.set_mnemonic_widget(_entry_id); @@ -160,29 +133,16 @@ void ObjectProperties::_init() _label_label.set_label(_label_label.get_label() + " "); _label_label.set_alignment(1, 0.5); -#if WITH_GTKMM_3_0 _label_label.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_label_label, 0, 1, 1, 1); -#else - grid_top->attach(_label_label, 0, 1, 1, 2, - Gtk::SHRINK | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif - /* Create the entry box for the object label */ _entry_label.set_tooltip_text(_("A freeform label for the object")); _entry_label.set_max_length(256); -#if WITH_GTKMM_3_0 _entry_label.set_hexpand(); _entry_label.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_entry_label, 1, 1, 1, 1); -#else - grid_top->attach(_entry_label, 1, 2, 1, 2, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _label_label.set_mnemonic_widget(_entry_label); @@ -194,28 +154,16 @@ void ObjectProperties::_init() _label_title.set_label(_label_title.get_label() + " "); _label_title.set_alignment (1, 0.5); -#if WITH_GTKMM_3_0 _label_title.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_label_title, 0, 2, 1, 1); -#else - grid_top->attach(_label_title, 0, 1, 2, 3, - Gtk::SHRINK | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif /* Create the entry box for the object title */ _entry_title.set_sensitive (FALSE); _entry_title.set_max_length (256); -#if WITH_GTKMM_3_0 _entry_title.set_hexpand(); _entry_title.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_entry_title, 1, 2, 1, 1); -#else - grid_top->attach(_entry_title, 1, 2, 2, 3, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _label_title.set_mnemonic_widget(_entry_title); // pressing enter in the label field is the same as clicking Set: @@ -244,14 +192,8 @@ void ObjectProperties::_init() _label_image_rendering.set_label(_label_image_rendering.get_label() + " "); _label_image_rendering.set_alignment(1, 0.5); -#if WITH_GTKMM_3_0 _label_image_rendering.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_label_image_rendering, 0, 3, 1, 1); -#else - grid_top->attach(_label_image_rendering, 0, 1, 3, 4, - Gtk::SHRINK | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif /* Create the combo box text for the 'image-rendering' property */ _combo_image_rendering.append( "auto" ); @@ -259,14 +201,8 @@ void ObjectProperties::_init() _combo_image_rendering.append( "optimizeSpeed" ); _combo_image_rendering.set_tooltip_text(_("The 'image-rendering' property can influence how a bitmap is up-scaled:\n\t'auto' no preference;\n\t'optimizeQuality' smooth;\n\t'optimizeSpeed' blocky.\nNote that this behaviour is not defined in the SVG 1.1 specification and not all browsers follow this interpretation.")); -#if WITH_GTKMM_3_0 _combo_image_rendering.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_combo_image_rendering, 1, 3, 1, 1); -#else - grid_top->attach(_combo_image_rendering, 1, 2, 3, 4, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _label_image_rendering.set_mnemonic_widget(_combo_image_rendering); @@ -278,60 +214,36 @@ void ObjectProperties::_init() Gtk::HBox *hb_checkboxes = Gtk::manage(new Gtk::HBox()); contents->pack_start(*hb_checkboxes, FALSE, FALSE, 0); -#if WITH_GTKMM_3_0 - Gtk::Grid *grid_cb = Gtk::manage(new Gtk::Grid()); + auto grid_cb = Gtk::manage(new Gtk::Grid()); grid_cb->set_row_homogeneous(); grid_cb->set_column_homogeneous(true); -#else - Gtk::Table *grid_cb = Gtk::manage(new Gtk::Table(1, 2, true)); -#endif grid_cb->set_border_width(4); hb_checkboxes->pack_start(*grid_cb, true, true, 0); /* Hide */ _cb_hide.set_tooltip_text (_("Check to make the object invisible")); - -#if WITH_GTKMM_3_0 _cb_hide.set_hexpand(); _cb_hide.set_valign(Gtk::ALIGN_CENTER); grid_cb->attach(_cb_hide, 0, 0, 1, 1); -#else - grid_cb->attach(_cb_hide, 0, 1, 0, 1, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _cb_hide.signal_toggled().connect(sigc::mem_fun(this, &ObjectProperties::_hiddenToggled)); /* Lock */ // TRANSLATORS: "Lock" is a verb here _cb_lock.set_tooltip_text(_("Check to make the object insensitive (not selectable by mouse)")); - -#if WITH_GTKMM_3_0 _cb_lock.set_hexpand(); _cb_lock.set_valign(Gtk::ALIGN_CENTER); grid_cb->attach(_cb_lock, 1, 0, 1, 1); -#else - grid_cb->attach(_cb_lock, 1, 2, 0, 1, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _cb_lock.signal_toggled().connect(sigc::mem_fun(this, &ObjectProperties::_sensitivityToggled)); /* Button for setting the object's id, label, title and description. */ Gtk::Button *btn_set = Gtk::manage(new Gtk::Button(_("_Set"), 1)); -#if WITH_GTKMM_3_0 btn_set->set_hexpand(); btn_set->set_valign(Gtk::ALIGN_CENTER); grid_cb->attach(*btn_set, 2, 0, 1, 1); -#else - grid_cb->attach(*btn_set, 2, 3, 0, 1, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif btn_set->signal_clicked().connect(sigc::mem_fun(this, &ObjectProperties::_labelChanged)); diff --git a/src/ui/dialog/object-properties.h b/src/ui/dialog/object-properties.h index dc28c0bad..8551d5fca 100644 --- a/src/ui/dialog/object-properties.h +++ b/src/ui/dialog/object-properties.h @@ -50,11 +50,7 @@ class SPDesktop; class SPItem; namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } namespace Inkscape { diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 27694a9ac..e4b48d10b 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -511,11 +511,7 @@ void ObjectsPanel::_setCompositingValues(SPItem *item) _blurConnection.block(); //Set the opacity -#if WITH_GTKMM_3_0 _opacity_adjustment->set_value((item->style->opacity.set ? SP_SCALE24_TO_FLOAT(item->style->opacity.value) : 1) * _opacity_adjustment->get_upper()); -#else - _opacity_adjustment.set_value((item->style->opacity.set ? SP_SCALE24_TO_FLOAT(item->style->opacity.value) : 1) * _opacity_adjustment.get_upper()); -#endif SPFeBlend *spblend = NULL; SPGaussianBlur *spblur = NULL; if (item->style->getFilter()) @@ -1481,11 +1477,7 @@ void ObjectsPanel::_opacityChangedIter(const Gtk::TreeIter& iter) if (item) { item->style->opacity.set = TRUE; -#if WITH_GTKMM_3_0 item->style->opacity.value = SP_SCALE24_FROM_FLOAT(_opacity_adjustment->get_value() / _opacity_adjustment->get_upper()); -#else - item->style->opacity.value = SP_SCALE24_FROM_FLOAT(_opacity_adjustment.get_value() / _opacity_adjustment.get_upper()); -#endif item->updateRepr(SP_OBJECT_WRITE_NO_CHILDREN | SP_OBJECT_WRITE_EXT); } } @@ -1628,11 +1620,7 @@ ObjectsPanel::ObjectsPanel() : _opacity_vbox(false, 0), _opacity_label(_("Opacity:")), _opacity_label_unit(_("%")), -#if WITH_GTKMM_3_0 _opacity_adjustment(Gtk::Adjustment::create(100.0, 0.0, 100.0, 1.0, 1.0, 0.0)), -#else - _opacity_adjustment(100.0, 0.0, 100.0, 1.0, 1.0, 0.0), -#endif _opacity_hscale(_opacity_adjustment), _opacity_spin_button(_opacity_adjustment, 0.01, 1), _fe_cb(UI::Widget::SimpleFilterModifier::BLEND), @@ -1762,12 +1750,8 @@ ObjectsPanel::ObjectsPanel() : _scroller.set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC ); _scroller.set_shadow_type(Gtk::SHADOW_IN); Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; _scroller.get_preferred_size(sreq_natural, sreq); -#else - sreq = _scroller.size_request(); -#endif int minHeight = 70; if (sreq.height < minHeight) { // Set a min height to see the layers when used with Ubuntu liboverlay-scrollbar @@ -1800,13 +1784,8 @@ ObjectsPanel::ObjectsPanel() : _opacity_hbox.pack_start(_opacity_spin_button, false, false, 0); _opacity_hbox.pack_start(_opacity_label_unit, false, false, 3); _opacity_hscale.set_draw_value(false); -#if WITH_GTKMM_3_0 _opacityConnection = _opacity_adjustment->signal_value_changed().connect(sigc::mem_fun(*this, &ObjectsPanel::_opacityValueChanged)); _opacity_label.set_mnemonic_widget(_opacity_hscale); -#else - _opacityConnection = _opacity_adjustment.signal_value_changed().connect(sigc::mem_fun(*this, &ObjectsPanel::_opacityValueChanged)); - _opacity_label.set_mnemonic_widget(_opacity_hscale); -#endif //Keep the labels aligned GtkSizeGroup *labels = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); diff --git a/src/ui/dialog/objects.h b/src/ui/dialog/objects.h index 9b9a6025a..018f9191f 100644 --- a/src/ui/dialog/objects.h +++ b/src/ui/dialog/objects.h @@ -134,15 +134,9 @@ private: Gtk::TreeView _tree; Gtk::CellRendererText *_text_renderer; Gtk::TreeView::Column *_name_column; -#if WITH_GTKMM_3_0 Gtk::Box _buttonsRow; Gtk::Box _buttonsPrimary; Gtk::Box _buttonsSecondary; -#else - Gtk::HBox _buttonsRow; - Gtk::HBox _buttonsPrimary; - Gtk::HBox _buttonsSecondary; -#endif Gtk::ScrolledWindow _scroller; Gtk::Menu _popupMenu; Inkscape::UI::Widget::SpinButton _spinBtn; @@ -161,11 +155,7 @@ private: Gtk::HBox _opacity_hbox; Gtk::Label _opacity_label; Gtk::Label _opacity_label_unit; -#if WITH_GTKMM_3_0 Glib::RefPtr _opacity_adjustment; -#else - Gtk::Adjustment _opacity_adjustment; -#endif Gtk::HScale _opacity_hscale; Inkscape::UI::Widget::SpinButton _opacity_spin_button; diff --git a/src/ui/dialog/ocaldialogs.cpp b/src/ui/dialog/ocaldialogs.cpp index f2ee79d06..9e9037fdd 100644 --- a/src/ui/dialog/ocaldialogs.cpp +++ b/src/ui/dialog/ocaldialogs.cpp @@ -316,27 +316,10 @@ LoadingBox::LoadingBox() : Gtk::EventBox() draw_spinner = false; spinner_step = 0; -#if WITH_GTKMM_3_0 signal_draw().connect(sigc::mem_fun(*this, &LoadingBox::_on_draw), false); -#else - signal_expose_event().connect(sigc::mem_fun(*this, &LoadingBox::_on_expose_event), false); -#endif -} - -#if !WITH_GTKMM_3_0 -bool LoadingBox::_on_expose_event(GdkEventExpose* /*event*/) -{ - Cairo::RefPtr cr = get_window()->create_cairo_context(); - - return _on_draw(cr); } -#endif -bool LoadingBox::_on_draw(const Cairo::RefPtr & -#if WITH_GTKMM_3_0 -cr -#endif -) +bool LoadingBox::_on_draw(const Cairo::RefPtr &cr) { // Draw shadow int x = get_allocation().get_x(); @@ -344,27 +327,14 @@ cr int width = get_allocation().get_width(); int height = get_allocation().get_height(); -#if WITH_GTKMM_3_0 get_style_context()->render_frame(cr, x, y, width, height); -#else - get_style()->paint_shadow(get_window(), get_state(), Gtk::SHADOW_IN, - Gdk::Rectangle(x, y, width, height), - *this, Glib::ustring("viewport"), x, y, width, height); -#endif if (draw_spinner) { int spinner_size = 16; int spinner_x = x + (width - spinner_size) / 2; int spinner_y = y + (height - spinner_size) / 2; -#if WITH_GTKMM_3_0 get_style_context()->render_activity(cr, spinner_x, spinner_y, spinner_size, spinner_size); -#else - gtk_paint_spinner(gtk_widget_get_style(GTK_WIDGET(gobj())), - gtk_widget_get_window(GTK_WIDGET(gobj())), - gtk_widget_get_state(GTK_WIDGET(gobj())), NULL, GTK_WIDGET(gobj()), - NULL, spinner_step, spinner_x, spinner_y, spinner_size, spinner_size); -#endif } return false; @@ -434,11 +404,7 @@ PreviewWidget::PreviewWidget() : Gtk::VBox(false, 12) box_loading->set_size_request(90, 90); set_border_width(12); -#if WITH_GTKMM_3_0 signal_draw().connect(sigc::mem_fun(*this, &PreviewWidget::_on_draw), false); -#else - signal_expose_event().connect(sigc::mem_fun(*this, &PreviewWidget::_on_expose_event), false); -#endif clear(); } @@ -482,15 +448,6 @@ void PreviewWidget::clear() image->hide(); } -#if !WITH_GTKMM_3_0 -bool PreviewWidget::_on_expose_event(GdkEventExpose* /*event*/) -{ - Cairo::RefPtr cr = get_window()->create_cairo_context(); - - return _on_draw(cr); -} -#endif - bool PreviewWidget::_on_draw(const Cairo::RefPtr& cr) { // Draw background @@ -499,16 +456,10 @@ bool PreviewWidget::_on_draw(const Cairo::RefPtr& cr) int width = get_allocation().get_width(); int height = get_allocation().get_height(); -#if WITH_GTKMM_3_0 Gdk::RGBA background_fill; get_style_context()->lookup_color("base_color", background_fill); cr->rectangle(x, y, width, height); Gdk::Cairo::set_source_rgba(cr, background_fill); -#else - Gdk::Color background_fill = get_style()->get_base(get_state()); - cr->rectangle(x, y, width, height); - Gdk::Cairo::set_source_color(cr, background_fill); -#endif cr->fill(); @@ -573,57 +524,12 @@ void StatusWidget::end_process() clear(); } -#if !GTK_CHECK_VERSION(3,0,0) -SearchEntry::SearchEntry() : Gtk::Entry() -{ - signal_changed().connect(sigc::mem_fun(*this, &SearchEntry::_on_changed)); - signal_icon_press().connect(sigc::mem_fun(*this, &SearchEntry::_on_icon_pressed)); - - set_icon_from_icon_name(INKSCAPE_ICON("edit-find"), Gtk::ENTRY_ICON_PRIMARY); - gtk_entry_set_icon_from_icon_name(gobj(), GTK_ENTRY_ICON_SECONDARY, NULL); -} - -void SearchEntry::_on_icon_pressed(Gtk::EntryIconPosition icon_position, const GdkEventButton* /*event*/) -{ - if (icon_position == Gtk::ENTRY_ICON_SECONDARY) { - grab_focus(); - delete_text(0, -1); - } else if (icon_position == Gtk::ENTRY_ICON_PRIMARY) { - select_region(0, -1); - grab_focus(); - } -} - -void SearchEntry::_on_changed() -{ - if (get_text().empty()) { - gtk_entry_set_icon_from_icon_name(gobj(), GTK_ENTRY_ICON_SECONDARY, NULL); - } else { - set_icon_from_icon_name(INKSCAPE_ICON("edit-clear"), Gtk::ENTRY_ICON_SECONDARY); - } -} -#endif - - BaseBox::BaseBox() : Gtk::EventBox() { -#if WITH_GTKMM_3_0 signal_draw().connect(sigc::mem_fun(*this, &BaseBox::_on_draw), false); -#else - signal_expose_event().connect(sigc::mem_fun(*this, &BaseBox::_on_expose_event), false); -#endif set_visible_window(false); } -#if !WITH_GTKMM_3_0 -bool BaseBox::_on_expose_event(GdkEventExpose* /*event*/) -{ - Cairo::RefPtr cr = get_window()->create_cairo_context(); - - return _on_draw(cr); -} -#endif - bool BaseBox::_on_draw(const Cairo::RefPtr& cr) { // Draw background and shadow @@ -632,23 +538,12 @@ bool BaseBox::_on_draw(const Cairo::RefPtr& cr) int width = get_allocation().get_width(); int height = get_allocation().get_height(); -#if WITH_GTKMM_3_0 Gdk::RGBA background_fill; get_style_context()->lookup_color("base_color", background_fill); cr->rectangle(x, y, width, height); Gdk::Cairo::set_source_rgba(cr, background_fill); cr->fill(); get_style_context()->render_frame(cr, x, y, width, height); -#else - Gdk::Color background_fill = get_style()->get_base(get_state()); - cr->rectangle(x, y, width, height); - Gdk::Cairo::set_source_color(cr, background_fill); - cr->fill(); - - get_style()->paint_shadow(get_window(), get_state(), Gtk::SHADOW_IN, - Gdk::Rectangle(x, y, width, height), - *this, Glib::ustring("viewport"), x, y, width, height); -#endif return false; } @@ -665,23 +560,10 @@ LogoArea::LogoArea() : Gtk::EventBox() draw_logo = false; } -#if WITH_GTKMM_3_0 signal_draw().connect(sigc::mem_fun(*this, &LogoArea::_on_draw)); -#else - signal_expose_event().connect(sigc::mem_fun(*this, &LogoArea::_on_expose_event)); -#endif set_visible_window(false); } -#if !WITH_GTKMM_3_0 -bool LogoArea::_on_expose_event(GdkEventExpose* /*event*/) -{ - Cairo::RefPtr cr = get_window()->create_cairo_context(); - - return _on_draw(cr); -} -#endif - bool LogoArea::_on_draw(const Cairo::RefPtr& cr) { if (draw_logo) { @@ -692,16 +574,9 @@ bool LogoArea::_on_draw(const Cairo::RefPtr& cr) int x_logo = x + (width - 220) / 2; int y_logo = y + (height - 76) / 2; - // Draw logo, we mask [read fill] it with the mid colour from the - // user's GTK theme -#if WITH_GTKMM_3_0 - // For GTK+ 3, use grey + // Draw logo, we mask [read fill] it with grey Gdk::RGBA logo_fill("grey"); Gdk::Cairo::set_source_rgba(cr, logo_fill); -#else - Gdk::Color logo_fill = get_style()->get_mid(get_state()); - Gdk::Cairo::set_source_color(cr, logo_fill); -#endif cr->mask(logo_mask, x_logo, y_logo); } @@ -1179,16 +1054,9 @@ void ImportDialog::update_label_no_search_results() Glib::ustring msg_two = _("Please make sure all keywords are spelled correctly," " or try again with different keywords."); -#if WITH_GTKMM_3_0 - Glib::ustring markup = Glib::ustring::compose( + auto markup = Glib::ustring::compose( "%1\n%2", msg_one, msg_two); -#else - Gdk::Color grey = entry_search->get_style()->get_text_aa(entry_search->get_state()); - Glib::ustring markup = Glib::ustring::compose( - "%1\n%3", - msg_one, grey.to_string(), msg_two); -#endif label_not_found->set_markup(markup); } @@ -1208,33 +1076,17 @@ ImportDialog::ImportDialog(Gtk::Window& parent_window, FileDialogType file_types dialogType = file_types; // Creation - Gtk::VBox *vbox = new Gtk::VBox(false, 0); - -#if WITH_GTKMM_3_0 - Gtk::ButtonBox *hbuttonbox_bottom = new Gtk::ButtonBox(); -#else - Gtk::HButtonBox *hbuttonbox_bottom = new Gtk::HButtonBox(); -#endif - - Gtk::HBox *hbox_bottom = new Gtk::HBox(false, 12); + auto vbox = new Gtk::VBox(false, 0); + auto hbuttonbox_bottom = new Gtk::ButtonBox(); + auto hbox_bottom = new Gtk::HBox(false, 12); BaseBox *basebox_logo = new BaseBox(); BaseBox *basebox_no_search_results = new BaseBox(); label_not_found = new Gtk::Label(); label_description = new Gtk::Label(); - -#if GTK_CHECK_VERSION(3,0,0) entry_search = new Gtk::SearchEntry(); -#else - entry_search = new SearchEntry(); -#endif - button_search = new Gtk::Button(_("Search")); -#if WITH_GTKMM_3_0 - Gtk::ButtonBox* hbuttonbox_search = new Gtk::ButtonBox(); -#else - Gtk::HButtonBox* hbuttonbox_search = new Gtk::HButtonBox(); -#endif + auto hbuttonbox_search = new Gtk::ButtonBox(); Gtk::ScrolledWindow* scrolledwindow_preview = new Gtk::ScrolledWindow(); preview_files = new PreviewWidget(); diff --git a/src/ui/dialog/ocaldialogs.h b/src/ui/dialog/ocaldialogs.h index 9de24d821..db3c60786 100644 --- a/src/ui/dialog/ocaldialogs.h +++ b/src/ui/dialog/ocaldialogs.h @@ -17,19 +17,16 @@ # include #endif -//Gtk includes +// Gtkmm includes #include #include #include #include +#include #include #include -#if GTK_CHECK_VERSION(3,0,0) -# include -#endif - #include //Inkscape includes @@ -283,10 +280,6 @@ private: sigc::connection timeout; bool draw_spinner; -#if !WITH_GTKMM_3_0 - bool _on_expose_event(GdkEventExpose* event); -#endif - bool _on_draw(const Cairo::RefPtr& cr); bool on_timeout(); }; @@ -310,10 +303,6 @@ private: WrapLabel* label_description; WrapLabel* label_time; -#if !WITH_GTKMM_3_0 - bool _on_expose_event(GdkEventExpose* event); -#endif - bool _on_draw(const Cairo::RefPtr& cr); }; @@ -336,21 +325,6 @@ public: Gtk::Label* label; }; -#if !GTK_CHECK_VERSION(3,0,0) -/** - * A Gtk::Entry with search & clear icons - */ -class SearchEntry : public Gtk::Entry -{ -public: - SearchEntry(); - -private: - void _on_icon_pressed(Gtk::EntryIconPosition icon_position, const GdkEventButton* event); - void _on_changed(); -}; -#endif - /** * A box which paints an overlay of the OCAL logo */ @@ -359,9 +333,6 @@ class LogoArea : public Gtk::EventBox public: LogoArea(); private: -#if !WITH_GTKMM_3_0 - bool _on_expose_event(GdkEventExpose* event); -#endif bool _on_draw(const Cairo::RefPtr& cr); bool draw_logo; Cairo::RefPtr logo_mask; @@ -375,9 +346,6 @@ class BaseBox : public Gtk::EventBox public: BaseBox(); private: -#if !WITH_GTKMM_3_0 - bool _on_expose_event(GdkEventExpose* event); -#endif bool _on_draw(const Cairo::RefPtr& cr); }; @@ -459,12 +427,7 @@ protected: private: Glib::ustring filename_image; Glib::ustring filename_thumbnail; - -#if GTK_CHECK_VERSION(3,0,0) Gtk::SearchEntry *entry_search; -#else - SearchEntry *entry_search; -#endif LogoArea *drawingarea_logo; SearchResultList *list_results; diff --git a/src/ui/dialog/polar-arrange-tab.cpp b/src/ui/dialog/polar-arrange-tab.cpp index 5ec1285c1..5c588ebac 100644 --- a/src/ui/dialog/polar-arrange-tab.cpp +++ b/src/ui/dialog/polar-arrange-tab.cpp @@ -33,11 +33,7 @@ namespace Dialog { PolarArrangeTab::PolarArrangeTab(ArrangeDialog *parent_) : parent(parent_), -#if WITH_GTKMM_3_0 parametersTable(), -#else - parametersTable(3, 3, false), -#endif centerY("", C_("Polar arrange tab", "Y coordinate of the center"), UNIT_TYPE_LINEAR), centerX("", C_("Polar arrange tab", "X coordinate of the center"), centerY), radiusY("", C_("Polar arrange tab", "Y coordinate of the radius"), UNIT_TYPE_LINEAR), @@ -81,11 +77,7 @@ PolarArrangeTab::PolarArrangeTab(ArrangeDialog *parent_) pack_start(arrangeOnParametersRadio, false, false); centerLabel.set_text(C_("Polar arrange tab", "Center X/Y:")); -#if WITH_GTKMM_3_0 parametersTable.attach(centerLabel, 0, 0, 1, 1); -#else - parametersTable.attach(centerLabel, 0, 1, 0, 1, Gtk::FILL); -#endif centerX.setDigits(2); centerX.setIncrements(0.2, 0); centerX.setRange(-10000, 10000); @@ -94,20 +86,11 @@ PolarArrangeTab::PolarArrangeTab(ArrangeDialog *parent_) centerY.setIncrements(0.2, 0); centerY.setRange(-10000, 10000); centerY.setValue(0, "px"); -#if WITH_GTKMM_3_0 parametersTable.attach(centerX, 1, 0, 1, 1); parametersTable.attach(centerY, 2, 0, 1, 1); -#else - parametersTable.attach(centerX, 1, 2, 0, 1, Gtk::FILL); - parametersTable.attach(centerY, 2, 3, 0, 1, Gtk::FILL); -#endif radiusLabel.set_text(C_("Polar arrange tab", "Radius X/Y:")); -#if WITH_GTKMM_3_0 parametersTable.attach(radiusLabel, 0, 1, 1, 1); -#else - parametersTable.attach(radiusLabel, 0, 1, 1, 2, Gtk::FILL); -#endif radiusX.setDigits(2); radiusX.setIncrements(0.2, 0); radiusX.setRange(0.001, 10000); @@ -116,20 +99,11 @@ PolarArrangeTab::PolarArrangeTab(ArrangeDialog *parent_) radiusY.setIncrements(0.2, 0); radiusY.setRange(0.001, 10000); radiusY.setValue(100, "px"); -#if WITH_GTKMM_3_0 parametersTable.attach(radiusX, 1, 1, 1, 1); parametersTable.attach(radiusY, 2, 1, 1, 1); -#else - parametersTable.attach(radiusX, 1, 2, 1, 2, Gtk::FILL); - parametersTable.attach(radiusY, 2, 3, 1, 2, Gtk::FILL); -#endif angleLabel.set_text(_("Angle X/Y:")); -#if WITH_GTKMM_3_0 parametersTable.attach(angleLabel, 0, 2, 1, 1); -#else - parametersTable.attach(angleLabel, 0, 1, 2, 3, Gtk::FILL); -#endif angleX.setDigits(2); angleX.setIncrements(0.2, 0); angleX.setRange(-10000, 10000); @@ -138,13 +112,8 @@ PolarArrangeTab::PolarArrangeTab(ArrangeDialog *parent_) angleY.setIncrements(0.2, 0); angleY.setRange(-10000, 10000); angleY.setValue(180, "°"); -#if WITH_GTKMM_3_0 parametersTable.attach(angleX, 1, 2, 1, 1); parametersTable.attach(angleY, 2, 2, 1, 1); -#else - parametersTable.attach(angleX, 1, 2, 2, 3, Gtk::FILL); - parametersTable.attach(angleY, 2, 3, 2, 3, Gtk::FILL); -#endif pack_start(parametersTable, false, false); rotateObjectsCheckBox.set_label(_("Rotate objects")); diff --git a/src/ui/dialog/polar-arrange-tab.h b/src/ui/dialog/polar-arrange-tab.h index f7d7bf11f..1a4e04eda 100644 --- a/src/ui/dialog/polar-arrange-tab.h +++ b/src/ui/dialog/polar-arrange-tab.h @@ -20,12 +20,7 @@ #include #include - -#if WITH_GTKMM_3_0 - #include -#else - #include -#endif +#include namespace Inkscape { namespace UI { @@ -75,11 +70,7 @@ private: Gtk::RadioButton arrangeOnLastCircleRadio; Gtk::RadioButton arrangeOnParametersRadio; -#if WITH_GTKMM_3_0 Gtk::Grid parametersTable; -#else - Gtk::Table parametersTable; -#endif Gtk::Label centerLabel; Inkscape::UI::Widget::ScalarUnit centerY; diff --git a/src/ui/dialog/spellcheck.h b/src/ui/dialog/spellcheck.h index e98a9d80e..834f23c24 100644 --- a/src/ui/dialog/spellcheck.h +++ b/src/ui/dialog/spellcheck.h @@ -225,11 +225,7 @@ private: * Dialogs widgets */ Gtk::Label banner_label; -#if WITH_GTKMM_3_0 Gtk::ButtonBox banner_hbox; -#else - Gtk::HButtonBox banner_hbox; -#endif Gtk::ScrolledWindow scrolled_window; Gtk::TreeView tree_view; Glib::RefPtr model; @@ -243,21 +239,10 @@ private: Gtk::Button add_button; GtkWidget * dictionary_combo; Gtk::HBox dictionary_hbox; - -#if WITH_GTKMM_3_0 Gtk::Separator action_sep; -#else - Gtk::HSeparator action_sep; -#endif - Gtk::Button stop_button; Gtk::Button start_button; - -#if WITH_GTKMM_3_0 Gtk::ButtonBox actionbutton_hbox; -#else - Gtk::HButtonBox actionbutton_hbox; -#endif SPDesktop * desktop; DesktopTracker deskTrack; diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp index 08ebbcf14..58ac62cb0 100644 --- a/src/ui/dialog/svg-fonts-dialog.cpp +++ b/src/ui/dialog/svg-fonts-dialog.cpp @@ -890,12 +890,7 @@ void SvgFontsDialog::add_font(){ SvgFontsDialog::SvgFontsDialog() : UI::Widget::Panel("", "/dialogs/svgfonts", SP_VERB_DIALOG_SVG_FONTS), _add(Gtk::Stock::NEW) { -#if WITH_GTKMM_3_0 kerning_slider = Gtk::manage(new Gtk::Scale(Gtk::ORIENTATION_HORIZONTAL)); -#else - kerning_slider = Gtk::manage(new Gtk::HScale); -#endif - _add.signal_clicked().connect(sigc::mem_fun(*this, &SvgFontsDialog::add_font)); Gtk::HBox* hbox = Gtk::manage(new Gtk::HBox()); diff --git a/src/ui/dialog/svg-fonts-dialog.h b/src/ui/dialog/svg-fonts-dialog.h index e80bbfd39..1588c0fc2 100644 --- a/src/ui/dialog/svg-fonts-dialog.h +++ b/src/ui/dialog/svg-fonts-dialog.h @@ -27,11 +27,7 @@ #include "xml/helper-observer.h" namespace Gtk { -#if WITH_GTKMM_3_0 class Scale; -#else -class HScale; -#endif } class SPGlyph; @@ -216,12 +212,7 @@ private: GlyphComboBox first_glyph, second_glyph; SPGlyphKerning* kerning_pair; Inkscape::UI::Widget::SpinButton setwidth_spin; - -#if WITH_GTKMM_3_0 Gtk::Scale* kerning_slider; -#else - Gtk::HScale* kerning_slider; -#endif class EntryWidget : public Gtk::HBox { diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp index 6577c8d4e..964e844b2 100644 --- a/src/ui/dialog/swatches.cpp +++ b/src/ui/dialog/swatches.cpp @@ -658,12 +658,8 @@ SwatchesPanel::SwatchesPanel(gchar const* prefsPath) : if (Glib::ustring(prefsPath) == "/dialogs/swatches") { Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; get_preferred_size(sreq_natural, sreq); -#else - sreq = size_request(); -#endif int minHeight = 60; if (sreq.height < minHeight) { set_size_request(70, minHeight); diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index 06c17611f..597f90e95 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -20,14 +20,8 @@ #include #include - -#if WITH_GTKMM_3_0 -# include -# include -#else -# include -#endif - +#include +#include #include #include #include @@ -121,11 +115,7 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : { /******************** Table *************************/ -#if WITH_GTKMM_3_0 - Gtk::Grid *table = new Gtk::Grid(); -#else - Gtk::Table *table = new Gtk::Table(2, 4, false); -#endif + auto table = new Gtk::Grid(); // panel is a cloked Gtk::VBox _getContents()->pack_start(*Gtk::manage(table), Gtk::PACK_EXPAND_WIDGET); @@ -133,24 +123,12 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : /******************** Symbol Sets *************************/ Gtk::Label* labelSet = new Gtk::Label(_("Symbol set: ")); - -#if WITH_GTKMM_3_0 table->attach(*Gtk::manage(labelSet),0,row,1,1); -#else - table->attach(*Gtk::manage(labelSet),0,1,row,row+1,Gtk::SHRINK,Gtk::SHRINK); -#endif - symbolSet = new Gtk::ComboBoxText(); // Fill in later symbolSet->append(_("Current Document")); symbolSet->set_active_text(_("Current Document")); - -#if WITH_GTKMM_3_0 symbolSet->set_hexpand(); table->attach(*Gtk::manage(symbolSet),1,row,1,1); -#else - table->attach(*Gtk::manage(symbolSet),1,2,row,row+1,Gtk::FILL|Gtk::EXPAND,Gtk::SHRINK); -#endif - sigc::connection connSet = symbolSet->signal_changed().connect( sigc::mem_fun(*this, &SymbolsDialog::rebuild)); instanceConns.push_back(connSet); @@ -183,14 +161,9 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : Gtk::ScrolledWindow *scroller = new Gtk::ScrolledWindow(); scroller->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS); scroller->add(*Gtk::manage(iconView)); - -#if WITH_GTKMM_3_0 scroller->set_hexpand(); scroller->set_vexpand(); table->attach(*Gtk::manage(scroller),0,row,2,1); -#else - table->attach(*Gtk::manage(scroller),0,2,row,row+1,Gtk::EXPAND|Gtk::FILL,Gtk::EXPAND|Gtk::FILL); -#endif ++row; @@ -199,12 +172,8 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : Gtk::HBox* tools = new Gtk::HBox(); //tools->set_layout( Gtk::BUTTONBOX_END ); -#if WITH_GTKMM_3_0 scroller->set_hexpand(); table->attach(*Gtk::manage(tools),0,row,2,1); -#else - table->attach(*Gtk::manage(tools),0,2,row,row+1,Gtk::EXPAND|Gtk::FILL,Gtk::FILL); -#endif addSymbol = Gtk::manage(new Gtk::Button()); addSymbol->add(*Gtk::manage(Glib::wrap( @@ -398,11 +367,7 @@ void SymbolsDialog::revertSymbol() { void SymbolsDialog::iconDragDataGet(const Glib::RefPtr& /*context*/, Gtk::SelectionData& data, guint /*info*/, guint /*time*/) { -#if WITH_GTKMM_3_0 - std::vector iconArray = iconView->get_selected_items(); -#else - Gtk::IconView::ArrayHandle_TreePaths iconArray = iconView->get_selected_items(); -#endif + auto iconArray = iconView->get_selected_items(); if( iconArray.empty() ) { //std::cout << " iconArray empty: huh? " << std::endl; @@ -455,11 +420,7 @@ SPDocument* SymbolsDialog::selectedSymbols() { Glib::ustring SymbolsDialog::selectedSymbolId() { -#if WITH_GTKMM_3_0 - std::vector iconArray = iconView->get_selected_items(); -#else - Gtk::IconView::ArrayHandle_TreePaths iconArray = iconView->get_selected_items(); -#endif + auto iconArray = iconView->get_selected_items(); if( !iconArray.empty() ) { Gtk::TreeModel::Path const & path = *iconArray.begin(); diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index c99c1bff3..be91ca8af 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -980,12 +980,8 @@ TagsPanel::TagsPanel() : _scroller.set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC ); _scroller.set_shadow_type(Gtk::SHADOW_IN); Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; _scroller.get_preferred_size(sreq_natural, sreq); -#else - sreq = _scroller.size_request(); -#endif int minHeight = 70; if (sreq.height < minHeight) { // Set a min height to see the layers when used with Ubuntu liboverlay-scrollbar diff --git a/src/ui/dialog/tags.h b/src/ui/dialog/tags.h index 3576bd111..bdda22dd4 100644 --- a/src/ui/dialog/tags.h +++ b/src/ui/dialog/tags.h @@ -141,15 +141,9 @@ private: Gtk::TreeView _tree; Gtk::CellRendererText *_text_renderer; Gtk::TreeView::Column *_name_column; -#if WITH_GTKMM_3_0 Gtk::Box _buttonsRow; Gtk::Box _buttonsPrimary; Gtk::Box _buttonsSecondary; -#else - Gtk::HBox _buttonsRow; - Gtk::HBox _buttonsPrimary; - Gtk::HBox _buttonsSecondary; -#endif Gtk::ScrolledWindow _scroller; Gtk::Menu _popupMenu; Inkscape::UI::Widget::SpinButton _spinBtn; diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp index c01da8864..83b636ae2 100644 --- a/src/ui/dialog/text-edit.cpp +++ b/src/ui/dialog/text-edit.cpp @@ -99,9 +99,7 @@ TextEdit::TextEdit() styleButton(&align_right, _("Align right"), INKSCAPE_ICON("format-justify-right"), &align_left); styleButton(&align_justify, _("Justify (only flowed text)"), INKSCAPE_ICON("format-justify-fill"), &align_left); -#if WITH_GTKMM_3_0 align_sep.set_orientation(Gtk::ORIENTATION_VERTICAL); -#endif layout_hbox.pack_start(align_sep, false, false, 10); @@ -109,9 +107,7 @@ TextEdit::TextEdit() styleButton(&text_horizontal, _("Horizontal text"), INKSCAPE_ICON("format-text-direction-horizontal"), NULL); styleButton(&text_vertical, _("Vertical text"), INKSCAPE_ICON("format-text-direction-vertical"), &text_horizontal); -#if WITH_GTKMM_3_0 text_sep.set_orientation(Gtk::ORIENTATION_VERTICAL); -#endif layout_hbox.pack_start(text_sep, false, false, 10); @@ -146,12 +142,8 @@ TextEdit::TextEdit() gtk_widget_set_tooltip_text(startOffset, _("Text path offset")); -#if WITH_GTKMM_3_0 - Gtk::Separator *sep = Gtk::manage(new Gtk::Separator()); + auto sep = Gtk::manage(new Gtk::Separator()); sep->set_orientation(Gtk::ORIENTATION_VERTICAL); -#else - Gtk::VSeparator *sep = Gtk::manage(new Gtk::VSeparator); -#endif layout_hbox.pack_start(*sep, false, false, 10); layout_hbox.pack_start(*Gtk::manage(Glib::wrap(startOffset)), false, false); @@ -175,7 +167,6 @@ TextEdit::TextEdit() gtk_text_view_set_wrap_mode ((GtkTextView *) text_view, GTK_WRAP_WORD); #ifdef WITH_GTKSPELL -#ifdef WITH_GTKMM_3_0 /* TODO: Use computed xml:lang attribute of relevant element, if present, to specify the language (either as 2nd arg of gtkspell_new_attach, or with explicit @@ -187,20 +178,6 @@ TextEdit::TextEdit() if (! gtk_spell_checker_attach(speller, GTK_TEXT_VIEW(text_view))) { g_print("gtkspell error:\n"); } -#else - GError *error = NULL; - -/* - TODO: Use computed xml:lang attribute of relevant element, if present, to specify the - language (either as 2nd arg of gtkspell_new_attach, or with explicit - gtkspell_set_language call in; see advanced.c example in gtkspell docs). - onReadSelection looks like a suitable place. -*/ - if (gtkspell_new_attach(GTK_TEXT_VIEW(text_view), NULL, &error) == NULL) { - g_print("gtkspell error: %s\n", error->message); - g_error_free(error); - } -#endif #endif gtk_widget_set_size_request (text_view, -1, 64); diff --git a/src/ui/dialog/text-edit.h b/src/ui/dialog/text-edit.h index cfe612268..e974874d2 100644 --- a/src/ui/dialog/text-edit.h +++ b/src/ui/dialog/text-edit.h @@ -198,21 +198,10 @@ private: Gtk::RadioButton align_center; Gtk::RadioButton align_right; Gtk::RadioButton align_justify; - -#if WITH_GTKMM_3_0 Gtk::Separator align_sep; -#else - Gtk::VSeparator align_sep; -#endif - Gtk::RadioButton text_vertical; Gtk::RadioButton text_horizontal; - -#if WITH_GTKMM_3_0 Gtk::Separator text_sep; -#else - Gtk::VSeparator text_sep; -#endif GtkWidget *spacing_combo; diff --git a/src/ui/dialog/tile.h b/src/ui/dialog/tile.h index de1d3028b..2c29f85b8 100644 --- a/src/ui/dialog/tile.h +++ b/src/ui/dialog/tile.h @@ -29,12 +29,7 @@ namespace Gtk { class Button; - -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } namespace Inkscape { diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp index b7638e8c1..72133f448 100644 --- a/src/ui/dialog/transformation.cpp +++ b/src/ui/dialog/transformation.cpp @@ -216,38 +216,20 @@ void Transformation::layoutPageMove() //_scalar_move_vertical.set_label_image( INKSCAPE_STOCK_ARROWS_HOR ); -#if WITH_GTKMM_3_0 _page_move.table().attach(_scalar_move_horizontal, 0, 0, 2, 1); _page_move.table().attach(_units_move, 2, 0, 1, 1); -#else - _page_move.table() - .attach(_scalar_move_horizontal, 0, 2, 0, 1, Gtk::FILL, Gtk::SHRINK); - - _page_move.table() - .attach(_units_move, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_move_horizontal.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onMoveValueChanged)); //_scalar_move_vertical.set_label_image( INKSCAPE_STOCK_ARROWS_VER ); -#if WITH_GTKMM_3_0 _page_move.table().attach(_scalar_move_vertical, 0, 1, 2, 1); -#else - _page_move.table() - .attach(_scalar_move_vertical, 0, 2, 1, 2, Gtk::FILL, Gtk::SHRINK); -#endif _scalar_move_vertical.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onMoveValueChanged)); // Relative moves -#if WITH_GTKMM_3_0 _page_move.table().attach(_check_move_relative, 0, 2, 2, 1); -#else - _page_move.table() - .attach(_check_move_relative, 0, 2, 2, 3, Gtk::FILL, Gtk::SHRINK); -#endif _check_move_relative.set_active(true); _check_move_relative.signal_toggled() @@ -273,36 +255,18 @@ void Transformation::layoutPageScale() _scalar_scale_vertical.setAbsoluteIsIncrement(true); _scalar_scale_vertical.setPercentageIsIncrement(true); -#if WITH_GTKMM_3_0 _page_scale.table().attach(_scalar_scale_horizontal, 0, 0, 2, 1); -#else - _page_scale.table() - .attach(_scalar_scale_horizontal, 0, 2, 0, 1, Gtk::FILL, Gtk::SHRINK); -#endif _scalar_scale_horizontal.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onScaleXValueChanged)); -#if WITH_GTKMM_3_0 _page_scale.table().attach(_units_scale, 2, 0, 1, 1); _page_scale.table().attach(_scalar_scale_vertical, 0, 1, 2, 1); -#else - _page_scale.table() - .attach(_units_scale, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - - _page_scale.table() - .attach(_scalar_scale_vertical, 0, 2, 1, 2, Gtk::FILL, Gtk::SHRINK); -#endif _scalar_scale_vertical.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onScaleYValueChanged)); -#if WITH_GTKMM_3_0 _page_scale.table().attach(_check_scale_proportional, 0, 2, 2, 1); -#else - _page_scale.table() - .attach(_check_scale_proportional, 0, 2, 2, 3, Gtk::FILL, Gtk::SHRINK); -#endif _check_scale_proportional.set_active(false); _check_scale_proportional.signal_toggled() @@ -334,24 +298,10 @@ void Transformation::layoutPageRotate() Gtk::RadioButton::Group group = _counterclockwise_rotate.get_group(); _clockwise_rotate.set_group(group); -#if WITH_GTKMM_3_0 _page_rotate.table().attach(_scalar_rotate, 0, 0, 2, 1); _page_rotate.table().attach(_units_rotate, 2, 0, 1, 1); _page_rotate.table().attach(_counterclockwise_rotate, 3, 0, 1, 1); _page_rotate.table().attach(_clockwise_rotate, 4, 0, 1, 1); -#else - _page_rotate.table() - .attach(_scalar_rotate, 0, 2, 0, 1, Gtk::FILL, Gtk::SHRINK); - - _page_rotate.table() - .attach(_units_rotate, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - - _page_rotate.table() - .attach(_counterclockwise_rotate, 3, 4, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - - _page_rotate.table() - .attach(_clockwise_rotate, 4, 5, 0, 1, Gtk::SHRINK, Gtk::SHRINK); -#endif Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (prefs->getBool("/dialogs/transformation/rotateCounterClockwise", TRUE)) { @@ -385,26 +335,13 @@ void Transformation::layoutPageSkew() _scalar_skew_vertical.setDigits(3); _scalar_skew_vertical.setIncrements(0.1, 1.0); -#if WITH_GTKMM_3_0 _page_skew.table().attach(_scalar_skew_horizontal, 0, 0, 2, 1); -#else - _page_skew.table() - .attach(_scalar_skew_horizontal, 0, 2, 0, 1, Gtk::FILL, Gtk::SHRINK); -#endif _scalar_skew_horizontal.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onSkewValueChanged)); -#if WITH_GTKMM_3_0 _page_skew.table().attach(_units_skew, 2, 0, 1, 1); _page_skew.table().attach(_scalar_skew_vertical, 0, 1, 2, 1); -#else - _page_skew.table() - .attach(_units_skew, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - - _page_skew.table() - .attach(_scalar_skew_vertical, 0, 2, 1, 2, Gtk::FILL, Gtk::SHRINK); -#endif _scalar_skew_vertical.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onSkewValueChanged)); @@ -422,12 +359,7 @@ void Transformation::layoutPageTransform() _scalar_transform_a.setIncrements(0.1, 1.0); _scalar_transform_a.setValue(1.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_a, 0, 0, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_a, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_a.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -438,12 +370,7 @@ void Transformation::layoutPageTransform() _scalar_transform_b.setIncrements(0.1, 1.0); _scalar_transform_b.setValue(0.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_b, 0, 1, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_b, 0, 1, 1, 2, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_b.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -454,12 +381,7 @@ void Transformation::layoutPageTransform() _scalar_transform_c.setIncrements(0.1, 1.0); _scalar_transform_c.setValue(0.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_c, 1, 0, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_c, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_c.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -471,12 +393,7 @@ void Transformation::layoutPageTransform() _scalar_transform_d.setIncrements(0.1, 1.0); _scalar_transform_d.setValue(1.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_d, 1, 1, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_d, 1, 2, 1, 2, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_d.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -488,12 +405,7 @@ void Transformation::layoutPageTransform() _scalar_transform_e.setIncrements(0.1, 1.0); _scalar_transform_e.setValue(0.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_e, 2, 0, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_e, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_e.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -505,23 +417,13 @@ void Transformation::layoutPageTransform() _scalar_transform_f.setIncrements(0.1, 1.0); _scalar_transform_f.setValue(0.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_f, 2, 1, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_f, 2, 3, 1, 2, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_f.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); // Edit existing matrix -#if WITH_GTKMM_3_0 _page_transform.table().attach(_check_replace_matrix, 0, 2, 2, 1); -#else - _page_transform.table() - .attach(_check_replace_matrix, 0, 2, 2, 3, Gtk::FILL, Gtk::SHRINK); -#endif _check_replace_matrix.set_active(false); _check_replace_matrix.signal_toggled() @@ -568,11 +470,7 @@ void Transformation::updateSelection(PageType page, Inkscape::Selection *selecti selection && !selection->isEmpty()); } -#if WITH_GTKMM_3_0 void Transformation::onSwitchPage(Gtk::Widget * /*page*/, guint pagenum) -#else -void Transformation::onSwitchPage(GtkNotebookPage * /*page*/, guint pagenum) -#endif { updateSelection((PageType)pagenum, getDesktop()->getSelection()); } diff --git a/src/ui/dialog/transformation.h b/src/ui/dialog/transformation.h index 89aa95d90..9595e87bc 100644 --- a/src/ui/dialog/transformation.h +++ b/src/ui/dialog/transformation.h @@ -169,11 +169,7 @@ protected: virtual void _apply(); void presentPage(PageType page); -#if WITH_GTKMM_3_0 void onSwitchPage(Gtk::Widget *page, guint pagenum); -#else - void onSwitchPage(GtkNotebookPage *page, guint pagenum); -#endif /** * Callbacks for when a user changes values on the panels diff --git a/src/ui/dialog/undo-history.cpp b/src/ui/dialog/undo-history.cpp index a50a169eb..e7e68ed87 100644 --- a/src/ui/dialog/undo-history.cpp +++ b/src/ui/dialog/undo-history.cpp @@ -35,20 +35,11 @@ namespace UI { namespace Dialog { /* Rendering functions for custom cell renderers */ -#if WITH_GTKMM_3_0 void CellRendererSPIcon::render_vfunc(const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags) -#else -void CellRendererSPIcon::render_vfunc(const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags) -#endif { // if this event type doesn't have an icon... if ( !Inkscape::Verb::get(_property_event_type)->get_image() ) return; @@ -67,13 +58,8 @@ void CellRendererSPIcon::render_vfunc(const Glib::RefPtr& window, sp_icon_fetch_pixbuf(sp_icon); _property_icon = Glib::wrap(sp_icon->pb, true); } else if ( GTK_IS_IMAGE(icon->gobj()) ) { -#if WITH_GTKMM_3_0 _property_icon = Gtk::Invisible().render_icon_pixbuf(Gtk::StockID(image), Gtk::ICON_SIZE_MENU); -#else - _property_icon = Gtk::Invisible().render_icon(Gtk::StockID(image), - Gtk::ICON_SIZE_MENU); -#endif } else { delete icon; return; @@ -87,42 +73,23 @@ void CellRendererSPIcon::render_vfunc(const Glib::RefPtr& window, property_pixbuf() = _icon_cache[_property_event_type]; } -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc(cr, widget, background_area, cell_area, flags); -#else - Gtk::CellRendererPixbuf::render_vfunc(window, widget, background_area, - cell_area, expose_area, flags); -#endif } -#if WITH_GTKMM_3_0 void CellRendererInt::render_vfunc(const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags) -#else -void CellRendererInt::render_vfunc(const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags) -#endif { if( _filter(_property_number) ) { std::ostringstream s; s << _property_number << std::flush; property_text() = s.str(); -#if WITH_GTKMM_3_0 Gtk::CellRendererText::render_vfunc(cr, widget, background_area, cell_area, flags); -#else - Gtk::CellRendererText::render_vfunc(window, widget, background_area, - cell_area, expose_area, flags); -#endif } } diff --git a/src/ui/dialog/undo-history.h b/src/ui/dialog/undo-history.h index b0cc283cf..48929a0d0 100644 --- a/src/ui/dialog/undo-history.h +++ b/src/ui/dialog/undo-history.h @@ -50,20 +50,11 @@ public: property_event_type() { return _property_event_type.get_proxy(); } protected: -#if WITH_GTKMM_3_0 virtual void render_vfunc(const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags); -#else - virtual void render_vfunc(const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags); -#endif private: Glib::Property > _property_icon; @@ -95,20 +86,11 @@ public: static const Filter& no_filter; protected: -#if WITH_GTKMM_3_0 virtual void render_vfunc(const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags); -#else - virtual void render_vfunc(const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags); -#endif private: diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp index 99a4acc69..714d59c50 100644 --- a/src/ui/dialog/xml-tree.cpp +++ b/src/ui/dialog/xml-tree.cpp @@ -79,11 +79,7 @@ XmlTree::XmlTree (void) : xml_attribute_delete_button (_("Delete attribute")), text_container (), attr_container (), -#if WITH_GTKMM_3_0 attr_subpaned_container(Gtk::ORIENTATION_VERTICAL), -#else - attr_subpaned_container(), -#endif set_attr (_("Set")), new_window(NULL) { @@ -100,9 +96,7 @@ XmlTree::XmlTree (void) : status.set_alignment( 0.0, 0.5); status.set_size_request(1, -1); status.set_markup(""); -#if WITH_GTKMM_3_0 status.set_line_wrap(true); -#endif status_box.pack_start( status, TRUE, TRUE, 0); contents->pack_end(status_box, false, false, 2); @@ -881,31 +875,19 @@ void XmlTree::cmd_new_element_node() g_signal_connect(G_OBJECT(new_window), "destroy", gtk_main_quit, NULL); g_signal_connect(G_OBJECT(new_window), "key-press-event", G_CALLBACK(quit_on_esc), new_window); -#if GTK_CHECK_VERSION(3,0,0) vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(vbox), FALSE); -#else - vbox = gtk_vbox_new(FALSE, 4); -#endif gtk_container_add(GTK_CONTAINER(new_window), vbox); name_entry = new Gtk::Entry(); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(name_entry->gobj()), FALSE, TRUE, 0); -#if GTK_CHECK_VERSION(3,0,0) sep = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL); -#else - sep = gtk_hseparator_new(); -#endif gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, TRUE, 0); -#if GTK_CHECK_VERSION(3,0,0) bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); -#else - bbox = gtk_hbutton_box_new(); -#endif gtk_container_set_border_width(GTK_CONTAINER(bbox), 4); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); diff --git a/src/ui/dialog/xml-tree.h b/src/ui/dialog/xml-tree.h index 58ef3aef8..a4c3fffcb 100644 --- a/src/ui/dialog/xml-tree.h +++ b/src/ui/dialog/xml-tree.h @@ -218,13 +218,7 @@ private: Gtk::Button *create_button; Gtk::Entry *name_entry; - -#if WITH_GTKMM_3_0 Gtk::Paned paned; -#else - Gtk::HPaned paned; -#endif - Gtk::VBox left_box; Gtk::VBox right_box; Gtk::HBox status_box; @@ -248,12 +242,7 @@ private: Gtk::ScrolledWindow text_container; Gtk::HBox attr_hbox; Gtk::VBox attr_container; - -#if WITH_GTKMM_3_0 Gtk::Paned attr_subpaned_container; -#else - Gtk::VPaned attr_subpaned_container; -#endif Gtk::Button set_attr; diff --git a/src/ui/previewholder.cpp b/src/ui/previewholder.cpp index 5e75179a3..8336467c4 100644 --- a/src/ui/previewholder.cpp +++ b/src/ui/previewholder.cpp @@ -18,12 +18,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #define COLUMNS_FOR_SMALL 16 #define COLUMNS_FOR_LARGE 8 @@ -55,7 +50,6 @@ PreviewHolder::PreviewHolder() : ((Gtk::ScrolledWindow *)_scroller)->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); -#if WITH_GTKMM_3_0 _insides = Gtk::manage(new Gtk::Grid()); _insides->set_name( "PreviewHolderGrid" ); _insides->set_column_spacing(8); @@ -66,21 +60,9 @@ PreviewHolder::PreviewHolder() : _scroller->set_hexpand(); _scroller->set_vexpand(); -#else - _insides = Gtk::manage(new Gtk::Table( 1, 2 )); - _insides->set_col_spacings( 8 ); - - // Add a container with the scroller and a spacer - Gtk::Table* spaceHolder = Gtk::manage( new Gtk::Table(1, 2) ); -#endif - _scroller->add( *_insides ); -#if WITH_GTKMM_3_0 spaceHolder->attach( *_scroller, 0, 0, 1, 1); -#else - spaceHolder->attach( *_scroller, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); -#endif pack_start(*spaceHolder, Gtk::PACK_EXPAND_WIDGET); } @@ -93,11 +75,7 @@ PreviewHolder::~PreviewHolder() bool PreviewHolder::on_scroll_event(GdkEventScroll *event) { // Scroll horizontally by page on mouse wheel -#if WITH_GTKMM_3_0 - Glib::RefPtr adj = dynamic_cast(_scroller)->get_hadjustment(); -#else - Gtk::Adjustment *adj = dynamic_cast(_scroller)->get_hadjustment(); -#endif + auto adj = dynamic_cast(_scroller)->get_hadjustment(); if (!adj) { return FALSE; @@ -141,7 +119,6 @@ void PreviewHolder::addPreview( Previewable* preview ) Gtk::Widget* label = Gtk::manage(preview->getPreview(PREVIEW_STYLE_BLURB, VIEW_TYPE_LIST, _baseSize, _ratio, _border)); Gtk::Widget* thing = Gtk::manage(preview->getPreview(PREVIEW_STYLE_PREVIEW, VIEW_TYPE_LIST, _baseSize, _ratio, _border)); -#if WITH_GTKMM_3_0 thing->set_hexpand(); thing->set_vexpand(); _insides->attach(*thing, 0, i, 1, 1); @@ -149,10 +126,6 @@ void PreviewHolder::addPreview( Previewable* preview ) label->set_hexpand(); label->set_valign(Gtk::ALIGN_CENTER); _insides->attach(*label, 1, i, 1, 1); -#else - _insides->attach( *thing, 0, 1, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); - _insides->attach( *label, 1, 2, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK ); -#endif } break; @@ -168,44 +141,25 @@ void PreviewHolder::addPreview( Previewable* preview ) int col = i % width; int row = i / width; -#if !WITH_GTKMM_3_0 - // If the existing grid isn't wide enough, we need to resize - // it and re-pack the existing widgets - if ( _insides && width > (int)_insides->property_n_columns() ) { - _insides->resize( height, width ); -#endif - std::vectorkids = _insides->get_children(); - int childCount = (int)kids.size(); - // g_message(" %3d resize from %d to %d (r:%d, c:%d) with %d children", i, oldWidth, width, row, col, childCount ); - - // Loop through the existing widgets and move them to new location - for ( int j = 1; j < childCount; j++ ) { - Gtk::Widget* target = kids[childCount - (j + 1)]; - int col2 = j % width; - int row2 = j / width; - Glib::RefPtr handle(target); - _insides->remove( *target ); - -#if WITH_GTKMM_3_0 - target->set_hexpand(); - target->set_vexpand(); - _insides->attach( *target, col2, row2, 1, 1); -#else - _insides->attach( *target, col2, col2+1, row2, row2+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); -#endif - } -#if WITH_GTKMM_3_0 - thing->set_hexpand(); - thing->set_vexpand(); - _insides->attach(*thing, col, row, 1, 1); -#else - } else if ( col == 0 ) { - // we just started a new row - _insides->resize( row + 1, width ); - } - - _insides->attach( *thing, col, col+1, row, row+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); -#endif + auto kids = _insides->get_children(); + int childCount = (int)kids.size(); + // g_message(" %3d resize from %d to %d (r:%d, c:%d) with %d children", i, oldWidth, width, row, col, childCount ); + + // Loop through the existing widgets and move them to new location + for ( int j = 1; j < childCount; j++ ) { + auto target = kids[childCount - (j + 1)]; + int col2 = j % width; + int row2 = j / width; + Glib::RefPtr handle(target); + _insides->remove( *target ); + + target->set_hexpand(); + target->set_vexpand(); + _insides->attach( *target, col2, row2, 1, 1); + } + thing->set_hexpand(); + thing->set_vexpand(); + _insides->attach(*thing, col, row, 1, 1); } } @@ -416,21 +370,11 @@ void PreviewHolder::rebuildUI() switch(_view) { case VIEW_TYPE_LIST: { - -#if WITH_GTKMM_3_0 _insides = Gtk::manage(new Gtk::Grid()); _insides->set_column_spacing(8); -#else - _insides = Gtk::manage(new Gtk::Table( 1, 2 )); - _insides->set_col_spacings( 8 ); -#endif if (_border == BORDER_WIDE) { -#if WITH_GTKMM_3_0 _insides->set_row_spacing(1); -#else - _insides->set_row_spacings( 1 ); -#endif } for ( unsigned int i = 0; i < items.size(); i++ ) { @@ -439,7 +383,6 @@ void PreviewHolder::rebuildUI() Gtk::Widget* thing = Gtk::manage(items[i]->getPreview(PREVIEW_STYLE_PREVIEW, _view, _baseSize, _ratio, _border)); -#if WITH_GTKMM_3_0 thing->set_hexpand(); thing->set_vexpand(); _insides->attach(*thing, 0, i, 1, 1); @@ -447,10 +390,6 @@ void PreviewHolder::rebuildUI() label->set_hexpand(); label->set_valign(Gtk::ALIGN_CENTER); _insides->attach(*label, 1, i, 1, 1); -#else - _insides->attach( *thing, 0, 1, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); - _insides->attach( *label, 1, 2, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK ); -#endif } _scroller->add( *_insides ); @@ -473,28 +412,16 @@ void PreviewHolder::rebuildUI() if ( !_insides ) { calcGridSize( thing, items.size(), width, height ); -#if WITH_GTKMM_3_0 _insides = Gtk::manage(new Gtk::Grid()); if (_border == BORDER_WIDE) { _insides->set_column_spacing(1); _insides->set_row_spacing(1); } -#else - _insides = Gtk::manage(new Gtk::Table( height, width )); - if (_border == BORDER_WIDE) { - _insides->set_col_spacings( 1 ); - _insides->set_row_spacings( 1 ); - } -#endif } -#if WITH_GTKMM_3_0 thing->set_hexpand(); thing->set_vexpand(); _insides->attach( *thing, col, row, 1, 1); -#else - _insides->attach( *thing, col, col+1, row, row+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); -#endif if ( ++col >= width ) { col = 0; @@ -502,11 +429,7 @@ void PreviewHolder::rebuildUI() } } if ( !_insides ) { -#if WITH_GTKMM_3_0 _insides = Gtk::manage(new Gtk::Grid()); -#else - _insides = Gtk::manage(new Gtk::Table( 1, 2 )); -#endif } _scroller->add( *_insides ); diff --git a/src/ui/previewholder.h b/src/ui/previewholder.h index 28c0fd865..d370e8fc8 100644 --- a/src/ui/previewholder.h +++ b/src/ui/previewholder.h @@ -21,11 +21,7 @@ #include namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } #include "previewfillable.h" @@ -68,12 +64,7 @@ private: std::vector items; Gtk::Bin *_scroller; - -#if WITH_GTKMM_3_0 Gtk::Grid *_insides; -#else - Gtk::Table *_insides; -#endif int _prefCols; bool _updatesFrozen; diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 72ba499de..17debb59c 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -149,16 +149,10 @@ void ToolBase::sp_event_context_set_cursor(GdkCursorType cursor_type) { GdkDisplay *display = gdk_display_get_default(); GdkCursor *cursor = gdk_cursor_new_for_display(display, cursor_type); -#if WITH_GTKMM_3_0 if (cursor) { gdk_window_set_cursor (gtk_widget_get_window (w), cursor); g_object_unref (cursor); } -#else - gdk_window_set_cursor (gtk_widget_get_window (w), cursor); - gdk_cursor_unref (cursor); -#endif - } /** diff --git a/src/widgets/dash-selector.cpp b/src/widgets/dash-selector.cpp index 9d591d33d..7c6c22ba3 100644 --- a/src/widgets/dash-selector.cpp +++ b/src/widgets/dash-selector.cpp @@ -61,18 +61,9 @@ SPDashSelector::SPDashSelector() dash_combo.signal_changed().connect( sigc::mem_fun(*this, &SPDashSelector::on_selection) ); this->pack_start(dash_combo, false, false, 0); - -#if WITH_GTKMM_3_0 offset = Gtk::Adjustment::create(0.0, 0.0, 10.0, 0.1, 1.0, 0.0); -#else - offset = new Gtk::Adjustment(0.0, 0.0, 10.0, 0.1, 1.0, 0.0); -#endif offset->signal_value_changed().connect(sigc::mem_fun(*this, &SPDashSelector::offset_value_changed)); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton(offset, 0.1, 2); -#else - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton(*offset, 0.1, 2); -#endif + auto sb = new Inkscape::UI::Widget::SpinButton(offset, 0.1, 2); sb->set_tooltip_text(_("Pattern offset")); sp_dialog_defocus_on_enter_cpp(sb); sb->show(); @@ -99,9 +90,6 @@ SPDashSelector::SPDashSelector() SPDashSelector::~SPDashSelector() { // FIXME: for some reason this doesn't get called; does the call to manage() in // sp_stroke_style_line_widget_new() not processed correctly? -#if !WITH_GTKMM_3_0 - delete offset; -#endif } void SPDashSelector::prepareImageRenderer( Gtk::TreeModel::const_iterator const &row ) { diff --git a/src/widgets/dash-selector.h b/src/widgets/dash-selector.h index ec5a1cbd5..f176acf04 100644 --- a/src/widgets/dash-selector.h +++ b/src/widgets/dash-selector.h @@ -85,12 +85,7 @@ private: Glib::RefPtr dash_store; Gtk::ComboBox dash_combo; Gtk::CellRendererPixbuf image_renderer; - -#if WITH_GTKMM_3_0 Glib::RefPtr offset; -#else - Gtk::Adjustment *offset; -#endif static gchar const *const _prefs_path; int preview_width; diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index ef1f31751..8b035eb15 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -70,9 +70,7 @@ #include "widget-sizes.h" #include "verbs.h" -#if GTK_CHECK_VERSION(3,0,0) -# include -#endif +#include #include #include @@ -256,16 +254,11 @@ Geom::Point SPDesktopWidget::window_get_pointer() { gint x,y; - GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(canvas)); - -#if GTK_CHECK_VERSION(3,0,0) - GdkDisplay *display = gdk_window_get_display(window); - GdkDeviceManager *dm = gdk_display_get_device_manager(display); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto window = gtk_widget_get_window(GTK_WIDGET(canvas)); + auto display = gdk_window_get_display(window); + auto dm = gdk_display_get_device_manager(display); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_window_get_device_position(window, device, &x, &y, NULL); -#else - gdk_window_get_pointer(window, &x, &y, NULL); -#endif return Geom::Point(x,y); } @@ -344,21 +337,11 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) dtw->_interaction_disabled_counter = 0; /* Main table */ -#if GTK_CHECK_VERSION(3,0,0) dtw->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name(dtw->vbox, "DesktopMainTable"); -#else - dtw->vbox = gtk_vbox_new (FALSE, 0); -#endif gtk_container_add( GTK_CONTAINER(dtw), GTK_WIDGET(dtw->vbox) ); - -#if GTK_CHECK_VERSION(3,0,0) dtw->statusbar = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_set_name(dtw->statusbar, "DesktopStatusBar"); -#else - dtw->statusbar = gtk_hbox_new (FALSE, 0); -#endif - //gtk_widget_set_usize (dtw->statusbar, -1, BOTTOM_BAR_HEIGHT); gtk_box_pack_end (GTK_BOX (dtw->vbox), dtw->statusbar, FALSE, TRUE, 0); { @@ -366,19 +349,12 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) dtw->panels = new SwatchesPanel("/embedded/swatches" /*false*/); dtw->panels->setOrientation(SP_ANCHOR_SOUTH); -#if GTK_CHECK_VERSION(3,0,0) dtw->panels->set_vexpand(false); -#endif - gtk_box_pack_end( GTK_BOX( dtw->vbox ), GTK_WIDGET(dtw->panels->gobj()), FALSE, TRUE, 0 ); } -#if GTK_CHECK_VERSION(3,0,0) dtw->hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_set_name(dtw->hbox, "DesktopHbox"); -#else - dtw->hbox = gtk_hbox_new(FALSE, 0); -#endif gtk_box_pack_end( GTK_BOX (dtw->vbox), dtw->hbox, TRUE, TRUE, 0 ); gtk_widget_show(dtw->hbox); @@ -402,14 +378,12 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) NULL, INKSCAPE_ICON("object-locked"), _("Toggle lock of all guides in the document")); -#if GTK_CHECK_VERSION(3,0,0) - Glib::RefPtr guides_lock_style_provider = Gtk::CssProvider::create(); + auto guides_lock_style_provider = Gtk::CssProvider::create(); guides_lock_style_provider->load_from_data("GtkWidget { padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 0; }"); - Gtk::Widget * wnd = Glib::wrap(dtw->guides_lock); + auto wnd = Glib::wrap(dtw->guides_lock); wnd->set_name("LockGuides"); - Glib::RefPtr context = wnd->get_style_context(); + auto context = wnd->get_style_context(); context->add_provider(guides_lock_style_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); -#endif /* Horizontal ruler */ GtkWidget *eventbox = gtk_event_box_new (); @@ -424,29 +398,13 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) g_signal_connect (G_OBJECT (eventbox), "button_release_event", G_CALLBACK (sp_dt_hruler_event), dtw); g_signal_connect (G_OBJECT (eventbox), "motion_notify_event", G_CALLBACK (sp_dt_hruler_event), dtw); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *tbl_wrapper = gtk_grid_new(); // Is this widget really needed? + auto tbl_wrapper = gtk_grid_new(); // Is this widget really needed? gtk_widget_set_name(tbl_wrapper, "CanvasTableWrapper"); dtw->canvas_tbl = gtk_grid_new(); gtk_widget_set_name(dtw->canvas_tbl, "CanvasTable"); gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), dtw->guides_lock, 0, 0, 1, 1); gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), eventbox, 1, 0, 1, 1); -#else - GtkWidget *tbl_wrapper = gtk_table_new(2, 3, FALSE); - dtw->canvas_tbl = gtk_table_new(3, 3, FALSE); - - gtk_table_attach(GTK_TABLE(dtw->canvas_tbl), - dtw->guides_lock, - 0, 1, 0, 1, - GTK_FILL, GTK_FILL, - 0, 0); - gtk_table_attach(GTK_TABLE(dtw->canvas_tbl), - eventbox, - 1, 2, 0, 1, - GTK_FILL, GTK_FILL, - 0, 0); -#endif g_signal_connect (G_OBJECT (dtw->guides_lock), "toggled", G_CALLBACK (sp_update_guides_lock), dtw); gtk_box_pack_start( GTK_BOX(dtw->hbox), tbl_wrapper, TRUE, TRUE, 1 ); @@ -460,16 +418,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) sp_ruler_set_unit (SP_RULER (dtw->vruler), pt); gtk_widget_set_tooltip_text (dtw->vruler_box, gettext(pt->name_plural.c_str())); gtk_container_add (GTK_CONTAINER (eventbox), GTK_WIDGET (dtw->vruler)); - -#if GTK_CHECK_VERSION(3,0,0) gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), eventbox, 0, 1, 1, 1); -#else - gtk_table_attach(GTK_TABLE (dtw->canvas_tbl), - eventbox, - 0, 1, 1, 2, - GTK_FILL, GTK_FILL, - 0, 0); -#endif g_signal_connect (G_OBJECT (eventbox), "button_press_event", G_CALLBACK (sp_dt_vruler_event), dtw); g_signal_connect (G_OBJECT (eventbox), "button_release_event", G_CALLBACK (sp_dt_vruler_event), dtw); @@ -477,19 +426,10 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) // Horizontal scrollbar dtw->hadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, -4000.0, 4000.0, 10.0, 100.0, 4.0)); - -#if GTK_CHECK_VERSION(3,0,0) dtw->hscrollbar = gtk_scrollbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_ADJUSTMENT (dtw->hadj)); gtk_widget_set_name(dtw->hscrollbar, "HorizontalScrollbar"); gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), dtw->hscrollbar, 1, 2, 1, 1); dtw->vscrollbar_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); -#else - dtw->hscrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (dtw->hadj)); - gtk_table_attach(GTK_TABLE (dtw->canvas_tbl), dtw->hscrollbar, 1, 2, 2, 3, - GTK_FILL, GTK_SHRINK, - 0, 0); - dtw->vscrollbar_box = gtk_vbox_new (FALSE, 0); -#endif // Sticky zoom button dtw->sticky_zoom = sp_button_new_from_data ( Inkscape::ICON_SIZE_DECORATION, @@ -504,23 +444,10 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) // Vertical scrollbar dtw->vadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, -4000.0, 4000.0, 10.0, 100.0, 4.0)); - -#if GTK_CHECK_VERSION(3,0,0) dtw->vscrollbar = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, GTK_ADJUSTMENT(dtw->vadj)); gtk_widget_set_name(dtw->vscrollbar, "VerticalScrollbar"); -#else - dtw->vscrollbar = gtk_vscrollbar_new (GTK_ADJUSTMENT (dtw->vadj)); -#endif - gtk_box_pack_start (GTK_BOX (dtw->vscrollbar_box), dtw->vscrollbar, TRUE, TRUE, 0); - -#if GTK_CHECK_VERSION(3,0,0) gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), dtw->vscrollbar_box, 2, 0, 1, 2); -#else - gtk_table_attach(GTK_TABLE(dtw->canvas_tbl), dtw->vscrollbar_box, 2, 3, 0, 2, - GTK_SHRINK, GTK_FILL, - 0, 0); -#endif gchar const* tip = ""; Inkscape::Verb* verb = Inkscape::Verb::get( SP_VERB_VIEW_CMS_TOGGLE ); @@ -554,15 +481,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) cms_adjust_set_sensitive(dtw, FALSE); #endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) -#if GTK_CHECK_VERSION(3,0,0) gtk_grid_attach( GTK_GRID(dtw->canvas_tbl), dtw->cms_adjust, 2, 2, 1, 1); -#else - gtk_table_attach( GTK_TABLE(dtw->canvas_tbl), dtw->cms_adjust, 2, 3, 2, 3, - (GtkAttachOptions)(GTK_SHRINK), - (GtkAttachOptions)(GTK_SHRINK), - 0, 0); -#endif - { if (!watcher) { watcher = new CMSPrefWatcher(); @@ -579,10 +498,8 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) sp_ruler_add_track_widget (SP_RULER(dtw->hruler), GTK_WIDGET(dtw->canvas)); sp_ruler_add_track_widget (SP_RULER(dtw->vruler), GTK_WIDGET(dtw->canvas)); - -#if GTK_CHECK_VERSION(3,0,0) - GtkCssProvider *css_provider = gtk_css_provider_new(); - GtkStyleContext *style_context = gtk_widget_get_style_context(GTK_WIDGET(dtw->canvas)); + auto css_provider = gtk_css_provider_new(); + auto style_context = gtk_widget_get_style_context(GTK_WIDGET(dtw->canvas)); gtk_css_provider_load_from_data(css_provider, "SPCanvas {\n" @@ -593,21 +510,11 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) gtk_style_context_add_provider(style_context, GTK_STYLE_PROVIDER(css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); -#else - GtkStyle *style = gtk_style_copy(gtk_widget_get_style(GTK_WIDGET(dtw->canvas))); - style->bg[GTK_STATE_NORMAL] = style->white; - gtk_widget_set_style (GTK_WIDGET (dtw->canvas), style); -#endif - g_signal_connect (G_OBJECT (dtw->canvas), "event", G_CALLBACK (sp_desktop_widget_event), dtw); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(GTK_WIDGET(dtw->canvas), TRUE); gtk_widget_set_vexpand(GTK_WIDGET(dtw->canvas), TRUE); gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), GTK_WIDGET(dtw->canvas), 1, 1, 1, 1); -#else - gtk_table_attach (GTK_TABLE (dtw->canvas_tbl), GTK_WIDGET(dtw->canvas), 1, 2, 1, 2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 0, 0); -#endif /* Dock */ bool create_dock = @@ -616,12 +523,8 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) if (create_dock) { dtw->dock = new Inkscape::UI::Widget::Dock(); -#if WITH_GTKMM_3_0 - Gtk::Paned *paned = new Gtk::Paned(); + auto paned = new Gtk::Paned(); paned->set_name("Canvas_and_Dock"); -#else - Gtk::HPaned *paned = new Gtk::HPaned(); -#endif paned->pack1(*Glib::wrap(dtw->canvas_tbl)); paned->pack2(dtw->dock->getWidget(), Gtk::FILL); @@ -632,24 +535,13 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) paned_class->cycle_handle_focus = NULL; } -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(GTK_WIDGET(paned->gobj()), TRUE); gtk_widget_set_vexpand(GTK_WIDGET(paned->gobj()), TRUE); gtk_grid_attach(GTK_GRID(tbl_wrapper), GTK_WIDGET (paned->gobj()), 1, 1, 1, 1); -#else - gtk_table_attach (GTK_TABLE (tbl_wrapper), GTK_WIDGET (paned->gobj()), 1, 2, 1, 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); -#endif - } else { -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(GTK_WIDGET(dtw->canvas_tbl), TRUE); gtk_widget_set_vexpand(GTK_WIDGET(dtw->canvas_tbl), TRUE); gtk_grid_attach(GTK_GRID(tbl_wrapper), GTK_WIDGET (dtw->canvas_tbl), 1, 1, 1, 1); -#else - gtk_table_attach (GTK_TABLE (tbl_wrapper), GTK_WIDGET (dtw->canvas_tbl), 1, 2, 1, 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); -#endif } // connect scrollbar signals @@ -666,11 +558,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) // Separator gtk_box_pack_start(GTK_BOX(dtw->statusbar), -#if GTK_CHECK_VERSION(3,0,0) gtk_separator_new(GTK_ORIENTATION_VERTICAL), -#else - gtk_vseparator_new(), -#endif FALSE, FALSE, 0); // Layer Selector @@ -689,12 +577,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) gtk_label_set_lines (GTK_LABEL(dtw->select_status), 2); #endif -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(dtw->select_status, GTK_ALIGN_START); -#else - gtk_misc_set_alignment (GTK_MISC (dtw->select_status), 0.0, 0.5); -#endif - gtk_widget_set_size_request (dtw->select_status, 1, -1); // Display the initial welcome message in the statusbar @@ -720,65 +603,36 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) dtw->zoom_update = g_signal_connect (G_OBJECT (dtw->zoom_status), "populate_popup", G_CALLBACK (sp_dtw_zoom_populate_popup), dtw); // Cursor coordinates -#if GTK_CHECK_VERSION(3,0,0) dtw->coord_status = gtk_grid_new(); gtk_widget_set_name(dtw->coord_status, "CoordinateAndZStatus"); gtk_grid_set_row_spacing(GTK_GRID(dtw->coord_status), 0); gtk_grid_set_column_spacing(GTK_GRID(dtw->coord_status), 2); - GtkWidget* sep = gtk_separator_new(GTK_ORIENTATION_VERTICAL); + auto sep = gtk_separator_new(GTK_ORIENTATION_VERTICAL); gtk_widget_set_name(sep, "CoordinateSeparator"); gtk_grid_attach(GTK_GRID(dtw->coord_status), GTK_WIDGET(sep), 0, 0, 1, 2); -#else - dtw->coord_status = gtk_table_new(5, 2, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(dtw->coord_status), 0); - gtk_table_set_col_spacings(GTK_TABLE(dtw->coord_status), 2); - gtk_table_attach(GTK_TABLE(dtw->coord_status), - gtk_vseparator_new(), - 0, 1, 0, 2, - GTK_FILL, GTK_FILL, 0, 0); -#endif gtk_widget_set_tooltip_text (dtw->coord_status, _("Cursor coordinates")); - GtkWidget *label_x = gtk_label_new(_("X:")); - GtkWidget *label_y = gtk_label_new(_("Y:")); - -#if GTK_CHECK_VERSION(3,0,0) + auto label_x = gtk_label_new(_("X:")); + auto label_y = gtk_label_new(_("Y:")); gtk_widget_set_halign(label_x, GTK_ALIGN_START); gtk_widget_set_halign(label_y, GTK_ALIGN_START); gtk_grid_attach(GTK_GRID(dtw->coord_status), label_x, 1, 0, 1, 1); gtk_grid_attach(GTK_GRID(dtw->coord_status), label_y, 1, 1, 1, 1); -#else - gtk_misc_set_alignment (GTK_MISC(label_x), 0.0, 0.5); - gtk_misc_set_alignment (GTK_MISC(label_y), 0.0, 0.5); - gtk_table_attach(GTK_TABLE(dtw->coord_status), label_x, 1,2, 0,1, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(dtw->coord_status), label_y, 1,2, 1,2, GTK_FILL, GTK_FILL, 0, 0); -#endif - dtw->coord_status_x = gtk_label_new(NULL); dtw->coord_status_y = gtk_label_new(NULL); gtk_label_set_markup( GTK_LABEL(dtw->coord_status_x), " 0.00 " ); gtk_label_set_markup( GTK_LABEL(dtw->coord_status_y), " 0.00 " ); - GtkWidget* label_z = gtk_label_new(_("Z:")); + auto label_z = gtk_label_new(_("Z:")); gtk_widget_set_name(label_z, "ZLabel"); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(dtw->coord_status_x, GTK_ALIGN_END); gtk_widget_set_halign(dtw->coord_status_y, GTK_ALIGN_END); gtk_grid_attach(GTK_GRID(dtw->coord_status), dtw->coord_status_x, 2, 0, 1, 1); gtk_grid_attach(GTK_GRID(dtw->coord_status), dtw->coord_status_y, 2, 1, 1, 1); gtk_grid_attach(GTK_GRID(dtw->coord_status), label_z, 3, 0, 1, 2); gtk_grid_attach(GTK_GRID(dtw->coord_status), dtw->zoom_status, 4, 0, 1, 2); -#else - gtk_misc_set_alignment (GTK_MISC(dtw->coord_status_x), 1.0, 0.5); - gtk_misc_set_alignment (GTK_MISC(dtw->coord_status_y), 1.0, 0.5); - gtk_table_attach(GTK_TABLE(dtw->coord_status), dtw->coord_status_x, 2,3, 0,1, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(dtw->coord_status), dtw->coord_status_y, 2,3, 1,2, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(dtw->coord_status), label_z, 3,4, 0,2, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(dtw->coord_status), dtw->zoom_status, 4,5, 0,2, GTK_FILL, GTK_FILL, 0, 0); -#endif sp_set_font_size_smaller (dtw->coord_status); diff --git a/src/widgets/sp-attribute-widget.cpp b/src/widgets/sp-attribute-widget.cpp index fb7eb1420..2e782cf16 100644 --- a/src/widgets/sp-attribute-widget.cpp +++ b/src/widgets/sp-attribute-widget.cpp @@ -17,12 +17,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include #include @@ -156,11 +151,7 @@ void SPAttributeTable::set_object(SPObject *object, release_connection = object->connectRelease (sigc::bind<1>(sigc::ptr_fun(&sp_attribute_table_object_release), this)); // Create table -#if WITH_GTKMM_3_0 table = new Gtk::Grid(); -#else - table = new Gtk::Table(attributes.size(), 2, false); -#endif if (!(parent == NULL)) gtk_container_add(GTK_CONTAINER(parent), (GtkWidget*)table->gobj()); @@ -171,27 +162,17 @@ void SPAttributeTable::set_object(SPObject *object, Gtk::Label *ll = new Gtk::Label (_(labels[i].c_str())); ll->show(); ll->set_alignment (1.0, 0.5); - -#if WITH_GTKMM_3_0 ll->set_vexpand(); ll->set_margin_left(XPAD); ll->set_margin_right(XPAD); ll->set_margin_top(XPAD); ll->set_margin_bottom(XPAD); table->attach(*ll, 0, i, 1, 1); -#else - table->attach (*ll, 0, 1, i, i + 1, - Gtk::FILL, - (Gtk::EXPAND | Gtk::FILL), - XPAD, YPAD ); -#endif Gtk::Entry *ee = new Gtk::Entry(); ee->show(); const gchar *val = object->getRepr()->attribute(attributes[i].c_str()); ee->set_text (val ? val : (const gchar *) ""); - -#if WITH_GTKMM_3_0 ee->set_hexpand(); ee->set_vexpand(); ee->set_margin_left(XPAD); @@ -199,12 +180,6 @@ void SPAttributeTable::set_object(SPObject *object, ee->set_margin_top(XPAD); ee->set_margin_bottom(XPAD); table->attach(*ee, 1, i, 1, 1); -#else - table->attach (*ee, 1, 2, i, i + 1, - (Gtk::EXPAND | Gtk::FILL), - (Gtk::EXPAND | Gtk::FILL), - XPAD, YPAD ); -#endif _entries.push_back(ee); g_signal_connect ( ee->gobj(), "changed", diff --git a/src/widgets/sp-attribute-widget.h b/src/widgets/sp-attribute-widget.h index d9b972201..161bb706a 100644 --- a/src/widgets/sp-attribute-widget.h +++ b/src/widgets/sp-attribute-widget.h @@ -25,12 +25,7 @@ namespace Gtk { class Entry; - -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } namespace Inkscape { @@ -138,11 +133,7 @@ private: /** * Container widget for the dynamically created child widgets (labels and entry boxes). */ -#if WITH_GTKMM_3_0 Gtk::Grid *table; -#else - Gtk::Table *table; -#endif /** * List of attributes. diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index 84a6e77ad..990ec8d35 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -155,17 +155,9 @@ StrokeStyle::StrokeStyle() : Gtk::HBox *f = new Gtk::HBox(false, 0); f->show(); add(*f); - -#if WITH_GTKMM_3_0 table = new Gtk::Grid(); table->set_border_width(4); table->set_row_spacing(4); -#else - table = new Gtk::Table(3, 6, false); - table->set_border_width(4); - table->set_row_spacings(4); -#endif - table->show(); f->add(*table); @@ -181,13 +173,7 @@ StrokeStyle::StrokeStyle() : // stroke_width_set_unit will be removed (because ScalarUnit takes care of conversions itself), and // with it, the two remaining calls of stroke_average_width, allowing us to get rid of that // function in desktop-style. - -#if WITH_GTKMM_3_0 widthAdj = new Glib::RefPtr(Gtk::Adjustment::create(1.0, 0.0, 1000.0, 0.1, 10.0, 0.0)); -#else - widthAdj = new Gtk::Adjustment(1.0, 0.0, 1000.0, 0.1, 10.0, 0.0); -#endif - widthSpin = new Inkscape::UI::Widget::SpinButton(*widthAdj, 0.1, 3); widthSpin->set_tooltip_text(_("Stroke width")); widthSpin->show(); @@ -213,12 +199,7 @@ StrokeStyle::StrokeStyle() : us->show(); hb->pack_start(*us, FALSE, FALSE, 0); - -#if WITH_GTKMM_3_0 (*widthAdj)->signal_value_changed().connect(sigc::mem_fun(*this, &StrokeStyle::widthChangedCB)); -#else - widthAdj->signal_value_changed().connect(sigc::mem_fun(*this, &StrokeStyle::widthChangedCB)); -#endif i++; /* Dash */ @@ -230,16 +211,10 @@ StrokeStyle::StrokeStyle() : dashSelector = Gtk::manage(new SPDashSelector); dashSelector->show(); - -#if WITH_GTKMM_3_0 dashSelector->set_hexpand(); dashSelector->set_halign(Gtk::ALIGN_FILL); dashSelector->set_valign(Gtk::ALIGN_CENTER); table->attach(*dashSelector, 1, i, 3, 1); -#else - table->attach(*dashSelector, 1, 4, i, i+1, (Gtk::EXPAND | Gtk::FILL), static_cast(0), 0, 0); -#endif - dashSelector->changed_signal.connect(sigc::mem_fun(*this, &StrokeStyle::lineDashChangedCB)); i++; @@ -323,28 +298,14 @@ StrokeStyle::StrokeStyle() : // miter limit is to cut off such spikes (i.e. convert them into bevels) // when they become too long. //spw_label(t, _("Miter _limit:"), 0, i); - -#if WITH_GTKMM_3_0 miterLimitAdj = new Glib::RefPtr(Gtk::Adjustment::create(4.0, 0.0, 100.0, 0.1, 10.0, 0.0)); miterLimitSpin = new Inkscape::UI::Widget::SpinButton(*miterLimitAdj, 0.1, 2); -#else - miterLimitAdj = new Gtk::Adjustment(4.0, 0.0, 100.0, 0.1, 10.0, 0.0); - miterLimitSpin = new Inkscape::UI::Widget::SpinButton(*miterLimitAdj, 0.1, 2); -#endif - miterLimitSpin->set_tooltip_text(_("Maximum length of the miter (in units of stroke width)")); miterLimitSpin->show(); sp_dialog_defocus_on_enter_cpp(miterLimitSpin); hb->pack_start(*miterLimitSpin, false, false, 0); - -#if WITH_GTKMM_3_0 (*miterLimitAdj)->signal_value_changed().connect(sigc::mem_fun(*this, &StrokeStyle::miterLimitChangedCB)); - -#else - miterLimitAdj->signal_value_changed().connect(sigc::mem_fun(*this, &StrokeStyle::miterLimitChangedCB)); -#endif - i++; /* Cap type */ @@ -927,17 +888,9 @@ StrokeStyle::updateLine() if (unit->type == Inkscape::Util::UNIT_TYPE_LINEAR) { double avgwidth = Inkscape::Util::Quantity::convert(query.stroke_width.computed, "px", unit); -#if WITH_GTKMM_3_0 (*widthAdj)->set_value(avgwidth); -#else - widthAdj->set_value(avgwidth); -#endif } else { -#if WITH_GTKMM_3_0 (*widthAdj)->set_value(100); -#else - widthAdj->set_value(100); -#endif } // if none of the selected objects has a stroke, than quite some controls should be disabled @@ -958,11 +911,7 @@ StrokeStyle::updateLine() } if (result_ml != QUERY_STYLE_NOTHING) -#if WITH_GTKMM_3_0 (*miterLimitAdj)->set_value(query.stroke_miterlimit.value); // TODO: reflect averagedness? -#else - miterLimitAdj->set_value(query.stroke_miterlimit.value); // TODO: reflect averagedness? -#endif if (result_join != QUERY_STYLE_MULTIPLE_DIFFERENT && result_join != QUERY_STYLE_NOTHING ) { @@ -1050,13 +999,8 @@ StrokeStyle::scaleLine() SPCSSAttr *css = sp_repr_css_attr_new(); if (!items.empty()) { -#if WITH_GTKMM_3_0 double width_typed = (*widthAdj)->get_value(); double const miterlimit = (*miterLimitAdj)->get_value(); -#else - double width_typed = widthAdj->get_value(); - double const miterlimit = miterLimitAdj->get_value(); -#endif Inkscape::Util::Unit const *const unit = unitSelector->getUnit(); @@ -1096,11 +1040,7 @@ StrokeStyle::scaleLine() if (unit->type != Inkscape::Util::UNIT_TYPE_LINEAR) { // reset to 100 percent -#if WITH_GTKMM_3_0 (*widthAdj)->set_value(100.0); -#else - widthAdj->set_value(100.0); -#endif } } diff --git a/src/widgets/stroke-style.h b/src/widgets/stroke-style.h index d83067a4a..76582602d 100644 --- a/src/widgets/stroke-style.h +++ b/src/widgets/stroke-style.h @@ -23,12 +23,7 @@ #include "widgets/dash-selector.h" #include - -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include @@ -189,15 +184,9 @@ private: MarkerComboBox *startMarkerCombo; MarkerComboBox *midMarkerCombo; MarkerComboBox *endMarkerCombo; -#if WITH_GTKMM_3_0 Gtk::Grid *table; Glib::RefPtr *widthAdj; Glib::RefPtr *miterLimitAdj; -#else - Gtk::Table *table; - Gtk::Adjustment *widthAdj; - Gtk::Adjustment *miterLimitAdj; -#endif Inkscape::UI::Widget::SpinButton *miterLimitSpin; Inkscape::UI::Widget::SpinButton *widthSpin; Inkscape::UI::Widget::UnitMenu *unitSelector; diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 8113c9619..caca0c267 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -1016,26 +1016,18 @@ static GtkWidget* toolboxNewCommon( GtkWidget* tb, BarId id, GtkPositionType /*h GtkWidget *ToolboxFactory::createToolToolbox() { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name(tb, "ToolToolbox"); gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); -#else - GtkWidget *tb = gtk_vbox_new(FALSE, 0); -#endif return toolboxNewCommon( tb, BAR_TOOL, GTK_POS_TOP ); } GtkWidget *ToolboxFactory::createAuxToolbox() { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name(tb, "AuxToolbox"); gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); -#else - GtkWidget *tb = gtk_vbox_new(FALSE, 0); -#endif return toolboxNewCommon( tb, BAR_AUX, GTK_POS_LEFT ); } @@ -1046,38 +1038,26 @@ GtkWidget *ToolboxFactory::createAuxToolbox() GtkWidget *ToolboxFactory::createCommandsToolbox() { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name(tb, "CommandsToolbox"); gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); -#else - GtkWidget *tb = gtk_vbox_new(FALSE, 0); -#endif return toolboxNewCommon( tb, BAR_COMMANDS, GTK_POS_LEFT ); } GtkWidget *ToolboxFactory::createSnapToolbox() { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name(tb, "SnapToolbox"); gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); -#else - GtkWidget *tb = gtk_vbox_new(FALSE, 0); -#endif return toolboxNewCommon( tb, BAR_SNAP, GTK_POS_LEFT ); } static GtkWidget* createCustomSlider( GtkAdjustment *adjustment, gdouble climbRate, guint digits, Inkscape::UI::Widget::UnitTracker *unit_tracker) { -#if WITH_GTKMM_3_0 - Glib::RefPtr adj = Glib::wrap(adjustment, true); - Inkscape::UI::Widget::SpinButton *inkSpinner = new Inkscape::UI::Widget::SpinButton(adj, climbRate, digits); -#else - Inkscape::UI::Widget::SpinButton *inkSpinner = new Inkscape::UI::Widget::SpinButton(*Glib::wrap(adjustment, true), climbRate, digits); -#endif + auto adj = Glib::wrap(adjustment, true); + auto inkSpinner = new Inkscape::UI::Widget::SpinButton(adj, climbRate, digits); inkSpinner->addUnitTracker(unit_tracker); inkSpinner = Gtk::manage( inkSpinner ); GtkWidget *widget = GTK_WIDGET( inkSpinner->gobj() ); @@ -1439,17 +1419,10 @@ void setup_aux_toolbox(GtkWidget *toolbox, SPDesktop *desktop) if ( aux_toolboxes[i].prep_func ) { // converted to GtkActions and UIManager - GtkWidget* kludge = dataHolders[aux_toolboxes[i].type_name]; - -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget* holder = gtk_grid_new(); + auto kludge = dataHolders[aux_toolboxes[i].type_name]; + auto holder = gtk_grid_new(); gtk_widget_set_name( holder, "ToolbarHolder" ); gtk_grid_attach( GTK_GRID(holder), kludge, 2, 0, 1, 1); -#else - GtkWidget* holder = gtk_table_new( 1, 3, FALSE ); - gtk_table_attach( GTK_TABLE(holder), kludge, 2, 3, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0 ); -#endif - gchar* tmp = g_strdup_printf( "/ui/%s", aux_toolboxes[i].ui_name ); GtkWidget* toolBar = gtk_ui_manager_get_widget( mgr, tmp ); g_free( tmp ); @@ -1461,30 +1434,20 @@ void setup_aux_toolbox(GtkWidget *toolbox, SPDesktop *desktop) Inkscape::IconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/small"); gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), static_cast(toolboxSize) ); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(toolBar, TRUE); gtk_grid_attach( GTK_GRID(holder), toolBar, 0, 0, 1, 1); -#else - gtk_table_attach( GTK_TABLE(holder), toolBar, 0, 1, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0 ); -#endif if ( aux_toolboxes[i].swatch_verb_id != SP_VERB_INVALID ) { Inkscape::UI::Widget::StyleSwatch *swatch = new Inkscape::UI::Widget::StyleSwatch( NULL, _(aux_toolboxes[i].swatch_tip) ); swatch->setDesktop( desktop ); swatch->setClickVerb( aux_toolboxes[i].swatch_verb_id ); swatch->setWatchedTool( aux_toolboxes[i].swatch_tool, true ); - GtkWidget *swatch_ = GTK_WIDGET( swatch->gobj() ); - -#if GTK_CHECK_VERSION(3,0,0) + auto swatch_ = GTK_WIDGET( swatch->gobj() ); gtk_widget_set_margin_left(swatch_, AUX_BETWEEN_BUTTON_GROUPS); gtk_widget_set_margin_right(swatch_, AUX_BETWEEN_BUTTON_GROUPS); gtk_widget_set_margin_top(swatch_, AUX_SPACING); gtk_widget_set_margin_bottom(swatch_, AUX_SPACING); gtk_grid_attach( GTK_GRID(holder), swatch_, 1, 0, 1, 1); -#else - gtk_table_attach( GTK_TABLE(holder), swatch_, 1, 2, 0, 1, (GtkAttachOptions)(GTK_SHRINK | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), AUX_BETWEEN_BUTTON_GROUPS, AUX_SPACING ); -#endif } if(i==0){ gtk_widget_show_all( holder ); -- cgit v1.2.3 From 49a7927ecf31ace696e9e5770e8d6543c356db7a Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 28 Jul 2016 19:15:34 +0100 Subject: Finish removing GTK+ 2 fallbacks (bzr r15023.2.8) --- src/desktop-events.cpp | 46 ++------- src/desktop.cpp | 4 - src/display/sp-canvas.cpp | 100 ++----------------- src/display/sp-canvas.h | 7 -- src/inkview.cpp | 16 +-- src/knot.cpp | 41 +------- src/live_effects/parameter/togglebutton.cpp | 6 +- src/main.cpp | 5 - src/svg-view-widget.cpp | 37 +------ src/svg-view.cpp | 4 - src/ui/dialog/export.cpp | 5 - src/ui/dialog/font-substitution.cpp | 6 +- src/ui/interface.cpp | 32 +----- src/ui/previewholder.cpp | 22 +---- src/ui/tools/dropper-tool.cpp | 8 -- src/ui/tools/select-tool.cpp | 8 -- src/ui/tools/tool-base.cpp | 16 --- src/ui/widget/dock-item.h | 4 - src/ui/widget/gimpcolorwheel.c | 137 ------------------------- src/ui/widget/selected-style.cpp | 8 -- src/ui/widget/spinbutton.h | 4 - src/widgets/button.cpp | 29 ------ src/widgets/eek-preview.cpp | 148 +--------------------------- src/widgets/ege-adjustment-action.cpp | 12 +-- src/widgets/ege-output-action.cpp | 6 +- src/widgets/ege-select-one-action.cpp | 32 +----- src/widgets/font-selector.cpp | 33 +------ src/widgets/gradient-image.cpp | 45 --------- src/widgets/gradient-selector.cpp | 13 +-- src/widgets/gradient-selector.h | 8 -- src/widgets/gradient-vector.cpp | 65 +----------- src/widgets/gradient-vector.h | 8 -- src/widgets/icon.cpp | 51 ---------- src/widgets/ink-action.cpp | 39 +------- src/widgets/ink-comboboxentry-action.cpp | 14 --- src/widgets/paint-selector.cpp | 54 ++-------- src/widgets/paint-selector.h | 8 -- src/widgets/select-toolbar.cpp | 6 +- src/widgets/sp-color-selector.cpp | 6 -- src/widgets/sp-color-selector.h | 9 -- src/widgets/sp-widget.cpp | 30 ------ src/widgets/sp-xmlview-attr-list.cpp | 19 +--- src/widgets/sp-xmlview-content.cpp | 19 +--- src/widgets/sp-xmlview-tree.cpp | 20 +--- src/widgets/spw-utilities.cpp | 69 +------------ src/widgets/spw-utilities.h | 12 --- src/widgets/text-toolbar.cpp | 19 +--- 47 files changed, 57 insertions(+), 1233 deletions(-) (limited to 'src') diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp index 9ad06e2ec..1932a9864 100644 --- a/src/desktop-events.cpp +++ b/src/desktop-events.cpp @@ -95,14 +95,9 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge gint width, height; -#if GTK_CHECK_VERSION(3,0,0) - GdkDevice *device = gdk_event_get_device(event); + auto device = gdk_event_get_device(event); gdk_window_get_device_position(window, device, &wx, &wy, NULL); gdk_window_get_geometry(window, NULL /*x*/, NULL /*y*/, &width, &height); -#else - gdk_window_get_pointer(window, &wx, &wy, NULL); - gdk_window_get_geometry(window, NULL /*x*/, NULL /*y*/, &width, &height, NULL/*depth*/); -#endif Geom::Point const event_win(wx, wy); @@ -158,7 +153,6 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge guide = sp_guideline_new(desktop->guides, NULL, event_dt, normal); sp_guideline_set_color(SP_GUIDELINE(guide), desktop->namedview->guidehicolor); -#if GTK_CHECK_VERSION(3,0,0) gdk_device_grab(device, gtk_widget_get_window(widget), GDK_OWNERSHIP_NONE, @@ -166,12 +160,6 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge (GdkEventMask)(GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ), NULL, event->button.time); -#else - gdk_pointer_grab(gtk_widget_get_window (widget), FALSE, - (GdkEventMask)(GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ), - NULL, NULL, - event->button.time); -#endif } break; case GDK_MOTION_NOTIFY: @@ -206,11 +194,7 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge if (clicked && event->button.button == 1) { sp_event_context_discard_delayed_snap_event(desktop->event_context); -#if GTK_CHECK_VERSION(3,0,0) gdk_device_ungrab(device, event->button.time); -#else - gdk_pointer_ungrab(event->button.time); -#endif Geom::Point const event_w(sp_canvas_window_to_world(dtw->canvas, event_win)); Geom::Point event_dt(desktop->w2d(event_w)); @@ -535,11 +519,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) guide_cursor = sp_cursor_new_from_xpm(cursor_select_xpm , 1, 1); } gdk_window_set_cursor(gtk_widget_get_window (GTK_WIDGET(desktop->getCanvas())), guide_cursor); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(guide_cursor); -#else - gdk_cursor_unref(guide_cursor); -#endif char *guide_description = guide->description(); desktop->guidesMessageContext()->setF(Inkscape::NORMAL_MESSAGE, _("Guideline: %s"), guide_description); @@ -573,11 +553,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) GdkDisplay *display = gdk_display_get_default(); GdkCursor *guide_cursor = gdk_cursor_new_for_display(display, GDK_EXCHANGE); gdk_window_set_cursor(gtk_widget_get_window (GTK_WIDGET(desktop->getCanvas())), guide_cursor); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(guide_cursor); -#else - gdk_cursor_unref(guide_cursor); -#endif ret = TRUE; break; } @@ -595,11 +571,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) GdkDisplay *display = gdk_display_get_default(); GdkCursor *guide_cursor = gdk_cursor_new_for_display(display, GDK_EXCHANGE); gdk_window_set_cursor(gtk_widget_get_window (GTK_WIDGET(desktop->getCanvas())), guide_cursor); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(guide_cursor); -#else - gdk_cursor_unref(guide_cursor); -#endif break; } default: @@ -622,19 +594,15 @@ static GdkInputSource lastType = GDK_SOURCE_MOUSE; static void init_extended() { Glib::ustring avoidName("pad"); - Glib::RefPtr display = Gdk::Display::get_default(); + auto display = Gdk::Display::get_default(); -#if GTK_CHECK_VERSION(3,0,0) - Glib::RefPtr dm = display->get_device_manager(); - std::vector< Glib::RefPtr > devices = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); -#else - std::vector< Glib::RefPtr > devices = display->list_devices(); -#endif + auto dm = display->get_device_manager(); + auto const devices = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); if ( !devices.empty() ) { - for ( std::vector< Glib::RefPtr >::const_iterator dev = devices.begin(); dev != devices.end(); ++dev ) { - Glib::ustring const devName = (*dev)->get_name(); - Gdk::InputSource devSrc = (*dev)->get_source(); + for (auto const dev : devices) { + auto const devName = dev->get_name(); + auto devSrc = dev->get_source(); if ( !devName.empty() && (avoidName != devName) diff --git a/src/desktop.cpp b/src/desktop.cpp index d482d0d7f..83110f8e0 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -1444,11 +1444,7 @@ void SPDesktop::setWaitingCursor() GdkDisplay *display = gdk_display_get_default(); GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH); gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(getCanvas())), waiting); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(waiting); -#else - gdk_cursor_unref(waiting); -#endif // GDK needs the flush for the cursor change to take effect gdk_flush(); waiting_cursor = true; diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index 7d76fa043..9201168ef 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -322,13 +322,9 @@ void sp_canvas_item_dispose(GObject *object) if (item == item->canvas->_grabbed_item) { item->canvas->_grabbed_item = NULL; -#if GTK_CHECK_VERSION(3,0,0) - GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto dm = gdk_display_get_device_manager(gdk_display_get_default()); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_device_ungrab(device, GDK_CURRENT_TIME); -#else - gdk_pointer_ungrab (GDK_CURRENT_TIME); -#endif } if (item == item->canvas->_focused_item) { @@ -617,9 +613,8 @@ int sp_canvas_item_grab(SPCanvasItem *item, guint event_mask, GdkCursor *cursor, // fixme: Top hack (Lauris) // fixme: If we add key masks to event mask, Gdk will abort (Lauris) // fixme: But Canvas actualle does get key events, so all we need is routing these here -#if GTK_CHECK_VERSION(3,0,0) - GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto dm = gdk_display_get_device_manager(gdk_display_get_default()); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_device_grab(device, getWindow(item->canvas), GDK_OWNERSHIP_NONE, @@ -627,11 +622,6 @@ int sp_canvas_item_grab(SPCanvasItem *item, guint event_mask, GdkCursor *cursor, (GdkEventMask)(event_mask & (~(GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK))), cursor, etime); -#else - gdk_pointer_grab( getWindow(item->canvas), FALSE, - (GdkEventMask)(event_mask & (~(GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK))), - NULL, cursor, etime); -#endif item->canvas->_grabbed_item = item; item->canvas->_grabbed_event_mask = event_mask; @@ -658,13 +648,9 @@ void sp_canvas_item_ungrab(SPCanvasItem *item, guint32 etime) item->canvas->_grabbed_item = NULL; -#if GTK_CHECK_VERSION(3,0,0) - GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto dm = gdk_display_get_device_manager(gdk_display_get_default()); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_device_ungrab(device, etime); -#else - gdk_pointer_ungrab (etime); -#endif } /** @@ -913,16 +899,9 @@ void sp_canvas_class_init(SPCanvasClass *klass) widget_class->realize = SPCanvas::handle_realize; widget_class->unrealize = SPCanvas::handle_unrealize; - -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = SPCanvas::handle_get_preferred_width; widget_class->get_preferred_height = SPCanvas::handle_get_preferred_height; widget_class->draw = SPCanvas::handle_draw; -#else - widget_class->size_request = SPCanvas::handle_size_request; - widget_class->expose_event = SPCanvas::handle_expose; -#endif - widget_class->size_allocate = SPCanvas::handle_size_allocate; widget_class->button_press_event = SPCanvas::handle_button; widget_class->button_release_event = SPCanvas::handle_button; @@ -980,13 +959,9 @@ void SPCanvas::shutdownTransients() if (_grabbed_item) { _grabbed_item = NULL; -#if GTK_CHECK_VERSION(3,0,0) - GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto dm = gdk_display_get_device_manager(gdk_display_get_default()); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_device_ungrab(device, GDK_CURRENT_TIME); -#else - gdk_pointer_ungrab(GDK_CURRENT_TIME); -#endif } removeIdle(); } @@ -1053,10 +1028,6 @@ void SPCanvas::handle_realize(GtkWidget *widget) attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gdk_visual_get_system(); -#if !GTK_CHECK_VERSION(3,0,0) - attributes.colormap = gdk_colormap_get_system(); -#endif - attributes.event_mask = (gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | @@ -1073,11 +1044,7 @@ void SPCanvas::handle_realize(GtkWidget *widget) GDK_SCROLL_MASK | GDK_FOCUS_CHANGE_MASK); -#if GTK_CHECK_VERSION(3,0,0) gint attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL; -#else - gint attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; -#endif GdkWindow *window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); gtk_widget_set_window (widget, window); @@ -1086,18 +1053,8 @@ void SPCanvas::handle_realize(GtkWidget *widget) Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (prefs->getBool("/options/useextinput/value", true)) { gtk_widget_set_events(widget, attributes.event_mask); -#if !GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_extension_events(widget, GDK_EXTENSION_EVENTS_ALL); - // TODO: Extension event stuff has been deprecated in GTK+ 3 -#endif } -#if !GTK_CHECK_VERSION(3,0,0) - // This does nothing in GTK+ 3 - GtkStyle *style = gtk_widget_get_style (widget); - gtk_widget_set_style (widget, gtk_style_attach (style, window)); -#endif - gtk_widget_set_realized (widget, TRUE); } @@ -1115,8 +1072,6 @@ void SPCanvas::handle_unrealize(GtkWidget *widget) (* GTK_WIDGET_CLASS(sp_canvas_parent_class)->unrealize)(widget); } - -#if GTK_CHECK_VERSION(3,0,0) void SPCanvas::handle_get_preferred_width(GtkWidget *widget, gint *minimum_width, gint *natural_width) { static_cast(SP_CANVAS (widget)); @@ -1130,16 +1085,6 @@ void SPCanvas::handle_get_preferred_height(GtkWidget *widget, gint *minimum_heig *minimum_height = 256; *natural_height = 256; } -#else -void SPCanvas::handle_size_request(GtkWidget *widget, GtkRequisition *req) -{ - static_cast(SP_CANVAS (widget)); - - req->width = 256; - req->height = 256; -} -#endif - void SPCanvas::handle_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { @@ -1219,9 +1164,7 @@ int SPCanvas::emitEvent(GdkEvent *event) break; case GDK_SCROLL: mask = GDK_SCROLL_MASK; -#if GTK_CHECK_VERSION(3,0,0) mask |= GDK_SMOOTH_SCROLL_MASK; -#endif break; default: mask = 0; @@ -1503,13 +1446,9 @@ gint SPCanvas::handle_scroll(GtkWidget *widget, GdkEventScroll *event) } static inline void request_motions(GdkWindow *w, GdkEventMotion *event) { -#if GTK_CHECK_VERSION(3,0,0) gdk_window_get_device_position(w, gdk_event_get_device((GdkEvent *)(event)), NULL, NULL, NULL); -#else - gdk_window_get_pointer(w, NULL, NULL, NULL); -#endif gdk_event_request_motions(event); } @@ -1746,16 +1685,12 @@ bool SPCanvas::paintRect(int xx0, int yy0, int xx1, int yy1) // Save the mouse location gint x, y; -#if GTK_CHECK_VERSION(3,0,0) - GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto dm = gdk_display_get_device_manager(gdk_display_get_default()); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_window_get_device_position(gtk_widget_get_window(GTK_WIDGET(this)), device, &x, &y, NULL); -#else - gdk_window_get_pointer(gtk_widget_get_window(GTK_WIDGET(this)), &x, &y, NULL); -#endif setup.mouse_loc = sp_canvas_window_to_world(this, Geom::Point(x,y)); @@ -1818,21 +1753,6 @@ gboolean SPCanvas::handle_draw(GtkWidget *widget, cairo_t *cr) { return TRUE; } -#if !GTK_CHECK_VERSION(3,0,0) -gboolean SPCanvas::handle_expose(GtkWidget *widget, GdkEventExpose *event) -{ - cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(widget)); - - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - gboolean result = SPCanvas::handle_draw(widget, cr); - - cairo_destroy (cr); - - return result; -} -#endif - gint SPCanvas::handle_key_event(GtkWidget *widget, GdkEventKey *event) { diff --git a/src/display/sp-canvas.h b/src/display/sp-canvas.h index 171fdaf67..78d96d728 100644 --- a/src/display/sp-canvas.h +++ b/src/display/sp-canvas.h @@ -145,12 +145,8 @@ public: static void dispose(GObject *object); static void handle_realize(GtkWidget *widget); static void handle_unrealize(GtkWidget *widget); -#if GTK_CHECK_VERSION(3,0,0) static void handle_get_preferred_width(GtkWidget *widget, gint *min_w, gint *nat_w); static void handle_get_preferred_height(GtkWidget *widget, gint *min_h, gint *nat_h); -#else - static void handle_size_request(GtkWidget *widget, GtkRequisition *req); -#endif static void handle_size_allocate(GtkWidget *widget, GtkAllocation *allocation); static gint handle_button(GtkWidget *widget, GdkEventButton *event); @@ -162,9 +158,6 @@ public: static gint handle_scroll(GtkWidget *widget, GdkEventScroll *event); static gint handle_motion(GtkWidget *widget, GdkEventMotion *event); static gboolean handle_draw(GtkWidget *widget, cairo_t *cr); -#if !GTK_CHECK_VERSION(3,0,0) - static gboolean handle_expose(GtkWidget *widget, GdkEventExpose *event); -#endif static gint handle_key_event(GtkWidget *widget, GdkEventKey *event); static gint handle_crossing(GtkWidget *widget, GdkEventCrossing *event); static gint handle_focus_in(GtkWidget *widget, GdkEventFocus *event); diff --git a/src/inkview.cpp b/src/inkview.cpp index db4b1aeb0..f6dfe34fe 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -346,13 +346,7 @@ static GtkWidget* sp_svgview_control_show(struct SPSlideShow *ss) gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(ss->window)); g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, ss); g_signal_connect(G_OBJECT (ctrlwin), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL); - -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); -#else - GtkWidget *t = gtk_hbutton_box_new(); -#endif - + auto t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_container_add(GTK_CONTAINER(ctrlwin), t); #if GTK_CHECK_VERSION(3,10,0) @@ -431,19 +425,11 @@ static void sp_svgview_waiting_cursor(struct SPSlideShow *ss) GdkDisplay *display = gdk_display_get_default(); GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH); gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ss->window)), waiting); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(waiting); -#else - gdk_cursor_unref(waiting); -#endif if (ctrlwin) { GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH); gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), waiting); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(waiting); -#else - gdk_cursor_unref(waiting); -#endif } while(gtk_events_pending()) { gtk_main_iteration(); diff --git a/src/knot.cpp b/src/knot.cpp index bfc0c4f0b..8027a0301 100644 --- a/src/knot.cpp +++ b/src/knot.cpp @@ -126,21 +126,14 @@ SPKnot::SPKnot(SPDesktop *desktop, gchar const *tip) } SPKnot::~SPKnot() { -#if GTK_CHECK_VERSION(3,0,0) - GdkDisplay *display = gdk_display_get_default(); - GdkDeviceManager *dm = gdk_display_get_device_manager(display); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto display = gdk_display_get_default(); + auto dm = gdk_display_get_device_manager(display); + auto device = gdk_device_manager_get_client_pointer(dm); if ((this->flags & SP_KNOT_GRABBED) && gdk_display_device_is_grabbed(display, device)) { // This happens e.g. when deleting a node in node tool while dragging it gdk_device_ungrab(device, GDK_CURRENT_TIME); } -#else - if ((this->flags & SP_KNOT_GRABBED) && gdk_pointer_is_grabbed ()) { - // This happens e.g. when deleting a node in node tool while dragging it - gdk_pointer_ungrab (GDK_CURRENT_TIME); - } -#endif if (this->_event_handler_id > 0) { g_signal_handler_disconnect(G_OBJECT (this->item), this->_event_handler_id); @@ -154,11 +147,7 @@ SPKnot::~SPKnot() { for (gint i = 0; i < SP_KNOT_VISIBLE_STATES; i++) { if (this->cursor[i]) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(this->cursor[i]); -#else - gdk_cursor_unref(this->cursor[i]); -#endif this->cursor[i] = NULL; } } @@ -525,57 +514,33 @@ void SPKnot::setImage(guchar* normal, guchar* mouseover, guchar* dragging) { void SPKnot::setCursor(GdkCursor* normal, GdkCursor* mouseover, GdkCursor* dragging) { if (cursor[SP_KNOT_STATE_NORMAL]) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor[SP_KNOT_STATE_NORMAL]); -#else - gdk_cursor_unref(cursor[SP_KNOT_STATE_NORMAL]); -#endif } cursor[SP_KNOT_STATE_NORMAL] = normal; if (normal) { -#if GTK_CHECK_VERSION(3,0,0) g_object_ref(normal); -#else - gdk_cursor_ref(normal); -#endif } if (cursor[SP_KNOT_STATE_MOUSEOVER]) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor[SP_KNOT_STATE_MOUSEOVER]); -#else - gdk_cursor_unref(cursor[SP_KNOT_STATE_MOUSEOVER]); -#endif } cursor[SP_KNOT_STATE_MOUSEOVER] = mouseover; if (mouseover) { -#if GTK_CHECK_VERSION(3,0,0) g_object_ref(mouseover); -#else - gdk_cursor_ref(mouseover); -#endif } if (cursor[SP_KNOT_STATE_DRAGGING]) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor[SP_KNOT_STATE_DRAGGING]); -#else - gdk_cursor_unref(cursor[SP_KNOT_STATE_DRAGGING]); -#endif } cursor[SP_KNOT_STATE_DRAGGING] = dragging; if (dragging) { -#if GTK_CHECK_VERSION(3,0,0) g_object_ref(dragging); -#else - gdk_cursor_ref(dragging); -#endif } } diff --git a/src/live_effects/parameter/togglebutton.cpp b/src/live_effects/parameter/togglebutton.cpp index c761731b7..023bebc03 100644 --- a/src/live_effects/parameter/togglebutton.cpp +++ b/src/live_effects/parameter/togglebutton.cpp @@ -74,12 +74,8 @@ ToggleButtonParam::param_newWidget() false, param_effect->getRepr(), param_effect->getSPDoc()) ); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget * box_button = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + auto box_button = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(box_button), false); -#else - GtkWidget * box_button = gtk_hbox_new (false, 0); -#endif GtkWidget * label_button = gtk_label_new (""); if (!param_label.empty()) { if(value || inactive_label.empty()){ diff --git a/src/main.cpp b/src/main.cpp index 8cf52127b..3c0244e8b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -52,10 +52,8 @@ #include #include -#if GTK_CHECK_VERSION(3,0,0) #include #include -#endif #include "inkgc/gc-core.h" @@ -1056,8 +1054,6 @@ sp_main_gui(int argc, char const **argv) #endif g_free(usericondir); - -#if GTK_CHECK_VERSION(3,0,0) // Add style sheet (GTK3) Glib::RefPtr screen = Gdk::Screen::get_default(); @@ -1114,7 +1110,6 @@ sp_main_gui(int argc, char const **argv) Gtk::StyleContext::add_provider_for_screen (screen, provider2, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } -#endif gdk_event_handler_set((GdkEventFunc)snooper, NULL, NULL); Inkscape::Debug::log_display_config(); diff --git a/src/svg-view-widget.cpp b/src/svg-view-widget.cpp index b1fddd7e6..7c72686b4 100644 --- a/src/svg-view-widget.cpp +++ b/src/svg-view-widget.cpp @@ -27,7 +27,6 @@ static void sp_svg_view_widget_dispose(GObject *object); static void sp_svg_view_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static void sp_svg_view_widget_size_request (GtkWidget *widget, GtkRequisition *req); -#if GTK_CHECK_VERSION(3,0,0) static void sp_svg_view_widget_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width); @@ -35,7 +34,6 @@ static void sp_svg_view_widget_get_preferred_width(GtkWidget *widget, static void sp_svg_view_widget_get_preferred_height(GtkWidget *widget, gint *minimal_height, gint *natural_height); -#endif static void sp_svg_view_widget_view_resized (SPViewWidget *vw, Inkscape::UI::View::View *view, gdouble width, gdouble height); @@ -53,12 +51,8 @@ static void sp_svg_view_widget_class_init(SPSVGSPViewWidgetClass *klass) object_class->dispose = sp_svg_view_widget_dispose; widget_class->size_allocate = sp_svg_view_widget_size_allocate; -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = sp_svg_view_widget_get_preferred_width; widget_class->get_preferred_height = sp_svg_view_widget_get_preferred_height; -#else - widget_class->size_request = sp_svg_view_widget_size_request; -#endif vw_class->view_resized = sp_svg_view_widget_view_resized; } @@ -83,16 +77,10 @@ static void sp_svg_view_widget_init(SPSVGSPViewWidget *vw) gtk_widget_show (vw->sw); /* Canvas */ -#if !GTK_CHECK_VERSION(3,0,0) - GdkColormap *cmap = gdk_colormap_get_system(); - gtk_widget_push_colormap(cmap); -#endif - vw->canvas = SPCanvas::createAA(); -#if GTK_CHECK_VERSION(3,0,0) - GtkCssProvider *css_provider = gtk_css_provider_new(); - GtkStyleContext *style_context = gtk_widget_get_style_context(GTK_WIDGET(vw->canvas)); + auto css_provider = gtk_css_provider_new(); + auto style_context = gtk_widget_get_style_context(GTK_WIDGET(vw->canvas)); gtk_css_provider_load_from_data(css_provider, "SPCanvas {\n" @@ -103,19 +91,8 @@ static void sp_svg_view_widget_init(SPSVGSPViewWidget *vw) gtk_style_context_add_provider(style_context, GTK_STYLE_PROVIDER(css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); -#else - gtk_widget_pop_colormap (); - GtkStyle *style = gtk_style_copy (gtk_widget_get_style (vw->canvas)); - style->bg[GTK_STATE_NORMAL] = style->white; - gtk_widget_set_style (vw->canvas, style); -#endif - -#if GTK_CHECK_VERSION(3,0,0) - gtk_container_add (GTK_CONTAINER (vw->sw), vw->canvas); -#else - gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (vw->sw), vw->canvas); -#endif + gtk_container_add (GTK_CONTAINER (vw->sw), vw->canvas); gtk_widget_show (vw->canvas); /* View */ @@ -146,7 +123,6 @@ static void sp_svg_view_widget_size_request(GtkWidget *widget, GtkRequisition *r SPSVGSPViewWidget *vw = SP_SVG_VIEW_WIDGET (widget); Inkscape::UI::View::View *v = SP_VIEW_WIDGET_VIEW (widget); -#if GTK_CHECK_VERSION(3,0,0) if (GTK_WIDGET_CLASS(sp_svg_view_widget_parent_class)->get_preferred_width && GTK_WIDGET_CLASS(sp_svg_view_widget_parent_class)->get_preferred_height) { gint width_min, height_min, width_nat, height_nat; @@ -156,11 +132,6 @@ static void sp_svg_view_widget_size_request(GtkWidget *widget, GtkRequisition *r req->width=width_min; req->height=height_min; } -#else - if (GTK_WIDGET_CLASS(sp_svg_view_widget_parent_class)->size_request) { - GTK_WIDGET_CLASS(sp_svg_view_widget_parent_class)->size_request(widget, req); - } -#endif if (v->doc()) { SPSVGView *svgv; @@ -189,7 +160,6 @@ static void sp_svg_view_widget_size_request(GtkWidget *widget, GtkRequisition *r } } -#if GTK_CHECK_VERSION(3,0,0) static void sp_svg_view_widget_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width) { GtkRequisition requisition; @@ -203,7 +173,6 @@ static void sp_svg_view_widget_get_preferred_height(GtkWidget *widget, gint *min sp_svg_view_widget_size_request(widget, &requisition); *minimal_height = *natural_height = requisition.height; } -#endif /** * Callback connected with size_allocate signal. diff --git a/src/svg-view.cpp b/src/svg-view.cpp index 53fa8633f..00ea0d381 100644 --- a/src/svg-view.cpp +++ b/src/svg-view.cpp @@ -107,11 +107,7 @@ void SPSVGView::mouseover() GdkCursor *cursor = gdk_cursor_new_for_display(display, GDK_HAND2); GdkWindow *window = gtk_widget_get_window (GTK_WIDGET(SP_CANVAS_ITEM(_drawing)->canvas)); gdk_window_set_cursor(window, cursor); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor); -#else - gdk_cursor_unref(cursor); -#endif } void SPSVGView::mouseout() diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 5e7c68985..5167ca2a2 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -67,12 +67,7 @@ #include "helper/png-write.h" -#if WITH_EXT_GDL #include -#else -#include "libgdl/gdl-dock-item.h" -#endif - // required to set status message after export #include "desktop.h" diff --git a/src/ui/dialog/font-substitution.cpp b/src/ui/dialog/font-substitution.cpp index f219f3db6..18a7241a4 100644 --- a/src/ui/dialog/font-substitution.cpp +++ b/src/ui/dialog/font-substitution.cpp @@ -106,11 +106,7 @@ FontSubstitution::show(Glib::ustring out, std::vector &l) cbWarning->set_label(_("Don't show this warning again")); cbWarning->show(); -#if GTK_CHECK_VERSION(3,0,0) - Gtk::Box * box = warning.get_content_area(); -#else - Gtk::Box * box = warning.get_vbox(); -#endif + auto box = warning.get_content_area(); box->set_spacing(2); box->pack_start(*scrollwindow, true, true, 4); box->pack_start(*cbSelect, false, false, 0); diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index ab29471ed..1d2fa5b34 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -79,9 +79,7 @@ #include "message-stack.h" #include "ui/dialog/layer-properties.h" -#if GTK_CHECK_VERSION(3,0,0) - #include "widgets/image-menu-item.h" -#endif +#include "widgets/image-menu-item.h" #include @@ -417,11 +415,7 @@ sp_ui_menuitem_add_icon( GtkWidget *item, gchar *icon_name ) icon = sp_icon_new( Inkscape::ICON_SIZE_MENU, icon_name ); gtk_widget_show(icon); -#if GTK_CHECK_VERSION(3,0,0) image_menu_item_set_image((ImageMenuItem *) item, icon); -#else - gtk_image_menu_item_set_image((GtkImageMenuItem *) item, icon); -#endif } // end of sp_ui_menu_add_icon void @@ -475,11 +469,7 @@ static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb if (radio) { item = gtk_radio_menu_item_new_with_mnemonic(group, action->name); } else { -#if GTK_CHECK_VERSION(3,0,0) item = image_menu_item_new_with_mnemonic(action->name); -#else - item = gtk_image_menu_item_new_with_mnemonic(action->name); -#endif } gtk_label_set_markup_with_mnemonic( GTK_LABEL(gtk_bin_get_child(GTK_BIN (item))), action->name); @@ -570,11 +560,7 @@ static bool getViewStateFromPref(Inkscape::UI::View::View *view, gchar const *pr return prefs->getBool(pref_path, true); } -#if GTK_CHECK_VERSION(3,0,0) static gboolean checkitem_update(GtkWidget *widget, cairo_t * /*cr*/, gpointer user_data) -#else -static gboolean checkitem_update(GtkWidget *widget, GdkEventExpose * /*event*/, gpointer user_data) -#endif { GtkCheckMenuItem *menuitem=GTK_CHECK_MENU_ITEM(widget); @@ -631,11 +617,7 @@ static void taskToggled(GtkCheckMenuItem *menuitem, gpointer userData) /** * Callback function to update the status of the radio buttons in the View -> Display mode menu (Normal, No Filters, Outline) and Color display mode. */ -#if GTK_CHECK_VERSION(3,0,0) static gboolean update_view_menu(GtkWidget *widget, cairo_t * /*cr*/, gpointer user_data) -#else -static gboolean update_view_menu(GtkWidget *widget, GdkEventExpose * /*event*/, gpointer user_data) -#endif { SPAction *action = (SPAction *) user_data; g_assert(action->id != NULL); @@ -679,11 +661,7 @@ static gboolean update_view_menu(GtkWidget *widget, GdkEventExpose * /*event*/, static void sp_ui_menu_append_check_item_from_verb(GtkMenu *menu, Inkscape::UI::View::View *view, gchar const *label, gchar const *tip, gchar const *pref, void (*callback_toggle)(GtkCheckMenuItem *, gpointer user_data), -#if GTK_CHECK_VERSION(3,0,0) gboolean (*callback_update)(GtkWidget *widget, cairo_t *cr, gpointer user_data), -#else - gboolean (*callback_update)(GtkWidget *widget, GdkEventExpose *event, gpointer user_data), -#endif Inkscape::Verb *verb) { unsigned int shortcut = (verb) ? sp_shortcut_get_primary(verb) : 0; @@ -707,11 +685,7 @@ sp_ui_menu_append_check_item_from_verb(GtkMenu *menu, Inkscape::UI::View::View * g_signal_connect( G_OBJECT(item), "toggled", (GCallback) callback_toggle, (void *) pref); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect( G_OBJECT(item), "draw", (GCallback) callback_update, (void *) pref); -#else - g_signal_connect( G_OBJECT(item), "expose_event", (GCallback) callback_update, (void *) pref); -#endif (*callback_update)(item, NULL, (void *)pref); @@ -854,11 +828,7 @@ static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, I } if (verb->get_code() != SP_VERB_NONE) { SPAction *action = verb->get_action(Inkscape::ActionContext(view)); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect( G_OBJECT(item), "draw", (GCallback) update_view_menu, (void *) action); -#else - g_signal_connect( G_OBJECT(item), "expose_event", (GCallback) update_view_menu, (void *) action); -#endif } } else if (menu_pntr->attribute("check") != NULL) { if (verb->get_code() != SP_VERB_NONE) { diff --git a/src/ui/previewholder.cpp b/src/ui/previewholder.cpp index 8336467c4..bb7f077b0 100644 --- a/src/ui/previewholder.cpp +++ b/src/ui/previewholder.cpp @@ -259,12 +259,8 @@ void PreviewHolder::on_size_allocate( Gtk::Allocation& allocation ) if ( _insides && !_wrap && (_view != VIEW_TYPE_LIST) && (_anchor == SP_ANCHOR_NORTH || _anchor == SP_ANCHOR_SOUTH) ) { Gtk::Requisition req; -#if GTK_CHECK_VERSION(3,0,0) Gtk::Requisition req_natural; _insides->get_preferred_size(req, req_natural); -#else - req = _insides->size_request(); -#endif gint delta = allocation.get_width() - req.width; if ( (delta > 4) && req.height < allocation.get_height() ) { @@ -306,43 +302,27 @@ void PreviewHolder::calcGridSize( const Gtk::Widget* thing, int itemCount, int& if ( _anchor == SP_ANCHOR_SOUTH || _anchor == SP_ANCHOR_NORTH ) { Gtk::Requisition req; -#if GTK_CHECK_VERSION(3,0,0) Gtk::Requisition req_natural; _scroller->get_preferred_size(req, req_natural); -#else - req = _scroller->size_request(); -#endif int currW = _scroller->get_width(); if ( currW > req.width ) { req.width = currW; } -#if GTK_CHECK_VERSION(3,0,0) - Gtk::Scrollbar* hs = dynamic_cast(_scroller)->get_hscrollbar(); -#else - Gtk::HScrollbar* hs = dynamic_cast(_scroller)->get_hscrollbar(); -#endif + auto hs = dynamic_cast(_scroller)->get_hscrollbar(); if ( hs ) { Gtk::Requisition scrollReq; -#if GTK_CHECK_VERSION(3,0,0) Gtk::Requisition scrollReq_natural; hs->get_preferred_size(scrollReq, scrollReq_natural); -#else - scrollReq = hs->size_request(); -#endif // the +8 is a temporary hack req.height -= scrollReq.height + 8; } Gtk::Requisition req2; -#if GTK_CHECK_VERSION(3,0,0) Gtk::Requisition req2_natural; const_cast(thing)->get_preferred_size(req2, req2_natural); -#else - req2 = const_cast(thing)->size_request(); -#endif int h2 = ((req2.height > 0) && (req.height > req2.height)) ? (req.height / req2.height) : 1; int w2 = ((req2.width > 0) && (req.width > req2.width)) ? (req.width / req2.width) : 1; diff --git a/src/ui/tools/dropper-tool.cpp b/src/ui/tools/dropper-tool.cpp index c838c27d5..fbc5f088c 100644 --- a/src/ui/tools/dropper-tool.cpp +++ b/src/ui/tools/dropper-tool.cpp @@ -121,20 +121,12 @@ void DropperTool::finish() { } if (cursor_dropper_fill) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor_dropper_fill); -#else - gdk_cursor_unref (cursor_dropper_fill); -#endif cursor_dropper_fill = NULL; } if (cursor_dropper_stroke) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor_dropper_stroke); -#else - gdk_cursor_unref (cursor_dropper_stroke); -#endif cursor_dropper_fill = NULL; } diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp index b5ec3d88e..b29fb6979 100644 --- a/src/ui/tools/select-tool.cpp +++ b/src/ui/tools/select-tool.cpp @@ -128,20 +128,12 @@ SelectTool::~SelectTool() { this->_describer = NULL; if (CursorSelectDragging) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(CursorSelectDragging); -#else - gdk_cursor_unref (CursorSelectDragging); -#endif CursorSelectDragging = NULL; } if (CursorSelectMouseover) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(CursorSelectMouseover); -#else - gdk_cursor_unref (CursorSelectMouseover); -#endif CursorSelectMouseover = NULL; } } diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 17debb59c..d504d82eb 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -118,11 +118,7 @@ ToolBase::~ToolBase() { } if (this->cursor != NULL) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(this->cursor); -#else - gdk_cursor_unref(this->cursor); -#endif this->cursor = NULL; } @@ -182,11 +178,7 @@ void ToolBase::sp_event_context_update_cursor() { ); if (pixbuf != NULL) { if (this->cursor) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(this->cursor); -#else - gdk_cursor_unref(this->cursor); -#endif } this->cursor = gdk_cursor_new_from_pixbuf(display, pixbuf, this->hot_x, this->hot_y); g_object_unref(pixbuf); @@ -196,11 +188,7 @@ void ToolBase::sp_event_context_update_cursor() { if (pixbuf) { if (this->cursor) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(this->cursor); -#else - gdk_cursor_unref(this->cursor); -#endif } this->cursor = gdk_cursor_new_from_pixbuf(display, pixbuf, this->hot_x, this->hot_y); @@ -771,11 +759,9 @@ bool ToolBase::root_handler(GdkEvent* event) { int const wheel_scroll = prefs->getIntLimited( "/options/wheelscroll/value", 40, 0, 1000); -#if GTK_CHECK_VERSION(3,0,0) // Size of smooth-scrolls (only used in GTK+ 3) gdouble delta_x = 0; gdouble delta_y = 0; -#endif /* shift + wheel, pan left--right */ if (event->scroll.state & GDK_SHIFT_MASK) { @@ -836,12 +822,10 @@ bool ToolBase::root_handler(GdkEvent* event) { desktop->scroll_world(-wheel_scroll, 0); break; -#if GTK_CHECK_VERSION(3,0,0) case GDK_SCROLL_SMOOTH: gdk_event_get_scroll_deltas(event, &delta_x, &delta_y); desktop->scroll_world(delta_x, delta_y); break; -#endif } } break; diff --git a/src/ui/widget/dock-item.h b/src/ui/widget/dock-item.h index 25a69d94c..2df45b207 100644 --- a/src/ui/widget/dock-item.h +++ b/src/ui/widget/dock-item.h @@ -19,11 +19,7 @@ #include #include -#if WITH_EXT_GDL #include -#else -#include "libgdl/gdl.h" -#endif namespace Gtk { class HButtonBox; diff --git a/src/ui/widget/gimpcolorwheel.c b/src/ui/widget/gimpcolorwheel.c index d54486505..212391497 100644 --- a/src/ui/widget/gimpcolorwheel.c +++ b/src/ui/widget/gimpcolorwheel.c @@ -110,7 +110,6 @@ static gboolean gimp_color_wheel_button_release (GtkWidget *widget, GdkEventButton *event); static gboolean gimp_color_wheel_motion (GtkWidget *widget, GdkEventMotion *event); -#if GTK_CHECK_VERSION(3,0,0) static gboolean gimp_color_wheel_draw (GtkWidget *widget, cairo_t *cr); static void gimp_color_wheel_get_preferred_width (GtkWidget *widget, @@ -119,13 +118,6 @@ static void gimp_color_wheel_get_preferred_width (GtkWidget *widget, static void gimp_color_wheel_get_preferred_height (GtkWidget *widget, gint *minimum_height, gint *natural_height); -#else -static gboolean gimp_color_wheel_expose (GtkWidget *widget, - GdkEventExpose *event); -static void gimp_color_wheel_size_request (GtkWidget *widget, - GtkRequisition *requisition); -#endif - static gboolean gimp_color_wheel_grab_broken (GtkWidget *widget, GdkEventGrabBroken *event); static gboolean gimp_color_wheel_focus (GtkWidget *widget, @@ -157,16 +149,9 @@ gimp_color_wheel_class_init (GimpColorWheelClass *class) widget_class->button_press_event = gimp_color_wheel_button_press; widget_class->button_release_event = gimp_color_wheel_button_release; widget_class->motion_notify_event = gimp_color_wheel_motion; - -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = gimp_color_wheel_get_preferred_width; widget_class->get_preferred_height = gimp_color_wheel_get_preferred_height; widget_class->draw = gimp_color_wheel_draw; -#else - widget_class->size_request = gimp_color_wheel_size_request; - widget_class->expose_event = gimp_color_wheel_expose; -#endif - widget_class->focus = gimp_color_wheel_focus; widget_class->grab_broken_event = gimp_color_wheel_grab_broken; @@ -302,10 +287,6 @@ gimp_color_wheel_realize (GtkWidget *widget) priv->window = gdk_window_new (parent_window, &attr, attr_mask); gdk_window_set_user_data (priv->window, wheel); - -#if !GTK_CHECK_VERSION(3,0,0) - gtk_widget_style_attach (widget); -#endif } static void @@ -321,7 +302,6 @@ gimp_color_wheel_unrealize (GtkWidget *widget) GTK_WIDGET_CLASS (parent_class)->unrealize (widget); } -#if GTK_CHECK_VERSION(3,0,0) static void gimp_color_wheel_get_preferred_width (GtkWidget *widget, gint *minimum_width, @@ -353,23 +333,6 @@ gimp_color_wheel_get_preferred_height (GtkWidget *widget, *minimum_height = *natural_height = DEFAULT_SIZE + 2 * (focus_width + focus_pad); } -#else -static void -gimp_color_wheel_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - gint focus_width; - gint focus_pad; - - gtk_widget_style_get (widget, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - NULL); - - requisition->width = DEFAULT_SIZE + 2 * (focus_width + focus_pad); - requisition->height = DEFAULT_SIZE + 2 * (focus_width + focus_pad); -} -#endif static void gimp_color_wheel_size_allocate (GtkWidget *widget, @@ -688,7 +651,6 @@ set_cross_grab (GimpColorWheel *wheel, gdk_cursor_new_for_display (gtk_widget_get_display (GTK_WIDGET (wheel)), GDK_CROSSHAIR); -#if GTK_CHECK_VERSION(3,0,0) gdk_device_grab (gtk_get_current_event_device(), priv->window, GDK_OWNERSHIP_NONE, @@ -698,14 +660,6 @@ set_cross_grab (GimpColorWheel *wheel, GDK_BUTTON_RELEASE_MASK, cursor, time); g_object_unref (cursor); -#else - gdk_pointer_grab (priv->window, FALSE, - GDK_POINTER_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK | - GDK_BUTTON_RELEASE_MASK, - NULL, cursor, time); - gdk_cursor_unref (cursor); -#endif } static gboolean gimp_color_wheel_grab_broken(GtkWidget *widget, GdkEventGrabBroken *event) @@ -805,13 +759,8 @@ gimp_color_wheel_button_release (GtkWidget *widget, else g_assert_not_reached (); -#if GTK_CHECK_VERSION(3,0,0) gdk_device_ungrab (gtk_get_current_event_device(), event->time); -#else - gdk_display_pointer_ungrab (gdk_window_get_display (event->window), - event->time); -#endif return TRUE; } @@ -859,11 +808,7 @@ static void paint_ring (GimpColorWheel *wheel, cairo_t *cr) { -#if GTK_CHECK_VERSION(3,0,0) GtkWidget *widget = GTK_WIDGET (wheel); -#else - GtkAllocation allocation; -#endif GimpColorWheelPrivate *priv = wheel->priv; gint width, height; gint xx, yy; @@ -879,14 +824,8 @@ paint_ring (GimpColorWheel *wheel, cairo_t *source_cr; gint stride; -#if GTK_CHECK_VERSION(3,0,0) width = gtk_widget_get_allocated_width (widget); height = gtk_widget_get_allocated_height (widget); -#else - gtk_widget_get_allocation (GTK_WIDGET (wheel), &allocation); - width = allocation.width; - height = allocation.height; -#endif center_x = width / 2.0; center_y = height / 2.0; @@ -1027,19 +966,10 @@ paint_triangle (GimpColorWheel *wheel, gdouble r, g, b; gint stride; gint width, height; -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context; width = gtk_widget_get_allocated_width (widget); height = gtk_widget_get_allocated_height (widget); -#else - gchar *detail; - - GtkAllocation allocation; - gtk_widget_get_allocation (widget, &allocation); - width = allocation.width; - height = allocation.height; -#endif /* Compute triangle's vertices */ @@ -1180,28 +1110,18 @@ paint_triangle (GimpColorWheel *wheel, b = priv->v; hsv_to_rgb (&r, &g, &b); -#if GTK_CHECK_VERSION(3,0,0) context = gtk_widget_get_style_context (widget); gtk_style_context_save (context); -#endif if (INTENSITY (r, g, b) > 0.5) { -#if GTK_CHECK_VERSION(3,0,0) gtk_style_context_add_class (context, "light-area-focus"); -#else - detail = "colorwheel_light"; -#endif cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); } else { -#if GTK_CHECK_VERSION(3,0,0) gtk_style_context_add_class (context, "dark-area-focus"); -#else - detail = "colorwheel_dark"; -#endif cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); } @@ -1224,31 +1144,16 @@ paint_triangle (GimpColorWheel *wheel, "focus-padding", &focus_pad, NULL); -#if GTK_CHECK_VERSION(3,0,0) gtk_render_focus (context, cr, xx - FOCUS_RADIUS - focus_width - focus_pad, yy - FOCUS_RADIUS - focus_width - focus_pad, 2 * (FOCUS_RADIUS + focus_width + focus_pad), 2 * (FOCUS_RADIUS + focus_width + focus_pad)); -#else - gtk_widget_get_allocation (widget, &allocation); - gtk_paint_focus (gtk_widget_get_style (widget), - gtk_widget_get_window (widget), - gtk_widget_get_state (widget), - NULL, widget, detail, - allocation.x + xx - FOCUS_RADIUS - focus_width - focus_pad, - allocation.y + yy - FOCUS_RADIUS - focus_width - focus_pad, - 2 * (FOCUS_RADIUS + focus_width + focus_pad), - 2 * (FOCUS_RADIUS + focus_width + focus_pad)); -#endif } -#if GTK_CHECK_VERSION(3,0,0) gtk_style_context_restore (context); -#endif } -#if GTK_CHECK_VERSION(3,0,0) static gboolean gimp_color_wheel_draw (GtkWidget *widget, cairo_t *cr) @@ -1273,48 +1178,6 @@ gimp_color_wheel_draw (GtkWidget *widget, return FALSE; } -#else -static gint -gimp_color_wheel_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (widget)); - - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - gboolean draw_focus; - GtkAllocation allocation; - - if (! (event->window == gtk_widget_get_window (widget) && - gtk_widget_is_drawable (widget))) - return FALSE; - - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - - gtk_widget_get_allocation (widget, &allocation); - cairo_translate (cr, allocation.x, allocation.y); - - draw_focus = gtk_widget_has_focus (widget); - - paint_ring (wheel, cr); - paint_triangle (wheel, cr, draw_focus); - - cairo_destroy (cr); - - if (draw_focus && priv->focus_on_ring) - gtk_paint_focus (gtk_widget_get_style (widget), - gtk_widget_get_window (widget), - gtk_widget_get_state (widget), - &event->area, widget, NULL, - allocation.x, - allocation.y, - allocation.width, - allocation.height); - - return FALSE; -} -#endif static gboolean gimp_color_wheel_focus (GtkWidget *widget, diff --git a/src/ui/widget/selected-style.cpp b/src/ui/widget/selected-style.cpp index 7679fadb4..418cd13ae 100644 --- a/src/ui/widget/selected-style.cpp +++ b/src/ui/widget/selected-style.cpp @@ -1320,11 +1320,7 @@ RotateableSwatch::do_motion(double by, guint modifier) { g_object_unref(pixbuf); gdk_window_set_cursor(gtk_widget_get_window(w), cr); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cr); -#else - gdk_cursor_unref(cr); -#endif cr = NULL; cr_set = true; } @@ -1388,11 +1384,7 @@ RotateableSwatch::do_release(double by, guint modifier) { GtkWidget *w = GTK_WIDGET(gobj()); gdk_window_set_cursor(gtk_widget_get_window(w), NULL); if (cr) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cr); -#else - gdk_cursor_unref (cr); -#endif cr = NULL; } cr_set = false; diff --git a/src/ui/widget/spinbutton.h b/src/ui/widget/spinbutton.h index 30ffc7d77..ae571994b 100644 --- a/src/ui/widget/spinbutton.h +++ b/src/ui/widget/spinbutton.h @@ -36,11 +36,7 @@ public: { connect_signals(); }; -#if GTK_CHECK_VERSION(3,0,0) explicit SpinButton(Glib::RefPtr& adjustment, double climb_rate = 0.0, guint digits = 0) -#else - explicit SpinButton(Gtk::Adjustment& adjustment, double climb_rate = 0.0, guint digits = 0) -#endif : Gtk::SpinButton(adjustment, climb_rate, digits), _unit_menu(NULL), _unit_tracker(NULL), diff --git a/src/widgets/button.cpp b/src/widgets/button.cpp index 6ea8c1360..400cf2658 100644 --- a/src/widgets/button.cpp +++ b/src/widgets/button.cpp @@ -23,15 +23,8 @@ #include static void sp_button_dispose(GObject *object); - -#if GTK_CHECK_VERSION(3, 0, 0) static void sp_button_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width); - static void sp_button_get_preferred_height(GtkWidget *widget, gint *minimal_height, gint *natural_height); -#else -static void sp_button_size_request(GtkWidget *widget, GtkRequisition *requisition); -#endif - static void sp_button_clicked(GtkButton *button); static void sp_button_perform_action(SPButton *button, gpointer data); static gint sp_button_process_event(SPButton *button, GdkEvent *event); @@ -50,12 +43,8 @@ static void sp_button_class_init(SPButtonClass *klass) GtkButtonClass *button_class = GTK_BUTTON_CLASS(klass); object_class->dispose = sp_button_dispose; -#if GTK_CHECK_VERSION(3, 0, 0) widget_class->get_preferred_width = sp_button_get_preferred_width; widget_class->get_preferred_height = sp_button_get_preferred_height; -#else - widget_class->size_request = sp_button_size_request; -#endif button_class->clicked = sp_button_clicked; } @@ -92,7 +81,6 @@ static void sp_button_dispose(GObject *object) (G_OBJECT_CLASS(sp_button_parent_class))->dispose(object); } -#if GTK_CHECK_VERSION(3, 0, 0) static void sp_button_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width) { GtkWidget *child = gtk_bin_get_child(GTK_BIN(widget)); @@ -136,23 +124,6 @@ static void sp_button_get_preferred_height(GtkWidget *widget, gint *minimal_heig *minimal_height += MAX(2, padding.top + padding.bottom + border.top + border.bottom); *natural_height += MAX(2, padding.top + padding.bottom + border.top + border.bottom); } -#else -static void sp_button_size_request(GtkWidget *widget, GtkRequisition *requisition) -{ - GtkWidget *child = gtk_bin_get_child(GTK_BIN(widget)); - GtkStyle *style = gtk_widget_get_style(widget); - - if (child) { - gtk_widget_size_request(GTK_WIDGET(child), requisition); - } else { - requisition->width = 0; - requisition->height = 0; - } - - requisition->width += 2 + 2 * MAX(2, style->xthickness); - requisition->height += 2 + 2 * MAX(2, style->ythickness); -} -#endif static void sp_button_clicked(GtkButton *button) { diff --git a/src/widgets/eek-preview.cpp b/src/widgets/eek-preview.cpp index 9951a8957..5f1997672 100644 --- a/src/widgets/eek-preview.cpp +++ b/src/widgets/eek-preview.cpp @@ -194,7 +194,6 @@ static void eek_preview_size_request( GtkWidget* widget, GtkRequisition* req ) req->height = height; } -#if GTK_CHECK_VERSION(3,0,0) static void eek_preview_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width) { GtkRequisition requisition; @@ -208,7 +207,6 @@ static void eek_preview_get_preferred_height(GtkWidget *widget, gint *minimal_he eek_preview_size_request(widget, &requisition); *minimal_height = *natural_height = requisition.height; } -#endif enum { CLICKED_SIGNAL, @@ -219,22 +217,6 @@ enum { static guint eek_preview_signals[LAST_SIGNAL] = { 0 }; -#if !GTK_CHECK_VERSION(3,0,0) -static gboolean eek_preview_expose_event( GtkWidget* widget, GdkEventExpose* /* event */ ) -{ - gboolean result = FALSE; - - if (gtk_widget_is_drawable(widget)) { - GdkWindow* window = gtk_widget_get_window(widget); - cairo_t* cr = gdk_cairo_create(window); - result = eek_preview_draw(widget, cr); - cairo_destroy(cr); - } - - return result; -} -#endif - static gboolean eek_preview_draw(GtkWidget *widget, cairo_t *cr) @@ -246,14 +228,6 @@ gboolean eek_preview_draw(GtkWidget *widget, GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); -#if !GTK_CHECK_VERSION(3,0,0) - GdkColor fg = { 0, - static_cast(priv->r), - static_cast(priv->g), - static_cast(priv->b) - }; -#endif - gint insetTop = 0, insetBottom = 0; gint insetLeft = 0, insetRight = 0; @@ -270,9 +244,7 @@ gboolean eek_preview_draw(GtkWidget *widget, insetLeft = insetRight = 1; } - -#if GTK_CHECK_VERSION(3,0,0) - GtkStyleContext *context = gtk_widget_get_style_context(widget); + auto context = gtk_widget_get_style_context(widget); gtk_render_frame(context, cr, @@ -283,22 +255,6 @@ gboolean eek_preview_draw(GtkWidget *widget, cr, 0, 0, allocation.width, allocation.height); -#else - GtkStyle *style = gtk_widget_get_style(widget); - GdkWindow *window = gtk_widget_get_window(widget); - - gtk_paint_flat_box( style, - window, - (GtkStateType)gtk_widget_get_state(widget), - GTK_SHADOW_NONE, - NULL, - widget, - NULL, - 0, 0, - allocation.width, allocation.height); - - gdk_colormap_alloc_color( gdk_colormap_get_system(), &fg, FALSE, TRUE ); -#endif // Border if (priv->border != BORDER_NONE) { @@ -377,27 +333,12 @@ gboolean eek_preview_draw(GtkWidget *widget, if (priv->linked & PREVIEW_LINK_IN) { -#if GTK_CHECK_VERSION(3,0,0) gtk_render_arrow(context, cr, G_PI, // Down-pointing arrow area.x, area.y, min(area.width, area.height) ); -#else - gtk_paint_arrow( style, - window, - gtk_widget_get_state (widget), - GTK_SHADOW_ETCHED_IN, - NULL, /* clip area. &area, */ - widget, /* may be NULL */ - NULL, /* detail */ - GTK_ARROW_DOWN, - FALSE, - area.x, area.y, - area.width, area.height - ); -#endif } if (priv->linked & PREVIEW_LINK_OUT) @@ -407,27 +348,12 @@ gboolean eek_preview_draw(GtkWidget *widget, otherArea.y = possible.y + (possible.height - otherArea.height); } -#if GTK_CHECK_VERSION(3,0,0) gtk_render_arrow(context, cr, G_PI, // Down-pointing arrow otherArea.x, otherArea.y, min(otherArea.width, otherArea.height) ); -#else - gtk_paint_arrow( style, - window, - gtk_widget_get_state (widget), - GTK_SHADOW_ETCHED_OUT, - NULL, /* clip area. &area, */ - widget, /* may be NULL */ - NULL, /* detail */ - GTK_ARROW_DOWN, - FALSE, - otherArea.x, otherArea.y, - otherArea.width, otherArea.height - ); -#endif } if (priv->linked & PREVIEW_LINK_OTHER) @@ -437,27 +363,12 @@ gboolean eek_preview_draw(GtkWidget *widget, otherArea.y = possible.y + (possible.height - otherArea.height) / 2; } -#if GTK_CHECK_VERSION(3,0,0) gtk_render_arrow(context, cr, 1.5*G_PI, // Left-pointing arrow otherArea.x, otherArea.y, min(otherArea.width, otherArea.height) ); -#else - gtk_paint_arrow( style, - window, - gtk_widget_get_state (widget), - GTK_SHADOW_ETCHED_OUT, - NULL, /* clip area. &area, */ - widget, /* may be NULL */ - NULL, /* detail */ - GTK_ARROW_LEFT, - FALSE, - otherArea.x, otherArea.y, - otherArea.width, otherArea.height - ); -#endif } @@ -469,22 +380,10 @@ gboolean eek_preview_draw(GtkWidget *widget, if ( otherArea.height < possible.height ) { otherArea.y = possible.y + (possible.height - otherArea.height) / 2; } -#if GTK_CHECK_VERSION(3,0,0) gtk_render_check(context, cr, otherArea.x, otherArea.y, otherArea.width, otherArea.height ); -#else - gtk_paint_check( style, - window, - gtk_widget_get_state (widget), - GTK_SHADOW_ETCHED_OUT, - NULL, - widget, - NULL, - otherArea.x, otherArea.y, - otherArea.width, otherArea.height ); -#endif } if (priv->linked & PREVIEW_STROKE) @@ -495,23 +394,11 @@ gboolean eek_preview_draw(GtkWidget *widget, if ( otherArea.height < possible.height ) { otherArea.y = possible.y + (possible.height - otherArea.height) / 2; } -#if GTK_CHECK_VERSION(3,0,0) // This should be a diamond too? gtk_render_check(context, cr, otherArea.x, otherArea.y, otherArea.width, otherArea.height ); -#else - gtk_paint_diamond( style, - window, - gtk_widget_get_state (widget), - GTK_SHADOW_ETCHED_OUT, - NULL, - widget, - NULL, - otherArea.x, otherArea.y, - otherArea.width, otherArea.height ); -#endif } } @@ -519,21 +406,10 @@ gboolean eek_preview_draw(GtkWidget *widget, if ( gtk_widget_has_focus(widget) ) { gtk_widget_get_allocation (widget, &allocation); -#if GTK_CHECK_VERSION(3,0,0) gtk_render_focus(context, cr, 0 + 1, 0 + 1, allocation.width - 2, allocation.height - 2 ); -#else - gtk_paint_focus( style, - window, - GTK_STATE_NORMAL, - NULL, /* GdkRectangle *area, */ - widget, - NULL, - 0 + 1, 0 + 1, - allocation.width - 2, allocation.height - 2 ); -#endif } return FALSE; @@ -547,11 +423,7 @@ static gboolean eek_preview_enter_cb( GtkWidget* widget, GdkEventCrossing* event EekPreviewPrivate *priv = EEK_PREVIEW_GET_PRIVATE(preview); priv->within = TRUE; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_state_flags( widget, priv->hot ? GTK_STATE_FLAG_ACTIVE : GTK_STATE_FLAG_PRELIGHT, false ); -#else - gtk_widget_set_state( widget, priv->hot ? GTK_STATE_ACTIVE : GTK_STATE_PRELIGHT ); -#endif } return FALSE; @@ -564,11 +436,7 @@ static gboolean eek_preview_leave_cb( GtkWidget* widget, GdkEventCrossing* event EekPreviewPrivate *priv = EEK_PREVIEW_GET_PRIVATE(preview); priv->within = FALSE; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_state_flags( widget, GTK_STATE_FLAG_NORMAL, false ); -#else - gtk_widget_set_state( widget, GTK_STATE_NORMAL ); -#endif } return FALSE; @@ -593,11 +461,7 @@ static gboolean eek_preview_button_press_cb( GtkWidget* widget, GdkEventButton* if ( priv->within ) { -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_state_flags( widget, GTK_STATE_FLAG_ACTIVE, false ); -#else - gtk_widget_set_state( widget, GTK_STATE_ACTIVE ); -#endif } } } @@ -612,11 +476,7 @@ static gboolean eek_preview_button_release_cb( GtkWidget* widget, GdkEventButton EekPreviewPrivate *priv = EEK_PREVIEW_GET_PRIVATE(preview); priv->hot = FALSE; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_state_flags( widget, GTK_STATE_FLAG_NORMAL, false ); -#else - gtk_widget_set_state( widget, GTK_STATE_NORMAL ); -#endif if ( priv->within && (event->button == PRIME_BUTTON_MAGIC_NUMBER || @@ -697,15 +557,9 @@ static void eek_preview_class_init( EekPreviewClass *klass ) parent_class = (GtkWidgetClass*)g_type_class_peek_parent( klass ); -#if GTK_CHECK_VERSION(3,0,0) widgetClass->get_preferred_width = eek_preview_get_preferred_width; widgetClass->get_preferred_height = eek_preview_get_preferred_height; widgetClass->draw = eek_preview_draw; -#else - widgetClass->size_request = eek_preview_size_request; - widgetClass->expose_event = eek_preview_expose_event; -#endif - widgetClass->button_press_event = eek_preview_button_press_cb; widgetClass->button_release_event = eek_preview_button_release_cb; widgetClass->enter_notify_event = eek_preview_enter_cb; diff --git a/src/widgets/ege-adjustment-action.cpp b/src/widgets/ege-adjustment-action.cpp index 272217aa4..8fef21741 100644 --- a/src/widgets/ege-adjustment-action.cpp +++ b/src/widgets/ege-adjustment-action.cpp @@ -813,12 +813,8 @@ static GtkWidget* create_tool_item( GtkAction* action ) if ( IS_EGE_ADJUSTMENT_ACTION(action) ) { EgeAdjustmentAction* act = EGE_ADJUSTMENT_ACTION( action ); GtkWidget* spinbutton = 0; -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget* hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget* hb = gtk_hbox_new( FALSE, 5 ); -#endif GValue value; memset( &value, 0, sizeof(value) ); g_value_init( &value, G_TYPE_STRING ); @@ -865,13 +861,7 @@ static GtkWidget* create_tool_item( GtkAction* action ) gtk_box_pack_start( GTK_BOX(hb), icon, FALSE, FALSE, 0 ); } else { GtkWidget* lbl = gtk_label_new( g_value_get_string( &value ) ? g_value_get_string( &value ) : "wwww" ); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(lbl, GTK_ALIGN_END); -#else - gtk_misc_set_alignment( GTK_MISC(lbl), 1.0, 0.5 ); -#endif - gtk_box_pack_start( GTK_BOX(hb), lbl, FALSE, FALSE, 0 ); } } diff --git a/src/widgets/ege-output-action.cpp b/src/widgets/ege-output-action.cpp index 5dece8e91..da29524a5 100644 --- a/src/widgets/ege-output-action.cpp +++ b/src/widgets/ege-output-action.cpp @@ -166,12 +166,8 @@ GtkWidget* create_tool_item( GtkAction* action ) if ( IS_EGE_OUTPUT_ACTION(action) ) { GValue value; -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget* hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget* hb = gtk_hbox_new( FALSE, 5 ); -#endif GtkWidget* lbl = 0; memset( &value, 0, sizeof(value) ); diff --git a/src/widgets/ege-select-one-action.cpp b/src/widgets/ege-select-one-action.cpp index 2e106154e..5555663e4 100644 --- a/src/widgets/ege-select-one-action.cpp +++ b/src/widgets/ege-select-one-action.cpp @@ -632,12 +632,8 @@ GtkWidget* create_tool_item( GtkAction* action ) item = GTK_WIDGET( gtk_tool_item_new() ); if ( act->private_data->appearanceMode == APPEARANCE_FULL ) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget* holder = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto holder = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(holder), FALSE); -#else - GtkWidget* holder = gtk_hbox_new( FALSE, 0 ); -#endif GtkRadioAction* ract = 0; GSList* group = 0; @@ -744,12 +740,8 @@ GtkWidget* create_tool_item( GtkAction* action ) gtk_container_add( GTK_CONTAINER(item), holder ); } else { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget* holder = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); + auto holder = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); gtk_box_set_homogeneous(GTK_BOX(holder), FALSE); -#else - GtkWidget *holder = gtk_hbox_new( FALSE, 4 ); -#endif GtkEntry *entry = 0; GtkWidget *normal; @@ -818,14 +810,8 @@ GtkWidget* create_tool_item( GtkAction* action ) gtk_box_pack_start( GTK_BOX(holder), normal, FALSE, FALSE, 0 ); { -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(holder, GTK_ALIGN_START); gtk_container_add(GTK_CONTAINER(item), holder); -#else - GtkWidget *align = gtk_alignment_new(0, 0.5, 0, 0); - gtk_container_add( GTK_CONTAINER(align), holder); - gtk_container_add( GTK_CONTAINER(item), align ); -#endif } } @@ -861,13 +847,6 @@ void resync_active( EgeSelectOneAction* act, gint active, gboolean override ) if ( children && children->data ) { gpointer combodata = g_object_get_data( G_OBJECT(children->data), "ege-combo-box" ); -#if !GTK_CHECK_VERSION(3,0,0) - if (!combodata && GTK_IS_ALIGNMENT(children->data)) { - GList *other = gtk_container_get_children( GTK_CONTAINER(children->data) ); - combodata = g_object_get_data( G_OBJECT(other->data), "ege-combo-box" ); - } -#endif - if ( GTK_IS_COMBO_BOX(combodata) ) { GtkComboBox* combo = GTK_COMBO_BOX(combodata); if ((active == -1) && (gtk_combo_box_get_has_entry(combo))) { @@ -925,13 +904,6 @@ void resync_sensitive( EgeSelectOneAction* act ) if ( children && children->data ) { gpointer combodata = g_object_get_data( G_OBJECT(children->data), "ege-combo-box" ); -#if !GTK_CHECK_VERSION(3,0,0) - if (!combodata && GTK_IS_ALIGNMENT(children->data)) { - GList *other = gtk_container_get_children( GTK_CONTAINER(children->data) ); - combodata = g_object_get_data( G_OBJECT(other->data), "ege-combo-box" ); - } -#endif - if ( GTK_IS_COMBO_BOX(combodata) ) { /* Not implemented */ } else if ( GTK_IS_BOX(children->data) ) { diff --git a/src/widgets/font-selector.cpp b/src/widgets/font-selector.cpp index aefcb2e81..54b693ce0 100644 --- a/src/widgets/font-selector.cpp +++ b/src/widgets/font-selector.cpp @@ -36,11 +36,7 @@ struct SPFontSelector { -#if GTK_CHECK_VERSION(3,0,0) GtkBox hbox; -#else - GtkHBox hbox; -#endif unsigned int block_emit : 1; @@ -61,11 +57,7 @@ struct SPFontSelector struct SPFontSelectorClass { -#if GTK_CHECK_VERSION(3,0,0) GtkBoxClass parent_class; -#else - GtkHBoxClass parent_class; -#endif void (* font_set) (SPFontSelector *fsel, gchar *fontspec); }; @@ -91,11 +83,7 @@ static void sp_font_selector_set_sizes( SPFontSelector *fsel ); static guint fs_signals[LAST_SIGNAL] = { 0 }; -#if GTK_CHECK_VERSION(3,0,0) G_DEFINE_TYPE(SPFontSelector, sp_font_selector, GTK_TYPE_BOX); -#else -G_DEFINE_TYPE(SPFontSelector, sp_font_selector, GTK_TYPE_HBOX); -#endif static void sp_font_selector_class_init(SPFontSelectorClass *c) { @@ -160,8 +148,7 @@ static void sp_font_selector_init(SPFontSelector *fsel) /* Muck with style, see text-toolbar.cpp */ gtk_widget_set_name( GTK_WIDGET(fsel->family_treeview), "font_selector_family" ); -#if GTK_CHECK_VERSION(3,0,0) - GtkCssProvider *css_provider = gtk_css_provider_new(); + auto css_provider = gtk_css_provider_new(); gtk_css_provider_load_from_data(css_provider, "#font_selector_family {\n" " -GtkWidget-wide-separators: true;\n" @@ -169,14 +156,10 @@ static void sp_font_selector_init(SPFontSelector *fsel) "}\n", -1, NULL); - GdkScreen *screen = gdk_screen_get_default(); + auto screen = gdk_screen_get_default(); gtk_style_context_add_provider_for_screen(screen, GTK_STYLE_PROVIDER(css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); -#else - gtk_rc_parse_string ( - "widget \"*font_selector_family\" style \"fontfamily-separator-style\""); -#endif Inkscape::FontLister* fontlister = Inkscape::FontLister::get_instance(); Glib::RefPtr store = fontlister->get_font_list(); @@ -195,12 +178,8 @@ static void sp_font_selector_init(SPFontSelector *fsel) gtk_widget_show(f); gtk_box_pack_start(GTK_BOX (fsel), f, TRUE, TRUE, 0); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); + auto vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); -#else - GtkWidget *vb = gtk_vbox_new(FALSE, 4); -#endif gtk_widget_show(vb); gtk_container_set_border_width(GTK_CONTAINER (vb), 4); gtk_container_add(GTK_CONTAINER(f), vb); @@ -235,12 +214,8 @@ static void sp_font_selector_init(SPFontSelector *fsel) selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(fsel->style_treeview)); g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK (sp_font_selector_style_select_row), fsel); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, 4); -#endif gtk_widget_show(hb); gtk_box_pack_start(GTK_BOX(vb), hb, FALSE, FALSE, 0); diff --git a/src/widgets/gradient-image.cpp b/src/widgets/gradient-image.cpp index 6901b8549..dff564feb 100644 --- a/src/widgets/gradient-image.cpp +++ b/src/widgets/gradient-image.cpp @@ -21,7 +21,6 @@ static void sp_gradient_image_size_request (GtkWidget *widget, GtkRequisition *requisition); -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_image_destroy(GtkWidget *object); static void sp_gradient_image_get_preferred_width(GtkWidget *widget, gint *minimal_width, @@ -30,11 +29,6 @@ static void sp_gradient_image_get_preferred_width(GtkWidget *widget, static void sp_gradient_image_get_preferred_height(GtkWidget *widget, gint *minimal_height, gint *natural_height); -#else -static void sp_gradient_image_destroy(GtkObject *object); -static gboolean sp_gradient_image_expose(GtkWidget *widget, GdkEventExpose *event); -#endif - static gboolean sp_gradient_image_draw(GtkWidget *widget, cairo_t *cr); static void sp_gradient_image_gradient_release (SPObject *, SPGradientImage *im); static void sp_gradient_image_gradient_modified (SPObject *, guint flags, SPGradientImage *im); @@ -46,18 +40,10 @@ static void sp_gradient_image_class_init(SPGradientImageClass *klass) { GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = sp_gradient_image_get_preferred_width; widget_class->get_preferred_height = sp_gradient_image_get_preferred_height; widget_class->draw = sp_gradient_image_draw; widget_class->destroy = sp_gradient_image_destroy; -#else - GtkObjectClass *object_class = GTK_OBJECT_CLASS(klass); - - object_class->destroy = sp_gradient_image_destroy; - widget_class->size_request = sp_gradient_image_size_request; - widget_class->expose_event = sp_gradient_image_expose; -#endif } static void @@ -71,11 +57,7 @@ sp_gradient_image_init (SPGradientImage *image) new (&image->modified_connection) sigc::connection(); } -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_image_destroy(GtkWidget *object) -#else -static void sp_gradient_image_destroy(GtkObject *object) -#endif { SPGradientImage *image = SP_GRADIENT_IMAGE (object); @@ -88,13 +70,8 @@ static void sp_gradient_image_destroy(GtkObject *object) image->release_connection.~connection(); image->modified_connection.~connection(); -#if GTK_CHECK_VERSION(3,0,0) if (GTK_WIDGET_CLASS(sp_gradient_image_parent_class)->destroy) GTK_WIDGET_CLASS(sp_gradient_image_parent_class)->destroy(object); -#else - if (GTK_OBJECT_CLASS(sp_gradient_image_parent_class)->destroy) - GTK_OBJECT_CLASS(sp_gradient_image_parent_class)->destroy(object); -#endif } static void sp_gradient_image_size_request(GtkWidget * /*widget*/, GtkRequisition *requisition) @@ -103,7 +80,6 @@ static void sp_gradient_image_size_request(GtkWidget * /*widget*/, GtkRequisitio requisition->height = 12; } -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_image_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width) { GtkRequisition requisition; @@ -117,27 +93,6 @@ static void sp_gradient_image_get_preferred_height(GtkWidget *widget, gint *mini sp_gradient_image_size_request(widget, &requisition); *minimal_height = *natural_height = requisition.height; } -#endif - -#if !GTK_CHECK_VERSION(3,0,0) -static gboolean sp_gradient_image_expose(GtkWidget *widget, GdkEventExpose *event) -{ - gboolean result = TRUE; - if(gtk_widget_is_drawable(widget)) { - cairo_t *ct = gdk_cairo_create(gtk_widget_get_window (widget)); - cairo_rectangle(ct, event->area.x, event->area.y, - event->area.width, event->area.height); - cairo_clip(ct); - GtkAllocation allocation; - gtk_widget_get_allocation(widget, &allocation); - cairo_translate(ct, allocation.x, allocation.y); - result = sp_gradient_image_draw(widget, ct); - cairo_destroy(ct); - } - - return result; -} -#endif static gboolean sp_gradient_image_draw(GtkWidget *widget, cairo_t *ct) { diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp index 604ecd108..7d88499ab 100644 --- a/src/widgets/gradient-selector.cpp +++ b/src/widgets/gradient-selector.cpp @@ -60,11 +60,7 @@ static void sp_gradient_selector_delete_vector_clicked (GtkWidget *w, SPGradient static guint signals[LAST_SIGNAL] = {0}; -#if GTK_CHECK_VERSION(3,0,0) G_DEFINE_TYPE(SPGradientSelector, sp_gradient_selector, GTK_TYPE_BOX); -#else -G_DEFINE_TYPE(SPGradientSelector, sp_gradient_selector, GTK_TYPE_VBOX); -#endif static void sp_gradient_selector_class_init(SPGradientSelectorClass *klass) { @@ -116,9 +112,7 @@ static void sp_gradient_selector_init(SPGradientSelector *sel) sel->safelyInit = true; sel->blocked = false; -#if GTK_CHECK_VERSION(3,0,0) gtk_orientable_set_orientation(GTK_ORIENTABLE(sel), GTK_ORIENTATION_VERTICAL); -#endif new (&sel->nonsolid) std::vector(); new (&sel->swatch_widgets) std::vector(); @@ -180,13 +174,8 @@ static void sp_gradient_selector_init(SPGradientSelector *sel) /* Create box for buttons */ -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new( FALSE, 2 ); -#endif - //sel->nonsolid.push_back(hb); gtk_box_pack_start( GTK_BOX(sel), hb, FALSE, FALSE, 0 ); sel->add = gtk_button_new(); diff --git a/src/widgets/gradient-selector.h b/src/widgets/gradient-selector.h index e090d7cbd..6b5d4ca60 100644 --- a/src/widgets/gradient-selector.h +++ b/src/widgets/gradient-selector.h @@ -45,11 +45,7 @@ class TreeView; struct SPGradientSelector { -#if GTK_CHECK_VERSION(3,0,0) GtkBox vbox; -#else - GtkVBox vbox; -#endif enum SelectorMode { MODE_LINEAR, @@ -131,11 +127,7 @@ struct SPGradientSelector { }; struct SPGradientSelectorClass { -#if GTK_CHECK_VERSION(3,0,0) GtkBoxClass parent_class; -#else - GtkVBoxClass parent_class; -#endif void (* grabbed) (SPGradientSelector *sel); void (* dragged) (SPGradientSelector *sel); diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 97e65141f..ce571bb6f 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -66,11 +66,7 @@ enum { LAST_SIGNAL }; -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_vector_selector_destroy(GtkWidget *object); -#else -static void sp_gradient_vector_selector_destroy(GtkObject *object); -#endif static void sp_gvs_gradient_release(SPObject *obj, SPGradientVectorSelector *gvs); static void sp_gvs_defs_release(SPObject *defs, SPGradientVectorSelector *gvs); @@ -89,11 +85,7 @@ static win_data wd; static gint x = -1000, y = -1000, w = 0, h = 0; // impossible original values to make sure they are read from prefs static Glib::ustring const prefs_path = "/dialogs/gradienteditor/"; -#if GTK_CHECK_VERSION(3,0,0) G_DEFINE_TYPE(SPGradientVectorSelector, sp_gradient_vector_selector, GTK_TYPE_BOX); -#else -G_DEFINE_TYPE(SPGradientVectorSelector, sp_gradient_vector_selector, GTK_TYPE_VBOX); -#endif static void sp_gradient_vector_selector_class_init(SPGradientVectorSelectorClass *klass) { @@ -108,20 +100,13 @@ static void sp_gradient_vector_selector_class_init(SPGradientVectorSelectorClass G_TYPE_NONE, 1, G_TYPE_POINTER); -#if GTK_CHECK_VERSION(3,0,0) GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); widget_class->destroy = sp_gradient_vector_selector_destroy; -#else - GtkObjectClass *object_class = GTK_OBJECT_CLASS(klass); - object_class->destroy = sp_gradient_vector_selector_destroy; -#endif } static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs) { -#if GTK_CHECK_VERSION(3,0,0) gtk_orientable_set_orientation(GTK_ORIENTABLE(gvs), GTK_ORIENTATION_VERTICAL); -#endif gvs->idlabel = TRUE; @@ -140,11 +125,7 @@ static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs) } -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_vector_selector_destroy(GtkWidget *object) -#else -static void sp_gradient_vector_selector_destroy(GtkObject *object) -#endif { SPGradientVectorSelector *gvs = SP_GRADIENT_VECTOR_SELECTOR(object); @@ -165,15 +146,9 @@ static void sp_gradient_vector_selector_destroy(GtkObject *object) gvs->defs_modified_connection.~connection(); gvs->tree_select_connection.~connection(); -#if GTK_CHECK_VERSION(3,0,0) if ((GTK_WIDGET_CLASS(sp_gradient_vector_selector_parent_class))->destroy) { (GTK_WIDGET_CLASS(sp_gradient_vector_selector_parent_class))->destroy(object); } -#else - if ((GTK_OBJECT_CLASS(sp_gradient_vector_selector_parent_class))->destroy) { - (GTK_OBJECT_CLASS(sp_gradient_vector_selector_parent_class))->destroy(object); - } -#endif } GtkWidget *sp_gradient_vector_selector_new(SPDocument *doc, SPGradient *gr) @@ -484,15 +459,8 @@ static GtkWidget *sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *st static void sp_gradient_vector_widget_load_gradient(GtkWidget *widget, SPGradient *gradient); static gint sp_gradient_vector_dialog_delete(GtkWidget *widget, GdkEvent *event, GtkWidget *dialog); - -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_vector_dialog_destroy(GtkWidget *object, gpointer data); static void sp_gradient_vector_widget_destroy(GtkWidget *object, gpointer data); -#else -static void sp_gradient_vector_dialog_destroy(GtkObject *object, gpointer data); -static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer data); -#endif - static void sp_gradient_vector_gradient_release(SPObject *obj, GtkWidget *widget); static void sp_gradient_vector_gradient_modified(SPObject *obj, guint flags, GtkWidget *widget); static void sp_gradient_vector_color_dragged(Inkscape::UI::SelectedColor *selected_color, GObject *object); @@ -845,12 +813,8 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s g_return_val_if_fail(gradient != NULL, NULL); g_return_val_if_fail(SP_IS_GRADIENT(gradient), NULL); -#if GTK_CHECK_VERSION(3,0,0) vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, PAD); gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); -#else - vb = gtk_vbox_new(FALSE, PAD); -#endif g_signal_connect(G_OBJECT(vb), "destroy", G_CALLBACK(sp_gradient_vector_widget_destroy), NULL); w = sp_gradient_image_new(gradient); @@ -883,12 +847,8 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s g_signal_connect(G_OBJECT(combo_box), "changed", G_CALLBACK(sp_grad_edit_combo_box_changed), vb); /* Add and Remove buttons */ -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, 1); -#endif // TRANSLATORS: "Stop" means: a "phase" of a gradient GtkWidget *b = gtk_button_new_with_label(_("Add stop")); gtk_widget_show(b); @@ -905,21 +865,12 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s gtk_box_pack_start(GTK_BOX(vb),hb, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); /* Offset Slider and stuff */ -#if GTK_CHECK_VERSION(3,0,0) hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - hb = gtk_hbox_new(FALSE, 0); -#endif /* Label */ GtkWidget *l = gtk_label_new(C_("Gradient","Offset:")); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_END); -#else - gtk_misc_set_alignment(GTK_MISC(l), 1.0, 0.5); -#endif gtk_box_pack_start(GTK_BOX(hb),l, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); gtk_widget_show(l); @@ -937,11 +888,7 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s gtk_adjustment_set_value(Offset_adj, stop->offset); /* Slider */ -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *slider = gtk_scale_new(GTK_ORIENTATION_HORIZONTAL, Offset_adj); -#else - GtkWidget *slider = gtk_hscale_new(Offset_adj); -#endif + auto slider = gtk_scale_new(GTK_ORIENTATION_HORIZONTAL, Offset_adj); gtk_scale_set_draw_value( GTK_SCALE(slider), FALSE ); gtk_widget_show(slider); gtk_box_pack_start(GTK_BOX(hb),slider, TRUE, TRUE, AUX_BETWEEN_BUTTON_GROUPS); @@ -1179,11 +1126,7 @@ static void sp_gradient_vector_widget_load_gradient(GtkWidget *widget, SPGradien blocked = FALSE; } -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_vector_dialog_destroy(GtkWidget * /*object*/, gpointer /*data*/) -#else -static void sp_gradient_vector_dialog_destroy(GtkObject * /*object*/, gpointer /*data*/) -#endif { GObject *obj = G_OBJECT(dlg); assert(obj != NULL); @@ -1234,11 +1177,7 @@ static gboolean sp_gradient_vector_dialog_delete(GtkWidget */*widget*/, GdkEvent } /* Widget destroy handler */ -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_vector_widget_destroy(GtkWidget *object, gpointer /*data*/) -#else -static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer /*data*/) -#endif { SPObject *gradient = SP_OBJECT(g_object_get_data(G_OBJECT(object), "gradient")); diff --git a/src/widgets/gradient-vector.h b/src/widgets/gradient-vector.h index 5ae90b28f..b51b276b9 100644 --- a/src/widgets/gradient-vector.h +++ b/src/widgets/gradient-vector.h @@ -35,11 +35,7 @@ class SPGradient; class SPStop; struct SPGradientVectorSelector { -#if GTK_CHECK_VERSION(3,0,0) GtkBox vbox; -#else - GtkVBox vbox; -#endif guint idlabel : 1; @@ -61,11 +57,7 @@ struct SPGradientVectorSelector { }; struct SPGradientVectorSelectorClass { -#if GTK_CHECK_VERSION(3,0,0) GtkBoxClass parent_class; -#else - GtkVBoxClass parent_class; -#endif void (* vector_set) (SPGradientVectorSelector *gvs, SPGradient *gr); }; diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp index f2031fe51..38b4f2897 100644 --- a/src/widgets/icon.cpp +++ b/src/widgets/icon.cpp @@ -64,10 +64,6 @@ struct IconImpl { static void sizeAllocate(GtkWidget *widget, GtkAllocation *allocation); static gboolean draw(GtkWidget *widget, cairo_t *cr); -#if !GTK_CHECK_VERSION(3,0,0) - static gboolean expose(GtkWidget *widget, GdkEventExpose *event); -#endif - static void screenChanged( GtkWidget *widget, GdkScreen *previous_screen ); static void styleSet( GtkWidget *widget, GtkStyle *previous_style ); static void themeChanged( SPIcon *icon ); @@ -149,14 +145,9 @@ sp_icon_class_init(SPIconClass *klass) object_class->dispose = IconImpl::dispose; -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = IconImpl::getPreferredWidth; widget_class->get_preferred_height = IconImpl::getPreferredHeight; widget_class->draw = IconImpl::draw; -#else - widget_class->size_request = IconImpl::sizeRequest; - widget_class->expose_event = IconImpl::expose; -#endif widget_class->size_allocate = IconImpl::sizeAllocate; widget_class->screen_changed = IconImpl::screenChanged; widget_class->style_set = IconImpl::styleSet; @@ -244,37 +235,15 @@ gboolean IconImpl::draw(GtkWidget *widget, cairo_t* cr) bool unref_image = false; /* copied from the expose function of GtkImage */ -#if GTK_CHECK_VERSION(3,0,0) if (gtk_widget_get_state_flags (GTK_WIDGET(icon)) != GTK_STATE_FLAG_NORMAL && image) { -#else - if (gtk_widget_get_state (GTK_WIDGET(icon)) != GTK_STATE_NORMAL && image) { - std::cerr << "IconImpl::draw: Ooops! It is called in GTK2" << std::endl; -#endif std::cerr << "IconImpl::draw: No image, creating fallback" << std::endl; -#if GTK_CHECK_VERSION(3,0,0) - // image = gtk_render_icon_pixbuf(gtk_widget_get_style_context(widget), - // source, - // (GtkIconSize)-1); - - // gtk_render_icon_pixbuf deprecated, replaced by: GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); image = gtk_icon_theme_load_icon (icon_theme, "gtk-image", 32, (GtkIconLookupFlags)0, NULL); -#else - GtkIconSource *source = gtk_icon_source_new(); - gtk_icon_source_set_pixbuf(source, icon->pb); - gtk_icon_source_set_size(source, GTK_ICON_SIZE_SMALL_TOOLBAR); // note: this is boilerplate and not used - gtk_icon_source_set_size_wildcarded(source, FALSE); - image = gtk_style_render_icon(gtk_widget_get_style(widget), source, - gtk_widget_get_direction(widget), - (GtkStateType) gtk_widget_get_state(widget), - (GtkIconSize)-1, widget, "gtk-image"); - gtk_icon_source_free(source); -#endif unref_image = true; } @@ -283,12 +252,7 @@ gboolean IconImpl::draw(GtkWidget *widget, cairo_t* cr) GtkAllocation allocation; GtkRequisition requisition; gtk_widget_get_allocation(widget, &allocation); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_preferred_size(widget, &requisition, NULL); -#else - gtk_widget_get_requisition(widget, &requisition); -#endif int x = floor(allocation.x + ((allocation.width - requisition.width) * 0.5)); int y = floor(allocation.y + ((allocation.height - requisition.height) * 0.5)); @@ -308,21 +272,6 @@ gboolean IconImpl::draw(GtkWidget *widget, cairo_t* cr) return TRUE; } -#if !GTK_CHECK_VERSION(3,0,0) -gboolean IconImpl::expose(GtkWidget *widget, GdkEventExpose * /*event*/) -{ - gboolean result = TRUE; - - if (gtk_widget_is_drawable(widget)) { - cairo_t * cr = gdk_cairo_create(gtk_widget_get_window(widget)); - result = draw(widget, cr); - cairo_destroy(cr); - } - - return result; -} -#endif - // PUBLIC CALL: void sp_icon_fetch_pixbuf( SPIcon *icon ) { diff --git a/src/widgets/ink-action.cpp b/src/widgets/ink-action.cpp index ace99d9aa..52999dcce 100644 --- a/src/widgets/ink-action.cpp +++ b/src/widgets/ink-action.cpp @@ -2,18 +2,12 @@ #include "icon-size.h" #include - +#include "widgets/image-menu-item.h" #include "widgets/ink-action.h" - #include "widgets/button.h" #include -#if GTK_CHECK_VERSION(3,0,0) - // Fork of gtk-imagemenuitem to continue support - #include "widgets/image-menu-item.h" - -#endif static void ink_action_finalize( GObject* obj ); static void ink_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec ); @@ -165,12 +159,7 @@ static GtkWidget* ink_action_create_menu_item( GtkAction* action ) if ( act->private_data->iconId ) { gchar* label = 0; g_object_get( G_OBJECT(act), "label", &label, NULL ); - -#if GTK_CHECK_VERSION(3,0,0) item = image_menu_item_new_with_mnemonic( label ); -#else - item = gtk_image_menu_item_new_with_mnemonic( label ); -#endif GtkWidget* child = sp_icon_new( Inkscape::ICON_SIZE_MENU, act->private_data->iconId ); // TODO this work-around is until SPIcon will live properly inside of a popup menu @@ -185,12 +174,7 @@ static GtkWidget* ink_action_create_menu_item( GtkAction* action ) } } gtk_widget_show_all( child ); - -#if GTK_CHECK_VERSION(3,0,0) image_menu_item_set_image( IMAGE_MENU_ITEM(item), child ); -#else - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM(item), child ); -#endif g_free( label ); label = 0; @@ -393,15 +377,9 @@ static GtkWidget* ink_toggle_action_create_tool_item( GtkAction* action ) if ( act->private_data->iconId ) { GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); gtk_tool_button_set_icon_widget(button, child); -#else - GtkWidget* align = gtk_alignment_new( 0.5, 0.5, 0.0, 0.0 ); - gtk_container_add( GTK_CONTAINER(align), child ); - gtk_tool_button_set_icon_widget( button, align ); -#endif } else { gchar *label = 0; g_object_get( G_OBJECT(action), "short_label", &label, NULL ); @@ -430,18 +408,10 @@ static void ink_toggle_action_update_icon( InkToggleAction* action ) GtkToolButton* button = GTK_TOOL_BUTTON(proxies->data); GtkWidget* child = sp_icon_new( action->private_data->iconSize, action->private_data->iconId ); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); gtk_widget_show_all(child); gtk_tool_button_set_icon_widget(button, child); -#else - GtkWidget* align = gtk_alignment_new( 0.5, 0.5, 0.0, 0.0 ); - gtk_container_add( GTK_CONTAINER(align), child ); - gtk_widget_show_all( align ); - gtk_tool_button_set_icon_widget( button, align ); -#endif } } @@ -610,16 +580,9 @@ static GtkWidget* ink_radio_action_create_tool_item( GtkAction* action ) GtkToolButton* button = GTK_TOOL_BUTTON(item); GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); gtk_tool_button_set_icon_widget(button, child); -#else - GtkWidget* align = gtk_alignment_new( 0.5, 0.5, 0.0, 0.0 ); - gtk_container_add( GTK_CONTAINER(align), child ); - gtk_tool_button_set_icon_widget( button, align ); -#endif } else { // For now trigger a warning but don't do anything else GtkToolButton* button = GTK_TOOL_BUTTON(item); diff --git a/src/widgets/ink-comboboxentry-action.cpp b/src/widgets/ink-comboboxentry-action.cpp index ec5e26cf5..2fecb06a4 100644 --- a/src/widgets/ink-comboboxentry-action.cpp +++ b/src/widgets/ink-comboboxentry-action.cpp @@ -371,16 +371,10 @@ GtkWidget* create_tool_item( GtkAction* action ) g_free( combobox_name ); { -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(comboBoxEntry, GTK_ALIGN_START); gtk_widget_set_hexpand(comboBoxEntry, FALSE); gtk_widget_set_vexpand(comboBoxEntry, FALSE); gtk_container_add(GTK_CONTAINER(item), comboBoxEntry); -#else - GtkWidget *align = gtk_alignment_new(0, 0.5, 0, 0); - gtk_container_add( GTK_CONTAINER(align), comboBoxEntry ); - gtk_container_add( GTK_CONTAINER(item), align ); -#endif } ink_comboboxentry_action->combobox = GTK_COMBO_BOX (comboBoxEntry); @@ -414,11 +408,7 @@ GtkWidget* create_tool_item( GtkAction* action ) // Optionally widen the combobox width... which widens the drop-down list in list mode. if( ink_comboboxentry_action->extra_width > 0 ) { GtkRequisition req; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_preferred_size(GTK_WIDGET(ink_comboboxentry_action->combobox), &req, NULL); -#else - gtk_widget_size_request( GTK_WIDGET( ink_comboboxentry_action->combobox ), &req ); -#endif gtk_widget_set_size_request( GTK_WIDGET( ink_comboboxentry_action->combobox ), req.width + ink_comboboxentry_action->extra_width, -1 ); } @@ -635,11 +625,7 @@ void ink_comboboxentry_action_set_extra_width( Ink_ComboBoxEntry_Action* action, // Widget may not have been created.... if( action->combobox ) { GtkRequisition req; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_preferred_size(GTK_WIDGET(action->combobox), &req, NULL); -#else - gtk_widget_size_request( GTK_WIDGET( action->combobox ), &req ); -#endif gtk_widget_set_size_request( GTK_WIDGET( action->combobox ), req.width + action->extra_width, -1 ); } } diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 58a178aec..a554f3cde 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -134,11 +134,7 @@ static SPGradientSelector *getGradientFromData(SPPaintSelector const *psel) return grad; } -#if GTK_CHECK_VERSION(3,0,0) G_DEFINE_TYPE(SPPaintSelector, sp_paint_selector, GTK_TYPE_BOX); -#else -G_DEFINE_TYPE(SPPaintSelector, sp_paint_selector, GTK_TYPE_VBOX); -#endif static void sp_paint_selector_class_init(SPPaintSelectorClass *klass) @@ -197,19 +193,13 @@ sp_paint_selector_class_init(SPPaintSelectorClass *klass) static void sp_paint_selector_init(SPPaintSelector *psel) { -#if GTK_CHECK_VERSION(3,0,0) gtk_orientable_set_orientation(GTK_ORIENTABLE(psel), GTK_ORIENTATION_VERTICAL); -#endif psel->mode = static_cast(-1); // huh? do you mean 0xff? -- I think this means "not in the enum" /* Paint style button box */ -#if GTK_CHECK_VERSION(3,0,0) psel->style = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(psel->style), FALSE); -#else - psel->style = gtk_hbox_new(FALSE, 0); -#endif gtk_widget_show(psel->style); gtk_container_set_border_width(GTK_CONTAINER(psel->style), 4); gtk_box_pack_start(GTK_BOX(psel), psel->style, FALSE, FALSE, 0); @@ -236,12 +226,8 @@ sp_paint_selector_init(SPPaintSelector *psel) /* Fillrule */ { -#if GTK_CHECK_VERSION(3,0,0) - psel->fillrulebox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_set_homogeneous(GTK_BOX(psel->fillrulebox), FALSE); -#else - psel->fillrulebox = gtk_hbox_new(FALSE, 0); -#endif + psel->fillrulebox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(psel->fillrulebox), FALSE); gtk_box_pack_end(GTK_BOX(psel->style), psel->fillrulebox, FALSE, FALSE, 0); GtkWidget *w; @@ -270,22 +256,14 @@ sp_paint_selector_init(SPPaintSelector *psel) /* Frame */ psel->label = gtk_label_new(""); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *lbbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); + auto lbbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); gtk_box_set_homogeneous(GTK_BOX(lbbox), FALSE); -#else - GtkWidget *lbbox = gtk_hbox_new(FALSE, 4); -#endif gtk_widget_show(psel->label); gtk_box_pack_start(GTK_BOX(lbbox), psel->label, false, false, 4); gtk_box_pack_start(GTK_BOX(psel), lbbox, false, false, 4); -#if GTK_CHECK_VERSION(3,0,0) psel->frame = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(psel->frame), FALSE); -#else - psel->frame = gtk_vbox_new(FALSE, 4); -#endif gtk_widget_show(psel->frame); //gtk_container_set_border_width(GTK_CONTAINER(psel->frame), 0); gtk_box_pack_start(GTK_BOX(psel), psel->frame, TRUE, TRUE, 0); @@ -700,12 +678,8 @@ static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelec sp_paint_selector_clear_frame(psel); /* Create new color selector */ /* Create vbox */ -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); - gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); -#else - GtkWidget *vb = gtk_vbox_new(FALSE, 4); -#endif + auto vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); + gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); gtk_widget_show(vb); /* Color selector */ @@ -1046,21 +1020,13 @@ static void sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSel sp_paint_selector_clear_frame(psel); /* Create vbox */ -#if GTK_CHECK_VERSION(3,0,0) tbl = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(tbl), FALSE); -#else - tbl = gtk_vbox_new(FALSE, 4); -#endif gtk_widget_show(tbl); { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, 1); -#endif /** * Create a combo_box and store with 4 columns, @@ -1088,13 +1054,9 @@ static void sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSel } { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, 0); -#endif - GtkWidget *l = gtk_label_new(NULL); + auto l = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(l), _("Use the Node tool to adjust position, scale, and rotation of the pattern on canvas. Use Object > Pattern > Objects to Pattern to create a new pattern from selection.")); gtk_label_set_line_wrap(GTK_LABEL(l), true); gtk_widget_set_size_request(l, 180, -1); diff --git a/src/widgets/paint-selector.h b/src/widgets/paint-selector.h index 23c2dd456..dde14b6a6 100644 --- a/src/widgets/paint-selector.h +++ b/src/widgets/paint-selector.h @@ -40,11 +40,7 @@ class SPStyle; * Generic paint selector widget. */ struct SPPaintSelector { -#if GTK_CHECK_VERSION(3,0,0) GtkBox vbox; -#else - GtkVBox vbox; -#endif enum Mode { MODE_EMPTY, @@ -130,11 +126,7 @@ enum {COMBO_COL_LABEL=0, COMBO_COL_STOCK=1, COMBO_COL_PATTERN=2, COMBO_COL_SEP=3 /// The SPPaintSelector vtable struct SPPaintSelectorClass { -#if GTK_CHECK_VERSION(3,0,0) GtkBoxClass parent_class; -#else - GtkVBoxClass parent_class; -#endif void (* mode_changed) (SPPaintSelector *psel, SPPaintSelector::Mode mode); diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp index 9851b0606..7dfa18f49 100644 --- a/src/widgets/select-toolbar.cpp +++ b/src/widgets/select-toolbar.cpp @@ -415,12 +415,8 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb g_object_set_data(G_OBJECT(spw), "dtw", desktop->getCanvas()); // The vb frame holds all other widgets and is used to set sensitivity depending on selection state. -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *vb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto vb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); -#else - GtkWidget *vb = gtk_hbox_new(FALSE, 0); -#endif gtk_widget_show(vb); gtk_container_add(GTK_CONTAINER(spw), vb); diff --git a/src/widgets/sp-color-selector.cpp b/src/widgets/sp-color-selector.cpp index 93eaaee8b..1d448b67b 100644 --- a/src/widgets/sp-color-selector.cpp +++ b/src/widgets/sp-color-selector.cpp @@ -32,11 +32,7 @@ static guint csel_signals[LAST_SIGNAL] = {0}; double ColorSelector::_epsilon = 1e-4; -#if GTK_CHECK_VERSION(3,0,0) G_DEFINE_TYPE(SPColorSelector, sp_color_selector, GTK_TYPE_BOX); -#else -G_DEFINE_TYPE(SPColorSelector, sp_color_selector, GTK_TYPE_VBOX); -#endif void sp_color_selector_class_init( SPColorSelectorClass *klass ) { @@ -86,9 +82,7 @@ void sp_color_selector_class_init( SPColorSelectorClass *klass ) void sp_color_selector_init( SPColorSelector *csel ) { -#if GTK_CHECK_VERSION(3,0,0) gtk_orientable_set_orientation(GTK_ORIENTABLE(csel), GTK_ORIENTATION_VERTICAL); -#endif if ( csel->base ) { diff --git a/src/widgets/sp-color-selector.h b/src/widgets/sp-color-selector.h index 75cb79b00..14a9fccdf 100644 --- a/src/widgets/sp-color-selector.h +++ b/src/widgets/sp-color-selector.h @@ -64,21 +64,12 @@ private: #define SP_COLOR_SELECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SP_TYPE_COLOR_SELECTOR, SPColorSelectorClass)) struct SPColorSelector { -#if GTK_CHECK_VERSION(3,0,0) GtkBox vbox; -#else - GtkVBox vbox; -#endif - ColorSelector* base; }; struct SPColorSelectorClass { -#if GTK_CHECK_VERSION(3,0,0) GtkBoxClass parent_class; -#else - GtkVBoxClass parent_class; -#endif const gchar **name; guint submode_count; diff --git a/src/widgets/sp-widget.cpp b/src/widgets/sp-widget.cpp index 5ab6b1bb5..0a4e722a5 100644 --- a/src/widgets/sp-widget.cpp +++ b/src/widgets/sp-widget.cpp @@ -41,7 +41,6 @@ public: static void show(GtkWidget *widget); static void hide(GtkWidget *widget); -#if GTK_CHECK_VERSION(3,0,0) static void getPreferredWidth(GtkWidget *widget, gint *minimal_width, gint *natural_width); @@ -50,10 +49,6 @@ public: gint *minimal_height, gint *natural_height); static gboolean draw(GtkWidget *widget, cairo_t *cr); -#else - static void sizeRequest(GtkWidget *widget, GtkRequisition *requisition); - static gboolean expose(GtkWidget *widget, GdkEventExpose *event); -#endif static void sizeAllocate(GtkWidget *widget, GtkAllocation *allocation); static void modifySelectionCB(Selection *selection, guint flags, SPWidget *spw); @@ -120,14 +115,9 @@ sp_widget_class_init(SPWidgetClass *klass) widget_class->show = SPWidgetImpl::show; widget_class->hide = SPWidgetImpl::hide; -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = SPWidgetImpl::getPreferredWidth; widget_class->get_preferred_height = SPWidgetImpl::getPreferredHeight; widget_class->draw = SPWidgetImpl::draw; -#else - widget_class->size_request = SPWidgetImpl::sizeRequest; - widget_class->expose_event = SPWidgetImpl::expose; -#endif widget_class->size_allocate = SPWidgetImpl::sizeAllocate; } @@ -207,27 +197,18 @@ void SPWidgetImpl::hide(GtkWidget *widget) } } -#if GTK_CHECK_VERSION(3,0,0) gboolean SPWidgetImpl::draw(GtkWidget *widget, cairo_t *cr) -#else -gboolean SPWidgetImpl::expose(GtkWidget *widget, GdkEventExpose *event) -#endif { GtkBin *bin = GTK_BIN(widget); GtkWidget *child = gtk_bin_get_child(bin); if (child) { -#if GTK_CHECK_VERSION(3,0,0) gtk_container_propagate_draw(GTK_CONTAINER(widget), child, cr); -#else - gtk_container_propagate_expose(GTK_CONTAINER(widget), child, event); -#endif } return FALSE; } -#if GTK_CHECK_VERSION(3,0,0) void SPWidgetImpl::getPreferredWidth(GtkWidget *widget, gint *minimal_width, gint *natural_width) { GtkBin *bin = GTK_BIN(widget); @@ -247,17 +228,6 @@ void SPWidgetImpl::getPreferredHeight(GtkWidget *widget, gint *minimal_height, g gtk_widget_get_preferred_height(child, minimal_height, natural_height); } } -#else -void SPWidgetImpl::sizeRequest(GtkWidget *widget, GtkRequisition *requisition) -{ - GtkBin *bin = GTK_BIN(widget); - GtkWidget *child = gtk_bin_get_child(bin); - - if (child) { - gtk_widget_size_request(child, requisition); - } -} -#endif void SPWidgetImpl::sizeAllocate(GtkWidget *widget, GtkAllocation *allocation) { diff --git a/src/widgets/sp-xmlview-attr-list.cpp b/src/widgets/sp-xmlview-attr-list.cpp index a4c00db7c..8fe01a33d 100644 --- a/src/widgets/sp-xmlview-attr-list.cpp +++ b/src/widgets/sp-xmlview-attr-list.cpp @@ -20,11 +20,7 @@ #include "../xml/node-event-vector.h" #include "sp-xmlview-attr-list.h" -#if GTK_CHECK_VERSION(3,0,0) static void sp_xmlview_attr_list_destroy(GtkWidget * object); -#else -static void sp_xmlview_attr_list_destroy(GtkObject * object); -#endif static void event_attr_changed (Inkscape::XML::Node * repr, const gchar * name, const gchar * old_value, const gchar * new_value, bool is_interactive, gpointer data); @@ -87,13 +83,8 @@ G_DEFINE_TYPE(SPXMLViewAttrList, sp_xmlview_attr_list, GTK_TYPE_TREE_VIEW); void sp_xmlview_attr_list_class_init (SPXMLViewAttrListClass * klass) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); + auto widget_class = GTK_WIDGET_CLASS(klass); widget_class->destroy = sp_xmlview_attr_list_destroy; -#else - GtkObjectClass * object_class = GTK_OBJECT_CLASS(klass); - object_class->destroy = sp_xmlview_attr_list_destroy; -#endif g_signal_new("row-value-changed", G_TYPE_FROM_CLASS(klass), @@ -112,11 +103,7 @@ sp_xmlview_attr_list_init (SPXMLViewAttrList * list) list->repr = NULL; } -#if GTK_CHECK_VERSION(3,0,0) void sp_xmlview_attr_list_destroy(GtkWidget * object) -#else -void sp_xmlview_attr_list_destroy(GtkObject * object) -#endif { SPXMLViewAttrList * list; @@ -125,11 +112,7 @@ void sp_xmlview_attr_list_destroy(GtkObject * object) g_object_unref(list->store); sp_xmlview_attr_list_set_repr (list, NULL); -#if GTK_CHECK_VERSION(3,0,0) GTK_WIDGET_CLASS(sp_xmlview_attr_list_parent_class)->destroy (object); -#else - GTK_OBJECT_CLASS(sp_xmlview_attr_list_parent_class)->destroy (object); -#endif } void sp_xmlview_attr_list_select_row_by_key(SPXMLViewAttrList * list, const gchar *name) diff --git a/src/widgets/sp-xmlview-content.cpp b/src/widgets/sp-xmlview-content.cpp index a1d8475ba..6e59ba3cd 100644 --- a/src/widgets/sp-xmlview-content.cpp +++ b/src/widgets/sp-xmlview-content.cpp @@ -23,11 +23,7 @@ using Inkscape::DocumentUndo; -#if GTK_CHECK_VERSION(3,0,0) static void sp_xmlview_content_destroy(GtkWidget * object); -#else -static void sp_xmlview_content_destroy(GtkObject * object); -#endif void sp_xmlview_content_changed (GtkTextBuffer *tb, SPXMLViewContent *text); @@ -80,13 +76,8 @@ G_DEFINE_TYPE(SPXMLViewContent, sp_xmlview_content, GTK_TYPE_TEXT_VIEW); void sp_xmlview_content_class_init(SPXMLViewContentClass * klass) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); + auto widget_class = GTK_WIDGET_CLASS(klass); widget_class->destroy = sp_xmlview_content_destroy; -#else - GtkObjectClass * object_class = GTK_OBJECT_CLASS(klass); - object_class->destroy = sp_xmlview_content_destroy; -#endif } void @@ -96,21 +87,13 @@ sp_xmlview_content_init (SPXMLViewContent *text) text->blocked = FALSE; } -#if GTK_CHECK_VERSION(3,0,0) void sp_xmlview_content_destroy(GtkWidget * object) -#else -void sp_xmlview_content_destroy(GtkObject * object) -#endif { SPXMLViewContent * text = SP_XMLVIEW_CONTENT (object); sp_xmlview_content_set_repr (text, NULL); -#if GTK_CHECK_VERSION(3,0,0) GTK_WIDGET_CLASS (sp_xmlview_content_parent_class)->destroy (object); -#else - GTK_OBJECT_CLASS (sp_xmlview_content_parent_class)->destroy (object); -#endif } void diff --git a/src/widgets/sp-xmlview-tree.cpp b/src/widgets/sp-xmlview-tree.cpp index 5dff9adf3..131ac16bf 100644 --- a/src/widgets/sp-xmlview-tree.cpp +++ b/src/widgets/sp-xmlview-tree.cpp @@ -23,11 +23,7 @@ struct NodeData { enum { STORE_TEXT_COL = 0, STORE_DATA_COL, STORE_REPR_COL, STORE_N_COLS }; -#if GTK_CHECK_VERSION(3,0,0) static void sp_xmlview_tree_destroy(GtkWidget * object); -#else -static void sp_xmlview_tree_destroy(GtkObject * object); -#endif static NodeData * node_data_new (SPXMLViewTree * tree, GtkTreeIter * node, GtkTreeRowReference *rowref, Inkscape::XML::Node * repr); @@ -121,13 +117,8 @@ G_DEFINE_TYPE(SPXMLViewTree, sp_xmlview_tree, GTK_TYPE_TREE_VIEW); void sp_xmlview_tree_class_init(SPXMLViewTreeClass * klass) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); + auto widget_class = GTK_WIDGET_CLASS(klass); widget_class->destroy = sp_xmlview_tree_destroy; -#else - GtkObjectClass * object_class = GTK_OBJECT_CLASS(klass); - object_class->destroy = sp_xmlview_tree_destroy; -#endif // Signal for when a tree drag and drop has completed g_signal_new ( "tree_move", @@ -148,22 +139,13 @@ sp_xmlview_tree_init (SPXMLViewTree * tree) tree->dndactive = FALSE; } - -#if GTK_CHECK_VERSION(3,0,0) void sp_xmlview_tree_destroy(GtkWidget * object) -#else -void sp_xmlview_tree_destroy(GtkObject * object) -#endif { SPXMLViewTree * tree = SP_XMLVIEW_TREE (object); sp_xmlview_tree_set_repr (tree, NULL); -#if GTK_CHECK_VERSION(3,0,0) GTK_WIDGET_CLASS(sp_xmlview_tree_parent_class)->destroy (object); -#else - GTK_OBJECT_CLASS(sp_xmlview_tree_parent_class)->destroy (object); -#endif } /* diff --git a/src/widgets/spw-utilities.cpp b/src/widgets/spw-utilities.cpp index 5500e1068..c0d4d9d58 100644 --- a/src/widgets/spw-utilities.cpp +++ b/src/widgets/spw-utilities.cpp @@ -19,12 +19,7 @@ #include #include - -#if GTK_CHECK_VERSION(3,0,0) #include -#else -#include -#endif #include "selection.h" @@ -36,11 +31,7 @@ * Creates a label widget with the given text, at the given col, row * position in the table. */ -#if GTK_CHECK_VERSION(3,0,0) Gtk::Label * spw_label(Gtk::Grid *table, const gchar *label_text, int col, int row, Gtk::Widget* target) -#else -Gtk::Label * spw_label(Gtk::Table *table, const gchar *label_text, int col, int row, Gtk::Widget* target) -#endif { Gtk::Label *label_widget = new Gtk::Label(); g_assert(label_widget != NULL); @@ -56,7 +47,6 @@ Gtk::Label * spw_label(Gtk::Table *table, const gchar *label_text, int col, int label_widget->set_alignment(1.0, 0.5); label_widget->show(); -#if GTK_CHECK_VERSION(3,0,0) label_widget->set_hexpand(); label_widget->set_halign(Gtk::ALIGN_FILL); label_widget->set_valign(Gtk::ALIGN_CENTER); @@ -70,9 +60,6 @@ Gtk::Label * spw_label(Gtk::Table *table, const gchar *label_text, int col, int #endif table->attach(*label_widget, col, row, 1, 1); -#else - table->attach(*label_widget, col, col+1, row, row+1, (Gtk::EXPAND | Gtk::FILL), static_cast(0), 4, 0); -#endif return label_widget; } @@ -84,16 +71,9 @@ spw_label_old(GtkWidget *table, const gchar *label_text, int col, int row) label_widget = gtk_label_new (label_text); g_assert(label_widget != NULL); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(label_widget, GTK_ALIGN_END); -#else - gtk_misc_set_alignment (GTK_MISC (label_widget), 1.0, 0.5); -#endif - gtk_widget_show (label_widget); -#if GTK_CHECK_VERSION(3,0,0) #if GTK_CHECK_VERSION(3,12,0) gtk_widget_set_margin_start(label_widget, 4); gtk_widget_set_margin_end(label_widget, 4); @@ -105,10 +85,6 @@ spw_label_old(GtkWidget *table, const gchar *label_text, int col, int row) gtk_widget_set_halign(label_widget, GTK_ALIGN_FILL); gtk_widget_set_valign(label_widget, GTK_ALIGN_CENTER); gtk_grid_attach(GTK_GRID(table), label_widget, col, row, 1, 1); -#else - gtk_table_attach(GTK_TABLE (table), label_widget, col, col+1, row, row+1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 4, 0); -#endif return label_widget; } @@ -117,25 +93,16 @@ spw_label_old(GtkWidget *table, const gchar *label_text, int col, int row) * Creates a horizontal layout manager with 4-pixel spacing between children * and space for 'width' columns. */ -#if GTK_CHECK_VERSION(3,0,0) Gtk::HBox * spw_hbox(Gtk::Grid * table, int width, int col, int row) -#else -Gtk::HBox * spw_hbox(Gtk::Table * table, int width, int col, int row) -#endif { /* Create a new hbox with a 4-pixel spacing between children */ Gtk::HBox *hb = new Gtk::HBox(false, 4); g_assert(hb != NULL); hb->show(); - -#if GTK_CHECK_VERSION(3,0,0) hb->set_hexpand(); hb->set_halign(Gtk::ALIGN_FILL); hb->set_valign(Gtk::ALIGN_CENTER); table->attach(*hb, col, row, width, 1); -#else - table->attach(*hb, col, col+width, row, row+1, (Gtk::EXPAND | Gtk::FILL), static_cast(0), 0, 0); -#endif return hb; } @@ -177,37 +144,21 @@ spw_checkbutton(GtkWidget * dialog, GtkWidget * table, g_assert(table != NULL); GtkWidget *l = gtk_label_new (label); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_END); -#else - gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); -#endif - gtk_widget_show (l); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_FILL); gtk_widget_set_hexpand(l, TRUE); gtk_widget_set_valign(l, GTK_ALIGN_CENTER); gtk_grid_attach(GTK_GRID(table), l, 0, row, 1, 1); -#else - gtk_table_attach (GTK_TABLE (table), l, 0, 1, row, row+1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); -#endif b = gtk_check_button_new (); gtk_widget_show (b); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(b, GTK_ALIGN_FILL); gtk_widget_set_hexpand(b, TRUE); gtk_widget_set_valign(b, GTK_ALIGN_CENTER); gtk_grid_attach(GTK_GRID(table), b, 1, row, 1, 1); -#else - gtk_table_attach (GTK_TABLE (table), b, 1, 2, row, row+1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); -#endif g_object_set_data (G_OBJECT (b), "key", key); g_object_set_data (G_OBJECT (dialog), key, b); @@ -235,16 +186,10 @@ spw_dropdown(GtkWidget * dialog, GtkWidget * table, spw_label_old(table, label_text, 0, row); gtk_widget_show (selector); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(selector, GTK_ALIGN_FILL); gtk_widget_set_hexpand(selector, TRUE); gtk_widget_set_valign(selector, GTK_ALIGN_CENTER); gtk_grid_attach(GTK_GRID(table), selector, 1, row, 1, 1); -#else - gtk_table_attach (GTK_TABLE (table), selector, 1, 2, row, row+1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); -#endif g_object_set_data (G_OBJECT (dialog), key, selector); return selector; @@ -255,8 +200,7 @@ sp_set_font_size_recursive (GtkWidget *w, gpointer font) { guint size = GPOINTER_TO_UINT (font); -#if GTK_CHECK_VERSION(3,0,0) - GtkCssProvider *css_provider = gtk_css_provider_new(); + auto css_provider = gtk_css_provider_new(); const double pt_size = size / static_cast(PANGO_SCALE); std::ostringstream css_data; @@ -268,25 +212,16 @@ sp_set_font_size_recursive (GtkWidget *w, gpointer font) css_data.str().c_str(), -1, NULL); - GtkStyleContext *style_context = gtk_widget_get_style_context(w); + auto style_context = gtk_widget_get_style_context(w); gtk_style_context_add_provider(style_context, GTK_STYLE_PROVIDER(css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); -#else - PangoFontDescription* pan = pango_font_description_new (); - pango_font_description_set_size (pan, size); - gtk_widget_modify_font (w, pan); -#endif if (GTK_IS_CONTAINER(w)) { gtk_container_foreach (GTK_CONTAINER(w), (GtkCallback) sp_set_font_size_recursive, font); } -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(css_provider); -#else - pango_font_description_free (pan); -#endif } void diff --git a/src/widgets/spw-utilities.h b/src/widgets/spw-utilities.h index 31f29e026..71b451631 100644 --- a/src/widgets/spw-utilities.h +++ b/src/widgets/spw-utilities.h @@ -20,25 +20,13 @@ namespace Gtk { class Label; - -#if GTK_CHECK_VERSION(3,0,0) class Grid; -#else - class Table; -#endif - class HBox; class Widget; } -#if GTK_CHECK_VERSION(3,0,0) Gtk::Label * spw_label(Gtk::Grid *table, gchar const *label_text, int col, int row, Gtk::Widget *target); Gtk::HBox * spw_hbox(Gtk::Grid *table, int width, int col, int row); -#else -Gtk::Label * spw_label(Gtk::Table *table, gchar const *label_text, int col, int row, Gtk::Widget *target); -Gtk::HBox * spw_hbox(Gtk::Table *table, int width, int col, int row); -#endif - GtkWidget * spw_label_old(GtkWidget *table, gchar const *label_text, int col, int row); GtkWidget * diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp index 23acb74af..f256b466c 100644 --- a/src/widgets/text-toolbar.cpp +++ b/src/widgets/text-toolbar.cpp @@ -1562,8 +1562,7 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje g_object_set_data( holder, "TextFontFamilyAction", act ); // Change style of drop-down from menu to list -#if GTK_CHECK_VERSION(3,0,0) - GtkCssProvider *css_provider = gtk_css_provider_new(); + auto css_provider = gtk_css_provider_new(); gtk_css_provider_load_from_data(css_provider, "#TextFontFamilyAction_combobox {\n" " -GtkComboBox-appears-as-list: true;\n" @@ -1574,24 +1573,10 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje "}\n", -1, NULL); - GdkScreen *screen = gdk_screen_get_default(); + auto screen = gdk_screen_get_default(); gtk_style_context_add_provider_for_screen(screen, GTK_STYLE_PROVIDER(css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); -#else - gtk_rc_parse_string ( - "style \"dropdown-as-list-style\"\n" - "{\n" - " GtkComboBox::appears-as-list = 1\n" - "}\n" - "widget \"*.TextFontFamilyAction_combobox\" style \"dropdown-as-list-style\"" - "style \"fontfamily-separator-style\"\n" - "{\n" - " GtkWidget::wide-separators = 1\n" - " GtkWidget::separator-height = 6\n" - "}\n" - "widget \"*gtk-combobox-popup-window.GtkScrolledWindow.GtkTreeView\" style \"fontfamily-separator-style\""); -#endif } /* Font size */ -- cgit v1.2.3 From 1bd64804910f28ff16ea47e34baed41f22768fee Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Fri, 29 Jul 2016 14:35:20 +0100 Subject: ruler: Backport upstream patches (bzr r15023.2.9) --- src/widgets/ruler.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/widgets/ruler.cpp b/src/widgets/ruler.cpp index 92c2b611d..8b0a344f6 100644 --- a/src/widgets/ruler.cpp +++ b/src/widgets/ruler.cpp @@ -642,8 +642,14 @@ static gboolean sp_ruler_draw (GtkWidget *widget, cairo_t *cr) { - SPRuler *ruler = SP_RULER (widget); - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + SPRuler *ruler = SP_RULER (widget); + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + GtkStyleContext *context = gtk_widget_get_style_context (widget); + GtkAllocation allocation; + + gtk_widget_get_allocation (widget, &allocation); + gtk_render_background (context, cr, 0, 0, allocation.width, allocation.height); + gtk_render_frame (context, cr, 0, 0, allocation.width, allocation.height); sp_ruler_draw_ticks (ruler); @@ -669,7 +675,7 @@ sp_ruler_make_pixmap (SPRuler *ruler) priv->backing_store = gdk_window_create_similar_surface (gtk_widget_get_window (widget), - CAIRO_CONTENT_COLOR, + CAIRO_CONTENT_COLOR_ALPHA, allocation.width, allocation.height); @@ -1088,9 +1094,10 @@ sp_ruler_draw_ticks (SPRuler *ruler) cr = cairo_create (priv->backing_store); - gtk_render_background (context, cr, 0, 0, allocation.width, allocation.height); - gtk_render_frame (context, cr, 0, 0, allocation.width, allocation.height); - + cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); + cairo_paint (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + gtk_style_context_get_color (context, gtk_widget_get_state_flags (widget), &color); gdk_cairo_set_source_rgba (cr, &color); @@ -1319,9 +1326,6 @@ sp_ruler_get_pos_rect (SPRuler *ruler, rect.y = ROUND ((position - lower) * increment) + (ythickness - rect.height) / 2 - 1; } - rect.x += allocation.x; - rect.y += allocation.y; - return rect; } @@ -1344,18 +1348,21 @@ sp_ruler_queue_pos_redraw (SPRuler *ruler) { SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); const GdkRectangle rect = sp_ruler_get_pos_rect (ruler, priv->position); + GtkAllocation allocation; + + gtk_widget_get_allocation (GTK_WIDGET(ruler), &allocation); gtk_widget_queue_draw_area (GTK_WIDGET(ruler), - rect.x, - rect.y, + rect.x + allocation.x, + rect.y + allocation.y, rect.width, rect.height); if (priv->last_pos_rect.width != 0 || priv->last_pos_rect.height != 0) { gtk_widget_queue_draw_area (GTK_WIDGET(ruler), - priv->last_pos_rect.x, - priv->last_pos_rect.y, + priv->last_pos_rect.x + allocation.x, + priv->last_pos_rect.y + allocation.y, priv->last_pos_rect.width, priv->last_pos_rect.height); -- cgit v1.2.3 From cc54d0bc9da8aafcb3d4a6529d829f76f218dc29 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 4 Aug 2016 10:22:20 +0100 Subject: Fix Win32 build Fixed bugs: - https://launchpad.net/bugs/1609572 (bzr r15037) --- src/ui/dialog/filedialog.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/ui/dialog/filedialog.cpp b/src/ui/dialog/filedialog.cpp index ee673aecf..0d4fa5c84 100644 --- a/src/ui/dialog/filedialog.cpp +++ b/src/ui/dialog/filedialog.cpp @@ -15,7 +15,11 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "filedialogimpl-win32.h" +#ifdef WIN32 +# include "filedialogimpl-win32.h" +# include "preferences.h" +#endif + #include "filedialogimpl-gtkmm.h" #include "ui/dialog-events.h" -- cgit v1.2.3 From fa70c0e286d268ef3e35f2d08a0404dcbf02caa3 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 4 Aug 2016 20:01:10 +0100 Subject: Use C++11 unordered containers (bzr r15040) --- src/util/unordered-containers.h | 46 +++++------------------------------------ 1 file changed, 5 insertions(+), 41 deletions(-) (limited to 'src') diff --git a/src/util/unordered-containers.h b/src/util/unordered-containers.h index b92f2e7ea..0bda8191f 100644 --- a/src/util/unordered-containers.h +++ b/src/util/unordered-containers.h @@ -20,12 +20,11 @@ #ifndef DOXYGEN_SHOULD_SKIP_THIS -#if defined(HAVE_NATIVE_UNORDERED_SET) -# include -# include -# define INK_UNORDERED_SET std::unordered_set -# define INK_UNORDERED_MAP std::unordered_map -# define INK_HASH std::hash +#include +#include +#define INK_UNORDERED_SET std::unordered_set +#define INK_UNORDERED_MAP std::unordered_map +#define INK_HASH std::hash namespace std { template <> @@ -36,41 +35,6 @@ struct hash : public std::unary_function -# include -# define INK_UNORDERED_SET std::tr1::unordered_set -# define INK_UNORDERED_MAP std::tr1::unordered_map -# define INK_HASH std::tr1::hash - -namespace std { -namespace tr1 { -template <> -struct hash : public std::unary_function { - std::size_t operator()(Glib::ustring const &s) const { - return hash()(s.raw()); - } -}; -} // namespace tr1 -} // namespace std - -#elif defined(HAVE_BOOST_UNORDERED_SET) -# include -# include -# define INK_UNORDERED_SET boost::unordered_set -# define INK_UNORDERED_MAP boost::unordered_map -# define INK_HASH boost::hash - -namespace boost { -template <> -struct hash : public std::unary_function { - std::size_t operator()(Glib::ustring const &s) const { - return hash()(s.raw()); - } -}; -} // namespace boost -#endif - #else /// Name (with namespace) of the unordered set template. #define INK_UNORDERED_SET -- cgit v1.2.3 From a0cacd78d5d987eafa3739bb8f45587d82246780 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Fri, 5 Aug 2016 19:07:48 +0100 Subject: Split InkAction classes into separate files (bzr r15043) --- src/widgets/CMakeLists.txt | 6 + src/widgets/Makefile_insert | 6 + src/widgets/arc-toolbar.cpp | 3 +- src/widgets/box3d-toolbar.cpp | 2 +- src/widgets/calligraphy-toolbar.cpp | 1 + src/widgets/connector-toolbar.cpp | 3 +- src/widgets/dropper-toolbar.cpp | 2 +- src/widgets/eraser-toolbar.cpp | 4 +- src/widgets/gradient-toolbar.cpp | 4 +- src/widgets/ink-action.cpp | 440 +---------------------------------- src/widgets/ink-action.h | 124 +--------- src/widgets/ink-radio-action.cpp | 185 +++++++++++++++ src/widgets/ink-radio-action.h | 52 +++++ src/widgets/ink-toggle-action.cpp | 221 ++++++++++++++++++ src/widgets/ink-toggle-action.h | 53 +++++ src/widgets/ink-tool-menu-action.cpp | 49 ++++ src/widgets/ink-tool-menu-action.h | 52 +++++ src/widgets/lpe-toolbar.cpp | 3 +- src/widgets/measure-toolbar.cpp | 3 +- src/widgets/mesh-toolbar.cpp | 4 +- src/widgets/node-toolbar.cpp | 3 +- src/widgets/pencil-toolbar.cpp | 4 +- src/widgets/select-toolbar.cpp | 3 +- src/widgets/spray-toolbar.cpp | 3 +- src/widgets/star-toolbar.cpp | 3 +- src/widgets/text-toolbar.cpp | 3 +- src/widgets/toolbox.cpp | 1 + src/widgets/tweak-toolbar.cpp | 3 +- 28 files changed, 680 insertions(+), 560 deletions(-) create mode 100644 src/widgets/ink-radio-action.cpp create mode 100644 src/widgets/ink-radio-action.h create mode 100644 src/widgets/ink-toggle-action.cpp create mode 100644 src/widgets/ink-toggle-action.h create mode 100644 src/widgets/ink-tool-menu-action.cpp create mode 100644 src/widgets/ink-tool-menu-action.h (limited to 'src') diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index ba71b39f4..47ffe82ac 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -36,6 +36,9 @@ set(widgets_SRC image-menu-item.c ink-action.cpp ink-comboboxentry-action.cpp + ink-radio-action.cpp + ink-toggle-action.cpp + ink-tool-menu-action.cpp paint-selector.cpp ruler.cpp select-toolbar.cpp @@ -92,6 +95,9 @@ set(widgets_SRC image-menu-item.h ink-action.h ink-comboboxentry-action.h + ink-radio-action.h + ink-toggle-action.h + ink-tool-menu-action.h paint-selector.h ruler.h select-toolbar.h diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert index 8f10e1d56..7434a5394 100644 --- a/src/widgets/Makefile_insert +++ b/src/widgets/Makefile_insert @@ -50,6 +50,12 @@ ink_common_sources += \ widgets/ink-action.h \ widgets/ink-comboboxentry-action.cpp \ widgets/ink-comboboxentry-action.h \ + widgets/ink-radio-action.cpp \ + widgets/ink-radio-action.h \ + widgets/ink-toggle-action.cpp \ + widgets/ink-toggle-action.h \ + widgets/ink-tool-menu-action.cpp \ + widgets/ink-tool-menu-action.h \ widgets/lpe-toolbar.cpp \ widgets/lpe-toolbar.h \ widgets/measure-toolbar.cpp \ diff --git a/src/widgets/arc-toolbar.cpp b/src/widgets/arc-toolbar.cpp index 35c8c0308..81cde97d4 100644 --- a/src/widgets/arc-toolbar.cpp +++ b/src/widgets/arc-toolbar.cpp @@ -37,7 +37,8 @@ #include "widgets/ege-adjustment-action.h" #include "widgets/ege-output-action.h" #include "widgets/ege-select-one-action.h" -#include "widgets/ink-action.h" +#include "ink-action.h" +#include "ink-radio-action.h" #include "mod360.h" #include "selection.h" #include "sp-ellipse.h" diff --git a/src/widgets/box3d-toolbar.cpp b/src/widgets/box3d-toolbar.cpp index b8c67ee76..95de28cf2 100644 --- a/src/widgets/box3d-toolbar.cpp +++ b/src/widgets/box3d-toolbar.cpp @@ -37,7 +37,7 @@ #include "document-undo.h" #include "document.h" #include "widgets/ege-adjustment-action.h" -#include "widgets/ink-action.h" +#include "widgets/ink-toggle-action.h" #include "inkscape.h" #include "persp3d.h" #include "toolbox.h" diff --git a/src/widgets/calligraphy-toolbar.cpp b/src/widgets/calligraphy-toolbar.cpp index ba51499aa..031295ccd 100644 --- a/src/widgets/calligraphy-toolbar.cpp +++ b/src/widgets/calligraphy-toolbar.cpp @@ -37,6 +37,7 @@ #include "widgets/ege-adjustment-action.h" #include "widgets/ege-select-one-action.h" #include "widgets/ink-action.h" +#include "widgets/ink-toggle-action.h" #include "toolbox.h" #include "ui/icon-names.h" #include "ui/uxmanager.h" diff --git a/src/widgets/connector-toolbar.cpp b/src/widgets/connector-toolbar.cpp index f80f49db7..46493f3ae 100644 --- a/src/widgets/connector-toolbar.cpp +++ b/src/widgets/connector-toolbar.cpp @@ -38,7 +38,8 @@ #include "widgets/ege-adjustment-action.h" #include "enums.h" #include "graphlayout.h" -#include "widgets/ink-action.h" +#include "ink-action.h" +#include "ink-toggle-action.h" #include "inkscape.h" #include "sp-namedview.h" #include "toolbox.h" diff --git a/src/widgets/dropper-toolbar.cpp b/src/widgets/dropper-toolbar.cpp index f60955da5..4e26a99a0 100644 --- a/src/widgets/dropper-toolbar.cpp +++ b/src/widgets/dropper-toolbar.cpp @@ -33,7 +33,7 @@ #include "dropper-toolbar.h" #include "document-undo.h" #include "widgets/ege-output-action.h" -#include "widgets/ink-action.h" +#include "ink-toggle-action.h" #include "preferences.h" #include "widgets/spinbutton-events.h" diff --git a/src/widgets/eraser-toolbar.cpp b/src/widgets/eraser-toolbar.cpp index b30d542a6..7f710a777 100644 --- a/src/widgets/eraser-toolbar.cpp +++ b/src/widgets/eraser-toolbar.cpp @@ -37,7 +37,9 @@ #include "document-undo.h" #include "widgets/ege-adjustment-action.h" #include "widgets/ege-select-one-action.h" -#include "widgets/ink-action.h" +#include "ink-action.h" +#include "ink-radio-action.h" +#include "ink-toggle-action.h" #include "toolbox.h" #include "ui/icon-names.h" diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index 7e9223770..fd2eb7efe 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -27,7 +27,9 @@ #include "gradient-chemistry.h" #include "gradient-drag.h" #include "gradient-toolbar.h" -#include "widgets/ink-action.h" +#include "ink-action.h" +#include "ink-radio-action.h" +#include "ink-toggle-action.h" #include "macros.h" #include "selection.h" #include "sp-defs.h" diff --git a/src/widgets/ink-action.cpp b/src/widgets/ink-action.cpp index 501aeaa74..2f1bf94e4 100644 --- a/src/widgets/ink-action.cpp +++ b/src/widgets/ink-action.cpp @@ -205,433 +205,13 @@ static GtkWidget* ink_action_create_tool_item( GtkAction* action ) return item; } - - -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ - - -static void ink_toggle_action_finalize( GObject* obj ); -static void ink_toggle_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec ); -static void ink_toggle_action_set_property( GObject* obj, guint propId, const GValue *value, GParamSpec* pspec ); - -static GtkWidget* ink_toggle_action_create_menu_item( GtkAction* action ); -static GtkWidget* ink_toggle_action_create_tool_item( GtkAction* action ); - -static void ink_toggle_action_update_icon( InkToggleAction* action ); - -struct _InkToggleActionPrivate -{ - gchar* iconId; - Inkscape::IconSize iconSize; -}; - -#define INK_TOGGLE_ACTION_GET_PRIVATE( o ) ( G_TYPE_INSTANCE_GET_PRIVATE( (o), INK_TOGGLE_ACTION_TYPE, InkToggleActionPrivate ) ) - -G_DEFINE_TYPE(InkToggleAction, ink_toggle_action, GTK_TYPE_TOGGLE_ACTION); - -static void ink_toggle_action_class_init( InkToggleActionClass* klass ) -{ - if ( klass ) { - GObjectClass * objClass = G_OBJECT_CLASS( klass ); - - objClass->finalize = ink_toggle_action_finalize; - objClass->get_property = ink_toggle_action_get_property; - objClass->set_property = ink_toggle_action_set_property; - - klass->parent_class.parent_class.create_menu_item = ink_toggle_action_create_menu_item; - klass->parent_class.parent_class.create_tool_item = ink_toggle_action_create_tool_item; - /*klass->parent_class.connect_proxy = connect_proxy;*/ - /*klass->parent_class.disconnect_proxy = disconnect_proxy;*/ - - g_object_class_install_property( objClass, - PROP_INK_ID, - g_param_spec_string( "iconId", - "Icon ID", - "The id for the icon", - "", - (GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) ); - - g_object_class_install_property( objClass, - PROP_INK_SIZE, - g_param_spec_int( "iconSize", - "Icon Size", - "The size the icon", - (int)Inkscape::ICON_SIZE_MENU, - (int)99, - (int)Inkscape::ICON_SIZE_SMALL_TOOLBAR, - (GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) ); - - g_type_class_add_private( klass, sizeof(InkToggleActionClass) ); - } -} - -static void ink_toggle_action_init( InkToggleAction* action ) -{ - action->private_data = INK_TOGGLE_ACTION_GET_PRIVATE( action ); - action->private_data->iconId = 0; - action->private_data->iconSize = Inkscape::ICON_SIZE_SMALL_TOOLBAR; -} - -static void ink_toggle_action_finalize( GObject* obj ) -{ - InkToggleAction* action = INK_TOGGLE_ACTION( obj ); - - g_free( action->private_data->iconId ); - g_free( action->private_data ); - -} - -InkToggleAction* ink_toggle_action_new( const gchar *name, - const gchar *label, - const gchar *tooltip, - const gchar *inkId, - Inkscape::IconSize size, - SPAttributeEnum attr) -{ - GObject* obj = (GObject*)g_object_new( INK_TOGGLE_ACTION_TYPE, - "name", name, - "label", label, - "tooltip", tooltip, - "iconId", inkId, - "iconSize", Inkscape::getRegisteredIconSize(size), - //"SP_ATTR_INKSCAPE", attr, // Why doesn't this work and do I need to use g_object_set_data below? - NULL ); - - g_object_set_data(obj, "SP_ATTR_INKSCAPE", GINT_TO_POINTER(attr)); - InkToggleAction* action = INK_TOGGLE_ACTION( obj ); - - return action; -} - -static void ink_toggle_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec ) -{ - InkToggleAction* action = INK_TOGGLE_ACTION( obj ); - (void)action; - switch ( propId ) { - case PROP_INK_ID: - { - g_value_set_string( value, action->private_data->iconId ); - } - break; - - case PROP_INK_SIZE: - { - g_value_set_int( value, action->private_data->iconSize ); - } - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID( obj, propId, pspec ); - } -} - -void ink_toggle_action_set_property( GObject* obj, guint propId, const GValue *value, GParamSpec* pspec ) -{ - InkToggleAction* action = INK_TOGGLE_ACTION( obj ); - (void)action; - switch ( propId ) { - case PROP_INK_ID: - { - gchar* tmp = action->private_data->iconId; - action->private_data->iconId = g_value_dup_string( value ); - g_free( tmp ); - - ink_toggle_action_update_icon( action ); - } - break; - - case PROP_INK_SIZE: - { - action->private_data->iconSize = (Inkscape::IconSize)g_value_get_int( value ); - } - break; - - default: - { - G_OBJECT_WARN_INVALID_PROPERTY_ID( obj, propId, pspec ); - } - } -} - -static GtkWidget* ink_toggle_action_create_menu_item( GtkAction* action ) -{ - GtkWidget* item = GTK_TOGGLE_ACTION_CLASS(ink_toggle_action_parent_class)->parent_class.create_menu_item(action); - - return item; -} - -static GtkWidget* ink_toggle_action_create_tool_item( GtkAction* action ) -{ - InkToggleAction* act = INK_TOGGLE_ACTION( action ); - - GtkWidget* item = GTK_TOGGLE_ACTION_CLASS(ink_toggle_action_parent_class)->parent_class.create_tool_item(action); - if ( GTK_IS_TOOL_BUTTON(item) ) { - GtkToolButton* button = GTK_TOOL_BUTTON(item); - if ( act->private_data->iconId ) { - GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); - - gtk_widget_set_hexpand(child, FALSE); - gtk_widget_set_vexpand(child, FALSE); - gtk_tool_button_set_icon_widget(button, child); - } else { - gchar *label = 0; - g_object_get( G_OBJECT(action), "short_label", &label, NULL ); - gtk_tool_button_set_label( button, label ); - g_free( label ); - label = 0; - } - } else { - // For now trigger a warning but don't do anything else - GtkToolButton* button = GTK_TOOL_BUTTON(item); - (void)button; - } - gtk_widget_show_all( item ); - - return item; -} - - -static void ink_toggle_action_update_icon( InkToggleAction* action ) -{ - if ( action ) { - GSList* proxies = gtk_action_get_proxies( GTK_ACTION(action) ); - while ( proxies ) { - if ( GTK_IS_TOOL_ITEM(proxies->data) ) { - if ( GTK_IS_TOOL_BUTTON(proxies->data) ) { - GtkToolButton* button = GTK_TOOL_BUTTON(proxies->data); - - GtkWidget* child = sp_icon_new( action->private_data->iconSize, action->private_data->iconId ); - gtk_widget_set_hexpand(child, FALSE); - gtk_widget_set_vexpand(child, FALSE); - gtk_widget_show_all(child); - gtk_tool_button_set_icon_widget(button, child); - } - } - - proxies = g_slist_next( proxies ); - } - } -} - - -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ - - -static void ink_radio_action_finalize( GObject* obj ); -static void ink_radio_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec ); -static void ink_radio_action_set_property( GObject* obj, guint propId, const GValue *value, GParamSpec* pspec ); - -static GtkWidget* ink_radio_action_create_menu_item( GtkAction* action ); -static GtkWidget* ink_radio_action_create_tool_item( GtkAction* action ); - -struct _InkRadioActionPrivate -{ - gchar* iconId; - Inkscape::IconSize iconSize; -}; - -#define INK_RADIO_ACTION_GET_PRIVATE( o ) ( G_TYPE_INSTANCE_GET_PRIVATE( (o), INK_RADIO_ACTION_TYPE, InkRadioActionPrivate ) ) - -G_DEFINE_TYPE(InkRadioAction, ink_radio_action, GTK_TYPE_RADIO_ACTION); - -static void ink_radio_action_class_init( InkRadioActionClass* klass ) -{ - if ( klass ) { - GObjectClass * objClass = G_OBJECT_CLASS( klass ); - - objClass->finalize = ink_radio_action_finalize; - objClass->get_property = ink_radio_action_get_property; - objClass->set_property = ink_radio_action_set_property; - - klass->parent_class.parent_class.parent_class.create_menu_item = ink_radio_action_create_menu_item; - klass->parent_class.parent_class.parent_class.create_tool_item = ink_radio_action_create_tool_item; - /*klass->parent_class.connect_proxy = connect_proxy;*/ - /*klass->parent_class.disconnect_proxy = disconnect_proxy;*/ - - g_object_class_install_property( objClass, - PROP_INK_ID, - g_param_spec_string( "iconId", - "Icon ID", - "The id for the icon", - "", - (GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) ); - - g_object_class_install_property( objClass, - PROP_INK_SIZE, - g_param_spec_int( "iconSize", - "Icon Size", - "The size the icon", - (int)Inkscape::ICON_SIZE_MENU, - (int)Inkscape::ICON_SIZE_DECORATION, - (int)Inkscape::ICON_SIZE_SMALL_TOOLBAR, - (GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) ); - - g_type_class_add_private( klass, sizeof(InkRadioActionClass) ); - } -} - -static void ink_radio_action_init( InkRadioAction* action ) -{ - action->private_data = INK_RADIO_ACTION_GET_PRIVATE( action ); - action->private_data->iconId = 0; - action->private_data->iconSize = Inkscape::ICON_SIZE_SMALL_TOOLBAR; -} - -static void ink_radio_action_finalize( GObject* obj ) -{ - InkRadioAction* action = INK_RADIO_ACTION( obj ); - - g_free( action->private_data->iconId ); - g_free( action->private_data ); - -} - -InkRadioAction* ink_radio_action_new( const gchar *name, - const gchar *label, - const gchar *tooltip, - const gchar *inkId, - Inkscape::IconSize size ) -{ - GObject* obj = (GObject*)g_object_new( INK_RADIO_ACTION_TYPE, - "name", name, - "label", label, - "tooltip", tooltip, - "iconId", inkId, - "iconSize", Inkscape::getRegisteredIconSize(size), - NULL ); - - InkRadioAction* action = INK_RADIO_ACTION( obj ); - - return action; -} - -static void ink_radio_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec ) -{ - InkRadioAction* action = INK_RADIO_ACTION( obj ); - (void)action; - switch ( propId ) { - case PROP_INK_ID: - { - g_value_set_string( value, action->private_data->iconId ); - } - break; - - case PROP_INK_SIZE: - { - g_value_set_int( value, action->private_data->iconSize ); - } - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID( obj, propId, pspec ); - } -} - -void ink_radio_action_set_property( GObject* obj, guint propId, const GValue *value, GParamSpec* pspec ) -{ - InkRadioAction* action = INK_RADIO_ACTION( obj ); - (void)action; - switch ( propId ) { - case PROP_INK_ID: - { - gchar* tmp = action->private_data->iconId; - action->private_data->iconId = g_value_dup_string( value ); - g_free( tmp ); - } - break; - - case PROP_INK_SIZE: - { - action->private_data->iconSize = (Inkscape::IconSize)g_value_get_int( value ); - } - break; - - default: - { - G_OBJECT_WARN_INVALID_PROPERTY_ID( obj, propId, pspec ); - } - } -} - -static GtkWidget* ink_radio_action_create_menu_item( GtkAction* action ) -{ - GtkWidget* item = GTK_RADIO_ACTION_CLASS(ink_radio_action_parent_class)->parent_class.parent_class.create_menu_item(action); - - return item; -} - -static GtkWidget* ink_radio_action_create_tool_item( GtkAction* action ) -{ - InkRadioAction* act = INK_RADIO_ACTION( action ); - GtkWidget* item = GTK_RADIO_ACTION_CLASS(ink_radio_action_parent_class)->parent_class.parent_class.create_tool_item(action); - - if ( act->private_data->iconId ) { - if ( GTK_IS_TOOL_BUTTON(item) ) { - GtkToolButton* button = GTK_TOOL_BUTTON(item); - - GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); - gtk_widget_set_hexpand(child, FALSE); - gtk_widget_set_vexpand(child, FALSE); - gtk_tool_button_set_icon_widget(button, child); - } else { - // For now trigger a warning but don't do anything else - GtkToolButton* button = GTK_TOOL_BUTTON(item); - (void)button; - } - } - - // TODO investigate if needed - gtk_widget_show_all( item ); - - return item; -} - - -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ - -// ToolMenu Action is happily derived from http://www.gtkforums.com/viewtopic.php?t=4215 - -G_DEFINE_TYPE(InkToolMenuAction, ink_tool_menu_action, INK_ACTION_TYPE); - -static void -ink_tool_menu_action_class_init (InkToolMenuActionClass *klass) -{ - GtkActionClass *action_class = GTK_ACTION_CLASS (klass); - action_class->toolbar_item_type = GTK_TYPE_MENU_TOOL_BUTTON; -} - -static void -ink_tool_menu_action_init (InkToolMenuAction* /*tma*/) -{ -} - -InkToolMenuAction * -ink_tool_menu_action_new (const gchar *name, - const gchar *label, - const gchar *tooltip, - const gchar *inkId, - Inkscape::IconSize size ) -{ - g_return_val_if_fail (name != NULL, NULL); - - GObject* obj = (GObject*)g_object_new( INK_TOOL_MENU_ACTION_TYPE, - "name", name, - "label", label, - "tooltip", tooltip, - "iconId", inkId, - "iconSize", size, - NULL ); - - InkToolMenuAction* action = INK_TOOL_MENU_ACTION( obj ); - - return action; -} +/* + 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 : diff --git a/src/widgets/ink-action.h b/src/widgets/ink-action.h index ac5cb9873..738212c61 100644 --- a/src/widgets/ink-action.h +++ b/src/widgets/ink-action.h @@ -1,7 +1,6 @@ #ifndef SEEN_INK_ACTION #define SEEN_INK_ACTION - #include #include "icon-size.h" #include "attributes.h" @@ -41,119 +40,16 @@ InkAction* ink_action_new( const gchar *name, Inkscape::IconSize size ); -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ - - -#define INK_TOGGLE_ACTION_TYPE ( ink_toggle_action_get_type() ) -#define INK_TOGGLE_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_CAST( (obj), INK_TOGGLE_ACTION_TYPE, InkToggleAction) ) -#define INK_TOGGLE_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_CAST( (klass), INK_TOGGLE_ACTION_TYPE, InkToggleActionClass) ) -#define IS_INK_TOGGLE_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_TYPE( (obj), INK_TOGGLE_ACTION_TYPE) ) -#define IS_INK_TOGGLE_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_TYPE( (klass), INK_TOGGLE_ACTION_TYPE) ) -#define INK_TOGGLE_ACTION_GET_CLASS( obj ) ( G_TYPE_INSTANCE_GET_CLASS( (obj), INK_TOGGLE_ACTION_TYPE, InkToggleActionClass) ) - -typedef struct _InkToggleAction InkToggleAction; -typedef struct _InkToggleActionClass InkToggleActionClass; -typedef struct _InkToggleActionPrivate InkToggleActionPrivate; - -struct _InkToggleAction -{ - GtkToggleAction action; - InkToggleActionPrivate *private_data; -}; - -struct _InkToggleActionClass -{ - GtkToggleActionClass parent_class; -}; - -GType ink_toggle_action_get_type( void ); - -InkToggleAction* ink_toggle_action_new( const gchar *name, - const gchar *label, - const gchar *tooltip, - const gchar *inkId, - Inkscape::IconSize size, - SPAttributeEnum attr = SP_ATTR_INVALID); - - -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ - - -#define INK_RADIO_ACTION_TYPE ( ink_radio_action_get_type() ) -#define INK_RADIO_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_CAST( (obj), INK_RADIO_ACTION_TYPE, InkRadioAction) ) -#define INK_RADIO_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_CAST( (klass), INK_RADIO_ACTION_TYPE, InkRadioActionClass) ) -#define IS_INK_RADIO_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_TYPE( (obj), INK_RADIO_ACTION_TYPE) ) -#define IS_INK_RADIO_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_TYPE( (klass), INK_RADIO_ACTION_TYPE) ) -#define INK_RADIO_ACTION_GET_CLASS( obj ) ( G_TYPE_INSTANCE_GET_CLASS( (obj), INK_RADIO_ACTION_TYPE, InkRadioActionClass) ) - -typedef struct _InkRadioAction InkRadioAction; -typedef struct _InkRadioActionClass InkRadioActionClass; -typedef struct _InkRadioActionPrivate InkRadioActionPrivate; - -struct _InkRadioAction -{ - GtkRadioAction action; - InkRadioActionPrivate *private_data; -}; - -struct _InkRadioActionClass -{ - GtkRadioActionClass parent_class; -}; - -GType ink_radio_action_get_type( void ); - -InkRadioAction* ink_radio_action_new( const gchar *name, - const gchar *label, - const gchar *tooltip, - const gchar *inkId, - Inkscape::IconSize size ); - - -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ -/* --------------------------------------------------------------- */ - -// ToolMenu Action is happily derived from http://www.gtkforums.com/viewtopic.php?t=4215 - -#define INK_TOOL_MENU_ACTION_TYPE ( ink_tool_menu_action_get_type() ) -#define INK_TOOL_MENU_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_CAST( (obj), INK_TOOL_MENU_ACTION_TYPE, InkToolMenuAction) ) -#define INK_TOOL_MENU_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_CAST( (klass), INK_TOOL_MENU_ACTION_TYPE, InkToolMenuActionClass) ) -#define IS_INK_TOOL_MENU_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_TYPE( (obj), INK_TOOL_MENU_ACTION_TYPE) ) -#define IS_INK_TOOL_MENU_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_TYPE( (klass), INK_TOOL_MENU_ACTION_TYPE) ) -#define INK_TOOL_MENU_ACTION_GET_CLASS( obj ) ( G_TYPE_INSTANCE_GET_CLASS( (obj), INK_TOOL_MENU_ACTION_TYPE, InkToolMenuActionClass) ) - -typedef struct _InkToolMenuAction InkToolMenuAction; -typedef struct _InkToolMenuActionClass InkToolMenuActionClass; -typedef struct _InkToolMenuActionPrivate InkToolMenuActionPrivate; - -struct _InkToolMenuAction -{ - InkAction action; -}; - -struct _InkToolMenuActionClass -{ - InkActionClass parent_class; -}; - -GType ink_tool_menu_action_get_type( void ); - -InkToolMenuAction* ink_tool_menu_action_new( const gchar *name, - const gchar *label, - const gchar *tooltip, - const gchar *inkId, - Inkscape::IconSize size ); - - - G_END_DECLS #endif /* SEEN_INK_ACTION */ +/* + 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 : diff --git a/src/widgets/ink-radio-action.cpp b/src/widgets/ink-radio-action.cpp new file mode 100644 index 000000000..2113819c3 --- /dev/null +++ b/src/widgets/ink-radio-action.cpp @@ -0,0 +1,185 @@ +#include "ink-radio-action.h" + +static void ink_radio_action_finalize( GObject* obj ); +static void ink_radio_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec ); +static void ink_radio_action_set_property( GObject* obj, guint propId, const GValue *value, GParamSpec* pspec ); + +static GtkWidget* ink_radio_action_create_menu_item( GtkAction* action ); +static GtkWidget* ink_radio_action_create_tool_item( GtkAction* action ); + +struct _InkRadioActionPrivate +{ + gchar* iconId; + Inkscape::IconSize iconSize; +}; + +#define INK_RADIO_ACTION_GET_PRIVATE( o ) ( G_TYPE_INSTANCE_GET_PRIVATE( (o), INK_RADIO_ACTION_TYPE, InkRadioActionPrivate ) ) + +G_DEFINE_TYPE(InkRadioAction, ink_radio_action, GTK_TYPE_RADIO_ACTION); + +enum { + PROP_INK_ID = 1, + PROP_INK_SIZE +}; + +static void ink_radio_action_class_init( InkRadioActionClass* klass ) +{ + if ( klass ) { + GObjectClass * objClass = G_OBJECT_CLASS( klass ); + + objClass->finalize = ink_radio_action_finalize; + objClass->get_property = ink_radio_action_get_property; + objClass->set_property = ink_radio_action_set_property; + + klass->parent_class.parent_class.parent_class.create_menu_item = ink_radio_action_create_menu_item; + klass->parent_class.parent_class.parent_class.create_tool_item = ink_radio_action_create_tool_item; + /*klass->parent_class.connect_proxy = connect_proxy;*/ + /*klass->parent_class.disconnect_proxy = disconnect_proxy;*/ + + g_object_class_install_property( objClass, + PROP_INK_ID, + g_param_spec_string( "iconId", + "Icon ID", + "The id for the icon", + "", + (GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) ); + + g_object_class_install_property( objClass, + PROP_INK_SIZE, + g_param_spec_int( "iconSize", + "Icon Size", + "The size the icon", + (int)Inkscape::ICON_SIZE_MENU, + (int)Inkscape::ICON_SIZE_DECORATION, + (int)Inkscape::ICON_SIZE_SMALL_TOOLBAR, + (GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) ); + + g_type_class_add_private( klass, sizeof(InkRadioActionClass) ); + } +} + +static void ink_radio_action_init( InkRadioAction* action ) +{ + action->private_data = INK_RADIO_ACTION_GET_PRIVATE( action ); + action->private_data->iconId = 0; + action->private_data->iconSize = Inkscape::ICON_SIZE_SMALL_TOOLBAR; +} + +static void ink_radio_action_finalize( GObject* obj ) +{ + InkRadioAction* action = INK_RADIO_ACTION( obj ); + + g_free( action->private_data->iconId ); + g_free( action->private_data ); + +} + +InkRadioAction* ink_radio_action_new( const gchar *name, + const gchar *label, + const gchar *tooltip, + const gchar *inkId, + Inkscape::IconSize size ) +{ + GObject* obj = (GObject*)g_object_new( INK_RADIO_ACTION_TYPE, + "name", name, + "label", label, + "tooltip", tooltip, + "iconId", inkId, + "iconSize", Inkscape::getRegisteredIconSize(size), + NULL ); + + InkRadioAction* action = INK_RADIO_ACTION( obj ); + + return action; +} + +static void ink_radio_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec ) +{ + InkRadioAction* action = INK_RADIO_ACTION( obj ); + (void)action; + switch ( propId ) { + case PROP_INK_ID: + { + g_value_set_string( value, action->private_data->iconId ); + } + break; + + case PROP_INK_SIZE: + { + g_value_set_int( value, action->private_data->iconSize ); + } + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID( obj, propId, pspec ); + } +} + +void ink_radio_action_set_property( GObject* obj, guint propId, const GValue *value, GParamSpec* pspec ) +{ + InkRadioAction* action = INK_RADIO_ACTION( obj ); + (void)action; + switch ( propId ) { + case PROP_INK_ID: + { + gchar* tmp = action->private_data->iconId; + action->private_data->iconId = g_value_dup_string( value ); + g_free( tmp ); + } + break; + + case PROP_INK_SIZE: + { + action->private_data->iconSize = (Inkscape::IconSize)g_value_get_int( value ); + } + break; + + default: + { + G_OBJECT_WARN_INVALID_PROPERTY_ID( obj, propId, pspec ); + } + } +} + +static GtkWidget* ink_radio_action_create_menu_item( GtkAction* action ) +{ + GtkWidget* item = GTK_RADIO_ACTION_CLASS(ink_radio_action_parent_class)->parent_class.parent_class.create_menu_item(action); + + return item; +} + +static GtkWidget* ink_radio_action_create_tool_item( GtkAction* action ) +{ + InkRadioAction* act = INK_RADIO_ACTION( action ); + GtkWidget* item = GTK_RADIO_ACTION_CLASS(ink_radio_action_parent_class)->parent_class.parent_class.create_tool_item(action); + + if ( act->private_data->iconId ) { + if ( GTK_IS_TOOL_BUTTON(item) ) { + GtkToolButton* button = GTK_TOOL_BUTTON(item); + + GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); + gtk_widget_set_hexpand(child, FALSE); + gtk_widget_set_vexpand(child, FALSE); + gtk_tool_button_set_icon_widget(button, child); + } else { + // For now trigger a warning but don't do anything else + GtkToolButton* button = GTK_TOOL_BUTTON(item); + (void)button; + } + } + + // TODO investigate if needed + gtk_widget_show_all( item ); + + return item; +} +/* + 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 : diff --git a/src/widgets/ink-radio-action.h b/src/widgets/ink-radio-action.h new file mode 100644 index 000000000..c1f059c4f --- /dev/null +++ b/src/widgets/ink-radio-action.h @@ -0,0 +1,52 @@ +#ifndef INK_RADIO_ACTION_H +#define INK_RADIO_ACTION_H + +#include + +#include "icon.h" + +G_BEGIN_DECLS + +#define INK_RADIO_ACTION_TYPE ( ink_radio_action_get_type() ) +#define INK_RADIO_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_CAST( (obj), INK_RADIO_ACTION_TYPE, InkRadioAction) ) +#define INK_RADIO_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_CAST( (klass), INK_RADIO_ACTION_TYPE, InkRadioActionClass) ) +#define IS_INK_RADIO_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_TYPE( (obj), INK_RADIO_ACTION_TYPE) ) +#define IS_INK_RADIO_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_TYPE( (klass), INK_RADIO_ACTION_TYPE) ) +#define INK_RADIO_ACTION_GET_CLASS( obj ) ( G_TYPE_INSTANCE_GET_CLASS( (obj), INK_RADIO_ACTION_TYPE, InkRadioActionClass) ) + +typedef struct _InkRadioAction InkRadioAction; +typedef struct _InkRadioActionClass InkRadioActionClass; +typedef struct _InkRadioActionPrivate InkRadioActionPrivate; + +struct _InkRadioAction +{ + GtkRadioAction action; + InkRadioActionPrivate *private_data; +}; + +struct _InkRadioActionClass +{ + GtkRadioActionClass parent_class; +}; + +GType ink_radio_action_get_type( void ); + +InkRadioAction* ink_radio_action_new( const gchar *name, + const gchar *label, + const gchar *tooltip, + const gchar *inkId, + Inkscape::IconSize size ); + +G_END_DECLS + +#endif // INK_RADIO_ACTION_H +/* + 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 : diff --git a/src/widgets/ink-toggle-action.cpp b/src/widgets/ink-toggle-action.cpp new file mode 100644 index 000000000..3eed974dc --- /dev/null +++ b/src/widgets/ink-toggle-action.cpp @@ -0,0 +1,221 @@ +#include "ink-toggle-action.h" +#include "icon.h" + +static void ink_toggle_action_finalize( GObject* obj ); +static void ink_toggle_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec ); +static void ink_toggle_action_set_property( GObject* obj, guint propId, const GValue *value, GParamSpec* pspec ); + +static GtkWidget* ink_toggle_action_create_menu_item( GtkAction* action ); +static GtkWidget* ink_toggle_action_create_tool_item( GtkAction* action ); + +static void ink_toggle_action_update_icon( InkToggleAction* action ); + +struct _InkToggleActionPrivate +{ + gchar* iconId; + Inkscape::IconSize iconSize; +}; + +#define INK_TOGGLE_ACTION_GET_PRIVATE( o ) ( G_TYPE_INSTANCE_GET_PRIVATE( (o), INK_TOGGLE_ACTION_TYPE, InkToggleActionPrivate ) ) + +G_DEFINE_TYPE(InkToggleAction, ink_toggle_action, GTK_TYPE_TOGGLE_ACTION); + +enum { + PROP_INK_ID = 1, + PROP_INK_SIZE +}; + +static void ink_toggle_action_class_init( InkToggleActionClass* klass ) +{ + if ( klass ) { + GObjectClass * objClass = G_OBJECT_CLASS( klass ); + + objClass->finalize = ink_toggle_action_finalize; + objClass->get_property = ink_toggle_action_get_property; + objClass->set_property = ink_toggle_action_set_property; + + klass->parent_class.parent_class.create_menu_item = ink_toggle_action_create_menu_item; + klass->parent_class.parent_class.create_tool_item = ink_toggle_action_create_tool_item; + /*klass->parent_class.connect_proxy = connect_proxy;*/ + /*klass->parent_class.disconnect_proxy = disconnect_proxy;*/ + + g_object_class_install_property( objClass, + PROP_INK_ID, + g_param_spec_string( "iconId", + "Icon ID", + "The id for the icon", + "", + (GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) ); + + g_object_class_install_property( objClass, + PROP_INK_SIZE, + g_param_spec_int( "iconSize", + "Icon Size", + "The size the icon", + (int)Inkscape::ICON_SIZE_MENU, + (int)99, + (int)Inkscape::ICON_SIZE_SMALL_TOOLBAR, + (GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) ); + + g_type_class_add_private( klass, sizeof(InkToggleActionClass) ); + } +} + +static void ink_toggle_action_init( InkToggleAction* action ) +{ + action->private_data = INK_TOGGLE_ACTION_GET_PRIVATE( action ); + action->private_data->iconId = 0; + action->private_data->iconSize = Inkscape::ICON_SIZE_SMALL_TOOLBAR; +} + +static void ink_toggle_action_finalize( GObject* obj ) +{ + InkToggleAction* action = INK_TOGGLE_ACTION( obj ); + + g_free( action->private_data->iconId ); + g_free( action->private_data ); + +} + +InkToggleAction* ink_toggle_action_new( const gchar *name, + const gchar *label, + const gchar *tooltip, + const gchar *inkId, + Inkscape::IconSize size, + SPAttributeEnum attr) +{ + GObject* obj = (GObject*)g_object_new( INK_TOGGLE_ACTION_TYPE, + "name", name, + "label", label, + "tooltip", tooltip, + "iconId", inkId, + "iconSize", Inkscape::getRegisteredIconSize(size), + //"SP_ATTR_INKSCAPE", attr, // Why doesn't this work and do I need to use g_object_set_data below? + NULL ); + + g_object_set_data(obj, "SP_ATTR_INKSCAPE", GINT_TO_POINTER(attr)); + InkToggleAction* action = INK_TOGGLE_ACTION( obj ); + + return action; +} + +static void ink_toggle_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec ) +{ + InkToggleAction* action = INK_TOGGLE_ACTION( obj ); + (void)action; + switch ( propId ) { + case PROP_INK_ID: + { + g_value_set_string( value, action->private_data->iconId ); + } + break; + + case PROP_INK_SIZE: + { + g_value_set_int( value, action->private_data->iconSize ); + } + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID( obj, propId, pspec ); + } +} + +void ink_toggle_action_set_property( GObject* obj, guint propId, const GValue *value, GParamSpec* pspec ) +{ + InkToggleAction* action = INK_TOGGLE_ACTION( obj ); + (void)action; + switch ( propId ) { + case PROP_INK_ID: + { + gchar* tmp = action->private_data->iconId; + action->private_data->iconId = g_value_dup_string( value ); + g_free( tmp ); + + ink_toggle_action_update_icon( action ); + } + break; + + case PROP_INK_SIZE: + { + action->private_data->iconSize = (Inkscape::IconSize)g_value_get_int( value ); + } + break; + + default: + { + G_OBJECT_WARN_INVALID_PROPERTY_ID( obj, propId, pspec ); + } + } +} + +static GtkWidget* ink_toggle_action_create_menu_item( GtkAction* action ) +{ + GtkWidget* item = GTK_TOGGLE_ACTION_CLASS(ink_toggle_action_parent_class)->parent_class.create_menu_item(action); + + return item; +} + +static GtkWidget* ink_toggle_action_create_tool_item( GtkAction* action ) +{ + InkToggleAction* act = INK_TOGGLE_ACTION( action ); + + GtkWidget* item = GTK_TOGGLE_ACTION_CLASS(ink_toggle_action_parent_class)->parent_class.create_tool_item(action); + if ( GTK_IS_TOOL_BUTTON(item) ) { + GtkToolButton* button = GTK_TOOL_BUTTON(item); + if ( act->private_data->iconId ) { + GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); + + gtk_widget_set_hexpand(child, FALSE); + gtk_widget_set_vexpand(child, FALSE); + gtk_tool_button_set_icon_widget(button, child); + } else { + gchar *label = 0; + g_object_get( G_OBJECT(action), "short_label", &label, NULL ); + gtk_tool_button_set_label( button, label ); + g_free( label ); + label = 0; + } + } else { + // For now trigger a warning but don't do anything else + GtkToolButton* button = GTK_TOOL_BUTTON(item); + (void)button; + } + gtk_widget_show_all( item ); + + return item; +} + + +static void ink_toggle_action_update_icon( InkToggleAction* action ) +{ + if ( action ) { + GSList* proxies = gtk_action_get_proxies( GTK_ACTION(action) ); + while ( proxies ) { + if ( GTK_IS_TOOL_ITEM(proxies->data) ) { + if ( GTK_IS_TOOL_BUTTON(proxies->data) ) { + GtkToolButton* button = GTK_TOOL_BUTTON(proxies->data); + + GtkWidget* child = sp_icon_new( action->private_data->iconSize, action->private_data->iconId ); + gtk_widget_set_hexpand(child, FALSE); + gtk_widget_set_vexpand(child, FALSE); + gtk_widget_show_all(child); + gtk_tool_button_set_icon_widget(button, child); + } + } + + proxies = g_slist_next( proxies ); + } + } +} + +/* + 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 : diff --git a/src/widgets/ink-toggle-action.h b/src/widgets/ink-toggle-action.h new file mode 100644 index 000000000..8e9d5e257 --- /dev/null +++ b/src/widgets/ink-toggle-action.h @@ -0,0 +1,53 @@ +#ifndef INK_TOGGLE_ACTION_H +#define INK_TOGGLE_ACTION_H + +#include + +#include "attributes.h" +#include "icon-size.h" + +G_BEGIN_DECLS +#define INK_TOGGLE_ACTION_TYPE ( ink_toggle_action_get_type() ) +#define INK_TOGGLE_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_CAST( (obj), INK_TOGGLE_ACTION_TYPE, InkToggleAction) ) +#define INK_TOGGLE_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_CAST( (klass), INK_TOGGLE_ACTION_TYPE, InkToggleActionClass) ) +#define IS_INK_TOGGLE_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_TYPE( (obj), INK_TOGGLE_ACTION_TYPE) ) +#define IS_INK_TOGGLE_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_TYPE( (klass), INK_TOGGLE_ACTION_TYPE) ) +#define INK_TOGGLE_ACTION_GET_CLASS( obj ) ( G_TYPE_INSTANCE_GET_CLASS( (obj), INK_TOGGLE_ACTION_TYPE, InkToggleActionClass) ) + +typedef struct _InkToggleAction InkToggleAction; +typedef struct _InkToggleActionClass InkToggleActionClass; +typedef struct _InkToggleActionPrivate InkToggleActionPrivate; + +struct _InkToggleAction +{ + GtkToggleAction action; + InkToggleActionPrivate *private_data; +}; + +struct _InkToggleActionClass +{ + GtkToggleActionClass parent_class; +}; + +GType ink_toggle_action_get_type( void ); + +InkToggleAction* ink_toggle_action_new( const gchar *name, + const gchar *label, + const gchar *tooltip, + const gchar *inkId, + Inkscape::IconSize size, + SPAttributeEnum attr = SP_ATTR_INVALID); + +G_END_DECLS + +#endif // INK_TOGGLE_ACTION_H +/* + 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 : diff --git a/src/widgets/ink-tool-menu-action.cpp b/src/widgets/ink-tool-menu-action.cpp new file mode 100644 index 000000000..29d8dc92f --- /dev/null +++ b/src/widgets/ink-tool-menu-action.cpp @@ -0,0 +1,49 @@ +#include "ink-tool-menu-action.h" + +// ToolMenu Action is happily derived from http://www.gtkforums.com/viewtopic.php?t=4215 + +G_DEFINE_TYPE(InkToolMenuAction, ink_tool_menu_action, INK_ACTION_TYPE); + +static void +ink_tool_menu_action_class_init (InkToolMenuActionClass *klass) +{ + GtkActionClass *action_class = GTK_ACTION_CLASS (klass); + action_class->toolbar_item_type = GTK_TYPE_MENU_TOOL_BUTTON; +} + +static void +ink_tool_menu_action_init (InkToolMenuAction* /*tma*/) +{ +} + +InkToolMenuAction * +ink_tool_menu_action_new (const gchar *name, + const gchar *label, + const gchar *tooltip, + const gchar *inkId, + Inkscape::IconSize size ) +{ + g_return_val_if_fail (name != NULL, NULL); + + GObject* obj = (GObject*)g_object_new( INK_TOOL_MENU_ACTION_TYPE, + "name", name, + "label", label, + "tooltip", tooltip, + "iconId", inkId, + "iconSize", size, + NULL ); + + InkToolMenuAction* action = INK_TOOL_MENU_ACTION( obj ); + + return action; +} +/* + 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 : diff --git a/src/widgets/ink-tool-menu-action.h b/src/widgets/ink-tool-menu-action.h new file mode 100644 index 000000000..be04489d3 --- /dev/null +++ b/src/widgets/ink-tool-menu-action.h @@ -0,0 +1,52 @@ +#ifndef INK_TOOL_MENU_ACTION_H +#define INK_TOOL_MENU_ACTION_H + +#include "ink-action.h" + +// ToolMenu Action is happily derived from http://www.gtkforums.com/viewtopic.php?t=4215 + +G_BEGIN_DECLS + +#define INK_TOOL_MENU_ACTION_TYPE ( ink_tool_menu_action_get_type() ) +#define INK_TOOL_MENU_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_CAST( (obj), INK_TOOL_MENU_ACTION_TYPE, InkToolMenuAction) ) +#define INK_TOOL_MENU_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_CAST( (klass), INK_TOOL_MENU_ACTION_TYPE, InkToolMenuActionClass) ) +#define IS_INK_TOOL_MENU_ACTION( obj ) ( G_TYPE_CHECK_INSTANCE_TYPE( (obj), INK_TOOL_MENU_ACTION_TYPE) ) +#define IS_INK_TOOL_MENU_ACTION_CLASS( klass ) ( G_TYPE_CHECK_CLASS_TYPE( (klass), INK_TOOL_MENU_ACTION_TYPE) ) +#define INK_TOOL_MENU_ACTION_GET_CLASS( obj ) ( G_TYPE_INSTANCE_GET_CLASS( (obj), INK_TOOL_MENU_ACTION_TYPE, InkToolMenuActionClass) ) + +typedef struct _InkToolMenuAction InkToolMenuAction; +typedef struct _InkToolMenuActionClass InkToolMenuActionClass; +typedef struct _InkToolMenuActionPrivate InkToolMenuActionPrivate; + +struct _InkToolMenuAction +{ + InkAction action; +}; + +struct _InkToolMenuActionClass +{ + InkActionClass parent_class; +}; + +GType ink_tool_menu_action_get_type( void ); + +InkToolMenuAction* ink_tool_menu_action_new( const gchar *name, + const gchar *label, + const gchar *tooltip, + const gchar *inkId, + Inkscape::IconSize size ); + +G_END_DECLS + +#endif // INK_TOOL_MENU_ACTION_H + +/* + 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 : diff --git a/src/widgets/lpe-toolbar.cpp b/src/widgets/lpe-toolbar.cpp index d44983a15..5df5fde70 100644 --- a/src/widgets/lpe-toolbar.cpp +++ b/src/widgets/lpe-toolbar.cpp @@ -34,7 +34,8 @@ #include "widgets/ege-select-one-action.h" #include "helper/action-context.h" #include "helper/action.h" -#include "widgets/ink-action.h" +#include "ink-radio-action.h" +#include "ink-toggle-action.h" #include "ui/tools-switch.h" #include "ui/tools/lpe-tool.h" #include "ui/widget/unit-tracker.h" diff --git a/src/widgets/measure-toolbar.cpp b/src/widgets/measure-toolbar.cpp index 53790cfac..a8c974bbc 100644 --- a/src/widgets/measure-toolbar.cpp +++ b/src/widgets/measure-toolbar.cpp @@ -39,7 +39,8 @@ #include "widgets/ege-adjustment-action.h" #include "widgets/ege-output-action.h" #include "toolbox.h" -#include "widgets/ink-action.h" +#include "ink-action.h" +#include "ink-toggle-action.h" #include "ui/icon-names.h" #include "ui/tools/measure-tool.h" #include "ui/widget/unit-tracker.h" diff --git a/src/widgets/mesh-toolbar.cpp b/src/widgets/mesh-toolbar.cpp index 1e5c12d41..3bc6cb288 100644 --- a/src/widgets/mesh-toolbar.cpp +++ b/src/widgets/mesh-toolbar.cpp @@ -47,7 +47,9 @@ #include "widgets/ege-adjustment-action.h" #include "widgets/ege-select-one-action.h" -#include "widgets/ink-action.h" +#include "ink-action.h" +#include "ink-radio-action.h" +#include "ink-toggle-action.h" #include "sp-stop.h" #include "svg/css-ostringstream.h" diff --git a/src/widgets/node-toolbar.cpp b/src/widgets/node-toolbar.cpp index ed3e33acc..31efaa0b4 100644 --- a/src/widgets/node-toolbar.cpp +++ b/src/widgets/node-toolbar.cpp @@ -35,7 +35,8 @@ #include "desktop.h" #include "document-undo.h" #include "widgets/ege-adjustment-action.h" -#include "widgets/ink-action.h" +#include "ink-toggle-action.h" +#include "ink-tool-menu-action.h" #include "inkscape.h" #include "selection-chemistry.h" #include "sp-namedview.h" diff --git a/src/widgets/pencil-toolbar.cpp b/src/widgets/pencil-toolbar.cpp index d402cc714..32cdb0a7d 100644 --- a/src/widgets/pencil-toolbar.cpp +++ b/src/widgets/pencil-toolbar.cpp @@ -35,7 +35,9 @@ #include "desktop.h" #include "widgets/ege-adjustment-action.h" #include "widgets/ege-select-one-action.h" -#include "widgets/ink-action.h" +#include "ink-action.h" +#include "ink-radio-action.h" +#include "ink-toggle-action.h" #include "toolbox.h" #include "ui/tools-switch.h" #include "ui/icon-names.h" diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp index fde5a95cd..81fb2371b 100644 --- a/src/widgets/select-toolbar.cpp +++ b/src/widgets/select-toolbar.cpp @@ -29,7 +29,8 @@ #include "widgets/ege-adjustment-action.h" #include "helper/action-context.h" #include "helper/action.h" -#include "widgets/ink-action.h" +#include "ink-action.h" +#include "ink-toggle-action.h" #include "inkscape.h" #include "message-stack.h" #include "selection-chemistry.h" diff --git a/src/widgets/spray-toolbar.cpp b/src/widgets/spray-toolbar.cpp index 43d00c53e..a724637e3 100644 --- a/src/widgets/spray-toolbar.cpp +++ b/src/widgets/spray-toolbar.cpp @@ -36,7 +36,8 @@ #include "inkscape.h" #include "widgets/ege-adjustment-action.h" #include "widgets/ege-select-one-action.h" -#include "widgets/ink-action.h" +#include "ink-radio-action.h" +#include "ink-toggle-action.h" #include "toolbox.h" #include "ui/dialog/clonetiler.h" #include "ui/dialog/dialog-manager.h" diff --git a/src/widgets/star-toolbar.cpp b/src/widgets/star-toolbar.cpp index 7f4293b62..e06733740 100644 --- a/src/widgets/star-toolbar.cpp +++ b/src/widgets/star-toolbar.cpp @@ -37,7 +37,8 @@ #include "widgets/ege-adjustment-action.h" #include "widgets/ege-output-action.h" #include "widgets/ege-select-one-action.h" -#include "widgets/ink-action.h" +#include "ink-action.h" +#include "ink-radio-action.h" #include "selection.h" #include "sp-star.h" #include "toolbox.h" diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp index 41199ecfe..4ab631765 100644 --- a/src/widgets/text-toolbar.cpp +++ b/src/widgets/text-toolbar.cpp @@ -38,7 +38,8 @@ #include "document.h" #include "widgets/ege-adjustment-action.h" #include "widgets/ege-select-one-action.h" -#include "widgets/ink-action.h" +#include "ink-radio-action.h" +#include "ink-toggle-action.h" #include "widgets/ink-comboboxentry-action.h" #include "inkscape.h" #include "selection-chemistry.h" diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 20c3936a3..f74be4b15 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -43,6 +43,7 @@ #include "../helper/action.h" #include "icon.h" #include "ink-action.h" +#include "ink-toggle-action.h" #include "../inkscape.h" #include "ui/interface.h" #include "../shortcuts.h" diff --git a/src/widgets/tweak-toolbar.cpp b/src/widgets/tweak-toolbar.cpp index 9a021082c..a6b8ba436 100644 --- a/src/widgets/tweak-toolbar.cpp +++ b/src/widgets/tweak-toolbar.cpp @@ -36,7 +36,8 @@ #include "widgets/ege-adjustment-action.h" #include "widgets/ege-output-action.h" #include "widgets/ege-select-one-action.h" -#include "widgets/ink-action.h" +#include "ink-radio-action.h" +#include "ink-toggle-action.h" #include "toolbox.h" #include "ui/icon-names.h" #include "ui/tools/tweak-tool.h" -- cgit v1.2.3 From 4f02d390a622c0e95f52c850e07578abbe0ddf7d Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Sun, 7 Aug 2016 14:41:48 +0100 Subject: aboutbox: Gtkmmify (bzr r15043.1.1) --- src/ui/dialog/aboutbox.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/ui/dialog/aboutbox.cpp b/src/ui/dialog/aboutbox.cpp index ffb46fd1b..04cf9d02a 100644 --- a/src/ui/dialog/aboutbox.cpp +++ b/src/ui/dialog/aboutbox.cpp @@ -129,12 +129,13 @@ AboutBox::AboutBox() : Gtk::Dialog(_("About Inkscape")) { get_content_area()->pack_start(*manage(label), false, false); get_content_area()->pack_start(*manage(link), false, false); - Gtk::Requisition requisition; - gtk_widget_get_preferred_size(reinterpret_cast(gobj()), &requisition, NULL); + Gtk::Requisition minimum_size; + Gtk::Requisition natural_size; + get_preferred_size(minimum_size, natural_size); // allow window to shrink set_size_request(0, 0); - set_default_size(requisition.width, requisition.height); + set_default_size(minimum_size.width, minimum_size.height); } -- cgit v1.2.3 From 56fa2433ef69a260f68b8c3147ad3769ee5c8fdb Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Mon, 8 Aug 2016 11:01:15 +0100 Subject: Move GIMP widgets to their own folder (bzr r15043.1.2) --- src/ui/CMakeLists.txt | 4 - src/ui/dialog-events.h | 1 + src/ui/widget/color-icc-selector.cpp | 1 - src/ui/widget/color-notebook.h | 1 - src/ui/widget/color-scales.cpp | 1 - src/ui/widget/color-wheel-selector.cpp | 2 +- src/ui/widget/gimpcolorwheel.c | 1467 -------------------------------- src/ui/widget/gimpcolorwheel.h | 95 --- src/ui/widget/gimpspinscale.c | 969 --------------------- src/ui/widget/gimpspinscale.h | 82 -- src/ui/widget/spin-scale.cpp | 2 +- src/widgets/CMakeLists.txt | 75 +- src/widgets/desktop-widget.cpp | 2 +- src/widgets/ege-adjustment-action.cpp | 2 +- src/widgets/gimp/CMakeLists.txt | 13 + src/widgets/gimp/gimpcolorwheel.c | 1467 ++++++++++++++++++++++++++++++++ src/widgets/gimp/gimpcolorwheel.h | 95 +++ src/widgets/gimp/gimpspinscale.c | 969 +++++++++++++++++++++ src/widgets/gimp/gimpspinscale.h | 82 ++ src/widgets/gimp/ruler.cpp | 1425 +++++++++++++++++++++++++++++++ src/widgets/gimp/ruler.h | 86 ++ src/widgets/ruler.cpp | 1425 ------------------------------- src/widgets/ruler.h | 86 -- 23 files changed, 4179 insertions(+), 4173 deletions(-) delete mode 100644 src/ui/widget/gimpcolorwheel.c delete mode 100644 src/ui/widget/gimpcolorwheel.h delete mode 100644 src/ui/widget/gimpspinscale.c delete mode 100644 src/ui/widget/gimpspinscale.h create mode 100644 src/widgets/gimp/CMakeLists.txt create mode 100644 src/widgets/gimp/gimpcolorwheel.c create mode 100644 src/widgets/gimp/gimpcolorwheel.h create mode 100644 src/widgets/gimp/gimpspinscale.c create mode 100644 src/widgets/gimp/gimpspinscale.h create mode 100644 src/widgets/gimp/ruler.cpp create mode 100644 src/widgets/gimp/ruler.h delete mode 100644 src/widgets/ruler.cpp delete mode 100644 src/widgets/ruler.h (limited to 'src') diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 587974b90..edcc41cd2 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -130,8 +130,6 @@ set(ui_SRC widget/filter-effect-chooser.cpp widget/font-variants.cpp widget/frame.cpp - widget/gimpcolorwheel.c - widget/gimpspinscale.c widget/highlight-picker.cpp widget/imageicon.cpp widget/imagetoggler.cpp @@ -314,8 +312,6 @@ set(ui_SRC widget/filter-effect-chooser.h widget/font-variants.h widget/frame.h - widget/gimpspinscale.h - widget/gimpcolorwheel.h widget/highlight-picker.h widget/insertordericon.h widget/imageicon.h diff --git a/src/ui/dialog-events.h b/src/ui/dialog-events.h index b4a5d7c35..547cfb95d 100644 --- a/src/ui/dialog-events.h +++ b/src/ui/dialog-events.h @@ -12,6 +12,7 @@ #ifndef SEEN_DIALOG_EVENTS_H #define SEEN_DIALOG_EVENTS_H +#include /* * event callback can only accept one argument, but we need two, diff --git a/src/ui/widget/color-icc-selector.cpp b/src/ui/widget/color-icc-selector.cpp index fea6543ea..616e9afa8 100644 --- a/src/ui/widget/color-icc-selector.cpp +++ b/src/ui/widget/color-icc-selector.cpp @@ -5,7 +5,6 @@ #include #include -#include #include #include "ui/dialog-events.h" diff --git a/src/ui/widget/color-notebook.h b/src/ui/widget/color-notebook.h index 35e46ef14..0948e3d46 100644 --- a/src/ui/widget/color-notebook.h +++ b/src/ui/widget/color-notebook.h @@ -20,7 +20,6 @@ #include #include -#include #include #include "color.h" diff --git a/src/ui/widget/color-scales.cpp b/src/ui/widget/color-scales.cpp index 7fcca215f..89913b01b 100644 --- a/src/ui/widget/color-scales.cpp +++ b/src/ui/widget/color-scales.cpp @@ -8,7 +8,6 @@ #include #include -#include #include "ui/dialog-events.h" #include "ui/widget/color-scales.h" diff --git a/src/ui/widget/color-wheel-selector.cpp b/src/ui/widget/color-wheel-selector.cpp index 18f932f10..4f011c6c3 100644 --- a/src/ui/widget/color-wheel-selector.cpp +++ b/src/ui/widget/color-wheel-selector.cpp @@ -11,7 +11,7 @@ #include "ui/dialog-events.h" #include "ui/widget/color-scales.h" #include "ui/widget/color-slider.h" -#include "ui/widget/gimpcolorwheel.h" +#include "widgets/gimp/gimpcolorwheel.h" namespace Inkscape { namespace UI { diff --git a/src/ui/widget/gimpcolorwheel.c b/src/ui/widget/gimpcolorwheel.c deleted file mode 100644 index 212391497..000000000 --- a/src/ui/widget/gimpcolorwheel.c +++ /dev/null @@ -1,1467 +0,0 @@ -/* HSV color selector for GTK+ - * - * Copyright (C) 1999 The Free Software Foundation - * - * Authors: Simon Budig (original code) - * Federico Mena-Quintero (cleanup for GTK+) - * Jonathan Blandford (cleanup for GTK+) - * Michael Natterer (ported back to GIMP) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -/* - * This widget was adopted by Inkscape by Alex Valavanis - * on 2013-01-08. Last merges with GIMP code were applied using the following - * commits from the GIMP git repository at - * http://git.gnome.org/browse/gimp/tree/modules/gimpcolorwheel.c - * - * Gtk+ 2 code merge: commit 632c5 (2013-01-06) - * Gtk+ 3 code merge: commit bcfc6, gtk3-port branch (2013-01-06) - */ - -#include "config.h" - -#include -#include - -#include "gimpcolorwheel.h" -#include - - -/* Default ring fraction */ -#define DEFAULT_FRACTION 0.1 - -/* Default width/height */ -#define DEFAULT_SIZE 100 - -/* Default ring width */ -#define DEFAULT_RING_WIDTH 10 - - -/* Dragging modes */ -typedef enum -{ - DRAG_NONE, - DRAG_H, - DRAG_SV -} DragMode; - -/* Private part of the GimpColorWheel structure */ -typedef struct -{ - /* Color value */ - gdouble h; - gdouble s; - gdouble v; - - /* ring_width is this fraction of size */ - gdouble ring_fraction; - - /* Size and ring width */ - gint size; - gint ring_width; - - /* Window for capturing events */ - GdkWindow *window; - - /* Dragging mode */ - DragMode mode; - - guint focus_on_ring : 1; -} GimpColorWheelPrivate; - -enum -{ - CHANGED, - MOVE, - LAST_SIGNAL -}; - -static void gimp_color_wheel_map (GtkWidget *widget); -static void gimp_color_wheel_unmap (GtkWidget *widget); -static void gimp_color_wheel_realize (GtkWidget *widget); -static void gimp_color_wheel_unrealize (GtkWidget *widget); -static void gimp_color_wheel_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); -static gboolean gimp_color_wheel_button_press (GtkWidget *widget, - GdkEventButton *event); -static gboolean gimp_color_wheel_button_release (GtkWidget *widget, - GdkEventButton *event); -static gboolean gimp_color_wheel_motion (GtkWidget *widget, - GdkEventMotion *event); -static gboolean gimp_color_wheel_draw (GtkWidget *widget, - cairo_t *cr); -static void gimp_color_wheel_get_preferred_width (GtkWidget *widget, - gint *minimum_width, - gint *natural_width); -static void gimp_color_wheel_get_preferred_height (GtkWidget *widget, - gint *minimum_height, - gint *natural_height); -static gboolean gimp_color_wheel_grab_broken (GtkWidget *widget, - GdkEventGrabBroken *event); -static gboolean gimp_color_wheel_focus (GtkWidget *widget, - GtkDirectionType direction); -static void gimp_color_wheel_move (GimpColorWheel *wheel, - GtkDirectionType dir); - - -static guint wheel_signals[LAST_SIGNAL]; - -G_DEFINE_TYPE (GimpColorWheel, gimp_color_wheel, GTK_TYPE_WIDGET) - -#define parent_class gimp_color_wheel_parent_class - - -static void -gimp_color_wheel_class_init (GimpColorWheelClass *class) -{ - GObjectClass *object_class = G_OBJECT_CLASS (class); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); - GimpColorWheelClass *wheel_class = GIMP_COLOR_WHEEL_CLASS (class); - GtkBindingSet *binding_set; - - widget_class->map = gimp_color_wheel_map; - widget_class->unmap = gimp_color_wheel_unmap; - widget_class->realize = gimp_color_wheel_realize; - widget_class->unrealize = gimp_color_wheel_unrealize; - widget_class->size_allocate = gimp_color_wheel_size_allocate; - widget_class->button_press_event = gimp_color_wheel_button_press; - widget_class->button_release_event = gimp_color_wheel_button_release; - widget_class->motion_notify_event = gimp_color_wheel_motion; - widget_class->get_preferred_width = gimp_color_wheel_get_preferred_width; - widget_class->get_preferred_height = gimp_color_wheel_get_preferred_height; - widget_class->draw = gimp_color_wheel_draw; - widget_class->focus = gimp_color_wheel_focus; - widget_class->grab_broken_event = gimp_color_wheel_grab_broken; - - wheel_class->move = gimp_color_wheel_move; - - wheel_signals[CHANGED] = - g_signal_new ("changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpColorWheelClass, changed), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - wheel_signals[MOVE] = - g_signal_new ("move", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (GimpColorWheelClass, move), - NULL, NULL, - g_cclosure_marshal_VOID__ENUM, - G_TYPE_NONE, 1, - GTK_TYPE_DIRECTION_TYPE); - - binding_set = gtk_binding_set_by_class (class); - - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Up, 0, - "move", 1, - G_TYPE_ENUM, GTK_DIR_UP); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Up, 0, - "move", 1, - G_TYPE_ENUM, GTK_DIR_UP); - - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Down, 0, - "move", 1, - G_TYPE_ENUM, GTK_DIR_DOWN); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Down, 0, - "move", 1, - G_TYPE_ENUM, GTK_DIR_DOWN); - - - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Right, 0, - "move", 1, - G_TYPE_ENUM, GTK_DIR_RIGHT); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Right, 0, - "move", 1, - G_TYPE_ENUM, GTK_DIR_RIGHT); - - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Left, 0, - "move", 1, - G_TYPE_ENUM, GTK_DIR_LEFT); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Left, 0, - "move", 1, - G_TYPE_ENUM, GTK_DIR_LEFT); - - g_type_class_add_private (object_class, sizeof (GimpColorWheelPrivate)); -} - -static void -gimp_color_wheel_init (GimpColorWheel *wheel) -{ - GimpColorWheelPrivate *priv; - - priv = G_TYPE_INSTANCE_GET_PRIVATE (wheel, GIMP_TYPE_COLOR_WHEEL, - GimpColorWheelPrivate); - - wheel->priv = priv; - - gtk_widget_set_has_window (GTK_WIDGET (wheel), FALSE); - gtk_widget_set_can_focus (GTK_WIDGET (wheel), TRUE); - - priv->ring_fraction = DEFAULT_FRACTION; - priv->size = DEFAULT_SIZE; - priv->ring_width = DEFAULT_RING_WIDTH; -} - -static void -gimp_color_wheel_map (GtkWidget *widget) -{ - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - - GTK_WIDGET_CLASS (parent_class)->map (widget); - - gdk_window_show (priv->window); -} - -static void -gimp_color_wheel_unmap (GtkWidget *widget) -{ - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - - gdk_window_hide (priv->window); - - GTK_WIDGET_CLASS (parent_class)->unmap (widget); -} - -static void -gimp_color_wheel_realize (GtkWidget *widget) -{ - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - GtkAllocation allocation; - GdkWindowAttr attr; - gint attr_mask; - GdkWindow *parent_window; - - gtk_widget_get_allocation (widget, &allocation); - - gtk_widget_set_realized (widget, TRUE); - - attr.window_type = GDK_WINDOW_CHILD; - attr.x = allocation.x; - attr.y = allocation.y; - attr.width = allocation.width; - attr.height = allocation.height; - attr.wclass = GDK_INPUT_ONLY; - attr.event_mask = (gtk_widget_get_events (widget) | - GDK_KEY_PRESS_MASK | - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_POINTER_MOTION_MASK | - GDK_ENTER_NOTIFY_MASK | - GDK_LEAVE_NOTIFY_MASK); - - attr_mask = GDK_WA_X | GDK_WA_Y; - - parent_window = gtk_widget_get_parent_window (widget); - - gtk_widget_set_window (widget, parent_window); - g_object_ref (parent_window); - - priv->window = gdk_window_new (parent_window, &attr, attr_mask); - gdk_window_set_user_data (priv->window, wheel); -} - -static void -gimp_color_wheel_unrealize (GtkWidget *widget) -{ - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - - gdk_window_set_user_data (priv->window, NULL); - gdk_window_destroy (priv->window); - priv->window = NULL; - - GTK_WIDGET_CLASS (parent_class)->unrealize (widget); -} - -static void -gimp_color_wheel_get_preferred_width (GtkWidget *widget, - gint *minimum_width, - gint *natural_width) -{ - gint focus_width; - gint focus_pad; - - gtk_widget_style_get (widget, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - NULL); - - *minimum_width = *natural_width = DEFAULT_SIZE + 2 * (focus_width + focus_pad); -} - -static void -gimp_color_wheel_get_preferred_height (GtkWidget *widget, - gint *minimum_height, - gint *natural_height) -{ - gint focus_width; - gint focus_pad; - - gtk_widget_style_get (widget, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - NULL); - - *minimum_height = *natural_height = DEFAULT_SIZE + 2 * (focus_width + focus_pad); -} - -static void -gimp_color_wheel_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - gint focus_width; - gint focus_pad; - - gtk_widget_set_allocation (widget, allocation); - - gtk_widget_style_get (widget, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - NULL); - - priv->size = MIN (allocation->width - 2 * (focus_width + focus_pad), - allocation->height - 2 * (focus_width + focus_pad)); - - priv->ring_width = priv->size * priv->ring_fraction; - - if (gtk_widget_get_realized (widget)) - gdk_window_move_resize (priv->window, - allocation->x, - allocation->y, - allocation->width, - allocation->height); -} - - -/* Utility functions */ - -#define INTENSITY(r, g, b) ((r) * 0.30 + (g) * 0.59 + (b) * 0.11) - -/* Converts from HSV to RGB */ -static void -hsv_to_rgb (gdouble *h, - gdouble *s, - gdouble *v) -{ - gdouble hue, saturation, value; - gdouble f, p, q, t; - - if (*s == 0.0) - { - *h = *v; - *s = *v; - *v = *v; /* heh */ - } - else - { - hue = *h * 6.0; - saturation = *s; - value = *v; - - if (hue == 6.0) - hue = 0.0; - - f = hue - (int) hue; - p = value * (1.0 - saturation); - q = value * (1.0 - saturation * f); - t = value * (1.0 - saturation * (1.0 - f)); - - switch ((int) hue) - { - case 0: - *h = value; - *s = t; - *v = p; - break; - - case 1: - *h = q; - *s = value; - *v = p; - break; - - case 2: - *h = p; - *s = value; - *v = t; - break; - - case 3: - *h = p; - *s = q; - *v = value; - break; - - case 4: - *h = t; - *s = p; - *v = value; - break; - - case 5: - *h = value; - *s = p; - *v = q; - break; - - default: - g_assert_not_reached (); - } - } -} - -/* Computes the vertices of the saturation/value triangle */ -static void -compute_triangle (GimpColorWheel *wheel, - gint *hx, - gint *hy, - gint *sx, - gint *sy, - gint *vx, - gint *vy) -{ - GimpColorWheelPrivate *priv = wheel->priv; - GtkAllocation allocation; - gdouble center_x; - gdouble center_y; - gdouble inner, outer; - gdouble angle; - - gtk_widget_get_allocation (GTK_WIDGET (wheel), &allocation); - - center_x = allocation.width / 2.0; - center_y = allocation.height / 2.0; - - outer = priv->size / 2.0; - inner = outer - priv->ring_width; - angle = priv->h * 2.0 * G_PI; - - *hx = floor (center_x + cos (angle) * inner + 0.5); - *hy = floor (center_y - sin (angle) * inner + 0.5); - *sx = floor (center_x + cos (angle + 2.0 * G_PI / 3.0) * inner + 0.5); - *sy = floor (center_y - sin (angle + 2.0 * G_PI / 3.0) * inner + 0.5); - *vx = floor (center_x + cos (angle + 4.0 * G_PI / 3.0) * inner + 0.5); - *vy = floor (center_y - sin (angle + 4.0 * G_PI / 3.0) * inner + 0.5); -} - -/* Computes whether a point is inside the hue ring */ -static gboolean -is_in_ring (GimpColorWheel *wheel, - gdouble x, - gdouble y) -{ - GimpColorWheelPrivate *priv = wheel->priv; - GtkAllocation allocation; - gdouble dx, dy, dist; - gdouble center_x; - gdouble center_y; - gdouble inner, outer; - - gtk_widget_get_allocation (GTK_WIDGET (wheel), &allocation); - - center_x = allocation.width / 2.0; - center_y = allocation.height / 2.0; - - outer = priv->size / 2.0; - inner = outer - priv->ring_width; - - dx = x - center_x; - dy = center_y - y; - dist = dx * dx + dy * dy; - - return (dist >= inner * inner && dist <= outer * outer); -} - -/* Computes a saturation/value pair based on the mouse coordinates */ -static void -compute_sv (GimpColorWheel *wheel, - gdouble x, - gdouble y, - gdouble *s, - gdouble *v) -{ - GtkAllocation allocation; - gint ihx, ihy, isx, isy, ivx, ivy; - gdouble hx, hy, sx, sy, vx, vy; - gdouble center_x; - gdouble center_y; - - gtk_widget_get_allocation (GTK_WIDGET (wheel), &allocation); - - compute_triangle (wheel, &ihx, &ihy, &isx, &isy, &ivx, &ivy); - - center_x = allocation.width / 2.0; - center_y = allocation.height / 2.0; - - hx = ihx - center_x; - hy = center_y - ihy; - sx = isx - center_x; - sy = center_y - isy; - vx = ivx - center_x; - vy = center_y - ivy; - x -= center_x; - y = center_y - y; - - if (vx * (x - sx) + vy * (y - sy) < 0.0) - { - *s = 1.0; - *v = (((x - sx) * (hx - sx) + (y - sy) * (hy-sy)) - / ((hx - sx) * (hx - sx) + (hy - sy) * (hy - sy))); - - if (*v < 0.0) - *v = 0.0; - else if (*v > 1.0) - *v = 1.0; - } - else if (hx * (x - sx) + hy * (y - sy) < 0.0) - { - *s = 0.0; - *v = (((x - sx) * (vx - sx) + (y - sy) * (vy - sy)) - / ((vx - sx) * (vx - sx) + (vy - sy) * (vy - sy))); - - if (*v < 0.0) - *v = 0.0; - else if (*v > 1.0) - *v = 1.0; - } - else if (sx * (x - hx) + sy * (y - hy) < 0.0) - { - *v = 1.0; - *s = (((x - vx) * (hx - vx) + (y - vy) * (hy - vy)) / - ((hx - vx) * (hx - vx) + (hy - vy) * (hy - vy))); - - if (*s < 0.0) - *s = 0.0; - else if (*s > 1.0) - *s = 1.0; - } - else - { - *v = (((x - sx) * (hy - vy) - (y - sy) * (hx - vx)) - / ((vx - sx) * (hy - vy) - (vy - sy) * (hx - vx))); - - if (*v<= 0.0) - { - *v = 0.0; - *s = 0.0; - } - else - { - if (*v > 1.0) - *v = 1.0; - - if (fabs (hy - vy) < fabs (hx - vx)) - *s = (x - sx - *v * (vx - sx)) / (*v * (hx - vx)); - else - *s = (y - sy - *v * (vy - sy)) / (*v * (hy - vy)); - - if (*s < 0.0) - *s = 0.0; - else if (*s > 1.0) - *s = 1.0; - } - } -} - -/* Computes whether a point is inside the saturation/value triangle */ -static gboolean -is_in_triangle (GimpColorWheel *wheel, - gdouble x, - gdouble y) -{ - gint hx, hy, sx, sy, vx, vy; - gdouble det, s, v; - - compute_triangle (wheel, &hx, &hy, &sx, &sy, &vx, &vy); - - det = (vx - sx) * (hy - sy) - (vy - sy) * (hx - sx); - - s = ((x - sx) * (hy - sy) - (y - sy) * (hx - sx)) / det; - v = ((vx - sx) * (y - sy) - (vy - sy) * (x - sx)) / det; - - return (s >= 0.0 && v >= 0.0 && s + v <= 1.0); -} - -/* Computes a value based on the mouse coordinates */ -static double -compute_v (GimpColorWheel *wheel, - gdouble x, - gdouble y) -{ - GtkAllocation allocation; - gdouble center_x; - gdouble center_y; - gdouble dx, dy; - gdouble angle; - - gtk_widget_get_allocation (GTK_WIDGET (wheel), &allocation); - - center_x = allocation.width / 2.0; - center_y = allocation.height / 2.0; - - dx = x - center_x; - dy = center_y - y; - - angle = atan2 (dy, dx); - if (angle < 0.0) - angle += 2.0 * G_PI; - - return angle / (2.0 * G_PI); -} - -static void -set_cross_grab (GimpColorWheel *wheel, - guint32 time) -{ - GimpColorWheelPrivate *priv = wheel->priv; - GdkCursor *cursor; - - cursor = - gdk_cursor_new_for_display (gtk_widget_get_display (GTK_WIDGET (wheel)), - GDK_CROSSHAIR); - - gdk_device_grab (gtk_get_current_event_device(), - priv->window, - GDK_OWNERSHIP_NONE, - FALSE, - GDK_POINTER_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK | - GDK_BUTTON_RELEASE_MASK, - cursor, time); - g_object_unref (cursor); -} - -static gboolean gimp_color_wheel_grab_broken(GtkWidget *widget, GdkEventGrabBroken *event) -{ - (void)event; - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - - priv->mode = DRAG_NONE; - - return TRUE; -} - -static gboolean -gimp_color_wheel_button_press (GtkWidget *widget, - GdkEventButton *event) -{ - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - gdouble x, y; - - if (priv->mode != DRAG_NONE || event->button != 1) - return FALSE; - - x = event->x; - y = event->y; - - if (is_in_ring (wheel, x, y)) - { - priv->mode = DRAG_H; - set_cross_grab (wheel, event->time); - - gimp_color_wheel_set_color (wheel, - compute_v (wheel, x, y), - priv->s, - priv->v); - - gtk_widget_grab_focus (widget); - priv->focus_on_ring = TRUE; - - return TRUE; - } - - if (is_in_triangle (wheel, x, y)) - { - gdouble s, v; - - priv->mode = DRAG_SV; - set_cross_grab (wheel, event->time); - - compute_sv (wheel, x, y, &s, &v); - gimp_color_wheel_set_color (wheel, priv->h, s, v); - - gtk_widget_grab_focus (widget); - priv->focus_on_ring = FALSE; - - return TRUE; - } - - return FALSE; -} - -static gboolean -gimp_color_wheel_button_release (GtkWidget *widget, - GdkEventButton *event) -{ - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - DragMode mode; - gdouble x, y; - - if (priv->mode == DRAG_NONE || event->button != 1) - return FALSE; - - /* Set the drag mode to DRAG_NONE so that signal handlers for "catched" - * can see that this is the final color state. - */ - - mode = priv->mode; - priv->mode = DRAG_NONE; - - x = event->x; - y = event->y; - - if (mode == DRAG_H) - { - gimp_color_wheel_set_color (wheel, - compute_v (wheel, x, y), priv->s, priv->v); - } - else if (mode == DRAG_SV) - { - gdouble s, v; - - compute_sv (wheel, x, y, &s, &v); - gimp_color_wheel_set_color (wheel, priv->h, s, v); - } - else - g_assert_not_reached (); - - gdk_device_ungrab (gtk_get_current_event_device(), - event->time); - - return TRUE; -} - -static gboolean -gimp_color_wheel_motion (GtkWidget *widget, - GdkEventMotion *event) -{ - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - gdouble x, y; - - if (priv->mode == DRAG_NONE) - return FALSE; - - gdk_event_request_motions (event); - x = event->x; - y = event->y; - - if (priv->mode == DRAG_H) - { - gimp_color_wheel_set_color (wheel, - compute_v (wheel, x, y), priv->s, priv->v); - return TRUE; - } - else if (priv->mode == DRAG_SV) - { - gdouble s, v; - - compute_sv (wheel, x, y, &s, &v); - gimp_color_wheel_set_color (wheel, priv->h, s, v); - return TRUE; - } - - g_assert_not_reached (); - - return FALSE; -} - - -/* Redrawing */ - -/* Paints the hue ring */ -static void -paint_ring (GimpColorWheel *wheel, - cairo_t *cr) -{ - GtkWidget *widget = GTK_WIDGET (wheel); - GimpColorWheelPrivate *priv = wheel->priv; - gint width, height; - gint xx, yy; - gdouble dx, dy, dist; - gdouble center_x; - gdouble center_y; - gdouble inner, outer; - guint32 *buf, *p; - gdouble angle; - gdouble hue; - gdouble r, g, b; - cairo_surface_t *source; - cairo_t *source_cr; - gint stride; - - width = gtk_widget_get_allocated_width (widget); - height = gtk_widget_get_allocated_height (widget); - - center_x = width / 2.0; - center_y = height / 2.0; - - outer = priv->size / 2.0; - inner = outer - priv->ring_width; - - /* Create an image initialized with the ring colors */ - - stride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, width); - buf = g_new (guint32, height * stride / 4); - - for (yy = 0; yy < height; yy++) - { - p = buf + yy * width; - dy = -(yy - center_y); - - for (xx = 0; xx < width; xx++) - { - dx = xx - center_x; - - dist = dx * dx + dy * dy; - if (dist < ((inner-1) * (inner-1)) || dist > ((outer+1) * (outer+1))) - { - *p++ = 0; - continue; - } - - angle = atan2 (dy, dx); - if (angle < 0.0) - angle += 2.0 * G_PI; - - hue = angle / (2.0 * G_PI); - - r = hue; - g = 1.0; - b = 1.0; - hsv_to_rgb (&r, &g, &b); - - *p++ = (((int)floor (r * 255 + 0.5) << 16) | - ((int)floor (g * 255 + 0.5) << 8) | - (int)floor (b * 255 + 0.5)); - } - } - - source = cairo_image_surface_create_for_data ((unsigned char *)buf, - CAIRO_FORMAT_RGB24, - width, height, stride); - - /* Now draw the value marker onto the source image, so that it - * will get properly clipped at the edges of the ring - */ - source_cr = cairo_create (source); - - r = priv->h; - g = 1.0; - b = 1.0; - hsv_to_rgb (&r, &g, &b); - - if (INTENSITY (r, g, b) > 0.5) - cairo_set_source_rgb (source_cr, 0.0, 0.0, 0.0); - else - cairo_set_source_rgb (source_cr, 1.0, 1.0, 1.0); - - cairo_move_to (source_cr, center_x, center_y); - cairo_line_to (source_cr, - center_x + cos (priv->h * 2.0 * G_PI) * priv->size / 2, - center_y - sin (priv->h * 2.0 * G_PI) * priv->size / 2); - cairo_stroke (source_cr); - cairo_destroy (source_cr); - - /* Draw the ring using the source image */ - - cairo_save (cr); - - cairo_set_source_surface (cr, source, 0, 0); - cairo_surface_destroy (source); - - cairo_set_line_width (cr, priv->ring_width); - cairo_new_path (cr); - cairo_arc (cr, - center_x, center_y, - priv->size / 2.0 - priv->ring_width / 2.0, - 0, 2 * G_PI); - cairo_stroke (cr); - - cairo_restore (cr); - - g_free (buf); -} - -/* Converts an HSV triplet to an integer RGB triplet */ -static void -get_color (gdouble h, - gdouble s, - gdouble v, - gint *r, - gint *g, - gint *b) -{ - hsv_to_rgb (&h, &s, &v); - - *r = floor (h * 255 + 0.5); - *g = floor (s * 255 + 0.5); - *b = floor (v * 255 + 0.5); -} - -#define SWAP(a, b, t) ((t) = (a), (a) = (b), (b) = (t)) - -#define LERP(a, b, v1, v2, i) (((v2) - (v1) != 0) \ - ? ((a) + ((b) - (a)) * ((i) - (v1)) / ((v2) - (v1))) \ - : (a)) - -/* Number of pixels we extend out from the edges when creating - * color source to avoid artifacts - */ -#define PAD 3 - -/* Paints the HSV triangle */ -static void -paint_triangle (GimpColorWheel *wheel, - cairo_t *cr, - gboolean draw_focus) -{ - GtkWidget *widget = GTK_WIDGET (wheel); - GimpColorWheelPrivate *priv = wheel->priv; - gint hx, hy, sx, sy, vx, vy; /* HSV vertices */ - gint x1, y1, r1, g1, b1; /* First vertex in scanline order */ - gint x2, y2, r2, g2, b2; /* Second vertex */ - gint x3, y3, r3, g3, b3; /* Third vertex */ - gint t; - guint32 *buf, *p, c; - gint xl, xr, rl, rr, gl, gr, bl, br; /* Scanline data */ - gint xx, yy; - gint x_interp, y_interp; - gint x_start, x_end; - cairo_surface_t *source; - gdouble r, g, b; - gint stride; - gint width, height; - GtkStyleContext *context; - - width = gtk_widget_get_allocated_width (widget); - height = gtk_widget_get_allocated_height (widget); - - /* Compute triangle's vertices */ - - compute_triangle (wheel, &hx, &hy, &sx, &sy, &vx, &vy); - - x1 = hx; - y1 = hy; - get_color (priv->h, 1.0, 1.0, &r1, &g1, &b1); - - x2 = sx; - y2 = sy; - get_color (priv->h, 1.0, 0.0, &r2, &g2, &b2); - - x3 = vx; - y3 = vy; - get_color (priv->h, 0.0, 1.0, &r3, &g3, &b3); - - if (y2 > y3) - { - SWAP (x2, x3, t); - SWAP (y2, y3, t); - SWAP (r2, r3, t); - SWAP (g2, g3, t); - SWAP (b2, b3, t); - } - - if (y1 > y3) - { - SWAP (x1, x3, t); - SWAP (y1, y3, t); - SWAP (r1, r3, t); - SWAP (g1, g3, t); - SWAP (b1, b3, t); - } - - if (y1 > y2) - { - SWAP (x1, x2, t); - SWAP (y1, y2, t); - SWAP (r1, r2, t); - SWAP (g1, g2, t); - SWAP (b1, b2, t); - } - - /* Shade the triangle */ - - stride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, width); - buf = g_new (guint32, height * stride / 4); - - for (yy = 0; yy < height; yy++) - { - p = buf + yy * width; - - if (yy >= y1 - PAD && yy < y3 + PAD) - { - y_interp = CLAMP (yy, y1, y3); - - if (y_interp < y2) - { - xl = LERP (x1, x2, y1, y2, y_interp); - - rl = LERP (r1, r2, y1, y2, y_interp); - gl = LERP (g1, g2, y1, y2, y_interp); - bl = LERP (b1, b2, y1, y2, y_interp); - } - else - { - xl = LERP (x2, x3, y2, y3, y_interp); - - rl = LERP (r2, r3, y2, y3, y_interp); - gl = LERP (g2, g3, y2, y3, y_interp); - bl = LERP (b2, b3, y2, y3, y_interp); - } - - xr = LERP (x1, x3, y1, y3, y_interp); - - rr = LERP (r1, r3, y1, y3, y_interp); - gr = LERP (g1, g3, y1, y3, y_interp); - br = LERP (b1, b3, y1, y3, y_interp); - - if (xl > xr) - { - SWAP (xl, xr, t); - SWAP (rl, rr, t); - SWAP (gl, gr, t); - SWAP (bl, br, t); - } - - x_start = MAX (xl - PAD, 0); - x_end = MIN (xr + PAD, width); - x_start = MIN (x_start, x_end); - - c = (rl << 16) | (gl << 8) | bl; - - for (xx = 0; xx < x_start; xx++) - *p++ = c; - - for (; xx < x_end; xx++) - { - x_interp = CLAMP (xx, xl, xr); - - *p++ = ((LERP (rl, rr, xl, xr, x_interp) << 16) | - (LERP (gl, gr, xl, xr, x_interp) << 8) | - LERP (bl, br, xl, xr, x_interp)); - } - - c = (rr << 16) | (gr << 8) | br; - - for (; xx < width; xx++) - *p++ = c; - } - } - - source = cairo_image_surface_create_for_data ((unsigned char *)buf, - CAIRO_FORMAT_RGB24, - width, height, stride); - - /* Draw a triangle with the image as a source */ - - cairo_set_source_surface (cr, source, 0, 0); - cairo_surface_destroy (source); - - cairo_move_to (cr, x1, y1); - cairo_line_to (cr, x2, y2); - cairo_line_to (cr, x3, y3); - cairo_close_path (cr); - cairo_fill (cr); - - g_free (buf); - - /* Draw value marker */ - - xx = floor (sx + (vx - sx) * priv->v + (hx - vx) * priv->s * priv->v + 0.5); - yy = floor (sy + (vy - sy) * priv->v + (hy - vy) * priv->s * priv->v + 0.5); - - r = priv->h; - g = priv->s; - b = priv->v; - hsv_to_rgb (&r, &g, &b); - - context = gtk_widget_get_style_context (widget); - - gtk_style_context_save (context); - - if (INTENSITY (r, g, b) > 0.5) - { - gtk_style_context_add_class (context, "light-area-focus"); - cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); - } - else - { - gtk_style_context_add_class (context, "dark-area-focus"); - cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); - } - -#define RADIUS 4 -#define FOCUS_RADIUS 6 - - cairo_new_path (cr); - cairo_arc (cr, xx, yy, RADIUS, 0, 2 * G_PI); - cairo_stroke (cr); - - /* Draw focus outline */ - - if (draw_focus && ! priv->focus_on_ring) - { - gint focus_width; - gint focus_pad; - - gtk_widget_style_get (widget, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - NULL); - - gtk_render_focus (context, cr, - xx - FOCUS_RADIUS - focus_width - focus_pad, - yy - FOCUS_RADIUS - focus_width - focus_pad, - 2 * (FOCUS_RADIUS + focus_width + focus_pad), - 2 * (FOCUS_RADIUS + focus_width + focus_pad)); - } - - gtk_style_context_restore (context); -} - -static gboolean -gimp_color_wheel_draw (GtkWidget *widget, - cairo_t *cr) -{ - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - gboolean draw_focus; - - draw_focus = gtk_widget_has_visible_focus (widget); - - paint_ring (wheel, cr); - paint_triangle (wheel, cr, draw_focus); - - if (draw_focus && priv->focus_on_ring) - { - GtkStyleContext *context = gtk_widget_get_style_context (widget); - - gtk_render_focus (context, cr, 0, 0, - gtk_widget_get_allocated_width (widget), - gtk_widget_get_allocated_height (widget)); - } - - return FALSE; -} - -static gboolean -gimp_color_wheel_focus (GtkWidget *widget, - GtkDirectionType dir) -{ - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - - if (!gtk_widget_has_focus (widget)) - { - if (dir == GTK_DIR_TAB_BACKWARD) - priv->focus_on_ring = FALSE; - else - priv->focus_on_ring = TRUE; - - gtk_widget_grab_focus (widget); - return TRUE; - } - - switch (dir) - { - case GTK_DIR_UP: - if (priv->focus_on_ring) - return FALSE; - else - priv->focus_on_ring = TRUE; - break; - - case GTK_DIR_DOWN: - if (priv->focus_on_ring) - priv->focus_on_ring = FALSE; - else - return FALSE; - break; - - case GTK_DIR_LEFT: - case GTK_DIR_TAB_BACKWARD: - if (priv->focus_on_ring) - return FALSE; - else - priv->focus_on_ring = TRUE; - break; - - case GTK_DIR_RIGHT: - case GTK_DIR_TAB_FORWARD: - if (priv->focus_on_ring) - priv->focus_on_ring = FALSE; - else - return FALSE; - break; - } - - gtk_widget_queue_draw (widget); - - return TRUE; -} - -/** - * gimp_color_wheel_new: - * - * Creates a new HSV color selector. - * - * Return value: A newly-created HSV color selector. - * - * Since: 2.14 - */ -GtkWidget* -gimp_color_wheel_new (void) -{ - return g_object_new (GIMP_TYPE_COLOR_WHEEL, NULL); -} - -/** - * gimp_color_wheel_set_color: - * @hsv: An HSV color selector - * @h: Hue - * @s: Saturation - * @v: Value - * - * Sets the current color in an HSV color selector. - * Color component values must be in the [0.0, 1.0] range. - * - * Since: 2.14 - */ -void -gimp_color_wheel_set_color (GimpColorWheel *wheel, - gdouble h, - gdouble s, - gdouble v) -{ - GimpColorWheelPrivate *priv; - - g_return_if_fail (GIMP_IS_COLOR_WHEEL (wheel)); - g_return_if_fail (h >= 0.0 && h <= 1.0); - g_return_if_fail (s >= 0.0 && s <= 1.0); - g_return_if_fail (v >= 0.0 && v <= 1.0); - - priv = wheel->priv; - - if(h == 0.0 && s == 0.0) { - h = priv->h; - } - - priv->h = h; - priv->s = s; - priv->v = v; - - g_signal_emit (wheel, wheel_signals[CHANGED], 0); - - gtk_widget_queue_draw (GTK_WIDGET (wheel)); -} - -/** - * gimp_color_wheel_get_color: - * @hsv: An HSV color selector - * @h: (out): Return value for the hue - * @s: (out): Return value for the saturation - * @v: (out): Return value for the value - * - * Queries the current color in an HSV color selector. - * Returned values will be in the [0.0, 1.0] range. - * - * Since: 2.14 - */ -void -gimp_color_wheel_get_color (GimpColorWheel *wheel, - gdouble *h, - gdouble *s, - gdouble *v) -{ - GimpColorWheelPrivate *priv; - - g_return_if_fail (GIMP_IS_COLOR_WHEEL (wheel)); - - priv = wheel->priv; - - if (h) *h = priv->h; - if (s) *s = priv->s; - if (v) *v = priv->v; -} - -/** - * gimp_color_wheel_set_ring_fraction: - * @ring: A wheel color selector - * @fraction: Ring fraction - * - * Sets the ring fraction of a wheel color selector. - * - * Since: GIMP 2.10 - */ -void -gimp_color_wheel_set_ring_fraction (GimpColorWheel *hsv, - gdouble fraction) -{ - GimpColorWheelPrivate *priv; - - g_return_if_fail (GIMP_IS_COLOR_WHEEL (hsv)); - - priv = hsv->priv; - - priv->ring_fraction = CLAMP (fraction, 0.01, 0.99); - - gtk_widget_queue_draw (GTK_WIDGET (hsv)); -} - -/** - * gimp_color_wheel_get_ring_fraction: - * @ring: A wheel color selector - * - * Returns value: The ring fraction of the wheel color selector. - * - * Since: GIMP 2.10 - */ -gdouble -gimp_color_wheel_get_ring_fraction (GimpColorWheel *wheel) -{ - GimpColorWheelPrivate *priv; - - g_return_val_if_fail (GIMP_IS_COLOR_WHEEL (wheel), DEFAULT_FRACTION); - - priv = wheel->priv; - - return priv->ring_fraction; -} - -/** - * gimp_color_wheel_is_adjusting: - * @hsv: A #GimpColorWheel - * - * An HSV color selector can be said to be adjusting if multiple rapid - * changes are being made to its value, for example, when the user is - * adjusting the value with the mouse. This function queries whether - * the HSV color selector is being adjusted or not. - * - * Return value: %TRUE if clients can ignore changes to the color value, - * since they may be transitory, or %FALSE if they should consider - * the color value status to be final. - * - * Since: 2.14 - */ -gboolean -gimp_color_wheel_is_adjusting (GimpColorWheel *wheel) -{ - GimpColorWheelPrivate *priv; - - g_return_val_if_fail (GIMP_IS_COLOR_WHEEL (wheel), FALSE); - - priv = wheel->priv; - - return priv->mode != DRAG_NONE; -} - -static void -gimp_color_wheel_move (GimpColorWheel *wheel, - GtkDirectionType dir) -{ - GimpColorWheelPrivate *priv = wheel->priv; - gdouble hue, sat, val; - gint hx, hy, sx, sy, vx, vy; /* HSV vertices */ - gint x, y; /* position in triangle */ - - hue = priv->h; - sat = priv->s; - val = priv->v; - - compute_triangle (wheel, &hx, &hy, &sx, &sy, &vx, &vy); - - x = floor (sx + (vx - sx) * priv->v + (hx - vx) * priv->s * priv->v + 0.5); - y = floor (sy + (vy - sy) * priv->v + (hy - vy) * priv->s * priv->v + 0.5); - -#define HUE_DELTA 0.002 - switch (dir) - { - case GTK_DIR_UP: - if (priv->focus_on_ring) - hue += HUE_DELTA; - else - { - y -= 1; - compute_sv (wheel, x, y, &sat, &val); - } - break; - - case GTK_DIR_DOWN: - if (priv->focus_on_ring) - hue -= HUE_DELTA; - else - { - y += 1; - compute_sv (wheel, x, y, &sat, &val); - } - break; - - case GTK_DIR_LEFT: - if (priv->focus_on_ring) - hue += HUE_DELTA; - else - { - x -= 1; - compute_sv (wheel, x, y, &sat, &val); - } - break; - - case GTK_DIR_RIGHT: - if (priv->focus_on_ring) - hue -= HUE_DELTA - ; - else - { - x += 1; - compute_sv (wheel, x, y, &sat, &val); - } - break; - - default: - /* we don't care about the tab directions */ - break; - } - - /* Wrap */ - if (hue < 0.0) - hue = 1.0; - else if (hue > 1.0) - hue = 0.0; - - gimp_color_wheel_set_color (wheel, hue, sat, val); -} diff --git a/src/ui/widget/gimpcolorwheel.h b/src/ui/widget/gimpcolorwheel.h deleted file mode 100644 index 016fb593f..000000000 --- a/src/ui/widget/gimpcolorwheel.h +++ /dev/null @@ -1,95 +0,0 @@ -/* HSV color selector for GTK+ - * - * Copyright (C) 1999 The Free Software Foundation - * - * Authors: Simon Budig (original code) - * Federico Mena-Quintero (cleanup for GTK+) - * Jonathan Blandford (cleanup for GTK+) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __GIMP_COLOR_WHEEL_H__ -#define __GIMP_COLOR_WHEEL_H__ - -G_BEGIN_DECLS - -#define GIMP_TYPE_COLOR_WHEEL (gimp_color_wheel_get_type ()) -#define GIMP_COLOR_WHEEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_COLOR_WHEEL, GimpColorWheel)) -#define GIMP_COLOR_WHEEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_COLOR_WHEEL, GimpColorWheelClass)) -#define GIMP_IS_COLOR_WHEEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_COLOR_WHEEL)) -#define GIMP_IS_COLOR_WHEEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_COLOR_WHEEL)) -#define GIMP_COLOR_WHEEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_COLOR_WHEEL, GimpColorWheelClass)) - - -typedef struct _GimpColorWheel GimpColorWheel; -typedef struct _GimpColorWheelClass GimpColorWheelClass; - -struct _GimpColorWheel -{ - GtkWidget parent_instance; - - /* Private data */ - gpointer priv; -}; - -struct _GimpColorWheelClass -{ - GtkWidgetClass parent_class; - - /* Notification signals */ - void (* changed) (GimpColorWheel *wheel); - - /* Keybindings */ - void (* move) (GimpColorWheel *wheel, - GtkDirectionType type); - - /* Padding for future expansion */ - void (*_gimp_reserved1) (void); - void (*_gimp_reserved2) (void); - void (*_gimp_reserved3) (void); - void (*_gimp_reserved4) (void); -}; - - -GType gimp_color_wheel_get_type (void) G_GNUC_CONST; -GtkWidget * gimp_color_wheel_new (void); - -void gimp_color_wheel_set_color (GimpColorWheel *wheel, - double h, - double s, - double v); -void gimp_color_wheel_get_color (GimpColorWheel *wheel, - gdouble *h, - gdouble *s, - gdouble *v); - -void gimp_color_wheel_set_ring_fraction (GimpColorWheel *wheel, - gdouble fraction); -gdouble gimp_color_wheel_get_ring_fraction (GimpColorWheel *wheel); - -gboolean gimp_color_wheel_is_adjusting (GimpColorWheel *wheel); - -G_END_DECLS - -#endif /* __GIMP_COLOR_WHEEL_H__ */ diff --git a/src/ui/widget/gimpspinscale.c b/src/ui/widget/gimpspinscale.c deleted file mode 100644 index 8d8c6c935..000000000 --- a/src/ui/widget/gimpspinscale.c +++ /dev/null @@ -1,969 +0,0 @@ -/* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * gimpspinscale.c - * Copyright (C) 2010 Michael Natterer - * 2012 Øyvind KolÃ¥s - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include - -#include "gimpspinscale.h" - - -enum -{ - PROP_0, - PROP_LABEL, - PROP_FOCUS_WIDGET -}; - -typedef enum -{ - TARGET_NUMBER, - TARGET_UPPER, - TARGET_LOWER, - TARGET_NONE -} SpinScaleTarget; - -typedef enum -{ - APPEARANCE_FULL = 1, /* Full size suitable for tablets */ - APPEARANCE_COMPACT, /* Compact, suitable for desktops with mouse control */ -} SpinScaleAppearance; - -typedef struct _GimpSpinScalePrivate GimpSpinScalePrivate; - -struct _GimpSpinScalePrivate -{ - gchar *label; - - gboolean scale_limits_set; - gdouble scale_lower; - gdouble scale_upper; - gdouble gamma; - - PangoLayout *layout; - gboolean changing_value; - gboolean relative_change; - gdouble start_x; - gdouble start_value; - - GtkWidget* focusWidget; - gboolean transferFocus; - SpinScaleAppearance appearanceMode; -}; - -#define GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \ - GIMP_TYPE_SPIN_SCALE, \ - GimpSpinScalePrivate)) - - -static void gimp_spin_scale_dispose (GObject *object); -static void gimp_spin_scale_finalize (GObject *object); -static void gimp_spin_scale_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); -static void gimp_spin_scale_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec); - -static void gimp_spin_scale_style_set (GtkWidget *widget, - GtkStyle *prev_style); - -static void gimp_spin_scale_get_preferred_width (GtkWidget *widget, - gint *minimum_width, - gint *natural_width); -static void gimp_spin_scale_get_preferred_height (GtkWidget *widget, - gint *minimum_width, - gint *natural_width); -static gboolean gimp_spin_scale_draw (GtkWidget *widget, - cairo_t *cr); - -static gboolean gimp_spin_scale_button_press (GtkWidget *widget, - GdkEventButton *event); -static gboolean gimp_spin_scale_button_release (GtkWidget *widget, - GdkEventButton *event); -static gboolean gimp_spin_scale_motion_notify (GtkWidget *widget, - GdkEventMotion *event); -static gboolean gimp_spin_scale_leave_notify (GtkWidget *widget, - GdkEventCrossing *event); -static gboolean gimp_spin_scale_keypress( GtkWidget *widget, - GdkEventKey *event); - -static void gimp_spin_scale_defocus( GtkSpinButton *spin_button ); - -static void gimp_spin_scale_value_changed (GtkSpinButton *spin_button); - - -G_DEFINE_TYPE (GimpSpinScale, gimp_spin_scale, GTK_TYPE_SPIN_BUTTON); - -#define parent_class gimp_spin_scale_parent_class - - -static void -gimp_spin_scale_class_init (GimpSpinScaleClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - GtkSpinButtonClass *spin_button_class = GTK_SPIN_BUTTON_CLASS (klass); - - object_class->dispose = gimp_spin_scale_dispose; - object_class->finalize = gimp_spin_scale_finalize; - object_class->set_property = gimp_spin_scale_set_property; - object_class->get_property = gimp_spin_scale_get_property; - - widget_class->style_set = gimp_spin_scale_style_set; - widget_class->get_preferred_width = gimp_spin_scale_get_preferred_width; - widget_class->get_preferred_height = gimp_spin_scale_get_preferred_height; - widget_class->draw = gimp_spin_scale_draw; - widget_class->button_press_event = gimp_spin_scale_button_press; - widget_class->button_release_event = gimp_spin_scale_button_release; - widget_class->motion_notify_event = gimp_spin_scale_motion_notify; - widget_class->leave_notify_event = gimp_spin_scale_leave_notify; - widget_class->key_press_event = gimp_spin_scale_keypress; - - spin_button_class->value_changed = gimp_spin_scale_value_changed; - - g_object_class_install_property (object_class, PROP_LABEL, - g_param_spec_string ("label", NULL, NULL, - NULL, - G_PARAM_READWRITE)); - - g_type_class_add_private (klass, sizeof (GimpSpinScalePrivate)); -} - -static void -gimp_spin_scale_init (GimpSpinScale *scale) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (scale); - - gtk_widget_add_events (GTK_WIDGET (scale), - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_POINTER_MOTION_MASK | - GDK_BUTTON1_MOTION_MASK | - GDK_LEAVE_NOTIFY_MASK); - - gtk_entry_set_alignment (GTK_ENTRY (scale), 1.0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (scale), TRUE); - - private->gamma = 1.0; - private->focusWidget = NULL; - private->transferFocus = FALSE; - private->appearanceMode = APPEARANCE_COMPACT; -} - -static void -gimp_spin_scale_dispose (GObject *object) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (object); - - if (private->layout) - { - g_object_unref (private->layout); - private->layout = NULL; - } - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -static void -gimp_spin_scale_finalize (GObject *object) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (object); - - if (private->label) - { - g_free (private->label); - private->label = NULL; - } - - G_OBJECT_CLASS (parent_class)->finalize (object); -} - -static void -gimp_spin_scale_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (object); - GimpSpinScale *scale = GIMP_SPIN_SCALE (object); - - switch (property_id) - { - case PROP_LABEL: - gimp_spin_scale_set_label (scale, g_value_get_string (value)); - break; - - case PROP_FOCUS_WIDGET: - { - /* TODO unhook prior */ - private->focusWidget = GTK_WIDGET (g_value_get_pointer (value)); - } - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - break; - } -} - -static void -gimp_spin_scale_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (object); - GimpSpinScale *scale = GIMP_SPIN_SCALE (object); - - switch (property_id) - { - case PROP_LABEL: - g_value_set_string (value, gimp_spin_scale_get_label (scale)); - break; - - case PROP_FOCUS_WIDGET: - g_value_set_pointer (value, private->focusWidget); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - break; - } -} - - -void -gimp_spin_scale_set_focuswidget( GtkWidget *scale, GtkWidget* widget ) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (scale); - - /* TODO unhook prior */ - - private->focusWidget = widget; -} - -void -gimp_spin_scale_set_appearance( GtkWidget *widget, const gchar *appearance) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (widget); - - if ( strcmp("full", appearance) == 0 ) { - private->appearanceMode = APPEARANCE_FULL; - } else if ( strcmp("compact", appearance) == 0 ) { - private->appearanceMode = APPEARANCE_COMPACT; - } -} - -static void -gimp_spin_scale_get_preferred_width (GtkWidget *widget, - gint *minimum_width, - gint *natural_width) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (widget); - PangoContext *context = gtk_widget_get_pango_context (widget); - PangoFontMetrics *metrics; - - GTK_WIDGET_CLASS (parent_class)->get_preferred_width (widget, - minimum_width, - natural_width); - - metrics = pango_context_get_metrics (context, - pango_context_get_font_description (context), - pango_context_get_language (context)); - - if (private->label) - { - gint char_width; - gint digit_width; - gint char_pixels; - - char_width = pango_font_metrics_get_approximate_char_width (metrics); - digit_width = pango_font_metrics_get_approximate_digit_width (metrics); - char_pixels = PANGO_PIXELS (MAX (char_width, digit_width)); - - /* ~3 chars for the ellipse */ - *minimum_width += char_pixels * 3; - *natural_width += char_pixels * 3; - } - - pango_font_metrics_unref (metrics); -} - -static void -gimp_spin_scale_get_preferred_height (GtkWidget *widget, - gint *minimum_height, - gint *natural_height) -{ - PangoContext *context = gtk_widget_get_pango_context (widget); - PangoFontMetrics *metrics; - //gint height; - - GTK_WIDGET_CLASS (parent_class)->get_preferred_height (widget, - minimum_height, - natural_height); - - metrics = pango_context_get_metrics (context, - pango_context_get_font_description (context), - pango_context_get_language (context)); - - //height = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics) + - // pango_font_metrics_get_descent (metrics)); - - *minimum_height += 1; - *natural_height += 1; - - pango_font_metrics_unref (metrics); -} - -static void -gimp_spin_scale_style_set (GtkWidget *widget, - GtkStyle *prev_style) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (widget); - - GTK_WIDGET_CLASS (parent_class)->style_set (widget, prev_style); - - if (private->layout) - { - g_object_unref (private->layout); - private->layout = NULL; - } -} - - -static gboolean - gimp_spin_scale_draw (GtkWidget *widget, - cairo_t *cr) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (widget); - GtkStyleContext *style = gtk_widget_get_style_context(widget); - GtkAllocation allocation; - GdkRGBA color; - - cairo_save (cr); - GTK_WIDGET_CLASS (parent_class)->draw (widget, cr); - cairo_restore (cr); - - gtk_widget_get_allocation (widget, &allocation); - - cairo_set_line_width (cr, 1.0); - - if (private->label) - { - GdkRectangle text_area; - gint minimum_width; - gint natural_width; - PangoRectangle logical; - gint layout_offset_x; - gint layout_offset_y; - GtkStateFlags state; - GdkRGBA text_color; - GdkRGBA bar_text_color; - gdouble progress_fraction; - gint progress_x; - gint progress_y; - gint progress_width; - gint progress_height; - - gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); - - GTK_WIDGET_CLASS (parent_class)->get_preferred_width (widget, - &minimum_width, - &natural_width); - - if (! private->layout) - { - private->layout = gtk_widget_create_pango_layout (widget, - private->label); - pango_layout_set_ellipsize (private->layout, PANGO_ELLIPSIZE_END); - } - - pango_layout_set_width (private->layout, - PANGO_SCALE * - (allocation.width - minimum_width)); - pango_layout_get_pixel_extents (private->layout, NULL, &logical); - - gtk_entry_get_layout_offsets (GTK_ENTRY (widget), NULL, &layout_offset_y); - - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - layout_offset_x = text_area.x + text_area.width - logical.width - 4; - else - layout_offset_x = 4; - - layout_offset_x -= logical.x; - - state = gtk_widget_get_state_flags (widget); - - gtk_style_context_get_color (style, state, &text_color); - - gtk_style_context_save (style); - gtk_style_context_add_class (style, GTK_STYLE_CLASS_PROGRESSBAR); - gtk_style_context_get_color (style, state, &bar_text_color); - gtk_style_context_restore (style); - - progress_fraction = gtk_entry_get_progress_fraction (GTK_ENTRY (widget)); - - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - { - progress_fraction = 1.0 - progress_fraction; - - progress_x = text_area.width * progress_fraction; - progress_y = 0; - progress_width = text_area.width - progress_x; - progress_height = text_area.height; - } - else - { - progress_x = 0; - progress_y = 0; - progress_width = text_area.width * progress_fraction; - progress_height = text_area.height; - } - - cairo_save (cr); - - cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); - cairo_rectangle (cr, 0, 0, text_area.width, text_area.height); - cairo_rectangle (cr, progress_x, progress_y, - progress_width, progress_height); - cairo_clip (cr); - cairo_set_fill_rule (cr, CAIRO_FILL_RULE_WINDING); - - cairo_move_to (cr, layout_offset_x, text_area.y + layout_offset_y-3); - gdk_cairo_set_source_rgba (cr, &text_color); - pango_cairo_show_layout (cr, private->layout); - cairo_restore (cr); - - cairo_rectangle (cr, progress_x, progress_y, - progress_width, progress_height); - cairo_clip (cr); - - cairo_move_to (cr, layout_offset_x, text_area.y + layout_offset_y-3); - gdk_cairo_set_source_rgba (cr, &bar_text_color); - pango_cairo_show_layout (cr, private->layout); - } - - return FALSE; -} - -/* Returns TRUE if a translation should be done */ -static gboolean -gtk_widget_get_translation_to_window (GtkWidget *widget, - GdkWindow *window, - int *x, - int *y) -{ - GdkWindow *w, *widget_window; - - if (!gtk_widget_get_has_window (widget)) - { - GtkAllocation allocation; - - gtk_widget_get_allocation (widget, &allocation); - - *x = -allocation.x; - *y = -allocation.y; - } - else - { - *x = 0; - *y = 0; - } - - widget_window = gtk_widget_get_window (widget); - - for (w = window; w && w != widget_window; w = gdk_window_get_parent (w)) - { - int wx, wy; - gdk_window_get_position (w, &wx, &wy); - *x += wx; - *y += wy; - } - - if (w == NULL) - { - *x = 0; - *y = 0; - return FALSE; - } - - return TRUE; -} - -static void -gimp_spin_scale_event_to_widget_coords (GtkWidget *widget, - GdkWindow *window, - gdouble event_x, - gdouble event_y, - gint *widget_x, - gint *widget_y) -{ - gint tx, ty; - - if (gtk_widget_get_translation_to_window (widget, window, &tx, &ty)) - { - event_x += tx; - event_y += ty; - } - - *widget_x = event_x; - *widget_y = event_y; -} - -static SpinScaleTarget -gimp_spin_scale_get_target (GtkWidget *widget, - gdouble x, - gdouble y) -{ - GtkAllocation allocation; - PangoRectangle logical; - gint layout_x; - gint layout_y; - - gtk_widget_get_allocation (widget, &allocation); - gtk_entry_get_layout_offsets (GTK_ENTRY (widget), &layout_x, &layout_y); - pango_layout_get_pixel_extents (gtk_entry_get_layout (GTK_ENTRY (widget)), - NULL, &logical); - - GdkRectangle text_area; - gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); - - if (x >= text_area.x && x < text_area.width && - y >= text_area.y && y < text_area.height) - { - x -= text_area.x; - y -= text_area.y; - - if (x > layout_x && x < layout_x + logical.width && - y > layout_y && y < layout_y + logical.height) - { - return TARGET_NUMBER; - } - else if (y > text_area.height / 2) - { - return TARGET_LOWER; - } - - return TARGET_UPPER; - } - - return TARGET_NONE; -} - -static void -gimp_spin_scale_get_limits (GimpSpinScale *scale, - gdouble *lower, - gdouble *upper) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (scale); - - if (private->scale_limits_set) - { - *lower = private->scale_lower; - *upper = private->scale_upper; - } - else - { - GtkSpinButton *spin_button = GTK_SPIN_BUTTON (scale); - GtkAdjustment *adjustment = gtk_spin_button_get_adjustment (spin_button); - - *lower = gtk_adjustment_get_lower (adjustment); - *upper = gtk_adjustment_get_upper (adjustment); - } -} - -static void -gimp_spin_scale_change_value (GtkWidget *widget, - gdouble x) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (widget); - GtkSpinButton *spin_button = GTK_SPIN_BUTTON (widget); - GtkAdjustment *adjustment = gtk_spin_button_get_adjustment (spin_button); - gdouble lower; - gdouble upper; - gdouble value; - GdkRectangle text_area; - gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); - gimp_spin_scale_get_limits (GIMP_SPIN_SCALE (widget), &lower, &upper); - - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - x = text_area.width - x; - - if (private->relative_change) - { - gdouble diff; - gdouble step; - - step = (upper - lower) / text_area.width / 10.0; - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - diff = x - (text_area.width - private->start_x); - else - diff = x - private->start_x; - - value = (private->start_value + diff * step); - } - else - { - gdouble fraction; - - fraction = x / (gdouble) text_area.width; - if (fraction > 0.0) - fraction = pow (fraction, private->gamma); - - value = fraction * (upper - lower) + lower; - } - - gtk_adjustment_set_value (adjustment, value); -} - -static gboolean -gimp_spin_scale_button_press (GtkWidget *widget, - GdkEventButton *event) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (widget); - - private->changing_value = FALSE; - private->relative_change = FALSE; - - gint x, y; - gimp_spin_scale_event_to_widget_coords (widget, event->window, - event->x, event->y, - &x, &y); - switch (gimp_spin_scale_get_target (widget, x, y)) - { - case TARGET_UPPER: - private->changing_value = TRUE; - - gtk_widget_grab_focus (widget); - - gimp_spin_scale_change_value (widget, x); - - return TRUE; - - case TARGET_LOWER: - private->changing_value = TRUE; - - gtk_widget_grab_focus (widget); - - private->relative_change = TRUE; - private->start_x = x; - private->start_value = gtk_adjustment_get_value (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget))); - - return TRUE; - - default: - break; - } - - return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, event); -} - -static gboolean -gimp_spin_scale_button_release (GtkWidget *widget, - GdkEventButton *event) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (widget); - gint x, y; - - gimp_spin_scale_event_to_widget_coords (widget, event->window, - event->x, event->y, - &x, &y); - - if (private->changing_value) - { - private->changing_value = FALSE; - gimp_spin_scale_change_value (widget, x); - return TRUE; - } - - return GTK_WIDGET_CLASS (parent_class)->button_release_event (widget, event); -} - -static gboolean -gimp_spin_scale_motion_notify (GtkWidget *widget, - GdkEventMotion *event) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (widget); - - gdk_event_request_motions (event); - - gint x, y; - - gimp_spin_scale_event_to_widget_coords (widget, event->window, - event->x, event->y, - &x, &y); - - if (private->changing_value) - { - gimp_spin_scale_change_value (widget, x); - - return TRUE; - } - - GTK_WIDGET_CLASS (parent_class)->motion_notify_event (widget, event); - - if (! (event->state & - (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK)) - ) - { - GdkDisplay *display = gtk_widget_get_display (widget); - GdkCursor *cursor = NULL; - - switch (gimp_spin_scale_get_target (widget, x, y)) - { - case TARGET_NUMBER: - cursor = gdk_cursor_new_for_display (display, GDK_XTERM); - break; - - case TARGET_UPPER: - cursor = gdk_cursor_new_for_display (display, GDK_SB_UP_ARROW); - break; - - case TARGET_LOWER: - cursor = gdk_cursor_new_for_display (display, GDK_SB_H_DOUBLE_ARROW); - break; - - default: - break; - } - - if (cursor) - { - gdk_window_set_cursor (event->window, cursor); - g_object_unref (cursor); - } - } - - return FALSE; -} - -static gboolean -gimp_spin_scale_leave_notify (GtkWidget *widget, - GdkEventCrossing *event) -{ - gdk_window_set_cursor (event->window, NULL); - - return GTK_WIDGET_CLASS (parent_class)->leave_notify_event (widget, event); -} - -gboolean gimp_spin_scale_keypress( GtkWidget *widget, GdkEventKey *event) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (widget); - guint key = 0; - gdk_keymap_translate_keyboard_state( gdk_keymap_get_for_display( gdk_display_get_default() ), - event->hardware_keycode, (GdkModifierType)event->state, - 0, &key, 0, 0, 0 ); - - switch ( key ) { - - case GDK_KEY_Escape: - case GDK_KEY_Return: - case GDK_KEY_KP_Enter: - { - private->transferFocus = TRUE; - gimp_spin_scale_defocus( GTK_SPIN_BUTTON(widget) ); - } - break; - - } - - return GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event); -} - -static void -gimp_spin_scale_defocus( GtkSpinButton *spin_button ) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (spin_button); - - if ( private->transferFocus ) { - if ( private->focusWidget ) { - gtk_widget_grab_focus( private->focusWidget ); - } - } -} - -static void -gimp_spin_scale_value_changed (GtkSpinButton *spin_button) -{ - GtkAdjustment *adjustment = gtk_spin_button_get_adjustment (spin_button); - GimpSpinScalePrivate *private = GET_PRIVATE (spin_button); - gdouble lower; - gdouble upper; - gdouble value; - - gimp_spin_scale_get_limits (GIMP_SPIN_SCALE (spin_button), &lower, &upper); - - value = CLAMP (gtk_adjustment_get_value (adjustment), lower, upper); - - gtk_entry_set_progress_fraction (GTK_ENTRY (spin_button), - pow ((value - lower) / (upper - lower), - 1.0 / private->gamma)); - - // TODO - Allow scrollwheel to change value then return focus, - // but clicks/keypress should keep focus in the control - //if ( gtk_widget_has_focus( GTK_WIDGET(spin_button) ) ) { - // gimp_spin_scale_defocus( spin_button ); - //} -} - - -/* public functions */ - -GtkWidget * -gimp_spin_scale_new (GtkAdjustment *adjustment, - const gchar *label, - gint digits) -{ - g_return_val_if_fail (GTK_IS_ADJUSTMENT (adjustment), NULL); - - return g_object_new (GIMP_TYPE_SPIN_SCALE, - "adjustment", adjustment, - "label", label, - "digits", digits, - NULL); -} - -void -gimp_spin_scale_set_label (GimpSpinScale *scale, - const gchar *label) -{ - GimpSpinScalePrivate *private; - - g_return_if_fail (GIMP_IS_SPIN_SCALE (scale)); - - private = GET_PRIVATE (scale); - - if (label == private->label) - return; - - g_free (private->label); - private->label = g_strdup (label); - - if (private->layout) - { - g_object_unref (private->layout); - private->layout = NULL; - } - - gtk_widget_queue_resize (GTK_WIDGET (scale)); - - g_object_notify (G_OBJECT (scale), "label"); -} - -const gchar * -gimp_spin_scale_get_label (GimpSpinScale *scale) -{ - g_return_val_if_fail (GIMP_IS_SPIN_SCALE (scale), NULL); - - return GET_PRIVATE (scale)->label; -} - -void -gimp_spin_scale_set_scale_limits (GimpSpinScale *scale, - gdouble lower, - gdouble upper) -{ - GimpSpinScalePrivate *private; - GtkSpinButton *spin_button; - GtkAdjustment *adjustment; - - g_return_if_fail (GIMP_IS_SPIN_SCALE (scale)); - - private = GET_PRIVATE (scale); - spin_button = GTK_SPIN_BUTTON (scale); - adjustment = gtk_spin_button_get_adjustment (spin_button); - - g_return_if_fail (lower >= gtk_adjustment_get_lower (adjustment)); - g_return_if_fail (upper <= gtk_adjustment_get_upper (adjustment)); - - private->scale_limits_set = TRUE; - private->scale_lower = lower; - private->scale_upper = upper; - private->gamma = 1.0; - - gimp_spin_scale_value_changed (spin_button); -} - -void -gimp_spin_scale_unset_scale_limits (GimpSpinScale *scale) -{ - GimpSpinScalePrivate *private; - - g_return_if_fail (GIMP_IS_SPIN_SCALE (scale)); - - private = GET_PRIVATE (scale); - - private->scale_limits_set = FALSE; - private->scale_lower = 0.0; - private->scale_upper = 0.0; - - gimp_spin_scale_value_changed (GTK_SPIN_BUTTON (scale)); -} - -gboolean -gimp_spin_scale_get_scale_limits (GimpSpinScale *scale, - gdouble *lower, - gdouble *upper) -{ - GimpSpinScalePrivate *private; - - g_return_val_if_fail (GIMP_IS_SPIN_SCALE (scale), FALSE); - - private = GET_PRIVATE (scale); - - if (lower) - *lower = private->scale_lower; - - if (upper) - *upper = private->scale_upper; - - return private->scale_limits_set; -} - -void -gimp_spin_scale_set_gamma (GimpSpinScale *scale, - gdouble gamma) -{ - GimpSpinScalePrivate *private; - - g_return_if_fail (GIMP_IS_SPIN_SCALE (scale)); - - private = GET_PRIVATE (scale); - - private->gamma = gamma; - - gimp_spin_scale_value_changed (GTK_SPIN_BUTTON (scale)); -} - -gdouble -gimp_spin_scale_get_gamma (GimpSpinScale *scale) -{ - g_return_val_if_fail (GIMP_IS_SPIN_SCALE (scale), 1.0); - - return GET_PRIVATE(scale)->gamma; -} diff --git a/src/ui/widget/gimpspinscale.h b/src/ui/widget/gimpspinscale.h deleted file mode 100644 index b42a0faf8..000000000 --- a/src/ui/widget/gimpspinscale.h +++ /dev/null @@ -1,82 +0,0 @@ -/* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * gimpspinscale.h - * Copyright (C) 2010 Michael Natterer - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef __GIMP_SPIN_SCALE_H__ -#define __GIMP_SPIN_SCALE_H__ - -#ifndef WITH_GIMP -#include -#endif - -G_BEGIN_DECLS - -#define GIMP_TYPE_SPIN_SCALE (gimp_spin_scale_get_type ()) -#define GIMP_SPIN_SCALE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_SPIN_SCALE, GimpSpinScale)) -#define GIMP_SPIN_SCALE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_SPIN_SCALE, GimpSpinScaleClass)) -#define GIMP_IS_SPIN_SCALE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_SPIN_SCALE)) -#define GIMP_IS_SPIN_SCALE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_SPIN_SCALE)) -#define GIMP_SPIN_SCALE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_SPIN_SCALE, GimpSpinScaleClass)) - - -typedef struct _GimpSpinScale GimpSpinScale; -typedef struct _GimpSpinScaleClass GimpSpinScaleClass; - -struct _GimpSpinScale -{ - GtkSpinButton parent_instance; -}; - -struct _GimpSpinScaleClass -{ - GtkSpinButtonClass parent_class; -}; - - -GType gimp_spin_scale_get_type (void) G_GNUC_CONST; - -GtkWidget * gimp_spin_scale_new (GtkAdjustment *adjustment, - const gchar *label, - gint digits); - -void gimp_spin_scale_set_label (GimpSpinScale *scale, - const gchar *label); -const gchar * gimp_spin_scale_get_label (GimpSpinScale *scale); - -void gimp_spin_scale_set_scale_limits (GimpSpinScale *scale, - gdouble lower, - gdouble upper); -void gimp_spin_scale_unset_scale_limits (GimpSpinScale *scale); -gboolean gimp_spin_scale_get_scale_limits (GimpSpinScale *scale, - gdouble *lower, - gdouble *upper); - -void gimp_spin_scale_set_gamma (GimpSpinScale *scale, - gdouble gamma); -gdouble gimp_spin_scale_get_gamma (GimpSpinScale *scale); - -void gimp_spin_scale_set_focuswidget (GtkWidget *scale, - GtkWidget *widget); - -void gimp_spin_scale_set_appearance (GtkWidget *scale, - const gchar *appearance); - -G_END_DECLS - -#endif /* __GIMP_SPIN_SCALE_H__ */ diff --git a/src/ui/widget/spin-scale.cpp b/src/ui/widget/spin-scale.cpp index eb91aaf39..f74626d9b 100644 --- a/src/ui/widget/spin-scale.cpp +++ b/src/ui/widget/spin-scale.cpp @@ -11,7 +11,7 @@ #include #include -#include "ui/widget/gimpspinscale.h" +#include "widgets/gimp/gimpspinscale.h" namespace Inkscape { namespace UI { diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 47ffe82ac..b2071af4e 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -1,24 +1,25 @@ +add_subdirectory(gimp) set(widgets_SRC button.cpp - arc-toolbar.cpp - box3d-toolbar.cpp - calligraphy-toolbar.cpp - connector-toolbar.cpp - dropper-toolbar.cpp - eraser-toolbar.cpp - lpe-toolbar.cpp - measure-toolbar.cpp - mesh-toolbar.cpp - node-toolbar.cpp - pencil-toolbar.cpp - rect-toolbar.cpp - spiral-toolbar.cpp - spray-toolbar.cpp - star-toolbar.cpp - text-toolbar.cpp - tweak-toolbar.cpp - zoom-toolbar.cpp + arc-toolbar.cpp + box3d-toolbar.cpp + calligraphy-toolbar.cpp + connector-toolbar.cpp + dropper-toolbar.cpp + eraser-toolbar.cpp + lpe-toolbar.cpp + measure-toolbar.cpp + mesh-toolbar.cpp + node-toolbar.cpp + pencil-toolbar.cpp + rect-toolbar.cpp + spiral-toolbar.cpp + spray-toolbar.cpp + star-toolbar.cpp + text-toolbar.cpp + tweak-toolbar.cpp + zoom-toolbar.cpp dash-selector.cpp desktop-widget.cpp eek-preview.cpp @@ -40,7 +41,6 @@ set(widgets_SRC ink-toggle-action.cpp ink-tool-menu-action.cpp paint-selector.cpp - ruler.cpp select-toolbar.cpp sp-attribute-widget.cpp sp-color-selector.cpp @@ -59,24 +59,24 @@ set(widgets_SRC # ------- # Headers button.h - arc-toolbar.h - box3d-toolbar.h - calligraphy-toolbar.h - connector-toolbar.h - dropper-toolbar.h - eraser-toolbar.h - lpe-toolbar.h - measure-toolbar.h - mesh-toolbar.h - node-toolbar.h - pencil-toolbar.h - rect-toolbar.h - spiral-toolbar.h - spray-toolbar.h - star-toolbar.h - text-toolbar.h - tweak-toolbar.h - zoom-toolbar.h + arc-toolbar.h + box3d-toolbar.h + calligraphy-toolbar.h + connector-toolbar.h + dropper-toolbar.h + eraser-toolbar.h + lpe-toolbar.h + measure-toolbar.h + mesh-toolbar.h + node-toolbar.h + pencil-toolbar.h + rect-toolbar.h + spiral-toolbar.h + spray-toolbar.h + star-toolbar.h + text-toolbar.h + tweak-toolbar.h + zoom-toolbar.h dash-selector.h desktop-widget.h eek-preview.h @@ -99,7 +99,6 @@ set(widgets_SRC ink-toggle-action.h ink-tool-menu-action.h paint-selector.h - ruler.h select-toolbar.h sp-attribute-widget.h sp-color-selector.h diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index aa485498e..bd72560c6 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -57,7 +57,7 @@ // We're in the "widgets" directory, so no need to explicitly prefix these: #include "button.h" -#include "ruler.h" +#include "gimp/ruler.h" #include "spinbutton-events.h" #include "spw-utilities.h" #include "toolbox.h" diff --git a/src/widgets/ege-adjustment-action.cpp b/src/widgets/ege-adjustment-action.cpp index 8fef21741..6678d1e5a 100644 --- a/src/widgets/ege-adjustment-action.cpp +++ b/src/widgets/ege-adjustment-action.cpp @@ -47,7 +47,7 @@ #include "icon-size.h" #include "widgets/ege-adjustment-action.h" -#include "ui/widget/gimpspinscale.h" +#include "gimp/gimpspinscale.h" #include "ui/icon-names.h" diff --git a/src/widgets/gimp/CMakeLists.txt b/src/widgets/gimp/CMakeLists.txt new file mode 100644 index 000000000..7b3e834e3 --- /dev/null +++ b/src/widgets/gimp/CMakeLists.txt @@ -0,0 +1,13 @@ +set(gimpwidgets_SRC + gimpcolorwheel.c + gimpspinscale.c + ruler.cpp + + # ------- + # Headers + gimpcolorwheel.h + gimpspinscale.h + ruler.h +) + +add_inkscape_source("${gimpwidgets_SRC}") diff --git a/src/widgets/gimp/gimpcolorwheel.c b/src/widgets/gimp/gimpcolorwheel.c new file mode 100644 index 000000000..212391497 --- /dev/null +++ b/src/widgets/gimp/gimpcolorwheel.c @@ -0,0 +1,1467 @@ +/* HSV color selector for GTK+ + * + * Copyright (C) 1999 The Free Software Foundation + * + * Authors: Simon Budig (original code) + * Federico Mena-Quintero (cleanup for GTK+) + * Jonathan Blandford (cleanup for GTK+) + * Michael Natterer (ported back to GIMP) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/* + * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + */ + +/* + * This widget was adopted by Inkscape by Alex Valavanis + * on 2013-01-08. Last merges with GIMP code were applied using the following + * commits from the GIMP git repository at + * http://git.gnome.org/browse/gimp/tree/modules/gimpcolorwheel.c + * + * Gtk+ 2 code merge: commit 632c5 (2013-01-06) + * Gtk+ 3 code merge: commit bcfc6, gtk3-port branch (2013-01-06) + */ + +#include "config.h" + +#include +#include + +#include "gimpcolorwheel.h" +#include + + +/* Default ring fraction */ +#define DEFAULT_FRACTION 0.1 + +/* Default width/height */ +#define DEFAULT_SIZE 100 + +/* Default ring width */ +#define DEFAULT_RING_WIDTH 10 + + +/* Dragging modes */ +typedef enum +{ + DRAG_NONE, + DRAG_H, + DRAG_SV +} DragMode; + +/* Private part of the GimpColorWheel structure */ +typedef struct +{ + /* Color value */ + gdouble h; + gdouble s; + gdouble v; + + /* ring_width is this fraction of size */ + gdouble ring_fraction; + + /* Size and ring width */ + gint size; + gint ring_width; + + /* Window for capturing events */ + GdkWindow *window; + + /* Dragging mode */ + DragMode mode; + + guint focus_on_ring : 1; +} GimpColorWheelPrivate; + +enum +{ + CHANGED, + MOVE, + LAST_SIGNAL +}; + +static void gimp_color_wheel_map (GtkWidget *widget); +static void gimp_color_wheel_unmap (GtkWidget *widget); +static void gimp_color_wheel_realize (GtkWidget *widget); +static void gimp_color_wheel_unrealize (GtkWidget *widget); +static void gimp_color_wheel_size_allocate (GtkWidget *widget, + GtkAllocation *allocation); +static gboolean gimp_color_wheel_button_press (GtkWidget *widget, + GdkEventButton *event); +static gboolean gimp_color_wheel_button_release (GtkWidget *widget, + GdkEventButton *event); +static gboolean gimp_color_wheel_motion (GtkWidget *widget, + GdkEventMotion *event); +static gboolean gimp_color_wheel_draw (GtkWidget *widget, + cairo_t *cr); +static void gimp_color_wheel_get_preferred_width (GtkWidget *widget, + gint *minimum_width, + gint *natural_width); +static void gimp_color_wheel_get_preferred_height (GtkWidget *widget, + gint *minimum_height, + gint *natural_height); +static gboolean gimp_color_wheel_grab_broken (GtkWidget *widget, + GdkEventGrabBroken *event); +static gboolean gimp_color_wheel_focus (GtkWidget *widget, + GtkDirectionType direction); +static void gimp_color_wheel_move (GimpColorWheel *wheel, + GtkDirectionType dir); + + +static guint wheel_signals[LAST_SIGNAL]; + +G_DEFINE_TYPE (GimpColorWheel, gimp_color_wheel, GTK_TYPE_WIDGET) + +#define parent_class gimp_color_wheel_parent_class + + +static void +gimp_color_wheel_class_init (GimpColorWheelClass *class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (class); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); + GimpColorWheelClass *wheel_class = GIMP_COLOR_WHEEL_CLASS (class); + GtkBindingSet *binding_set; + + widget_class->map = gimp_color_wheel_map; + widget_class->unmap = gimp_color_wheel_unmap; + widget_class->realize = gimp_color_wheel_realize; + widget_class->unrealize = gimp_color_wheel_unrealize; + widget_class->size_allocate = gimp_color_wheel_size_allocate; + widget_class->button_press_event = gimp_color_wheel_button_press; + widget_class->button_release_event = gimp_color_wheel_button_release; + widget_class->motion_notify_event = gimp_color_wheel_motion; + widget_class->get_preferred_width = gimp_color_wheel_get_preferred_width; + widget_class->get_preferred_height = gimp_color_wheel_get_preferred_height; + widget_class->draw = gimp_color_wheel_draw; + widget_class->focus = gimp_color_wheel_focus; + widget_class->grab_broken_event = gimp_color_wheel_grab_broken; + + wheel_class->move = gimp_color_wheel_move; + + wheel_signals[CHANGED] = + g_signal_new ("changed", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GimpColorWheelClass, changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + wheel_signals[MOVE] = + g_signal_new ("move", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (GimpColorWheelClass, move), + NULL, NULL, + g_cclosure_marshal_VOID__ENUM, + G_TYPE_NONE, 1, + GTK_TYPE_DIRECTION_TYPE); + + binding_set = gtk_binding_set_by_class (class); + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Up, 0, + "move", 1, + G_TYPE_ENUM, GTK_DIR_UP); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Up, 0, + "move", 1, + G_TYPE_ENUM, GTK_DIR_UP); + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Down, 0, + "move", 1, + G_TYPE_ENUM, GTK_DIR_DOWN); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Down, 0, + "move", 1, + G_TYPE_ENUM, GTK_DIR_DOWN); + + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Right, 0, + "move", 1, + G_TYPE_ENUM, GTK_DIR_RIGHT); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Right, 0, + "move", 1, + G_TYPE_ENUM, GTK_DIR_RIGHT); + + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Left, 0, + "move", 1, + G_TYPE_ENUM, GTK_DIR_LEFT); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Left, 0, + "move", 1, + G_TYPE_ENUM, GTK_DIR_LEFT); + + g_type_class_add_private (object_class, sizeof (GimpColorWheelPrivate)); +} + +static void +gimp_color_wheel_init (GimpColorWheel *wheel) +{ + GimpColorWheelPrivate *priv; + + priv = G_TYPE_INSTANCE_GET_PRIVATE (wheel, GIMP_TYPE_COLOR_WHEEL, + GimpColorWheelPrivate); + + wheel->priv = priv; + + gtk_widget_set_has_window (GTK_WIDGET (wheel), FALSE); + gtk_widget_set_can_focus (GTK_WIDGET (wheel), TRUE); + + priv->ring_fraction = DEFAULT_FRACTION; + priv->size = DEFAULT_SIZE; + priv->ring_width = DEFAULT_RING_WIDTH; +} + +static void +gimp_color_wheel_map (GtkWidget *widget) +{ + GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); + GimpColorWheelPrivate *priv = wheel->priv; + + GTK_WIDGET_CLASS (parent_class)->map (widget); + + gdk_window_show (priv->window); +} + +static void +gimp_color_wheel_unmap (GtkWidget *widget) +{ + GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); + GimpColorWheelPrivate *priv = wheel->priv; + + gdk_window_hide (priv->window); + + GTK_WIDGET_CLASS (parent_class)->unmap (widget); +} + +static void +gimp_color_wheel_realize (GtkWidget *widget) +{ + GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); + GimpColorWheelPrivate *priv = wheel->priv; + GtkAllocation allocation; + GdkWindowAttr attr; + gint attr_mask; + GdkWindow *parent_window; + + gtk_widget_get_allocation (widget, &allocation); + + gtk_widget_set_realized (widget, TRUE); + + attr.window_type = GDK_WINDOW_CHILD; + attr.x = allocation.x; + attr.y = allocation.y; + attr.width = allocation.width; + attr.height = allocation.height; + attr.wclass = GDK_INPUT_ONLY; + attr.event_mask = (gtk_widget_get_events (widget) | + GDK_KEY_PRESS_MASK | + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_POINTER_MOTION_MASK | + GDK_ENTER_NOTIFY_MASK | + GDK_LEAVE_NOTIFY_MASK); + + attr_mask = GDK_WA_X | GDK_WA_Y; + + parent_window = gtk_widget_get_parent_window (widget); + + gtk_widget_set_window (widget, parent_window); + g_object_ref (parent_window); + + priv->window = gdk_window_new (parent_window, &attr, attr_mask); + gdk_window_set_user_data (priv->window, wheel); +} + +static void +gimp_color_wheel_unrealize (GtkWidget *widget) +{ + GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); + GimpColorWheelPrivate *priv = wheel->priv; + + gdk_window_set_user_data (priv->window, NULL); + gdk_window_destroy (priv->window); + priv->window = NULL; + + GTK_WIDGET_CLASS (parent_class)->unrealize (widget); +} + +static void +gimp_color_wheel_get_preferred_width (GtkWidget *widget, + gint *minimum_width, + gint *natural_width) +{ + gint focus_width; + gint focus_pad; + + gtk_widget_style_get (widget, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + NULL); + + *minimum_width = *natural_width = DEFAULT_SIZE + 2 * (focus_width + focus_pad); +} + +static void +gimp_color_wheel_get_preferred_height (GtkWidget *widget, + gint *minimum_height, + gint *natural_height) +{ + gint focus_width; + gint focus_pad; + + gtk_widget_style_get (widget, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + NULL); + + *minimum_height = *natural_height = DEFAULT_SIZE + 2 * (focus_width + focus_pad); +} + +static void +gimp_color_wheel_size_allocate (GtkWidget *widget, + GtkAllocation *allocation) +{ + GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); + GimpColorWheelPrivate *priv = wheel->priv; + gint focus_width; + gint focus_pad; + + gtk_widget_set_allocation (widget, allocation); + + gtk_widget_style_get (widget, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + NULL); + + priv->size = MIN (allocation->width - 2 * (focus_width + focus_pad), + allocation->height - 2 * (focus_width + focus_pad)); + + priv->ring_width = priv->size * priv->ring_fraction; + + if (gtk_widget_get_realized (widget)) + gdk_window_move_resize (priv->window, + allocation->x, + allocation->y, + allocation->width, + allocation->height); +} + + +/* Utility functions */ + +#define INTENSITY(r, g, b) ((r) * 0.30 + (g) * 0.59 + (b) * 0.11) + +/* Converts from HSV to RGB */ +static void +hsv_to_rgb (gdouble *h, + gdouble *s, + gdouble *v) +{ + gdouble hue, saturation, value; + gdouble f, p, q, t; + + if (*s == 0.0) + { + *h = *v; + *s = *v; + *v = *v; /* heh */ + } + else + { + hue = *h * 6.0; + saturation = *s; + value = *v; + + if (hue == 6.0) + hue = 0.0; + + f = hue - (int) hue; + p = value * (1.0 - saturation); + q = value * (1.0 - saturation * f); + t = value * (1.0 - saturation * (1.0 - f)); + + switch ((int) hue) + { + case 0: + *h = value; + *s = t; + *v = p; + break; + + case 1: + *h = q; + *s = value; + *v = p; + break; + + case 2: + *h = p; + *s = value; + *v = t; + break; + + case 3: + *h = p; + *s = q; + *v = value; + break; + + case 4: + *h = t; + *s = p; + *v = value; + break; + + case 5: + *h = value; + *s = p; + *v = q; + break; + + default: + g_assert_not_reached (); + } + } +} + +/* Computes the vertices of the saturation/value triangle */ +static void +compute_triangle (GimpColorWheel *wheel, + gint *hx, + gint *hy, + gint *sx, + gint *sy, + gint *vx, + gint *vy) +{ + GimpColorWheelPrivate *priv = wheel->priv; + GtkAllocation allocation; + gdouble center_x; + gdouble center_y; + gdouble inner, outer; + gdouble angle; + + gtk_widget_get_allocation (GTK_WIDGET (wheel), &allocation); + + center_x = allocation.width / 2.0; + center_y = allocation.height / 2.0; + + outer = priv->size / 2.0; + inner = outer - priv->ring_width; + angle = priv->h * 2.0 * G_PI; + + *hx = floor (center_x + cos (angle) * inner + 0.5); + *hy = floor (center_y - sin (angle) * inner + 0.5); + *sx = floor (center_x + cos (angle + 2.0 * G_PI / 3.0) * inner + 0.5); + *sy = floor (center_y - sin (angle + 2.0 * G_PI / 3.0) * inner + 0.5); + *vx = floor (center_x + cos (angle + 4.0 * G_PI / 3.0) * inner + 0.5); + *vy = floor (center_y - sin (angle + 4.0 * G_PI / 3.0) * inner + 0.5); +} + +/* Computes whether a point is inside the hue ring */ +static gboolean +is_in_ring (GimpColorWheel *wheel, + gdouble x, + gdouble y) +{ + GimpColorWheelPrivate *priv = wheel->priv; + GtkAllocation allocation; + gdouble dx, dy, dist; + gdouble center_x; + gdouble center_y; + gdouble inner, outer; + + gtk_widget_get_allocation (GTK_WIDGET (wheel), &allocation); + + center_x = allocation.width / 2.0; + center_y = allocation.height / 2.0; + + outer = priv->size / 2.0; + inner = outer - priv->ring_width; + + dx = x - center_x; + dy = center_y - y; + dist = dx * dx + dy * dy; + + return (dist >= inner * inner && dist <= outer * outer); +} + +/* Computes a saturation/value pair based on the mouse coordinates */ +static void +compute_sv (GimpColorWheel *wheel, + gdouble x, + gdouble y, + gdouble *s, + gdouble *v) +{ + GtkAllocation allocation; + gint ihx, ihy, isx, isy, ivx, ivy; + gdouble hx, hy, sx, sy, vx, vy; + gdouble center_x; + gdouble center_y; + + gtk_widget_get_allocation (GTK_WIDGET (wheel), &allocation); + + compute_triangle (wheel, &ihx, &ihy, &isx, &isy, &ivx, &ivy); + + center_x = allocation.width / 2.0; + center_y = allocation.height / 2.0; + + hx = ihx - center_x; + hy = center_y - ihy; + sx = isx - center_x; + sy = center_y - isy; + vx = ivx - center_x; + vy = center_y - ivy; + x -= center_x; + y = center_y - y; + + if (vx * (x - sx) + vy * (y - sy) < 0.0) + { + *s = 1.0; + *v = (((x - sx) * (hx - sx) + (y - sy) * (hy-sy)) + / ((hx - sx) * (hx - sx) + (hy - sy) * (hy - sy))); + + if (*v < 0.0) + *v = 0.0; + else if (*v > 1.0) + *v = 1.0; + } + else if (hx * (x - sx) + hy * (y - sy) < 0.0) + { + *s = 0.0; + *v = (((x - sx) * (vx - sx) + (y - sy) * (vy - sy)) + / ((vx - sx) * (vx - sx) + (vy - sy) * (vy - sy))); + + if (*v < 0.0) + *v = 0.0; + else if (*v > 1.0) + *v = 1.0; + } + else if (sx * (x - hx) + sy * (y - hy) < 0.0) + { + *v = 1.0; + *s = (((x - vx) * (hx - vx) + (y - vy) * (hy - vy)) / + ((hx - vx) * (hx - vx) + (hy - vy) * (hy - vy))); + + if (*s < 0.0) + *s = 0.0; + else if (*s > 1.0) + *s = 1.0; + } + else + { + *v = (((x - sx) * (hy - vy) - (y - sy) * (hx - vx)) + / ((vx - sx) * (hy - vy) - (vy - sy) * (hx - vx))); + + if (*v<= 0.0) + { + *v = 0.0; + *s = 0.0; + } + else + { + if (*v > 1.0) + *v = 1.0; + + if (fabs (hy - vy) < fabs (hx - vx)) + *s = (x - sx - *v * (vx - sx)) / (*v * (hx - vx)); + else + *s = (y - sy - *v * (vy - sy)) / (*v * (hy - vy)); + + if (*s < 0.0) + *s = 0.0; + else if (*s > 1.0) + *s = 1.0; + } + } +} + +/* Computes whether a point is inside the saturation/value triangle */ +static gboolean +is_in_triangle (GimpColorWheel *wheel, + gdouble x, + gdouble y) +{ + gint hx, hy, sx, sy, vx, vy; + gdouble det, s, v; + + compute_triangle (wheel, &hx, &hy, &sx, &sy, &vx, &vy); + + det = (vx - sx) * (hy - sy) - (vy - sy) * (hx - sx); + + s = ((x - sx) * (hy - sy) - (y - sy) * (hx - sx)) / det; + v = ((vx - sx) * (y - sy) - (vy - sy) * (x - sx)) / det; + + return (s >= 0.0 && v >= 0.0 && s + v <= 1.0); +} + +/* Computes a value based on the mouse coordinates */ +static double +compute_v (GimpColorWheel *wheel, + gdouble x, + gdouble y) +{ + GtkAllocation allocation; + gdouble center_x; + gdouble center_y; + gdouble dx, dy; + gdouble angle; + + gtk_widget_get_allocation (GTK_WIDGET (wheel), &allocation); + + center_x = allocation.width / 2.0; + center_y = allocation.height / 2.0; + + dx = x - center_x; + dy = center_y - y; + + angle = atan2 (dy, dx); + if (angle < 0.0) + angle += 2.0 * G_PI; + + return angle / (2.0 * G_PI); +} + +static void +set_cross_grab (GimpColorWheel *wheel, + guint32 time) +{ + GimpColorWheelPrivate *priv = wheel->priv; + GdkCursor *cursor; + + cursor = + gdk_cursor_new_for_display (gtk_widget_get_display (GTK_WIDGET (wheel)), + GDK_CROSSHAIR); + + gdk_device_grab (gtk_get_current_event_device(), + priv->window, + GDK_OWNERSHIP_NONE, + FALSE, + GDK_POINTER_MOTION_MASK | + GDK_POINTER_MOTION_HINT_MASK | + GDK_BUTTON_RELEASE_MASK, + cursor, time); + g_object_unref (cursor); +} + +static gboolean gimp_color_wheel_grab_broken(GtkWidget *widget, GdkEventGrabBroken *event) +{ + (void)event; + GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); + GimpColorWheelPrivate *priv = wheel->priv; + + priv->mode = DRAG_NONE; + + return TRUE; +} + +static gboolean +gimp_color_wheel_button_press (GtkWidget *widget, + GdkEventButton *event) +{ + GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); + GimpColorWheelPrivate *priv = wheel->priv; + gdouble x, y; + + if (priv->mode != DRAG_NONE || event->button != 1) + return FALSE; + + x = event->x; + y = event->y; + + if (is_in_ring (wheel, x, y)) + { + priv->mode = DRAG_H; + set_cross_grab (wheel, event->time); + + gimp_color_wheel_set_color (wheel, + compute_v (wheel, x, y), + priv->s, + priv->v); + + gtk_widget_grab_focus (widget); + priv->focus_on_ring = TRUE; + + return TRUE; + } + + if (is_in_triangle (wheel, x, y)) + { + gdouble s, v; + + priv->mode = DRAG_SV; + set_cross_grab (wheel, event->time); + + compute_sv (wheel, x, y, &s, &v); + gimp_color_wheel_set_color (wheel, priv->h, s, v); + + gtk_widget_grab_focus (widget); + priv->focus_on_ring = FALSE; + + return TRUE; + } + + return FALSE; +} + +static gboolean +gimp_color_wheel_button_release (GtkWidget *widget, + GdkEventButton *event) +{ + GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); + GimpColorWheelPrivate *priv = wheel->priv; + DragMode mode; + gdouble x, y; + + if (priv->mode == DRAG_NONE || event->button != 1) + return FALSE; + + /* Set the drag mode to DRAG_NONE so that signal handlers for "catched" + * can see that this is the final color state. + */ + + mode = priv->mode; + priv->mode = DRAG_NONE; + + x = event->x; + y = event->y; + + if (mode == DRAG_H) + { + gimp_color_wheel_set_color (wheel, + compute_v (wheel, x, y), priv->s, priv->v); + } + else if (mode == DRAG_SV) + { + gdouble s, v; + + compute_sv (wheel, x, y, &s, &v); + gimp_color_wheel_set_color (wheel, priv->h, s, v); + } + else + g_assert_not_reached (); + + gdk_device_ungrab (gtk_get_current_event_device(), + event->time); + + return TRUE; +} + +static gboolean +gimp_color_wheel_motion (GtkWidget *widget, + GdkEventMotion *event) +{ + GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); + GimpColorWheelPrivate *priv = wheel->priv; + gdouble x, y; + + if (priv->mode == DRAG_NONE) + return FALSE; + + gdk_event_request_motions (event); + x = event->x; + y = event->y; + + if (priv->mode == DRAG_H) + { + gimp_color_wheel_set_color (wheel, + compute_v (wheel, x, y), priv->s, priv->v); + return TRUE; + } + else if (priv->mode == DRAG_SV) + { + gdouble s, v; + + compute_sv (wheel, x, y, &s, &v); + gimp_color_wheel_set_color (wheel, priv->h, s, v); + return TRUE; + } + + g_assert_not_reached (); + + return FALSE; +} + + +/* Redrawing */ + +/* Paints the hue ring */ +static void +paint_ring (GimpColorWheel *wheel, + cairo_t *cr) +{ + GtkWidget *widget = GTK_WIDGET (wheel); + GimpColorWheelPrivate *priv = wheel->priv; + gint width, height; + gint xx, yy; + gdouble dx, dy, dist; + gdouble center_x; + gdouble center_y; + gdouble inner, outer; + guint32 *buf, *p; + gdouble angle; + gdouble hue; + gdouble r, g, b; + cairo_surface_t *source; + cairo_t *source_cr; + gint stride; + + width = gtk_widget_get_allocated_width (widget); + height = gtk_widget_get_allocated_height (widget); + + center_x = width / 2.0; + center_y = height / 2.0; + + outer = priv->size / 2.0; + inner = outer - priv->ring_width; + + /* Create an image initialized with the ring colors */ + + stride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, width); + buf = g_new (guint32, height * stride / 4); + + for (yy = 0; yy < height; yy++) + { + p = buf + yy * width; + dy = -(yy - center_y); + + for (xx = 0; xx < width; xx++) + { + dx = xx - center_x; + + dist = dx * dx + dy * dy; + if (dist < ((inner-1) * (inner-1)) || dist > ((outer+1) * (outer+1))) + { + *p++ = 0; + continue; + } + + angle = atan2 (dy, dx); + if (angle < 0.0) + angle += 2.0 * G_PI; + + hue = angle / (2.0 * G_PI); + + r = hue; + g = 1.0; + b = 1.0; + hsv_to_rgb (&r, &g, &b); + + *p++ = (((int)floor (r * 255 + 0.5) << 16) | + ((int)floor (g * 255 + 0.5) << 8) | + (int)floor (b * 255 + 0.5)); + } + } + + source = cairo_image_surface_create_for_data ((unsigned char *)buf, + CAIRO_FORMAT_RGB24, + width, height, stride); + + /* Now draw the value marker onto the source image, so that it + * will get properly clipped at the edges of the ring + */ + source_cr = cairo_create (source); + + r = priv->h; + g = 1.0; + b = 1.0; + hsv_to_rgb (&r, &g, &b); + + if (INTENSITY (r, g, b) > 0.5) + cairo_set_source_rgb (source_cr, 0.0, 0.0, 0.0); + else + cairo_set_source_rgb (source_cr, 1.0, 1.0, 1.0); + + cairo_move_to (source_cr, center_x, center_y); + cairo_line_to (source_cr, + center_x + cos (priv->h * 2.0 * G_PI) * priv->size / 2, + center_y - sin (priv->h * 2.0 * G_PI) * priv->size / 2); + cairo_stroke (source_cr); + cairo_destroy (source_cr); + + /* Draw the ring using the source image */ + + cairo_save (cr); + + cairo_set_source_surface (cr, source, 0, 0); + cairo_surface_destroy (source); + + cairo_set_line_width (cr, priv->ring_width); + cairo_new_path (cr); + cairo_arc (cr, + center_x, center_y, + priv->size / 2.0 - priv->ring_width / 2.0, + 0, 2 * G_PI); + cairo_stroke (cr); + + cairo_restore (cr); + + g_free (buf); +} + +/* Converts an HSV triplet to an integer RGB triplet */ +static void +get_color (gdouble h, + gdouble s, + gdouble v, + gint *r, + gint *g, + gint *b) +{ + hsv_to_rgb (&h, &s, &v); + + *r = floor (h * 255 + 0.5); + *g = floor (s * 255 + 0.5); + *b = floor (v * 255 + 0.5); +} + +#define SWAP(a, b, t) ((t) = (a), (a) = (b), (b) = (t)) + +#define LERP(a, b, v1, v2, i) (((v2) - (v1) != 0) \ + ? ((a) + ((b) - (a)) * ((i) - (v1)) / ((v2) - (v1))) \ + : (a)) + +/* Number of pixels we extend out from the edges when creating + * color source to avoid artifacts + */ +#define PAD 3 + +/* Paints the HSV triangle */ +static void +paint_triangle (GimpColorWheel *wheel, + cairo_t *cr, + gboolean draw_focus) +{ + GtkWidget *widget = GTK_WIDGET (wheel); + GimpColorWheelPrivate *priv = wheel->priv; + gint hx, hy, sx, sy, vx, vy; /* HSV vertices */ + gint x1, y1, r1, g1, b1; /* First vertex in scanline order */ + gint x2, y2, r2, g2, b2; /* Second vertex */ + gint x3, y3, r3, g3, b3; /* Third vertex */ + gint t; + guint32 *buf, *p, c; + gint xl, xr, rl, rr, gl, gr, bl, br; /* Scanline data */ + gint xx, yy; + gint x_interp, y_interp; + gint x_start, x_end; + cairo_surface_t *source; + gdouble r, g, b; + gint stride; + gint width, height; + GtkStyleContext *context; + + width = gtk_widget_get_allocated_width (widget); + height = gtk_widget_get_allocated_height (widget); + + /* Compute triangle's vertices */ + + compute_triangle (wheel, &hx, &hy, &sx, &sy, &vx, &vy); + + x1 = hx; + y1 = hy; + get_color (priv->h, 1.0, 1.0, &r1, &g1, &b1); + + x2 = sx; + y2 = sy; + get_color (priv->h, 1.0, 0.0, &r2, &g2, &b2); + + x3 = vx; + y3 = vy; + get_color (priv->h, 0.0, 1.0, &r3, &g3, &b3); + + if (y2 > y3) + { + SWAP (x2, x3, t); + SWAP (y2, y3, t); + SWAP (r2, r3, t); + SWAP (g2, g3, t); + SWAP (b2, b3, t); + } + + if (y1 > y3) + { + SWAP (x1, x3, t); + SWAP (y1, y3, t); + SWAP (r1, r3, t); + SWAP (g1, g3, t); + SWAP (b1, b3, t); + } + + if (y1 > y2) + { + SWAP (x1, x2, t); + SWAP (y1, y2, t); + SWAP (r1, r2, t); + SWAP (g1, g2, t); + SWAP (b1, b2, t); + } + + /* Shade the triangle */ + + stride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, width); + buf = g_new (guint32, height * stride / 4); + + for (yy = 0; yy < height; yy++) + { + p = buf + yy * width; + + if (yy >= y1 - PAD && yy < y3 + PAD) + { + y_interp = CLAMP (yy, y1, y3); + + if (y_interp < y2) + { + xl = LERP (x1, x2, y1, y2, y_interp); + + rl = LERP (r1, r2, y1, y2, y_interp); + gl = LERP (g1, g2, y1, y2, y_interp); + bl = LERP (b1, b2, y1, y2, y_interp); + } + else + { + xl = LERP (x2, x3, y2, y3, y_interp); + + rl = LERP (r2, r3, y2, y3, y_interp); + gl = LERP (g2, g3, y2, y3, y_interp); + bl = LERP (b2, b3, y2, y3, y_interp); + } + + xr = LERP (x1, x3, y1, y3, y_interp); + + rr = LERP (r1, r3, y1, y3, y_interp); + gr = LERP (g1, g3, y1, y3, y_interp); + br = LERP (b1, b3, y1, y3, y_interp); + + if (xl > xr) + { + SWAP (xl, xr, t); + SWAP (rl, rr, t); + SWAP (gl, gr, t); + SWAP (bl, br, t); + } + + x_start = MAX (xl - PAD, 0); + x_end = MIN (xr + PAD, width); + x_start = MIN (x_start, x_end); + + c = (rl << 16) | (gl << 8) | bl; + + for (xx = 0; xx < x_start; xx++) + *p++ = c; + + for (; xx < x_end; xx++) + { + x_interp = CLAMP (xx, xl, xr); + + *p++ = ((LERP (rl, rr, xl, xr, x_interp) << 16) | + (LERP (gl, gr, xl, xr, x_interp) << 8) | + LERP (bl, br, xl, xr, x_interp)); + } + + c = (rr << 16) | (gr << 8) | br; + + for (; xx < width; xx++) + *p++ = c; + } + } + + source = cairo_image_surface_create_for_data ((unsigned char *)buf, + CAIRO_FORMAT_RGB24, + width, height, stride); + + /* Draw a triangle with the image as a source */ + + cairo_set_source_surface (cr, source, 0, 0); + cairo_surface_destroy (source); + + cairo_move_to (cr, x1, y1); + cairo_line_to (cr, x2, y2); + cairo_line_to (cr, x3, y3); + cairo_close_path (cr); + cairo_fill (cr); + + g_free (buf); + + /* Draw value marker */ + + xx = floor (sx + (vx - sx) * priv->v + (hx - vx) * priv->s * priv->v + 0.5); + yy = floor (sy + (vy - sy) * priv->v + (hy - vy) * priv->s * priv->v + 0.5); + + r = priv->h; + g = priv->s; + b = priv->v; + hsv_to_rgb (&r, &g, &b); + + context = gtk_widget_get_style_context (widget); + + gtk_style_context_save (context); + + if (INTENSITY (r, g, b) > 0.5) + { + gtk_style_context_add_class (context, "light-area-focus"); + cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); + } + else + { + gtk_style_context_add_class (context, "dark-area-focus"); + cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); + } + +#define RADIUS 4 +#define FOCUS_RADIUS 6 + + cairo_new_path (cr); + cairo_arc (cr, xx, yy, RADIUS, 0, 2 * G_PI); + cairo_stroke (cr); + + /* Draw focus outline */ + + if (draw_focus && ! priv->focus_on_ring) + { + gint focus_width; + gint focus_pad; + + gtk_widget_style_get (widget, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + NULL); + + gtk_render_focus (context, cr, + xx - FOCUS_RADIUS - focus_width - focus_pad, + yy - FOCUS_RADIUS - focus_width - focus_pad, + 2 * (FOCUS_RADIUS + focus_width + focus_pad), + 2 * (FOCUS_RADIUS + focus_width + focus_pad)); + } + + gtk_style_context_restore (context); +} + +static gboolean +gimp_color_wheel_draw (GtkWidget *widget, + cairo_t *cr) +{ + GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); + GimpColorWheelPrivate *priv = wheel->priv; + gboolean draw_focus; + + draw_focus = gtk_widget_has_visible_focus (widget); + + paint_ring (wheel, cr); + paint_triangle (wheel, cr, draw_focus); + + if (draw_focus && priv->focus_on_ring) + { + GtkStyleContext *context = gtk_widget_get_style_context (widget); + + gtk_render_focus (context, cr, 0, 0, + gtk_widget_get_allocated_width (widget), + gtk_widget_get_allocated_height (widget)); + } + + return FALSE; +} + +static gboolean +gimp_color_wheel_focus (GtkWidget *widget, + GtkDirectionType dir) +{ + GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); + GimpColorWheelPrivate *priv = wheel->priv; + + if (!gtk_widget_has_focus (widget)) + { + if (dir == GTK_DIR_TAB_BACKWARD) + priv->focus_on_ring = FALSE; + else + priv->focus_on_ring = TRUE; + + gtk_widget_grab_focus (widget); + return TRUE; + } + + switch (dir) + { + case GTK_DIR_UP: + if (priv->focus_on_ring) + return FALSE; + else + priv->focus_on_ring = TRUE; + break; + + case GTK_DIR_DOWN: + if (priv->focus_on_ring) + priv->focus_on_ring = FALSE; + else + return FALSE; + break; + + case GTK_DIR_LEFT: + case GTK_DIR_TAB_BACKWARD: + if (priv->focus_on_ring) + return FALSE; + else + priv->focus_on_ring = TRUE; + break; + + case GTK_DIR_RIGHT: + case GTK_DIR_TAB_FORWARD: + if (priv->focus_on_ring) + priv->focus_on_ring = FALSE; + else + return FALSE; + break; + } + + gtk_widget_queue_draw (widget); + + return TRUE; +} + +/** + * gimp_color_wheel_new: + * + * Creates a new HSV color selector. + * + * Return value: A newly-created HSV color selector. + * + * Since: 2.14 + */ +GtkWidget* +gimp_color_wheel_new (void) +{ + return g_object_new (GIMP_TYPE_COLOR_WHEEL, NULL); +} + +/** + * gimp_color_wheel_set_color: + * @hsv: An HSV color selector + * @h: Hue + * @s: Saturation + * @v: Value + * + * Sets the current color in an HSV color selector. + * Color component values must be in the [0.0, 1.0] range. + * + * Since: 2.14 + */ +void +gimp_color_wheel_set_color (GimpColorWheel *wheel, + gdouble h, + gdouble s, + gdouble v) +{ + GimpColorWheelPrivate *priv; + + g_return_if_fail (GIMP_IS_COLOR_WHEEL (wheel)); + g_return_if_fail (h >= 0.0 && h <= 1.0); + g_return_if_fail (s >= 0.0 && s <= 1.0); + g_return_if_fail (v >= 0.0 && v <= 1.0); + + priv = wheel->priv; + + if(h == 0.0 && s == 0.0) { + h = priv->h; + } + + priv->h = h; + priv->s = s; + priv->v = v; + + g_signal_emit (wheel, wheel_signals[CHANGED], 0); + + gtk_widget_queue_draw (GTK_WIDGET (wheel)); +} + +/** + * gimp_color_wheel_get_color: + * @hsv: An HSV color selector + * @h: (out): Return value for the hue + * @s: (out): Return value for the saturation + * @v: (out): Return value for the value + * + * Queries the current color in an HSV color selector. + * Returned values will be in the [0.0, 1.0] range. + * + * Since: 2.14 + */ +void +gimp_color_wheel_get_color (GimpColorWheel *wheel, + gdouble *h, + gdouble *s, + gdouble *v) +{ + GimpColorWheelPrivate *priv; + + g_return_if_fail (GIMP_IS_COLOR_WHEEL (wheel)); + + priv = wheel->priv; + + if (h) *h = priv->h; + if (s) *s = priv->s; + if (v) *v = priv->v; +} + +/** + * gimp_color_wheel_set_ring_fraction: + * @ring: A wheel color selector + * @fraction: Ring fraction + * + * Sets the ring fraction of a wheel color selector. + * + * Since: GIMP 2.10 + */ +void +gimp_color_wheel_set_ring_fraction (GimpColorWheel *hsv, + gdouble fraction) +{ + GimpColorWheelPrivate *priv; + + g_return_if_fail (GIMP_IS_COLOR_WHEEL (hsv)); + + priv = hsv->priv; + + priv->ring_fraction = CLAMP (fraction, 0.01, 0.99); + + gtk_widget_queue_draw (GTK_WIDGET (hsv)); +} + +/** + * gimp_color_wheel_get_ring_fraction: + * @ring: A wheel color selector + * + * Returns value: The ring fraction of the wheel color selector. + * + * Since: GIMP 2.10 + */ +gdouble +gimp_color_wheel_get_ring_fraction (GimpColorWheel *wheel) +{ + GimpColorWheelPrivate *priv; + + g_return_val_if_fail (GIMP_IS_COLOR_WHEEL (wheel), DEFAULT_FRACTION); + + priv = wheel->priv; + + return priv->ring_fraction; +} + +/** + * gimp_color_wheel_is_adjusting: + * @hsv: A #GimpColorWheel + * + * An HSV color selector can be said to be adjusting if multiple rapid + * changes are being made to its value, for example, when the user is + * adjusting the value with the mouse. This function queries whether + * the HSV color selector is being adjusted or not. + * + * Return value: %TRUE if clients can ignore changes to the color value, + * since they may be transitory, or %FALSE if they should consider + * the color value status to be final. + * + * Since: 2.14 + */ +gboolean +gimp_color_wheel_is_adjusting (GimpColorWheel *wheel) +{ + GimpColorWheelPrivate *priv; + + g_return_val_if_fail (GIMP_IS_COLOR_WHEEL (wheel), FALSE); + + priv = wheel->priv; + + return priv->mode != DRAG_NONE; +} + +static void +gimp_color_wheel_move (GimpColorWheel *wheel, + GtkDirectionType dir) +{ + GimpColorWheelPrivate *priv = wheel->priv; + gdouble hue, sat, val; + gint hx, hy, sx, sy, vx, vy; /* HSV vertices */ + gint x, y; /* position in triangle */ + + hue = priv->h; + sat = priv->s; + val = priv->v; + + compute_triangle (wheel, &hx, &hy, &sx, &sy, &vx, &vy); + + x = floor (sx + (vx - sx) * priv->v + (hx - vx) * priv->s * priv->v + 0.5); + y = floor (sy + (vy - sy) * priv->v + (hy - vy) * priv->s * priv->v + 0.5); + +#define HUE_DELTA 0.002 + switch (dir) + { + case GTK_DIR_UP: + if (priv->focus_on_ring) + hue += HUE_DELTA; + else + { + y -= 1; + compute_sv (wheel, x, y, &sat, &val); + } + break; + + case GTK_DIR_DOWN: + if (priv->focus_on_ring) + hue -= HUE_DELTA; + else + { + y += 1; + compute_sv (wheel, x, y, &sat, &val); + } + break; + + case GTK_DIR_LEFT: + if (priv->focus_on_ring) + hue += HUE_DELTA; + else + { + x -= 1; + compute_sv (wheel, x, y, &sat, &val); + } + break; + + case GTK_DIR_RIGHT: + if (priv->focus_on_ring) + hue -= HUE_DELTA + ; + else + { + x += 1; + compute_sv (wheel, x, y, &sat, &val); + } + break; + + default: + /* we don't care about the tab directions */ + break; + } + + /* Wrap */ + if (hue < 0.0) + hue = 1.0; + else if (hue > 1.0) + hue = 0.0; + + gimp_color_wheel_set_color (wheel, hue, sat, val); +} diff --git a/src/widgets/gimp/gimpcolorwheel.h b/src/widgets/gimp/gimpcolorwheel.h new file mode 100644 index 000000000..016fb593f --- /dev/null +++ b/src/widgets/gimp/gimpcolorwheel.h @@ -0,0 +1,95 @@ +/* HSV color selector for GTK+ + * + * Copyright (C) 1999 The Free Software Foundation + * + * Authors: Simon Budig (original code) + * Federico Mena-Quintero (cleanup for GTK+) + * Jonathan Blandford (cleanup for GTK+) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/* + * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + */ + +#ifndef __GIMP_COLOR_WHEEL_H__ +#define __GIMP_COLOR_WHEEL_H__ + +G_BEGIN_DECLS + +#define GIMP_TYPE_COLOR_WHEEL (gimp_color_wheel_get_type ()) +#define GIMP_COLOR_WHEEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_COLOR_WHEEL, GimpColorWheel)) +#define GIMP_COLOR_WHEEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_COLOR_WHEEL, GimpColorWheelClass)) +#define GIMP_IS_COLOR_WHEEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_COLOR_WHEEL)) +#define GIMP_IS_COLOR_WHEEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_COLOR_WHEEL)) +#define GIMP_COLOR_WHEEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_COLOR_WHEEL, GimpColorWheelClass)) + + +typedef struct _GimpColorWheel GimpColorWheel; +typedef struct _GimpColorWheelClass GimpColorWheelClass; + +struct _GimpColorWheel +{ + GtkWidget parent_instance; + + /* Private data */ + gpointer priv; +}; + +struct _GimpColorWheelClass +{ + GtkWidgetClass parent_class; + + /* Notification signals */ + void (* changed) (GimpColorWheel *wheel); + + /* Keybindings */ + void (* move) (GimpColorWheel *wheel, + GtkDirectionType type); + + /* Padding for future expansion */ + void (*_gimp_reserved1) (void); + void (*_gimp_reserved2) (void); + void (*_gimp_reserved3) (void); + void (*_gimp_reserved4) (void); +}; + + +GType gimp_color_wheel_get_type (void) G_GNUC_CONST; +GtkWidget * gimp_color_wheel_new (void); + +void gimp_color_wheel_set_color (GimpColorWheel *wheel, + double h, + double s, + double v); +void gimp_color_wheel_get_color (GimpColorWheel *wheel, + gdouble *h, + gdouble *s, + gdouble *v); + +void gimp_color_wheel_set_ring_fraction (GimpColorWheel *wheel, + gdouble fraction); +gdouble gimp_color_wheel_get_ring_fraction (GimpColorWheel *wheel); + +gboolean gimp_color_wheel_is_adjusting (GimpColorWheel *wheel); + +G_END_DECLS + +#endif /* __GIMP_COLOR_WHEEL_H__ */ diff --git a/src/widgets/gimp/gimpspinscale.c b/src/widgets/gimp/gimpspinscale.c new file mode 100644 index 000000000..8d8c6c935 --- /dev/null +++ b/src/widgets/gimp/gimpspinscale.c @@ -0,0 +1,969 @@ +/* GIMP - The GNU Image Manipulation Program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * gimpspinscale.c + * Copyright (C) 2010 Michael Natterer + * 2012 Øyvind KolÃ¥s + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "gimpspinscale.h" + + +enum +{ + PROP_0, + PROP_LABEL, + PROP_FOCUS_WIDGET +}; + +typedef enum +{ + TARGET_NUMBER, + TARGET_UPPER, + TARGET_LOWER, + TARGET_NONE +} SpinScaleTarget; + +typedef enum +{ + APPEARANCE_FULL = 1, /* Full size suitable for tablets */ + APPEARANCE_COMPACT, /* Compact, suitable for desktops with mouse control */ +} SpinScaleAppearance; + +typedef struct _GimpSpinScalePrivate GimpSpinScalePrivate; + +struct _GimpSpinScalePrivate +{ + gchar *label; + + gboolean scale_limits_set; + gdouble scale_lower; + gdouble scale_upper; + gdouble gamma; + + PangoLayout *layout; + gboolean changing_value; + gboolean relative_change; + gdouble start_x; + gdouble start_value; + + GtkWidget* focusWidget; + gboolean transferFocus; + SpinScaleAppearance appearanceMode; +}; + +#define GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \ + GIMP_TYPE_SPIN_SCALE, \ + GimpSpinScalePrivate)) + + +static void gimp_spin_scale_dispose (GObject *object); +static void gimp_spin_scale_finalize (GObject *object); +static void gimp_spin_scale_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void gimp_spin_scale_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + +static void gimp_spin_scale_style_set (GtkWidget *widget, + GtkStyle *prev_style); + +static void gimp_spin_scale_get_preferred_width (GtkWidget *widget, + gint *minimum_width, + gint *natural_width); +static void gimp_spin_scale_get_preferred_height (GtkWidget *widget, + gint *minimum_width, + gint *natural_width); +static gboolean gimp_spin_scale_draw (GtkWidget *widget, + cairo_t *cr); + +static gboolean gimp_spin_scale_button_press (GtkWidget *widget, + GdkEventButton *event); +static gboolean gimp_spin_scale_button_release (GtkWidget *widget, + GdkEventButton *event); +static gboolean gimp_spin_scale_motion_notify (GtkWidget *widget, + GdkEventMotion *event); +static gboolean gimp_spin_scale_leave_notify (GtkWidget *widget, + GdkEventCrossing *event); +static gboolean gimp_spin_scale_keypress( GtkWidget *widget, + GdkEventKey *event); + +static void gimp_spin_scale_defocus( GtkSpinButton *spin_button ); + +static void gimp_spin_scale_value_changed (GtkSpinButton *spin_button); + + +G_DEFINE_TYPE (GimpSpinScale, gimp_spin_scale, GTK_TYPE_SPIN_BUTTON); + +#define parent_class gimp_spin_scale_parent_class + + +static void +gimp_spin_scale_class_init (GimpSpinScaleClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + GtkSpinButtonClass *spin_button_class = GTK_SPIN_BUTTON_CLASS (klass); + + object_class->dispose = gimp_spin_scale_dispose; + object_class->finalize = gimp_spin_scale_finalize; + object_class->set_property = gimp_spin_scale_set_property; + object_class->get_property = gimp_spin_scale_get_property; + + widget_class->style_set = gimp_spin_scale_style_set; + widget_class->get_preferred_width = gimp_spin_scale_get_preferred_width; + widget_class->get_preferred_height = gimp_spin_scale_get_preferred_height; + widget_class->draw = gimp_spin_scale_draw; + widget_class->button_press_event = gimp_spin_scale_button_press; + widget_class->button_release_event = gimp_spin_scale_button_release; + widget_class->motion_notify_event = gimp_spin_scale_motion_notify; + widget_class->leave_notify_event = gimp_spin_scale_leave_notify; + widget_class->key_press_event = gimp_spin_scale_keypress; + + spin_button_class->value_changed = gimp_spin_scale_value_changed; + + g_object_class_install_property (object_class, PROP_LABEL, + g_param_spec_string ("label", NULL, NULL, + NULL, + G_PARAM_READWRITE)); + + g_type_class_add_private (klass, sizeof (GimpSpinScalePrivate)); +} + +static void +gimp_spin_scale_init (GimpSpinScale *scale) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (scale); + + gtk_widget_add_events (GTK_WIDGET (scale), + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_POINTER_MOTION_MASK | + GDK_BUTTON1_MOTION_MASK | + GDK_LEAVE_NOTIFY_MASK); + + gtk_entry_set_alignment (GTK_ENTRY (scale), 1.0); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (scale), TRUE); + + private->gamma = 1.0; + private->focusWidget = NULL; + private->transferFocus = FALSE; + private->appearanceMode = APPEARANCE_COMPACT; +} + +static void +gimp_spin_scale_dispose (GObject *object) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (object); + + if (private->layout) + { + g_object_unref (private->layout); + private->layout = NULL; + } + + G_OBJECT_CLASS (parent_class)->dispose (object); +} + +static void +gimp_spin_scale_finalize (GObject *object) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (object); + + if (private->label) + { + g_free (private->label); + private->label = NULL; + } + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +gimp_spin_scale_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (object); + GimpSpinScale *scale = GIMP_SPIN_SCALE (object); + + switch (property_id) + { + case PROP_LABEL: + gimp_spin_scale_set_label (scale, g_value_get_string (value)); + break; + + case PROP_FOCUS_WIDGET: + { + /* TODO unhook prior */ + private->focusWidget = GTK_WIDGET (g_value_get_pointer (value)); + } + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gimp_spin_scale_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (object); + GimpSpinScale *scale = GIMP_SPIN_SCALE (object); + + switch (property_id) + { + case PROP_LABEL: + g_value_set_string (value, gimp_spin_scale_get_label (scale)); + break; + + case PROP_FOCUS_WIDGET: + g_value_set_pointer (value, private->focusWidget); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + + +void +gimp_spin_scale_set_focuswidget( GtkWidget *scale, GtkWidget* widget ) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (scale); + + /* TODO unhook prior */ + + private->focusWidget = widget; +} + +void +gimp_spin_scale_set_appearance( GtkWidget *widget, const gchar *appearance) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (widget); + + if ( strcmp("full", appearance) == 0 ) { + private->appearanceMode = APPEARANCE_FULL; + } else if ( strcmp("compact", appearance) == 0 ) { + private->appearanceMode = APPEARANCE_COMPACT; + } +} + +static void +gimp_spin_scale_get_preferred_width (GtkWidget *widget, + gint *minimum_width, + gint *natural_width) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (widget); + PangoContext *context = gtk_widget_get_pango_context (widget); + PangoFontMetrics *metrics; + + GTK_WIDGET_CLASS (parent_class)->get_preferred_width (widget, + minimum_width, + natural_width); + + metrics = pango_context_get_metrics (context, + pango_context_get_font_description (context), + pango_context_get_language (context)); + + if (private->label) + { + gint char_width; + gint digit_width; + gint char_pixels; + + char_width = pango_font_metrics_get_approximate_char_width (metrics); + digit_width = pango_font_metrics_get_approximate_digit_width (metrics); + char_pixels = PANGO_PIXELS (MAX (char_width, digit_width)); + + /* ~3 chars for the ellipse */ + *minimum_width += char_pixels * 3; + *natural_width += char_pixels * 3; + } + + pango_font_metrics_unref (metrics); +} + +static void +gimp_spin_scale_get_preferred_height (GtkWidget *widget, + gint *minimum_height, + gint *natural_height) +{ + PangoContext *context = gtk_widget_get_pango_context (widget); + PangoFontMetrics *metrics; + //gint height; + + GTK_WIDGET_CLASS (parent_class)->get_preferred_height (widget, + minimum_height, + natural_height); + + metrics = pango_context_get_metrics (context, + pango_context_get_font_description (context), + pango_context_get_language (context)); + + //height = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics) + + // pango_font_metrics_get_descent (metrics)); + + *minimum_height += 1; + *natural_height += 1; + + pango_font_metrics_unref (metrics); +} + +static void +gimp_spin_scale_style_set (GtkWidget *widget, + GtkStyle *prev_style) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (widget); + + GTK_WIDGET_CLASS (parent_class)->style_set (widget, prev_style); + + if (private->layout) + { + g_object_unref (private->layout); + private->layout = NULL; + } +} + + +static gboolean + gimp_spin_scale_draw (GtkWidget *widget, + cairo_t *cr) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (widget); + GtkStyleContext *style = gtk_widget_get_style_context(widget); + GtkAllocation allocation; + GdkRGBA color; + + cairo_save (cr); + GTK_WIDGET_CLASS (parent_class)->draw (widget, cr); + cairo_restore (cr); + + gtk_widget_get_allocation (widget, &allocation); + + cairo_set_line_width (cr, 1.0); + + if (private->label) + { + GdkRectangle text_area; + gint minimum_width; + gint natural_width; + PangoRectangle logical; + gint layout_offset_x; + gint layout_offset_y; + GtkStateFlags state; + GdkRGBA text_color; + GdkRGBA bar_text_color; + gdouble progress_fraction; + gint progress_x; + gint progress_y; + gint progress_width; + gint progress_height; + + gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); + + GTK_WIDGET_CLASS (parent_class)->get_preferred_width (widget, + &minimum_width, + &natural_width); + + if (! private->layout) + { + private->layout = gtk_widget_create_pango_layout (widget, + private->label); + pango_layout_set_ellipsize (private->layout, PANGO_ELLIPSIZE_END); + } + + pango_layout_set_width (private->layout, + PANGO_SCALE * + (allocation.width - minimum_width)); + pango_layout_get_pixel_extents (private->layout, NULL, &logical); + + gtk_entry_get_layout_offsets (GTK_ENTRY (widget), NULL, &layout_offset_y); + + if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) + layout_offset_x = text_area.x + text_area.width - logical.width - 4; + else + layout_offset_x = 4; + + layout_offset_x -= logical.x; + + state = gtk_widget_get_state_flags (widget); + + gtk_style_context_get_color (style, state, &text_color); + + gtk_style_context_save (style); + gtk_style_context_add_class (style, GTK_STYLE_CLASS_PROGRESSBAR); + gtk_style_context_get_color (style, state, &bar_text_color); + gtk_style_context_restore (style); + + progress_fraction = gtk_entry_get_progress_fraction (GTK_ENTRY (widget)); + + if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) + { + progress_fraction = 1.0 - progress_fraction; + + progress_x = text_area.width * progress_fraction; + progress_y = 0; + progress_width = text_area.width - progress_x; + progress_height = text_area.height; + } + else + { + progress_x = 0; + progress_y = 0; + progress_width = text_area.width * progress_fraction; + progress_height = text_area.height; + } + + cairo_save (cr); + + cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); + cairo_rectangle (cr, 0, 0, text_area.width, text_area.height); + cairo_rectangle (cr, progress_x, progress_y, + progress_width, progress_height); + cairo_clip (cr); + cairo_set_fill_rule (cr, CAIRO_FILL_RULE_WINDING); + + cairo_move_to (cr, layout_offset_x, text_area.y + layout_offset_y-3); + gdk_cairo_set_source_rgba (cr, &text_color); + pango_cairo_show_layout (cr, private->layout); + cairo_restore (cr); + + cairo_rectangle (cr, progress_x, progress_y, + progress_width, progress_height); + cairo_clip (cr); + + cairo_move_to (cr, layout_offset_x, text_area.y + layout_offset_y-3); + gdk_cairo_set_source_rgba (cr, &bar_text_color); + pango_cairo_show_layout (cr, private->layout); + } + + return FALSE; +} + +/* Returns TRUE if a translation should be done */ +static gboolean +gtk_widget_get_translation_to_window (GtkWidget *widget, + GdkWindow *window, + int *x, + int *y) +{ + GdkWindow *w, *widget_window; + + if (!gtk_widget_get_has_window (widget)) + { + GtkAllocation allocation; + + gtk_widget_get_allocation (widget, &allocation); + + *x = -allocation.x; + *y = -allocation.y; + } + else + { + *x = 0; + *y = 0; + } + + widget_window = gtk_widget_get_window (widget); + + for (w = window; w && w != widget_window; w = gdk_window_get_parent (w)) + { + int wx, wy; + gdk_window_get_position (w, &wx, &wy); + *x += wx; + *y += wy; + } + + if (w == NULL) + { + *x = 0; + *y = 0; + return FALSE; + } + + return TRUE; +} + +static void +gimp_spin_scale_event_to_widget_coords (GtkWidget *widget, + GdkWindow *window, + gdouble event_x, + gdouble event_y, + gint *widget_x, + gint *widget_y) +{ + gint tx, ty; + + if (gtk_widget_get_translation_to_window (widget, window, &tx, &ty)) + { + event_x += tx; + event_y += ty; + } + + *widget_x = event_x; + *widget_y = event_y; +} + +static SpinScaleTarget +gimp_spin_scale_get_target (GtkWidget *widget, + gdouble x, + gdouble y) +{ + GtkAllocation allocation; + PangoRectangle logical; + gint layout_x; + gint layout_y; + + gtk_widget_get_allocation (widget, &allocation); + gtk_entry_get_layout_offsets (GTK_ENTRY (widget), &layout_x, &layout_y); + pango_layout_get_pixel_extents (gtk_entry_get_layout (GTK_ENTRY (widget)), + NULL, &logical); + + GdkRectangle text_area; + gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); + + if (x >= text_area.x && x < text_area.width && + y >= text_area.y && y < text_area.height) + { + x -= text_area.x; + y -= text_area.y; + + if (x > layout_x && x < layout_x + logical.width && + y > layout_y && y < layout_y + logical.height) + { + return TARGET_NUMBER; + } + else if (y > text_area.height / 2) + { + return TARGET_LOWER; + } + + return TARGET_UPPER; + } + + return TARGET_NONE; +} + +static void +gimp_spin_scale_get_limits (GimpSpinScale *scale, + gdouble *lower, + gdouble *upper) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (scale); + + if (private->scale_limits_set) + { + *lower = private->scale_lower; + *upper = private->scale_upper; + } + else + { + GtkSpinButton *spin_button = GTK_SPIN_BUTTON (scale); + GtkAdjustment *adjustment = gtk_spin_button_get_adjustment (spin_button); + + *lower = gtk_adjustment_get_lower (adjustment); + *upper = gtk_adjustment_get_upper (adjustment); + } +} + +static void +gimp_spin_scale_change_value (GtkWidget *widget, + gdouble x) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (widget); + GtkSpinButton *spin_button = GTK_SPIN_BUTTON (widget); + GtkAdjustment *adjustment = gtk_spin_button_get_adjustment (spin_button); + gdouble lower; + gdouble upper; + gdouble value; + GdkRectangle text_area; + gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); + gimp_spin_scale_get_limits (GIMP_SPIN_SCALE (widget), &lower, &upper); + + if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) + x = text_area.width - x; + + if (private->relative_change) + { + gdouble diff; + gdouble step; + + step = (upper - lower) / text_area.width / 10.0; + if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) + diff = x - (text_area.width - private->start_x); + else + diff = x - private->start_x; + + value = (private->start_value + diff * step); + } + else + { + gdouble fraction; + + fraction = x / (gdouble) text_area.width; + if (fraction > 0.0) + fraction = pow (fraction, private->gamma); + + value = fraction * (upper - lower) + lower; + } + + gtk_adjustment_set_value (adjustment, value); +} + +static gboolean +gimp_spin_scale_button_press (GtkWidget *widget, + GdkEventButton *event) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (widget); + + private->changing_value = FALSE; + private->relative_change = FALSE; + + gint x, y; + gimp_spin_scale_event_to_widget_coords (widget, event->window, + event->x, event->y, + &x, &y); + switch (gimp_spin_scale_get_target (widget, x, y)) + { + case TARGET_UPPER: + private->changing_value = TRUE; + + gtk_widget_grab_focus (widget); + + gimp_spin_scale_change_value (widget, x); + + return TRUE; + + case TARGET_LOWER: + private->changing_value = TRUE; + + gtk_widget_grab_focus (widget); + + private->relative_change = TRUE; + private->start_x = x; + private->start_value = gtk_adjustment_get_value (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget))); + + return TRUE; + + default: + break; + } + + return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, event); +} + +static gboolean +gimp_spin_scale_button_release (GtkWidget *widget, + GdkEventButton *event) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (widget); + gint x, y; + + gimp_spin_scale_event_to_widget_coords (widget, event->window, + event->x, event->y, + &x, &y); + + if (private->changing_value) + { + private->changing_value = FALSE; + gimp_spin_scale_change_value (widget, x); + return TRUE; + } + + return GTK_WIDGET_CLASS (parent_class)->button_release_event (widget, event); +} + +static gboolean +gimp_spin_scale_motion_notify (GtkWidget *widget, + GdkEventMotion *event) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (widget); + + gdk_event_request_motions (event); + + gint x, y; + + gimp_spin_scale_event_to_widget_coords (widget, event->window, + event->x, event->y, + &x, &y); + + if (private->changing_value) + { + gimp_spin_scale_change_value (widget, x); + + return TRUE; + } + + GTK_WIDGET_CLASS (parent_class)->motion_notify_event (widget, event); + + if (! (event->state & + (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK)) + ) + { + GdkDisplay *display = gtk_widget_get_display (widget); + GdkCursor *cursor = NULL; + + switch (gimp_spin_scale_get_target (widget, x, y)) + { + case TARGET_NUMBER: + cursor = gdk_cursor_new_for_display (display, GDK_XTERM); + break; + + case TARGET_UPPER: + cursor = gdk_cursor_new_for_display (display, GDK_SB_UP_ARROW); + break; + + case TARGET_LOWER: + cursor = gdk_cursor_new_for_display (display, GDK_SB_H_DOUBLE_ARROW); + break; + + default: + break; + } + + if (cursor) + { + gdk_window_set_cursor (event->window, cursor); + g_object_unref (cursor); + } + } + + return FALSE; +} + +static gboolean +gimp_spin_scale_leave_notify (GtkWidget *widget, + GdkEventCrossing *event) +{ + gdk_window_set_cursor (event->window, NULL); + + return GTK_WIDGET_CLASS (parent_class)->leave_notify_event (widget, event); +} + +gboolean gimp_spin_scale_keypress( GtkWidget *widget, GdkEventKey *event) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (widget); + guint key = 0; + gdk_keymap_translate_keyboard_state( gdk_keymap_get_for_display( gdk_display_get_default() ), + event->hardware_keycode, (GdkModifierType)event->state, + 0, &key, 0, 0, 0 ); + + switch ( key ) { + + case GDK_KEY_Escape: + case GDK_KEY_Return: + case GDK_KEY_KP_Enter: + { + private->transferFocus = TRUE; + gimp_spin_scale_defocus( GTK_SPIN_BUTTON(widget) ); + } + break; + + } + + return GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event); +} + +static void +gimp_spin_scale_defocus( GtkSpinButton *spin_button ) +{ + GimpSpinScalePrivate *private = GET_PRIVATE (spin_button); + + if ( private->transferFocus ) { + if ( private->focusWidget ) { + gtk_widget_grab_focus( private->focusWidget ); + } + } +} + +static void +gimp_spin_scale_value_changed (GtkSpinButton *spin_button) +{ + GtkAdjustment *adjustment = gtk_spin_button_get_adjustment (spin_button); + GimpSpinScalePrivate *private = GET_PRIVATE (spin_button); + gdouble lower; + gdouble upper; + gdouble value; + + gimp_spin_scale_get_limits (GIMP_SPIN_SCALE (spin_button), &lower, &upper); + + value = CLAMP (gtk_adjustment_get_value (adjustment), lower, upper); + + gtk_entry_set_progress_fraction (GTK_ENTRY (spin_button), + pow ((value - lower) / (upper - lower), + 1.0 / private->gamma)); + + // TODO - Allow scrollwheel to change value then return focus, + // but clicks/keypress should keep focus in the control + //if ( gtk_widget_has_focus( GTK_WIDGET(spin_button) ) ) { + // gimp_spin_scale_defocus( spin_button ); + //} +} + + +/* public functions */ + +GtkWidget * +gimp_spin_scale_new (GtkAdjustment *adjustment, + const gchar *label, + gint digits) +{ + g_return_val_if_fail (GTK_IS_ADJUSTMENT (adjustment), NULL); + + return g_object_new (GIMP_TYPE_SPIN_SCALE, + "adjustment", adjustment, + "label", label, + "digits", digits, + NULL); +} + +void +gimp_spin_scale_set_label (GimpSpinScale *scale, + const gchar *label) +{ + GimpSpinScalePrivate *private; + + g_return_if_fail (GIMP_IS_SPIN_SCALE (scale)); + + private = GET_PRIVATE (scale); + + if (label == private->label) + return; + + g_free (private->label); + private->label = g_strdup (label); + + if (private->layout) + { + g_object_unref (private->layout); + private->layout = NULL; + } + + gtk_widget_queue_resize (GTK_WIDGET (scale)); + + g_object_notify (G_OBJECT (scale), "label"); +} + +const gchar * +gimp_spin_scale_get_label (GimpSpinScale *scale) +{ + g_return_val_if_fail (GIMP_IS_SPIN_SCALE (scale), NULL); + + return GET_PRIVATE (scale)->label; +} + +void +gimp_spin_scale_set_scale_limits (GimpSpinScale *scale, + gdouble lower, + gdouble upper) +{ + GimpSpinScalePrivate *private; + GtkSpinButton *spin_button; + GtkAdjustment *adjustment; + + g_return_if_fail (GIMP_IS_SPIN_SCALE (scale)); + + private = GET_PRIVATE (scale); + spin_button = GTK_SPIN_BUTTON (scale); + adjustment = gtk_spin_button_get_adjustment (spin_button); + + g_return_if_fail (lower >= gtk_adjustment_get_lower (adjustment)); + g_return_if_fail (upper <= gtk_adjustment_get_upper (adjustment)); + + private->scale_limits_set = TRUE; + private->scale_lower = lower; + private->scale_upper = upper; + private->gamma = 1.0; + + gimp_spin_scale_value_changed (spin_button); +} + +void +gimp_spin_scale_unset_scale_limits (GimpSpinScale *scale) +{ + GimpSpinScalePrivate *private; + + g_return_if_fail (GIMP_IS_SPIN_SCALE (scale)); + + private = GET_PRIVATE (scale); + + private->scale_limits_set = FALSE; + private->scale_lower = 0.0; + private->scale_upper = 0.0; + + gimp_spin_scale_value_changed (GTK_SPIN_BUTTON (scale)); +} + +gboolean +gimp_spin_scale_get_scale_limits (GimpSpinScale *scale, + gdouble *lower, + gdouble *upper) +{ + GimpSpinScalePrivate *private; + + g_return_val_if_fail (GIMP_IS_SPIN_SCALE (scale), FALSE); + + private = GET_PRIVATE (scale); + + if (lower) + *lower = private->scale_lower; + + if (upper) + *upper = private->scale_upper; + + return private->scale_limits_set; +} + +void +gimp_spin_scale_set_gamma (GimpSpinScale *scale, + gdouble gamma) +{ + GimpSpinScalePrivate *private; + + g_return_if_fail (GIMP_IS_SPIN_SCALE (scale)); + + private = GET_PRIVATE (scale); + + private->gamma = gamma; + + gimp_spin_scale_value_changed (GTK_SPIN_BUTTON (scale)); +} + +gdouble +gimp_spin_scale_get_gamma (GimpSpinScale *scale) +{ + g_return_val_if_fail (GIMP_IS_SPIN_SCALE (scale), 1.0); + + return GET_PRIVATE(scale)->gamma; +} diff --git a/src/widgets/gimp/gimpspinscale.h b/src/widgets/gimp/gimpspinscale.h new file mode 100644 index 000000000..b42a0faf8 --- /dev/null +++ b/src/widgets/gimp/gimpspinscale.h @@ -0,0 +1,82 @@ +/* GIMP - The GNU Image Manipulation Program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * gimpspinscale.h + * Copyright (C) 2010 Michael Natterer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GIMP_SPIN_SCALE_H__ +#define __GIMP_SPIN_SCALE_H__ + +#ifndef WITH_GIMP +#include +#endif + +G_BEGIN_DECLS + +#define GIMP_TYPE_SPIN_SCALE (gimp_spin_scale_get_type ()) +#define GIMP_SPIN_SCALE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_SPIN_SCALE, GimpSpinScale)) +#define GIMP_SPIN_SCALE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_SPIN_SCALE, GimpSpinScaleClass)) +#define GIMP_IS_SPIN_SCALE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_SPIN_SCALE)) +#define GIMP_IS_SPIN_SCALE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_SPIN_SCALE)) +#define GIMP_SPIN_SCALE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_SPIN_SCALE, GimpSpinScaleClass)) + + +typedef struct _GimpSpinScale GimpSpinScale; +typedef struct _GimpSpinScaleClass GimpSpinScaleClass; + +struct _GimpSpinScale +{ + GtkSpinButton parent_instance; +}; + +struct _GimpSpinScaleClass +{ + GtkSpinButtonClass parent_class; +}; + + +GType gimp_spin_scale_get_type (void) G_GNUC_CONST; + +GtkWidget * gimp_spin_scale_new (GtkAdjustment *adjustment, + const gchar *label, + gint digits); + +void gimp_spin_scale_set_label (GimpSpinScale *scale, + const gchar *label); +const gchar * gimp_spin_scale_get_label (GimpSpinScale *scale); + +void gimp_spin_scale_set_scale_limits (GimpSpinScale *scale, + gdouble lower, + gdouble upper); +void gimp_spin_scale_unset_scale_limits (GimpSpinScale *scale); +gboolean gimp_spin_scale_get_scale_limits (GimpSpinScale *scale, + gdouble *lower, + gdouble *upper); + +void gimp_spin_scale_set_gamma (GimpSpinScale *scale, + gdouble gamma); +gdouble gimp_spin_scale_get_gamma (GimpSpinScale *scale); + +void gimp_spin_scale_set_focuswidget (GtkWidget *scale, + GtkWidget *widget); + +void gimp_spin_scale_set_appearance (GtkWidget *scale, + const gchar *appearance); + +G_END_DECLS + +#endif /* __GIMP_SPIN_SCALE_H__ */ diff --git a/src/widgets/gimp/ruler.cpp b/src/widgets/gimp/ruler.cpp new file mode 100644 index 000000000..bfb9c9071 --- /dev/null +++ b/src/widgets/gimp/ruler.cpp @@ -0,0 +1,1425 @@ +/* + * Customized ruler class for inkscape. Note that this is a fork of + * the GimpRuler widget from GIMP: libgimpwidgets/gimpruler.c. + * The GIMP code is released under the GPL 3. The GIMP code itself + * is a fork of the now-obsolete GtkRuler widget from GTK+ 2. + * + * Major differences between implementations in Inkscape and GIMP are + * as follows: + * - We use a 1,2,4,8... scale for inches and 1,2,5,10... for everything + * else. GIMP uses 1,2,5,10... for everything. + * + * - We use a default font size of PANGO_SCALE_X_SMALL for labels, + * GIMP uses PANGO_SCALE_SMALL (i.e., a bit larger than ours). + * + * - We abbreviate large numbers in tick-labels (e.g., 10000 -> 10k) + * + * Authors: + * Lauris Kaplinski + * Frank Felfe + * bulia byak + * Diederik van Lierop + * Jon A. Cruz + * Alex Valavanis + * + * Copyright (C) 1999-2011 authors + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include +#include +#include + +#include "ruler.h" +#include "round.h" +#include +#include "util/units.h" + +#define ROUND(x) ((int) ((x) + 0.5)) + +#define GTK_PARAM_READWRITE G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB + +#define DEFAULT_RULER_FONT_SCALE PANGO_SCALE_X_SMALL +#define MINIMUM_INCR 5 +#define IMMEDIATE_REDRAW_THRESHOLD 20 + +using Inkscape::Util::unit_table; + +enum { + PROP_0, + PROP_ORIENTATION, + PROP_UNIT, + PROP_LOWER, + PROP_UPPER, + PROP_POSITION, + PROP_MAX_SIZE +}; + + +/* All distances below are in 1/72nd's of an inch. (According to + * Adobe, that's a point, but points are really 1/72.27 in.) + */ +typedef struct +{ + GtkOrientation orientation; + Inkscape::Util::Unit const *unit; + gdouble lower; + gdouble upper; + gdouble position; + gdouble max_size; + + GdkWindow *input_window; + cairo_surface_t *backing_store; + gboolean backing_store_valid; + GdkRectangle last_pos_rect; + guint pos_redraw_idle_id; + PangoLayout *layout; + gdouble font_scale; + + GList *track_widgets; +} SPRulerPrivate; + +#define SP_RULER_GET_PRIVATE(ruler) \ + G_TYPE_INSTANCE_GET_PRIVATE (ruler, SP_TYPE_RULER, SPRulerPrivate) + + +struct SPRulerMetric +{ + gdouble ruler_scale[16]; + gint subdivide[5]; +}; + +// Ruler metric for general use. +static SPRulerMetric const ruler_metric_general = { + { 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 25000, 50000, 100000 }, + { 1, 5, 10, 50, 100 } +}; + +// Ruler metric for inch scales. +static SPRulerMetric const ruler_metric_inches = { + { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 }, + { 1, 2, 4, 8, 16 } +}; + +static void sp_ruler_dispose (GObject *object); +static void sp_ruler_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +static void sp_ruler_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); + +static void sp_ruler_realize (GtkWidget *widget); +static void sp_ruler_unrealize (GtkWidget *widget); +static void sp_ruler_map (GtkWidget *widget); +static void sp_ruler_unmap (GtkWidget *widget); +static void sp_ruler_size_allocate (GtkWidget *widget, + GtkAllocation *allocation); + +static void sp_ruler_get_preferred_width (GtkWidget *widget, + gint *minimum_width, + gint *natural_width); + +static void sp_ruler_get_preferred_height (GtkWidget *widget, + gint *minimum_height, + gint *natural_height); +static void sp_ruler_style_updated (GtkWidget *widget); + +static gboolean sp_ruler_motion_notify (GtkWidget *widget, + GdkEventMotion *event); +static gboolean sp_ruler_draw (GtkWidget *widget, + cairo_t *cr); +static void sp_ruler_draw_ticks (SPRuler *ruler); +static GdkRectangle sp_ruler_get_pos_rect (SPRuler *ruler, + gdouble position); +static gboolean sp_ruler_idle_queue_pos_redraw(gpointer data); +static void sp_ruler_queue_pos_redraw (SPRuler *ruler); +static void sp_ruler_draw_pos (SPRuler *ruler, + cairo_t *cr); +static void sp_ruler_make_pixmap (SPRuler *ruler); + +static PangoLayout * sp_ruler_get_layout (GtkWidget *widget, + const gchar *text); + + +G_DEFINE_TYPE (SPRuler, sp_ruler, GTK_TYPE_WIDGET) + +#define parent_class sp_ruler_parent_class + + +static void +sp_ruler_class_init (SPRulerClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + +#if GTK_CHECK_VERSION(3,20,0) + gtk_widget_class_set_css_name (widget_class, "ruler-widget"); +#endif + + object_class->dispose = sp_ruler_dispose; + object_class->set_property = sp_ruler_set_property; + object_class->get_property = sp_ruler_get_property; + + widget_class->realize = sp_ruler_realize; + widget_class->unrealize = sp_ruler_unrealize; + widget_class->map = sp_ruler_map; + widget_class->unmap = sp_ruler_unmap; + widget_class->size_allocate = sp_ruler_size_allocate; + widget_class->get_preferred_width = sp_ruler_get_preferred_width; + widget_class->get_preferred_height = sp_ruler_get_preferred_height; + widget_class->style_updated = sp_ruler_style_updated; + widget_class->draw = sp_ruler_draw; + widget_class->motion_notify_event = sp_ruler_motion_notify; + + g_type_class_add_private (object_class, sizeof (SPRulerPrivate)); + + g_object_class_install_property (object_class, + PROP_ORIENTATION, + g_param_spec_enum ("orientation", + _("Orientation"), + _("The orientation of the ruler"), + GTK_TYPE_ORIENTATION, + GTK_ORIENTATION_HORIZONTAL, + static_cast(GTK_PARAM_READWRITE))); + + /* FIXME: Should probably use g_param_spec_enum */ + g_object_class_install_property (object_class, + PROP_UNIT, + g_param_spec_string ("unit", + _("Unit"), + _("Unit of the ruler"), + "px", + static_cast(GTK_PARAM_READWRITE))); + + g_object_class_install_property (object_class, + PROP_LOWER, + g_param_spec_double ("lower", + _("Lower"), + _("Lower limit of ruler"), + -G_MAXDOUBLE, + G_MAXDOUBLE, + 0.0, + static_cast(GTK_PARAM_READWRITE))); + + g_object_class_install_property (object_class, + PROP_UPPER, + g_param_spec_double ("upper", + _("Upper"), + _("Upper limit of ruler"), + -G_MAXDOUBLE, + G_MAXDOUBLE, + 0.0, + static_cast(GTK_PARAM_READWRITE))); + + g_object_class_install_property (object_class, + PROP_POSITION, + g_param_spec_double ("position", + _("Position"), + _("Position of mark on the ruler"), + -G_MAXDOUBLE, + G_MAXDOUBLE, + 0.0, + static_cast(GTK_PARAM_READWRITE))); + + g_object_class_install_property (object_class, + PROP_MAX_SIZE, + g_param_spec_double ("max-size", + _("Max Size"), + _("Maximum size of the ruler"), + -G_MAXDOUBLE, + G_MAXDOUBLE, + 0.0, + static_cast(GTK_PARAM_READWRITE))); + + gtk_widget_class_install_style_property (widget_class, + g_param_spec_double ("font-scale", + NULL, NULL, + 0.0, + G_MAXDOUBLE, + DEFAULT_RULER_FONT_SCALE, + G_PARAM_READABLE)); +} + +static void +sp_ruler_init (SPRuler *ruler) +{ + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + + gtk_widget_set_has_window (GTK_WIDGET (ruler), FALSE); + + priv->orientation = GTK_ORIENTATION_HORIZONTAL; + priv->unit = unit_table.getUnit("px"); + priv->lower = 0; + priv->upper = 0; + priv->position = 0; + priv->max_size = 0; + + priv->backing_store = NULL; + priv->backing_store_valid = FALSE; + + priv->last_pos_rect.x = 0; + priv->last_pos_rect.y = 0; + priv->last_pos_rect.width = 0; + priv->last_pos_rect.height = 0; + priv->pos_redraw_idle_id = 0; + + priv->font_scale = DEFAULT_RULER_FONT_SCALE; +} + +static void +sp_ruler_dispose (GObject *object) +{ + SPRuler *ruler = SP_RULER (object); + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + + while (priv->track_widgets) + sp_ruler_remove_track_widget (ruler, GTK_WIDGET(priv->track_widgets->data)); + + if (priv->pos_redraw_idle_id) + { + g_source_remove (priv->pos_redraw_idle_id); + priv->pos_redraw_idle_id = 0; + } + + G_OBJECT_CLASS (parent_class)->dispose (object); +} + + +/** + * sp_ruler_set_range: + * @ruler: the SPRuler + * @lower: the lower limit of the ruler + * @upper: the upper limit of the ruler + * @max_size: the maximum size of the ruler used when calculating the space to + * leave for the text + * + * This sets the range of the ruler. + */ +void +sp_ruler_set_range (SPRuler *ruler, + gdouble lower, + gdouble upper, + gdouble max_size) +{ + SPRulerPrivate *priv; + + g_return_if_fail (SP_IS_RULER (ruler)); + + priv = SP_RULER_GET_PRIVATE (ruler); + + g_object_freeze_notify (G_OBJECT (ruler)); + if (priv->lower != lower) + { + priv->lower = lower; + g_object_notify (G_OBJECT (ruler), "lower"); + } + if (priv->upper != upper) + { + priv->upper = upper; + g_object_notify (G_OBJECT (ruler), "upper"); + } + if (priv->max_size != max_size) + { + priv->max_size = max_size; + g_object_notify (G_OBJECT (ruler), "max-size"); + } + g_object_thaw_notify (G_OBJECT (ruler)); + + priv->backing_store_valid = FALSE; + gtk_widget_queue_draw (GTK_WIDGET (ruler)); +} + +/** + * sp_ruler_get_range: + * @ruler: a #SPRuler + * @lower: (allow-none): location to store lower limit of the ruler, or %NULL + * @upper: (allow-none): location to store upper limit of the ruler, or %NULL + * @max_size: location to store the maximum size of the ruler used when calculating + * the space to leave for the text, or %NULL. + * + * Retrieves values indicating the range and current position of a #SPRuler. + * See sp_ruler_set_range(). + **/ +void +sp_ruler_get_range (SPRuler *ruler, + gdouble *lower, + gdouble *upper, + gdouble *max_size) +{ + SPRulerPrivate *priv; + + g_return_if_fail (SP_IS_RULER (ruler)); + + priv = SP_RULER_GET_PRIVATE (ruler); + + if (lower) + *lower = priv->lower; + if (upper) + *upper = priv->upper; + if (max_size) + *max_size = priv->max_size; +} + +static void +sp_ruler_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + SPRuler *ruler = SP_RULER (object); + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + + switch (prop_id) + { + case PROP_ORIENTATION: + priv->orientation = static_cast(g_value_get_enum (value)); + gtk_widget_queue_resize (GTK_WIDGET (ruler)); + break; + + case PROP_UNIT: + sp_ruler_set_unit (ruler, unit_table.getUnit(g_value_get_string (value))); + break; + + case PROP_LOWER: + sp_ruler_set_range (ruler, + g_value_get_double (value), + priv->upper, + priv->max_size); + break; + case PROP_UPPER: + sp_ruler_set_range (ruler, + priv->lower, + g_value_get_double (value), + priv->max_size); + break; + + case PROP_POSITION: + sp_ruler_set_position (ruler, g_value_get_double (value)); + break; + + case PROP_MAX_SIZE: + sp_ruler_set_range (ruler, + priv->lower, + priv->upper, + g_value_get_double (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +sp_ruler_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + SPRuler *ruler = SP_RULER (object); + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + + switch (prop_id) + { + case PROP_ORIENTATION: + g_value_set_enum (value, priv->orientation); + break; + + case PROP_UNIT: + g_value_set_string (value, priv->unit->abbr.c_str()); + break; + case PROP_LOWER: + g_value_set_double (value, priv->lower); + break; + case PROP_UPPER: + g_value_set_double (value, priv->upper); + break; + case PROP_POSITION: + g_value_set_double (value, priv->position); + break; + case PROP_MAX_SIZE: + g_value_set_double (value, priv->max_size); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +sp_ruler_realize (GtkWidget *widget) +{ + SPRuler *ruler = SP_RULER (widget); + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + GtkAllocation allocation; + GdkWindowAttr attributes; + gint attributes_mask; + + GTK_WIDGET_CLASS (sp_ruler_parent_class)->realize (widget); + + gtk_widget_get_allocation (widget, &allocation); + + attributes.window_type = GDK_WINDOW_CHILD; + attributes.x = allocation.x; + attributes.y = allocation.y; + attributes.width = allocation.width; + attributes.height = allocation.height; + attributes.wclass = GDK_INPUT_ONLY; + attributes.event_mask = (gtk_widget_get_events (widget) | + GDK_EXPOSURE_MASK | + GDK_POINTER_MOTION_MASK | + GDK_POINTER_MOTION_HINT_MASK); + + attributes_mask = GDK_WA_X | GDK_WA_Y; + + priv->input_window = gdk_window_new (gtk_widget_get_parent_window (widget), + &attributes, attributes_mask); + gdk_window_set_user_data (priv->input_window, ruler); + + sp_ruler_make_pixmap (ruler); +} + +static void +sp_ruler_unrealize(GtkWidget *widget) +{ + SPRuler *ruler = SP_RULER (widget); + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + + if (priv->backing_store) + { + cairo_surface_destroy (priv->backing_store); + priv->backing_store = NULL; + } + + priv->backing_store_valid = FALSE; + + if (priv->layout) + { + g_object_unref (priv->layout); + priv->layout = NULL; + } + + if (priv->input_window) + { + gdk_window_destroy (priv->input_window); + priv->input_window = NULL; + } + + GTK_WIDGET_CLASS (sp_ruler_parent_class)->unrealize (widget); +} + +static void +sp_ruler_map (GtkWidget *widget) +{ + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); + + GTK_WIDGET_CLASS (sp_ruler_parent_class)->map (widget); + + if (priv->input_window) + gdk_window_show (priv->input_window); +} + +static void +sp_ruler_unmap (GtkWidget *widget) +{ + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); + + if (priv->input_window) + gdk_window_hide (priv->input_window); + + GTK_WIDGET_CLASS (sp_ruler_parent_class)->unmap (widget); +} + +static void +sp_ruler_size_allocate (GtkWidget *widget, + GtkAllocation *allocation) +{ + SPRuler *ruler = SP_RULER(widget); + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + GtkAllocation widget_allocation; + gboolean resized; + + gtk_widget_get_allocation (widget, &widget_allocation); + + resized = (widget_allocation.width != allocation->width || + widget_allocation.height != allocation->height); + + gtk_widget_set_allocation(widget, allocation); + + if (gtk_widget_get_realized (widget)) + { + gdk_window_move_resize (priv->input_window, + allocation->x, allocation->y, + allocation->width, allocation->height); + + if (resized) + sp_ruler_make_pixmap (ruler); + } +} + +static void +sp_ruler_size_request (GtkWidget *widget, + GtkRequisition *requisition) +{ + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); + PangoLayout *layout; + PangoRectangle ink_rect; + gint size; + + layout = sp_ruler_get_layout (widget, "0123456789"); + pango_layout_get_pixel_extents (layout, &ink_rect, NULL); + + size = 2 + ink_rect.height * 1.7; + + GtkStyleContext *context = gtk_widget_get_style_context (widget); + GtkBorder border; + + gtk_style_context_get_border (context, static_cast(0), &border); + + requisition->width = border.left + border.right; + requisition->height = border.top + border.bottom; + + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + requisition->width += 1; + requisition->height += size; + } + else + { + requisition->width += size; + requisition->height += 1; + } +} + +static void +sp_ruler_style_updated (GtkWidget *widget) +{ + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); + + GTK_WIDGET_CLASS (sp_ruler_parent_class)->style_updated (widget); + + gtk_widget_style_get (widget, + "font-scale", &priv->font_scale, + NULL); + + if (priv->layout) + { + g_object_unref (priv->layout); + priv->layout = NULL; + } +} + +static void +sp_ruler_get_preferred_width (GtkWidget *widget, + gint *minimum_width, + gint *natural_width) +{ + GtkRequisition requisition; + + sp_ruler_size_request (widget, &requisition); + + *minimum_width = *natural_width = requisition.width; +} + +static void +sp_ruler_get_preferred_height (GtkWidget *widget, + gint *minimum_height, + gint *natural_height) +{ + GtkRequisition requisition; + + sp_ruler_size_request(widget, &requisition); + + *minimum_height = *natural_height = requisition.height; +} + +static gboolean +sp_ruler_draw (GtkWidget *widget, + cairo_t *cr) +{ + SPRuler *ruler = SP_RULER (widget); + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + GtkStyleContext *context = gtk_widget_get_style_context (widget); + GtkAllocation allocation; + + gtk_widget_get_allocation (widget, &allocation); + gtk_render_background (context, cr, 0, 0, allocation.width, allocation.height); + gtk_render_frame (context, cr, 0, 0, allocation.width, allocation.height); + + sp_ruler_draw_ticks (ruler); + + cairo_set_source_surface(cr, priv->backing_store, 0, 0); + cairo_paint(cr); + + sp_ruler_draw_pos (ruler, cr); + + return FALSE; +} + +static void +sp_ruler_make_pixmap (SPRuler *ruler) +{ + GtkWidget *widget = GTK_WIDGET (ruler); + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + GtkAllocation allocation; + + gtk_widget_get_allocation(widget, &allocation); + + if (priv->backing_store) + cairo_surface_destroy (priv->backing_store); + + priv->backing_store = + gdk_window_create_similar_surface (gtk_widget_get_window (widget), + CAIRO_CONTENT_COLOR_ALPHA, + allocation.width, + allocation.height); + + priv->backing_store_valid = FALSE; +} + +static void +sp_ruler_draw_pos (SPRuler *ruler, + cairo_t *cr) +{ + GtkWidget *widget = GTK_WIDGET (ruler); + + GtkStyleContext *context = gtk_widget_get_style_context (widget); + GdkRGBA color; + + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + GdkRectangle pos_rect; + + if (! gtk_widget_is_drawable (widget)) + return; + + pos_rect = sp_ruler_get_pos_rect (ruler, sp_ruler_get_position (ruler)); + + if ((pos_rect.width > 0) && (pos_rect.height > 0)) + { + gtk_style_context_get_color (context, gtk_widget_get_state_flags (widget), + &color); + gdk_cairo_set_source_rgba (cr, &color); + + cairo_move_to (cr, pos_rect.x, pos_rect.y); + + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + cairo_line_to (cr, pos_rect.x + pos_rect.width / 2.0, + pos_rect.y + pos_rect.height); + cairo_line_to (cr, pos_rect.x + pos_rect.width, + pos_rect.y); + } + else + { + cairo_line_to (cr, pos_rect.x + pos_rect.width, + + pos_rect.y + pos_rect.height / 2.0); + cairo_line_to (cr, pos_rect.x, + pos_rect.y + pos_rect.height); + } + + cairo_fill (cr); + } + + priv->last_pos_rect = pos_rect; +} + +/** + * sp_ruler_new: + * @orientation: the ruler's orientation + * + * Creates a new ruler. + * + * Return value: a new #SPRuler widget. + */ +GtkWidget * +sp_ruler_new (GtkOrientation orientation) +{ + return GTK_WIDGET (g_object_new (SP_TYPE_RULER, + "orientation", orientation, + NULL)); +} + +static void +sp_ruler_update_position (SPRuler *ruler, + gdouble x, + gdouble y) +{ + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + GtkAllocation allocation; + gdouble lower; + gdouble upper; + + gtk_widget_get_allocation (GTK_WIDGET (ruler), &allocation); + sp_ruler_get_range (ruler, &lower, &upper, NULL); + + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + sp_ruler_set_position (ruler, + lower + + (upper - lower) * x / allocation.width); + } + else + { + sp_ruler_set_position (ruler, + lower + + (upper - lower) * y / allocation.height); + } +} + +/* Returns TRUE if a translation should be done */ +static gboolean +gtk_widget_get_translation_to_window (GtkWidget *widget, + GdkWindow *window, + int *x, + int *y) +{ + GdkWindow *w, *widget_window; + + if (! gtk_widget_get_has_window (widget)) + { + GtkAllocation allocation; + + gtk_widget_get_allocation (widget, &allocation); + + *x = -allocation.x; + *y = -allocation.y; + } + else + { + *x = 0; + *y = 0; + } + + widget_window = gtk_widget_get_window (widget); + + for (w = window; + w && w != widget_window; + w = gdk_window_get_effective_parent (w)) + { + gdouble px, py; + + gdk_window_coords_to_parent (w, *x, *y, &px, &py); + + *x += px; + *y += px; + } + + if (w == NULL) + { + *x = 0; + *y = 0; + return FALSE; + } + + return TRUE; +} + +static void +sp_ruler_event_to_widget_coords (GtkWidget *widget, + GdkWindow *window, + gdouble event_x, + gdouble event_y, + gint *widget_x, + gint *widget_y) +{ + gint tx, ty; + + if (gtk_widget_get_translation_to_window (widget, window, &tx, &ty)) + { + event_x += tx; + event_y += ty; + } + + *widget_x = event_x; + *widget_y = event_y; +} + +static gboolean +sp_ruler_track_widget_motion_notify (GtkWidget *widget, + GdkEventMotion *mevent, + SPRuler *ruler) +{ + gint widget_x; + gint widget_y; + gint ruler_x; + gint ruler_y; + + widget = gtk_get_event_widget (reinterpret_cast(mevent)); + + sp_ruler_event_to_widget_coords (widget, mevent->window, + mevent->x, mevent->y, + &widget_x, &widget_y); + + if (gtk_widget_translate_coordinates (widget, GTK_WIDGET (ruler), + widget_x, widget_y, + &ruler_x, &ruler_y)) + { + sp_ruler_update_position (ruler, ruler_x, ruler_y); + } + + return FALSE; +} + +void +sp_ruler_add_track_widget (SPRuler *ruler, + GtkWidget *widget) +{ + SPRulerPrivate *priv; + + g_return_if_fail (SP_IS_RULER (ruler)); + g_return_if_fail (GTK_IS_WIDGET (ruler)); + + priv = SP_RULER_GET_PRIVATE (ruler); + + g_return_if_fail (g_list_find (priv->track_widgets, widget) == NULL); + + priv->track_widgets = g_list_prepend (priv->track_widgets, widget); + + g_signal_connect (widget, "motion-notify-event", + G_CALLBACK (sp_ruler_track_widget_motion_notify), + ruler); + g_signal_connect (widget, "destroy", + G_CALLBACK (sp_ruler_remove_track_widget), + ruler); +} + +/** + * sp_ruler_remove_track_widget: + * @ruler: an #SPRuler + * @widget: the track widget to remove + * + * Removes a previously added track widget from the ruler. See + * sp_ruler_add_track_widget(). + */ +void +sp_ruler_remove_track_widget (SPRuler *ruler, + GtkWidget *widget) +{ + SPRulerPrivate *priv; + + g_return_if_fail (SP_IS_RULER (ruler)); + g_return_if_fail (GTK_IS_WIDGET (ruler)); + + priv = SP_RULER_GET_PRIVATE (ruler); + + g_return_if_fail (g_list_find (priv->track_widgets, widget) != NULL); + + priv->track_widgets = g_list_remove (priv->track_widgets, widget); + + g_signal_handlers_disconnect_by_func (widget, + (gpointer) G_CALLBACK (sp_ruler_track_widget_motion_notify), + ruler); + g_signal_handlers_disconnect_by_func (widget, + (gpointer) G_CALLBACK (sp_ruler_remove_track_widget), + ruler); +} + +/** + * sp_ruler_set_unit: + * @ruler: a #SPRuler + * @unit: the #SPMetric to set the ruler to + * + * This sets the unit of the ruler. + */ +void +sp_ruler_set_unit (SPRuler *ruler, + Inkscape::Util::Unit const *unit) +{ + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + + g_return_if_fail (SP_IS_RULER (ruler)); + + if (*priv->unit != *unit) + { + priv->unit = unit; + g_object_notify(G_OBJECT(ruler), "unit"); + + priv->backing_store_valid = FALSE; + gtk_widget_queue_draw (GTK_WIDGET (ruler)); + } +} + +/** + * sp_ruler_get_unit: + * @ruler: a #SPRuler + * + * Return value: the unit currently used in the @ruler widget. + **/ +Inkscape::Util::Unit const* +sp_ruler_get_unit (SPRuler *ruler) +{ + return SP_RULER_GET_PRIVATE (ruler)->unit; +} + +/** + * sp_ruler_set_position: + * @ruler: a #SPRuler + * @position: the position to set the ruler to + * + * This sets the position of the ruler. + */ +void +sp_ruler_set_position (SPRuler *ruler, + gdouble position) +{ + SPRulerPrivate *priv; + + g_return_if_fail (SP_IS_RULER (ruler)); + + priv = SP_RULER_GET_PRIVATE (ruler); + + if (priv->position != position) + { + GdkRectangle rect; + gint xdiff, ydiff; + + priv->position = position; + g_object_notify (G_OBJECT (ruler), "position"); + + rect = sp_ruler_get_pos_rect (ruler, priv->position); + + xdiff = rect.x - priv->last_pos_rect.x; + ydiff = rect.y - priv->last_pos_rect.y; + + /* + * If the position has changed far enough, queue a redraw immediately. + * Otherwise, we only queue a redraw in a low priority idle handler, to + * allow for other things (like updating the canvas) to run. + * + * TODO: This might not be necessary any more in GTK3 with the frame + * clock. Investigate this more after the port to GTK3. + */ + if (priv->last_pos_rect.width != 0 && + priv->last_pos_rect.height != 0 && + (ABS (xdiff) > IMMEDIATE_REDRAW_THRESHOLD || + ABS (ydiff) > IMMEDIATE_REDRAW_THRESHOLD)) + { + sp_ruler_queue_pos_redraw (ruler); + } + else if (! priv->pos_redraw_idle_id) + { + priv->pos_redraw_idle_id = + g_idle_add_full (G_PRIORITY_LOW, + sp_ruler_idle_queue_pos_redraw, + ruler, NULL); + } + } +} + +/** + * sp_ruler_get_position: + * @ruler: a #SPRuler + * + * Return value: the current position of the @ruler widget. + */ +gdouble +sp_ruler_get_position (SPRuler *ruler) +{ + g_return_val_if_fail (SP_IS_RULER (ruler), 0.0); + + return SP_RULER_GET_PRIVATE (ruler)->position; +} + +static gboolean +sp_ruler_motion_notify (GtkWidget *widget, + GdkEventMotion *event) +{ + SPRuler *ruler = SP_RULER(widget); + + sp_ruler_update_position (ruler, event->x, event->y); + + return FALSE; +} + +static void +sp_ruler_draw_ticks (SPRuler *ruler) +{ + GtkWidget *widget = GTK_WIDGET (ruler); + + GtkStyleContext *context = gtk_widget_get_style_context (widget); + GtkBorder border; + GdkRGBA color; + + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + GtkAllocation allocation; + cairo_t *cr; + gint i; + gint width, height; + gint length, ideal_length; + gdouble lower, upper; /* Upper and lower limits, in ruler units */ + gdouble increment; /* Number of pixels per unit */ + guint scale; /* Number of units per major unit */ + gdouble start, end, cur; + gchar unit_str[32]; + gint digit_height; + gint digit_offset; + gchar digit_str[2] = { '\0', '\0' }; + gint text_size; + gint pos; + gdouble max_size; + Inkscape::Util::Unit const *unit = NULL; + SPRulerMetric ruler_metric = ruler_metric_general; /* The metric to use for this unit system */ + PangoLayout *layout; + PangoRectangle logical_rect, ink_rect; + + if (! gtk_widget_is_drawable (widget)) + return; + + gtk_widget_get_allocation (widget, &allocation); + + gtk_style_context_get_border (context, static_cast(0), &border); + + layout = sp_ruler_get_layout (widget, "0123456789"); + pango_layout_get_extents (layout, &ink_rect, &logical_rect); + + digit_height = PANGO_PIXELS (ink_rect.height) + 2; + digit_offset = ink_rect.y; + + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + width = allocation.width; + height = allocation.height - (border.top + border.bottom); + } + else + { + width = allocation.height; + height = allocation.width - (border.top + border.bottom); + } + + cr = cairo_create (priv->backing_store); + + cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); + cairo_paint (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + + gtk_style_context_get_color (context, gtk_widget_get_state_flags (widget), + &color); + gdk_cairo_set_source_rgba (cr, &color); + + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + cairo_rectangle (cr, + border.left, + height + border.top, + allocation.width - (border.left + border.right), + 1); + } + else + { + cairo_rectangle (cr, + height + border.left, + border.top, + 1, + allocation.height - (border.top + border.bottom)); + } + + sp_ruler_get_range (ruler, &lower, &upper, &max_size); + + if ((upper - lower) == 0) + goto out; + + increment = (gdouble) width / (upper - lower); + + /* determine the scale + * Use the maximum extents of the ruler to determine the largest + * possible number to be displayed. Calculate the height in pixels + * of this displayed text. Use this height to find a scale which + * leaves sufficient room for drawing the ruler. + * + * We calculate the text size as for the vruler instead of + * actually measuring the text width, so that the result for the + * scale looks consistent with an accompanying vruler + */ + scale = ceil (priv->max_size); + sprintf (unit_str, "%d", scale); + text_size = strlen (unit_str) * digit_height + 1; + + /* Inkscape change to ruler: Use a 1,2,4,8... scale for inches + * or a 1,2,5,10... scale for everything else */ + if (*sp_ruler_get_unit (ruler) == *unit_table.getUnit("in")) + ruler_metric = ruler_metric_inches; + + for (scale = 0; scale < G_N_ELEMENTS (ruler_metric.ruler_scale); scale++) + if (ruler_metric.ruler_scale[scale] * fabs (increment) > 2 * text_size) + break; + + if (scale == G_N_ELEMENTS (ruler_metric.ruler_scale)) + scale = G_N_ELEMENTS (ruler_metric.ruler_scale) - 1; + + unit = sp_ruler_get_unit (ruler); + + /* drawing starts here */ + length = 0; + for (i = G_N_ELEMENTS (ruler_metric.subdivide) - 1; i >= 0; i--) + { + gdouble subd_incr; + + /* hack to get proper subdivisions at full pixels */ + if (*unit == *unit_table.getUnit("px") && scale == 1 && i == 1) + subd_incr = 1.0; + else + subd_incr = ((gdouble) ruler_metric.ruler_scale[scale] / + (gdouble) ruler_metric.subdivide[i]); + + if (subd_incr * fabs (increment) <= MINIMUM_INCR) + continue; + + /* Calculate the length of the tickmarks. Make sure that + * this length increases for each set of ticks + */ + ideal_length = height / (i + 1) - 1; + if (ideal_length > ++length) + length = ideal_length; + + if (lower < upper) + { + start = floor (lower / subd_incr) * subd_incr; + end = ceil (upper / subd_incr) * subd_incr; + } + else + { + start = floor (upper / subd_incr) * subd_incr; + end = ceil (lower / subd_incr) * subd_incr; + } + + gint tick_index = 0; + + for (cur = start; cur <= end; cur += subd_incr) + { + // due to the typical values for cur, lower and increment, pos will often end up to + // be e.g. 641.50000000000; rounding behaviour is not defined in such a case (see round.h) + // and jitter will be apparent (upon redrawing some of the lines on the ruler might jump a + // by a pixel, and jump back on the next redraw). This is suppressed by adding 1e-9 (that's only one nanopixel ;-)) + pos = gint(Inkscape::round((cur - lower) * increment + 1e-12)); + + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + cairo_rectangle (cr, + pos, height + border.top - length, + 1, length); + } + else + { + cairo_rectangle (cr, + height + border.left - length, pos, + length, 1); + } + + /* draw label */ + double label_spacing_px = fabs(increment*(double)ruler_metric.ruler_scale[scale]/ruler_metric.subdivide[i]); + if (i == 0 && + (label_spacing_px > 6*digit_height || tick_index%2 == 0 || cur == 0) && + (label_spacing_px > 3*digit_height || tick_index%4 == 0 || cur == 0)) + { + if (std::abs((int)cur) >= 2000 && (((int) cur)/1000)*1000 == ((int) cur)) + sprintf (unit_str, "%dk", ((int) cur)/1000); + else + sprintf (unit_str, "%d", (int) cur); + + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + pango_layout_set_text (layout, unit_str, -1); + pango_layout_get_extents (layout, &logical_rect, NULL); + + cairo_move_to (cr, + pos + 2, + border.top + PANGO_PIXELS (logical_rect.y - digit_offset)); + + pango_cairo_show_layout(cr, layout); + } + else + { + gint j; + + for (j = 0; j < (int) strlen (unit_str); j++) + { + digit_str[0] = unit_str[j]; + pango_layout_set_text (layout, digit_str, 1); + pango_layout_get_extents (layout, NULL, &logical_rect); + + cairo_move_to (cr, + border.left + 1, + pos + digit_height * j + 2 + PANGO_PIXELS (logical_rect.y - digit_offset)); + pango_cairo_show_layout (cr, layout); + } + } + } + + ++tick_index; + } + } + + cairo_fill (cr); + + priv->backing_store_valid = TRUE; + +out: + cairo_destroy (cr); +} + +static GdkRectangle +sp_ruler_get_pos_rect (SPRuler *ruler, + gdouble position) +{ + GtkWidget *widget = GTK_WIDGET (ruler); + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + GtkAllocation allocation; + gint width, height; + gint xthickness; + gint ythickness; + gdouble upper, lower; + gdouble increment; + GdkRectangle rect = { 0, 0, 0, 0 }; + + if (! gtk_widget_is_drawable (widget)) + return rect; + + gtk_widget_get_allocation (widget, &allocation); + + GtkStyleContext *context = gtk_widget_get_style_context (widget); + GtkBorder padding; + + gtk_style_context_get_border(context, static_cast(0), &padding); + + xthickness = padding.left + padding.right; + ythickness = padding.top + padding.bottom; + + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + width = allocation.width; + height = allocation.height - ythickness * 2; + + rect.width = height / 2 + 2; + rect.width |= 1; /* make sure it's odd */ + rect.height = rect.width / 2 + 1; + } + else + { + width = allocation.width - xthickness * 2; + height = allocation.height; + + rect.height = width / 2 + 2; + rect.height |= 1; /* make sure it's odd */ + rect.width = rect.height / 2 + 1; + } + + sp_ruler_get_range (ruler, &lower, &upper, NULL); + + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) + { + increment = (gdouble) width / (upper - lower); + + rect.x = ROUND ((position - lower) * increment) + (xthickness - rect.width) / 2 - 1; + rect.y = (height + rect.height) / 2 + ythickness; + } + else + { + increment = (gdouble) height / (upper - lower); + + rect.x = (width + rect.width) / 2 + xthickness; + rect.y = ROUND ((position - lower) * increment) + (ythickness - rect.height) / 2 - 1; + } + + return rect; +} + +static gboolean +sp_ruler_idle_queue_pos_redraw (gpointer data) +{ + SPRuler *ruler = (SPRuler *)data; + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + + sp_ruler_queue_pos_redraw (ruler); + + gboolean ret = g_source_remove(priv->pos_redraw_idle_id); + priv->pos_redraw_idle_id = 0; + + return ret; +} + +static void +sp_ruler_queue_pos_redraw (SPRuler *ruler) +{ + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + const GdkRectangle rect = sp_ruler_get_pos_rect (ruler, priv->position); + GtkAllocation allocation; + + gtk_widget_get_allocation (GTK_WIDGET(ruler), &allocation); + + gtk_widget_queue_draw_area (GTK_WIDGET(ruler), + rect.x + allocation.x, + rect.y + allocation.y, + rect.width, + rect.height); + + if (priv->last_pos_rect.width != 0 || priv->last_pos_rect.height != 0) + { + gtk_widget_queue_draw_area (GTK_WIDGET(ruler), + priv->last_pos_rect.x + allocation.x, + priv->last_pos_rect.y + allocation.y, + priv->last_pos_rect.width, + priv->last_pos_rect.height); + + priv->last_pos_rect.x = 0; + priv->last_pos_rect.y = 0; + priv->last_pos_rect.width = 0; + priv->last_pos_rect.height = 0; + } +} + +static PangoLayout* +sp_ruler_create_layout (GtkWidget *widget, + const gchar *text) +{ + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); + PangoLayout *layout; + PangoAttrList *attrs; + PangoAttribute *attr; + + layout = gtk_widget_create_pango_layout (widget, text); + + attrs = pango_attr_list_new (); + + attr = pango_attr_scale_new (priv->font_scale); + attr->start_index = 0; + attr->end_index = -1; + pango_attr_list_insert (attrs, attr); + + pango_layout_set_attributes (layout, attrs); + pango_attr_list_unref (attrs); + + return layout; +} + +static PangoLayout * +sp_ruler_get_layout (GtkWidget *widget, + const gchar *text) +{ + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); + + if (priv->layout) + { + pango_layout_set_text (priv->layout, text, -1); + return priv->layout; + } + + priv->layout = sp_ruler_create_layout (widget, text); + + return priv->layout; +} + +/* + 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 : diff --git a/src/widgets/gimp/ruler.h b/src/widgets/gimp/ruler.h new file mode 100644 index 000000000..ed529d082 --- /dev/null +++ b/src/widgets/gimp/ruler.h @@ -0,0 +1,86 @@ +#ifndef __SP_RULER_H__ +#define __SP_RULER_H__ + +/* + * Customized ruler class for inkscape + * + * Authors: + * Lauris Kaplinski + * Frank Felfe + * + * Copyright (C) 1999-2002 authors + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include +#include +#include + +namespace Inkscape { + namespace Util { + class Unit; + } +} + +G_BEGIN_DECLS + +#define SP_TYPE_RULER (sp_ruler_get_type ()) +#define SP_RULER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_RULER, SPRuler)) +#define SP_RULER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_RULER, SPRulerClass)) +#define SP_IS_RULER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_RULER)) +#define SP_IS_RULER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_RULER)) +#define SP_RULER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SP_TYPE_RULER, SPRulerClass)) + +typedef struct _SPRuler SPRuler; +typedef struct _SPRulerClass SPRulerClass; + +struct _SPRuler +{ + GtkWidget parent_instance; +}; + +struct _SPRulerClass +{ + GtkWidgetClass parent_class; +}; + + +GType sp_ruler_get_type (void) G_GNUC_CONST; + +GtkWidget* sp_ruler_new (GtkOrientation orientation); + +void sp_ruler_add_track_widget (SPRuler *ruler, + GtkWidget *widget); +void sp_ruler_remove_track_widget (SPRuler *ruler, + GtkWidget *widget); + +void sp_ruler_set_unit (SPRuler *ruler, + const Inkscape::Util::Unit *unit); +Inkscape::Util::Unit const * sp_ruler_get_unit (SPRuler *ruler); +void sp_ruler_set_position (SPRuler *ruler, + gdouble set_position); +gdouble sp_ruler_get_position (SPRuler *ruler); +void sp_ruler_set_range (SPRuler *ruler, + gdouble lower, + gdouble upper, + gdouble max_size); +void sp_ruler_get_range (SPRuler *ruler, + gdouble *lower, + gdouble *upper, + gdouble *max_size); + +G_END_DECLS + +#endif /* __SP_RULER_H__ */ + +/* + 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 : diff --git a/src/widgets/ruler.cpp b/src/widgets/ruler.cpp deleted file mode 100644 index bfb9c9071..000000000 --- a/src/widgets/ruler.cpp +++ /dev/null @@ -1,1425 +0,0 @@ -/* - * Customized ruler class for inkscape. Note that this is a fork of - * the GimpRuler widget from GIMP: libgimpwidgets/gimpruler.c. - * The GIMP code is released under the GPL 3. The GIMP code itself - * is a fork of the now-obsolete GtkRuler widget from GTK+ 2. - * - * Major differences between implementations in Inkscape and GIMP are - * as follows: - * - We use a 1,2,4,8... scale for inches and 1,2,5,10... for everything - * else. GIMP uses 1,2,5,10... for everything. - * - * - We use a default font size of PANGO_SCALE_X_SMALL for labels, - * GIMP uses PANGO_SCALE_SMALL (i.e., a bit larger than ours). - * - * - We abbreviate large numbers in tick-labels (e.g., 10000 -> 10k) - * - * Authors: - * Lauris Kaplinski - * Frank Felfe - * bulia byak - * Diederik van Lierop - * Jon A. Cruz - * Alex Valavanis - * - * Copyright (C) 1999-2011 authors - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#include -#include -#include - -#include "ruler.h" -#include "round.h" -#include -#include "util/units.h" - -#define ROUND(x) ((int) ((x) + 0.5)) - -#define GTK_PARAM_READWRITE G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB - -#define DEFAULT_RULER_FONT_SCALE PANGO_SCALE_X_SMALL -#define MINIMUM_INCR 5 -#define IMMEDIATE_REDRAW_THRESHOLD 20 - -using Inkscape::Util::unit_table; - -enum { - PROP_0, - PROP_ORIENTATION, - PROP_UNIT, - PROP_LOWER, - PROP_UPPER, - PROP_POSITION, - PROP_MAX_SIZE -}; - - -/* All distances below are in 1/72nd's of an inch. (According to - * Adobe, that's a point, but points are really 1/72.27 in.) - */ -typedef struct -{ - GtkOrientation orientation; - Inkscape::Util::Unit const *unit; - gdouble lower; - gdouble upper; - gdouble position; - gdouble max_size; - - GdkWindow *input_window; - cairo_surface_t *backing_store; - gboolean backing_store_valid; - GdkRectangle last_pos_rect; - guint pos_redraw_idle_id; - PangoLayout *layout; - gdouble font_scale; - - GList *track_widgets; -} SPRulerPrivate; - -#define SP_RULER_GET_PRIVATE(ruler) \ - G_TYPE_INSTANCE_GET_PRIVATE (ruler, SP_TYPE_RULER, SPRulerPrivate) - - -struct SPRulerMetric -{ - gdouble ruler_scale[16]; - gint subdivide[5]; -}; - -// Ruler metric for general use. -static SPRulerMetric const ruler_metric_general = { - { 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 25000, 50000, 100000 }, - { 1, 5, 10, 50, 100 } -}; - -// Ruler metric for inch scales. -static SPRulerMetric const ruler_metric_inches = { - { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 }, - { 1, 2, 4, 8, 16 } -}; - -static void sp_ruler_dispose (GObject *object); -static void sp_ruler_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void sp_ruler_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void sp_ruler_realize (GtkWidget *widget); -static void sp_ruler_unrealize (GtkWidget *widget); -static void sp_ruler_map (GtkWidget *widget); -static void sp_ruler_unmap (GtkWidget *widget); -static void sp_ruler_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); - -static void sp_ruler_get_preferred_width (GtkWidget *widget, - gint *minimum_width, - gint *natural_width); - -static void sp_ruler_get_preferred_height (GtkWidget *widget, - gint *minimum_height, - gint *natural_height); -static void sp_ruler_style_updated (GtkWidget *widget); - -static gboolean sp_ruler_motion_notify (GtkWidget *widget, - GdkEventMotion *event); -static gboolean sp_ruler_draw (GtkWidget *widget, - cairo_t *cr); -static void sp_ruler_draw_ticks (SPRuler *ruler); -static GdkRectangle sp_ruler_get_pos_rect (SPRuler *ruler, - gdouble position); -static gboolean sp_ruler_idle_queue_pos_redraw(gpointer data); -static void sp_ruler_queue_pos_redraw (SPRuler *ruler); -static void sp_ruler_draw_pos (SPRuler *ruler, - cairo_t *cr); -static void sp_ruler_make_pixmap (SPRuler *ruler); - -static PangoLayout * sp_ruler_get_layout (GtkWidget *widget, - const gchar *text); - - -G_DEFINE_TYPE (SPRuler, sp_ruler, GTK_TYPE_WIDGET) - -#define parent_class sp_ruler_parent_class - - -static void -sp_ruler_class_init (SPRulerClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - -#if GTK_CHECK_VERSION(3,20,0) - gtk_widget_class_set_css_name (widget_class, "ruler-widget"); -#endif - - object_class->dispose = sp_ruler_dispose; - object_class->set_property = sp_ruler_set_property; - object_class->get_property = sp_ruler_get_property; - - widget_class->realize = sp_ruler_realize; - widget_class->unrealize = sp_ruler_unrealize; - widget_class->map = sp_ruler_map; - widget_class->unmap = sp_ruler_unmap; - widget_class->size_allocate = sp_ruler_size_allocate; - widget_class->get_preferred_width = sp_ruler_get_preferred_width; - widget_class->get_preferred_height = sp_ruler_get_preferred_height; - widget_class->style_updated = sp_ruler_style_updated; - widget_class->draw = sp_ruler_draw; - widget_class->motion_notify_event = sp_ruler_motion_notify; - - g_type_class_add_private (object_class, sizeof (SPRulerPrivate)); - - g_object_class_install_property (object_class, - PROP_ORIENTATION, - g_param_spec_enum ("orientation", - _("Orientation"), - _("The orientation of the ruler"), - GTK_TYPE_ORIENTATION, - GTK_ORIENTATION_HORIZONTAL, - static_cast(GTK_PARAM_READWRITE))); - - /* FIXME: Should probably use g_param_spec_enum */ - g_object_class_install_property (object_class, - PROP_UNIT, - g_param_spec_string ("unit", - _("Unit"), - _("Unit of the ruler"), - "px", - static_cast(GTK_PARAM_READWRITE))); - - g_object_class_install_property (object_class, - PROP_LOWER, - g_param_spec_double ("lower", - _("Lower"), - _("Lower limit of ruler"), - -G_MAXDOUBLE, - G_MAXDOUBLE, - 0.0, - static_cast(GTK_PARAM_READWRITE))); - - g_object_class_install_property (object_class, - PROP_UPPER, - g_param_spec_double ("upper", - _("Upper"), - _("Upper limit of ruler"), - -G_MAXDOUBLE, - G_MAXDOUBLE, - 0.0, - static_cast(GTK_PARAM_READWRITE))); - - g_object_class_install_property (object_class, - PROP_POSITION, - g_param_spec_double ("position", - _("Position"), - _("Position of mark on the ruler"), - -G_MAXDOUBLE, - G_MAXDOUBLE, - 0.0, - static_cast(GTK_PARAM_READWRITE))); - - g_object_class_install_property (object_class, - PROP_MAX_SIZE, - g_param_spec_double ("max-size", - _("Max Size"), - _("Maximum size of the ruler"), - -G_MAXDOUBLE, - G_MAXDOUBLE, - 0.0, - static_cast(GTK_PARAM_READWRITE))); - - gtk_widget_class_install_style_property (widget_class, - g_param_spec_double ("font-scale", - NULL, NULL, - 0.0, - G_MAXDOUBLE, - DEFAULT_RULER_FONT_SCALE, - G_PARAM_READABLE)); -} - -static void -sp_ruler_init (SPRuler *ruler) -{ - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - - gtk_widget_set_has_window (GTK_WIDGET (ruler), FALSE); - - priv->orientation = GTK_ORIENTATION_HORIZONTAL; - priv->unit = unit_table.getUnit("px"); - priv->lower = 0; - priv->upper = 0; - priv->position = 0; - priv->max_size = 0; - - priv->backing_store = NULL; - priv->backing_store_valid = FALSE; - - priv->last_pos_rect.x = 0; - priv->last_pos_rect.y = 0; - priv->last_pos_rect.width = 0; - priv->last_pos_rect.height = 0; - priv->pos_redraw_idle_id = 0; - - priv->font_scale = DEFAULT_RULER_FONT_SCALE; -} - -static void -sp_ruler_dispose (GObject *object) -{ - SPRuler *ruler = SP_RULER (object); - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - - while (priv->track_widgets) - sp_ruler_remove_track_widget (ruler, GTK_WIDGET(priv->track_widgets->data)); - - if (priv->pos_redraw_idle_id) - { - g_source_remove (priv->pos_redraw_idle_id); - priv->pos_redraw_idle_id = 0; - } - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - - -/** - * sp_ruler_set_range: - * @ruler: the SPRuler - * @lower: the lower limit of the ruler - * @upper: the upper limit of the ruler - * @max_size: the maximum size of the ruler used when calculating the space to - * leave for the text - * - * This sets the range of the ruler. - */ -void -sp_ruler_set_range (SPRuler *ruler, - gdouble lower, - gdouble upper, - gdouble max_size) -{ - SPRulerPrivate *priv; - - g_return_if_fail (SP_IS_RULER (ruler)); - - priv = SP_RULER_GET_PRIVATE (ruler); - - g_object_freeze_notify (G_OBJECT (ruler)); - if (priv->lower != lower) - { - priv->lower = lower; - g_object_notify (G_OBJECT (ruler), "lower"); - } - if (priv->upper != upper) - { - priv->upper = upper; - g_object_notify (G_OBJECT (ruler), "upper"); - } - if (priv->max_size != max_size) - { - priv->max_size = max_size; - g_object_notify (G_OBJECT (ruler), "max-size"); - } - g_object_thaw_notify (G_OBJECT (ruler)); - - priv->backing_store_valid = FALSE; - gtk_widget_queue_draw (GTK_WIDGET (ruler)); -} - -/** - * sp_ruler_get_range: - * @ruler: a #SPRuler - * @lower: (allow-none): location to store lower limit of the ruler, or %NULL - * @upper: (allow-none): location to store upper limit of the ruler, or %NULL - * @max_size: location to store the maximum size of the ruler used when calculating - * the space to leave for the text, or %NULL. - * - * Retrieves values indicating the range and current position of a #SPRuler. - * See sp_ruler_set_range(). - **/ -void -sp_ruler_get_range (SPRuler *ruler, - gdouble *lower, - gdouble *upper, - gdouble *max_size) -{ - SPRulerPrivate *priv; - - g_return_if_fail (SP_IS_RULER (ruler)); - - priv = SP_RULER_GET_PRIVATE (ruler); - - if (lower) - *lower = priv->lower; - if (upper) - *upper = priv->upper; - if (max_size) - *max_size = priv->max_size; -} - -static void -sp_ruler_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - SPRuler *ruler = SP_RULER (object); - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - - switch (prop_id) - { - case PROP_ORIENTATION: - priv->orientation = static_cast(g_value_get_enum (value)); - gtk_widget_queue_resize (GTK_WIDGET (ruler)); - break; - - case PROP_UNIT: - sp_ruler_set_unit (ruler, unit_table.getUnit(g_value_get_string (value))); - break; - - case PROP_LOWER: - sp_ruler_set_range (ruler, - g_value_get_double (value), - priv->upper, - priv->max_size); - break; - case PROP_UPPER: - sp_ruler_set_range (ruler, - priv->lower, - g_value_get_double (value), - priv->max_size); - break; - - case PROP_POSITION: - sp_ruler_set_position (ruler, g_value_get_double (value)); - break; - - case PROP_MAX_SIZE: - sp_ruler_set_range (ruler, - priv->lower, - priv->upper, - g_value_get_double (value)); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -sp_ruler_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - SPRuler *ruler = SP_RULER (object); - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - - switch (prop_id) - { - case PROP_ORIENTATION: - g_value_set_enum (value, priv->orientation); - break; - - case PROP_UNIT: - g_value_set_string (value, priv->unit->abbr.c_str()); - break; - case PROP_LOWER: - g_value_set_double (value, priv->lower); - break; - case PROP_UPPER: - g_value_set_double (value, priv->upper); - break; - case PROP_POSITION: - g_value_set_double (value, priv->position); - break; - case PROP_MAX_SIZE: - g_value_set_double (value, priv->max_size); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -sp_ruler_realize (GtkWidget *widget) -{ - SPRuler *ruler = SP_RULER (widget); - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - GtkAllocation allocation; - GdkWindowAttr attributes; - gint attributes_mask; - - GTK_WIDGET_CLASS (sp_ruler_parent_class)->realize (widget); - - gtk_widget_get_allocation (widget, &allocation); - - attributes.window_type = GDK_WINDOW_CHILD; - attributes.x = allocation.x; - attributes.y = allocation.y; - attributes.width = allocation.width; - attributes.height = allocation.height; - attributes.wclass = GDK_INPUT_ONLY; - attributes.event_mask = (gtk_widget_get_events (widget) | - GDK_EXPOSURE_MASK | - GDK_POINTER_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK); - - attributes_mask = GDK_WA_X | GDK_WA_Y; - - priv->input_window = gdk_window_new (gtk_widget_get_parent_window (widget), - &attributes, attributes_mask); - gdk_window_set_user_data (priv->input_window, ruler); - - sp_ruler_make_pixmap (ruler); -} - -static void -sp_ruler_unrealize(GtkWidget *widget) -{ - SPRuler *ruler = SP_RULER (widget); - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - - if (priv->backing_store) - { - cairo_surface_destroy (priv->backing_store); - priv->backing_store = NULL; - } - - priv->backing_store_valid = FALSE; - - if (priv->layout) - { - g_object_unref (priv->layout); - priv->layout = NULL; - } - - if (priv->input_window) - { - gdk_window_destroy (priv->input_window); - priv->input_window = NULL; - } - - GTK_WIDGET_CLASS (sp_ruler_parent_class)->unrealize (widget); -} - -static void -sp_ruler_map (GtkWidget *widget) -{ - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); - - GTK_WIDGET_CLASS (sp_ruler_parent_class)->map (widget); - - if (priv->input_window) - gdk_window_show (priv->input_window); -} - -static void -sp_ruler_unmap (GtkWidget *widget) -{ - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); - - if (priv->input_window) - gdk_window_hide (priv->input_window); - - GTK_WIDGET_CLASS (sp_ruler_parent_class)->unmap (widget); -} - -static void -sp_ruler_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - SPRuler *ruler = SP_RULER(widget); - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - GtkAllocation widget_allocation; - gboolean resized; - - gtk_widget_get_allocation (widget, &widget_allocation); - - resized = (widget_allocation.width != allocation->width || - widget_allocation.height != allocation->height); - - gtk_widget_set_allocation(widget, allocation); - - if (gtk_widget_get_realized (widget)) - { - gdk_window_move_resize (priv->input_window, - allocation->x, allocation->y, - allocation->width, allocation->height); - - if (resized) - sp_ruler_make_pixmap (ruler); - } -} - -static void -sp_ruler_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); - PangoLayout *layout; - PangoRectangle ink_rect; - gint size; - - layout = sp_ruler_get_layout (widget, "0123456789"); - pango_layout_get_pixel_extents (layout, &ink_rect, NULL); - - size = 2 + ink_rect.height * 1.7; - - GtkStyleContext *context = gtk_widget_get_style_context (widget); - GtkBorder border; - - gtk_style_context_get_border (context, static_cast(0), &border); - - requisition->width = border.left + border.right; - requisition->height = border.top + border.bottom; - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - requisition->width += 1; - requisition->height += size; - } - else - { - requisition->width += size; - requisition->height += 1; - } -} - -static void -sp_ruler_style_updated (GtkWidget *widget) -{ - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); - - GTK_WIDGET_CLASS (sp_ruler_parent_class)->style_updated (widget); - - gtk_widget_style_get (widget, - "font-scale", &priv->font_scale, - NULL); - - if (priv->layout) - { - g_object_unref (priv->layout); - priv->layout = NULL; - } -} - -static void -sp_ruler_get_preferred_width (GtkWidget *widget, - gint *minimum_width, - gint *natural_width) -{ - GtkRequisition requisition; - - sp_ruler_size_request (widget, &requisition); - - *minimum_width = *natural_width = requisition.width; -} - -static void -sp_ruler_get_preferred_height (GtkWidget *widget, - gint *minimum_height, - gint *natural_height) -{ - GtkRequisition requisition; - - sp_ruler_size_request(widget, &requisition); - - *minimum_height = *natural_height = requisition.height; -} - -static gboolean -sp_ruler_draw (GtkWidget *widget, - cairo_t *cr) -{ - SPRuler *ruler = SP_RULER (widget); - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - GtkStyleContext *context = gtk_widget_get_style_context (widget); - GtkAllocation allocation; - - gtk_widget_get_allocation (widget, &allocation); - gtk_render_background (context, cr, 0, 0, allocation.width, allocation.height); - gtk_render_frame (context, cr, 0, 0, allocation.width, allocation.height); - - sp_ruler_draw_ticks (ruler); - - cairo_set_source_surface(cr, priv->backing_store, 0, 0); - cairo_paint(cr); - - sp_ruler_draw_pos (ruler, cr); - - return FALSE; -} - -static void -sp_ruler_make_pixmap (SPRuler *ruler) -{ - GtkWidget *widget = GTK_WIDGET (ruler); - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - GtkAllocation allocation; - - gtk_widget_get_allocation(widget, &allocation); - - if (priv->backing_store) - cairo_surface_destroy (priv->backing_store); - - priv->backing_store = - gdk_window_create_similar_surface (gtk_widget_get_window (widget), - CAIRO_CONTENT_COLOR_ALPHA, - allocation.width, - allocation.height); - - priv->backing_store_valid = FALSE; -} - -static void -sp_ruler_draw_pos (SPRuler *ruler, - cairo_t *cr) -{ - GtkWidget *widget = GTK_WIDGET (ruler); - - GtkStyleContext *context = gtk_widget_get_style_context (widget); - GdkRGBA color; - - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - GdkRectangle pos_rect; - - if (! gtk_widget_is_drawable (widget)) - return; - - pos_rect = sp_ruler_get_pos_rect (ruler, sp_ruler_get_position (ruler)); - - if ((pos_rect.width > 0) && (pos_rect.height > 0)) - { - gtk_style_context_get_color (context, gtk_widget_get_state_flags (widget), - &color); - gdk_cairo_set_source_rgba (cr, &color); - - cairo_move_to (cr, pos_rect.x, pos_rect.y); - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - cairo_line_to (cr, pos_rect.x + pos_rect.width / 2.0, - pos_rect.y + pos_rect.height); - cairo_line_to (cr, pos_rect.x + pos_rect.width, - pos_rect.y); - } - else - { - cairo_line_to (cr, pos_rect.x + pos_rect.width, - - pos_rect.y + pos_rect.height / 2.0); - cairo_line_to (cr, pos_rect.x, - pos_rect.y + pos_rect.height); - } - - cairo_fill (cr); - } - - priv->last_pos_rect = pos_rect; -} - -/** - * sp_ruler_new: - * @orientation: the ruler's orientation - * - * Creates a new ruler. - * - * Return value: a new #SPRuler widget. - */ -GtkWidget * -sp_ruler_new (GtkOrientation orientation) -{ - return GTK_WIDGET (g_object_new (SP_TYPE_RULER, - "orientation", orientation, - NULL)); -} - -static void -sp_ruler_update_position (SPRuler *ruler, - gdouble x, - gdouble y) -{ - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - GtkAllocation allocation; - gdouble lower; - gdouble upper; - - gtk_widget_get_allocation (GTK_WIDGET (ruler), &allocation); - sp_ruler_get_range (ruler, &lower, &upper, NULL); - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - sp_ruler_set_position (ruler, - lower + - (upper - lower) * x / allocation.width); - } - else - { - sp_ruler_set_position (ruler, - lower + - (upper - lower) * y / allocation.height); - } -} - -/* Returns TRUE if a translation should be done */ -static gboolean -gtk_widget_get_translation_to_window (GtkWidget *widget, - GdkWindow *window, - int *x, - int *y) -{ - GdkWindow *w, *widget_window; - - if (! gtk_widget_get_has_window (widget)) - { - GtkAllocation allocation; - - gtk_widget_get_allocation (widget, &allocation); - - *x = -allocation.x; - *y = -allocation.y; - } - else - { - *x = 0; - *y = 0; - } - - widget_window = gtk_widget_get_window (widget); - - for (w = window; - w && w != widget_window; - w = gdk_window_get_effective_parent (w)) - { - gdouble px, py; - - gdk_window_coords_to_parent (w, *x, *y, &px, &py); - - *x += px; - *y += px; - } - - if (w == NULL) - { - *x = 0; - *y = 0; - return FALSE; - } - - return TRUE; -} - -static void -sp_ruler_event_to_widget_coords (GtkWidget *widget, - GdkWindow *window, - gdouble event_x, - gdouble event_y, - gint *widget_x, - gint *widget_y) -{ - gint tx, ty; - - if (gtk_widget_get_translation_to_window (widget, window, &tx, &ty)) - { - event_x += tx; - event_y += ty; - } - - *widget_x = event_x; - *widget_y = event_y; -} - -static gboolean -sp_ruler_track_widget_motion_notify (GtkWidget *widget, - GdkEventMotion *mevent, - SPRuler *ruler) -{ - gint widget_x; - gint widget_y; - gint ruler_x; - gint ruler_y; - - widget = gtk_get_event_widget (reinterpret_cast(mevent)); - - sp_ruler_event_to_widget_coords (widget, mevent->window, - mevent->x, mevent->y, - &widget_x, &widget_y); - - if (gtk_widget_translate_coordinates (widget, GTK_WIDGET (ruler), - widget_x, widget_y, - &ruler_x, &ruler_y)) - { - sp_ruler_update_position (ruler, ruler_x, ruler_y); - } - - return FALSE; -} - -void -sp_ruler_add_track_widget (SPRuler *ruler, - GtkWidget *widget) -{ - SPRulerPrivate *priv; - - g_return_if_fail (SP_IS_RULER (ruler)); - g_return_if_fail (GTK_IS_WIDGET (ruler)); - - priv = SP_RULER_GET_PRIVATE (ruler); - - g_return_if_fail (g_list_find (priv->track_widgets, widget) == NULL); - - priv->track_widgets = g_list_prepend (priv->track_widgets, widget); - - g_signal_connect (widget, "motion-notify-event", - G_CALLBACK (sp_ruler_track_widget_motion_notify), - ruler); - g_signal_connect (widget, "destroy", - G_CALLBACK (sp_ruler_remove_track_widget), - ruler); -} - -/** - * sp_ruler_remove_track_widget: - * @ruler: an #SPRuler - * @widget: the track widget to remove - * - * Removes a previously added track widget from the ruler. See - * sp_ruler_add_track_widget(). - */ -void -sp_ruler_remove_track_widget (SPRuler *ruler, - GtkWidget *widget) -{ - SPRulerPrivate *priv; - - g_return_if_fail (SP_IS_RULER (ruler)); - g_return_if_fail (GTK_IS_WIDGET (ruler)); - - priv = SP_RULER_GET_PRIVATE (ruler); - - g_return_if_fail (g_list_find (priv->track_widgets, widget) != NULL); - - priv->track_widgets = g_list_remove (priv->track_widgets, widget); - - g_signal_handlers_disconnect_by_func (widget, - (gpointer) G_CALLBACK (sp_ruler_track_widget_motion_notify), - ruler); - g_signal_handlers_disconnect_by_func (widget, - (gpointer) G_CALLBACK (sp_ruler_remove_track_widget), - ruler); -} - -/** - * sp_ruler_set_unit: - * @ruler: a #SPRuler - * @unit: the #SPMetric to set the ruler to - * - * This sets the unit of the ruler. - */ -void -sp_ruler_set_unit (SPRuler *ruler, - Inkscape::Util::Unit const *unit) -{ - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - - g_return_if_fail (SP_IS_RULER (ruler)); - - if (*priv->unit != *unit) - { - priv->unit = unit; - g_object_notify(G_OBJECT(ruler), "unit"); - - priv->backing_store_valid = FALSE; - gtk_widget_queue_draw (GTK_WIDGET (ruler)); - } -} - -/** - * sp_ruler_get_unit: - * @ruler: a #SPRuler - * - * Return value: the unit currently used in the @ruler widget. - **/ -Inkscape::Util::Unit const* -sp_ruler_get_unit (SPRuler *ruler) -{ - return SP_RULER_GET_PRIVATE (ruler)->unit; -} - -/** - * sp_ruler_set_position: - * @ruler: a #SPRuler - * @position: the position to set the ruler to - * - * This sets the position of the ruler. - */ -void -sp_ruler_set_position (SPRuler *ruler, - gdouble position) -{ - SPRulerPrivate *priv; - - g_return_if_fail (SP_IS_RULER (ruler)); - - priv = SP_RULER_GET_PRIVATE (ruler); - - if (priv->position != position) - { - GdkRectangle rect; - gint xdiff, ydiff; - - priv->position = position; - g_object_notify (G_OBJECT (ruler), "position"); - - rect = sp_ruler_get_pos_rect (ruler, priv->position); - - xdiff = rect.x - priv->last_pos_rect.x; - ydiff = rect.y - priv->last_pos_rect.y; - - /* - * If the position has changed far enough, queue a redraw immediately. - * Otherwise, we only queue a redraw in a low priority idle handler, to - * allow for other things (like updating the canvas) to run. - * - * TODO: This might not be necessary any more in GTK3 with the frame - * clock. Investigate this more after the port to GTK3. - */ - if (priv->last_pos_rect.width != 0 && - priv->last_pos_rect.height != 0 && - (ABS (xdiff) > IMMEDIATE_REDRAW_THRESHOLD || - ABS (ydiff) > IMMEDIATE_REDRAW_THRESHOLD)) - { - sp_ruler_queue_pos_redraw (ruler); - } - else if (! priv->pos_redraw_idle_id) - { - priv->pos_redraw_idle_id = - g_idle_add_full (G_PRIORITY_LOW, - sp_ruler_idle_queue_pos_redraw, - ruler, NULL); - } - } -} - -/** - * sp_ruler_get_position: - * @ruler: a #SPRuler - * - * Return value: the current position of the @ruler widget. - */ -gdouble -sp_ruler_get_position (SPRuler *ruler) -{ - g_return_val_if_fail (SP_IS_RULER (ruler), 0.0); - - return SP_RULER_GET_PRIVATE (ruler)->position; -} - -static gboolean -sp_ruler_motion_notify (GtkWidget *widget, - GdkEventMotion *event) -{ - SPRuler *ruler = SP_RULER(widget); - - sp_ruler_update_position (ruler, event->x, event->y); - - return FALSE; -} - -static void -sp_ruler_draw_ticks (SPRuler *ruler) -{ - GtkWidget *widget = GTK_WIDGET (ruler); - - GtkStyleContext *context = gtk_widget_get_style_context (widget); - GtkBorder border; - GdkRGBA color; - - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - GtkAllocation allocation; - cairo_t *cr; - gint i; - gint width, height; - gint length, ideal_length; - gdouble lower, upper; /* Upper and lower limits, in ruler units */ - gdouble increment; /* Number of pixels per unit */ - guint scale; /* Number of units per major unit */ - gdouble start, end, cur; - gchar unit_str[32]; - gint digit_height; - gint digit_offset; - gchar digit_str[2] = { '\0', '\0' }; - gint text_size; - gint pos; - gdouble max_size; - Inkscape::Util::Unit const *unit = NULL; - SPRulerMetric ruler_metric = ruler_metric_general; /* The metric to use for this unit system */ - PangoLayout *layout; - PangoRectangle logical_rect, ink_rect; - - if (! gtk_widget_is_drawable (widget)) - return; - - gtk_widget_get_allocation (widget, &allocation); - - gtk_style_context_get_border (context, static_cast(0), &border); - - layout = sp_ruler_get_layout (widget, "0123456789"); - pango_layout_get_extents (layout, &ink_rect, &logical_rect); - - digit_height = PANGO_PIXELS (ink_rect.height) + 2; - digit_offset = ink_rect.y; - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - width = allocation.width; - height = allocation.height - (border.top + border.bottom); - } - else - { - width = allocation.height; - height = allocation.width - (border.top + border.bottom); - } - - cr = cairo_create (priv->backing_store); - - cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); - cairo_paint (cr); - cairo_set_operator (cr, CAIRO_OPERATOR_OVER); - - gtk_style_context_get_color (context, gtk_widget_get_state_flags (widget), - &color); - gdk_cairo_set_source_rgba (cr, &color); - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - cairo_rectangle (cr, - border.left, - height + border.top, - allocation.width - (border.left + border.right), - 1); - } - else - { - cairo_rectangle (cr, - height + border.left, - border.top, - 1, - allocation.height - (border.top + border.bottom)); - } - - sp_ruler_get_range (ruler, &lower, &upper, &max_size); - - if ((upper - lower) == 0) - goto out; - - increment = (gdouble) width / (upper - lower); - - /* determine the scale - * Use the maximum extents of the ruler to determine the largest - * possible number to be displayed. Calculate the height in pixels - * of this displayed text. Use this height to find a scale which - * leaves sufficient room for drawing the ruler. - * - * We calculate the text size as for the vruler instead of - * actually measuring the text width, so that the result for the - * scale looks consistent with an accompanying vruler - */ - scale = ceil (priv->max_size); - sprintf (unit_str, "%d", scale); - text_size = strlen (unit_str) * digit_height + 1; - - /* Inkscape change to ruler: Use a 1,2,4,8... scale for inches - * or a 1,2,5,10... scale for everything else */ - if (*sp_ruler_get_unit (ruler) == *unit_table.getUnit("in")) - ruler_metric = ruler_metric_inches; - - for (scale = 0; scale < G_N_ELEMENTS (ruler_metric.ruler_scale); scale++) - if (ruler_metric.ruler_scale[scale] * fabs (increment) > 2 * text_size) - break; - - if (scale == G_N_ELEMENTS (ruler_metric.ruler_scale)) - scale = G_N_ELEMENTS (ruler_metric.ruler_scale) - 1; - - unit = sp_ruler_get_unit (ruler); - - /* drawing starts here */ - length = 0; - for (i = G_N_ELEMENTS (ruler_metric.subdivide) - 1; i >= 0; i--) - { - gdouble subd_incr; - - /* hack to get proper subdivisions at full pixels */ - if (*unit == *unit_table.getUnit("px") && scale == 1 && i == 1) - subd_incr = 1.0; - else - subd_incr = ((gdouble) ruler_metric.ruler_scale[scale] / - (gdouble) ruler_metric.subdivide[i]); - - if (subd_incr * fabs (increment) <= MINIMUM_INCR) - continue; - - /* Calculate the length of the tickmarks. Make sure that - * this length increases for each set of ticks - */ - ideal_length = height / (i + 1) - 1; - if (ideal_length > ++length) - length = ideal_length; - - if (lower < upper) - { - start = floor (lower / subd_incr) * subd_incr; - end = ceil (upper / subd_incr) * subd_incr; - } - else - { - start = floor (upper / subd_incr) * subd_incr; - end = ceil (lower / subd_incr) * subd_incr; - } - - gint tick_index = 0; - - for (cur = start; cur <= end; cur += subd_incr) - { - // due to the typical values for cur, lower and increment, pos will often end up to - // be e.g. 641.50000000000; rounding behaviour is not defined in such a case (see round.h) - // and jitter will be apparent (upon redrawing some of the lines on the ruler might jump a - // by a pixel, and jump back on the next redraw). This is suppressed by adding 1e-9 (that's only one nanopixel ;-)) - pos = gint(Inkscape::round((cur - lower) * increment + 1e-12)); - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - cairo_rectangle (cr, - pos, height + border.top - length, - 1, length); - } - else - { - cairo_rectangle (cr, - height + border.left - length, pos, - length, 1); - } - - /* draw label */ - double label_spacing_px = fabs(increment*(double)ruler_metric.ruler_scale[scale]/ruler_metric.subdivide[i]); - if (i == 0 && - (label_spacing_px > 6*digit_height || tick_index%2 == 0 || cur == 0) && - (label_spacing_px > 3*digit_height || tick_index%4 == 0 || cur == 0)) - { - if (std::abs((int)cur) >= 2000 && (((int) cur)/1000)*1000 == ((int) cur)) - sprintf (unit_str, "%dk", ((int) cur)/1000); - else - sprintf (unit_str, "%d", (int) cur); - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - pango_layout_set_text (layout, unit_str, -1); - pango_layout_get_extents (layout, &logical_rect, NULL); - - cairo_move_to (cr, - pos + 2, - border.top + PANGO_PIXELS (logical_rect.y - digit_offset)); - - pango_cairo_show_layout(cr, layout); - } - else - { - gint j; - - for (j = 0; j < (int) strlen (unit_str); j++) - { - digit_str[0] = unit_str[j]; - pango_layout_set_text (layout, digit_str, 1); - pango_layout_get_extents (layout, NULL, &logical_rect); - - cairo_move_to (cr, - border.left + 1, - pos + digit_height * j + 2 + PANGO_PIXELS (logical_rect.y - digit_offset)); - pango_cairo_show_layout (cr, layout); - } - } - } - - ++tick_index; - } - } - - cairo_fill (cr); - - priv->backing_store_valid = TRUE; - -out: - cairo_destroy (cr); -} - -static GdkRectangle -sp_ruler_get_pos_rect (SPRuler *ruler, - gdouble position) -{ - GtkWidget *widget = GTK_WIDGET (ruler); - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - GtkAllocation allocation; - gint width, height; - gint xthickness; - gint ythickness; - gdouble upper, lower; - gdouble increment; - GdkRectangle rect = { 0, 0, 0, 0 }; - - if (! gtk_widget_is_drawable (widget)) - return rect; - - gtk_widget_get_allocation (widget, &allocation); - - GtkStyleContext *context = gtk_widget_get_style_context (widget); - GtkBorder padding; - - gtk_style_context_get_border(context, static_cast(0), &padding); - - xthickness = padding.left + padding.right; - ythickness = padding.top + padding.bottom; - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - width = allocation.width; - height = allocation.height - ythickness * 2; - - rect.width = height / 2 + 2; - rect.width |= 1; /* make sure it's odd */ - rect.height = rect.width / 2 + 1; - } - else - { - width = allocation.width - xthickness * 2; - height = allocation.height; - - rect.height = width / 2 + 2; - rect.height |= 1; /* make sure it's odd */ - rect.width = rect.height / 2 + 1; - } - - sp_ruler_get_range (ruler, &lower, &upper, NULL); - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - increment = (gdouble) width / (upper - lower); - - rect.x = ROUND ((position - lower) * increment) + (xthickness - rect.width) / 2 - 1; - rect.y = (height + rect.height) / 2 + ythickness; - } - else - { - increment = (gdouble) height / (upper - lower); - - rect.x = (width + rect.width) / 2 + xthickness; - rect.y = ROUND ((position - lower) * increment) + (ythickness - rect.height) / 2 - 1; - } - - return rect; -} - -static gboolean -sp_ruler_idle_queue_pos_redraw (gpointer data) -{ - SPRuler *ruler = (SPRuler *)data; - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - - sp_ruler_queue_pos_redraw (ruler); - - gboolean ret = g_source_remove(priv->pos_redraw_idle_id); - priv->pos_redraw_idle_id = 0; - - return ret; -} - -static void -sp_ruler_queue_pos_redraw (SPRuler *ruler) -{ - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); - const GdkRectangle rect = sp_ruler_get_pos_rect (ruler, priv->position); - GtkAllocation allocation; - - gtk_widget_get_allocation (GTK_WIDGET(ruler), &allocation); - - gtk_widget_queue_draw_area (GTK_WIDGET(ruler), - rect.x + allocation.x, - rect.y + allocation.y, - rect.width, - rect.height); - - if (priv->last_pos_rect.width != 0 || priv->last_pos_rect.height != 0) - { - gtk_widget_queue_draw_area (GTK_WIDGET(ruler), - priv->last_pos_rect.x + allocation.x, - priv->last_pos_rect.y + allocation.y, - priv->last_pos_rect.width, - priv->last_pos_rect.height); - - priv->last_pos_rect.x = 0; - priv->last_pos_rect.y = 0; - priv->last_pos_rect.width = 0; - priv->last_pos_rect.height = 0; - } -} - -static PangoLayout* -sp_ruler_create_layout (GtkWidget *widget, - const gchar *text) -{ - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); - PangoLayout *layout; - PangoAttrList *attrs; - PangoAttribute *attr; - - layout = gtk_widget_create_pango_layout (widget, text); - - attrs = pango_attr_list_new (); - - attr = pango_attr_scale_new (priv->font_scale); - attr->start_index = 0; - attr->end_index = -1; - pango_attr_list_insert (attrs, attr); - - pango_layout_set_attributes (layout, attrs); - pango_attr_list_unref (attrs); - - return layout; -} - -static PangoLayout * -sp_ruler_get_layout (GtkWidget *widget, - const gchar *text) -{ - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); - - if (priv->layout) - { - pango_layout_set_text (priv->layout, text, -1); - return priv->layout; - } - - priv->layout = sp_ruler_create_layout (widget, text); - - return priv->layout; -} - -/* - 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 : diff --git a/src/widgets/ruler.h b/src/widgets/ruler.h deleted file mode 100644 index ed529d082..000000000 --- a/src/widgets/ruler.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef __SP_RULER_H__ -#define __SP_RULER_H__ - -/* - * Customized ruler class for inkscape - * - * Authors: - * Lauris Kaplinski - * Frank Felfe - * - * Copyright (C) 1999-2002 authors - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#include -#include -#include - -namespace Inkscape { - namespace Util { - class Unit; - } -} - -G_BEGIN_DECLS - -#define SP_TYPE_RULER (sp_ruler_get_type ()) -#define SP_RULER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_RULER, SPRuler)) -#define SP_RULER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_RULER, SPRulerClass)) -#define SP_IS_RULER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_RULER)) -#define SP_IS_RULER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_RULER)) -#define SP_RULER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SP_TYPE_RULER, SPRulerClass)) - -typedef struct _SPRuler SPRuler; -typedef struct _SPRulerClass SPRulerClass; - -struct _SPRuler -{ - GtkWidget parent_instance; -}; - -struct _SPRulerClass -{ - GtkWidgetClass parent_class; -}; - - -GType sp_ruler_get_type (void) G_GNUC_CONST; - -GtkWidget* sp_ruler_new (GtkOrientation orientation); - -void sp_ruler_add_track_widget (SPRuler *ruler, - GtkWidget *widget); -void sp_ruler_remove_track_widget (SPRuler *ruler, - GtkWidget *widget); - -void sp_ruler_set_unit (SPRuler *ruler, - const Inkscape::Util::Unit *unit); -Inkscape::Util::Unit const * sp_ruler_get_unit (SPRuler *ruler); -void sp_ruler_set_position (SPRuler *ruler, - gdouble set_position); -gdouble sp_ruler_get_position (SPRuler *ruler); -void sp_ruler_set_range (SPRuler *ruler, - gdouble lower, - gdouble upper, - gdouble max_size); -void sp_ruler_get_range (SPRuler *ruler, - gdouble *lower, - gdouble *upper, - gdouble *max_size); - -G_END_DECLS - -#endif /* __SP_RULER_H__ */ - -/* - 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 : -- cgit v1.2.3 From 41e0cdaf25ae70d09f1283e74dd3c47d64bf0ec0 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Mon, 8 Aug 2016 11:35:00 +0100 Subject: Fix autotools build (bzr r15045) --- src/ui/widget/Makefile_insert | 4 ---- src/widgets/Makefile_insert | 8 ++++++-- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/ui/widget/Makefile_insert b/src/ui/widget/Makefile_insert index eb98e6872..b22e4bd74 100644 --- a/src/ui/widget/Makefile_insert +++ b/src/ui/widget/Makefile_insert @@ -35,10 +35,6 @@ ink_common_sources += \ ui/widget/filter-effect-chooser.cpp \ ui/widget/font-variants.h \ ui/widget/font-variants.cpp \ - ui/widget/gimpspinscale.c \ - ui/widget/gimpspinscale.h \ - ui/widget/gimpcolorwheel.c \ - ui/widget/gimpcolorwheel.h \ ui/widget/frame.cpp \ ui/widget/frame.h \ ui/widget/imageicon.cpp \ diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert index 7434a5394..99a85c5b6 100644 --- a/src/widgets/Makefile_insert +++ b/src/widgets/Makefile_insert @@ -70,8 +70,12 @@ ink_common_sources += \ widgets/pencil-toolbar.h \ widgets/rect-toolbar.cpp \ widgets/rect-toolbar.h \ - widgets/ruler.cpp \ - widgets/ruler.h \ + widgets/gimp/gimpspinscale.c \ + widgets/gimp/gimpspinscale.h \ + widgets/gimp/gimpcolorwheel.c \ + widgets/gimp/gimpcolorwheel.h \ + widgets/gimp/ruler.cpp \ + widgets/gimp/ruler.h \ widgets/select-toolbar.cpp \ widgets/select-toolbar.h \ widgets/spray-toolbar.cpp \ -- cgit v1.2.3 From e471a664f923f517b68071f2e33fbb6ce070f8b7 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Mon, 8 Aug 2016 13:56:40 +0100 Subject: Remove deprecated Autotools and btool files. Please use CMake instead (bzr r15046) --- src/2geom/Makefile_insert | 131 ------------- src/Makefile.am | 278 --------------------------- src/Makefile_insert | 251 ------------------------ src/debug/Makefile_insert | 15 -- src/display/Makefile_insert | 125 ------------ src/extension/Makefile_insert | 54 ------ src/extension/dbus/Makefile_insert | 111 ----------- src/extension/implementation/Makefile_insert | 9 - src/extension/internal/Makefile_insert | 173 ----------------- src/filters/Makefile_insert | 46 ----- src/helper/Makefile_insert | 45 ----- src/inkgc/Makefile_insert | 13 -- src/io/Makefile_insert | 26 --- src/libavoid/Makefile_insert | 37 ---- src/libcola/Makefile_insert | 18 -- src/libcroco/Makefile_insert | 64 ------ src/libdepixelize/Makefile_insert | 22 --- src/libnrtype/Makefile_insert | 28 --- src/libuemf/Makefile_insert | 30 --- src/libvpsc/Makefile_insert | 23 --- src/livarot/Makefile_insert | 41 ---- src/live_effects/Makefile_insert | 115 ----------- src/live_effects/parameter/Makefile_insert | 36 ---- src/svg/Makefile_insert | 32 --- src/trace/Makefile_insert | 23 --- src/ui/Makefile_insert | 31 --- src/ui/cache/Makefile_insert | 6 - src/ui/dialog/Makefile_insert | 133 ------------- src/ui/tool/Makefile_insert | 30 --- src/ui/tools/Makefile_insert | 34 ---- src/ui/view/Makefile_insert | 9 - src/ui/widget/Makefile_insert | 106 ---------- src/util/Makefile_insert | 49 ----- src/widgets/Makefile_insert | 129 ------------- src/xml/Makefile_insert | 51 ----- 35 files changed, 2324 deletions(-) delete mode 100644 src/2geom/Makefile_insert delete mode 100644 src/Makefile.am delete mode 100644 src/Makefile_insert delete mode 100644 src/debug/Makefile_insert delete mode 100644 src/display/Makefile_insert delete mode 100644 src/extension/Makefile_insert delete mode 100644 src/extension/dbus/Makefile_insert delete mode 100644 src/extension/implementation/Makefile_insert delete mode 100644 src/extension/internal/Makefile_insert delete mode 100644 src/filters/Makefile_insert delete mode 100644 src/helper/Makefile_insert delete mode 100644 src/inkgc/Makefile_insert delete mode 100644 src/io/Makefile_insert delete mode 100644 src/libavoid/Makefile_insert delete mode 100644 src/libcola/Makefile_insert delete mode 100644 src/libcroco/Makefile_insert delete mode 100644 src/libdepixelize/Makefile_insert delete mode 100644 src/libnrtype/Makefile_insert delete mode 100644 src/libuemf/Makefile_insert delete mode 100644 src/libvpsc/Makefile_insert delete mode 100644 src/livarot/Makefile_insert delete mode 100644 src/live_effects/Makefile_insert delete mode 100644 src/live_effects/parameter/Makefile_insert delete mode 100644 src/svg/Makefile_insert delete mode 100644 src/trace/Makefile_insert delete mode 100644 src/ui/Makefile_insert delete mode 100644 src/ui/cache/Makefile_insert delete mode 100644 src/ui/dialog/Makefile_insert delete mode 100644 src/ui/tool/Makefile_insert delete mode 100644 src/ui/tools/Makefile_insert delete mode 100644 src/ui/view/Makefile_insert delete mode 100644 src/ui/widget/Makefile_insert delete mode 100644 src/util/Makefile_insert delete mode 100644 src/widgets/Makefile_insert delete mode 100644 src/xml/Makefile_insert (limited to 'src') diff --git a/src/2geom/Makefile_insert b/src/2geom/Makefile_insert deleted file mode 100644 index 4d41de297..000000000 --- a/src/2geom/Makefile_insert +++ /dev/null @@ -1,131 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -2geom/all: 2geom/lib2geom.a - -2geom/clean: - rm -f 2geom/lib2geom.a $(2geom_lib2geom_a_OBJECTS) - -2geom_lib2geom_a_SOURCES = \ - 2geom/2geom.h \ - 2geom/affine.cpp \ - 2geom/affine.h \ - 2geom/angle.h \ - 2geom/basic-intersection.cpp \ - 2geom/basic-intersection.h \ - 2geom/bezier-clipping.cpp \ - 2geom/bezier-curve.cpp \ - 2geom/bezier-curve.h \ - 2geom/bezier.cpp \ - 2geom/bezier.h \ - 2geom/bezier-to-sbasis.h \ - 2geom/bezier-utils.cpp \ - 2geom/bezier-utils.h \ - 2geom/cairo-path-sink.cpp \ - 2geom/cairo-path-sink.h \ - 2geom/choose.h \ - 2geom/circle.cpp \ - 2geom/circle.h \ - 2geom/circulator.h \ - 2geom/CMakeLists.txt \ - 2geom/concepts.h \ - 2geom/conicsec.cpp \ - 2geom/conicsec.h \ - 2geom/conic_section_clipper_cr.h \ - 2geom/conic_section_clipper.h \ - 2geom/conic_section_clipper_impl.cpp \ - 2geom/conic_section_clipper_impl.h \ - 2geom/convex-hull.cpp \ - 2geom/convex-hull.h \ - 2geom/coord.cpp \ - 2geom/coord.h \ - 2geom/crossing.cpp \ - 2geom/crossing.h \ - 2geom/curve.cpp \ - 2geom/curve.h \ - 2geom/curves.h \ - 2geom/d2.h \ - 2geom/d2-sbasis.cpp \ - 2geom/ellipse.cpp \ - 2geom/ellipse.h \ - 2geom/elliptical-arc.cpp \ - 2geom/elliptical-arc.h \ - 2geom/elliptical-arc-from-sbasis.cpp \ - 2geom/exception.h \ - 2geom/forward.h \ - 2geom/generic-interval.h \ - 2geom/generic-rect.h \ - 2geom/geom.cpp \ - 2geom/geom.h \ - 2geom/intersection.h \ - 2geom/intersection-graph.cpp \ - 2geom/intersection-graph.h \ - 2geom/interval.h \ - 2geom/int-interval.h \ - 2geom/int-point.h \ - 2geom/int-rect.h \ - 2geom/linear.h \ - 2geom/line.cpp \ - 2geom/line.h \ - 2geom/math-utils.h \ - 2geom/nearest-time.cpp \ - 2geom/nearest-time.h \ - 2geom/ord.h \ - 2geom/path.cpp \ - 2geom/path.h \ - 2geom/path-intersection.cpp \ - 2geom/path-intersection.h \ - 2geom/path-sink.cpp \ - 2geom/path-sink.h \ - 2geom/pathvector.cpp \ - 2geom/pathvector.h \ - 2geom/piecewise.cpp \ - 2geom/piecewise.h \ - 2geom/point.cpp \ - 2geom/point.h \ - 2geom/polynomial.cpp \ - 2geom/polynomial.h \ - 2geom/ray.h \ - 2geom/rect.cpp \ - 2geom/rect.h \ - 2geom/recursive-bezier-intersection.cpp \ - 2geom/sbasis-2d.cpp \ - 2geom/sbasis-2d.h \ - 2geom/sbasis.cpp \ - 2geom/sbasis-curve.h \ - 2geom/sbasis-geometric.cpp \ - 2geom/sbasis-geometric.h \ - 2geom/sbasis.h \ - 2geom/sbasis-math.cpp \ - 2geom/sbasis-math.h \ - 2geom/sbasis-poly.cpp \ - 2geom/sbasis-poly.h \ - 2geom/sbasis-roots.cpp \ - 2geom/sbasis-to-bezier.cpp \ - 2geom/sbasis-to-bezier.h \ - 2geom/solve-bezier.cpp \ - 2geom/solve-bezier-one-d.cpp \ - 2geom/solve-bezier-parametric.cpp \ - 2geom/solver.h \ - 2geom/svg-path-parser.cpp \ - 2geom/svg-path-parser.h \ - 2geom/svg-path-writer.cpp \ - 2geom/svg-path-writer.h \ - 2geom/sweep-bounds.cpp \ - 2geom/sweep-bounds.h \ - 2geom/sweeper.h \ - 2geom/toposweep.cpp \ - 2geom/toposweep.h \ - 2geom/transforms.cpp \ - 2geom/transforms.h \ - 2geom/utils.cpp \ - 2geom/utils.h \ - 2geom/numeric/fitting-model.h \ - 2geom/numeric/fitting-tool.h \ - 2geom/numeric/linear_system.h \ - 2geom/numeric/matrix.cpp \ - 2geom/numeric/matrix.h \ - 2geom/numeric/symmetric-matrix-fs.h \ - 2geom/numeric/symmetric-matrix-fs-operation.h \ - 2geom/numeric/symmetric-matrix-fs-trace.h \ - 2geom/numeric/vector.h - diff --git a/src/Makefile.am b/src/Makefile.am deleted file mode 100644 index 9076aaac3..000000000 --- a/src/Makefile.am +++ /dev/null @@ -1,278 +0,0 @@ -## Process this file with automake to produce Makefile.in - -# ################################################ -# G L O B A L -# ################################################ - -# Should work in either automake1.7 or 1.8, but 1.6 doesn't -# handle foo/libfoo_a_CPPFLAGS properly (if at all). -# Update: We now avoid setting foo/libfoo_a_CPPFLAGS, -# so perhaps 1.6 will work. -AUTOMAKE_OPTIONS = 1.7 subdir-objects - -# Executables compiled by "make" and installed by "make install" -bin_PROGRAMS = inkscape inkview - -# Libraries which should be compiled by "make" but not installed. -# Use this only for libraries that are really standalone, rather than for -# source tree subdirectories. -noinst_LIBRARIES = \ - libcroco/libcroco.a \ - libavoid/libavoid.a \ - libuemf/libuemf.a \ - libcola/libcola.a \ - inkgc/libinkgc.a \ - libvpsc/libvpsc.a \ - livarot/libvarot.a \ - 2geom/lib2geom.a \ - libdepixelize/libdepixelize.a \ - util/libutil.a \ - libinkversion.a -# libinkscape.a - -all_libs = \ - $(noinst_LIBRARIES) \ - $(INKSCAPE_LIBS) \ - $(INKSCAPE_CXX_DEPS_LIBS) \ - $(EXIF_LIBS) \ - $(GNOME_VFS_LIBS) \ - $(XFT_LIBS) \ - $(FREETYPE_LIBS) \ - $(kdeldadd) \ - $(win32ldflags) \ - $(LIBWPG_LIBS) \ - $(LIBVISIO_LIBS) \ - $(LIBCDR_LIBS) \ - $(DBUS_LIBS) \ - $(IMAGEMAGICK_LIBS) \ - $(X11_LIBS) - -# Add sources common for Inkscape and Inkview to this variable. -ink_common_sources = -# Add Inkscape-only sources here. -inkscape_SOURCES = -# Add Inkview-only sources here. -inkview_SOURCES = -# Add sources that are built from meta files -BUILT_SOURCES = -# Extra files to distribute -EXTRA_DIST = - -# C++-specific flags defined here -AM_CXXFLAGS = \ - $(INKSCAPE_CXX_DEPS_CFLAGS) - -AM_CPPFLAGS = \ - -I$(top_srcdir)/cxxtest \ - -I$(builddir)/extension/dbus \ - $(EXIF_CFLAGS) \ - $(FREETYPE_CFLAGS) \ - $(GNOME_PRINT_CFLAGS) \ - $(GNOME_VFS_CFLAGS) \ - $(IMAGEMAGICK_CFLAGS) \ - $(LIBWPG_CFLAGS) \ - $(LIBVISIO_CFLAGS) \ - $(LIBCDR_CFLAGS) \ - $(DBUS_CFLAGS) \ - $(XFT_CFLAGS) \ - $(LCMS_CFLAGS) \ - $(POPPLER_CFLAGS) \ - $(POPPLER_GLIB_CFLAGS) \ - -DPOTRACE=\"potrace\" \ - $(INKSCAPE_CFLAGS) \ - $(WIN32_CFLAGS) \ - $(X11_CFLAGS) - -CXXTEST_TEMPLATE = $(srcdir)/cxxtest-template.tpl -CXXTESTGENFLAGS = --root --have-eh --template=$(CXXTEST_TEMPLATE) -CXXTESTGEN = $(top_srcdir)/cxxtest/cxxtestgen.pl $(CXXTESTGENFLAGS) -# Add test cases to this variable -CXXTEST_TESTSUITES = - -# ################################################ -# -# E X T R A -# -# ################################################ - -if PLATFORM_WIN32 -win32_sources = winmain.cpp registrytool.cpp registrytool.h -win32ldflags = -lcomdlg32 -lmscms -mwindows = -mwindows -endif - -# Include all partial makefiles from subdirectories -include Makefile_insert -include display/Makefile_insert -include extension/Makefile_insert -include extension/dbus/Makefile_insert -include extension/implementation/Makefile_insert -include extension/internal/Makefile_insert -include filters/Makefile_insert -include helper/Makefile_insert -include io/Makefile_insert -include libcroco/Makefile_insert -include inkgc/Makefile_insert -include libnrtype/Makefile_insert -include libavoid/Makefile_insert -include livarot/Makefile_insert -include live_effects/Makefile_insert -include live_effects/parameter/Makefile_insert -include libvpsc/Makefile_insert -include libcola/Makefile_insert -include libuemf/Makefile_insert -include svg/Makefile_insert -include widgets/Makefile_insert -include debug/Makefile_insert -include xml/Makefile_insert -include ui/Makefile_insert -include ui/cache/Makefile_insert -include ui/dialog/Makefile_insert -include ui/tool/Makefile_insert -include ui/tools/Makefile_insert -include ui/view/Makefile_insert -include ui/widget/Makefile_insert -include util/Makefile_insert -include trace/Makefile_insert -include 2geom/Makefile_insert -include libdepixelize/Makefile_insert - -# Extra files not mentioned as sources to include in the source tarball -EXTRA_DIST += \ - 2geom/makefile.in \ - debug/makefile.in \ - display/makefile.in \ - extension/implementation/makefile.in \ - extension/internal/makefile.in \ - extension/makefile.in \ - filters/makefile.in \ - helper/makefile.in \ - io/makefile.in \ - libavoid/makefile.in \ - libcroco/makefile.in \ - libnrtype/makefile.in \ - libuemf/makefile.in \ - livarot/makefile.in \ - live_effects/makefile.in \ - live_effects/parameter/makefile.in \ - svg/makefile.in \ - trace/makefile.in \ - ui/cache/makefile.in \ - ui/dialog/makefile.in \ - ui/makefile.in \ - ui/view/makefile.in \ - ui/widget/makefile.in \ - util/makefile.in \ - util/makefile.in \ - widgets/makefile.in \ - xml/makefile.in \ - \ - $(top_srcdir)/Doxyfile \ - extension/internal/emf-inout.cpp \ - extension/internal/emf-inout.h \ - extension/internal/emf-print.cpp \ - extension/internal/emf-print.h \ - helper/sp-marshal.list \ - io/crystalegg.xml \ - io/doc2html.xsl \ - show-preview.bmp \ - winconsole.cpp \ - libdepixelize/makefile.in \ - $(CXXTEST_TEMPLATE) - -# Extra files to remove when doing "make distclean" -DISTCLEANFILES = \ - helper/sp-marshal.cpp \ - helper/sp-marshal.h \ - inkscape-version.cpp - -# ################################################ -# B I N A R I E S -# ################################################ - -# this should speed up the build -#libinkscape_a_SOURCES = $(ink_common_sources) - -inkscape_SOURCES += main.cpp $(ink_common_sources) $(win32_sources) -inkscape_LDADD = $(all_libs) -inkscape_LDFLAGS = $(kdeldflags) $(mwindows) - -inkview_SOURCES += inkview.cpp $(ink_common_sources) $(win32_sources) -inkview_LDADD = $(all_libs) -inkview_LDFLAGS = $(mwindows) - -# ################################################ -# VERSION REPORTING -# ################################################ - -libinkversion_a_SOURCES = inkscape-version.cpp inkscape-version.h - -if USE_BZR_VERSION -inkscape_version_deps = $(top_srcdir)/.bzr/branch/last-revision -endif - -# If this is an BZR snapshot build, regenerate this file every time -# someone updates the BZR working directory. -inkscape-version.cpp: $(inkscape_version_deps) - VER_PREFIX="$(VERSION)";\ - VER_BZRREV=" r`bzr revno --tree $(top_srcdir)`"; \ - if test ! -z "`bzr status -S -V $(srcdir)`"; then \ - VER_CUSTOM=" custom"; \ - fi; \ - VERSION="$$VER_PREFIX$$VER_BZRREV$$VER_CUSTOM"; \ - echo "namespace Inkscape { " \ - "char const *version_string = \"$$VERSION\"; " \ - "}" > inkscape-version.new.cpp; \ - if cmp -s inkscape-version.new.cpp inkscape-version.cpp; then \ - rm inkscape-version.new.cpp; \ - else \ - mv inkscape-version.new.cpp inkscape-version.cpp; \ - fi; \ - echo $$VERSION - -# ################################# -# ## TESTING STUFF (make check) ### -# ################################# - -# List of all programs that should be built before testing. Note that this is -# different from TESTS, because some tests can be scripts that don't -# need to be built. There should be one test program per directory. -# automake adds $(EXEEXT) to check_PROGRAMS items but not to TESTS items: -# TESTS items can be scripts etc. -check_PROGRAMS = cxxtests - -# streamtest is unfinished and can't handle the relocations done during -# "make distcheck". - -# List of all tests to be run. -TESTS = $(check_PROGRAMS) -check-local: - $(top_srcdir)/share/extensions/test/run-all-extension-tests - -# FIXME: Currently, a number of cxxtest tests fail. These should be fixed and -# the XFAIL_TESTS build target should be removed. -# See the following Launchpad bugs: -# -# LP #1208013 -# LP #1208005 -# LP #1207502 - -XFAIL_TESTS = $(check_PROGRAMS) - -# including the testsuites here ensures that they get distributed -cxxtests_SOURCES = cxxtests.cpp $(CXXTEST_TESTSUITES) $(ink_common_sources) $(win32_sources) -cxxtests_LDADD = $(all_libs) - -cxxtests.cpp: $(CXXTEST_TESTSUITES) $(CXXTEST_TEMPLATE) - $(CXXTESTGEN) -o cxxtests.cpp $(CXXTEST_TESTSUITES) - -# ################################################ -# D I S T -# ################################################ - -dist-hook: - mkdir $(distdir)/pixmaps - cp $(srcdir)/pixmaps/*xpm $(distdir)/pixmaps - -distclean-local: - rm -f cxxtests.xml cxxtests.log diff --git a/src/Makefile_insert b/src/Makefile_insert deleted file mode 100644 index 55fde4dd2..000000000 --- a/src/Makefile_insert +++ /dev/null @@ -1,251 +0,0 @@ -## Makefile.am fragment, included by src/Makefile.am. - -ink_common_sources += \ - util/find-last-if.h \ - util/longest-common-suffix.h \ - remove-last.h \ - attributes.cpp attributes.h \ - attribute-rel-svg.cpp attribute-rel-svg.h \ - attribute-rel-css.cpp attribute-rel-css.h \ - attribute-rel-util.cpp attribute-rel-util.h \ - attribute-sort-util.cpp attribute-sort-util.h \ - axis-manip.cpp axis-manip.h \ - bad-uri-exception.h \ - box3d.cpp box3d.h \ - box3d-side.cpp box3d-side.h \ - brokenimage.xpm \ - cms-color-types.h \ - cms-system.h \ - color.cpp color.h \ - color-profile.cpp color-profile.h \ - color-profile-cms-fns.h \ - color-rgba.h \ - colorspace.h \ - composite-undo-stack-observer.cpp \ - composite-undo-stack-observer.h \ - conditions.cpp conditions.h \ - conn-avoid-ref.cpp conn-avoid-ref.h \ - console-output-undo-observer.h console-output-undo-observer.cpp \ - context-fns.cpp context-fns.h \ - decimal-round.h \ - desktop.cpp desktop.h \ - desktop-events.cpp desktop-events.h \ - desktop-style.cpp desktop-style.h \ - device-manager.cpp device-manager.h \ - dir-util.cpp dir-util.h \ - document.cpp document.h document-private.h \ - document-subset.cpp document-subset.h \ - document-undo.cpp document-undo.h \ - ege-color-prof-tracker.cpp ege-color-prof-tracker.h \ - enums.h \ - event-log.cpp event-log.h event.h \ - extract-uri.cpp extract-uri.h \ - file.cpp file.h \ - fill-or-stroke.h \ - filter-chemistry.cpp filter-chemistry.h \ - filter-enums.cpp filter-enums.h \ - gc-anchored.cpp gc-anchored.h \ - gc-finalized.cpp gc-finalized.h \ - gradient-chemistry.cpp gradient-chemistry.h \ - gradient-drag.cpp gradient-drag.h \ - graphlayout.cpp graphlayout.h \ - guide-snapper.cpp guide-snapper.h \ - help.cpp help.h \ - helper-fns.h \ - helper/pixbuf-ops.cpp \ - helper/pixbuf-ops.h \ - icon-size.h \ - id-clash.cpp id-clash.h \ - inkscape.cpp inkscape.h \ - isinf.h \ - knot.cpp knot.h \ - knot-enums.h \ - knotholder.cpp knotholder.h \ - knot-holder-entity.h knot-holder-entity.cpp \ - knot-ptr.h knot-ptr.cpp \ - layer-fns.cpp layer-fns.h \ - layer-manager.cpp layer-manager.h \ - layer-model.cpp layer-model.h \ - line-geometry.cpp line-geometry.h \ - line-snapper.cpp line-snapper.h \ - macros.h \ - main-cmdlineact.cpp main-cmdlineact.h \ - media.cpp media.h \ - menus-skeleton.h \ - message-context.cpp message-context.h \ - message.h \ - message-stack.cpp message-stack.h \ - mod360.cpp mod360.h \ - object-hierarchy.cpp object-hierarchy.h \ - object-snapper.cpp object-snapper.h \ - path-chemistry.cpp path-chemistry.h \ - path-prefix.h \ - persp3d.cpp persp3d.h \ - persp3d-reference.cpp persp3d-reference.h \ - perspective-line.cpp perspective-line.h \ - preferences.cpp preferences.h \ - preferences-skeleton.h \ - prefix.cpp prefix.h \ - print.cpp print.h \ - profile-manager.cpp profile-manager.h \ - proj_pt.cpp proj_pt.h \ - pure-transform.cpp pure-transform.h \ - removeoverlap.cpp removeoverlap.h \ - rdf.cpp rdf.h \ - resource-manager.cpp resource-manager.h \ - require-config.h \ - round.h \ - rubberband.cpp rubberband.h \ - satisfied-guide-cns.cpp satisfied-guide-cns.h \ - selcue.cpp selcue.h \ - selection-chemistry.cpp selection-chemistry.h \ - selection.cpp selection.h \ - selection-describer.cpp selection-describer.h \ - seltrans.cpp seltrans.h \ - seltrans-handles.cpp seltrans-handles.h \ - shortcuts.cpp shortcuts.h \ - snap.cpp snap.h \ - snap-enums.h snap-candidate.h \ - snapped-curve.cpp snapped-curve.h \ - snapped-line.cpp snapped-line.h \ - snapped-point.cpp snapped-point.h \ - snapper.cpp snapper.h \ - snap-preferences.cpp snap-preferences.h \ - sp-anchor.cpp sp-anchor.h \ - sp-clippath.cpp sp-clippath.h \ - sp-conn-end.cpp sp-conn-end.h \ - sp-conn-end-pair.cpp sp-conn-end-pair.h \ - sp-cursor.cpp sp-cursor.h \ - sp-defs.cpp sp-defs.h \ - sp-desc.cpp sp-desc.h \ - sp-ellipse.cpp sp-ellipse.h \ - sp-factory.h sp-factory.cpp \ - sp-filter.cpp sp-filter.h number-opt-number.h \ - sp-filter-primitive.cpp sp-filter-primitive.h \ - sp-filter-reference.cpp sp-filter-reference.h \ - sp-filter-units.h \ - sp-flowdiv.h sp-flowdiv.cpp \ - sp-flowregion.h sp-flowregion.cpp \ - sp-flowtext.h sp-flowtext.cpp \ - sp-font.cpp sp-font.h \ - sp-font-face.cpp sp-font-face.h \ - sp-glyph.cpp sp-glyph.h \ - sp-glyph-kerning.cpp sp-glyph-kerning.h \ - sp-gradient.cpp sp-gradient.h \ - sp-gradient-reference.cpp sp-gradient-reference.h \ - sp-gradient-spread.h \ - sp-gradient-units.h \ - sp-gradient-vector.h \ - sp-guide-attachment.h \ - sp-guide-constraint.h \ - sp-guide.cpp sp-guide.h \ - sp-hatch.cpp sp-hatch.h \ - sp-hatch-path.cpp sp-hatch-path.h \ - sp-image.cpp sp-image.h \ - sp-item.cpp sp-item.h \ - sp-item-group.cpp sp-item-group.h \ - sp-item-notify-moveto.cpp sp-item-notify-moveto.h \ - sp-item-rm-unsatisfied-cns.cpp sp-item-rm-unsatisfied-cns.h \ - sp-item-transform.cpp sp-item-transform.h \ - sp-item-update-cns.cpp sp-item-update-cns.h \ - sp-linear-gradient.cpp sp-linear-gradient.h \ - sp-line.cpp sp-line.h \ - splivarot.cpp splivarot.h \ - sp-lpe-item.cpp sp-lpe-item.h \ - sp-marker.cpp sp-marker.h \ - sp-marker-loc.h \ - sp-mask.cpp sp-mask.h \ - sp-metadata.cpp sp-metadata.h \ - sp-mesh.cpp sp-mesh.h \ - sp-mesh-array.cpp sp-mesh-array.h \ - sp-mesh-patch.cpp sp-mesh-patch.h \ - sp-mesh-row.cpp sp-mesh-row.h \ - sp-missing-glyph.cpp sp-missing-glyph.h \ - sp-namedview.cpp sp-namedview.h \ - sp-object.cpp sp-object.h \ - sp-object-group.cpp sp-object-group.h \ - sp-offset.cpp sp-offset.h \ - sp-paint-server.cpp sp-paint-server.h \ - sp-paint-server-reference.h \ - sp-path.cpp sp-path.h \ - sp-pattern.cpp sp-pattern.h \ - sp-polygon.cpp sp-polygon.h \ - sp-polyline.cpp sp-polyline.h \ - sp-radial-gradient.cpp sp-radial-gradient.h \ - sp-rect.cpp sp-rect.h \ - sp-root.cpp sp-root.h \ - sp-script.cpp sp-script.h \ - sp-shape.cpp sp-shape.h \ - sp-solid-color.cpp sp-solid-color.h \ - sp-spiral.cpp sp-spiral.h \ - sp-star.cpp sp-star.h \ - sp-stop.cpp sp-stop.h \ - sp-string.cpp sp-string.h \ - sp-style-elem.cpp sp-style-elem.h \ - sp-switch.cpp sp-switch.h \ - sp-symbol.cpp sp-symbol.h \ - sp-tag.cpp sp-tag.h \ - sp-tag-use.cpp sp-tag-use.h \ - sp-tag-use-reference.cpp sp-tag-use-reference.h \ - sp-text.cpp sp-text.h \ - sp-textpath.h \ - sp-title.cpp sp-title.h \ - sp-tref.cpp sp-tref.h \ - sp-tref-reference.cpp sp-tref-reference.h \ - sp-tspan.cpp sp-tspan.h \ - sp-use.cpp sp-use.h \ - sp-use-reference.cpp sp-use-reference.h \ - streq.h \ - strneq.h \ - style.cpp style.h \ - style-enums.h \ - style-internal.cpp style-internal.h \ - svg-profile.h \ - svg-view.cpp svg-view.h \ - svg-view-widget.cpp svg-view-widget.h \ - syseq.h \ - text-chemistry.cpp text-chemistry.h \ - text-editing.cpp text-editing.h \ - text-tag-attributes.h \ - transf_mat_3x4.cpp transf_mat_3x4.h \ - unclump.cpp unclump.h \ - undo-stack-observer.h \ - unicoderange.cpp unicoderange.h \ - uri.cpp uri.h \ - uri-references.cpp uri-references.h \ - vanishing-point.cpp vanishing-point.h \ - verbs.cpp verbs.h \ - version.cpp version.h \ - viewbox.cpp viewbox.h - -# Additional dependencies - -desktop.$(OBJEXT): helper/sp-marshal.h -document.$(OBJEXT): helper/sp-marshal.h -inkscape.$(OBJEXT): helper/sp-marshal.h -knot.$(OBJEXT): helper/sp-marshal.h -selection.$(OBJEXT): helper/sp-marshal.h -sp-object.$(OBJEXT): helper/sp-marshal.h -view.$(OBJEXT): helper/sp-marshal.h - -# ###################### -# ### CxxTest stuff #### -# ###################### -CXXTEST_TESTSUITES += \ - $(srcdir)/MultiPrinter.h \ - $(srcdir)/TRPIFormatter.h \ - $(srcdir)/PylogFormatter.h \ - $(srcdir)/attributes-test.h \ - $(srcdir)/color-profile-test.h \ - $(srcdir)/dir-util-test.h \ - $(srcdir)/extract-uri-test.h \ - $(srcdir)/marker-test.h \ - $(srcdir)/mod360-test.h \ - $(srcdir)/object-test.h \ - $(srcdir)/preferences-test.h \ - $(srcdir)/round-test.h \ - $(srcdir)/sp-gradient-test.h \ - $(srcdir)/sp-style-elem-test.h \ - $(srcdir)/style-test.h \ - $(srcdir)/test-helpers.h \ - $(srcdir)/verbs-test.h diff --git a/src/debug/Makefile_insert b/src/debug/Makefile_insert deleted file mode 100644 index 47cc2b704..000000000 --- a/src/debug/Makefile_insert +++ /dev/null @@ -1,15 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - debug/demangle.cpp debug/demangle.h \ - debug/event.h \ - debug/event-tracker.h \ - debug/heap.cpp debug/heap.h \ - debug/gc-heap.h \ - debug/logger.cpp debug/logger.h \ - debug/log-display-config.cpp debug/log-display-config.h \ - debug/simple-event.h \ - debug/sysv-heap.cpp debug/sysv-heap.h \ - debug/gdk-event-latency-tracker.cpp debug/gdk-event-latency-tracker.h \ - debug/timestamp.cpp debug/timestamp.h - diff --git a/src/display/Makefile_insert b/src/display/Makefile_insert deleted file mode 100644 index 419852f7d..000000000 --- a/src/display/Makefile_insert +++ /dev/null @@ -1,125 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -display/canvas-arena.$(OBJEXT): helper/sp-marshal.h -display/sp-canvas.$(OBJEXT): helper/sp-marshal.h - -ink_common_sources += \ - display/cairo-templates.h \ - display/cairo-utils.cpp \ - display/cairo-utils.h \ - display/canvas-arena.cpp \ - display/canvas-arena.h \ - display/canvas-axonomgrid.cpp \ - display/canvas-axonomgrid.h \ - display/canvas-bpath.cpp \ - display/canvas-bpath.h \ - display/canvas-grid.cpp \ - display/canvas-grid.h \ - display/canvas-temporary-item.cpp \ - display/canvas-temporary-item.h \ - display/canvas-temporary-item-list.cpp \ - display/canvas-temporary-item-list.h \ - display/canvas-text.cpp \ - display/canvas-text.h \ - display/curve.cpp \ - display/curve.h \ - display/drawing.cpp \ - display/drawing.h \ - display/drawing-context.cpp \ - display/drawing-context.h \ - display/drawing-group.cpp \ - display/drawing-group.h \ - display/drawing-image.cpp \ - display/drawing-image.h \ - display/drawing-item.cpp \ - display/drawing-item.h \ - display/drawing-pattern.cpp \ - display/drawing-pattern.h \ - display/drawing-shape.cpp \ - display/drawing-shape.h \ - display/drawing-surface.cpp \ - display/drawing-surface.h \ - display/drawing-text.cpp \ - display/drawing-text.h \ - display/gnome-canvas-acetate.cpp \ - display/gnome-canvas-acetate.h \ - display/grayscale.cpp \ - display/grayscale.h \ - display/guideline.cpp \ - display/guideline.h \ - display/nr-3dutils.cpp \ - display/nr-3dutils.h \ - display/nr-filter-blend.cpp \ - display/nr-filter-blend.h \ - display/nr-filter-colormatrix.cpp \ - display/nr-filter-colormatrix.h \ - display/nr-filter-component-transfer.cpp \ - display/nr-filter-component-transfer.h \ - display/nr-filter-composite.cpp \ - display/nr-filter-composite.h \ - display/nr-filter-convolve-matrix.cpp \ - display/nr-filter-convolve-matrix.h \ - display/nr-filter.cpp \ - display/nr-filter-diffuselighting.cpp \ - display/nr-filter-diffuselighting.h \ - display/nr-filter-displacement-map.cpp \ - display/nr-filter-displacement-map.h \ - display/nr-filter-flood.cpp \ - display/nr-filter-flood.h \ - display/nr-filter-gaussian.cpp \ - display/nr-filter-gaussian.h \ - display/nr-filter.h \ - display/nr-filter-image.cpp \ - display/nr-filter-image.h \ - display/nr-filter-merge.cpp \ - display/nr-filter-merge.h \ - display/nr-filter-morphology.cpp \ - display/nr-filter-morphology.h \ - display/nr-filter-offset.cpp \ - display/nr-filter-offset.h \ - display/nr-filter-primitive.cpp \ - display/nr-filter-primitive.h \ - display/nr-filter-slot.cpp \ - display/nr-filter-slot.h \ - display/nr-filter-specularlighting.cpp \ - display/nr-filter-specularlighting.h \ - display/nr-filter-tile.cpp \ - display/nr-filter-tile.h \ - display/nr-filter-turbulence.cpp \ - display/nr-filter-turbulence.h \ - display/nr-filter-types.h \ - display/nr-filter-units.cpp \ - display/nr-filter-units.h \ - display/nr-filter-utils.h \ - display/nr-light.cpp \ - display/nr-light.h \ - display/nr-light-types.h \ - display/nr-style.cpp \ - display/nr-style.h \ - display/nr-svgfonts.cpp \ - display/nr-svgfonts.h \ - display/rendermode.h \ - display/snap-indicator.cpp \ - display/snap-indicator.h \ - display/sodipodi-ctrl.cpp \ - display/sodipodi-ctrl.h \ - display/sodipodi-ctrlrect.cpp \ - display/sodipodi-ctrlrect.h \ - display/sp-canvas.cpp \ - display/sp-canvas.h \ - display/sp-canvas-item.h \ - display/sp-canvas-group.h \ - display/sp-canvas-util.cpp \ - display/sp-canvas-util.h \ - display/sp-ctrlcurve.cpp \ - display/sp-ctrlcurve.h \ - display/sp-ctrlline.cpp \ - display/sp-ctrlline.h \ - display/sp-ctrlquadr.cpp \ - display/sp-ctrlquadr.h - -# ###################### -# ### CxxTest stuff #### -# ###################### -CXXTEST_TESTSUITES += \ - $(srcdir)/display/curve-test.h diff --git a/src/extension/Makefile_insert b/src/extension/Makefile_insert deleted file mode 100644 index fb9713904..000000000 --- a/src/extension/Makefile_insert +++ /dev/null @@ -1,54 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - extension/extension.cpp \ - extension/extension.h \ - extension/db.cpp \ - extension/db.h \ - extension/dependency.cpp \ - extension/dependency.h \ - extension/error-file.cpp \ - extension/error-file.h \ - extension/execution-env.cpp \ - extension/execution-env.h \ - extension/init.cpp \ - extension/init.h \ - extension/loader.h \ - extension/loader.cpp \ - extension/param/parameter.h \ - extension/param/parameter.cpp \ - extension/param/notebook.h \ - extension/param/notebook.cpp \ - extension/param/bool.h \ - extension/param/bool.cpp \ - extension/param/color.h \ - extension/param/color.cpp \ - extension/param/description.h \ - extension/param/description.cpp \ - extension/param/enum.h \ - extension/param/enum.cpp \ - extension/param/float.h \ - extension/param/float.cpp \ - extension/param/int.h \ - extension/param/int.cpp \ - extension/param/radiobutton.h \ - extension/param/radiobutton.cpp \ - extension/param/string.h \ - extension/param/string.cpp \ - extension/prefdialog.cpp \ - extension/prefdialog.h \ - extension/system.cpp \ - extension/system.h \ - extension/timer.cpp \ - extension/timer.h \ - extension/input.h \ - extension/input.cpp \ - extension/output.h \ - extension/output.cpp \ - extension/effect.h \ - extension/effect.cpp \ - extension/patheffect.h \ - extension/patheffect.cpp \ - extension/print.h \ - extension/print.cpp - diff --git a/src/extension/dbus/Makefile_insert b/src/extension/dbus/Makefile_insert deleted file mode 100644 index 192651d87..000000000 --- a/src/extension/dbus/Makefile_insert +++ /dev/null @@ -1,111 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -if WITH_DBUS - -############################# -# Sources for DBus interface -############################# - -ink_common_sources += \ - extension/dbus/dbus-init.cpp \ - extension/dbus/dbus-init.h \ - extension/dbus/application-interface.cpp \ - extension/dbus/application-interface.h \ - extension/dbus/document-interface.cpp \ - extension/dbus/document-interface.h \ - extension/dbus/org.inkscape.service.in - -########################### -# Build DBus wrapper files -########################### - -extension/dbus/application-server-glue.h: extension/dbus/application-interface.xml - dbus-binding-tool --mode=glib-server --output=$@ --prefix=application_interface $^ - -extension/dbus/document-server-glue.h: extension/dbus/document-interface.xml - dbus-binding-tool --mode=glib-server --output=$@ --prefix=document_interface $^ - -extension/dbus/document-client-glue.h: extension/dbus/document-interface.xml - dbus-binding-tool --mode=glib-client --output=$@ --prefix=document_interface $^ - -BUILT_SOURCES += \ - extension/dbus/application-server-glue.h \ - extension/dbus/document-server-glue.h \ - extension/dbus/document-client-glue.h - -########################### -# Distribut DBus interface -########################### - -EXTRA_DIST += \ - extension/dbus/application-interface.xml \ - extension/dbus/document-interface.xml - -########################### -# DBus Activation Service -########################### - -# Dbus service file -servicedir = $(DBUSSERVICEDIR) -service_in_files = extension/dbus/org.inkscape.service.in -service_DATA = $(service_in_files:.service.in=.service) - -# Rule to make the service file with bindir expanded -$(service_DATA): $(service_in_files) Makefile - @sed -e "s|bindir|$(prefix)|" $<> $@ - -############################ -# DBus Interface Helper Lib -############################ - -lib_LTLIBRARIES = \ - libinkdbus.la - -libinkdbusincludedir = $(includedir)/libinkdbus-0.48/libinkdbus -libinkdbusinclude_HEADERS = \ - extension/dbus/wrapper/inkscape-dbus-wrapper.h - -libinkdbus_la_SOURCES = \ - extension/dbus/wrapper/inkscape-dbus-wrapper.h \ - extension/dbus/wrapper/inkscape-dbus-wrapper.c - -libinkdbus_la_LDFLAGS = \ - -version-info 0:0:0 \ - -no-undefined \ - -export-symbols-regex "^[^_d].*" - -libinkdbus_la_CFLAGS = \ - $(DBUS_CFLAGS) \ - $(INKSCAPE_CFLAGS) \ - -I$(builddir)/extension/dbus \ - -Wall - -libinkdbus_la_LIBADD = \ - $(DBUS_LIBS) \ - $(INKSCAPE_LIBS) - -############################ -# DBus Pkgconfig file -############################ - -pkgconfig_DATA = extension/dbus/wrapper/inkdbus.pc -pkgconfigdir = $(libdir)/pkgconfig - -else # WITH_DBUS - -EXTRA_DIST += \ - extension/dbus/dbus-init.cpp \ - extension/dbus/dbus-init.h \ - extension/dbus/application-interface.cpp \ - extension/dbus/application-interface.h \ - extension/dbus/document-interface.cpp \ - extension/dbus/document-interface.h \ - extension/dbus/wrapper/inkscape-dbus-wrapper.h \ - extension/dbus/wrapper/inkscape-dbus-wrapper.c \ - extension/dbus/wrapper/inkdbus.pc \ - extension/dbus/org.inkscape.service.in \ - extension/dbus/application-interface.xml \ - extension/dbus/document-interface.xml - -endif - diff --git a/src/extension/implementation/Makefile_insert b/src/extension/implementation/Makefile_insert deleted file mode 100644 index 1b9080f1a..000000000 --- a/src/extension/implementation/Makefile_insert +++ /dev/null @@ -1,9 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - extension/implementation/implementation.cpp \ - extension/implementation/implementation.h \ - extension/implementation/script.cpp \ - extension/implementation/script.h \ - extension/implementation/xslt.cpp \ - extension/implementation/xslt.h diff --git a/src/extension/internal/Makefile_insert b/src/extension/internal/Makefile_insert deleted file mode 100644 index 125776d41..000000000 --- a/src/extension/internal/Makefile_insert +++ /dev/null @@ -1,173 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -if WITH_LIBWPG -ink_common_sources += \ - extension/internal/wpg-input.cpp \ - extension/internal/wpg-input.h -endif - -if WITH_LIBVISIO -ink_common_sources += \ - extension/internal/vsd-input.cpp \ - extension/internal/vsd-input.h -endif - -if WITH_LIBCDR -ink_common_sources += \ - extension/internal/cdr-input.cpp \ - extension/internal/cdr-input.h -endif - -if USE_IMAGE_MAGICK -ink_common_sources += \ - extension/internal/bitmap/imagemagick.cpp \ - extension/internal/bitmap/imagemagick.h \ - extension/internal/bitmap/adaptiveThreshold.cpp \ - extension/internal/bitmap/adaptiveThreshold.h \ - extension/internal/bitmap/addNoise.cpp \ - extension/internal/bitmap/addNoise.h \ - extension/internal/bitmap/blur.cpp \ - extension/internal/bitmap/blur.h \ - extension/internal/bitmap/channel.cpp \ - extension/internal/bitmap/channel.h \ - extension/internal/bitmap/charcoal.cpp \ - extension/internal/bitmap/charcoal.h \ - extension/internal/bitmap/colorize.cpp \ - extension/internal/bitmap/colorize.h \ - extension/internal/bitmap/contrast.cpp \ - extension/internal/bitmap/contrast.h \ - extension/internal/bitmap/crop.cpp \ - extension/internal/bitmap/crop.h \ - extension/internal/bitmap/cycleColormap.cpp \ - extension/internal/bitmap/cycleColormap.h \ - extension/internal/bitmap/despeckle.cpp \ - extension/internal/bitmap/despeckle.h \ - extension/internal/bitmap/edge.cpp \ - extension/internal/bitmap/edge.h \ - extension/internal/bitmap/emboss.cpp \ - extension/internal/bitmap/emboss.h \ - extension/internal/bitmap/enhance.cpp \ - extension/internal/bitmap/enhance.h \ - extension/internal/bitmap/equalize.cpp \ - extension/internal/bitmap/equalize.h \ - extension/internal/bitmap/gaussianBlur.cpp \ - extension/internal/bitmap/gaussianBlur.h \ - extension/internal/bitmap/implode.cpp \ - extension/internal/bitmap/implode.h \ - extension/internal/bitmap/level.cpp \ - extension/internal/bitmap/level.h \ - extension/internal/bitmap/levelChannel.cpp \ - extension/internal/bitmap/levelChannel.h \ - extension/internal/bitmap/medianFilter.cpp \ - extension/internal/bitmap/medianFilter.h \ - extension/internal/bitmap/modulate.cpp \ - extension/internal/bitmap/modulate.h \ - extension/internal/bitmap/negate.cpp \ - extension/internal/bitmap/negate.h \ - extension/internal/bitmap/normalize.cpp \ - extension/internal/bitmap/normalize.h \ - extension/internal/bitmap/oilPaint.cpp \ - extension/internal/bitmap/oilPaint.h \ - extension/internal/bitmap/opacity.cpp \ - extension/internal/bitmap/opacity.h \ - extension/internal/bitmap/raise.cpp \ - extension/internal/bitmap/raise.h \ - extension/internal/bitmap/reduceNoise.cpp \ - extension/internal/bitmap/reduceNoise.h \ - extension/internal/bitmap/sample.cpp \ - extension/internal/bitmap/sample.h \ - extension/internal/bitmap/shade.cpp \ - extension/internal/bitmap/shade.h \ - extension/internal/bitmap/sharpen.cpp \ - extension/internal/bitmap/sharpen.h \ - extension/internal/bitmap/solarize.cpp \ - extension/internal/bitmap/solarize.h \ - extension/internal/bitmap/spread.cpp \ - extension/internal/bitmap/spread.h \ - extension/internal/bitmap/swirl.cpp \ - extension/internal/bitmap/swirl.h \ - extension/internal/bitmap/threshold.cpp \ - extension/internal/bitmap/threshold.h \ - extension/internal/bitmap/unsharpmask.cpp \ - extension/internal/bitmap/unsharpmask.h \ - extension/internal/bitmap/wave.cpp \ - extension/internal/bitmap/wave.h -endif - -ink_common_sources += \ - extension/internal/bluredge.h \ - extension/internal/bluredge.cpp \ - extension/internal/clear-n_.h \ - extension/internal/grid.h \ - extension/internal/grid.cpp \ - extension/internal/gimpgrad.h \ - extension/internal/gimpgrad.cpp \ - extension/internal/svg.h \ - extension/internal/svg.cpp \ - extension/internal/svgz.h \ - extension/internal/svgz.cpp \ - extension/internal/cairo-ps-out.h \ - extension/internal/cairo-ps-out.cpp \ - extension/internal/cairo-render-context.h \ - extension/internal/cairo-render-context.cpp \ - extension/internal/cairo-renderer.h \ - extension/internal/cairo-renderer.cpp \ - extension/internal/cairo-renderer-pdf-out.h \ - extension/internal/cairo-renderer-pdf-out.cpp \ - extension/internal/cairo-png-out.h \ - extension/internal/cairo-png-out.cpp \ - extension/internal/javafx-out.cpp \ - extension/internal/javafx-out.h \ - extension/internal/gdkpixbuf-input.h \ - extension/internal/gdkpixbuf-input.cpp \ - extension/internal/latex-text-renderer.h \ - extension/internal/latex-text-renderer.cpp \ - extension/internal/pdfinput/svg-builder.h \ - extension/internal/pdfinput/svg-builder.cpp \ - extension/internal/pdfinput/pdf-parser.h \ - extension/internal/pdfinput/pdf-parser.cpp \ - extension/internal/pdfinput/pdf-input.h \ - extension/internal/pdfinput/pdf-input.cpp \ - extension/internal/pov-out.cpp \ - extension/internal/pov-out.h \ - extension/internal/odf.cpp \ - extension/internal/odf.h \ - extension/internal/latex-pstricks.cpp \ - extension/internal/latex-pstricks.h \ - extension/internal/latex-pstricks-out.cpp \ - extension/internal/latex-pstricks-out.h \ - extension/internal/filter/bevels.h \ - extension/internal/filter/blurs.h \ - extension/internal/filter/bumps.h \ - extension/internal/filter/color.h \ - extension/internal/filter/distort.h \ - extension/internal/filter/filter.h \ - extension/internal/filter/image.h \ - extension/internal/filter/morphology.h \ - extension/internal/filter/overlays.h \ - extension/internal/filter/paint.h \ - extension/internal/filter/protrusions.h \ - extension/internal/filter/shadows.h \ - extension/internal/filter/textures.h \ - extension/internal/filter/transparency.h \ - extension/internal/filter/filter-all.cpp \ - extension/internal/filter/filter-file.cpp \ - extension/internal/filter/filter.cpp \ - extension/internal/filter/filter.h \ - extension/internal/text_reassemble.c \ - extension/internal/text_reassemble.h \ - extension/internal/emf-print.h \ - extension/internal/emf-print.cpp \ - extension/internal/emf-inout.h \ - extension/internal/emf-inout.cpp \ - extension/internal/metafile-inout.h \ - extension/internal/metafile-inout.cpp \ - extension/internal/metafile-print.h \ - extension/internal/metafile-print.cpp \ - extension/internal/wmf-print.h \ - extension/internal/wmf-print.cpp \ - extension/internal/wmf-inout.h \ - extension/internal/wmf-inout.cpp \ - extension/internal/image-resolution.h \ - extension/internal/image-resolution.cpp - diff --git a/src/filters/Makefile_insert b/src/filters/Makefile_insert deleted file mode 100644 index ea9ff4b56..000000000 --- a/src/filters/Makefile_insert +++ /dev/null @@ -1,46 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - filters/blend.cpp \ - filters/blend.h \ - filters/colormatrix.cpp \ - filters/colormatrix.h \ - filters/componenttransfer.cpp \ - filters/componenttransfer-funcnode.cpp \ - filters/componenttransfer-funcnode.h \ - filters/componenttransfer.h \ - filters/composite.cpp \ - filters/composite.h \ - filters/convolvematrix.cpp \ - filters/convolvematrix.h \ - filters/diffuselighting.cpp \ - filters/diffuselighting.h \ - filters/displacementmap.cpp \ - filters/displacementmap.h \ - filters/distantlight.cpp \ - filters/distantlight.h \ - filters/flood.cpp \ - filters/flood.h \ - filters/gaussian-blur.cpp \ - filters/gaussian-blur.h \ - filters/image.cpp \ - filters/image.h \ - filters/merge.cpp \ - filters/merge.h \ - filters/mergenode.cpp \ - filters/mergenode.h \ - filters/morphology.cpp \ - filters/morphology.h \ - filters/offset.cpp \ - filters/offset.h \ - filters/pointlight.cpp \ - filters/pointlight.h \ - filters/specularlighting.cpp \ - filters/specularlighting.h \ - filters/spotlight.cpp \ - filters/spotlight.h \ - filters/tile.cpp \ - filters/tile.h \ - filters/turbulence.cpp \ - filters/turbulence.h - diff --git a/src/helper/Makefile_insert b/src/helper/Makefile_insert deleted file mode 100644 index e59fcfb70..000000000 --- a/src/helper/Makefile_insert +++ /dev/null @@ -1,45 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -helper/unit-menu.$(OBJEXT): helper/sp-marshal.h - -ink_common_sources += \ - helper/action.cpp \ - helper/action.h \ - helper/action-context.cpp \ - helper/action-context.h \ - helper/geom.cpp \ - helper/geom.h \ - helper/geom-curves.h \ - helper/geom-nodetype.cpp \ - helper/geom-nodetype.h \ - helper/geom-pathstroke.cpp \ - helper/geom-pathstroke.h \ - helper/gnome-utils.cpp \ - helper/gnome-utils.h \ - helper/mathfns.h \ - helper/png-write.cpp \ - helper/png-write.h \ - helper/sp-marshal.cpp \ - helper/sp-marshal.h \ - helper/window.cpp \ - helper/window.h \ - helper/stock-items.cpp \ - helper/stock-items.h - -# cmp exits with status 0 when there are no differences. "if" executes the commands -# after "then" when the exit status of the if command is 0 (this is crazy). -helper/sp-marshal.h: helper/sp-marshal.list - glib-genmarshal --prefix=sp_marshal --header $(srcdir)/helper/sp-marshal.list > helper/tmp.sp-marshal.h - if cmp -s helper/sp-marshal.h helper/tmp.sp-marshal.h; \ - then rm helper/tmp.sp-marshal.h; \ - else mv helper/tmp.sp-marshal.h helper/sp-marshal.h; fi - -helper/sp-marshal.cpp: helper/sp-marshal.list helper/sp-marshal.h - ( echo '#include "helper/sp-marshal.h"' && \ - glib-genmarshal --prefix=sp_marshal --body $(srcdir)/helper/sp-marshal.list ) \ - > helper/tmp.sp-marshal.cpp; \ - if cmp -s helper/sp-marshal.cpp helper/tmp.sp-marshal.cpp; \ - then rm helper/tmp.sp-marshal.cpp; \ - else mv helper/tmp.sp-marshal.cpp helper/sp-marshal.cpp; fi - -helper/sp-marshal.cpp helper/sp-marshal.h: helper/sp-marshal.list diff --git a/src/inkgc/Makefile_insert b/src/inkgc/Makefile_insert deleted file mode 100644 index 58aa39bb9..000000000 --- a/src/inkgc/Makefile_insert +++ /dev/null @@ -1,13 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -inkgc/all: inkgc/libinkgc.a - -inkgc/clean: - rm -f inkgc/libinkgc.a $(inkgc_libinkgc_a_OBJECTS) - -inkgc_libinkgc_a_SOURCES = \ - inkgc/gc.cpp \ - inkgc/gc-alloc.h \ - inkgc/gc-core.h \ - inkgc/gc-managed.h \ - inkgc/gc-soft-ptr.h diff --git a/src/io/Makefile_insert b/src/io/Makefile_insert deleted file mode 100644 index 35119ec7b..000000000 --- a/src/io/Makefile_insert +++ /dev/null @@ -1,26 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - io/base64stream.h \ - io/base64stream.cpp \ - io/bufferstream.cpp \ - io/bufferstream.h \ - io/gzipstream.cpp \ - io/gzipstream.h \ - io/inkjar.cpp \ - io/inkjar.h \ - io/inkscapestream.cpp \ - io/inkscapestream.h \ - io/resource.cpp \ - io/resource.h \ - io/stringstream.cpp \ - io/stringstream.h \ - io/sys.h \ - io/sys.cpp \ - io/uristream.cpp \ - io/uristream.h \ - io/xsltstream.cpp \ - io/xsltstream.h - -#io_streamtest_SOURCES = io/streamtest.cpp -#io_streamtest_LDADD = $(all_libs) diff --git a/src/libavoid/Makefile_insert b/src/libavoid/Makefile_insert deleted file mode 100644 index 3a9b97cef..000000000 --- a/src/libavoid/Makefile_insert +++ /dev/null @@ -1,37 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -libavoid/all: libavoid/libavoid.a - -libavoid/clean: - rm -f libavoid/libavoid.a $(libavoid_libavoid_a_OBJECTS) - -libavoid_libavoid_a_SOURCES = \ - libavoid/assertions.h \ - libavoid/connector.cpp \ - libavoid/connector.h \ - libavoid/debug.h \ - libavoid/geometry.cpp \ - libavoid/geometry.h \ - libavoid/geomtypes.cpp \ - libavoid/geomtypes.h \ - libavoid/graph.cpp \ - libavoid/graph.h \ - libavoid/makepath.cpp \ - libavoid/makepath.h \ - libavoid/orthogonal.cpp \ - libavoid/orthogonal.h \ - libavoid/vpsc.cpp \ - libavoid/vpsc.h \ - libavoid/router.cpp \ - libavoid/router.h \ - libavoid/shape.cpp \ - libavoid/shape.h \ - libavoid/timer.cpp \ - libavoid/timer.h \ - libavoid/vertices.cpp \ - libavoid/vertices.h \ - libavoid/visibility.cpp \ - libavoid/visibility.h \ - libavoid/viscluster.cpp \ - libavoid/viscluster.h \ - libavoid/libavoid.h diff --git a/src/libcola/Makefile_insert b/src/libcola/Makefile_insert deleted file mode 100644 index dc032a289..000000000 --- a/src/libcola/Makefile_insert +++ /dev/null @@ -1,18 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -libcola/all: libcola.a - -libcola/clean: - rm -f libcola/libcola.a $(libcola_libcola_a_OBJECTS) - -libcola_libcola_a_SOURCES = libcola/cola.h\ - libcola/cola.cpp\ - libcola/conjugate_gradient.cpp\ - libcola/conjugate_gradient.h\ - libcola/gradient_projection.cpp\ - libcola/gradient_projection.h\ - libcola/shortest_paths.cpp\ - libcola/shortest_paths.h\ - libcola/straightener.h\ - libcola/straightener.cpp\ - libcola/connected_components.cpp diff --git a/src/libcroco/Makefile_insert b/src/libcroco/Makefile_insert deleted file mode 100644 index 97ed49ee8..000000000 --- a/src/libcroco/Makefile_insert +++ /dev/null @@ -1,64 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -libcroco/all: libcroco/libcroco.a - -libcroco/clean: - rm -f libcroco/libcroco.a $(libcroco_libcroco_a_OBJECTS) - -libcroco_libcroco_a_SOURCES = \ - libcroco/cr-utils.c \ - libcroco/cr-utils.h \ - libcroco/cr-input.c \ - libcroco/cr-input.h \ - libcroco/cr-enc-handler.c \ - libcroco/cr-enc-handler.h \ - libcroco/cr-num.c \ - libcroco/cr-num.h \ - libcroco/cr-rgb.c \ - libcroco/cr-rgb.h \ - libcroco/cr-token.c \ - libcroco/cr-token.h \ - libcroco/cr-tknzr.c \ - libcroco/cr-tknzr.h \ - libcroco/cr-term.c \ - libcroco/cr-term.h \ - libcroco/cr-attr-sel.c \ - libcroco/cr-attr-sel.h \ - libcroco/cr-pseudo.c \ - libcroco/cr-pseudo.h \ - libcroco/cr-additional-sel.c \ - libcroco/cr-additional-sel.h \ - libcroco/cr-simple-sel.c \ - libcroco/cr-simple-sel.h \ - libcroco/cr-selector.c \ - libcroco/cr-selector.h \ - libcroco/cr-doc-handler.c \ - libcroco/cr-doc-handler.h \ - libcroco/cr-parser.c \ - libcroco/cr-parser.h \ - libcroco/cr-declaration.c \ - libcroco/cr-declaration.h \ - libcroco/cr-statement.c \ - libcroco/cr-statement.h \ - libcroco/cr-stylesheet.c \ - libcroco/cr-stylesheet.h \ - libcroco/cr-cascade.c \ - libcroco/cr-cascade.h \ - libcroco/cr-om-parser.c \ - libcroco/cr-om-parser.h \ - libcroco/cr-style.c \ - libcroco/cr-style.h \ - libcroco/cr-libxml-node-iface.c \ - libcroco/cr-libxml-node-iface.h \ - libcroco/cr-node-iface.h \ - libcroco/cr-sel-eng.c \ - libcroco/cr-sel-eng.h \ - libcroco/cr-fonts.c \ - libcroco/cr-fonts.h \ - libcroco/cr-prop-list.c \ - libcroco/cr-prop-list.h \ - libcroco/cr-parsing-location.c \ - libcroco/cr-parsing-location.h \ - libcroco/cr-string.c \ - libcroco/cr-string.h \ - libcroco/libcroco.h diff --git a/src/libdepixelize/Makefile_insert b/src/libdepixelize/Makefile_insert deleted file mode 100644 index 8aed7244f..000000000 --- a/src/libdepixelize/Makefile_insert +++ /dev/null @@ -1,22 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -libdepixelize/all: libdepixelize/libdepixelize.a - -libdepixelize/clean: - rm -f libdepixelize/libdepixelize.a $(libdepixelize_libdepixelize_a_OBJECTS) - -libdepixelize_libdepixelize_a_SOURCES = \ - libdepixelize/kopftracer2011.cpp \ - libdepixelize/kopftracer2011.h \ - libdepixelize/splines.h \ - libdepixelize/priv/branchless.h \ - libdepixelize/priv/colorspace.h \ - libdepixelize/priv/curvature.h \ - libdepixelize/priv/homogeneoussplines.h \ - libdepixelize/priv/integral.h \ - libdepixelize/priv/iterator.h \ - libdepixelize/priv/optimization-kopf2011.h \ - libdepixelize/priv/pixelgraph.h \ - libdepixelize/priv/point.h \ - libdepixelize/priv/simplifiedvoronoi.h \ - libdepixelize/priv/splines-kopf2011.h diff --git a/src/libnrtype/Makefile_insert b/src/libnrtype/Makefile_insert deleted file mode 100644 index ab9465daa..000000000 --- a/src/libnrtype/Makefile_insert +++ /dev/null @@ -1,28 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - libnrtype/boundary-type.h \ - libnrtype/font-glyph.h \ - libnrtype/font-instance.h \ - libnrtype/font-style.h \ - libnrtype/nr-type-primitives.cpp \ - libnrtype/nr-type-primitives.h \ - libnrtype/FontFactory.cpp \ - libnrtype/FontFactory.h \ - libnrtype/FontInstance.cpp \ - libnrtype/font-lister.h \ - libnrtype/font-lister.cpp \ - libnrtype/one-box.h \ - libnrtype/one-glyph.h \ - libnrtype/one-para.h \ - libnrtype/text-boundary.h \ - libnrtype/TextWrapper.cpp \ - libnrtype/TextWrapper.h \ - libnrtype/Layout-TNG-Compute.cpp \ - libnrtype/Layout-TNG-Input.cpp \ - libnrtype/Layout-TNG-OutIter.cpp \ - libnrtype/Layout-TNG-Output.cpp \ - libnrtype/Layout-TNG-Scanline-Maker.h \ - libnrtype/Layout-TNG-Scanline-Makers.cpp \ - libnrtype/Layout-TNG.cpp \ - libnrtype/Layout-TNG.h diff --git a/src/libuemf/Makefile_insert b/src/libuemf/Makefile_insert deleted file mode 100644 index 427a0e80e..000000000 --- a/src/libuemf/Makefile_insert +++ /dev/null @@ -1,30 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -libuemf/all: libuemf.a - -libuemf/clean: - rm -f libuemf/libuemf.a $(libuemf_libuemf_a_OBJECTS) - -libuemf_libuemf_a_SOURCES = \ - libuemf/uemf.c \ - libuemf/uemf.h \ - libuemf/uemf_endian.c \ - libuemf/uemf_endian.h \ - libuemf/uemf_print.c \ - libuemf/uemf_print.h \ - libuemf/uemf_safe.c \ - libuemf/uemf_safe.h \ - libuemf/uemf_utf.c \ - libuemf/uemf_utf.h \ - libuemf/uwmf.c \ - libuemf/uwmf.h \ - libuemf/uwmf_endian.c \ - libuemf/uwmf_endian.h \ - libuemf/uwmf_print.c \ - libuemf/uwmf_print.h \ - libuemf/upmf.c \ - libuemf/upmf.h \ - libuemf/upmf_print.c \ - libuemf/upmf_print.h \ - libuemf/symbol_convert.c \ - libuemf/symbol_convert.h diff --git a/src/libvpsc/Makefile_insert b/src/libvpsc/Makefile_insert deleted file mode 100644 index cb05be6c0..000000000 --- a/src/libvpsc/Makefile_insert +++ /dev/null @@ -1,23 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. -libvpsc/all: libvpsc/libvpsc.a - -libvpsc/clean: - rm -f libvpsc/libvpsc.a $(libvpsc_libvpsc_a_OBJECTS) - -libvpsc_libvpsc_a_SOURCES = libvpsc/block.cpp\ - libvpsc/blocks.cpp\ - libvpsc/constraint.cpp\ - libvpsc/generate-constraints.cpp\ - libvpsc/pairingheap/PairingHeap.cpp\ - libvpsc/remove_rectangle_overlap.cpp\ - libvpsc/solve_VPSC.cpp\ - libvpsc/variable.cpp\ - libvpsc/block.h\ - libvpsc/blocks.h\ - libvpsc/constraint.h\ - libvpsc/generate-constraints.h\ - libvpsc/pairingheap/PairingHeap.h\ - libvpsc/pairingheap/dsexceptions.h\ - libvpsc/remove_rectangle_overlap.h\ - libvpsc/solve_VPSC.h\ - libvpsc/variable.h diff --git a/src/livarot/Makefile_insert b/src/livarot/Makefile_insert deleted file mode 100644 index 69078d073..000000000 --- a/src/livarot/Makefile_insert +++ /dev/null @@ -1,41 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -livarot/all: livarot/libvarot.a - -livarot/clean: - rm -f livarot/libvarot.a $(livarot_libvarot_a_OBJECTS) - -livarot_libvarot_a_SOURCES = \ - livarot/AVL.cpp \ - livarot/AVL.h \ - livarot/AlphaLigne.cpp \ - livarot/AlphaLigne.h \ - livarot/BitLigne.cpp \ - livarot/BitLigne.h \ - livarot/float-line.cpp \ - livarot/float-line.h \ - livarot/int-line.cpp \ - livarot/int-line.h \ - livarot/LivarotDefs.h \ - livarot/Path.cpp \ - livarot/Path.h \ - livarot/PathConversion.cpp \ - livarot/PathCutting.cpp \ - livarot/PathOutline.cpp \ - livarot/PathSimplify.cpp \ - livarot/PathStroke.cpp \ - livarot/Shape.cpp \ - livarot/Shape.h \ - livarot/ShapeDraw.cpp \ - livarot/ShapeMisc.cpp \ - livarot/ShapeRaster.cpp \ - livarot/ShapeSweep.cpp \ - livarot/sweep-tree-list.cpp \ - livarot/sweep-tree-list.h \ - livarot/sweep-tree.cpp \ - livarot/sweep-tree.h \ - livarot/sweep-event.cpp \ - livarot/sweep-event.h \ - livarot/sweep-event-queue.h \ - livarot/path-description.h \ - livarot/path-description.cpp diff --git a/src/live_effects/Makefile_insert b/src/live_effects/Makefile_insert deleted file mode 100644 index b5bee55c8..000000000 --- a/src/live_effects/Makefile_insert +++ /dev/null @@ -1,115 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - live_effects/effect.cpp \ - live_effects/effect.h \ - live_effects/effect-enum.h \ - live_effects/lpeobject.cpp \ - live_effects/lpeobject.h \ - live_effects/lpegroupbbox.cpp \ - live_effects/lpegroupbbox.h \ - live_effects/lpeobject-reference.cpp \ - live_effects/lpeobject-reference.h \ - live_effects/lpe-patternalongpath.cpp \ - live_effects/lpe-patternalongpath.h \ - live_effects/lpe-bendpath.cpp \ - live_effects/lpe-bendpath.h \ - live_effects/lpe-dynastroke.cpp \ - live_effects/lpe-dynastroke.h \ - live_effects/lpe-extrude.cpp \ - live_effects/lpe-extrude.h \ - live_effects/lpe-sketch.cpp \ - live_effects/lpe-sketch.h \ - live_effects/lpe-knot.cpp \ - live_effects/lpe-knot.h \ - live_effects/lpe-vonkoch.cpp \ - live_effects/lpe-vonkoch.h \ - live_effects/lpe-rough-hatches.cpp \ - live_effects/lpe-rough-hatches.h \ - live_effects/lpe-curvestitch.cpp \ - live_effects/lpe-curvestitch.h \ - live_effects/lpe-constructgrid.cpp \ - live_effects/lpe-constructgrid.h \ - live_effects/lpe-fillet-chamfer.cpp \ - live_effects/lpe-fillet-chamfer.h \ - live_effects/lpe-gears.cpp \ - live_effects/lpe-gears.h \ - live_effects/lpe-interpolate.cpp \ - live_effects/lpe-interpolate.h \ - live_effects/lpe-interpolate_points.cpp \ - live_effects/lpe-interpolate_points.h \ - live_effects/lpe-test-doEffect-stack.cpp \ - live_effects/lpe-test-doEffect-stack.h \ - live_effects/lpe-bspline.cpp \ - live_effects/lpe-bspline.h \ - live_effects/lpe-lattice.cpp \ - live_effects/lpe-lattice.h \ - live_effects/lpe-lattice2.cpp \ - live_effects/lpe-lattice2.h \ - live_effects/lpe-roughen.cpp \ - live_effects/lpe-roughen.h \ - live_effects/lpe-show_handles.cpp \ - live_effects/lpe-show_handles.h \ - live_effects/lpe-simplify.cpp \ - live_effects/lpe-simplify.h \ - live_effects/lpe-envelope.cpp \ - live_effects/lpe-envelope.h \ - live_effects/lpe-spiro.cpp \ - live_effects/lpe-spiro.h \ - live_effects/lpe-tangent_to_curve.cpp \ - live_effects/lpe-tangent_to_curve.h \ - live_effects/lpe-perp_bisector.cpp \ - live_effects/lpe-perp_bisector.h \ - live_effects/spiro.h \ - live_effects/spiro.cpp \ - live_effects/spiro-converters.h \ - live_effects/spiro-converters.cpp \ - live_effects/lpe-circle_with_radius.cpp \ - live_effects/lpe-circle_with_radius.h \ - live_effects/lpe-perspective_path.cpp \ - live_effects/lpe-perspective_path.h \ - live_effects/lpe-perspective-envelope.cpp \ - live_effects/lpe-perspective-envelope.h \ - live_effects/lpe-mirror_symmetry.cpp \ - live_effects/lpe-mirror_symmetry.h \ - live_effects/lpe-circle_3pts.cpp \ - live_effects/lpe-circle_3pts.h \ - live_effects/lpe-transform_2pts.cpp \ - live_effects/lpe-transform_2pts.h \ - live_effects/lpe-angle_bisector.cpp \ - live_effects/lpe-angle_bisector.h \ - live_effects/lpe-parallel.cpp \ - live_effects/lpe-parallel.h \ - live_effects/lpe-copy_rotate.cpp \ - live_effects/lpe-copy_rotate.h \ - live_effects/lpe-powerstroke.cpp \ - live_effects/lpe-powerstroke.h \ - live_effects/lpe-powerstroke-interpolators.h \ - live_effects/lpe-offset.cpp \ - live_effects/lpe-offset.h \ - live_effects/lpe-clone-original.cpp \ - live_effects/lpe-clone-original.h \ - live_effects/lpe-ruler.cpp \ - live_effects/lpe-ruler.h \ - live_effects/lpe-recursiveskeleton.cpp \ - live_effects/lpe-recursiveskeleton.h \ - live_effects/lpe-text_label.cpp \ - live_effects/lpe-text_label.h \ - live_effects/lpe-path_length.cpp \ - live_effects/lpe-path_length.h \ - live_effects/lpe-line_segment.cpp \ - live_effects/lpe-line_segment.h \ - live_effects/lpe-bounding-box.cpp \ - live_effects/lpe-bounding-box.h \ - live_effects/lpe-attach-path.cpp \ - live_effects/lpe-attach-path.h \ - live_effects/lpe-fill-between-strokes.cpp \ - live_effects/lpe-fill-between-strokes.h \ - live_effects/lpe-fill-between-many.cpp \ - live_effects/lpe-fill-between-many.h \ - live_effects/lpe-ellipse_5pts.cpp \ - live_effects/lpe-ellipse_5pts.h \ - live_effects/lpe-jointype.cpp \ - live_effects/lpe-jointype.h \ - live_effects/lpe-taperstroke.cpp \ - live_effects/lpe-taperstroke.h diff --git a/src/live_effects/parameter/Makefile_insert b/src/live_effects/parameter/Makefile_insert deleted file mode 100644 index bd1c5b600..000000000 --- a/src/live_effects/parameter/Makefile_insert +++ /dev/null @@ -1,36 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - live_effects/parameter/parameter.cpp \ - live_effects/parameter/parameter.h \ - live_effects/parameter/array.cpp \ - live_effects/parameter/array.h \ - live_effects/parameter/bool.cpp \ - live_effects/parameter/bool.h \ - live_effects/parameter/random.cpp \ - live_effects/parameter/random.h \ - live_effects/parameter/point.cpp \ - live_effects/parameter/point.h \ - live_effects/parameter/enum.h \ - live_effects/parameter/path-reference.cpp \ - live_effects/parameter/path-reference.h \ - live_effects/parameter/path.cpp \ - live_effects/parameter/path.h \ - live_effects/parameter/originalpath.cpp \ - live_effects/parameter/originalpath.h \ - live_effects/parameter/originalpatharray.cpp \ - live_effects/parameter/originalpatharray.h \ - live_effects/parameter/powerstrokepointarray.cpp \ - live_effects/parameter/powerstrokepointarray.h \ - live_effects/parameter/filletchamferpointarray.cpp \ - live_effects/parameter/filletchamferpointarray.h \ - live_effects/parameter/text.cpp \ - live_effects/parameter/text.h \ - live_effects/parameter/transformedpoint.cpp \ - live_effects/parameter/transformedpoint.h \ - live_effects/parameter/togglebutton.cpp \ - live_effects/parameter/togglebutton.h \ - live_effects/parameter/unit.cpp \ - live_effects/parameter/unit.h \ - live_effects/parameter/vector.cpp \ - live_effects/parameter/vector.h diff --git a/src/svg/Makefile_insert b/src/svg/Makefile_insert deleted file mode 100644 index 4f82bdd76..000000000 --- a/src/svg/Makefile_insert +++ /dev/null @@ -1,32 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - svg/css-ostringstream.h \ - svg/css-ostringstream.cpp \ - svg/path-string.h \ - svg/path-string.cpp \ - svg/stringstream.h \ - svg/stringstream.cpp \ - svg/strip-trailing-zeros.h \ - svg/strip-trailing-zeros.cpp \ - svg/svg-affine.cpp \ - svg/svg-color.cpp \ - svg/svg-color.h \ - svg/svg-icc-color.h \ - svg/svg-angle.cpp \ - svg/svg-angle.h \ - svg/svg-length.cpp \ - svg/svg-length.h \ - svg/svg-path.cpp \ - svg/svg.h - -# ###################### -# ### CxxTest stuff #### -# ###################### -CXXTEST_TESTSUITES += \ - $(srcdir)/svg/css-ostringstream-test.h \ - $(srcdir)/svg/stringstream-test.h \ - $(srcdir)/svg/svg-affine-test.h \ - $(srcdir)/svg/svg-color-test.h \ - $(srcdir)/svg/svg-length-test.h \ - $(srcdir)/svg/svg-path-geom-test.h diff --git a/src/trace/Makefile_insert b/src/trace/Makefile_insert deleted file mode 100644 index 27353df15..000000000 --- a/src/trace/Makefile_insert +++ /dev/null @@ -1,23 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -if HAVE_POTRACE - -ink_common_sources += \ - trace/pool.h \ - trace/trace.h \ - trace/trace.cpp \ - trace/imagemap-gdk.cpp \ - trace/imagemap-gdk.h \ - trace/imagemap.cpp \ - trace/imagemap.h \ - trace/quantize.h \ - trace/quantize.cpp \ - trace/filterset.h \ - trace/filterset.cpp \ - trace/siox.h \ - trace/siox.cpp \ - trace/potrace/bitmap.h \ - trace/potrace/inkscape-potrace.cpp \ - trace/potrace/inkscape-potrace.h - -endif diff --git a/src/ui/Makefile_insert b/src/ui/Makefile_insert deleted file mode 100644 index bbfdb532c..000000000 --- a/src/ui/Makefile_insert +++ /dev/null @@ -1,31 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - ui/clipboard.cpp \ - ui/clipboard.h \ - ui/control-manager.cpp \ - ui/control-manager.h \ - ui/control-types.h \ - ui/dialog-events.cpp \ - ui/dialog-events.h \ - ui/draw-anchor.cpp \ - ui/draw-anchor.h \ - ui/icon-names.h \ - ui/interface.cpp \ - ui/interface.h \ - ui/object-edit.cpp \ - ui/object-edit.h \ - ui/previewable.h \ - ui/previewfillable.h \ - ui/previewholder.cpp \ - ui/previewholder.h \ - ui/selected-color.h \ - ui/selected-color.cpp \ - ui/shape-editor.cpp \ - ui/shape-editor.h \ - ui/tool-factory.cpp \ - ui/tool-factory.h \ - ui/tools-switch.cpp \ - ui/tools-switch.h \ - ui/uxmanager.cpp \ - ui/uxmanager.h diff --git a/src/ui/cache/Makefile_insert b/src/ui/cache/Makefile_insert deleted file mode 100644 index c648777f8..000000000 --- a/src/ui/cache/Makefile_insert +++ /dev/null @@ -1,6 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - ui/cache/svg_preview_cache.h \ - ui/cache/svg_preview_cache.cpp - diff --git a/src/ui/dialog/Makefile_insert b/src/ui/dialog/Makefile_insert deleted file mode 100644 index 71628973e..000000000 --- a/src/ui/dialog/Makefile_insert +++ /dev/null @@ -1,133 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - ui/dialog/aboutbox.cpp \ - ui/dialog/aboutbox.h \ - ui/dialog/align-and-distribute.cpp \ - ui/dialog/align-and-distribute.h \ - ui/dialog/arrange-tab.h \ - ui/dialog/behavior.h \ - ui/dialog/calligraphic-profile-rename.h \ - ui/dialog/calligraphic-profile-rename.cpp \ - ui/dialog/clonetiler.cpp \ - ui/dialog/clonetiler.h \ - ui/dialog/color-item.cpp \ - ui/dialog/color-item.h \ - ui/dialog/debug.cpp \ - ui/dialog/debug.h \ - ui/dialog/desktop-tracker.cpp \ - ui/dialog/desktop-tracker.h \ - ui/dialog/dialog.cpp \ - ui/dialog/dialog.h \ - ui/dialog/dialog-manager.cpp \ - ui/dialog/dialog-manager.h \ - ui/dialog/dock-behavior.cpp \ - ui/dialog/dock-behavior.h \ - ui/dialog/document-metadata.cpp \ - ui/dialog/document-metadata.h \ - ui/dialog/document-properties.cpp \ - ui/dialog/document-properties.h \ - ui/dialog/export.cpp \ - ui/dialog/export.h \ - ui/dialog/extension-editor.cpp \ - ui/dialog/extension-editor.h \ - ui/dialog/extensions.cpp \ - ui/dialog/extensions.h \ - ui/dialog/filedialog.cpp \ - ui/dialog/filedialog.h \ - ui/dialog/filedialogimpl-gtkmm.cpp \ - ui/dialog/filedialogimpl-gtkmm.h \ - ui/dialog/filedialogimpl-win32.cpp \ - ui/dialog/filedialogimpl-win32.h \ - ui/dialog/fill-and-stroke.cpp \ - ui/dialog/fill-and-stroke.h \ - ui/dialog/filter-effects-dialog.cpp \ - ui/dialog/filter-effects-dialog.h \ - ui/dialog/find.cpp \ - ui/dialog/find.h \ - ui/dialog/font-substitution.cpp \ - ui/dialog/font-substitution.h \ - ui/dialog/floating-behavior.cpp \ - ui/dialog/floating-behavior.h \ - ui/dialog/glyphs.cpp \ - ui/dialog/glyphs.h \ - ui/dialog/grid-arrange-tab.h \ - ui/dialog/grid-arrange-tab.cpp \ - ui/dialog/guides.cpp \ - ui/dialog/guides.h \ - ui/dialog/icon-preview.cpp \ - ui/dialog/icon-preview.h \ - ui/dialog/inkscape-preferences.cpp \ - ui/dialog/inkscape-preferences.h \ - ui/dialog/input.cpp \ - ui/dialog/input.h \ - ui/dialog/knot-properties.cpp \ - ui/dialog/knot-properties.h \ - ui/dialog/layer-properties.cpp \ - ui/dialog/layer-properties.h \ - ui/dialog/layers.cpp \ - ui/dialog/layers.h \ - ui/dialog/livepatheffect-add.cpp \ - ui/dialog/livepatheffect-add.h \ - ui/dialog/livepatheffect-editor.cpp \ - ui/dialog/livepatheffect-editor.h \ - ui/dialog/memory.cpp \ - ui/dialog/memory.h \ - ui/dialog/messages.cpp \ - ui/dialog/messages.h \ - ui/dialog/new-from-template.cpp \ - ui/dialog/new-from-template.h \ - ui/dialog/ocaldialogs.cpp \ - ui/dialog/ocaldialogs.h \ - ui/dialog/object-attributes.cpp \ - ui/dialog/object-attributes.h \ - ui/dialog/object-properties.cpp \ - ui/dialog/object-properties.h \ - ui/dialog/panel-dialog.h \ - ui/dialog/polar-arrange-tab.cpp \ - ui/dialog/polar-arrange-tab.h \ - ui/dialog/print.cpp \ - ui/dialog/print.h \ - ui/dialog/print-colors-preview-dialog.cpp \ - ui/dialog/print-colors-preview-dialog.h \ - ui/dialog/spellcheck.cpp \ - ui/dialog/spellcheck.h \ - ui/dialog/svg-fonts-dialog.cpp \ - ui/dialog/svg-fonts-dialog.h \ - ui/dialog/swatches.cpp \ - ui/dialog/swatches.h \ - ui/dialog/symbols.cpp \ - ui/dialog/symbols.h \ - ui/dialog/template-load-tab.cpp \ - ui/dialog/template-load-tab.h \ - ui/dialog/template-widget.cpp \ - ui/dialog/template-widget.h \ - ui/dialog/tags.cpp \ - ui/dialog/tags.h \ - ui/dialog/text-edit.cpp \ - ui/dialog/text-edit.h \ - ui/dialog/tile.cpp \ - ui/dialog/tile.h \ - ui/dialog/pixelartdialog.cpp \ - ui/dialog/pixelartdialog.h \ - ui/dialog/transformation.cpp \ - ui/dialog/transformation.h \ - ui/dialog/undo-history.cpp \ - ui/dialog/undo-history.h \ - ui/dialog/xml-tree.cpp \ - ui/dialog/xml-tree.h \ - ui/dialog/lpe-powerstroke-properties.cpp \ - ui/dialog/lpe-powerstroke-properties.h \ - ui/dialog/objects.cpp \ - ui/dialog/objects.h \ - ui/dialog/lpe-fillet-chamfer-properties.cpp \ - ui/dialog/lpe-fillet-chamfer-properties.h \ - $(inkboard_dialogs) - -if HAVE_POTRACE - -ink_common_sources += \ - ui/dialog/tracedialog.cpp \ - ui/dialog/tracedialog.h - -endif diff --git a/src/ui/tool/Makefile_insert b/src/ui/tool/Makefile_insert deleted file mode 100644 index f46f48b72..000000000 --- a/src/ui/tool/Makefile_insert +++ /dev/null @@ -1,30 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - ui/tool/control-point.cpp \ - ui/tool/control-point.h \ - ui/tool/control-point-selection.cpp \ - ui/tool/control-point-selection.h \ - ui/tool/commit-events.h \ - ui/tool/curve-drag-point.cpp \ - ui/tool/curve-drag-point.h \ - ui/tool/event-utils.cpp \ - ui/tool/event-utils.h \ - ui/tool/manipulator.cpp \ - ui/tool/manipulator.h \ - ui/tool/modifier-tracker.cpp \ - ui/tool/modifier-tracker.h \ - ui/tool/multi-path-manipulator.cpp \ - ui/tool/multi-path-manipulator.h \ - ui/tool/node.cpp \ - ui/tool/node.h \ - ui/tool/node-types.h \ - ui/tool/path-manipulator.cpp \ - ui/tool/path-manipulator.h \ - ui/tool/selectable-control-point.cpp \ - ui/tool/selectable-control-point.h \ - ui/tool/selector.cpp \ - ui/tool/selector.h \ - ui/tool/shape-record.h \ - ui/tool/transform-handle-set.cpp \ - ui/tool/transform-handle-set.h diff --git a/src/ui/tools/Makefile_insert b/src/ui/tools/Makefile_insert deleted file mode 100644 index 686dfedd8..000000000 --- a/src/ui/tools/Makefile_insert +++ /dev/null @@ -1,34 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - ui/tools/arc-tool.cpp ui/tools/arc-tool.h \ - ui/tools/box3d-tool.cpp ui/tools/box3d-tool.h \ - ui/tools/calligraphic-tool.cpp ui/tools/calligraphic-tool.h \ - ui/tools/connector-tool.cpp ui/tools/connector-tool.h \ - ui/tools/dropper-tool.cpp ui/tools/dropper-tool.h \ - ui/tools/dynamic-base.cpp ui/tools/dynamic-base.h \ - ui/tools/eraser-tool.cpp ui/tools/eraser-tool.h \ - ui/tools/freehand-base.cpp ui/tools/freehand-base.h \ - ui/tools/gradient-tool.cpp ui/tools/gradient-tool.h \ - ui/tools/lpe-tool.cpp ui/tools/lpe-tool.h \ - ui/tools/measure-tool.cpp ui/tools/measure-tool.h \ - ui/tools/mesh-tool.cpp ui/tools/mesh-tool.h \ - ui/tools/node-tool.cpp ui/tools/node-tool.h \ - ui/tools/pen-tool.cpp ui/tools/pen-tool.h \ - ui/tools/pencil-tool.cpp ui/tools/pencil-tool.h \ - ui/tools/rect-tool.cpp ui/tools/rect-tool.h \ - ui/tools/select-tool.cpp ui/tools/select-tool.h \ - ui/tools/spiral-tool.cpp ui/tools/spiral-tool.h \ - ui/tools/spray-tool.cpp ui/tools/spray-tool.h \ - ui/tools/star-tool.cpp ui/tools/star-tool.h \ - ui/tools/text-tool.cpp ui/tools/text-tool.h \ - ui/tools/tool-base.cpp ui/tools/tool-base.h \ - ui/tools/tweak-tool.cpp ui/tools/tweak-tool.h \ - ui/tools/zoom-tool.cpp ui/tools/zoom-tool.h - -if HAVE_POTRACE - -ink_common_sources += \ - ui/tools/flood-tool.cpp ui/tools/flood-tool.h - -endif diff --git a/src/ui/view/Makefile_insert b/src/ui/view/Makefile_insert deleted file mode 100644 index b3ab598d4..000000000 --- a/src/ui/view/Makefile_insert +++ /dev/null @@ -1,9 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - ui/view/edit-widget-interface.h \ - ui/view/view.h \ - ui/view/view.cpp \ - ui/view/view-widget.cpp \ - ui/view/view-widget.h - diff --git a/src/ui/widget/Makefile_insert b/src/ui/widget/Makefile_insert deleted file mode 100644 index b22e4bd74..000000000 --- a/src/ui/widget/Makefile_insert +++ /dev/null @@ -1,106 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - ui/widget/anchor-selector.h \ - ui/widget/anchor-selector.cpp \ - ui/widget/attr-widget.h \ - ui/widget/button.h \ - ui/widget/button.cpp \ - ui/widget/color-entry.cpp \ - ui/widget/color-entry.h \ - ui/widget/color-icc-selector.cpp \ - ui/widget/color-icc-selector.h \ - ui/widget/color-notebook.cpp \ - ui/widget/color-notebook.h \ - ui/widget/color-wheel-selector.cpp \ - ui/widget/color-wheel-selector.h \ - ui/widget/color-picker.cpp \ - ui/widget/color-picker.h \ - ui/widget/color-preview.cpp \ - ui/widget/color-preview.h \ - ui/widget/color-slider.cpp \ - ui/widget/color-slider.h \ - ui/widget/color-scales.cpp \ - ui/widget/color-scales.h \ - ui/widget/combo-enums.h \ - ui/widget/dock.h \ - ui/widget/dock.cpp \ - ui/widget/dock-item.h \ - ui/widget/dock-item.cpp \ - ui/widget/entity-entry.cpp \ - ui/widget/entity-entry.h \ - ui/widget/entry.cpp \ - ui/widget/entry.h \ - ui/widget/filter-effect-chooser.h \ - ui/widget/filter-effect-chooser.cpp \ - ui/widget/font-variants.h \ - ui/widget/font-variants.cpp \ - ui/widget/frame.cpp \ - ui/widget/frame.h \ - ui/widget/imageicon.cpp \ - ui/widget/imageicon.h \ - ui/widget/imagetoggler.cpp \ - ui/widget/imagetoggler.h \ - ui/widget/labelled.cpp \ - ui/widget/labelled.h \ - ui/widget/layer-selector.cpp \ - ui/widget/layer-selector.h \ - ui/widget/licensor.cpp \ - ui/widget/licensor.h \ - ui/widget/notebook-page.cpp \ - ui/widget/notebook-page.h \ - ui/widget/object-composite-settings.cpp \ - ui/widget/object-composite-settings.h \ - ui/widget/page-sizer.cpp \ - ui/widget/page-sizer.h \ - ui/widget/panel.cpp \ - ui/widget/panel.h \ - ui/widget/point.cpp \ - ui/widget/point.h \ - ui/widget/preferences-widget.cpp \ - ui/widget/preferences-widget.h \ - ui/widget/random.cpp \ - ui/widget/random.h \ - ui/widget/registered-widget.cpp \ - ui/widget/registered-widget.h \ - ui/widget/registered-enums.h \ - ui/widget/registry.cpp \ - ui/widget/registry.h \ - ui/widget/rendering-options.cpp \ - ui/widget/rendering-options.h \ - ui/widget/rotateable.h \ - ui/widget/rotateable.cpp \ - ui/widget/scalar-unit.cpp \ - ui/widget/scalar-unit.h \ - ui/widget/scalar.cpp \ - ui/widget/scalar.h \ - ui/widget/selected-style.h \ - ui/widget/selected-style.cpp \ - ui/widget/spinbutton.h \ - ui/widget/spinbutton.cpp \ - ui/widget/spin-scale.h \ - ui/widget/spin-scale.cpp \ - ui/widget/spin-slider.h \ - ui/widget/spin-slider.cpp \ - ui/widget/style-subject.h \ - ui/widget/style-subject.cpp \ - ui/widget/style-swatch.h \ - ui/widget/style-swatch.cpp \ - ui/widget/text.cpp \ - ui/widget/text.h \ - ui/widget/tolerance-slider.cpp \ - ui/widget/tolerance-slider.h \ - ui/widget/unit-menu.cpp \ - ui/widget/unit-menu.h \ - ui/widget/unit-tracker.h \ - ui/widget/unit-tracker.cpp \ - ui/widget/clipmaskicon.cpp \ - ui/widget/clipmaskicon.h \ - ui/widget/highlight-picker.cpp \ - ui/widget/highlight-picker.h \ - ui/widget/layertypeicon.cpp \ - ui/widget/layertypeicon.h \ - ui/widget/insertordericon.cpp \ - ui/widget/insertordericon.h \ - ui/widget/addtoicon.cpp \ - ui/widget/addtoicon.h diff --git a/src/util/Makefile_insert b/src/util/Makefile_insert deleted file mode 100644 index 2a778e660..000000000 --- a/src/util/Makefile_insert +++ /dev/null @@ -1,49 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -util/all: util/libutil.a - -util/clean: - rm -f util/libutil.a $(util_libutil_a_OBJECTS) - -util_libutil_a_SOURCES = \ - util/ziptool.h \ - util/ziptool.cpp \ - util/accumulators.h \ - util/compose.hpp \ - util/copy.h \ - util/enums.h \ - util/ege-appear-time-tracker.cpp \ - util/ege-appear-time-tracker.h \ - util/ege-tags.h \ - util/ege-tags.cpp \ - util/expression-evaluator.h \ - util/expression-evaluator.cpp \ - util/filter-list.h \ - util/find-if-before.h \ - util/find-last-if.h \ - util/fixed_point.h \ - util/format.h \ - util/forward-pointer-iterator.h \ - util/function.h \ - util/list.h \ - util/list-container.h \ - util/list-copy.h \ - util/longest-common-suffix.h \ - util/map-list.h \ - util/reference.h \ - util/reverse-list.h \ - util/share.h \ - util/share.cpp \ - util/signal-blocker.h \ - util/tuple.h \ - util/ucompose.hpp \ - util/units.cpp \ - util/units.h \ - util/unordered-containers.h - -# ###################### -# ### CxxTest stuff #### -# ###################### - -CXXTEST_TESTSUITES += \ - $(srcdir)/util/list-container-test.h diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert deleted file mode 100644 index 99a85c5b6..000000000 --- a/src/widgets/Makefile_insert +++ /dev/null @@ -1,129 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - widgets/arc-toolbar.cpp \ - widgets/arc-toolbar.h \ - widgets/box3d-toolbar.cpp \ - widgets/box3d-toolbar.h \ - widgets/button.cpp \ - widgets/button.h \ - widgets/calligraphy-toolbar.cpp \ - widgets/calligraphy-toolbar.h \ - widgets/connector-toolbar.cpp \ - widgets/connector-toolbar.h \ - widgets/dash-selector.cpp \ - widgets/dash-selector.h \ - widgets/desktop-widget.cpp \ - widgets/desktop-widget.h \ - widgets/dropper-toolbar.cpp \ - widgets/dropper-toolbar.h \ - widgets/eek-preview.cpp \ - widgets/eek-preview.h \ - widgets/ege-adjustment-action.cpp \ - widgets/ege-adjustment-action.h \ - widgets/ege-paint-def.cpp \ - widgets/ege-paint-def.h \ - widgets/ege-output-action.cpp \ - widgets/ege-output-action.h \ - widgets/ege-select-one-action.cpp \ - widgets/ege-select-one-action.h \ - widgets/eraser-toolbar.cpp \ - widgets/eraser-toolbar.h \ - widgets/fill-style.cpp \ - widgets/fill-style.h \ - widgets/fill-n-stroke-factory.h \ - widgets/font-selector.cpp \ - widgets/font-selector.h \ - widgets/gradient-image.cpp \ - widgets/gradient-image.h \ - widgets/gradient-selector.cpp \ - widgets/gradient-selector.h \ - widgets/gradient-toolbar.cpp \ - widgets/gradient-toolbar.h \ - widgets/gradient-vector.cpp \ - widgets/gradient-vector.h \ - widgets/icon.cpp \ - widgets/icon.h \ - widgets/image-menu-item.c \ - widgets/image-menu-item.h \ - widgets/ink-action.cpp \ - widgets/ink-action.h \ - widgets/ink-comboboxentry-action.cpp \ - widgets/ink-comboboxentry-action.h \ - widgets/ink-radio-action.cpp \ - widgets/ink-radio-action.h \ - widgets/ink-toggle-action.cpp \ - widgets/ink-toggle-action.h \ - widgets/ink-tool-menu-action.cpp \ - widgets/ink-tool-menu-action.h \ - widgets/lpe-toolbar.cpp \ - widgets/lpe-toolbar.h \ - widgets/measure-toolbar.cpp \ - widgets/measure-toolbar.h \ - widgets/mesh-toolbar.cpp \ - widgets/mesh-toolbar.h \ - widgets/node-toolbar.cpp \ - widgets/node-toolbar.h \ - widgets/paint-selector.cpp \ - widgets/paint-selector.h \ - widgets/pencil-toolbar.cpp \ - widgets/pencil-toolbar.h \ - widgets/rect-toolbar.cpp \ - widgets/rect-toolbar.h \ - widgets/gimp/gimpspinscale.c \ - widgets/gimp/gimpspinscale.h \ - widgets/gimp/gimpcolorwheel.c \ - widgets/gimp/gimpcolorwheel.h \ - widgets/gimp/ruler.cpp \ - widgets/gimp/ruler.h \ - widgets/select-toolbar.cpp \ - widgets/select-toolbar.h \ - widgets/spray-toolbar.cpp \ - widgets/spray-toolbar.h \ - widgets/spiral-toolbar.cpp \ - widgets/spiral-toolbar.h \ - widgets/sp-attribute-widget.cpp \ - widgets/sp-attribute-widget.h \ - widgets/sp-color-selector.cpp \ - widgets/sp-color-selector.h \ - widgets/spinbutton-events.cpp \ - widgets/spinbutton-events.h \ - widgets/sp-widget.cpp \ - widgets/sp-widget.h \ - widgets/spw-utilities.cpp \ - widgets/spw-utilities.h \ - widgets/sp-xmlview-attr-list.cpp \ - widgets/sp-xmlview-attr-list.h \ - widgets/sp-xmlview-content.cpp \ - widgets/sp-xmlview-content.h \ - widgets/sp-xmlview-tree.cpp \ - widgets/sp-xmlview-tree.h \ - widgets/star-toolbar.cpp \ - widgets/star-toolbar.h \ - widgets/stroke-marker-selector.cpp \ - widgets/stroke-marker-selector.h \ - widgets/stroke-style.cpp \ - widgets/stroke-style.h \ - widgets/swatch-selector.cpp \ - widgets/swatch-selector.h \ - widgets/text-toolbar.cpp \ - widgets/text-toolbar.h \ - widgets/toolbox.cpp \ - widgets/toolbox.h \ - widgets/tweak-toolbar.cpp \ - widgets/tweak-toolbar.h \ - widgets/widget-sizes.h \ - widgets/zoom-toolbar.cpp \ - widgets/zoom-toolbar.h \ - widgets/widget-sizes.h - -if HAVE_POTRACE - -ink_common_sources += \ - widgets/paintbucket-toolbar.cpp \ - widgets/paintbucket-toolbar.h - -endif - -widgets/button.$(OBJEXT): helper/sp-marshal.h -widgets/menu.$(OBJEXT): helper/sp-marshal.h diff --git a/src/xml/Makefile_insert b/src/xml/Makefile_insert deleted file mode 100644 index da55d7f7e..000000000 --- a/src/xml/Makefile_insert +++ /dev/null @@ -1,51 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -ink_common_sources += \ - xml/comment-node.h \ - xml/composite-node-observer.cpp xml/composite-node-observer.h \ - xml/element-node.h \ - xml/helper-observer.cpp \ - xml/helper-observer.h \ - xml/node-observer.h \ - xml/quote.cpp \ - xml/quote.h \ - xml/repr-css.cpp \ - xml/log-builder.cpp \ - xml/log-builder.h \ - xml/node-fns.cpp \ - xml/node-fns.h \ - xml/pi-node.h \ - xml/rebase-hrefs.cpp \ - xml/rebase-hrefs.h \ - xml/repr-io.cpp \ - xml/repr-sorting.cpp \ - xml/repr-sorting.h \ - xml/repr-util.cpp \ - xml/repr.cpp \ - xml/repr.h \ - xml/simple-document.h \ - xml/simple-document.cpp \ - xml/simple-node.h \ - xml/simple-node.cpp \ - xml/node.h \ - xml/croco-node-iface.cpp \ - xml/croco-node-iface.h \ - xml/attribute-record.h \ - xml/sp-css-attr.h \ - xml/event.cpp xml/event.h xml/event-fns.h \ - xml/document.h \ - xml/node-event-vector.h \ - xml/node-iterators.h \ - xml/sp-css-attr.h \ - xml/subtree.cpp \ - xml/subtree.h \ - xml/text-node.h \ - xml/invalid-operation-exception.h - -# ###################### -# ### CxxTest stuff #### -# ###################### -CXXTEST_TESTSUITES += \ - $(srcdir)/xml/rebase-hrefs-test.h \ - $(srcdir)/xml/repr-action-test.h \ - $(srcdir)/xml/quote-test.h -- cgit v1.2.3 From d975ffe7b06db18ba418207270f58ec79eb07ae1 Mon Sep 17 00:00:00 2001 From: Alex Henrie Date: Mon, 8 Aug 2016 17:57:01 -0600 Subject: Use Gdk::Seat instead of Gdk::DeviceManager (bzr r15046.1.1) --- src/desktop-events.cpp | 12 +++++++++++- src/device-manager.cpp | 20 +++++++++++++++++--- src/ui/dialog/filter-effects-dialog.cpp | 12 +++++++++++- 3 files changed, 39 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp index 1932a9864..5fef8cbfc 100644 --- a/src/desktop-events.cpp +++ b/src/desktop-events.cpp @@ -21,7 +21,12 @@ #include "ui/dialog/guides.h" #include "desktop-events.h" -#include +#include +#if GTK_CHECK_VERSION(3, 20, 0) +# include +#else +# include +#endif #include <2geom/line.h> #include <2geom/angle.h> @@ -596,8 +601,13 @@ static void init_extended() Glib::ustring avoidName("pad"); auto display = Gdk::Display::get_default(); +#if GTK_CHECK_VERSION(3, 20, 0) + auto seat = display->get_default_seat(); + auto const devices = seat->get_slaves(Gdk::SEAT_CAPABILITY_ALL); +#else auto dm = display->get_device_manager(); auto const devices = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); +#endif if ( !devices.empty() ) { for (auto const dev : devices) { diff --git a/src/device-manager.cpp b/src/device-manager.cpp index 68444fe66..6c8d4514c 100644 --- a/src/device-manager.cpp +++ b/src/device-manager.cpp @@ -15,13 +15,17 @@ #include -#include +#include + #include +#if GTK_CHECK_VERSION(3, 20, 0) +# include +#else +# include +#endif #include -#include - #define noDEBUG_VERBOSE 1 @@ -317,8 +321,13 @@ DeviceManagerImpl::DeviceManagerImpl() : { Glib::RefPtr display = Gdk::Display::get_default(); +#if GTK_CHECK_VERSION(3, 20, 0) + auto seat = display->get_default_seat(); + auto devList = seat->get_slaves(Gdk::SEAT_CAPABILITY_ALL); +#else auto dm = display->get_device_manager(); auto devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); +#endif if (fakeList.empty()) { createFakeList(); @@ -649,8 +658,13 @@ static void createFakeList() { // try to find the first *real* core pointer Glib::RefPtr display = Gdk::Display::get_default(); +#if GTK_CHECK_VERSION(3, 20, 0) + auto seat = display->get_default_seat(); + auto devList = seat->get_slaves(Gdk::SEAT_CAPABILITY_ALL); +#else auto dm = display->get_device_manager(); auto devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); +#endif // Set iterator to point at beginning of device list std::vector< Glib::RefPtr >::iterator dev = devList.begin(); diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index 97fa47f2f..676dcf31f 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -22,7 +22,12 @@ #include "dialog-manager.h" #include -#include +#include +#if GTK_CHECK_VERSION(3, 20, 0) +# include +#else +# include +#endif #include "ui/widget/spinbutton.h" @@ -1970,8 +1975,13 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrget_display(); +#if GTK_CHECK_VERSION(3, 20, 0) + auto seat = display->get_default_seat(); + auto device = seat->get_pointer(); +#else auto dm = display->get_device_manager(); auto device = dm->get_client_pointer(); +#endif get_bin_window()->get_device_position(device, mx, my, mask); // Outline the bottom of the connection area -- cgit v1.2.3 From 5198e76ee434bd68985181d26900d71c1675cc63 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Tue, 9 Aug 2016 12:32:55 +0100 Subject: Move some main functions to Application class (bzr r15048) --- src/inkscape.cpp | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/inkscape.h | 3 ++ src/main.cpp | 104 +++++------------------------------------------------- 3 files changed, 116 insertions(+), 96 deletions(-) (limited to 'src') diff --git a/src/inkscape.cpp b/src/inkscape.cpp index a88ef5947..48b921752 100644 --- a/src/inkscape.cpp +++ b/src/inkscape.cpp @@ -22,6 +22,10 @@ #include +#include + +#include +#include #include #include "debug/simple-event.h" #include "debug/event-tracker.h" @@ -57,6 +61,7 @@ #include "inkscape.h" #include "io/sys.h" #include "message-stack.h" +#include "path-prefix.h" #include "resource-manager.h" #include "ui/tools/tool-base.h" #include "ui/dialog/debug.h" @@ -379,6 +384,103 @@ void Application::argv0(char const* argv) _argv0 = g_strdup(argv); } +/** + * \brief Add our icon theme to the search path + */ +void +Application::add_icon_theme() +{ + // Get list of the possible folders containing the theme + auto dataDirs = Glib::get_system_data_dirs(); + dataDirs.insert(dataDirs.begin(), Glib::get_user_data_dir()); + + auto icon_theme = Gtk::IconTheme::get_default(); + + for (auto it : dataDirs) + { + std::vector listing; + listing.push_back(it); + listing.push_back("inkscape"); + listing.push_back("icons"); + auto dir = Glib::build_filename(listing); + icon_theme->append_search_path(dir); + } + + // Add our icon directory to the search path for icon theme lookups. + auto const usericondir = Inkscape::Application::profile_path("icons"); + icon_theme->append_search_path(usericondir); + icon_theme->append_search_path(INKSCAPE_PIXMAPDIR); +#ifdef INKSCAPE_THEMEDIR + icon_theme->append_search_path(INKSCAPE_THEMEDIR); + icon_theme->rescan_if_needed(); +#endif + g_free(usericondir); +} + +/** + * \brief Add our CSS style sheets + */ +void +Application::add_style_sheet() +{ + // Add style sheet (GTK3) + auto const screen = Gdk::Screen::get_default(); + + Glib::ustring inkscape_style = INKSCAPE_UIDIR; + inkscape_style += "/style.css"; + // std::cout << "CSS Stylesheet Inkscape: " << inkscape_style << std::endl; + + if (Glib::file_test(inkscape_style, Glib::FILE_TEST_EXISTS)) { + auto provider = Gtk::CssProvider::create(); + + // From 3.16, throws an error which we must catch. + try { + provider->load_from_path (inkscape_style); + } +#if GTK_CHECK_VERSION(3,16,0) + // Gtk::CssProviderError not defined until 3.16. + catch (const Gtk::CssProviderError& ex) + { + std::cerr << "CSSProviderError::load_from_path(): failed to load: " << inkscape_style + << "\n (" << ex.what() << ")" << std::endl; + } +#else + catch (...) + {} +#endif + + Gtk::StyleContext::add_provider_for_screen (screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } else { + std::cerr << "sp_main_gui: Cannot find default style file:\n (" << inkscape_style + << ")" << std::endl; + } + + Glib::ustring user_style = Inkscape::Application::profile_path("ui/style.css"); + // std::cout << "CSS Stylesheet User: " << user_style << std::endl; + + if (Glib::file_test(user_style, Glib::FILE_TEST_EXISTS)) { + auto provider2 = Gtk::CssProvider::create(); + + // From 3.16, throws an error which we must catch. + try { + provider2->load_from_path (user_style); + } +#if GTK_CHECK_VERSION(3,16,0) + // Gtk::CssProviderError not defined until 3.16. + catch (const Gtk::CssProviderError& ex) + { + std::cerr << "CSSProviderError::load_from_path(): failed to load: " << user_style + << "\n (" << ex.what() << ")" << std::endl; + } +#else + catch (...) + {} +#endif + + Gtk::StyleContext::add_provider_for_screen (screen, provider2, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } + +} /* \brief Constructor for the application. * Creates a new Inkscape::Application. * @@ -423,9 +525,12 @@ Application::Application(const char* argv, bool use_gui) : } if (use_gui) { + add_icon_theme(); + add_style_sheet(); load_menus(); Inkscape::DeviceManager::getManager().loadConfig(); } + Inkscape::ResourceManager::getManager(); /* set language for user interface according setting in preferences */ diff --git a/src/inkscape.h b/src/inkscape.h index fe424377c..3f4416f2f 100644 --- a/src/inkscape.h +++ b/src/inkscape.h @@ -205,6 +205,9 @@ private: Application& operator=(Application const&); // no assign Application* operator&() const; // no pointer access + void add_icon_theme(); + void add_style_sheet(); + Inkscape::XML::Document * _menus; std::map _document_set; std::map _selection_models; diff --git a/src/main.cpp b/src/main.cpp index 28bdf8359..28ae6992f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -46,7 +46,6 @@ #include -#include #include #include "inkgc/gc-core.h" @@ -101,9 +100,12 @@ #endif // WITH_DBUS #include +#include +#include #include #include #include +#include #ifndef HAVE_BIND_TEXTDOMAIN_CODESET #define bind_textdomain_codeset(p,c) @@ -851,8 +853,8 @@ static int sp_common_main( int argc, char const **argv, GSList **flDest ) // temporarily switch gettext encoding to locale, so that help messages can be output properly - gchar const *charset; - g_get_charset(&charset); + std::string charset; + Glib::get_charset(charset); bind_textdomain_codeset(GETTEXT_PACKAGE, charset); @@ -998,16 +1000,6 @@ snooper(GdkEvent *event, gpointer /*data*/) { gtk_main_do_event (event); } -static std::vector getDirectorySet(const gchar* userDir, const gchar* const * systemDirs) { - std::vector listing; - listing.push_back(userDir); - for ( const char* const* cur = systemDirs; *cur; cur++ ) - { - listing.push_back(*cur); - } - return listing; -} - int sp_main_gui(int argc, char const **argv) { @@ -1017,103 +1009,23 @@ sp_main_gui(int argc, char const **argv) int retVal = sp_common_main( argc, argv, &fl ); g_return_val_if_fail(retVal == 0, 1); - // Add possible icon entry directories - std::vector dataDirs = getDirectorySet( g_get_user_data_dir(), - g_get_system_data_dirs() ); - for (std::vector::iterator it = dataDirs.begin(); it != dataDirs.end(); ++it) - { - std::vector listing; - listing.push_back(*it); - listing.push_back("inkscape"); - listing.push_back("icons"); - Glib::ustring dir = Glib::build_filename(listing); - gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), dir.c_str()); - } - - // Add our icon directory to the search path for icon theme lookups. - gchar *usericondir = Inkscape::Application::profile_path("icons"); - gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), usericondir); - gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), INKSCAPE_PIXMAPDIR); -#ifdef INKSCAPE_THEMEDIR - gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), INKSCAPE_THEMEDIR); - gtk_icon_theme_rescan_if_needed (gtk_icon_theme_get_default()); -#endif - g_free(usericondir); - - // Add style sheet (GTK3) - Glib::RefPtr screen = Gdk::Screen::get_default(); - - Glib::ustring inkscape_style = INKSCAPE_UIDIR; - inkscape_style += "/style.css"; - // std::cout << "CSS Stylesheet Inkscape: " << inkscape_style << std::endl; - - if (g_file_test (inkscape_style.c_str(), G_FILE_TEST_EXISTS)) { - Glib::RefPtr provider = Gtk::CssProvider::create(); - - // From 3.16, throws an error which we must catch. - try { - provider->load_from_path (inkscape_style); - } -#if GTK_CHECK_VERSION(3,16,0) - // Gtk::CssProviderError not defined until 3.16. - catch (const Gtk::CssProviderError& ex) - { - std::cerr << "CSSProviderError::load_from_path(): failed to load: " << inkscape_style - << "\n (" << ex.what() << ")" << std::endl; - } -#else - catch (...) - {} -#endif - - Gtk::StyleContext::add_provider_for_screen (screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - } else { - std::cerr << "sp_main_gui: Cannot find default style file:\n (" << inkscape_style - << ")" << std::endl; - } - - Glib::ustring user_style = Inkscape::Application::profile_path("ui/style.css"); - // std::cout << "CSS Stylesheet User: " << user_style << std::endl; - - if (g_file_test (user_style.c_str(), G_FILE_TEST_EXISTS)) { - Glib::RefPtr provider2 = Gtk::CssProvider::create(); - - // From 3.16, throws an error which we must catch. - try { - provider2->load_from_path (user_style); - } -#if GTK_CHECK_VERSION(3,16,0) - // Gtk::CssProviderError not defined until 3.16. - catch (const Gtk::CssProviderError& ex) - { - std::cerr << "CSSProviderError::load_from_path(): failed to load: " << user_style - << "\n (" << ex.what() << ")" << std::endl; - } -#else - catch (...) - {} -#endif - - Gtk::StyleContext::add_provider_for_screen (screen, provider2, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - } - gdk_event_handler_set((GdkEventFunc)snooper, NULL, NULL); Inkscape::Debug::log_display_config(); // Set default window icon. Obeys the theme. - gtk_window_set_default_icon_name("inkscape"); + Gtk::Window::set_default_icon_name("inkscape"); // Do things that were previously in inkscape_gtk_stock_init(). sp_icon_get_phys_size(GTK_ICON_SIZE_MENU); Inkscape::UI::Widget::Panel::prep(); - gboolean create_new = TRUE; + bool create_new = true; /// \todo FIXME BROKEN - non-UTF-8 sneaks in here. Inkscape::Application::create(argv[0], true); while (fl) { if (sp_file_open((gchar *)fl->data,NULL)) { - create_new=FALSE; + create_new=false; } fl = g_slist_remove(fl, fl->data); } -- cgit v1.2.3 From 860883afa75a3a2f60ed5ffc299447409138736f Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 10 Aug 2016 11:39:55 +0100 Subject: CloneTiler: C++ify (bzr r15050) --- src/ui/dialog/clonetiler.cpp | 116 ++++++++++++++++--------------------------- src/ui/dialog/clonetiler.h | 18 ++++--- 2 files changed, 56 insertions(+), 78 deletions(-) (limited to 'src') diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index 1fa7a6c71..eb55e06c6 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -66,7 +66,6 @@ static SPDocument *trace_doc = NULL; CloneTiler::CloneTiler () : UI::Widget::Panel ("", "/dialogs/clonetiler/", SP_VERB_DIALOG_CLONETILER), - dlg(NULL), desktop(NULL), deskTrack(), table_row_labels(NULL) @@ -75,9 +74,7 @@ CloneTiler::CloneTiler () : contents->set_spacing(0); { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - - dlg = GTK_WIDGET(gobj()); + auto prefs = Inkscape::Preferences::get(); auto mainbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(mainbox), FALSE); @@ -769,15 +766,14 @@ CloneTiler::CloneTiler () : gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(clonetiler_do_pick_toggled), (gpointer)dlg); + G_CALLBACK(clonetiler_do_pick_toggled), (gpointer)this); } { auto vvb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_set_homogeneous(GTK_BOX(vvb), FALSE); gtk_box_pack_start (GTK_BOX (vb), vvb, FALSE, FALSE, 0); - g_object_set_data (G_OBJECT(dlg), "dotrace", (gpointer) vvb); - + _dotrace = vvb; { GtkWidget *frame = gtk_frame_new (_("1. Pick from the drawing:")); @@ -973,7 +969,7 @@ CloneTiler::CloneTiler () : { auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); - g_object_set_data (G_OBJECT(dlg), "rowscols", (gpointer) hb); + _rowscols = hb; { auto a = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0); @@ -1018,7 +1014,7 @@ CloneTiler::CloneTiler () : { auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); - g_object_set_data (G_OBJECT(dlg), "widthheight", (gpointer) hb); + _widthheight = hb; // unitmenu unit_menu = new Inkscape::UI::Widget::UnitMenu(); @@ -1081,7 +1077,7 @@ CloneTiler::CloneTiler () : radio = gtk_radio_button_new_with_label (NULL, _("Rows, columns: ")); gtk_widget_set_tooltip_text (radio, _("Create the specified number of rows and columns")); clonetiler_table_attach (table, radio, 0.0, 1, 1); - g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_create), (gpointer) dlg); + g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_create), (gpointer) this); } if (!prefs->getBool(prefs_path + "fillrect")) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); @@ -1091,7 +1087,7 @@ CloneTiler::CloneTiler () : radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("Width, height: ")); gtk_widget_set_tooltip_text (radio, _("Fill the specified width and height with the tiling")); clonetiler_table_attach (table, radio, 0.0, 2, 1); - g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_fill), (gpointer) dlg); + g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_fill), (gpointer) this); } if (prefs->getBool(prefs_path + "fillrect")) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); @@ -1122,7 +1118,7 @@ CloneTiler::CloneTiler () : gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); gtk_box_pack_end (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); GtkWidget *l = gtk_label_new(""); - g_object_set_data (G_OBJECT(dlg), "status", (gpointer) l); + _status = l; gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0); } @@ -1133,20 +1129,20 @@ CloneTiler::CloneTiler () : gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); { - GtkWidget *b = gtk_button_new (); - GtkWidget *l = gtk_label_new (""); - gtk_label_set_markup_with_mnemonic (GTK_LABEL(l), _(" _Create ")); - gtk_container_add (GTK_CONTAINER(b), l); - gtk_widget_set_tooltip_text (b, _("Create and tile the clones of the selection")); - g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_apply), dlg); - gtk_box_pack_end (GTK_BOX (hb), b, FALSE, FALSE, 0); + auto b = Gtk::manage(new Gtk::Button()); + auto l = Gtk::manage(new Gtk::Label("")); + l->set_markup_with_mnemonic(_(" _Create ")); + b->add(*l); + b->set_tooltip_text(_("Create and tile the clones of the selection")); + b->signal_clicked().connect(sigc::mem_fun(*this, &CloneTiler::apply)); + gtk_box_pack_end (GTK_BOX (hb), GTK_WIDGET(b->gobj()), FALSE, FALSE, 0); } { // buttons which are enabled only when there are tiled clones auto sb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(sb), FALSE); gtk_box_pack_end (GTK_BOX (hb), sb, FALSE, FALSE, 0); - g_object_set_data (G_OBJECT(dlg), "buttons_on_tiles", (gpointer) sb); + _buttons_on_tiles = sb; { // TRANSLATORS: if a group of objects are "clumped" together, then they // are unevenly spread in the given amount of space - as shown in the @@ -1160,28 +1156,26 @@ CloneTiler::CloneTiler () : } { - GtkWidget *b = gtk_button_new_with_mnemonic (_(" Re_move ")); - gtk_widget_set_tooltip_text (b, _("Remove existing tiled clones of the selected object (siblings only)")); - g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_remove), gpointer(dlg)); - gtk_box_pack_end (GTK_BOX (sb), b, FALSE, FALSE, 0); + auto b = Gtk::manage(new Gtk::Button(_(" Re_move "), true)); + b->set_tooltip_text(_("Remove existing tiled clones of the selected object (siblings only)")); + b->signal_clicked().connect(sigc::mem_fun(*this, &CloneTiler::on_remove_button_clicked)); + gtk_box_pack_end (GTK_BOX (sb), GTK_WIDGET(b->gobj()), FALSE, FALSE, 0); } // connect to global selection changed signal (so we can change desktops) and // external_change (so we're not fooled by undo) - selectChangedConn = INKSCAPE.signal_selection_changed.connect(sigc::bind(sigc::ptr_fun(&CloneTiler::clonetiler_change_selection), dlg)); - externChangedConn = INKSCAPE.signal_external_change.connect (sigc::bind(sigc::ptr_fun(&CloneTiler::clonetiler_external_change), dlg)); - - g_signal_connect(G_OBJECT(dlg), "destroy", G_CALLBACK(clonetiler_disconnect_gsignal), this); + selectChangedConn = INKSCAPE.signal_selection_changed.connect(sigc::mem_fun(*this, &CloneTiler::change_selection)); + externChangedConn = INKSCAPE.signal_external_change.connect(sigc::mem_fun(*this, &CloneTiler::external_change)); // update now - clonetiler_change_selection (SP_ACTIVE_DESKTOP->getSelection(), dlg); + change_selection(SP_ACTIVE_DESKTOP->getSelection()); } { GtkWidget *b = gtk_button_new_with_mnemonic (_(" R_eset ")); // TRANSLATORS: "change" is a noun here gtk_widget_set_tooltip_text (b, _("Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero")); - g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_reset), dlg); + g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_reset), this); gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0); } } @@ -1199,8 +1193,9 @@ CloneTiler::CloneTiler () : CloneTiler::~CloneTiler (void) { //subselChangedConn.disconnect(); - //selectChangedConn.disconnect(); //selectModifiedConn.disconnect(); + selectChangedConn.disconnect(); + externChangedConn.disconnect(); desktopChangeConn.disconnect(); deskTrack.disconnect(); color_changed_connection.disconnect(); @@ -1215,17 +1210,7 @@ void CloneTiler::setDesktop(SPDesktop *desktop) void CloneTiler::setTargetDesktop(SPDesktop *desktop) { if (this->desktop != desktop) { - if (this->desktop) { - //selectModifiedConn.disconnect(); - //subselChangedConn.disconnect(); - //selectChangedConn.disconnect(); - } this->desktop = desktop; - if (desktop && desktop->selection) { - //selectChangedConn = desktop->selection->connectChanged(sigc::hide(sigc::mem_fun(*this, &CloneTiler::clonetiler_change_selection))); - //subselChangedConn = desktop->connectToolSubselectionChanged(sigc::hide(sigc::mem_fun(*this, &CloneTiler::clonetiler_change_selection))); - //selectModifiedConn = desktop->selection->connectModified(sigc::hide<0>(sigc::mem_fun(*this, &CloneTiler::clonetiler_change_selection))); - } } } @@ -1245,47 +1230,35 @@ void CloneTiler::on_picker_color_changed(guint rgba) is_updating = false; } -void CloneTiler::clonetiler_change_selection(Inkscape::Selection *selection, GtkWidget *dlg) +void CloneTiler::change_selection(Inkscape::Selection *selection) { - GtkWidget *buttons = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "buttons_on_tiles")); - GtkWidget *status = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "status")); - if (selection->isEmpty()) { - gtk_widget_set_sensitive (buttons, FALSE); - gtk_label_set_markup (GTK_LABEL(status), _("Nothing selected.")); + gtk_widget_set_sensitive (_buttons_on_tiles, FALSE); + gtk_label_set_markup (GTK_LABEL(_status), _("Nothing selected.")); return; } if (boost::distance(selection->items()) > 1) { - gtk_widget_set_sensitive (buttons, FALSE); - gtk_label_set_markup (GTK_LABEL(status), _("More than one object selected.")); + gtk_widget_set_sensitive (_buttons_on_tiles, FALSE); + gtk_label_set_markup (GTK_LABEL(_status), _("More than one object selected.")); return; } guint n = clonetiler_number_of_clones(selection->singleItem()); if (n > 0) { - gtk_widget_set_sensitive (buttons, TRUE); + gtk_widget_set_sensitive (_buttons_on_tiles, TRUE); gchar *sta = g_strdup_printf (_("Object has %d tiled clones."), n); - gtk_label_set_markup (GTK_LABEL(status), sta); + gtk_label_set_markup (GTK_LABEL(_status), sta); g_free (sta); } else { - gtk_widget_set_sensitive (buttons, FALSE); - gtk_label_set_markup (GTK_LABEL(status), _("Object has no tiled clones.")); + gtk_widget_set_sensitive (_buttons_on_tiles, FALSE); + gtk_label_set_markup (GTK_LABEL(_status), _("Object has no tiled clones.")); } } -void CloneTiler::clonetiler_external_change(GtkWidget *dlg) -{ - clonetiler_change_selection (SP_ACTIVE_DESKTOP->getSelection(), dlg); -} - -void CloneTiler::clonetiler_disconnect_gsignal(GObject *, gpointer source) +void CloneTiler::external_change() { - g_return_if_fail(source != NULL); - - CloneTiler* dlg = reinterpret_cast(source); - dlg->selectChangedConn.disconnect(); - dlg->externChangedConn.disconnect(); + change_selection(SP_ACTIVE_DESKTOP->getSelection()); } Geom::Affine CloneTiler::clonetiler_get_transform( @@ -2032,7 +2005,7 @@ guint CloneTiler::clonetiler_number_of_clones(SPObject *obj) return n; } -void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool do_undo/* = true*/) +void CloneTiler::remove(bool do_undo/* = true*/) { SPDesktop *desktop = SP_ACTIVE_DESKTOP; if (desktop == NULL) { @@ -2064,7 +2037,7 @@ void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool d } g_slist_free (to_delete); - clonetiler_change_selection (selection, dlg); + change_selection (selection); if (do_undo) { DocumentUndo::done(desktop->getDocument(), SP_VERB_DIALOG_CLONETILER, @@ -2104,7 +2077,7 @@ double CloneTiler::randomize01(double val, double rand) } -void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg) +void CloneTiler::apply() { SPDesktop *desktop = SP_ACTIVE_DESKTOP; if (desktop == NULL) { @@ -2129,9 +2102,8 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg) desktop->setWaitingCursor(); // set statusbar text - GtkWidget *status = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "status")); - gtk_label_set_markup (GTK_LABEL(status), _("Creating tiled clones...")); - gtk_widget_queue_draw(GTK_WIDGET(status)); + gtk_label_set_markup (GTK_LABEL(_status), _("Creating tiled clones...")); + gtk_widget_queue_draw(GTK_WIDGET(_status)); gdk_window_process_all_updates(); SPObject *obj = selection->singleItem(); @@ -2144,7 +2116,7 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg) const char *id_href = g_strdup_printf("#%s", obj_repr->attribute("id")); SPObject *parent = obj->parent; - clonetiler_remove (NULL, dlg, false); + remove(false); Geom::Scale scale = desktop->getDocument()->getDocumentScale().inverse(); double scale_units = scale[Geom::X]; // Use just x direction.... @@ -2542,7 +2514,7 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg) clonetiler_trace_finish (); } - clonetiler_change_selection (selection, dlg); + change_selection(selection); desktop->clearWaitingCursor(); diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h index e76ad028e..9ad3fa878 100644 --- a/src/ui/dialog/clonetiler.h +++ b/src/ui/dialog/clonetiler.h @@ -41,7 +41,6 @@ protected: void clonetiler_table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col); static void clonetiler_symgroup_changed(GtkComboBox *cb, gpointer /*data*/); - static void clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool do_undo = true); static void on_picker_color_changed(guint rgba); static void clonetiler_trace_hide_tiled_clones_recursively(SPObject *from); static void clonetiler_checkbox_toggled(GtkToggleButton *tb, gpointer *data); @@ -55,11 +54,7 @@ protected: static void clonetiler_switch_to_create(GtkToggleButton */*tb*/, GtkWidget *dlg); static void clonetiler_switch_to_fill(GtkToggleButton */*tb*/, GtkWidget *dlg); static void clonetiler_keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/); - static void clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg); static void clonetiler_unclump(GtkWidget */*widget*/, void *); - static void clonetiler_change_selection(Inkscape::Selection *selection, GtkWidget *dlg); - static void clonetiler_external_change(GtkWidget *dlg); - static void clonetiler_disconnect_gsignal(GObject *widget, gpointer source); static void clonetiler_reset(GtkWidget */*widget*/, GtkWidget *dlg); static guint clonetiler_number_of_clones(SPObject *obj); static void clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *original); @@ -71,6 +66,12 @@ protected: static void clonetiler_value_changed(GtkAdjustment *adj, gpointer data); static void clonetiler_reset_recursive(GtkWidget *w); + void apply(); + void change_selection(Inkscape::Selection *selection); + void external_change(); + void remove(bool do_undo = true); + void on_remove_button_clicked() {remove();} + static Geom::Affine clonetiler_get_transform( // symmetry group int type, @@ -112,7 +113,6 @@ private: CloneTiler(CloneTiler const &d); CloneTiler& operator=(CloneTiler const &d); - GtkWidget *dlg; GtkWidget *nb; GtkWidget *b; SPDesktop *desktop; @@ -142,6 +142,12 @@ private: */ void setTargetDesktop(SPDesktop *desktop); + // Variables that used to be set using GObject + GtkWidget *_buttons_on_tiles; + GtkWidget *_dotrace; + GtkWidget *_status; + GtkWidget *_rowscols; + GtkWidget *_widthheight; }; -- cgit v1.2.3 From 349e2e3bc0b11c89a0a791e7feedfc9e0c457e5d Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 10 Aug 2016 12:39:30 +0100 Subject: CloneTiler: Further C++ification (bzr r15051) --- src/ui/dialog/clonetiler.cpp | 511 ++++++++++++++++++++++--------------------- src/ui/dialog/clonetiler.h | 65 +++--- 2 files changed, 292 insertions(+), 284 deletions(-) (limited to 'src') diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index eb55e06c6..8bd5cd5f6 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -22,7 +22,9 @@ #include #include <2geom/transforms.h> + #include +#include #include "desktop.h" @@ -88,7 +90,7 @@ CloneTiler::CloneTiler () : // Symmetry { - GtkWidget *vb = clonetiler_new_tab (nb, _("_Symmetry")); + GtkWidget *vb = new_tab (nb, _("_Symmetry")); /* TRANSLATORS: For the following 17 symmetry groups, see * http://www.bib.ulb.ac.be/coursmath/doc/17.htm (visual examples); @@ -149,16 +151,16 @@ CloneTiler::CloneTiler () : gtk_combo_box_set_active (GTK_COMBO_BOX (combo), current); g_signal_connect(G_OBJECT(combo), "changed", - G_CALLBACK(clonetiler_symgroup_changed), NULL); + G_CALLBACK(symgroup_changed), NULL); } table_row_labels = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); // Shift { - GtkWidget *vb = clonetiler_new_tab (nb, _("S_hift")); + GtkWidget *vb = new_tab (nb, _("S_hift")); - GtkWidget *table = clonetiler_table_x_y_rand (3); + GtkWidget *table = table_x_y_rand (3); gtk_box_pack_start (GTK_BOX (vb), table, FALSE, FALSE, 0); // X @@ -168,29 +170,29 @@ CloneTiler::CloneTiler () : // xgettext:no-c-format gtk_label_set_markup (GTK_LABEL(l), _("Shift X:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 2, 1); + table_attach (table, l, 1, 2, 1); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( // xgettext:no-c-format _("Horizontal shift per row (in % of tile width)"), "shiftx_per_j", -10000, 10000, "%"); - clonetiler_table_attach (table, l, 0, 2, 2); + table_attach (table, l, 0, 2, 2); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( // xgettext:no-c-format _("Horizontal shift per column (in % of tile width)"), "shiftx_per_i", -10000, 10000, "%"); - clonetiler_table_attach (table, l, 0, 2, 3); + table_attach (table, l, 0, 2, 3); } { - GtkWidget *l = clonetiler_spinbox (_("Randomize the horizontal shift by this percentage"), "shiftx_rand", + GtkWidget *l = spinbox (_("Randomize the horizontal shift by this percentage"), "shiftx_rand", 0, 1000, "%"); - clonetiler_table_attach (table, l, 0, 2, 4); + table_attach (table, l, 0, 2, 4); } // Y @@ -200,30 +202,30 @@ CloneTiler::CloneTiler () : // xgettext:no-c-format gtk_label_set_markup (GTK_LABEL(l), _("Shift Y:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 3, 1); + table_attach (table, l, 1, 3, 1); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( // xgettext:no-c-format _("Vertical shift per row (in % of tile height)"), "shifty_per_j", -10000, 10000, "%"); - clonetiler_table_attach (table, l, 0, 3, 2); + table_attach (table, l, 0, 3, 2); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( // xgettext:no-c-format _("Vertical shift per column (in % of tile height)"), "shifty_per_i", -10000, 10000, "%"); - clonetiler_table_attach (table, l, 0, 3, 3); + table_attach (table, l, 0, 3, 3); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( _("Randomize the vertical shift by this percentage"), "shifty_rand", 0, 1000, "%"); - clonetiler_table_attach (table, l, 0, 3, 4); + table_attach (table, l, 0, 3, 4); } // Exponent @@ -231,21 +233,21 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Exponent:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 4, 1); + table_attach (table, l, 1, 4, 1); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( _("Whether rows are spaced evenly (1), converge (<1) or diverge (>1)"), "shifty_exp", 0, 10, "", true); - clonetiler_table_attach (table, l, 0, 4, 2); + table_attach (table, l, 0, 4, 2); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( _("Whether columns are spaced evenly (1), converge (<1) or diverge (>1)"), "shiftx_exp", 0, 10, "", true); - clonetiler_table_attach (table, l, 0, 4, 3); + table_attach (table, l, 0, 4, 3); } { // alternates @@ -253,17 +255,17 @@ CloneTiler::CloneTiler () : // TRANSLATORS: "Alternate" is a verb here gtk_label_set_markup (GTK_LABEL(l), _("Alternate:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 5, 1); + table_attach (table, l, 1, 5, 1); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of shifts for each row"), "shifty_alternate"); - clonetiler_table_attach (table, l, 0, 5, 2); + GtkWidget *l = checkbox (_("Alternate the sign of shifts for each row"), "shifty_alternate"); + table_attach (table, l, 0, 5, 2); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of shifts for each column"), "shiftx_alternate"); - clonetiler_table_attach (table, l, 0, 5, 3); + GtkWidget *l = checkbox (_("Alternate the sign of shifts for each column"), "shiftx_alternate"); + table_attach (table, l, 0, 5, 3); } { // Cumulate @@ -271,17 +273,17 @@ CloneTiler::CloneTiler () : // TRANSLATORS: "Cumulate" is a verb here gtk_label_set_markup (GTK_LABEL(l), _("Cumulate:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 6, 1); + table_attach (table, l, 1, 6, 1); } { - GtkWidget *l = clonetiler_checkbox (_("Cumulate the shifts for each row"), "shifty_cumulate"); - clonetiler_table_attach (table, l, 0, 6, 2); + GtkWidget *l = checkbox (_("Cumulate the shifts for each row"), "shifty_cumulate"); + table_attach (table, l, 0, 6, 2); } { - GtkWidget *l = clonetiler_checkbox (_("Cumulate the shifts for each column"), "shiftx_cumulate"); - clonetiler_table_attach (table, l, 0, 6, 3); + GtkWidget *l = checkbox (_("Cumulate the shifts for each column"), "shiftx_cumulate"); + table_attach (table, l, 0, 6, 3); } { // Exclude tile width and height in shift @@ -289,17 +291,17 @@ CloneTiler::CloneTiler () : // TRANSLATORS: "Cumulate" is a verb here gtk_label_set_markup (GTK_LABEL(l), _("Exclude tile:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 7, 1); + table_attach (table, l, 1, 7, 1); } { - GtkWidget *l = clonetiler_checkbox (_("Exclude tile height in shift"), "shifty_excludeh"); - clonetiler_table_attach (table, l, 0, 7, 2); + GtkWidget *l = checkbox (_("Exclude tile height in shift"), "shifty_excludeh"); + table_attach (table, l, 0, 7, 2); } { - GtkWidget *l = clonetiler_checkbox (_("Exclude tile width in shift"), "shiftx_excludew"); - clonetiler_table_attach (table, l, 0, 7, 3); + GtkWidget *l = checkbox (_("Exclude tile width in shift"), "shiftx_excludew"); + table_attach (table, l, 0, 7, 3); } } @@ -307,9 +309,9 @@ CloneTiler::CloneTiler () : // Scale { - GtkWidget *vb = clonetiler_new_tab (nb, _("Sc_ale")); + GtkWidget *vb = new_tab (nb, _("Sc_ale")); - GtkWidget *table = clonetiler_table_x_y_rand (2); + GtkWidget *table = table_x_y_rand (2); gtk_box_pack_start (GTK_BOX (vb), table, FALSE, FALSE, 0); // X @@ -317,29 +319,29 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Scale X:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 2, 1); + table_attach (table, l, 1, 2, 1); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( // xgettext:no-c-format _("Horizontal scale per row (in % of tile width)"), "scalex_per_j", -100, 1000, "%"); - clonetiler_table_attach (table, l, 0, 2, 2); + table_attach (table, l, 0, 2, 2); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( // xgettext:no-c-format _("Horizontal scale per column (in % of tile width)"), "scalex_per_i", -100, 1000, "%"); - clonetiler_table_attach (table, l, 0, 2, 3); + table_attach (table, l, 0, 2, 3); } { - GtkWidget *l = clonetiler_spinbox (_("Randomize the horizontal scale by this percentage"), "scalex_rand", + GtkWidget *l = spinbox (_("Randomize the horizontal scale by this percentage"), "scalex_rand", 0, 1000, "%"); - clonetiler_table_attach (table, l, 0, 2, 4); + table_attach (table, l, 0, 2, 4); } // Y @@ -347,29 +349,29 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Scale Y:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 3, 1); + table_attach (table, l, 1, 3, 1); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( // xgettext:no-c-format _("Vertical scale per row (in % of tile height)"), "scaley_per_j", -100, 1000, "%"); - clonetiler_table_attach (table, l, 0, 3, 2); + table_attach (table, l, 0, 3, 2); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( // xgettext:no-c-format _("Vertical scale per column (in % of tile height)"), "scaley_per_i", -100, 1000, "%"); - clonetiler_table_attach (table, l, 0, 3, 3); + table_attach (table, l, 0, 3, 3); } { - GtkWidget *l = clonetiler_spinbox (_("Randomize the vertical scale by this percentage"), "scaley_rand", + GtkWidget *l = spinbox (_("Randomize the vertical scale by this percentage"), "scaley_rand", 0, 1000, "%"); - clonetiler_table_attach (table, l, 0, 3, 4); + table_attach (table, l, 0, 3, 4); } // Exponent @@ -377,19 +379,19 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Exponent:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 4, 1); + table_attach (table, l, 1, 4, 1); } { - GtkWidget *l = clonetiler_spinbox (_("Whether row scaling is uniform (1), converge (<1) or diverge (>1)"), "scaley_exp", + GtkWidget *l = spinbox (_("Whether row scaling is uniform (1), converge (<1) or diverge (>1)"), "scaley_exp", 0, 10, "", true); - clonetiler_table_attach (table, l, 0, 4, 2); + table_attach (table, l, 0, 4, 2); } { - GtkWidget *l = clonetiler_spinbox (_("Whether column scaling is uniform (1), converge (<1) or diverge (>1)"), "scalex_exp", + GtkWidget *l = spinbox (_("Whether column scaling is uniform (1), converge (<1) or diverge (>1)"), "scalex_exp", 0, 10, "", true); - clonetiler_table_attach (table, l, 0, 4, 3); + table_attach (table, l, 0, 4, 3); } // Logarithmic (as in logarithmic spiral) @@ -397,19 +399,19 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Base:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 5, 1); + table_attach (table, l, 1, 5, 1); } { - GtkWidget *l = clonetiler_spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scaley_log", + GtkWidget *l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scaley_log", 0, 10, "", false); - clonetiler_table_attach (table, l, 0, 5, 2); + table_attach (table, l, 0, 5, 2); } { - GtkWidget *l = clonetiler_spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scalex_log", + GtkWidget *l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scalex_log", 0, 10, "", false); - clonetiler_table_attach (table, l, 0, 5, 3); + table_attach (table, l, 0, 5, 3); } { // alternates @@ -417,17 +419,17 @@ CloneTiler::CloneTiler () : // TRANSLATORS: "Alternate" is a verb here gtk_label_set_markup (GTK_LABEL(l), _("Alternate:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 6, 1); + table_attach (table, l, 1, 6, 1); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of scales for each row"), "scaley_alternate"); - clonetiler_table_attach (table, l, 0, 6, 2); + GtkWidget *l = checkbox (_("Alternate the sign of scales for each row"), "scaley_alternate"); + table_attach (table, l, 0, 6, 2); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of scales for each column"), "scalex_alternate"); - clonetiler_table_attach (table, l, 0, 6, 3); + GtkWidget *l = checkbox (_("Alternate the sign of scales for each column"), "scalex_alternate"); + table_attach (table, l, 0, 6, 3); } { // Cumulate @@ -435,17 +437,17 @@ CloneTiler::CloneTiler () : // TRANSLATORS: "Cumulate" is a verb here gtk_label_set_markup (GTK_LABEL(l), _("Cumulate:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 7, 1); + table_attach (table, l, 1, 7, 1); } { - GtkWidget *l = clonetiler_checkbox (_("Cumulate the scales for each row"), "scaley_cumulate"); - clonetiler_table_attach (table, l, 0, 7, 2); + GtkWidget *l = checkbox (_("Cumulate the scales for each row"), "scaley_cumulate"); + table_attach (table, l, 0, 7, 2); } { - GtkWidget *l = clonetiler_checkbox (_("Cumulate the scales for each column"), "scalex_cumulate"); - clonetiler_table_attach (table, l, 0, 7, 3); + GtkWidget *l = checkbox (_("Cumulate the scales for each column"), "scalex_cumulate"); + table_attach (table, l, 0, 7, 3); } } @@ -453,9 +455,9 @@ CloneTiler::CloneTiler () : // Rotation { - GtkWidget *vb = clonetiler_new_tab (nb, _("_Rotation")); + GtkWidget *vb = new_tab (nb, _("_Rotation")); - GtkWidget *table = clonetiler_table_x_y_rand (1); + GtkWidget *table = table_x_y_rand (1); gtk_box_pack_start (GTK_BOX (vb), table, FALSE, FALSE, 0); // Angle @@ -463,29 +465,29 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Angle:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 2, 1); + table_attach (table, l, 1, 2, 1); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( // xgettext:no-c-format _("Rotate tiles by this angle for each row"), "rotate_per_j", -180, 180, "°"); - clonetiler_table_attach (table, l, 0, 2, 2); + table_attach (table, l, 0, 2, 2); } { - GtkWidget *l = clonetiler_spinbox ( + GtkWidget *l = spinbox ( // xgettext:no-c-format _("Rotate tiles by this angle for each column"), "rotate_per_i", -180, 180, "°"); - clonetiler_table_attach (table, l, 0, 2, 3); + table_attach (table, l, 0, 2, 3); } { - GtkWidget *l = clonetiler_spinbox (_("Randomize the rotation angle by this percentage"), "rotate_rand", + GtkWidget *l = spinbox (_("Randomize the rotation angle by this percentage"), "rotate_rand", 0, 100, "%"); - clonetiler_table_attach (table, l, 0, 2, 4); + table_attach (table, l, 0, 2, 4); } { // alternates @@ -493,17 +495,17 @@ CloneTiler::CloneTiler () : // TRANSLATORS: "Alternate" is a verb here gtk_label_set_markup (GTK_LABEL(l), _("Alternate:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 3, 1); + table_attach (table, l, 1, 3, 1); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the rotation direction for each row"), "rotate_alternatej"); - clonetiler_table_attach (table, l, 0, 3, 2); + GtkWidget *l = checkbox (_("Alternate the rotation direction for each row"), "rotate_alternatej"); + table_attach (table, l, 0, 3, 2); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the rotation direction for each column"), "rotate_alternatei"); - clonetiler_table_attach (table, l, 0, 3, 3); + GtkWidget *l = checkbox (_("Alternate the rotation direction for each column"), "rotate_alternatei"); + table_attach (table, l, 0, 3, 3); } { // Cumulate @@ -511,17 +513,17 @@ CloneTiler::CloneTiler () : // TRANSLATORS: "Cumulate" is a verb here gtk_label_set_markup (GTK_LABEL(l), _("Cumulate:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 4, 1); + table_attach (table, l, 1, 4, 1); } { - GtkWidget *l = clonetiler_checkbox (_("Cumulate the rotation for each row"), "rotate_cumulatej"); - clonetiler_table_attach (table, l, 0, 4, 2); + GtkWidget *l = checkbox (_("Cumulate the rotation for each row"), "rotate_cumulatej"); + table_attach (table, l, 0, 4, 2); } { - GtkWidget *l = clonetiler_checkbox (_("Cumulate the rotation for each column"), "rotate_cumulatei"); - clonetiler_table_attach (table, l, 0, 4, 3); + GtkWidget *l = checkbox (_("Cumulate the rotation for each column"), "rotate_cumulatei"); + table_attach (table, l, 0, 4, 3); } } @@ -529,9 +531,9 @@ CloneTiler::CloneTiler () : // Blur and opacity { - GtkWidget *vb = clonetiler_new_tab (nb, _("_Blur & opacity")); + GtkWidget *vb = new_tab (nb, _("_Blur & opacity")); - GtkWidget *table = clonetiler_table_x_y_rand (1); + GtkWidget *table = table_x_y_rand (1); gtk_box_pack_start (GTK_BOX (vb), table, FALSE, FALSE, 0); @@ -540,25 +542,25 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Blur:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 2, 1); + table_attach (table, l, 1, 2, 1); } { - GtkWidget *l = clonetiler_spinbox (_("Blur tiles by this percentage for each row"), "blur_per_j", + GtkWidget *l = spinbox (_("Blur tiles by this percentage for each row"), "blur_per_j", 0, 100, "%"); - clonetiler_table_attach (table, l, 0, 2, 2); + table_attach (table, l, 0, 2, 2); } { - GtkWidget *l = clonetiler_spinbox (_("Blur tiles by this percentage for each column"), "blur_per_i", + GtkWidget *l = spinbox (_("Blur tiles by this percentage for each column"), "blur_per_i", 0, 100, "%"); - clonetiler_table_attach (table, l, 0, 2, 3); + table_attach (table, l, 0, 2, 3); } { - GtkWidget *l = clonetiler_spinbox (_("Randomize the tile blur by this percentage"), "blur_rand", + GtkWidget *l = spinbox (_("Randomize the tile blur by this percentage"), "blur_rand", 0, 100, "%"); - clonetiler_table_attach (table, l, 0, 2, 4); + table_attach (table, l, 0, 2, 4); } { // alternates @@ -566,17 +568,17 @@ CloneTiler::CloneTiler () : // TRANSLATORS: "Alternate" is a verb here gtk_label_set_markup (GTK_LABEL(l), _("Alternate:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 3, 1); + table_attach (table, l, 1, 3, 1); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of blur change for each row"), "blur_alternatej"); - clonetiler_table_attach (table, l, 0, 3, 2); + GtkWidget *l = checkbox (_("Alternate the sign of blur change for each row"), "blur_alternatej"); + table_attach (table, l, 0, 3, 2); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of blur change for each column"), "blur_alternatei"); - clonetiler_table_attach (table, l, 0, 3, 3); + GtkWidget *l = checkbox (_("Alternate the sign of blur change for each column"), "blur_alternatei"); + table_attach (table, l, 0, 3, 3); } @@ -586,25 +588,25 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Opacity:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 4, 1); + table_attach (table, l, 1, 4, 1); } { - GtkWidget *l = clonetiler_spinbox (_("Decrease tile opacity by this percentage for each row"), "opacity_per_j", + GtkWidget *l = spinbox (_("Decrease tile opacity by this percentage for each row"), "opacity_per_j", 0, 100, "%"); - clonetiler_table_attach (table, l, 0, 4, 2); + table_attach (table, l, 0, 4, 2); } { - GtkWidget *l = clonetiler_spinbox (_("Decrease tile opacity by this percentage for each column"), "opacity_per_i", + GtkWidget *l = spinbox (_("Decrease tile opacity by this percentage for each column"), "opacity_per_i", 0, 100, "%"); - clonetiler_table_attach (table, l, 0, 4, 3); + table_attach (table, l, 0, 4, 3); } { - GtkWidget *l = clonetiler_spinbox (_("Randomize the tile opacity by this percentage"), "opacity_rand", + GtkWidget *l = spinbox (_("Randomize the tile opacity by this percentage"), "opacity_rand", 0, 100, "%"); - clonetiler_table_attach (table, l, 0, 4, 4); + table_attach (table, l, 0, 4, 4); } { // alternates @@ -612,24 +614,24 @@ CloneTiler::CloneTiler () : // TRANSLATORS: "Alternate" is a verb here gtk_label_set_markup (GTK_LABEL(l), _("Alternate:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 5, 1); + table_attach (table, l, 1, 5, 1); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of opacity change for each row"), "opacity_alternatej"); - clonetiler_table_attach (table, l, 0, 5, 2); + GtkWidget *l = checkbox (_("Alternate the sign of opacity change for each row"), "opacity_alternatej"); + table_attach (table, l, 0, 5, 2); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of opacity change for each column"), "opacity_alternatei"); - clonetiler_table_attach (table, l, 0, 5, 3); + GtkWidget *l = checkbox (_("Alternate the sign of opacity change for each column"), "opacity_alternatei"); + table_attach (table, l, 0, 5, 3); } } // Color { - GtkWidget *vb = clonetiler_new_tab (nb, _("Co_lor")); + GtkWidget *vb = new_tab (nb, _("Co_lor")); { auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); @@ -648,7 +650,7 @@ CloneTiler::CloneTiler () : } - GtkWidget *table = clonetiler_table_x_y_rand (3); + GtkWidget *table = table_x_y_rand (3); gtk_box_pack_start (GTK_BOX (vb), table, FALSE, FALSE, 0); // Hue @@ -656,25 +658,25 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("H:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 2, 1); + table_attach (table, l, 1, 2, 1); } { - GtkWidget *l = clonetiler_spinbox (_("Change the tile hue by this percentage for each row"), "hue_per_j", + GtkWidget *l = spinbox (_("Change the tile hue by this percentage for each row"), "hue_per_j", -100, 100, "%"); - clonetiler_table_attach (table, l, 0, 2, 2); + table_attach (table, l, 0, 2, 2); } { - GtkWidget *l = clonetiler_spinbox (_("Change the tile hue by this percentage for each column"), "hue_per_i", + GtkWidget *l = spinbox (_("Change the tile hue by this percentage for each column"), "hue_per_i", -100, 100, "%"); - clonetiler_table_attach (table, l, 0, 2, 3); + table_attach (table, l, 0, 2, 3); } { - GtkWidget *l = clonetiler_spinbox (_("Randomize the tile hue by this percentage"), "hue_rand", + GtkWidget *l = spinbox (_("Randomize the tile hue by this percentage"), "hue_rand", 0, 100, "%"); - clonetiler_table_attach (table, l, 0, 2, 4); + table_attach (table, l, 0, 2, 4); } @@ -683,25 +685,25 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("S:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 3, 1); + table_attach (table, l, 1, 3, 1); } { - GtkWidget *l = clonetiler_spinbox (_("Change the color saturation by this percentage for each row"), "saturation_per_j", + GtkWidget *l = spinbox (_("Change the color saturation by this percentage for each row"), "saturation_per_j", -100, 100, "%"); - clonetiler_table_attach (table, l, 0, 3, 2); + table_attach (table, l, 0, 3, 2); } { - GtkWidget *l = clonetiler_spinbox (_("Change the color saturation by this percentage for each column"), "saturation_per_i", + GtkWidget *l = spinbox (_("Change the color saturation by this percentage for each column"), "saturation_per_i", -100, 100, "%"); - clonetiler_table_attach (table, l, 0, 3, 3); + table_attach (table, l, 0, 3, 3); } { - GtkWidget *l = clonetiler_spinbox (_("Randomize the color saturation by this percentage"), "saturation_rand", + GtkWidget *l = spinbox (_("Randomize the color saturation by this percentage"), "saturation_rand", 0, 100, "%"); - clonetiler_table_attach (table, l, 0, 3, 4); + table_attach (table, l, 0, 3, 4); } // Lightness @@ -709,25 +711,25 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("L:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 4, 1); + table_attach (table, l, 1, 4, 1); } { - GtkWidget *l = clonetiler_spinbox (_("Change the color lightness by this percentage for each row"), "lightness_per_j", + GtkWidget *l = spinbox (_("Change the color lightness by this percentage for each row"), "lightness_per_j", -100, 100, "%"); - clonetiler_table_attach (table, l, 0, 4, 2); + table_attach (table, l, 0, 4, 2); } { - GtkWidget *l = clonetiler_spinbox (_("Change the color lightness by this percentage for each column"), "lightness_per_i", + GtkWidget *l = spinbox (_("Change the color lightness by this percentage for each column"), "lightness_per_i", -100, 100, "%"); - clonetiler_table_attach (table, l, 0, 4, 3); + table_attach (table, l, 0, 4, 3); } { - GtkWidget *l = clonetiler_spinbox (_("Randomize the color lightness by this percentage"), "lightness_rand", + GtkWidget *l = spinbox (_("Randomize the color lightness by this percentage"), "lightness_rand", 0, 100, "%"); - clonetiler_table_attach (table, l, 0, 4, 4); + table_attach (table, l, 0, 4, 4); } @@ -735,38 +737,36 @@ CloneTiler::CloneTiler () : GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Alternate:")); gtk_size_group_add_widget(table_row_labels, l); - clonetiler_table_attach (table, l, 1, 5, 1); + table_attach (table, l, 1, 5, 1); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of color changes for each row"), "color_alternatej"); - clonetiler_table_attach (table, l, 0, 5, 2); + GtkWidget *l = checkbox (_("Alternate the sign of color changes for each row"), "color_alternatej"); + table_attach (table, l, 0, 5, 2); } { - GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of color changes for each column"), "color_alternatei"); - clonetiler_table_attach (table, l, 0, 5, 3); + GtkWidget *l = checkbox (_("Alternate the sign of color changes for each column"), "color_alternatei"); + table_attach (table, l, 0, 5, 3); } } // Trace { - GtkWidget *vb = clonetiler_new_tab (nb, _("_Trace")); + GtkWidget *vb = new_tab (nb, _("_Trace")); { auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0); - b = gtk_check_button_new_with_label (_("Trace the drawing under the clones/sprayed items")); - g_object_set_data (G_OBJECT(b), "uncheckable", GINT_TO_POINTER(TRUE)); + _b = Gtk::manage(new Gtk::CheckButton(_("Trace the drawing under the clones/sprayed items"))); + _b->set_data("uncheckable", GINT_TO_POINTER(TRUE)); bool old = prefs->getBool(prefs_path + "dotrace"); - gtk_toggle_button_set_active ((GtkToggleButton *) b, old); - gtk_widget_set_tooltip_text (b, _("For each clone/sprayed item, pick a value from the drawing in its location and apply it")); - gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0); - - g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(clonetiler_do_pick_toggled), (gpointer)this); + _b->set_active(old); + _b->set_tooltip_text(_("For each clone/sprayed item, pick a value from the drawing in its location and apply it")); + gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(_b->gobj()), FALSE, FALSE, 0); + _b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::do_pick_toggled),_b)); } { @@ -789,65 +789,65 @@ CloneTiler::CloneTiler () : { radio = gtk_radio_button_new_with_label (NULL, _("Color")); gtk_widget_set_tooltip_text (radio, _("Pick the visible color and opacity")); - clonetiler_table_attach (table, radio, 0.0, 1, 1); + table_attach (table, radio, 0.0, 1, 1); g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_COLOR)); + G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_COLOR)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_COLOR); } { radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("Opacity")); gtk_widget_set_tooltip_text (radio, _("Pick the total accumulated opacity")); - clonetiler_table_attach (table, radio, 0.0, 2, 1); + table_attach (table, radio, 0.0, 2, 1); g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_OPACITY)); + G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_OPACITY)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_OPACITY); } { radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("R")); gtk_widget_set_tooltip_text (radio, _("Pick the Red component of the color")); - clonetiler_table_attach (table, radio, 0.0, 1, 2); + table_attach (table, radio, 0.0, 1, 2); g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_R)); + G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_R)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_R); } { radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("G")); gtk_widget_set_tooltip_text (radio, _("Pick the Green component of the color")); - clonetiler_table_attach (table, radio, 0.0, 2, 2); + table_attach (table, radio, 0.0, 2, 2); g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_G)); + G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_G)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_G); } { radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("B")); gtk_widget_set_tooltip_text (radio, _("Pick the Blue component of the color")); - clonetiler_table_attach (table, radio, 0.0, 3, 2); + table_attach (table, radio, 0.0, 3, 2); g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_B)); + G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_B)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_B); } { radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color hue", "H")); gtk_widget_set_tooltip_text (radio, _("Pick the hue of the color")); - clonetiler_table_attach (table, radio, 0.0, 1, 3); + table_attach (table, radio, 0.0, 1, 3); g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_H)); + G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_H)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_H); } { radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color saturation", "S")); gtk_widget_set_tooltip_text (radio, _("Pick the saturation of the color")); - clonetiler_table_attach (table, radio, 0.0, 2, 3); + table_attach (table, radio, 0.0, 2, 3); g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_S)); + G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_S)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_S); } { radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color lightness", "L")); gtk_widget_set_tooltip_text (radio, _("Pick the lightness of the color")); - clonetiler_table_attach (table, radio, 0.0, 3, 3); + table_attach (table, radio, 0.0, 3, 3); g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_L)); + G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_L)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_L); } @@ -866,33 +866,33 @@ CloneTiler::CloneTiler () : { GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Gamma-correct:")); - clonetiler_table_attach (table, l, 1.0, 1, 1); + table_attach (table, l, 1.0, 1, 1); } { - GtkWidget *l = clonetiler_spinbox (_("Shift the mid-range of the picked value upwards (>0) or downwards (<0)"), "gamma_picked", + GtkWidget *l = spinbox (_("Shift the mid-range of the picked value upwards (>0) or downwards (<0)"), "gamma_picked", -10, 10, ""); - clonetiler_table_attach (table, l, 0.0, 1, 2); + table_attach (table, l, 0.0, 1, 2); } { GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Randomize:")); - clonetiler_table_attach (table, l, 1.0, 1, 3); + table_attach (table, l, 1.0, 1, 3); } { - GtkWidget *l = clonetiler_spinbox (_("Randomize the picked value by this percentage"), "rand_picked", + GtkWidget *l = spinbox (_("Randomize the picked value by this percentage"), "rand_picked", 0, 100, "%"); - clonetiler_table_attach (table, l, 0.0, 1, 4); + table_attach (table, l, 0.0, 1, 4); } { GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Invert:")); - clonetiler_table_attach (table, l, 1.0, 2, 1); + table_attach (table, l, 1.0, 2, 1); } { - GtkWidget *l = clonetiler_checkbox (_("Invert the picked value"), "invert_picked"); - clonetiler_table_attach (table, l, 0.0, 2, 2); + GtkWidget *l = checkbox (_("Invert the picked value"), "invert_picked"); + table_attach (table, l, 0.0, 2, 2); } } @@ -910,9 +910,9 @@ CloneTiler::CloneTiler () : bool old = prefs->getBool(prefs_path + "pick_to_presence", true); gtk_toggle_button_set_active ((GtkToggleButton *) b, old); gtk_widget_set_tooltip_text (b, _("Each clone is created with the probability determined by the picked value in that point")); - clonetiler_table_attach (table, b, 0.0, 1, 1); + table_attach (table, b, 0.0, 1, 1); g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_presence"); + G_CALLBACK(pick_to), (gpointer) "pick_to_presence"); } { @@ -920,9 +920,9 @@ CloneTiler::CloneTiler () : bool old = prefs->getBool(prefs_path + "pick_to_size"); gtk_toggle_button_set_active ((GtkToggleButton *) b, old); gtk_widget_set_tooltip_text (b, _("Each clone's size is determined by the picked value in that point")); - clonetiler_table_attach (table, b, 0.0, 2, 1); + table_attach (table, b, 0.0, 2, 1); g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_size"); + G_CALLBACK(pick_to), (gpointer) "pick_to_size"); } { @@ -930,9 +930,9 @@ CloneTiler::CloneTiler () : bool old = prefs->getBool(prefs_path + "pick_to_color", 0); gtk_toggle_button_set_active ((GtkToggleButton *) b, old); gtk_widget_set_tooltip_text (b, _("Each clone is painted by the picked color (the original must have unset fill or stroke)")); - clonetiler_table_attach (table, b, 0.0, 1, 2); + table_attach (table, b, 0.0, 1, 2); g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_color"); + G_CALLBACK(pick_to), (gpointer) "pick_to_color"); } { @@ -940,9 +940,9 @@ CloneTiler::CloneTiler () : bool old = prefs->getBool(prefs_path + "pick_to_opacity", 0); gtk_toggle_button_set_active ((GtkToggleButton *) b, old); gtk_widget_set_tooltip_text (b, _("Each clone's opacity is determined by the picked value in that point")); - clonetiler_table_attach (table, b, 0.0, 2, 2); + table_attach (table, b, 0.0, 2, 2); g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_opacity"); + G_CALLBACK(pick_to), (gpointer) "pick_to_opacity"); } } gtk_widget_set_sensitive (vvb, prefs->getBool(prefs_path + "dotrace")); @@ -983,7 +983,7 @@ CloneTiler::CloneTiler () : // TODO: C++ification g_signal_connect(G_OBJECT(a->gobj()), "value_changed", - G_CALLBACK(clonetiler_xy_changed), (gpointer) "jmax"); + G_CALLBACK(xy_changed), (gpointer) "jmax"); } { @@ -1005,10 +1005,10 @@ CloneTiler::CloneTiler () : // TODO: C++ification g_signal_connect(G_OBJECT(a->gobj()), "value_changed", - G_CALLBACK(clonetiler_xy_changed), (gpointer) "imax"); + G_CALLBACK(xy_changed), (gpointer) "imax"); } - clonetiler_table_attach (table, hb, 0.0, 1, 2); + table_attach (table, hb, 0.0, 1, 2); } { @@ -1020,7 +1020,7 @@ CloneTiler::CloneTiler () : unit_menu = new Inkscape::UI::Widget::UnitMenu(); unit_menu->setUnitType(Inkscape::Util::UNIT_TYPE_LINEAR); unit_menu->setUnit(SP_ACTIVE_DESKTOP->getNamedView()->display_units->abbr); - unitChangedConn = unit_menu->signal_changed().connect(sigc::mem_fun(*this, &CloneTiler::clonetiler_unit_changed)); + unitChangedConn = unit_menu->signal_changed().connect(sigc::mem_fun(*this, &CloneTiler::unit_changed)); { // Width spinbutton @@ -1038,7 +1038,7 @@ CloneTiler::CloneTiler () : gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(e->gobj()), TRUE, TRUE, 0); // TODO: C++ification g_signal_connect(G_OBJECT(fill_width->gobj()), "value_changed", - G_CALLBACK(clonetiler_fill_width_changed), unit_menu); + G_CALLBACK(fill_width_changed), unit_menu); } { GtkWidget *l = gtk_label_new (""); @@ -1063,11 +1063,11 @@ CloneTiler::CloneTiler () : gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(e->gobj()), TRUE, TRUE, 0); // TODO: C++ification g_signal_connect(G_OBJECT(fill_height->gobj()), "value_changed", - G_CALLBACK(clonetiler_fill_height_changed), unit_menu); + G_CALLBACK(fill_height_changed), unit_menu); } gtk_box_pack_start (GTK_BOX (hb), (GtkWidget*) unit_menu->gobj(), TRUE, TRUE, 0); - clonetiler_table_attach (table, hb, 0.0, 2, 2); + table_attach (table, hb, 0.0, 2, 2); } @@ -1076,8 +1076,8 @@ CloneTiler::CloneTiler () : { radio = gtk_radio_button_new_with_label (NULL, _("Rows, columns: ")); gtk_widget_set_tooltip_text (radio, _("Create the specified number of rows and columns")); - clonetiler_table_attach (table, radio, 0.0, 1, 1); - g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_create), (gpointer) this); + table_attach (table, radio, 0.0, 1, 1); + g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (switch_to_create), (gpointer) this); } if (!prefs->getBool(prefs_path + "fillrect")) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); @@ -1086,8 +1086,8 @@ CloneTiler::CloneTiler () : { radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("Width, height: ")); gtk_widget_set_tooltip_text (radio, _("Fill the specified width and height with the tiling")); - clonetiler_table_attach (table, radio, 0.0, 2, 1); - g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_fill), (gpointer) this); + table_attach (table, radio, 0.0, 2, 1); + g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (switch_to_fill), (gpointer) this); } if (prefs->getBool(prefs_path + "fillrect")) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); @@ -1109,7 +1109,7 @@ CloneTiler::CloneTiler () : gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(clonetiler_keep_bbox_toggled), NULL); + G_CALLBACK(keep_bbox_toggled), NULL); } // Statusbar @@ -1151,7 +1151,7 @@ CloneTiler::CloneTiler () : // So unclumping is the process of spreading a number of objects out more evenly. GtkWidget *b = gtk_button_new_with_mnemonic (_(" _Unclump ")); gtk_widget_set_tooltip_text (b, _("Spread out clones to reduce clumping; can be applied repeatedly")); - g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_unclump), NULL); + g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (unclump), NULL); gtk_box_pack_end (GTK_BOX (sb), b, FALSE, FALSE, 0); } @@ -1175,7 +1175,7 @@ CloneTiler::CloneTiler () : GtkWidget *b = gtk_button_new_with_mnemonic (_(" R_eset ")); // TRANSLATORS: "change" is a noun here gtk_widget_set_tooltip_text (b, _("Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero")); - g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_reset), this); + g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (reset), this); gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0); } } @@ -1244,7 +1244,7 @@ void CloneTiler::change_selection(Inkscape::Selection *selection) return; } - guint n = clonetiler_number_of_clones(selection->singleItem()); + guint n = number_of_clones(selection->singleItem()); if (n > 0) { gtk_widget_set_sensitive (_buttons_on_tiles, TRUE); gchar *sta = g_strdup_printf (_("Object has %d tiled clones."), n); @@ -1261,7 +1261,7 @@ void CloneTiler::external_change() change_selection(SP_ACTIVE_DESKTOP->getSelection()); } -Geom::Affine CloneTiler::clonetiler_get_transform( +Geom::Affine CloneTiler::get_transform( // symmetry group int type, @@ -1863,7 +1863,7 @@ Geom::Affine CloneTiler::clonetiler_get_transform( return Geom::identity(); } -bool CloneTiler::clonetiler_is_a_clone_of(SPObject *tile, SPObject *obj) +bool CloneTiler::is_a_clone_of(SPObject *tile, SPObject *obj) { bool result = false; char *id_href = NULL; @@ -1890,21 +1890,21 @@ bool CloneTiler::clonetiler_is_a_clone_of(SPObject *tile, SPObject *obj) return result; } -void CloneTiler::clonetiler_trace_hide_tiled_clones_recursively(SPObject *from) +void CloneTiler::trace_hide_tiled_clones_recursively(SPObject *from) { if (!trace_drawing) return; for (auto& o: from->children) { SPItem *item = dynamic_cast(&o); - if (item && clonetiler_is_a_clone_of(&o, NULL)) { + if (item && is_a_clone_of(&o, NULL)) { item->invoke_hide(trace_visionkey); // FIXME: hide each tiled clone's original too! } - clonetiler_trace_hide_tiled_clones_recursively (&o); + trace_hide_tiled_clones_recursively (&o); } } -void CloneTiler::clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *original) +void CloneTiler::trace_setup(SPDocument *doc, gdouble zoom, SPItem *original) { trace_drawing = new Inkscape::Drawing(); /* Create ArenaItem and set transform */ @@ -1914,7 +1914,7 @@ void CloneTiler::clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *o // hide the (current) original and any tiled clones, we only want to pick the background original->invoke_hide(trace_visionkey); - clonetiler_trace_hide_tiled_clones_recursively(trace_doc->getRoot()); + trace_hide_tiled_clones_recursively(trace_doc->getRoot()); trace_doc->getRoot()->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); trace_doc->ensureUpToDate(); @@ -1922,7 +1922,7 @@ void CloneTiler::clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *o trace_zoom = zoom; } -guint32 CloneTiler::clonetiler_trace_pick(Geom::Rect box) +guint32 CloneTiler::trace_pick(Geom::Rect box) { if (!trace_drawing) { return 0; @@ -1946,7 +1946,7 @@ guint32 CloneTiler::clonetiler_trace_pick(Geom::Rect box) return SP_RGBA32_F_COMPOSE (R, G, B, A); } -void CloneTiler::clonetiler_trace_finish() +void CloneTiler::trace_finish() { if (trace_doc) { trace_doc->getRoot()->invoke_hide(trace_visionkey); @@ -1956,7 +1956,7 @@ void CloneTiler::clonetiler_trace_finish() } } -void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *) +void CloneTiler::unclump(GtkWidget */*widget*/, void *) { SPDesktop *desktop = SP_ACTIVE_DESKTOP; if (desktop == NULL) { @@ -1977,27 +1977,27 @@ void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *) std::vector to_unclump; // not including the original for (auto& child: parent->children) { - if (clonetiler_is_a_clone_of (&child, obj)) { + if (is_a_clone_of (&child, obj)) { to_unclump.push_back((SPItem*)&child); } } desktop->getDocument()->ensureUpToDate(); reverse(to_unclump.begin(),to_unclump.end()); - unclump (to_unclump); + ::unclump (to_unclump); DocumentUndo::done(desktop->getDocument(), SP_VERB_DIALOG_CLONETILER, _("Unclump tiled clones")); } -guint CloneTiler::clonetiler_number_of_clones(SPObject *obj) +guint CloneTiler::number_of_clones(SPObject *obj) { SPObject *parent = obj->parent; guint n = 0; for (auto& child: parent->children) { - if (clonetiler_is_a_clone_of (&child, obj)) { + if (is_a_clone_of (&child, obj)) { n ++; } } @@ -2026,7 +2026,7 @@ void CloneTiler::remove(bool do_undo/* = true*/) // remove old tiling GSList *to_delete = NULL; for (auto& child: parent->children) { - if (clonetiler_is_a_clone_of (&child, obj)) { + if (is_a_clone_of (&child, obj)) { to_delete = g_slist_prepend (to_delete, &child); } } @@ -2205,7 +2205,7 @@ void CloneTiler::apply() SPItem *item = dynamic_cast(obj); if (dotrace) { - clonetiler_trace_setup (desktop->getDocument(), 1.0, item); + trace_setup (desktop->getDocument(), 1.0, item); } Geom::Point center; @@ -2277,7 +2277,7 @@ void CloneTiler::apply() // Note: We create a clone at 0,0 too, right over the original, in case our clones are colored // Get transform from symmetry, shift, scale, rotation - Geom::Affine orig_t = clonetiler_get_transform (type, i, j, center[Geom::X], center[Geom::Y], w, h, + Geom::Affine orig_t = get_transform (type, i, j, center[Geom::X], center[Geom::Y], w, h, shiftx_per_i, shifty_per_i, shiftx_per_j, shifty_per_j, shiftx_rand, shifty_rand, @@ -2351,7 +2351,7 @@ void CloneTiler::apply() if (dotrace) { Geom::Rect bbox_t = transform_rect (bbox_original, t*Geom::Scale(1.0/scale_units)); - guint32 rgba = clonetiler_trace_pick (bbox_t); + guint32 rgba = trace_pick (bbox_t); float r = SP_RGBA32_R_F(rgba); float g = SP_RGBA32_G_F(rgba); float b = SP_RGBA32_B_F(rgba); @@ -2511,7 +2511,7 @@ void CloneTiler::apply() } if (dotrace) { - clonetiler_trace_finish (); + trace_finish (); } change_selection(selection); @@ -2522,7 +2522,7 @@ void CloneTiler::apply() _("Create tiled clones")); } -GtkWidget * CloneTiler::clonetiler_new_tab(GtkWidget *nb, const gchar *label) +GtkWidget * CloneTiler::new_tab(GtkWidget *nb, const gchar *label) { GtkWidget *l = gtk_label_new_with_mnemonic (label); auto vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, VB_MARGIN); @@ -2532,14 +2532,14 @@ GtkWidget * CloneTiler::clonetiler_new_tab(GtkWidget *nb, const gchar *label) return vb; } -void CloneTiler::clonetiler_checkbox_toggled(GtkToggleButton *tb, gpointer *data) +void CloneTiler::checkbox_toggled(GtkToggleButton *tb, gpointer *data) { const gchar *attr = (const gchar *) data; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setBool(prefs_path + attr, gtk_toggle_button_get_active(tb)); } -GtkWidget * CloneTiler::clonetiler_checkbox(const char *tip, const char *attr) +GtkWidget * CloneTiler::checkbox(const char *tip, const char *attr) { auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); @@ -2553,21 +2553,21 @@ GtkWidget * CloneTiler::clonetiler_checkbox(const char *tip, const char *attr) gtk_box_pack_end (GTK_BOX (hb), b, FALSE, TRUE, 0); g_signal_connect ( G_OBJECT (b), "clicked", - G_CALLBACK (clonetiler_checkbox_toggled), (gpointer) attr); + G_CALLBACK (checkbox_toggled), (gpointer) attr); g_object_set_data (G_OBJECT(b), "uncheckable", GINT_TO_POINTER(TRUE)); return hb; } -void CloneTiler::clonetiler_value_changed(GtkAdjustment *adj, gpointer data) +void CloneTiler::value_changed(GtkAdjustment *adj, gpointer data) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); const gchar *pref = (const gchar *) data; prefs->setDouble(prefs_path + pref, gtk_adjustment_get_value (adj)); } -GtkWidget * CloneTiler::clonetiler_spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent/* = false*/) +GtkWidget * CloneTiler::spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent/* = false*/) { auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); @@ -2597,7 +2597,7 @@ GtkWidget * CloneTiler::clonetiler_spinbox(const char *tip, const char *attr, do a->set_value (value); // TODO: C++ification g_signal_connect(G_OBJECT(a->gobj()), "value_changed", - G_CALLBACK(clonetiler_value_changed), (gpointer) attr); + G_CALLBACK(value_changed), (gpointer) attr); if (exponent) { sb->set_data ("oneable", GINT_TO_POINTER(TRUE)); @@ -2617,27 +2617,27 @@ GtkWidget * CloneTiler::clonetiler_spinbox(const char *tip, const char *attr, do return hb; } -void CloneTiler::clonetiler_symgroup_changed(GtkComboBox *cb, gpointer /*data*/) +void CloneTiler::symgroup_changed(GtkComboBox *cb, gpointer /*data*/) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gint group_new = gtk_combo_box_get_active (cb); prefs->setInt(prefs_path + "symmetrygroup", group_new); } -void CloneTiler::clonetiler_xy_changed(GtkAdjustment *adj, gpointer data) +void CloneTiler::xy_changed(GtkAdjustment *adj, gpointer data) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); const gchar *pref = (const gchar *) data; prefs->setInt(prefs_path + pref, (int) floor(gtk_adjustment_get_value (adj) + 0.5)); } -void CloneTiler::clonetiler_keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/) +void CloneTiler::keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setBool(prefs_path + "keepbbox", gtk_toggle_button_get_active(tb)); } -void CloneTiler::clonetiler_pick_to(GtkToggleButton *tb, gpointer data) +void CloneTiler::pick_to(GtkToggleButton *tb, gpointer data) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); const gchar *pref = (const gchar *) data; @@ -2645,7 +2645,7 @@ void CloneTiler::clonetiler_pick_to(GtkToggleButton *tb, gpointer data) } -void CloneTiler::clonetiler_reset_recursive(GtkWidget *w) +void CloneTiler::reset_recursive(GtkWidget *w) { if (w && G_IS_OBJECT(w)) { { @@ -2673,25 +2673,25 @@ void CloneTiler::clonetiler_reset_recursive(GtkWidget *w) if (GTK_IS_CONTAINER(w)) { GList *ch = gtk_container_get_children (GTK_CONTAINER(w)); for (GList *i = ch; i != NULL; i = i->next) { - clonetiler_reset_recursive (GTK_WIDGET(i->data)); + reset_recursive (GTK_WIDGET(i->data)); } g_list_free (ch); } } -void CloneTiler::clonetiler_reset(GtkWidget */*widget*/, GtkWidget *dlg) +void CloneTiler::reset(GtkWidget */*widget*/, GtkWidget *dlg) { - clonetiler_reset_recursive (dlg); + reset_recursive (dlg); } -void CloneTiler::clonetiler_table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col) +void CloneTiler::table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col) { gtk_widget_set_halign(widget, GTK_ALIGN_FILL); gtk_widget_set_valign(widget, GTK_ALIGN_START); gtk_grid_attach(GTK_GRID(table), widget, col, row, 1, 1); } -GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values) +GtkWidget * CloneTiler::table_x_y_rand(int values) { auto table = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(table), 6); @@ -2710,7 +2710,7 @@ GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values) gtk_label_set_markup (GTK_LABEL(l), _("Per row:")); gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 2); - clonetiler_table_attach (table, hb, 0, 1, 2); + table_attach (table, hb, 0, 1, 2); } { @@ -2724,19 +2724,19 @@ GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values) gtk_label_set_markup (GTK_LABEL(l), _("Per column:")); gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 2); - clonetiler_table_attach (table, hb, 0, 1, 3); + table_attach (table, hb, 0, 1, 3); } { GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), _("Randomize:")); - clonetiler_table_attach (table, l, 0, 1, 4); + table_attach (table, l, 0, 1, 4); } return table; } -void CloneTiler::clonetiler_pick_switched(GtkToggleButton */*tb*/, gpointer data) +void CloneTiler::pick_switched(GtkToggleButton */*tb*/, gpointer data) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); guint v = GPOINTER_TO_INT (data); @@ -2744,7 +2744,7 @@ void CloneTiler::clonetiler_pick_switched(GtkToggleButton */*tb*/, gpointer data } -void CloneTiler::clonetiler_switch_to_create(GtkToggleButton * /*tb*/, GtkWidget *dlg) +void CloneTiler::switch_to_create(GtkToggleButton * /*tb*/, GtkWidget *dlg) { GtkWidget *rowscols = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "rowscols")); GtkWidget *widthheight = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "widthheight")); @@ -2761,7 +2761,7 @@ void CloneTiler::clonetiler_switch_to_create(GtkToggleButton * /*tb*/, GtkWidget } -void CloneTiler::clonetiler_switch_to_fill(GtkToggleButton * /*tb*/, GtkWidget *dlg) +void CloneTiler::switch_to_fill(GtkToggleButton * /*tb*/, GtkWidget *dlg) { GtkWidget *rowscols = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "rowscols")); GtkWidget *widthheight = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "widthheight")); @@ -2780,7 +2780,7 @@ void CloneTiler::clonetiler_switch_to_fill(GtkToggleButton * /*tb*/, GtkWidget * -void CloneTiler::clonetiler_fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u) +void CloneTiler::fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u) { gdouble const raw_dist = gtk_adjustment_get_value (adj); Inkscape::Util::Unit const *unit = u->getUnit(); @@ -2790,7 +2790,7 @@ void CloneTiler::clonetiler_fill_width_changed(GtkAdjustment *adj, Inkscape::UI: prefs->setDouble(prefs_path + "fillwidth", pixels); } -void CloneTiler::clonetiler_fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u) +void CloneTiler::fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u) { gdouble const raw_dist = gtk_adjustment_get_value (adj); Inkscape::Util::Unit const *unit = u->getUnit(); @@ -2800,7 +2800,7 @@ void CloneTiler::clonetiler_fill_height_changed(GtkAdjustment *adj, Inkscape::UI prefs->setDouble(prefs_path + "fillheight", pixels); } -void CloneTiler::clonetiler_unit_changed() +void CloneTiler::unit_changed() { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gdouble width_pixels = prefs->getDouble(prefs_path + "fillwidth"); @@ -2814,22 +2814,23 @@ void CloneTiler::clonetiler_unit_changed() gtk_adjustment_set_value(fill_height->gobj(), height_value); } -void CloneTiler::clonetiler_do_pick_toggled(GtkToggleButton *tb, GtkWidget *dlg) +void CloneTiler::do_pick_toggled(Gtk::ToggleButton *tb) { - GtkWidget *vvb = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "dotrace")); + GtkWidget *vvb = GTK_WIDGET(_dotrace); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setBool(prefs_path + "dotrace", gtk_toggle_button_get_active (tb)); + auto prefs = Inkscape::Preferences::get(); + auto active = tb->get_active(); + prefs->setBool(prefs_path + "dotrace", active); if (vvb) { - gtk_widget_set_sensitive (vvb, gtk_toggle_button_get_active (tb)); + gtk_widget_set_sensitive (vvb, active); } } void CloneTiler::show_page_trace() { gtk_notebook_set_current_page(GTK_NOTEBOOK(nb),6); - gtk_toggle_button_set_active ((GtkToggleButton *) b, false); + _b->set_active(false); } diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h index 9ad3fa878..e1c8bab35 100644 --- a/src/ui/dialog/clonetiler.h +++ b/src/ui/dialog/clonetiler.h @@ -16,6 +16,11 @@ #include "ui/widget/color-picker.h" #include "sp-root.h" +namespace Gtk { + class CheckButton; + class ToggleButton; +} + namespace Inkscape { namespace UI { @@ -34,45 +39,47 @@ public: void show_page_trace(); protected: - GtkWidget * clonetiler_new_tab(GtkWidget *nb, const gchar *label); - GtkWidget * clonetiler_table_x_y_rand(int values); - GtkWidget * clonetiler_spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent = false); - GtkWidget * clonetiler_checkbox(const char *tip, const char *attr); - void clonetiler_table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col); + GtkWidget * new_tab(GtkWidget *nb, const gchar *label); + GtkWidget * table_x_y_rand(int values); + GtkWidget * spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent = false); + GtkWidget * checkbox(const char *tip, const char *attr); + void table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col); - static void clonetiler_symgroup_changed(GtkComboBox *cb, gpointer /*data*/); + // TODO: Improve encapsulation by using SigC++ signal handling, and convert all of these into + // non-static member functions + static void symgroup_changed(GtkComboBox *cb, gpointer /*data*/); static void on_picker_color_changed(guint rgba); - static void clonetiler_trace_hide_tiled_clones_recursively(SPObject *from); - static void clonetiler_checkbox_toggled(GtkToggleButton *tb, gpointer *data); - static void clonetiler_pick_switched(GtkToggleButton */*tb*/, gpointer data); - static void clonetiler_do_pick_toggled(GtkToggleButton *tb, GtkWidget *dlg); - static void clonetiler_pick_to(GtkToggleButton *tb, gpointer data); - static void clonetiler_xy_changed(GtkAdjustment *adj, gpointer data); - static void clonetiler_fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u); - static void clonetiler_fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u); - void clonetiler_unit_changed(); - static void clonetiler_switch_to_create(GtkToggleButton */*tb*/, GtkWidget *dlg); - static void clonetiler_switch_to_fill(GtkToggleButton */*tb*/, GtkWidget *dlg); - static void clonetiler_keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/); - static void clonetiler_unclump(GtkWidget */*widget*/, void *); - static void clonetiler_reset(GtkWidget */*widget*/, GtkWidget *dlg); - static guint clonetiler_number_of_clones(SPObject *obj); - static void clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *original); - static guint32 clonetiler_trace_pick(Geom::Rect box); - static void clonetiler_trace_finish(); - static bool clonetiler_is_a_clone_of(SPObject *tile, SPObject *obj); + static void trace_hide_tiled_clones_recursively(SPObject *from); + static void checkbox_toggled(GtkToggleButton *tb, gpointer *data); + static void pick_switched(GtkToggleButton */*tb*/, gpointer data); + static void pick_to(GtkToggleButton *tb, gpointer data); + static void xy_changed(GtkAdjustment *adj, gpointer data); + static void fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u); + static void fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u); + static void switch_to_create(GtkToggleButton */*tb*/, GtkWidget *dlg); + static void switch_to_fill(GtkToggleButton */*tb*/, GtkWidget *dlg); + static void keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/); + static void unclump(GtkWidget */*widget*/, void *); + static void reset(GtkWidget */*widget*/, GtkWidget *dlg); + static guint number_of_clones(SPObject *obj); + static void trace_setup(SPDocument *doc, gdouble zoom, SPItem *original); + static guint32 trace_pick(Geom::Rect box); + static void trace_finish(); + static bool is_a_clone_of(SPObject *tile, SPObject *obj); static Geom::Rect transform_rect(Geom::Rect const &r, Geom::Affine const &m); static double randomize01(double val, double rand); - static void clonetiler_value_changed(GtkAdjustment *adj, gpointer data); - static void clonetiler_reset_recursive(GtkWidget *w); + static void value_changed(GtkAdjustment *adj, gpointer data); + static void reset_recursive(GtkWidget *w); void apply(); void change_selection(Inkscape::Selection *selection); + void do_pick_toggled(Gtk::ToggleButton *tb); void external_change(); void remove(bool do_undo = true); void on_remove_button_clicked() {remove();} + void unit_changed(); - static Geom::Affine clonetiler_get_transform( // symmetry group + static Geom::Affine get_transform( // symmetry group int type, // row, column @@ -113,8 +120,8 @@ private: CloneTiler(CloneTiler const &d); CloneTiler& operator=(CloneTiler const &d); + Gtk::CheckButton *_b; GtkWidget *nb; - GtkWidget *b; SPDesktop *desktop; DesktopTracker deskTrack; Inkscape::UI::Widget::ColorPicker *color_picker; -- cgit v1.2.3 From 93a6d057d8b8dac9e4d81d84511dbae60a958788 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Fri, 12 Aug 2016 00:31:53 +0100 Subject: CloneTiler: Further C++ification (bzr r15052) --- src/ui/dialog/clonetiler.cpp | 177 +++++++++++++++++++------------------------ src/ui/dialog/clonetiler.h | 17 +++-- 2 files changed, 88 insertions(+), 106 deletions(-) (limited to 'src') diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index 8bd5cd5f6..a9bec8227 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -25,6 +25,7 @@ #include #include +#include #include "desktop.h" @@ -766,7 +767,7 @@ CloneTiler::CloneTiler () : _b->set_active(old); _b->set_tooltip_text(_("For each clone/sprayed item, pick a value from the drawing in its location and apply it")); gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(_b->gobj()), FALSE, FALSE, 0); - _b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::do_pick_toggled),_b)); + _b->signal_toggled().connect(sigc::mem_fun(*this, &CloneTiler::do_pick_toggled)); } { @@ -967,9 +968,7 @@ CloneTiler::CloneTiler () : gtk_box_pack_start (GTK_BOX (mainbox), table, FALSE, FALSE, 0); { - auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); - gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); - _rowscols = hb; + _rowscols = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, VB_MARGIN)); { auto a = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0); @@ -979,7 +978,7 @@ CloneTiler::CloneTiler () : auto sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0); sb->set_tooltip_text (_("How many rows in the tiling")); sb->set_width_chars (7); - gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(sb->gobj()), TRUE, TRUE, 0); + _rowscols->pack_start(*sb, true, true, 0); // TODO: C++ification g_signal_connect(G_OBJECT(a->gobj()), "value_changed", @@ -987,10 +986,10 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = gtk_label_new (""); - gtk_label_set_markup (GTK_LABEL(l), "×"); - gtk_widget_set_halign(l, GTK_ALIGN_END); - gtk_box_pack_start (GTK_BOX (hb), l, TRUE, TRUE, 0); + auto l = Gtk::manage(new Gtk::Label("")); + l->set_markup("×"); + l->set_halign(Gtk::ALIGN_END); + _rowscols->pack_start(*l, true, true, 0); } { @@ -1001,20 +1000,18 @@ CloneTiler::CloneTiler () : auto sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0); sb->set_tooltip_text (_("How many columns in the tiling")); sb->set_width_chars (7); - gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(sb->gobj()), TRUE, TRUE, 0); + _rowscols->pack_start(*sb, true, true, 0); // TODO: C++ification g_signal_connect(G_OBJECT(a->gobj()), "value_changed", G_CALLBACK(xy_changed), (gpointer) "imax"); } - table_attach (table, hb, 0.0, 1, 2); + table_attach (table, GTK_WIDGET(_rowscols->gobj()), 0.0, 1, 2); } { - auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); - gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); - _widthheight = hb; + _widthheight = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, VB_MARGIN)); // unitmenu unit_menu = new Inkscape::UI::Widget::UnitMenu(); @@ -1035,16 +1032,14 @@ CloneTiler::CloneTiler () : e->set_tooltip_text (_("Width of the rectangle to be filled")); e->set_width_chars (7); e->set_digits (4); - gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(e->gobj()), TRUE, TRUE, 0); - // TODO: C++ification - g_signal_connect(G_OBJECT(fill_width->gobj()), "value_changed", - G_CALLBACK(fill_width_changed), unit_menu); + _widthheight->pack_start(*e, true, true, 0); + fill_width->signal_value_changed().connect(sigc::mem_fun(*this, &CloneTiler::fill_width_changed)); } { - GtkWidget *l = gtk_label_new (""); - gtk_label_set_markup (GTK_LABEL(l), "×"); - gtk_widget_set_halign(l, GTK_ALIGN_END); - gtk_box_pack_start (GTK_BOX (hb), l, TRUE, TRUE, 0); + auto l = Gtk::manage(new Gtk::Label("")); + l->set_markup("×"); + l->set_halign(Gtk::ALIGN_END); + _widthheight->pack_start(*l, true, true, 0); } { @@ -1060,56 +1055,53 @@ CloneTiler::CloneTiler () : e->set_tooltip_text (_("Height of the rectangle to be filled")); e->set_width_chars (7); e->set_digits (4); - gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(e->gobj()), TRUE, TRUE, 0); - // TODO: C++ification - g_signal_connect(G_OBJECT(fill_height->gobj()), "value_changed", - G_CALLBACK(fill_height_changed), unit_menu); + _widthheight->pack_start(*e, true, true, 0); + fill_height->signal_value_changed().connect(sigc::mem_fun(*this, &CloneTiler::fill_height_changed)); } - gtk_box_pack_start (GTK_BOX (hb), (GtkWidget*) unit_menu->gobj(), TRUE, TRUE, 0); - table_attach (table, hb, 0.0, 2, 2); + _widthheight->pack_start(*unit_menu, true, true, 0); + table_attach (table, GTK_WIDGET(_widthheight->gobj()), 0.0, 2, 2); } // Switch - GtkWidget* radio; + Gtk::RadioButtonGroup rb_group; { - radio = gtk_radio_button_new_with_label (NULL, _("Rows, columns: ")); - gtk_widget_set_tooltip_text (radio, _("Create the specified number of rows and columns")); - table_attach (table, radio, 0.0, 1, 1); - g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (switch_to_create), (gpointer) this); - } - if (!prefs->getBool(prefs_path + "fillrect")) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); - gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (radio)); + auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("Rows, columns: "))); + radio->set_tooltip_text(_("Create the specified number of rows and columns")); + table_attach (table, GTK_WIDGET(radio->gobj()), 0.0, 1, 1); + radio->signal_toggled().connect(sigc::mem_fun(*this, &CloneTiler::switch_to_create)); + + if (!prefs->getBool(prefs_path + "fillrect")) { + radio->set_active(true); + } } { - radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("Width, height: ")); - gtk_widget_set_tooltip_text (radio, _("Fill the specified width and height with the tiling")); - table_attach (table, radio, 0.0, 2, 1); - g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (switch_to_fill), (gpointer) this); - } - if (prefs->getBool(prefs_path + "fillrect")) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); - gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (radio)); + auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("Width, height: "))); + radio->set_tooltip_text(_("Fill the specified width and height with the tiling")); + table_attach (table, GTK_WIDGET(radio->gobj()), 0.0, 2, 1); + radio->signal_toggled().connect(sigc::mem_fun(*this, &CloneTiler::switch_to_fill)); + + if (prefs->getBool(prefs_path + "fillrect")) { + radio->set_active(true); + } } } // Use saved pos { - auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); - gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); - gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); - - GtkWidget *b = gtk_check_button_new_with_label (_("Use saved size and position of the tile")); - bool keepbbox = prefs->getBool(prefs_path + "keepbbox", true); - gtk_toggle_button_set_active ((GtkToggleButton *) b, keepbbox); - gtk_widget_set_tooltip_text (b, _("Pretend that the size and position of the tile are the same as the last time you tiled it (if any), instead of using the current size")); - gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0); - - g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(keep_bbox_toggled), NULL); + auto hb = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, VB_MARGIN)); + gtk_box_pack_start (GTK_BOX (mainbox), GTK_WIDGET(hb->gobj()), FALSE, FALSE, 0); + + _cb_keep_bbox = Gtk::manage(new Gtk::CheckButton(_("Use saved size and position of the tile"))); + auto keepbbox = prefs->getBool(prefs_path + "keepbbox", true); + _cb_keep_bbox->set_active(keepbbox); + _cb_keep_bbox->set_tooltip_text(_("Pretend that the size and position of the tile are the same " + "as the last time you tiled it (if any), instead of using the " + "current size")); + hb->pack_start(*_cb_keep_bbox, false, false, 0); + _cb_keep_bbox->signal_toggled().connect(sigc::mem_fun(*this, &CloneTiler::keep_bbox_toggled)); } // Statusbar @@ -2631,10 +2623,10 @@ void CloneTiler::xy_changed(GtkAdjustment *adj, gpointer data) prefs->setInt(prefs_path + pref, (int) floor(gtk_adjustment_get_value (adj) + 0.5)); } -void CloneTiler::keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/) +void CloneTiler::keep_bbox_toggled() { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setBool(prefs_path + "keepbbox", gtk_toggle_button_get_active(tb)); + auto prefs = Inkscape::Preferences::get(); + prefs->setBool(prefs_path + "keepbbox", _cb_keep_bbox->get_active()); } void CloneTiler::pick_to(GtkToggleButton *tb, gpointer data) @@ -2744,59 +2736,50 @@ void CloneTiler::pick_switched(GtkToggleButton */*tb*/, gpointer data) } -void CloneTiler::switch_to_create(GtkToggleButton * /*tb*/, GtkWidget *dlg) +void CloneTiler::switch_to_create() { - GtkWidget *rowscols = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "rowscols")); - GtkWidget *widthheight = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "widthheight")); - - if (rowscols) { - gtk_widget_set_sensitive (rowscols, TRUE); + if (_rowscols) { + _rowscols->set_sensitive(true); } - if (widthheight) { - gtk_widget_set_sensitive (widthheight, FALSE); + if (_widthheight) { + _widthheight->set_sensitive(false); } - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + auto prefs = Inkscape::Preferences::get(); prefs->setBool(prefs_path + "fillrect", false); } -void CloneTiler::switch_to_fill(GtkToggleButton * /*tb*/, GtkWidget *dlg) +void CloneTiler::switch_to_fill() { - GtkWidget *rowscols = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "rowscols")); - GtkWidget *widthheight = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "widthheight")); - - if (rowscols) { - gtk_widget_set_sensitive (rowscols, FALSE); + if (_rowscols) { + _rowscols->set_sensitive(false); } - if (widthheight) { - gtk_widget_set_sensitive (widthheight, TRUE); + if (_widthheight) { + _widthheight->set_sensitive(true); } - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + auto prefs = Inkscape::Preferences::get(); prefs->setBool(prefs_path + "fillrect", true); } - - - -void CloneTiler::fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u) +void CloneTiler::fill_width_changed() { - gdouble const raw_dist = gtk_adjustment_get_value (adj); - Inkscape::Util::Unit const *unit = u->getUnit(); - gdouble const pixels = Inkscape::Util::Quantity::convert(raw_dist, unit, "px"); + auto const raw_dist = fill_width->get_value(); + auto const unit = unit_menu->getUnit(); + auto const pixels = Inkscape::Util::Quantity::convert(raw_dist, unit, "px"); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + auto prefs = Inkscape::Preferences::get(); prefs->setDouble(prefs_path + "fillwidth", pixels); } -void CloneTiler::fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u) +void CloneTiler::fill_height_changed() { - gdouble const raw_dist = gtk_adjustment_get_value (adj); - Inkscape::Util::Unit const *unit = u->getUnit(); - gdouble const pixels = Inkscape::Util::Quantity::convert(raw_dist, unit, "px"); + auto const raw_dist = fill_height->get_value(); + auto const unit = unit_menu->getUnit(); + auto const pixels = Inkscape::Util::Quantity::convert(raw_dist, unit, "px"); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + auto prefs = Inkscape::Preferences::get(); prefs->setDouble(prefs_path + "fillheight", pixels); } @@ -2814,16 +2797,14 @@ void CloneTiler::unit_changed() gtk_adjustment_set_value(fill_height->gobj(), height_value); } -void CloneTiler::do_pick_toggled(Gtk::ToggleButton *tb) +void CloneTiler::do_pick_toggled() { - GtkWidget *vvb = GTK_WIDGET(_dotrace); - - auto prefs = Inkscape::Preferences::get(); - auto active = tb->get_active(); + auto prefs = Inkscape::Preferences::get(); + auto active = _b->get_active(); prefs->setBool(prefs_path + "dotrace", active); - if (vvb) { - gtk_widget_set_sensitive (vvb, active); + if (_dotrace) { + gtk_widget_set_sensitive (_dotrace, active); } } diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h index e1c8bab35..70a22d3d0 100644 --- a/src/ui/dialog/clonetiler.h +++ b/src/ui/dialog/clonetiler.h @@ -54,11 +54,9 @@ protected: static void pick_switched(GtkToggleButton */*tb*/, gpointer data); static void pick_to(GtkToggleButton *tb, gpointer data); static void xy_changed(GtkAdjustment *adj, gpointer data); - static void fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u); - static void fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u); - static void switch_to_create(GtkToggleButton */*tb*/, GtkWidget *dlg); - static void switch_to_fill(GtkToggleButton */*tb*/, GtkWidget *dlg); - static void keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/); + void switch_to_create(); + void switch_to_fill(); + void keep_bbox_toggled(); static void unclump(GtkWidget */*widget*/, void *); static void reset(GtkWidget */*widget*/, GtkWidget *dlg); static guint number_of_clones(SPObject *obj); @@ -73,8 +71,10 @@ protected: void apply(); void change_selection(Inkscape::Selection *selection); - void do_pick_toggled(Gtk::ToggleButton *tb); + void do_pick_toggled(); void external_change(); + void fill_width_changed(); + void fill_height_changed(); void remove(bool do_undo = true); void on_remove_button_clicked() {remove();} void unit_changed(); @@ -121,6 +121,7 @@ private: CloneTiler& operator=(CloneTiler const &d); Gtk::CheckButton *_b; + Gtk::CheckButton *_cb_keep_bbox; GtkWidget *nb; SPDesktop *desktop; DesktopTracker deskTrack; @@ -153,8 +154,8 @@ private: GtkWidget *_buttons_on_tiles; GtkWidget *_dotrace; GtkWidget *_status; - GtkWidget *_rowscols; - GtkWidget *_widthheight; + Gtk::Box *_rowscols; + Gtk::Box *_widthheight; }; -- cgit v1.2.3 From ded71e7f2330ae5abbb0b09e12f89a8fefc2820a Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Fri, 12 Aug 2016 00:45:47 +0100 Subject: CloneTiler: Further C++ification (bzr r15053) --- src/ui/dialog/clonetiler.cpp | 18 +++++++++--------- src/ui/dialog/clonetiler.h | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index a9bec8227..c27d5d35a 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -1141,10 +1141,10 @@ CloneTiler::CloneTiler () : // diagrams on the left in the following screenshot: // http://www.inkscape.org/screenshots/gallery/inkscape-0.42-CVS-tiles-unclump.png // So unclumping is the process of spreading a number of objects out more evenly. - GtkWidget *b = gtk_button_new_with_mnemonic (_(" _Unclump ")); - gtk_widget_set_tooltip_text (b, _("Spread out clones to reduce clumping; can be applied repeatedly")); - g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (unclump), NULL); - gtk_box_pack_end (GTK_BOX (sb), b, FALSE, FALSE, 0); + auto b = Gtk::manage(new Gtk::Button(_(" _Unclump "), true)); + b->set_tooltip_text(_("Spread out clones to reduce clumping; can be applied repeatedly")); + b->signal_clicked().connect(sigc::mem_fun(*this, &CloneTiler::unclump)); + gtk_box_pack_end (GTK_BOX (sb), GTK_WIDGET(b->gobj()), FALSE, FALSE, 0); } { @@ -1948,14 +1948,14 @@ void CloneTiler::trace_finish() } } -void CloneTiler::unclump(GtkWidget */*widget*/, void *) +void CloneTiler::unclump() { - SPDesktop *desktop = SP_ACTIVE_DESKTOP; + auto desktop = SP_ACTIVE_DESKTOP; if (desktop == NULL) { return; } - Inkscape::Selection *selection = desktop->getSelection(); + auto selection = desktop->getSelection(); // check if something is selected if (selection->isEmpty() || boost::distance(selection->items()) > 1) { @@ -1963,8 +1963,8 @@ void CloneTiler::unclump(GtkWidget */*widget*/, void *) return; } - SPObject *obj = selection->singleItem(); - SPObject *parent = obj->parent; + auto obj = selection->singleItem(); + auto parent = obj->parent; std::vector to_unclump; // not including the original diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h index 70a22d3d0..04f676800 100644 --- a/src/ui/dialog/clonetiler.h +++ b/src/ui/dialog/clonetiler.h @@ -57,7 +57,7 @@ protected: void switch_to_create(); void switch_to_fill(); void keep_bbox_toggled(); - static void unclump(GtkWidget */*widget*/, void *); + void unclump(); static void reset(GtkWidget */*widget*/, GtkWidget *dlg); static guint number_of_clones(SPObject *obj); static void trace_setup(SPDocument *doc, gdouble zoom, SPItem *original); -- cgit v1.2.3 From dffaf2ab2ab1cd1ca21c0ff9e9cc9f077faf17f1 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Fri, 12 Aug 2016 21:10:12 +0100 Subject: CloneTiler: Replace all remaining g_signal usage (bzr r15055) --- src/ui/dialog/clonetiler.cpp | 425 +++++++++++++++++++++---------------------- src/ui/dialog/clonetiler.h | 87 +++++---- 2 files changed, 251 insertions(+), 261 deletions(-) (limited to 'src') diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index c27d5d35a..8e9d3dbbf 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -25,6 +25,8 @@ #include #include +#include +#include #include #include "desktop.h" @@ -66,7 +68,6 @@ static unsigned trace_visionkey; static gdouble trace_zoom; static SPDocument *trace_doc = NULL; - CloneTiler::CloneTiler () : UI::Widget::Panel ("", "/dialogs/clonetiler/", SP_VERB_DIALOG_CLONETILER), desktop(NULL), @@ -100,7 +101,7 @@ CloneTiler::CloneTiler () : */ struct SymGroups { gint group; - gchar const *label; + Glib::ustring label; } const sym_groups[] = { // TRANSLATORS: "translation" means "shift" / "displacement" here. {TILE_P1, _("P1: simple translation")}, @@ -126,33 +127,27 @@ CloneTiler::CloneTiler () : gint current = prefs->getInt(prefs_path + "symmetrygroup", 0); - // Create a list structure containing all the data to be displayed in - // the symmetry group combo box. - GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING); - GtkTreeIter iter; - - for (unsigned j = 0; j < G_N_ELEMENTS(sym_groups); ++j) { - SymGroups const &sg = sym_groups[j]; + // Add a new combo box widget with the list of symmetry groups to the vbox + auto combo = Gtk::manage(new Gtk::ComboBoxText()); + combo->set_tooltip_text(_("Select one of the 17 symmetry groups for the tiling")); - // Add the description of the symgroup to a new row - gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, 0, sg.label, -1); - } + // Hack to add markup support + auto cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(combo->gobj())); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo->gobj()), + GTK_CELL_RENDERER(cell_list->data), + "markup", 0, NULL); - // Add a new combo box widget with the list of symmetry groups to the vbox - GtkWidget *combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store)); - gtk_widget_set_tooltip_text (combo, _("Select one of the 17 symmetry groups for the tiling")); - gtk_box_pack_start (GTK_BOX (vb), combo, FALSE, FALSE, SB_MARGIN); + for (unsigned j = 0; j < G_N_ELEMENTS(sym_groups); ++j) { + SymGroups const &sg = sym_groups[j]; - // Specify the rendering of data from the list in a combo box cell - GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); - gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, FALSE); - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer, "markup", 0, NULL); + // Add the description of the symgroup to a new row + combo->append(sg.label); + } - gtk_combo_box_set_active (GTK_COMBO_BOX (combo), current); + gtk_box_pack_start (GTK_BOX (vb), GTK_WIDGET(combo->gobj()), FALSE, FALSE, SB_MARGIN); - g_signal_connect(G_OBJECT(combo), "changed", - G_CALLBACK(symgroup_changed), NULL); + combo->set_active(current); + combo->signal_changed().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::symgroup_changed), combo)); } table_row_labels = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); @@ -175,7 +170,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( // xgettext:no-c-format _("Horizontal shift per row (in % of tile width)"), "shiftx_per_j", -10000, 10000, "%"); @@ -183,7 +178,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( // xgettext:no-c-format _("Horizontal shift per column (in % of tile width)"), "shiftx_per_i", -10000, 10000, "%"); @@ -191,7 +186,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox (_("Randomize the horizontal shift by this percentage"), "shiftx_rand", + auto l = spinbox (_("Randomize the horizontal shift by this percentage"), "shiftx_rand", 0, 1000, "%"); table_attach (table, l, 0, 2, 4); } @@ -207,7 +202,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( // xgettext:no-c-format _("Vertical shift per row (in % of tile height)"), "shifty_per_j", -10000, 10000, "%"); @@ -215,7 +210,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( // xgettext:no-c-format _("Vertical shift per column (in % of tile height)"), "shifty_per_i", -10000, 10000, "%"); @@ -223,7 +218,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( _("Randomize the vertical shift by this percentage"), "shifty_rand", 0, 1000, "%"); table_attach (table, l, 0, 3, 4); @@ -238,14 +233,14 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( _("Whether rows are spaced evenly (1), converge (<1) or diverge (>1)"), "shifty_exp", 0, 10, "", true); table_attach (table, l, 0, 4, 2); } { - GtkWidget *l = spinbox ( + auto l = spinbox ( _("Whether columns are spaced evenly (1), converge (<1) or diverge (>1)"), "shiftx_exp", 0, 10, "", true); table_attach (table, l, 0, 4, 3); @@ -260,12 +255,12 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = checkbox (_("Alternate the sign of shifts for each row"), "shifty_alternate"); + auto l = checkbox (_("Alternate the sign of shifts for each row"), "shifty_alternate"); table_attach (table, l, 0, 5, 2); } { - GtkWidget *l = checkbox (_("Alternate the sign of shifts for each column"), "shiftx_alternate"); + auto l = checkbox (_("Alternate the sign of shifts for each column"), "shiftx_alternate"); table_attach (table, l, 0, 5, 3); } @@ -278,12 +273,12 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = checkbox (_("Cumulate the shifts for each row"), "shifty_cumulate"); + auto l = checkbox (_("Cumulate the shifts for each row"), "shifty_cumulate"); table_attach (table, l, 0, 6, 2); } { - GtkWidget *l = checkbox (_("Cumulate the shifts for each column"), "shiftx_cumulate"); + auto l = checkbox (_("Cumulate the shifts for each column"), "shiftx_cumulate"); table_attach (table, l, 0, 6, 3); } @@ -296,12 +291,12 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = checkbox (_("Exclude tile height in shift"), "shifty_excludeh"); + auto l = checkbox (_("Exclude tile height in shift"), "shifty_excludeh"); table_attach (table, l, 0, 7, 2); } { - GtkWidget *l = checkbox (_("Exclude tile width in shift"), "shiftx_excludew"); + auto l = checkbox (_("Exclude tile width in shift"), "shiftx_excludew"); table_attach (table, l, 0, 7, 3); } @@ -324,7 +319,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( // xgettext:no-c-format _("Horizontal scale per row (in % of tile width)"), "scalex_per_j", -100, 1000, "%"); @@ -332,7 +327,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( // xgettext:no-c-format _("Horizontal scale per column (in % of tile width)"), "scalex_per_i", -100, 1000, "%"); @@ -340,7 +335,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox (_("Randomize the horizontal scale by this percentage"), "scalex_rand", + auto l = spinbox (_("Randomize the horizontal scale by this percentage"), "scalex_rand", 0, 1000, "%"); table_attach (table, l, 0, 2, 4); } @@ -354,7 +349,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( // xgettext:no-c-format _("Vertical scale per row (in % of tile height)"), "scaley_per_j", -100, 1000, "%"); @@ -362,7 +357,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( // xgettext:no-c-format _("Vertical scale per column (in % of tile height)"), "scaley_per_i", -100, 1000, "%"); @@ -370,7 +365,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox (_("Randomize the vertical scale by this percentage"), "scaley_rand", + auto l = spinbox (_("Randomize the vertical scale by this percentage"), "scaley_rand", 0, 1000, "%"); table_attach (table, l, 0, 3, 4); } @@ -384,13 +379,13 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox (_("Whether row scaling is uniform (1), converge (<1) or diverge (>1)"), "scaley_exp", + auto l = spinbox (_("Whether row scaling is uniform (1), converge (<1) or diverge (>1)"), "scaley_exp", 0, 10, "", true); table_attach (table, l, 0, 4, 2); } { - GtkWidget *l = spinbox (_("Whether column scaling is uniform (1), converge (<1) or diverge (>1)"), "scalex_exp", + auto l = spinbox (_("Whether column scaling is uniform (1), converge (<1) or diverge (>1)"), "scalex_exp", 0, 10, "", true); table_attach (table, l, 0, 4, 3); } @@ -404,13 +399,13 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scaley_log", + auto l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scaley_log", 0, 10, "", false); table_attach (table, l, 0, 5, 2); } { - GtkWidget *l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scalex_log", + auto l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scalex_log", 0, 10, "", false); table_attach (table, l, 0, 5, 3); } @@ -424,12 +419,12 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = checkbox (_("Alternate the sign of scales for each row"), "scaley_alternate"); + auto l = checkbox (_("Alternate the sign of scales for each row"), "scaley_alternate"); table_attach (table, l, 0, 6, 2); } { - GtkWidget *l = checkbox (_("Alternate the sign of scales for each column"), "scalex_alternate"); + auto l = checkbox (_("Alternate the sign of scales for each column"), "scalex_alternate"); table_attach (table, l, 0, 6, 3); } @@ -442,12 +437,12 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = checkbox (_("Cumulate the scales for each row"), "scaley_cumulate"); + auto l = checkbox (_("Cumulate the scales for each row"), "scaley_cumulate"); table_attach (table, l, 0, 7, 2); } { - GtkWidget *l = checkbox (_("Cumulate the scales for each column"), "scalex_cumulate"); + auto l = checkbox (_("Cumulate the scales for each column"), "scalex_cumulate"); table_attach (table, l, 0, 7, 3); } @@ -470,7 +465,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( // xgettext:no-c-format _("Rotate tiles by this angle for each row"), "rotate_per_j", -180, 180, "°"); @@ -478,7 +473,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox ( + auto l = spinbox ( // xgettext:no-c-format _("Rotate tiles by this angle for each column"), "rotate_per_i", -180, 180, "°"); @@ -486,7 +481,7 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox (_("Randomize the rotation angle by this percentage"), "rotate_rand", + auto l = spinbox (_("Randomize the rotation angle by this percentage"), "rotate_rand", 0, 100, "%"); table_attach (table, l, 0, 2, 4); } @@ -500,12 +495,12 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = checkbox (_("Alternate the rotation direction for each row"), "rotate_alternatej"); + auto l = checkbox (_("Alternate the rotation direction for each row"), "rotate_alternatej"); table_attach (table, l, 0, 3, 2); } { - GtkWidget *l = checkbox (_("Alternate the rotation direction for each column"), "rotate_alternatei"); + auto l = checkbox (_("Alternate the rotation direction for each column"), "rotate_alternatei"); table_attach (table, l, 0, 3, 3); } @@ -518,12 +513,12 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = checkbox (_("Cumulate the rotation for each row"), "rotate_cumulatej"); + auto l = checkbox (_("Cumulate the rotation for each row"), "rotate_cumulatej"); table_attach (table, l, 0, 4, 2); } { - GtkWidget *l = checkbox (_("Cumulate the rotation for each column"), "rotate_cumulatei"); + auto l = checkbox (_("Cumulate the rotation for each column"), "rotate_cumulatei"); table_attach (table, l, 0, 4, 3); } @@ -547,19 +542,19 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox (_("Blur tiles by this percentage for each row"), "blur_per_j", + auto l = spinbox (_("Blur tiles by this percentage for each row"), "blur_per_j", 0, 100, "%"); table_attach (table, l, 0, 2, 2); } { - GtkWidget *l = spinbox (_("Blur tiles by this percentage for each column"), "blur_per_i", + auto l = spinbox (_("Blur tiles by this percentage for each column"), "blur_per_i", 0, 100, "%"); table_attach (table, l, 0, 2, 3); } { - GtkWidget *l = spinbox (_("Randomize the tile blur by this percentage"), "blur_rand", + auto l = spinbox (_("Randomize the tile blur by this percentage"), "blur_rand", 0, 100, "%"); table_attach (table, l, 0, 2, 4); } @@ -573,12 +568,12 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = checkbox (_("Alternate the sign of blur change for each row"), "blur_alternatej"); + auto l = checkbox (_("Alternate the sign of blur change for each row"), "blur_alternatej"); table_attach (table, l, 0, 3, 2); } { - GtkWidget *l = checkbox (_("Alternate the sign of blur change for each column"), "blur_alternatei"); + auto l = checkbox (_("Alternate the sign of blur change for each column"), "blur_alternatei"); table_attach (table, l, 0, 3, 3); } @@ -593,19 +588,19 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox (_("Decrease tile opacity by this percentage for each row"), "opacity_per_j", + auto l = spinbox (_("Decrease tile opacity by this percentage for each row"), "opacity_per_j", 0, 100, "%"); table_attach (table, l, 0, 4, 2); } { - GtkWidget *l = spinbox (_("Decrease tile opacity by this percentage for each column"), "opacity_per_i", + auto l = spinbox (_("Decrease tile opacity by this percentage for each column"), "opacity_per_i", 0, 100, "%"); table_attach (table, l, 0, 4, 3); } { - GtkWidget *l = spinbox (_("Randomize the tile opacity by this percentage"), "opacity_rand", + auto l = spinbox (_("Randomize the tile opacity by this percentage"), "opacity_rand", 0, 100, "%"); table_attach (table, l, 0, 4, 4); } @@ -619,12 +614,12 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = checkbox (_("Alternate the sign of opacity change for each row"), "opacity_alternatej"); + auto l = checkbox (_("Alternate the sign of opacity change for each row"), "opacity_alternatej"); table_attach (table, l, 0, 5, 2); } { - GtkWidget *l = checkbox (_("Alternate the sign of opacity change for each column"), "opacity_alternatei"); + auto l = checkbox (_("Alternate the sign of opacity change for each column"), "opacity_alternatei"); table_attach (table, l, 0, 5, 3); } } @@ -643,7 +638,7 @@ CloneTiler::CloneTiler () : guint32 rgba = 0x000000ff | sp_svg_read_color (prefs->getString(prefs_path + "initial_color").data(), 0x000000ff); color_picker = new Inkscape::UI::Widget::ColorPicker (*new Glib::ustring(_("Initial color of tiled clones")), *new Glib::ustring(_("Initial color for clones (works only if the original has unset fill or stroke or on spray tool in copy mode)")), rgba, false); - color_changed_connection = color_picker->connectChanged (sigc::ptr_fun(on_picker_color_changed)); + color_changed_connection = color_picker->connectChanged(sigc::mem_fun(*this, &CloneTiler::on_picker_color_changed)); gtk_box_pack_start (GTK_BOX (hb), reinterpret_cast(color_picker->gobj()), FALSE, FALSE, 0); @@ -663,19 +658,19 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox (_("Change the tile hue by this percentage for each row"), "hue_per_j", + auto l = spinbox (_("Change the tile hue by this percentage for each row"), "hue_per_j", -100, 100, "%"); table_attach (table, l, 0, 2, 2); } { - GtkWidget *l = spinbox (_("Change the tile hue by this percentage for each column"), "hue_per_i", + auto l = spinbox (_("Change the tile hue by this percentage for each column"), "hue_per_i", -100, 100, "%"); table_attach (table, l, 0, 2, 3); } { - GtkWidget *l = spinbox (_("Randomize the tile hue by this percentage"), "hue_rand", + auto l = spinbox (_("Randomize the tile hue by this percentage"), "hue_rand", 0, 100, "%"); table_attach (table, l, 0, 2, 4); } @@ -690,19 +685,19 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox (_("Change the color saturation by this percentage for each row"), "saturation_per_j", + auto l = spinbox (_("Change the color saturation by this percentage for each row"), "saturation_per_j", -100, 100, "%"); table_attach (table, l, 0, 3, 2); } { - GtkWidget *l = spinbox (_("Change the color saturation by this percentage for each column"), "saturation_per_i", + auto l = spinbox (_("Change the color saturation by this percentage for each column"), "saturation_per_i", -100, 100, "%"); table_attach (table, l, 0, 3, 3); } { - GtkWidget *l = spinbox (_("Randomize the color saturation by this percentage"), "saturation_rand", + auto l = spinbox (_("Randomize the color saturation by this percentage"), "saturation_rand", 0, 100, "%"); table_attach (table, l, 0, 3, 4); } @@ -716,19 +711,19 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = spinbox (_("Change the color lightness by this percentage for each row"), "lightness_per_j", + auto l = spinbox (_("Change the color lightness by this percentage for each row"), "lightness_per_j", -100, 100, "%"); table_attach (table, l, 0, 4, 2); } { - GtkWidget *l = spinbox (_("Change the color lightness by this percentage for each column"), "lightness_per_i", + auto l = spinbox (_("Change the color lightness by this percentage for each column"), "lightness_per_i", -100, 100, "%"); table_attach (table, l, 0, 4, 3); } { - GtkWidget *l = spinbox (_("Randomize the color lightness by this percentage"), "lightness_rand", + auto l = spinbox (_("Randomize the color lightness by this percentage"), "lightness_rand", 0, 100, "%"); table_attach (table, l, 0, 4, 4); } @@ -742,12 +737,12 @@ CloneTiler::CloneTiler () : } { - GtkWidget *l = checkbox (_("Alternate the sign of color changes for each row"), "color_alternatej"); + auto l = checkbox (_("Alternate the sign of color changes for each row"), "color_alternatej"); table_attach (table, l, 0, 5, 2); } { - GtkWidget *l = checkbox (_("Alternate the sign of color changes for each column"), "color_alternatei"); + auto l = checkbox (_("Alternate the sign of color changes for each column"), "color_alternatei"); table_attach (table, l, 0, 5, 3); } @@ -785,71 +780,62 @@ CloneTiler::CloneTiler () : gtk_grid_set_column_spacing(GTK_GRID(table), 6); gtk_container_add(GTK_CONTAINER(frame), table); - - GtkWidget* radio; + Gtk::RadioButtonGroup rb_group; { - radio = gtk_radio_button_new_with_label (NULL, _("Color")); - gtk_widget_set_tooltip_text (radio, _("Pick the visible color and opacity")); - table_attach (table, radio, 0.0, 1, 1); - g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_COLOR)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_COLOR); + auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("Color"))); + radio->set_tooltip_text(_("Pick the visible color and opacity")); + table_attach(table, radio, 0.0, 1, 1); + radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_COLOR)); + radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_COLOR); } { - radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("Opacity")); - gtk_widget_set_tooltip_text (radio, _("Pick the total accumulated opacity")); + auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("Opacity"))); + radio->set_tooltip_text(_("Pick the total accumulated opacity")); table_attach (table, radio, 0.0, 2, 1); - g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_OPACITY)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_OPACITY); + radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_OPACITY)); + radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_OPACITY); } { - radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("R")); - gtk_widget_set_tooltip_text (radio, _("Pick the Red component of the color")); + auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("R"))); + radio->set_tooltip_text(_("Pick the Red component of the color")); table_attach (table, radio, 0.0, 1, 2); - g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_R)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_R); + radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_R)); + radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_R); } { - radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("G")); - gtk_widget_set_tooltip_text (radio, _("Pick the Green component of the color")); + auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("G"))); + radio->set_tooltip_text(_("Pick the Green component of the color")); table_attach (table, radio, 0.0, 2, 2); - g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_G)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_G); + radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_G)); + radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_G); } { - radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("B")); - gtk_widget_set_tooltip_text (radio, _("Pick the Blue component of the color")); + auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("B"))); + radio->set_tooltip_text(_("Pick the Blue component of the color")); table_attach (table, radio, 0.0, 3, 2); - g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_B)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_B); + radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_B)); + radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_B); } { - radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color hue", "H")); - gtk_widget_set_tooltip_text (radio, _("Pick the hue of the color")); + auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, C_("Clonetiler color hue", "H"))); + radio->set_tooltip_text(_("Pick the hue of the color")); table_attach (table, radio, 0.0, 1, 3); - g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_H)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_H); + radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_H)); + radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_H); } { - radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color saturation", "S")); - gtk_widget_set_tooltip_text (radio, _("Pick the saturation of the color")); + auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, C_("Clonetiler color saturation", "S"))); + radio->set_tooltip_text(_("Pick the saturation of the color")); table_attach (table, radio, 0.0, 2, 3); - g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_S)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_S); + radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_S)); + radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_S); } { - radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color lightness", "L")); - gtk_widget_set_tooltip_text (radio, _("Pick the lightness of the color")); + auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, C_("Clonetiler color lightness", "L"))); + radio->set_tooltip_text(_("Pick the lightness of the color")); table_attach (table, radio, 0.0, 3, 3); - g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_L)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_L); + radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_L)); + radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_L); } } @@ -870,7 +856,7 @@ CloneTiler::CloneTiler () : table_attach (table, l, 1.0, 1, 1); } { - GtkWidget *l = spinbox (_("Shift the mid-range of the picked value upwards (>0) or downwards (<0)"), "gamma_picked", + auto l = spinbox (_("Shift the mid-range of the picked value upwards (>0) or downwards (<0)"), "gamma_picked", -10, 10, ""); table_attach (table, l, 0.0, 1, 2); } @@ -881,7 +867,7 @@ CloneTiler::CloneTiler () : table_attach (table, l, 1.0, 1, 3); } { - GtkWidget *l = spinbox (_("Randomize the picked value by this percentage"), "rand_picked", + auto l = spinbox (_("Randomize the picked value by this percentage"), "rand_picked", 0, 100, "%"); table_attach (table, l, 0.0, 1, 4); } @@ -892,7 +878,7 @@ CloneTiler::CloneTiler () : table_attach (table, l, 1.0, 2, 1); } { - GtkWidget *l = checkbox (_("Invert the picked value"), "invert_picked"); + auto l = checkbox (_("Invert the picked value"), "invert_picked"); table_attach (table, l, 0.0, 2, 2); } } @@ -907,43 +893,39 @@ CloneTiler::CloneTiler () : gtk_container_add(GTK_CONTAINER(frame), table); { - GtkWidget *b = gtk_check_button_new_with_label (_("Presence")); + auto b = Gtk::manage(new Gtk::CheckButton(_("Presence"))); bool old = prefs->getBool(prefs_path + "pick_to_presence", true); - gtk_toggle_button_set_active ((GtkToggleButton *) b, old); - gtk_widget_set_tooltip_text (b, _("Each clone is created with the probability determined by the picked value in that point")); + b->set_active(old); + b->set_tooltip_text(_("Each clone is created with the probability determined by the picked value in that point")); table_attach (table, b, 0.0, 1, 1); - g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(pick_to), (gpointer) "pick_to_presence"); + b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_to), b, "pick_to_presence")); } { - GtkWidget *b = gtk_check_button_new_with_label (_("Size")); + auto b = Gtk::manage(new Gtk::CheckButton(_("Size"))); bool old = prefs->getBool(prefs_path + "pick_to_size"); - gtk_toggle_button_set_active ((GtkToggleButton *) b, old); - gtk_widget_set_tooltip_text (b, _("Each clone's size is determined by the picked value in that point")); + b->set_active(old); + b->set_tooltip_text(_("Each clone's size is determined by the picked value in that point")); table_attach (table, b, 0.0, 2, 1); - g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(pick_to), (gpointer) "pick_to_size"); + b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_to), b, "pick_to_size")); } { - GtkWidget *b = gtk_check_button_new_with_label (_("Color")); + auto b = Gtk::manage(new Gtk::CheckButton(_("Color"))); bool old = prefs->getBool(prefs_path + "pick_to_color", 0); - gtk_toggle_button_set_active ((GtkToggleButton *) b, old); - gtk_widget_set_tooltip_text (b, _("Each clone is painted by the picked color (the original must have unset fill or stroke)")); + b->set_active(old); + b->set_tooltip_text(_("Each clone is painted by the picked color (the original must have unset fill or stroke)")); table_attach (table, b, 0.0, 1, 2); - g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(pick_to), (gpointer) "pick_to_color"); + b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_to), b, "pick_to_color")); } { - GtkWidget *b = gtk_check_button_new_with_label (_("Opacity")); + auto b = Gtk::manage(new Gtk::CheckButton(_("Opacity"))); bool old = prefs->getBool(prefs_path + "pick_to_opacity", 0); - gtk_toggle_button_set_active ((GtkToggleButton *) b, old); - gtk_widget_set_tooltip_text (b, _("Each clone's opacity is determined by the picked value in that point")); + b->set_active(old); + b->set_tooltip_text(_("Each clone's opacity is determined by the picked value in that point")); table_attach (table, b, 0.0, 2, 2); - g_signal_connect(G_OBJECT(b), "toggled", - G_CALLBACK(pick_to), (gpointer) "pick_to_opacity"); + b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_to), b, "pick_to_opacity")); } } gtk_widget_set_sensitive (vvb, prefs->getBool(prefs_path + "dotrace")); @@ -980,9 +962,7 @@ CloneTiler::CloneTiler () : sb->set_width_chars (7); _rowscols->pack_start(*sb, true, true, 0); - // TODO: C++ification - g_signal_connect(G_OBJECT(a->gobj()), "value_changed", - G_CALLBACK(xy_changed), (gpointer) "jmax"); + a->signal_value_changed().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::xy_changed), a, "jmax")); } { @@ -1002,9 +982,7 @@ CloneTiler::CloneTiler () : sb->set_width_chars (7); _rowscols->pack_start(*sb, true, true, 0); - // TODO: C++ification - g_signal_connect(G_OBJECT(a->gobj()), "value_changed", - G_CALLBACK(xy_changed), (gpointer) "imax"); + a->signal_value_changed().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::xy_changed), a, "imax")); } table_attach (table, GTK_WIDGET(_rowscols->gobj()), 0.0, 1, 2); @@ -1164,11 +1142,11 @@ CloneTiler::CloneTiler () : } { - GtkWidget *b = gtk_button_new_with_mnemonic (_(" R_eset ")); + auto b = Gtk::manage(new Gtk::Button(_(" R_eset "), true)); // TRANSLATORS: "change" is a noun here - gtk_widget_set_tooltip_text (b, _("Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero")); - g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (reset), this); - gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0); + b->set_tooltip_text(_("Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero")); + b->signal_clicked().connect(sigc::mem_fun(*this, &CloneTiler::reset)); + gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(b->gobj()), FALSE, FALSE, 0); } } @@ -2197,7 +2175,7 @@ void CloneTiler::apply() SPItem *item = dynamic_cast(obj); if (dotrace) { - trace_setup (desktop->getDocument(), 1.0, item); + trace_setup(desktop->getDocument(), 1.0, item); } Geom::Point center; @@ -2524,72 +2502,74 @@ GtkWidget * CloneTiler::new_tab(GtkWidget *nb, const gchar *label) return vb; } -void CloneTiler::checkbox_toggled(GtkToggleButton *tb, gpointer *data) +void CloneTiler::checkbox_toggled(Gtk::ToggleButton *tb, + const Glib::ustring &attr) { - const gchar *attr = (const gchar *) data; - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setBool(prefs_path + attr, gtk_toggle_button_get_active(tb)); + auto prefs = Inkscape::Preferences::get(); + prefs->setBool(prefs_path + attr, tb->get_active()); } -GtkWidget * CloneTiler::checkbox(const char *tip, const char *attr) +Gtk::Widget * CloneTiler::checkbox(const char *tip, + const Glib::ustring &attr) { - auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); - gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); - - GtkWidget *b = gtk_check_button_new (); - gtk_widget_set_tooltip_text (b, tip); + auto hb = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, VB_MARGIN)); + auto b = Gtk::manage(new Gtk::CheckButton()); + b->set_tooltip_text(tip); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - bool value = prefs->getBool(prefs_path + attr); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(b), value); + auto const prefs = Inkscape::Preferences::get(); + auto const value = prefs->getBool(prefs_path + attr); + b->set_active(value); - gtk_box_pack_end (GTK_BOX (hb), b, FALSE, TRUE, 0); - g_signal_connect ( G_OBJECT (b), "clicked", - G_CALLBACK (checkbox_toggled), (gpointer) attr); + hb->pack_end(*b, false, true); + b->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::checkbox_toggled), b, attr)); - g_object_set_data (G_OBJECT(b), "uncheckable", GINT_TO_POINTER(TRUE)); + b->set_data("uncheckable", GINT_TO_POINTER(true)); return hb; } -void CloneTiler::value_changed(GtkAdjustment *adj, gpointer data) +void CloneTiler::value_changed(Glib::RefPtr &adj, + Glib::ustring const &pref) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - const gchar *pref = (const gchar *) data; - prefs->setDouble(prefs_path + pref, gtk_adjustment_get_value (adj)); + auto prefs = Inkscape::Preferences::get(); + prefs->setDouble(prefs_path + pref, adj->get_value()); } -GtkWidget * CloneTiler::spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent/* = false*/) +Gtk::Widget * CloneTiler::spinbox(const char *tip, + const Glib::ustring &attr, + double lower, + double upper, + const gchar *suffix, + bool exponent/* = false*/) { - auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); + auto hb = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 0)); { - Glib::RefPtr a; - if (exponent) { - a = Gtk::Adjustment::create(1.0, lower, upper, 0.01, 0.05, 0); - } else { - a = Gtk::Adjustment::create(0.0, lower, upper, 0.1, 0.5, 0); - } + // Parameters for adjustment + auto const initial_value = (exponent ? 1.0 : 0.0); + auto const step_increment = (exponent ? 0.01 : 0.1); + auto const page_increment = (exponent ? 0.05 : 0.4); - Inkscape::UI::Widget::SpinButton *sb; - if (exponent) { - sb = new Inkscape::UI::Widget::SpinButton(a, 0.01, 2); - } else { - sb = new Inkscape::UI::Widget::SpinButton(a, 0.1, 1); - } + auto a = Gtk::Adjustment::create(initial_value, + lower, + upper, + step_increment, + page_increment); + + auto const climb_rate = (exponent ? 0.01 : 0.1); + auto const digits = (exponent ? 2 : 1); + + auto sb = new Inkscape::UI::Widget::SpinButton(a, climb_rate, digits); sb->set_tooltip_text (tip); sb->set_width_chars (5); sb->set_digits(3); - gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(sb->gobj()), FALSE, FALSE, SB_MARGIN); + hb->pack_start(*sb, false, false, SB_MARGIN); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - double value = prefs->getDoubleLimited(prefs_path + attr, exponent? 1.0 : 0.0, lower, upper); + auto prefs = Inkscape::Preferences::get(); + auto value = prefs->getDoubleLimited(prefs_path + attr, exponent? 1.0 : 0.0, lower, upper); a->set_value (value); - // TODO: C++ification - g_signal_connect(G_OBJECT(a->gobj()), "value_changed", - G_CALLBACK(value_changed), (gpointer) attr); + a->signal_value_changed().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::value_changed), a, attr)); if (exponent) { sb->set_data ("oneable", GINT_TO_POINTER(TRUE)); @@ -2599,28 +2579,27 @@ GtkWidget * CloneTiler::spinbox(const char *tip, const char *attr, double lower, } { - GtkWidget *l = gtk_label_new (""); - gtk_label_set_markup (GTK_LABEL(l), suffix); - gtk_widget_set_halign(l, GTK_ALIGN_END); - gtk_widget_set_valign(l, GTK_ALIGN_START); - gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0); + auto l = Gtk::manage(new Gtk::Label("")); + l->set_markup(suffix); + l->set_halign(Gtk::ALIGN_END); + l->set_valign(Gtk::ALIGN_START); + hb->pack_start(*l); } return hb; } -void CloneTiler::symgroup_changed(GtkComboBox *cb, gpointer /*data*/) +void CloneTiler::symgroup_changed(Gtk::ComboBox *cb) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gint group_new = gtk_combo_box_get_active (cb); + auto prefs = Inkscape::Preferences::get(); + auto group_new = cb->get_active_row_number(); prefs->setInt(prefs_path + "symmetrygroup", group_new); } -void CloneTiler::xy_changed(GtkAdjustment *adj, gpointer data) +void CloneTiler::xy_changed(Glib::RefPtr &adj, Glib::ustring const &pref) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - const gchar *pref = (const gchar *) data; - prefs->setInt(prefs_path + pref, (int) floor(gtk_adjustment_get_value (adj) + 0.5)); + auto prefs = Inkscape::Preferences::get(); + prefs->setInt(prefs_path + pref, (int) floor(adj->get_value() + 0.5)); } void CloneTiler::keep_bbox_toggled() @@ -2629,11 +2608,10 @@ void CloneTiler::keep_bbox_toggled() prefs->setBool(prefs_path + "keepbbox", _cb_keep_bbox->get_active()); } -void CloneTiler::pick_to(GtkToggleButton *tb, gpointer data) +void CloneTiler::pick_to(Gtk::ToggleButton *tb, Glib::ustring const &pref) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - const gchar *pref = (const gchar *) data; - prefs->setBool(prefs_path + pref, gtk_toggle_button_get_active(tb)); + auto prefs = Inkscape::Preferences::get(); + prefs->setBool(prefs_path + pref, tb->get_active()); } @@ -2671,9 +2649,14 @@ void CloneTiler::reset_recursive(GtkWidget *w) } } -void CloneTiler::reset(GtkWidget */*widget*/, GtkWidget *dlg) +void CloneTiler::reset() +{ + reset_recursive(GTK_WIDGET(this->gobj())); +} + +void CloneTiler::table_attach(GtkWidget *table, Gtk::Widget *widget, float align, int row, int col) { - reset_recursive (dlg); + table_attach(table, GTK_WIDGET(widget->gobj()), align, row, col); } void CloneTiler::table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col) @@ -2728,14 +2711,12 @@ GtkWidget * CloneTiler::table_x_y_rand(int values) return table; } -void CloneTiler::pick_switched(GtkToggleButton */*tb*/, gpointer data) +void CloneTiler::pick_switched(PickType v) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - guint v = GPOINTER_TO_INT (data); + auto prefs = Inkscape::Preferences::get(); prefs->setInt(prefs_path + "pick", v); } - void CloneTiler::switch_to_create() { if (_rowscols) { diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h index 04f676800..db3049ef1 100644 --- a/src/ui/dialog/clonetiler.h +++ b/src/ui/dialog/clonetiler.h @@ -18,6 +18,7 @@ namespace Gtk { class CheckButton; + class ComboBox; class ToggleButton; } @@ -38,48 +39,66 @@ public: static CloneTiler &getInstance() { return *new CloneTiler(); } void show_page_trace(); protected: + enum PickType { + PICK_COLOR, + PICK_OPACITY, + PICK_R, + PICK_G, + PICK_B, + PICK_H, + PICK_S, + PICK_L + }; GtkWidget * new_tab(GtkWidget *nb, const gchar *label); GtkWidget * table_x_y_rand(int values); - GtkWidget * spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent = false); - GtkWidget * checkbox(const char *tip, const char *attr); + Gtk::Widget * spinbox(const char *tip, + const Glib::ustring &attr, + double lower, + double upper, + const gchar *suffix, + bool exponent = false); + Gtk::Widget * checkbox(const char *tip, + const Glib::ustring &attr); void table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col); - - // TODO: Improve encapsulation by using SigC++ signal handling, and convert all of these into - // non-static member functions - static void symgroup_changed(GtkComboBox *cb, gpointer /*data*/); - static void on_picker_color_changed(guint rgba); - static void trace_hide_tiled_clones_recursively(SPObject *from); - static void checkbox_toggled(GtkToggleButton *tb, gpointer *data); - static void pick_switched(GtkToggleButton */*tb*/, gpointer data); - static void pick_to(GtkToggleButton *tb, gpointer data); - static void xy_changed(GtkAdjustment *adj, gpointer data); - void switch_to_create(); - void switch_to_fill(); - void keep_bbox_toggled(); - void unclump(); - static void reset(GtkWidget */*widget*/, GtkWidget *dlg); - static guint number_of_clones(SPObject *obj); - static void trace_setup(SPDocument *doc, gdouble zoom, SPItem *original); - static guint32 trace_pick(Geom::Rect box); - static void trace_finish(); - static bool is_a_clone_of(SPObject *tile, SPObject *obj); - static Geom::Rect transform_rect(Geom::Rect const &r, Geom::Affine const &m); - static double randomize01(double val, double rand); - static void value_changed(GtkAdjustment *adj, gpointer data); - static void reset_recursive(GtkWidget *w); + void table_attach(GtkWidget *table, Gtk::Widget *widget, float align, int row, int col); + + void symgroup_changed(Gtk::ComboBox *cb); + void on_picker_color_changed(guint rgba); + void trace_hide_tiled_clones_recursively(SPObject *from); + guint number_of_clones(SPObject *obj); + void trace_setup(SPDocument *doc, gdouble zoom, SPItem *original); + guint32 trace_pick(Geom::Rect box); + void trace_finish(); + bool is_a_clone_of(SPObject *tile, SPObject *obj); + Geom::Rect transform_rect(Geom::Rect const &r, Geom::Affine const &m); + double randomize01(double val, double rand); void apply(); void change_selection(Inkscape::Selection *selection); + void checkbox_toggled(Gtk::ToggleButton *tb, + Glib::ustring const &attr); void do_pick_toggled(); void external_change(); void fill_width_changed(); void fill_height_changed(); - void remove(bool do_undo = true); + void keep_bbox_toggled(); void on_remove_button_clicked() {remove();} + void pick_switched(PickType); + void pick_to(Gtk::ToggleButton *tb, + Glib::ustring const &pref); + void remove(bool do_undo = true); + void reset(); + void reset_recursive(GtkWidget *w); + void switch_to_create(); + void switch_to_fill(); + void unclump(); void unit_changed(); + void value_changed(Glib::RefPtr &adj, Glib::ustring const &pref); + void xy_changed(Glib::RefPtr &adj, Glib::ustring const &pref); - static Geom::Affine get_transform( // symmetry group + Geom::Affine get_transform( + // symmetry group int type, // row, column @@ -156,20 +175,10 @@ private: GtkWidget *_status; Gtk::Box *_rowscols; Gtk::Box *_widthheight; + }; -enum { - PICK_COLOR, - PICK_OPACITY, - PICK_R, - PICK_G, - PICK_B, - PICK_H, - PICK_S, - PICK_L -}; - enum { TILE_P1, TILE_P2, -- cgit v1.2.3 From 79114d4f5ed18fc7bc79fff42bbc02d24042b484 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Sat, 13 Aug 2016 16:59:04 +0100 Subject: inkview: C++ify (bzr r15056) --- src/inkview.cpp | 273 ++++++++++++++++++++++++-------------------------------- 1 file changed, 115 insertions(+), 158 deletions(-) (limited to 'src') diff --git a/src/inkview.cpp b/src/inkview.cpp index c90d0b85e..fe656ca5b 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -34,6 +34,8 @@ #include #include +#include +#include #include // #include @@ -66,28 +68,38 @@ extern char *optarg; extern int optind, opterr; -struct SPSlideShow { - char **slides; - int size; - int length; +class SPSlideShow { +public: + std::vector slides; int current; SPDocument *doc; GtkWidget *view; GtkWidget *window; bool fullscreen; int timer; -}; -static GtkWidget *sp_svgview_control_show (struct SPSlideShow *ss); -static void sp_svgview_show_next (struct SPSlideShow *ss); -static void sp_svgview_show_prev (struct SPSlideShow *ss); -static void sp_svgview_goto_first (struct SPSlideShow *ss); -static void sp_svgview_goto_last (struct SPSlideShow *ss); + SPSlideShow() + : + slides(), + current(0), + doc(NULL), + view(NULL), + fullscreen(false) + {} + + GtkWidget *control_show(); + void show_next(); + void show_prev(); + void goto_first(); + void goto_last(); + +protected: + void waiting_cursor(); + void normal_cursor(); + void set_document(SPDocument *doc, + int current); +}; -static int sp_svgview_show_next_cb (GtkWidget *widget, void *data); -static int sp_svgview_show_prev_cb (GtkWidget *widget, void *data); -static int sp_svgview_goto_first_cb (GtkWidget *widget, void *data); -static int sp_svgview_goto_last_cb (GtkWidget *widget, void *data); #ifdef WITH_INKJAR static bool is_jar(char const *filename); #endif @@ -114,11 +126,11 @@ static int sp_svgview_main_key_press (GtkWidget */*widget*/, switch (event->keyval) { case GDK_KEY_Up: case GDK_KEY_Home: - sp_svgview_goto_first(ss); + ss->goto_first(); break; case GDK_KEY_Down: case GDK_KEY_End: - sp_svgview_goto_last(ss); + ss->goto_last(); break; case GDK_KEY_F11: if (ss->fullscreen) { @@ -130,19 +142,19 @@ static int sp_svgview_main_key_press (GtkWidget */*widget*/, } break; case GDK_KEY_Return: - sp_svgview_control_show (ss); + ss->control_show(); break; case GDK_KEY_KP_Page_Down: case GDK_KEY_Page_Down: case GDK_KEY_Right: case GDK_KEY_space: - sp_svgview_show_next (ss); + ss->show_next(); break; case GDK_KEY_KP_Page_Up: case GDK_KEY_Page_Up: case GDK_KEY_Left: case GDK_KEY_BackSpace: - sp_svgview_show_prev (ss); + ss->show_prev(); break; case GDK_KEY_Escape: case GDK_KEY_q: @@ -167,9 +179,8 @@ int main (int argc, const char **argv) Gtk::Main main_instance (&argc, const_cast(&argv)); - struct SPSlideShow ss; - int num_parsed_options = 0; + SPSlideShow ss; // the list of arguments is in the net line for (int i = 1; i < argc; i++) { @@ -215,15 +226,6 @@ int main (int argc, const char **argv) setlocale (LC_NUMERIC, "C"); - ss.size = 32; - ss.length = 0; - ss.current = 0; - ss.slides = g_new (char *, ss.size); - ss.current = 0; - ss.doc = NULL; - ss.view = NULL; - ss.fullscreen = false; - Inkscape::Application::create(argv[0], true); //Inkscape::Application &inkscape = Inkscape::Application::instance(); @@ -254,21 +256,13 @@ int main (int argc, const char **argv) } } } else if (gba->len > 0) { - //::write(1, gba->data, gba->len); - /* Append to list */ - if (ss.length >= ss.size) { - /* Expand */ - ss.size <<= 1; - ss.slides = g_renew (char *, ss.slides, ss.size); - } - ss.doc = SPDocument::createNewDocFromMem ((const gchar *)gba->data, gba->len, TRUE); gchar *last_filename = jar_file_reader.get_last_filename(); if (ss.doc) { - ss.slides[ss.length++] = strdup (last_filename); - (ss.doc)->setUri (last_filename); + ss.slides.push_back(strdup(last_filename)); + (ss.doc)->setUri(last_filename); } g_byte_array_free(gba, TRUE); g_free(last_filename); @@ -279,16 +273,10 @@ int main (int argc, const char **argv) } else { #endif /* WITH_INKJAR */ /* Append to list */ - if (ss.length >= ss.size) { - /* Expand */ - ss.size <<= 1; - ss.slides = g_renew (char *, ss.slides, ss.size); - } - - ss.slides[ss.length++] = strdup (argv[i]); + ss.slides.push_back(strdup (argv[i])); if (!ss.doc) { - ss.doc = SPDocument::createNewDoc (ss.slides[ss.current], TRUE, false); + ss.doc = SPDocument::createNewDoc((ss.slides[ss.current]).c_str(), TRUE, false); if (!ss.doc) { ++ss.current; } @@ -335,56 +323,48 @@ static int sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, return FALSE; } -static GtkWidget* sp_svgview_control_show(struct SPSlideShow *ss) +/** + * @brief Show the control buttons (next, previous etc) for the application + */ +GtkWidget* SPSlideShow::control_show() { if (!ctrlwin) { ctrlwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_resizable(GTK_WINDOW(ctrlwin), FALSE); - gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(ss->window)); - g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, ss); + gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(window)); + g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, this); g_signal_connect(G_OBJECT (ctrlwin), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL); auto t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_container_add(GTK_CONTAINER(ctrlwin), t); -#if GTK_CHECK_VERSION(3,10,0) - GtkWidget *b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-first"), GTK_ICON_SIZE_BUTTON); -#else - GtkWidget *b = gtk_button_new(); - GtkWidget *img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-first"), GTK_ICON_SIZE_BUTTON); - gtk_button_set_image(GTK_BUTTON(b), img); -#endif - gtk_container_add(GTK_CONTAINER(t), b); - - g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_first_cb, ss); -#if GTK_CHECK_VERSION(3,10,0) - b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-previous"), GTK_ICON_SIZE_BUTTON); -#else - b = gtk_button_new(); - img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-previous"), GTK_ICON_SIZE_BUTTON); - gtk_button_set_image(GTK_BUTTON(b), img); -#endif - gtk_container_add(GTK_CONTAINER(t), b); - - g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_prev_cb, ss); -#if GTK_CHECK_VERSION(3,10,0) - b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-next"), GTK_ICON_SIZE_BUTTON); -#else - b = gtk_button_new(); - img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-next"), GTK_ICON_SIZE_BUTTON); - gtk_button_set_image(GTK_BUTTON(b), img); -#endif - gtk_container_add(GTK_CONTAINER(t), b); - - g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_next_cb, ss); -#if GTK_CHECK_VERSION(3,10,0) - b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-last"), GTK_ICON_SIZE_BUTTON); -#else - b = gtk_button_new(); - img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-last"), GTK_ICON_SIZE_BUTTON); - gtk_button_set_image(GTK_BUTTON(b), img); -#endif - gtk_container_add(GTK_CONTAINER(t), b); - g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_last_cb, ss); + auto btn_go_first = Gtk::manage(new Gtk::Button()); + auto img_go_first = Gtk::manage(new Gtk::Image()); + img_go_first->set_from_icon_name(INKSCAPE_ICON("go-first"), Gtk::ICON_SIZE_BUTTON); + btn_go_first->set_image(*img_go_first); + gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_first->gobj())); + btn_go_first->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::goto_first)); + + auto btn_go_prev = Gtk::manage(new Gtk::Button()); + auto img_go_prev = Gtk::manage(new Gtk::Image()); + img_go_prev->set_from_icon_name(INKSCAPE_ICON("go-previous"), Gtk::ICON_SIZE_BUTTON); + btn_go_prev->set_image(*img_go_prev); + gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_prev->gobj())); + btn_go_prev->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::show_prev)); + + auto btn_go_next = Gtk::manage(new Gtk::Button()); + auto img_go_next = Gtk::manage(new Gtk::Image()); + img_go_next->set_from_icon_name(INKSCAPE_ICON("go-next"), Gtk::ICON_SIZE_BUTTON); + btn_go_next->set_image(*img_go_next); + gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_next->gobj())); + btn_go_next->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::show_next)); + + auto btn_go_last = Gtk::manage(new Gtk::Button()); + auto img_go_last = Gtk::manage(new Gtk::Image()); + img_go_last->set_from_icon_name(INKSCAPE_ICON("go-last"), Gtk::ICON_SIZE_BUTTON); + btn_go_last->set_image(*img_go_last); + gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_last->gobj())); + btn_go_last->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::goto_last)); + gtk_widget_show_all(ctrlwin); } else { gtk_window_present(GTK_WINDOW(ctrlwin)); @@ -393,35 +373,11 @@ static GtkWidget* sp_svgview_control_show(struct SPSlideShow *ss) return NULL; } -static int sp_svgview_show_next_cb (GtkWidget */*widget*/, void *data) -{ - sp_svgview_show_next(static_cast(data)); - return FALSE; -} - -static int sp_svgview_show_prev_cb (GtkWidget */*widget*/, void *data) -{ - sp_svgview_show_prev(static_cast(data)); - return FALSE; -} - -static int sp_svgview_goto_first_cb (GtkWidget */*widget*/, void *data) -{ - sp_svgview_goto_first(static_cast(data)); - return FALSE; -} - -static int sp_svgview_goto_last_cb (GtkWidget */*widget*/, void *data) -{ - sp_svgview_goto_last(static_cast(data)); - return FALSE; -} - -static void sp_svgview_waiting_cursor(struct SPSlideShow *ss) +void SPSlideShow::waiting_cursor() { GdkDisplay *display = gdk_display_get_default(); GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH); - gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ss->window)), waiting); + gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(window)), waiting); g_object_unref(waiting); if (ctrlwin) { GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH); @@ -433,90 +389,91 @@ static void sp_svgview_waiting_cursor(struct SPSlideShow *ss) } } -static void sp_svgview_normal_cursor(struct SPSlideShow *ss) +void SPSlideShow::normal_cursor() { - gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ss->window)), NULL); + gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(window)), NULL); if (ctrlwin) { gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), NULL); } } -static void sp_svgview_set_document(struct SPSlideShow *ss, - SPDocument *doc, - int current) +void SPSlideShow::set_document(SPDocument *doc, + int current) { - if (doc && doc != ss->doc) { + if (doc && doc != this->doc) { doc->ensureUpToDate(); - reinterpret_cast(SP_VIEW_WIDGET_VIEW (ss->view))->setDocument (doc); - ss->doc = doc; - ss->current = current; + reinterpret_cast(SP_VIEW_WIDGET_VIEW (view))->setDocument (doc); + this->doc = doc; + this->current = current; } } -static void sp_svgview_show_next (struct SPSlideShow *ss) +/** + * @brief Show the next file in the slideshow + */ +void SPSlideShow::show_next() { - sp_svgview_waiting_cursor(ss); + waiting_cursor(); SPDocument *doc = NULL; - int current = ss->current; - while (!doc && (current < ss->length - 1)) { - doc = SPDocument::createNewDoc (ss->slides[++current], TRUE, false); + while (!doc && (current < slides.size() - 1)) { + doc = SPDocument::createNewDoc ((slides[++current]).c_str(), TRUE, false); } - sp_svgview_set_document(ss, doc, current); - - sp_svgview_normal_cursor(ss); + set_document(doc, current); + normal_cursor(); } -static void sp_svgview_show_prev (struct SPSlideShow *ss) +/** + * @brief Show the previous file in the slideshow + */ +void SPSlideShow::show_prev() { - sp_svgview_waiting_cursor(ss); + waiting_cursor(); SPDocument *doc = NULL; - int current = ss->current; while (!doc && (current > 0)) { - doc = SPDocument::createNewDoc (ss->slides[--current], TRUE, false); + doc = SPDocument::createNewDoc ((slides[--current]).c_str(), TRUE, false); } - sp_svgview_set_document(ss, doc, current); - - sp_svgview_normal_cursor(ss); + set_document(doc, current); + normal_cursor(); } -static void sp_svgview_goto_first (struct SPSlideShow *ss) +/** + * @brief Switch to first slide in slideshow + */ +void SPSlideShow::goto_first() { - sp_svgview_waiting_cursor(ss); + waiting_cursor(); SPDocument *doc = NULL; int current = 0; - while ( !doc && (current < ss->length - 1)) { - if (current == ss->current) { - break; - } - doc = SPDocument::createNewDoc (ss->slides[current++], TRUE, false); + while ( !doc && (current < slides.size() - 1)) { + doc = SPDocument::createNewDoc((slides[current++]).c_str(), TRUE, false); } - sp_svgview_set_document(ss, doc, current - 1); + set_document(doc, current - 1); - sp_svgview_normal_cursor(ss); + normal_cursor(); } -static void sp_svgview_goto_last (struct SPSlideShow *ss) +/** + * @brief Switch to last slide in slideshow + */ +void SPSlideShow::goto_last() { - sp_svgview_waiting_cursor(ss); + waiting_cursor(); SPDocument *doc = NULL; - int current = ss->length - 1; + int current = slides.size() - 1; while (!doc && (current >= 0)) { - if (current == ss->current) { - break; - } - doc = SPDocument::createNewDoc (ss->slides[current--], TRUE, false); + doc = SPDocument::createNewDoc((slides[current--]).c_str(), TRUE, false); } - sp_svgview_set_document(ss, doc, current + 1); + set_document(doc, current + 1); - sp_svgview_normal_cursor(ss); + normal_cursor(); } #ifdef WITH_INKJAR -- cgit v1.2.3 From 75c4b2b43058668f2c94b27db858763d0b1f308c Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Sun, 14 Aug 2016 13:16:27 +0100 Subject: inkview: Convert to ApplicationWindow (bzr r15057) --- src/inkview.cpp | 94 +++++++++++++++++++++++++++------------------------------ 1 file changed, 45 insertions(+), 49 deletions(-) (limited to 'src') diff --git a/src/inkview.cpp b/src/inkview.cpp index fe656ca5b..b9447a94f 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -68,15 +69,19 @@ extern char *optarg; extern int optind, opterr; -class SPSlideShow { +/** + * The main application window for the slideshow + */ +class SPSlideShow : public Gtk::ApplicationWindow { public: - std::vector slides; - int current; - SPDocument *doc; - GtkWidget *view; - GtkWidget *window; - bool fullscreen; - int timer; + std::vector slides; ///< List of filenames for each slide + int current; ///< Index of the currently displayed slide + SPDocument *doc; ///< The currently displayed slide + GtkWidget *view; + int timer; + + /// Current state of application (full-screen or windowed) + bool is_fullscreen; SPSlideShow() : @@ -84,20 +89,20 @@ public: current(0), doc(NULL), view(NULL), - fullscreen(false) + is_fullscreen(false) {} - GtkWidget *control_show(); - void show_next(); - void show_prev(); - void goto_first(); - void goto_last(); + void control_show(); + void show_next(); + void show_prev(); + void goto_first(); + void goto_last(); protected: - void waiting_cursor(); - void normal_cursor(); - void set_document(SPDocument *doc, - int current); + void waiting_cursor(); + void normal_cursor(); + void set_document(SPDocument *doc, + int current); }; #ifdef WITH_INKJAR @@ -133,12 +138,12 @@ static int sp_svgview_main_key_press (GtkWidget */*widget*/, ss->goto_last(); break; case GDK_KEY_F11: - if (ss->fullscreen) { - gtk_window_unfullscreen (GTK_WINDOW(ss->window)); - ss->fullscreen = false; + if (ss->is_fullscreen) { + ss->unfullscreen(); + ss->is_fullscreen = false; } else { - gtk_window_fullscreen (GTK_WINDOW(ss->window)); - ss->fullscreen = true; + ss->fullscreen(); + ss->is_fullscreen = true; } break; case GDK_KEY_Return: @@ -164,7 +169,8 @@ static int sp_svgview_main_key_press (GtkWidget */*widget*/, default: break; } - gtk_window_set_title(GTK_WINDOW(ss->window), ss->doc->getName()); + + ss->set_title(ss->doc->getName()); return TRUE; } @@ -202,7 +208,6 @@ int main (int argc, const char **argv) } } - GtkWidget *w; int i; bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); @@ -214,8 +219,6 @@ int main (int argc, const char **argv) Inkscape::GC::init(); Inkscape::Preferences::get(); // ensure preferences are initialized - gtk_init (&argc, (char ***) &argv); - #ifdef lalaWITH_MODULES g_warning ("Have to autoinit modules (lauris)"); sp_modulesys_init(); @@ -291,24 +294,21 @@ int main (int argc, const char **argv) return 1; /* none of the slides loadable */ } - w = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title( GTK_WINDOW(w), ss.doc->getName() ); - gtk_window_set_default_size (GTK_WINDOW (w), - MIN ((int)(ss.doc)->getWidth().value("px"), (int)gdk_screen_width() - 64), - MIN ((int)(ss.doc)->getHeight().value("px"), (int)gdk_screen_height() - 64)); - ss.window = w; + ss.set_title(ss.doc->getName() ); + ss.set_default_size(MIN ((int)(ss.doc)->getWidth().value("px"), (int)gdk_screen_width() - 64), + MIN ((int)(ss.doc)->getHeight().value("px"), (int)gdk_screen_height() - 64)); - g_signal_connect (G_OBJECT (w), "delete_event", (GCallback) sp_svgview_main_delete, &ss); - g_signal_connect (G_OBJECT (w), "key_press_event", (GCallback) sp_svgview_main_key_press, &ss); + g_signal_connect (G_OBJECT (ss.gobj()), "delete_event", (GCallback) sp_svgview_main_delete, &ss); + g_signal_connect (G_OBJECT (ss.gobj()), "key_press_event", (GCallback) sp_svgview_main_key_press, &ss); (ss.doc)->ensureUpToDate(); ss.view = sp_svg_view_widget_new (ss.doc); (ss.doc)->doUnref (); SP_SVG_VIEW_WIDGET(ss.view)->setResize( false, ss.doc->getWidth().value("px"), ss.doc->getHeight().value("px") ); gtk_widget_show (ss.view); - gtk_container_add (GTK_CONTAINER (w), ss.view); + ss.add(*Glib::wrap(ss.view)); - gtk_widget_show (w); + ss.show(); gtk_main (); @@ -326,12 +326,12 @@ static int sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, /** * @brief Show the control buttons (next, previous etc) for the application */ -GtkWidget* SPSlideShow::control_show() +void SPSlideShow::control_show() { if (!ctrlwin) { ctrlwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_resizable(GTK_WINDOW(ctrlwin), FALSE); - gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(window)); + gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(this->gobj())); g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, this); g_signal_connect(G_OBJECT (ctrlwin), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL); auto t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); @@ -369,20 +369,16 @@ GtkWidget* SPSlideShow::control_show() } else { gtk_window_present(GTK_WINDOW(ctrlwin)); } - - return NULL; } void SPSlideShow::waiting_cursor() { - GdkDisplay *display = gdk_display_get_default(); - GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH); - gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(window)), waiting); - g_object_unref(waiting); + auto display = Gdk::Display::get_default(); + auto waiting = Gdk::Cursor::create(display, Gdk::WATCH); + get_window()->set_cursor(waiting); + if (ctrlwin) { - GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH); - gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), waiting); - g_object_unref(waiting); + gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), waiting->gobj()); } while(gtk_events_pending()) { gtk_main_iteration(); @@ -391,7 +387,7 @@ void SPSlideShow::waiting_cursor() void SPSlideShow::normal_cursor() { - gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(window)), NULL); + get_window()->set_cursor(); if (ctrlwin) { gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), NULL); } -- cgit v1.2.3