summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/attributes.cpp20
-rw-r--r--src/color-profile.cpp11
-rw-r--r--src/conn-avoid-ref.cpp26
-rw-r--r--src/conn-avoid-ref.h7
-rw-r--r--src/desktop-style.h1
-rw-r--r--src/desktop.cpp8
-rw-r--r--src/document-private.h15
-rw-r--r--src/document-undo.cpp70
-rw-r--r--src/document.cpp99
-rw-r--r--src/document.h5
-rw-r--r--src/extension/internal/cairo-render-context.cpp14
-rw-r--r--src/extension/internal/cairo-render-context.h2
-rw-r--r--src/gradient-chemistry.cpp8
-rw-r--r--src/gradient-drag.cpp389
-rw-r--r--src/gradient-drag.h23
-rw-r--r--src/graphlayout.cpp9
-rw-r--r--src/graphlayout.h1
-rw-r--r--src/guide-snapper.cpp9
-rw-r--r--src/layer-manager.cpp20
-rw-r--r--src/path-chemistry.h1
-rw-r--r--src/profile-manager.cpp8
-rw-r--r--src/removeoverlap.h2
-rw-r--r--src/resource-manager.cpp14
-rw-r--r--src/satisfied-guide-cns.cpp4
-rw-r--r--src/selection-chemistry.h2
-rw-r--r--src/seltrans.h1
-rw-r--r--src/snap.cpp9
-rw-r--r--src/snap.h1
-rw-r--r--src/sp-clippath.h1
-rw-r--r--src/sp-guide.cpp67
-rw-r--r--src/sp-guide.h5
-rw-r--r--src/sp-item-group.h1
-rw-r--r--src/sp-mask.cpp39
-rw-r--r--src/sp-namedview.cpp160
-rw-r--r--src/sp-namedview.h9
-rw-r--r--src/sp-object.h1
-rw-r--r--src/sp-switch.h1
-rw-r--r--src/ui/dialog/document-properties.cpp86
-rw-r--r--src/ui/dialog/filter-effects-dialog.cpp7
-rw-r--r--src/ui/dialog/layers.cpp8
-rw-r--r--src/ui/dialog/svg-fonts-dialog.cpp6
-rw-r--r--src/ui/dialog/swatches.cpp27
-rw-r--r--src/ui/interface.cpp6
-rw-r--r--src/ui/tools/gradient-tool.cpp38
-rw-r--r--src/ui/tools/mesh-tool.cpp32
-rw-r--r--src/ui/tools/select-tool.cpp94
-rw-r--r--src/ui/tools/select-tool.h8
-rw-r--r--src/ui/tools/tool-base.cpp2
-rw-r--r--src/ui/widget/color-icc-selector.cpp7
-rw-r--r--src/unclump.h1
-rw-r--r--src/vanishing-point.cpp66
-rw-r--r--src/vanishing-point.h7
-rw-r--r--src/widgets/connector-toolbar.cpp10
-rw-r--r--src/widgets/desktop-widget.cpp6
-rw-r--r--src/widgets/gradient-toolbar.cpp63
-rw-r--r--src/widgets/gradient-vector.cpp8
-rw-r--r--src/widgets/mesh-toolbar.cpp8
-rw-r--r--src/widgets/paint-selector.cpp8
-rw-r--r--src/xml/rebase-hrefs.cpp6
-rw-r--r--src/xml/repr-io.cpp18
60 files changed, 701 insertions, 884 deletions
diff --git a/src/attributes.cpp b/src/attributes.cpp
index ad6a51c88..e8620a498 100644
--- a/src/attributes.cpp
+++ b/src/attributes.cpp
@@ -536,21 +536,13 @@ static SPStyleProp const props[] = {
unsigned
sp_attribute_lookup(gchar const *key)
{
- static GHashTable *propdict = NULL;
-
- if (!propdict) {
- unsigned int i;
- propdict = g_hash_table_new(g_str_hash, g_str_equal);
- for (i = 1; i < n_attrs; i++) {
- g_assert(props[i].code == static_cast< gint >(i) );
- // If this g_assert fails, then the sort order of SPAttributeEnum does not match the order in props[]!
- g_hash_table_insert(propdict,
- const_cast<void *>(static_cast<void const *>(props[i].name)),
- GINT_TO_POINTER(props[i].code));
- }
+ for (unsigned int i = 1; i < n_attrs; i++) {
+ g_assert(props[i].code == static_cast< gint >(i) );
+ // If this g_assert fails, then the sort order of SPAttributeEnum does not match the order in props[]!
+ if(g_str_equal(const_cast<void *>(static_cast<void const *>(props[i].name)), key))
+ return GPOINTER_TO_UINT(GINT_TO_POINTER(props[i].code));
}
-
- return GPOINTER_TO_UINT(g_hash_table_lookup(propdict, key));
+ return SP_ATTR_INVALID;
}
unsigned char const *
diff --git a/src/color-profile.cpp b/src/color-profile.cpp
index 690a72654..34f1b0155 100644
--- a/src/color-profile.cpp
+++ b/src/color-profile.cpp
@@ -488,18 +488,17 @@ static int getLcmsIntent( guint svgIntent )
static SPObject* bruteFind( SPDocument* document, gchar const* name )
{
SPObject* result = 0;
- const GSList * current = document->getResourceList("iccprofile");
- while ( current && !result ) {
- if ( IS_COLORPROFILE(current->data) ) {
- ColorProfile* prof = COLORPROFILE(current->data);
+ std::set<SPObject *> current = document->getResourceList("iccprofile");
+ for (std::set<SPObject *>::const_iterator it = current.begin(); (!result) && (it != current.end()); ++it) {
+ if ( IS_COLORPROFILE(*it) ) {
+ ColorProfile* prof = COLORPROFILE(*it);
if ( prof ) {
if ( prof->name && (strcmp(prof->name, name) == 0) ) {
- result = SP_OBJECT(current->data);
+ result = SP_OBJECT(*it);
break;
}
}
}
- current = g_slist_next(current);
}
return result;
diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp
index 4c9665fa0..d43d000a7 100644
--- a/src/conn-avoid-ref.cpp
+++ b/src/conn-avoid-ref.cpp
@@ -139,9 +139,9 @@ void SPAvoidRef::handleSettingChange(void)
}
-GSList *SPAvoidRef::getAttachedShapes(const unsigned int type)
+std::vector<SPItem *> SPAvoidRef::getAttachedShapes(const unsigned int type)
{
- GSList *list = NULL;
+ std::vector<SPItem *> list;
Avoid::IntList shapes;
GQuark shapeId = g_quark_from_string(item->getId());
@@ -157,15 +157,15 @@ GSList *SPAvoidRef::getAttachedShapes(const unsigned int type)
continue;
}
SPItem *shapeItem = SP_ITEM(obj);
- list = g_slist_prepend(list, shapeItem);
+ list.push_back(shapeItem);
}
return list;
}
-GSList *SPAvoidRef::getAttachedConnectors(const unsigned int type)
+std::vector<SPItem *> SPAvoidRef::getAttachedConnectors(const unsigned int type)
{
- GSList *list = NULL;
+ std::vector<SPItem *> list;
Avoid::IntList conns;
GQuark shapeId = g_quark_from_string(item->getId());
@@ -181,7 +181,7 @@ GSList *SPAvoidRef::getAttachedConnectors(const unsigned int type)
continue;
}
SPItem *connItem = SP_ITEM(obj);
- list = g_slist_prepend(list, connItem);
+ list.push_back(connItem);
}
return list;
}
@@ -331,7 +331,7 @@ static Avoid::Polygon avoid_item_poly(SPItem const *item)
}
-GSList *get_avoided_items(GSList *list, SPObject *from, SPDesktop *desktop,
+std::vector<SPItem *> get_avoided_items(std::vector<SPItem *> &list, SPObject *from, SPDesktop *desktop,
bool initialised)
{
for (SPObject *child = from->firstChild() ; child != NULL; child = child->next ) {
@@ -342,7 +342,7 @@ GSList *get_avoided_items(GSList *list, SPObject *from, SPDesktop *desktop,
(!initialised || SP_ITEM(child)->avoidRef->shapeRef)
)
{
- list = g_slist_prepend (list, SP_ITEM(child));
+ list.push_back(SP_ITEM(child));
}
if (SP_IS_ITEM(child) && desktop->isLayer(SP_ITEM(child))) {
@@ -376,17 +376,15 @@ void init_avoided_shape_geometry(SPDesktop *desktop)
DocumentUndo::setUndoSensitive(document, false);
bool initialised = false;
- GSList *items = get_avoided_items(NULL, desktop->currentRoot(), desktop,
+ std::vector<SPItem *> tmp;
+ std::vector<SPItem *> items = get_avoided_items(tmp, desktop->currentRoot(), desktop,
initialised);
- for ( GSList const *iter = items ; iter != NULL ; iter = iter->next ) {
- SPItem *item = reinterpret_cast<SPItem *>(iter->data);
+ for (std::vector<SPItem *>::const_iterator iter = items.begin(); iter != items.end(); ++iter) {
+ SPItem *item = *iter;
item->avoidRef->handleSettingChange();
}
- if (items) {
- g_slist_free(items);
- }
DocumentUndo::setUndoSensitive(document, saved);
}
diff --git a/src/conn-avoid-ref.h b/src/conn-avoid-ref.h
index e9e12118f..2c7da9aae 100644
--- a/src/conn-avoid-ref.h
+++ b/src/conn-avoid-ref.h
@@ -20,7 +20,6 @@
class SPDesktop;
class SPObject;
class SPItem;
-typedef struct _GSList GSList;
namespace Avoid { class ShapeRef; }
class SPAvoidRef {
@@ -41,8 +40,8 @@ public:
// Avoid::runningTo
// Avoid::runningFrom
// Avoid::runningToAndFrom
- GSList *getAttachedShapes(const unsigned int type);
- GSList *getAttachedConnectors(const unsigned int type);
+ std::vector<SPItem *> getAttachedShapes(const unsigned int type);
+ std::vector<SPItem *> getAttachedConnectors(const unsigned int type);
private:
SPItem *item;
@@ -55,7 +54,7 @@ private:
sigc::connection _transformed_connection;
};
-extern GSList *get_avoided_items(GSList *list, SPObject *from,
+extern std::vector<SPItem *> get_avoided_items(std::vector<SPItem *> &list, SPObject *from,
SPDesktop *desktop, bool initialised = true);
extern void avoid_item_move(Geom::Affine const *mp, SPItem *moved_item);
extern void init_avoided_shape_geometry(SPDesktop *desktop);
diff --git a/src/desktop-style.h b/src/desktop-style.h
index b9199b615..bf05adadf 100644
--- a/src/desktop-style.h
+++ b/src/desktop-style.h
@@ -19,7 +19,6 @@ class SPDesktop;
class SPObject;
class SPItem;
class SPStyle;
-typedef struct _GSList GSList;
namespace Inkscape {
namespace XML {
class Node;
diff --git a/src/desktop.cpp b/src/desktop.cpp
index ae92c058a..0aac46e8d 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -1479,7 +1479,7 @@ bool SPDesktop::colorProfAdjustEnabled()
void SPDesktop::toggleGrids()
{
- if (namedview->grids) {
+ if (! namedview->grids.empty()) {
if(gridgroup) {
showGrids(!grids_visible);
}
@@ -1704,12 +1704,6 @@ static void _reconstruction_start(SPDesktop * desktop)
desktop->_reconstruction_old_layer_id = desktop->currentLayer()->getId() ? desktop->currentLayer()->getId() : "";
desktop->layers->reset();
- /*
- GSList const * selection_objs = desktop->selection->list();
- for (; selection_objs != NULL; selection_objs = selection_objs->next) {
-
- }
- */
desktop->selection->clear();
}
diff --git a/src/document-private.h b/src/document-private.h
index a5033b3c2..eaed0020e 100644
--- a/src/document-private.h
+++ b/src/document-private.h
@@ -15,6 +15,8 @@
*/
#include <map>
+#include <set>
+#include <string>
#include <stddef.h>
#include <sigc++/sigc++.h>
#include "xml/event-fns.h"
@@ -34,14 +36,12 @@ class Event;
}
}
-typedef struct _GHashTable GHashTable;
-
struct SPDocumentPrivate {
typedef std::map<GQuark, SPDocument::IDChangedSignal> IDChangedSignalMap;
typedef std::map<GQuark, SPDocument::ResourcesChangedSignal> ResourcesChangedSignalMap;
- GHashTable *iddef; /**< Dictionary of id -> SPObject mappings */
- GHashTable *reprdef; /**< Dictionary of Inkscape::XML::Node -> SPObject mappings */
+ std::map<std::string, SPObject *> iddef;
+ std::map<Inkscape::XML::Node *, SPObject *> reprdef;
unsigned long serial;
@@ -49,8 +49,7 @@ struct SPDocumentPrivate {
IDChangedSignalMap id_changed_signals;
/* Resources */
- /* It is GHashTable of GSLists */
- GHashTable *resources;
+ std::map<std::string, std::set<SPObject *> > resources;
ResourcesChangedSignalMap resources_changed_signals;
sigc::signal<void> destroySignal;
@@ -65,8 +64,8 @@ struct SPDocumentPrivate {
bool sensitive; /* If we save actions to undo stack */
Inkscape::XML::Event * partial; /* partial undo log when interrupted */
int history_size;
- GSList * undo; /* Undo stack of reprs */
- GSList * redo; /* Redo stack of reprs */
+ std::vector<Inkscape::Event *> undo; /* Undo stack of reprs */
+ std::vector<Inkscape::Event *> redo; /* Redo stack of reprs */
/* Undo listener */
Inkscape::CompositeUndoStackObserver undoStackObservers;
diff --git a/src/document-undo.cpp b/src/document-undo.cpp
index 59e060cd5..eb0ac7707 100644
--- a/src/document-undo.cpp
+++ b/src/document-undo.cpp
@@ -162,12 +162,12 @@ void Inkscape::DocumentUndo::maybeDone(SPDocument *doc, const gchar *key, const
return;
}
- if (key && !doc->actionkey.empty() && (doc->actionkey == key) && doc->priv->undo) {
- ((Inkscape::Event *)doc->priv->undo->data)->event =
- sp_repr_coalesce_log (((Inkscape::Event *)doc->priv->undo->data)->event, log);
+ if (key && !doc->actionkey.empty() && (doc->actionkey == key) && !doc->priv->undo.empty()) {
+ (doc->priv->undo.back())->event =
+ sp_repr_coalesce_log ((doc->priv->undo.back())->event, log);
} else {
Inkscape::Event *event = new Inkscape::Event(log, event_type, event_description);
- doc->priv->undo = g_slist_prepend (doc->priv->undo, event);
+ doc->priv->undo.push_back(event);
doc->priv->history_size++;
doc->priv->undoStackObservers.notifyUndoCommitEvent(event);
}
@@ -211,7 +211,7 @@ static void finish_incomplete_transaction(SPDocument &doc) {
priv.partial = sp_repr_coalesce_log(priv.partial, log);
sp_repr_debug_print_log(priv.partial);
Inkscape::Event *event = new Inkscape::Event(priv.partial);
- priv.undo = g_slist_prepend(priv.undo, event);
+ priv.undo.push_back(event);
priv.undoStackObservers.notifyUndoCommitEvent(event);
priv.partial = NULL;
}
@@ -227,8 +227,8 @@ static void perform_document_update(SPDocument &doc) {
sp_repr_debug_print_log(update_log);
//Coalesce the update changes with the last action performed by user
- Inkscape::Event* undo_stack_top = (Inkscape::Event *)doc.priv->undo->data;
- if (undo_stack_top) {
+ if (!doc.priv->undo.empty()) {
+ Inkscape::Event* undo_stack_top = doc.priv->undo.back();
undo_stack_top->event = sp_repr_coalesce_log(undo_stack_top->event, update_log);
} else {
sp_repr_free_log(update_log);
@@ -256,13 +256,13 @@ gboolean Inkscape::DocumentUndo::undo(SPDocument *doc)
finish_incomplete_transaction(*doc);
- if (doc->priv->undo) {
- Inkscape::Event *log=(Inkscape::Event *)doc->priv->undo->data;
- doc->priv->undo = g_slist_remove (doc->priv->undo, log);
+ if (! doc->priv->undo.empty()) {
+ Inkscape::Event *log = doc->priv->undo.back();
+ doc->priv->undo.pop_back();
sp_repr_undo_log (log->event);
perform_document_update(*doc);
- doc->priv->redo = g_slist_prepend (doc->priv->redo, log);
+ doc->priv->redo.push_back(log);
doc->setModifiedSinceSave();
doc->priv->undoStackObservers.notifyUndoEvent(log);
@@ -303,11 +303,11 @@ gboolean Inkscape::DocumentUndo::redo(SPDocument *doc)
finish_incomplete_transaction(*doc);
- if (doc->priv->redo) {
- Inkscape::Event *log=(Inkscape::Event *)doc->priv->redo->data;
- doc->priv->redo = g_slist_remove (doc->priv->redo, log);
+ if (! doc->priv->redo.empty()) {
+ Inkscape::Event *log = doc->priv->redo.back();
+ doc->priv->redo.pop_back();
sp_repr_replay_log (log->event);
- doc->priv->undo = g_slist_prepend (doc->priv->undo, log);
+ doc->priv->undo.push_back(log);
doc->setModifiedSinceSave();
doc->priv->undoStackObservers.notifyRedoEvent(log);
@@ -330,37 +330,29 @@ gboolean Inkscape::DocumentUndo::redo(SPDocument *doc)
void Inkscape::DocumentUndo::clearUndo(SPDocument *doc)
{
- if (doc->priv->undo)
- doc->priv->undoStackObservers.notifyClearUndoEvent();
-
- while (doc->priv->undo) {
- GSList *current;
-
- current = doc->priv->undo;
- doc->priv->undo = current->next;
- doc->priv->history_size--;
-
- delete ((Inkscape::Event *) current->data);
- g_slist_free_1 (current);
- }
+ if (! doc->priv->undo.empty())
+ doc->priv->undoStackObservers.notifyClearUndoEvent();
+ while (! doc->priv->undo.empty()) {
+ Inkscape::Event *e = doc->priv->undo.back();
+ doc->priv->undo.pop_back();
+ delete e;
+ doc->priv->history_size--;
+ }
}
void Inkscape::DocumentUndo::clearRedo(SPDocument *doc)
{
- if (doc->priv->redo)
+ if (!doc->priv->redo.empty())
doc->priv->undoStackObservers.notifyClearRedoEvent();
- while (doc->priv->redo) {
- GSList *current;
-
- current = doc->priv->redo;
- doc->priv->redo = current->next;
- doc->priv->history_size--;
-
- delete ((Inkscape::Event *) current->data);
- g_slist_free_1 (current);
- }
+ while (! doc->priv->redo.empty()) {
+ Inkscape::Event *e = doc->priv->redo.back();
+ doc->priv->redo.pop_back();
+ delete e;
+ doc->priv->history_size--;
+ }
}
+
/*
Local Variables:
mode:c++
diff --git a/src/document.cpp b/src/document.cpp
index 23d99d78c..05e165965 100644
--- a/src/document.cpp
+++ b/src/document.cpp
@@ -81,7 +81,7 @@ using Inkscape::Util::unit_table;
static gint sp_document_idle_handler(gpointer data);
static gint sp_document_rerouting_handler(gpointer data);
-gboolean sp_document_resource_list_free(gpointer key, gpointer value, gpointer data);
+//gboolean sp_document_resource_list_free(gpointer key, gpointer value, gpointer data);
static gint doc_count = 0;
static gint doc_mem_count = 0;
@@ -105,7 +105,6 @@ SPDocument::SPDocument() :
rerouting_handler_id(0),
profileManager(NULL), // deferred until after other initialization
router(new Avoid::Router(Avoid::PolyLineRouting|Avoid::OrthogonalRouting)),
- _collection_queue(NULL),
oldSignalsConnected(false),
current_persp3d(NULL),
current_persp3d_impl(NULL),
@@ -119,16 +118,9 @@ SPDocument::SPDocument() :
p->serial = next_serial++;
- p->iddef = g_hash_table_new(g_direct_hash, g_direct_equal);
- p->reprdef = g_hash_table_new(g_direct_hash, g_direct_equal);
-
- p->resources = g_hash_table_new(g_str_hash, g_str_equal);
-
p->sensitive = false;
p->partial = NULL;
p->history_size = 0;
- p->undo = NULL;
- p->redo = NULL;
p->seeking = false;
priv = p;
@@ -177,17 +169,10 @@ SPDocument::~SPDocument() {
root = NULL;
}
- if (priv->iddef) g_hash_table_destroy(priv->iddef);
- if (priv->reprdef) g_hash_table_destroy(priv->reprdef);
-
if (rdoc) Inkscape::GC::release(rdoc);
/* Free resources */
- g_hash_table_foreach_remove(priv->resources, sp_document_resource_list_free, this);
- g_hash_table_destroy(priv->resources);
-
- delete priv;
- priv = NULL;
+ priv->resources.clear();
}
cr_cascade_unref(style_cascade);
@@ -295,19 +280,18 @@ void SPDocument::queueForOrphanCollection(SPObject *object) {
g_return_if_fail(object->document == this);
sp_object_ref(object, NULL);
- _collection_queue = g_slist_prepend(_collection_queue, object);
+ _collection_queue.push_back(object);
}
void SPDocument::collectOrphans() {
- while (_collection_queue) {
- GSList *objects=_collection_queue;
- _collection_queue = NULL;
- for ( GSList *iter=objects ; iter ; iter = iter->next ) {
- SPObject *object=reinterpret_cast<SPObject *>(iter->data);
+ while (!_collection_queue.empty()) {
+ std::vector<SPObject *> objects(_collection_queue);
+ _collection_queue.clear();
+ for (std::vector<SPObject *>::const_iterator iter = objects.begin(); iter != objects.end(); ++iter) {
+ SPObject *object = *iter;
object->collectOrphan();
sp_object_unref(object, NULL);
}
- g_slist_free(objects);
}
}
@@ -1008,11 +992,15 @@ void SPDocument::bindObjectToId(gchar const *id, SPObject *object) {
GQuark idq = g_quark_from_string(id);
if (object) {
- g_assert(g_hash_table_lookup(priv->iddef, GINT_TO_POINTER(idq)) == NULL);
- g_hash_table_insert(priv->iddef, GINT_TO_POINTER(idq), object);
+ g_assert(priv->iddef.find(id)==priv->iddef.end());
+ priv->iddef[id] = object;
+ //g_assert(g_hash_table_lookup(priv->iddef, GINT_TO_POINTER(idq)) == NULL);
+ //g_hash_table_insert(priv->iddef, GINT_TO_POINTER(idq), object);
} else {
- g_assert(g_hash_table_lookup(priv->iddef, GINT_TO_POINTER(idq)) != NULL);
- g_hash_table_remove(priv->iddef, GINT_TO_POINTER(idq));
+ g_assert(priv->iddef.find(id)!=priv->iddef.end());
+ priv->iddef.erase(id);
+ //g_assert(g_hash_table_lookup(priv->iddef, GINT_TO_POINTER(idq)) != NULL);
+ //g_hash_table_remove(priv->iddef, GINT_TO_POINTER(idq));
}
SPDocumentPrivate::IDChangedSignalMap::iterator pos;
@@ -1047,15 +1035,16 @@ SPObject *SPDocument::getObjectById(Glib::ustring const &id) const
SPObject *SPDocument::getObjectById(gchar const *id) const
{
g_return_val_if_fail(id != NULL, NULL);
- if (!priv || !priv->iddef) {
+ if (!priv || priv->iddef.empty()) {
return NULL;
}
GQuark idq = g_quark_from_string(id);
- gpointer rv = g_hash_table_lookup(priv->iddef, GINT_TO_POINTER(idq));
- if(rv != NULL)
+ std::map<std::string, SPObject *>::iterator rv = priv->iddef.find(id);
+ //gpointer rv = g_hash_table_lookup(priv->iddef, GINT_TO_POINTER(idq));
+ if(rv != priv->iddef.end())
{
- return static_cast<SPObject*>(rv);
+ return (rv->second);
}
else
{
@@ -1072,18 +1061,22 @@ sigc::connection SPDocument::connectIdChanged(gchar const *id,
void SPDocument::bindObjectToRepr(Inkscape::XML::Node *repr, SPObject *object)
{
if (object) {
- g_assert(g_hash_table_lookup(priv->reprdef, repr) == NULL);
- g_hash_table_insert(priv->reprdef, repr, object);
+ g_assert(priv->reprdef.find(repr)==priv->reprdef.end());
+ priv->reprdef[repr] = object;
} else {
- g_assert(g_hash_table_lookup(priv->reprdef, repr) != NULL);
- g_hash_table_remove(priv->reprdef, repr);
+ g_assert(priv->reprdef.find(repr)!=priv->reprdef.end());
+ priv->reprdef.erase(repr);
}
}
SPObject *SPDocument::getObjectByRepr(Inkscape::XML::Node *repr) const
{
g_return_val_if_fail(repr != NULL, NULL);
- return static_cast<SPObject*>(g_hash_table_lookup(priv->reprdef, repr));
+ std::map<Inkscape::XML::Node *, SPObject *>::iterator rv = priv->reprdef.find(repr);
+ if(rv != priv->reprdef.end())
+ return (rv->second);
+ else
+ return NULL;
}
Glib::ustring SPDocument::getLanguage() const
@@ -1528,10 +1521,9 @@ bool SPDocument::addResource(gchar const *key, SPObject *object)
bool result = false;
if ( !object->cloned ) {
- GSList *rlist = (GSList*)g_hash_table_lookup(priv->resources, key);
- g_return_val_if_fail(!g_slist_find(rlist, object), false);
- rlist = g_slist_prepend(rlist, object);
- g_hash_table_insert(priv->resources, (gpointer) key, rlist);
+ std::set<SPObject *> rlist = priv->resources[key];
+ g_return_val_if_fail(rlist.find(object) == rlist.end(), false);
+ priv->resources[key].insert(object);
GQuark q = g_quark_from_string(key);
@@ -1560,11 +1552,10 @@ bool SPDocument::removeResource(gchar const *key, SPObject *object)
bool result = false;
if ( !object->cloned ) {
- GSList *rlist = (GSList*)g_hash_table_lookup(priv->resources, key);
- g_return_val_if_fail(rlist != NULL, false);
- g_return_val_if_fail(g_slist_find(rlist, object), false);
- rlist = g_slist_remove(rlist, object);
- g_hash_table_insert(priv->resources, (gpointer) key, rlist);
+ std::set<SPObject *> rlist = priv->resources[key];
+ g_return_val_if_fail(!rlist.empty(), false);
+ g_return_val_if_fail(rlist.find(object) != rlist.end(), false);
+ priv->resources[key].erase(object);
GQuark q = g_quark_from_string(key);
priv->resources_changed_signals[q].emit();
@@ -1575,12 +1566,13 @@ bool SPDocument::removeResource(gchar const *key, SPObject *object)
return result;
}
-GSList const *SPDocument::getResourceList(gchar const *key) const
+std::set<SPObject *> const SPDocument::getResourceList(gchar const *key) const
{
- g_return_val_if_fail(key != NULL, NULL);
- g_return_val_if_fail(*key != '\0', NULL);
+ std::set<SPObject *> emptyset;
+ g_return_val_if_fail(key != NULL, emptyset);
+ g_return_val_if_fail(*key != '\0', emptyset);
- return (GSList*)g_hash_table_lookup(this->priv->resources, key);
+ return this->priv->resources[key];
}
sigc::connection SPDocument::connectResourcesChanged(gchar const *key,
@@ -1592,13 +1584,6 @@ sigc::connection SPDocument::connectResourcesChanged(gchar const *key,
/* Helpers */
-gboolean
-sp_document_resource_list_free(gpointer /*key*/, gpointer value, gpointer /*data*/)
-{
- g_slist_free((GSList *) value);
- return TRUE;
-}
-
static unsigned int count_objects_recursive(SPObject *obj, unsigned int count)
{
count++; // obj itself
diff --git a/src/document.h b/src/document.h
index be3f106d8..cf8ebc3cb 100644
--- a/src/document.h
+++ b/src/document.h
@@ -27,6 +27,7 @@
#include <glibmm/ustring.h>
#include <boost/ptr_container/ptr_list.hpp>
#include <vector>
+#include <set>
namespace Avoid {
class Router;
@@ -121,7 +122,7 @@ public:
// Instance of the connector router
Avoid::Router *router;
- GSList *_collection_queue;
+ std::vector<SPObject *> _collection_queue;
bool oldSignalsConnected;
@@ -258,7 +259,7 @@ public:
int ensureUpToDate();
bool addResource(char const *key, SPObject *object);
bool removeResource(char const *key, SPObject *object);
- const GSList *getResourceList(char const *key) const;
+ const std::set<SPObject *> getResourceList(char const *key) const;
std::vector<SPItem*> getItemsInBox(unsigned int dkey, Geom::Rect const &box) const;
std::vector<SPItem*> getItemsPartiallyInBox(unsigned int dkey, Geom::Rect const &box) const;
SPItem *getItemAtPoint(unsigned int key, Geom::Point const &p, bool into_groups, SPItem *upto = NULL) const;
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp
index 97b84606f..8b7a22f21 100644
--- a/src/extension/internal/cairo-render-context.cpp
+++ b/src/extension/internal/cairo-render-context.cpp
@@ -130,14 +130,12 @@ CairoRenderContext::CairoRenderContext(CairoRenderer *parent) :
_clip_mode(CLIP_MODE_MASK),
_omittext_state(EMPTY)
{
- font_table = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, font_data_free);
}
CairoRenderContext::~CairoRenderContext(void)
{
- if(font_table != NULL) {
- g_hash_table_remove_all(font_table);
- }
+ for (std::map<gpointer, cairo_font_face_t *>::const_iterator iter = font_table.begin(); iter != font_table.end(); ++iter)
+ font_data_free(iter->second);
if (_cr) cairo_destroy(_cr);
if (_surface) cairo_surface_destroy(_surface);
@@ -1645,7 +1643,9 @@ CairoRenderContext::renderGlyphtext(PangoFont *font, Geom::Affine const &font_ma
// create a cairo_font_face from PangoFont
double size = style->font_size.computed; /// \fixme why is this variable never used?
gpointer fonthash = (gpointer)font;
- cairo_font_face_t *font_face = (cairo_font_face_t *)g_hash_table_lookup(font_table, fonthash);
+ cairo_font_face_t *font_face = NULL;
+ if(font_table.find(fonthash)!=font_table.end())
+ font_face = font_table[fonthash];
FcPattern *fc_pattern = NULL;
@@ -1660,7 +1660,7 @@ CairoRenderContext::renderGlyphtext(PangoFont *font, Geom::Affine const &font_ma
if(font_face == NULL) {
font_face = cairo_win32_font_face_create_for_logfontw(&lfw);
- g_hash_table_insert(font_table, fonthash, font_face);
+ font_table[fonthash] = font_face;
}
# endif
#else
@@ -1669,7 +1669,7 @@ CairoRenderContext::renderGlyphtext(PangoFont *font, Geom::Affine const &font_ma
fc_pattern = fc_font->font_pattern;
if(font_face == NULL) {
font_face = cairo_ft_font_face_create_for_pattern(fc_pattern);
- g_hash_table_insert(font_table, fonthash, font_face);
+ font_table[fonthash] = font_face;
}
# endif
#endif
diff --git a/src/extension/internal/cairo-render-context.h b/src/extension/internal/cairo-render-context.h
index 57d155b60..b3ab3655a 100644
--- a/src/extension/internal/cairo-render-context.h
+++ b/src/extension/internal/cairo-render-context.h
@@ -219,7 +219,7 @@ protected:
void _prepareRenderGraphic(void);
void _prepareRenderText(void);
- GHashTable *font_table;
+ std::map<gpointer, cairo_font_face_t *> font_table;
static void font_data_free(gpointer data);
CairoRenderState *_createState(void);
diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp
index 886bf484d..9f2d030d4 100644
--- a/src/gradient-chemistry.cpp
+++ b/src/gradient-chemistry.cpp
@@ -1592,7 +1592,7 @@ void sp_gradient_reverse_selected_gradients(SPDesktop *desktop)
GrDrag *drag = ev->get_drag();
// First try selected dragger
- if (drag && drag->selected) {
+ 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<SPItem*> list=selection->itemList();
@@ -1612,9 +1612,9 @@ void sp_gradient_unset_swatch(SPDesktop *desktop, std::string id)
SPDocument *doc = desktop ? desktop->doc() : 0;
if (doc) {
- const GSList *gradients = doc->getResourceList("gradient");
- for (const GSList *item = gradients; item; item = item->next) {
- SPGradient* grad = SP_GRADIENT(item->data);
+ const std::set<SPObject *> gradients = doc->getResourceList("gradient");
+ for (std::set<SPObject *>::const_iterator i = gradients.begin(); i != gradients.end(); ++i) {
+ SPGradient* grad = SP_GRADIENT(*i);
if ( id == grad->getId() ) {
grad->setSwatch(false);
DocumentUndo::done(doc, SP_VERB_CONTEXT_GRADIENT,
diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp
index f94ffb838..8fd997121 100644
--- a/src/gradient-drag.cpp
+++ b/src/gradient-drag.cpp
@@ -142,7 +142,7 @@ static int gr_drag_style_query(SPStyle *style, int property, gpointer data)
return QUERY_STYLE_NOTHING;
}
- if (!drag->selected) {
+ if (drag->selected.empty()) {
return QUERY_STYLE_NOTHING;
} else {
int ret = QUERY_STYLE_NOTHING;
@@ -151,11 +151,10 @@ static int gr_drag_style_query(SPStyle *style, int property, gpointer data)
cf[0] = cf[1] = cf[2] = cf[3] = 0;
int count = 0;
-
- for (GList *i = drag->selected; i != NULL; i = i->next) { // for all selected draggers
- GrDragger *d = (GrDragger *) i->data;
- for (GSList const* j = d->draggables; j != NULL; j = j->next) { // for all draggables of dragger
- GrDraggable *draggable = (GrDraggable *) j->data;
+ for(std::set<GrDragger *>::const_iterator it = drag->selected.begin(); it != drag->selected.end(); ++it) { //for all selected draggers
+ GrDragger *d = *it;
+ for(std::vector<GrDraggable *>::const_iterator it2 = d->draggables.begin(); it2 != d->draggables.end(); ++it2 ) { //for all draggables of dragger
+ GrDraggable *draggable = *it2;
if (ret == QUERY_STYLE_NOTHING) {
ret = QUERY_STYLE_SINGLE;
@@ -209,9 +208,9 @@ Glib::ustring GrDrag::makeStopSafeColor( gchar const *str, bool &isNull )
Glib::ustring::size_type pos = colorStr.find("url(#");
if ( pos != Glib::ustring::npos ) {
Glib::ustring targetName = colorStr.substr(pos + 5, colorStr.length() - 6);
- const GSList *gradients = desktop->doc()->getResourceList("gradient");
- for (const GSList *item = gradients; item; item = item->next) {
- SPGradient* grad = SP_GRADIENT(item->data);
+ std::set<SPObject *> gradients = desktop->doc()->getResourceList("gradient");
+ for (std::set<SPObject *>::const_iterator it = gradients.begin(); it != gradients.end(); ++it) {
+ SPGradient* grad = SP_GRADIENT(*it);
if ( targetName == grad->getId() ) {
SPGradient *vect = grad->getVector();
SPStop *firstStop = (vect) ? vect->getFirstStop() : grad->getFirstStop();
@@ -239,7 +238,7 @@ Glib::ustring GrDrag::makeStopSafeColor( gchar const *str, bool &isNull )
bool GrDrag::styleSet( const SPCSSAttr *css )
{
- if (!selected) {
+ if (selected.empty()) {
return false;
}
@@ -307,11 +306,10 @@ bool GrDrag::styleSet( const SPCSSAttr *css )
return false;
}
- for (GList const* sel = selected; sel != NULL; sel = sel->next) { // for all selected draggers
- GrDragger* dragger = reinterpret_cast<GrDragger*>(sel->data);
- for (GSList const* i = dragger->draggables; i != NULL; i = i->next) { // for all draggables of dragger
- GrDraggable *draggable = reinterpret_cast<GrDraggable *>(i->data);
-
+ for(std::set<GrDragger *>::const_iterator it = selected.begin(); it != selected.end(); ++it) { //for all selected draggers
+ GrDragger *d = *it;
+ for(std::vector<GrDraggable *>::const_iterator it2 = d->draggables.begin(); it2 != d->draggables.end(); ++it2 ) { //for all draggables of dragger
+ GrDraggable *draggable = *it2;
local_change = true;
sp_item_gradient_stop_set_style(draggable->item, draggable->point_type, draggable->point_i, draggable->fill_or_stroke, stop);
}
@@ -324,17 +322,17 @@ bool GrDrag::styleSet( const SPCSSAttr *css )
guint32 GrDrag::getColor()
{
- if (!selected) return 0;
+ if (selected.empty()) return 0;
float cf[4];
cf[0] = cf[1] = cf[2] = cf[3] = 0;
int count = 0;
- for (GList *i = selected; i != NULL; i = i->next) { // for all selected draggers
- GrDragger *d = (GrDragger *) i->data;
- for (GSList const* j = d->draggables; j != NULL; j = j->next) { // for all draggables of dragger
- GrDraggable *draggable = (GrDraggable *) j->data;
+ for(std::set<GrDragger *>::const_iterator it = selected.begin(); it != selected.end(); ++it) { //for all selected draggers
+ GrDragger *d = *it;
+ for(std::vector<GrDraggable *>::const_iterator it2 = d->draggables.begin(); it2 != d->draggables.end(); ++it2 ) { //for all draggables of dragger
+ GrDraggable *draggable = *it2;
guint32 c = sp_item_gradient_stop_query_style (draggable->item, draggable->point_type, draggable->point_i, draggable->fill_or_stroke);
cf[0] += SP_RGBA32_R_F (c);
@@ -580,15 +578,15 @@ bool GrDrag::dropColor(SPItem */*item*/, gchar const *c, Geom::Point p)
Glib::ustring toUse = makeStopSafeColor( c, stopIsNull );
// first, see if we can drop onto one of the existing draggers
- for (GList *i = draggers; i != NULL; i = i->next) { // for all draggables of dragger
- GrDragger *d = (GrDragger *) i->data;
+ for(std::vector<GrDragger *>::const_iterator i = draggers.begin(); i != draggers.end(); ++i) { //for all draggers
+ GrDragger *d = *i ;
if (Geom::L2(p - d->point)*desktop->current_zoom() < 5) {
SPCSSAttr *stop = sp_repr_css_attr_new ();
sp_repr_css_set_property( stop, "stop-color", stopIsNull ? 0 : toUse.c_str() );
sp_repr_css_set_property( stop, "stop-opacity", "1" );
- for (GSList *j = d->draggables; j != NULL; j = j->next) { // for all draggables of dragger
- GrDraggable *draggable = (GrDraggable *) j->data;
+ for(std::vector<GrDraggable *>::const_iterator j = d->draggables.begin(); j != d->draggables.end(); ++j) { //for all draggables of dragger
+ GrDraggable *draggable = *j;
local_change = true;
sp_item_gradient_stop_set_style (draggable->item, draggable->point_type, draggable->point_i, draggable->fill_or_stroke, stop);
}
@@ -599,9 +597,9 @@ bool GrDrag::dropColor(SPItem */*item*/, gchar const *c, Geom::Point p)
// now see if we're over line and create a new stop
bool over_line = false;
- if (lines) {
- for (GSList *l = lines; (l != NULL) && (!over_line); l = l->next) {
- SPCtrlLine *line = (SPCtrlLine*) l->data;
+ if (!lines.empty()) {
+ for (std::vector<SPCtrlLine *>::const_iterator l = lines.begin(); l != lines.end() && (!over_line); ++l) {
+ SPCtrlLine *line = *l;
Geom::LineSegment ls(line->s, line->e);
Geom::Point nearest = ls.pointAt(ls.nearestTime(p));
double dist_screen = Geom::L2(p - nearest) * desktop->current_zoom();
@@ -623,7 +621,6 @@ bool GrDrag::dropColor(SPItem */*item*/, gchar const *c, Geom::Point p)
GrDrag::GrDrag(SPDesktop *desktop) :
- selected(0),
keep_selection(false),
local_change(false),
desktop(desktop),
@@ -676,8 +673,8 @@ GrDrag::~GrDrag()
this->style_set_connection.disconnect();
this->style_query_connection.disconnect();
- if (this->selected) {
- GrDraggable *draggable = (GrDraggable *) ((GrDragger*)this->selected->data)->draggables->data;
+ if (! this->selected.empty()) {
+ GrDraggable *draggable = (*(this->selected.begin()))->draggables[0];
desktop->gr_item = draggable->item;
desktop->gr_point_type = draggable->point_type;
desktop->gr_point_i = draggable->point_i;
@@ -690,18 +687,16 @@ GrDrag::~GrDrag()
}
deselect_all();
- for (GList *l = this->draggers; l != NULL; l = l->next) {
- delete ((GrDragger *) l->data);
+ for (std::vector<GrDragger *>::const_iterator it = this->draggers.begin(); it != this->draggers.end(); ++it) {
+ delete (*it);
}
- g_list_free (this->draggers);
- this->draggers = NULL;
- this->selected = NULL;
+ this->draggers.clear();
+ this->selected.clear();
- for (GSList *l = this->lines; l != NULL; l = l->next) {
- sp_canvas_item_destroy(SP_CANVAS_ITEM(l->data));
+ for (std::vector<SPCtrlLine *>::const_iterator it = this->lines.begin(); it != this->lines.end(); ++it) {
+ sp_canvas_item_destroy(SP_CANVAS_ITEM(*it));
}
- g_slist_free (this->lines);
- this->lines = NULL;
+ this->lines.clear();
}
GrDraggable::GrDraggable(SPItem *item, GrPointType point_type, guint point_i, Inkscape::PaintTarget fill_or_stroke) :
@@ -751,39 +746,43 @@ static void gr_knot_moved_handler(SPKnot *knot, Geom::Point const &ppointer, gui
if (state & GDK_SHIFT_MASK) {
// with Shift; unsnap if we carry more than one draggable
- if (dragger->draggables && dragger->draggables->next) {
+ if (dragger->draggables.size()>1) {
// create a new dragger
GrDragger *dr_new = new GrDragger (dragger->parent, dragger->point, NULL);
- dragger->parent->draggers = g_list_prepend (dragger->parent->draggers, dr_new);
+ dragger->parent->draggers.insert(dragger->parent->draggers.begin(), dr_new);
// relink to it all but the first draggable in the list
- for (GSList const* i = dragger->draggables->next; i != NULL; i = i->next) {
- GrDraggable *draggable = (GrDraggable *) i->data;
+ std::vector<GrDraggable *>::const_iterator i = dragger->draggables.begin();
+ for ( ++i ; i != dragger->draggables.end(); ++i ) {
+ GrDraggable *draggable = *i;
dr_new->addDraggable (draggable);
}
dr_new->updateKnotShape();
- g_slist_free (dragger->draggables->next);
- dragger->draggables->next = NULL;
+ if(dragger->draggables.size()>1){
+ GrDraggable *tmp = dragger->draggables[0];
+ dragger->draggables.clear();
+ dragger->draggables.push_back(tmp);
+ }
dragger->updateKnotShape();
dragger->updateTip();
}
} else if (!(state & GDK_CONTROL_MASK)) {
// without Shift or Ctrl; see if we need to snap to another dragger
- for (GList *di = dragger->parent->draggers; di != NULL; di = di->next) {
- GrDragger *d_new = (GrDragger *) di->data;
+ for (std::vector<GrDragger *>::const_iterator di = dragger->parent->draggers.begin(); di != dragger->parent->draggers.end() ; ++di) {
+ GrDragger *d_new = *di;
if (dragger->mayMerge(d_new) && Geom::L2 (d_new->point - p) < snap_dist) {
// Merge draggers:
- for (GSList const* i = dragger->draggables; i != NULL; i = i->next) { // for all draggables of dragger
- GrDraggable *draggable = (GrDraggable *) i->data;
+ for (std::vector<GrDraggable *>::const_iterator i = dragger->draggables.begin(); i != dragger->draggables.end(); ++i) {
+ GrDraggable *draggable = *i;
// copy draggable to d_new:
GrDraggable *da_new = new GrDraggable (draggable->item, draggable->point_type, draggable->point_i, draggable->fill_or_stroke);
d_new->addDraggable (da_new);
}
// unlink and delete this dragger
- dragger->parent->draggers = g_list_remove (dragger->parent->draggers, dragger);
- d_new->parent->draggers = g_list_remove (d_new->parent->draggers, dragger);
- d_new->parent->selected = g_list_remove (d_new->parent->selected, dragger);
+ dragger->parent->draggers.erase(std::remove(dragger->parent->draggers.begin(),dragger->parent->draggers.end(), dragger),dragger->parent->draggers.end());
+ d_new->parent->draggers.erase(std::remove(d_new->parent->draggers.begin(),d_new->parent->draggers.end(), dragger),d_new->parent->draggers.end());
+ d_new->parent->selected.erase(dragger);
delete dragger;
// throw out delayed snap context
@@ -817,14 +816,14 @@ static void gr_knot_moved_handler(SPKnot *knot, Geom::Point const &ppointer, gui
unsigned snaps = abs(prefs->getInt("/options/rotationsnapsperpi/value", 12));
/* 0 means no snapping. */
- for (GSList const* i = dragger->draggables; i != NULL; i = i->next) {
- GrDraggable *draggable = (GrDraggable *) i->data;
+ for (std::vector<GrDraggable *>::const_iterator i = dragger->draggables.begin(); i != dragger->draggables.end(); ++i) {
+ GrDraggable *draggable = *i;
Geom::Point dr_snap(Geom::infinity(), Geom::infinity());
if (draggable->point_type == POINT_LG_BEGIN || draggable->point_type == POINT_LG_END) {
- for (GList *di = dragger->parent->draggers; di != NULL; di = di->next) {
- GrDragger *d_new = (GrDragger *) di->data;
+ for (std::vector<GrDragger *>::const_iterator di = dragger->parent->draggers.begin() ; di != dragger->parent->draggers.end() ; ++di) {
+ GrDragger *d_new = *di;
if (d_new == dragger)
continue;
if (d_new->isA (draggable->item,
@@ -842,8 +841,8 @@ static void gr_knot_moved_handler(SPKnot *knot, Geom::Point const &ppointer, gui
}
}
} else if (draggable->point_type == POINT_RG_R1 || draggable->point_type == POINT_RG_R2 || draggable->point_type == POINT_RG_FOCUS) {
- for (GList *di = dragger->parent->draggers; di != NULL; di = di->next) {
- GrDragger *d_new = (GrDragger *) di->data;
+ for (std::vector<GrDragger *>::const_iterator di = dragger->parent->draggers.begin(); di != dragger->parent->draggers.end(); ++di) {
+ GrDragger *d_new = *di;
if (d_new == dragger)
continue;
if (d_new->isA (draggable->item,
@@ -896,7 +895,7 @@ static void gr_knot_moved_handler(SPKnot *knot, Geom::Point const &ppointer, gui
knot->moveto(p);
}
- drag->keep_selection = (bool) g_list_find(drag->selected, dragger);
+ drag->keep_selection = (drag->selected.find(dragger)!=drag->selected.end());
bool scale_radial = (state & GDK_CONTROL_MASK) && (state & GDK_SHIFT_MASK);
if (drag->keep_selection) {
@@ -912,16 +911,16 @@ static void gr_knot_moved_handler(SPKnot *knot, Geom::Point const &ppointer, gui
}
-static void gr_midpoint_limits(GrDragger *dragger, SPObject *server, Geom::Point *begin, Geom::Point *end, Geom::Point *low_lim, Geom::Point *high_lim, GSList **moving)
+static void gr_midpoint_limits(GrDragger *dragger, SPObject *server, Geom::Point *begin, Geom::Point *end, Geom::Point *low_lim, Geom::Point *high_lim, std::vector<GrDragger *> &moving)
{
GrDrag *drag = dragger->parent;
// a midpoint dragger can (logically) only contain one GrDraggable
- GrDraggable *draggable = (GrDraggable *) dragger->draggables->data;
+ GrDraggable *draggable = dragger->draggables[0];
// get begin and end points between which dragging is allowed:
// the draglimits are between knot(lowest_i - 1) and knot(highest_i + 1)
- *moving = g_slist_append(*moving, dragger);
+ moving.push_back(dragger);
guint lowest_i = draggable->point_i;
guint highest_i = draggable->point_i;
@@ -932,9 +931,9 @@ static void gr_midpoint_limits(GrDragger *dragger, SPObject *server, Geom::Point
while ( true )
{
d_add = drag->getDraggerFor(draggable->item, draggable->point_type, lowest_i - 1, draggable->fill_or_stroke);
- if ( d_add && g_list_find(drag->selected, d_add) ) {
+ if ( d_add && drag->selected.find(d_add)!=drag->selected.end() ) {
lowest_i = lowest_i - 1;
- *moving = g_slist_prepend(*moving, d_add);
+ moving.insert(moving.begin(),d_add);
lowest_dragger = d_add;
} else {
break;
@@ -944,9 +943,9 @@ static void gr_midpoint_limits(GrDragger *dragger, SPObject *server, Geom::Point
while ( true )
{
d_add = drag->getDraggerFor(draggable->item, draggable->point_type, highest_i + 1, draggable->fill_or_stroke);
- if ( d_add && g_list_find(drag->selected, d_add) ) {
+ if ( d_add && drag->selected.find(d_add)!=drag->selected.end() ) {
highest_i = highest_i + 1;
- *moving = g_slist_append(*moving, d_add);
+ moving.push_back(d_add);
highest_dragger = d_add;
} else {
break;
@@ -1002,7 +1001,7 @@ static void gr_knot_moved_midpoint_handler(SPKnot */*knot*/, Geom::Point const &
GrDragger *dragger = (GrDragger *) data;
GrDrag *drag = dragger->parent;
// a midpoint dragger can (logically) only contain one GrDraggable
- GrDraggable *draggable = (GrDraggable *) dragger->draggables->data;
+ GrDraggable *draggable = dragger->draggables[0];
// FIXME: take from prefs
double snap_fraction = 0.1;
@@ -1013,8 +1012,8 @@ static void gr_knot_moved_midpoint_handler(SPKnot */*knot*/, Geom::Point const &
SPObject *server = draggable->getServer();
- GSList *moving = NULL;
- gr_midpoint_limits(dragger, server, &begin, &end, &low_lim, &high_lim, &moving);
+ std::vector<GrDragger *> moving;
+ gr_midpoint_limits(dragger, server, &begin, &end, &low_lim, &high_lim, moving);
if (state & GDK_CONTROL_MASK) {
Geom::LineSegment ls(low_lim, high_lim);
@@ -1033,8 +1032,8 @@ static void gr_knot_moved_midpoint_handler(SPKnot */*knot*/, Geom::Point const &
}
Geom::Point displacement = p - dragger->point;
- for (GSList const* i = moving; i != NULL; i = i->next) {
- GrDragger *drg = (GrDragger*) i->data;
+ for (std::vector<GrDragger *>::const_iterator i = moving.begin(); i!= moving.end(); ++i ) {
+ GrDragger *drg = *i;
SPKnot *drgknot = drg->knot;
Geom::Point this_move = displacement;
if (state & GDK_MOD1_MASK) {
@@ -1054,8 +1053,6 @@ static void gr_knot_moved_midpoint_handler(SPKnot */*knot*/, Geom::Point const &
drg->updateDependencies(false);
}
- g_slist_free(moving);
-
drag->keep_selection = dragger->isSelected();
}
@@ -1085,12 +1082,11 @@ static void gr_knot_ungrabbed_handler(SPKnot *knot, unsigned int state, gpointer
dragger->fireDraggables (true);
}
dragger->updateHandles( dragger->point_original, MG_NODE_NO_SCALE );
-
- for (GList *i = dragger->parent->selected; i != NULL; i = i->next) {
- GrDragger *d = (GrDragger *) i->data;
- if (d == dragger)
+
+ for (std::set<GrDragger *>::const_iterator it = dragger->parent->selected.begin(); it != dragger->parent->selected.end() ; ++it ) {
+ if (*it == dragger)
continue;
- d->fireDraggables (true);
+ (*it)->fireDraggables (true);
}
// make this dragger selected
@@ -1112,7 +1108,7 @@ static void gr_knot_ungrabbed_handler(SPKnot *knot, unsigned int state, gpointer
static void gr_knot_clicked_handler(SPKnot */*knot*/, guint state, gpointer data)
{
GrDragger *dragger = (GrDragger *) data;
- GrDraggable *draggable = (GrDraggable *) dragger->draggables->data;
+ GrDraggable *draggable = dragger->draggables[0];
if (!draggable) return;
if ( (state & GDK_CONTROL_MASK) && (state & GDK_MOD1_MASK ) ) {
@@ -1185,7 +1181,7 @@ static void gr_knot_doubleclicked_handler(SPKnot */*knot*/, guint /*state*/, gpo
dragger->point_original = dragger->point;
- if (dragger->draggables == NULL)
+ if (dragger->draggables.empty())
return;
/*
@@ -1200,8 +1196,8 @@ static void gr_knot_doubleclicked_handler(SPKnot */*knot*/, guint /*state*/, gpo
*/
void GrDragger::fireDraggables(bool write_repr, bool scale_radial, bool merging_focus)
{
- for (GSList const* i = this->draggables; i != NULL; i = i->next) {
- GrDraggable *draggable = (GrDraggable *) i->data;
+ for (std::vector<GrDraggable *>::const_iterator i = this->draggables.begin(); i != this->draggables.end(); ++i) {
+ GrDraggable *draggable = *i;
// set local_change flag so that selection_changed callback does not regenerate draggers
this->parent->local_change = true;
@@ -1221,8 +1217,8 @@ void GrDragger::fireDraggables(bool write_repr, bool scale_radial, bool merging_
*/
bool GrDragger::isA(GrPointType point_type)
{
- for (GSList const* i = this->draggables; i != NULL; i = i->next) {
- GrDraggable *draggable = reinterpret_cast<GrDraggable *>(i->data);
+ for (std::vector<GrDraggable *>::const_iterator i = this->draggables.begin(); i != this->draggables.end(); ++i) {
+ GrDraggable *draggable = *i;
if (draggable->point_type == point_type) {
return true;
}
@@ -1235,8 +1231,8 @@ bool GrDragger::isA(GrPointType point_type)
*/
bool GrDragger::isA(SPItem *item, GrPointType point_type, gint point_i, Inkscape::PaintTarget fill_or_stroke)
{
- for (GSList const* i = this->draggables; i != NULL; i = i->next) {
- GrDraggable *draggable = (GrDraggable *) i->data;
+ for (std::vector<GrDraggable *>::const_iterator i = this->draggables.begin(); i != this->draggables.end(); ++i) {
+ GrDraggable *draggable = *i;
if ( (draggable->point_type == point_type) && (draggable->point_i == point_i) && (draggable->item == item) && (draggable->fill_or_stroke == fill_or_stroke) ) {
return true;
}
@@ -1249,8 +1245,8 @@ bool GrDragger::isA(SPItem *item, GrPointType point_type, gint point_i, Inkscape
*/
bool GrDragger::isA(SPItem *item, GrPointType point_type, Inkscape::PaintTarget fill_or_stroke)
{
- for (GSList const* i = this->draggables; i != NULL; i = i->next) {
- GrDraggable *draggable = (GrDraggable *) i->data;
+ for (std::vector<GrDraggable *>::const_iterator i = this->draggables.begin(); i != this->draggables.end(); ++i) {
+ GrDraggable *draggable = *i;
if ( (draggable->point_type == point_type) && (draggable->item == item) && (draggable->fill_or_stroke == fill_or_stroke) ) {
return true;
}
@@ -1282,10 +1278,10 @@ bool GrDragger::mayMerge(GrDragger *other)
if (this == other)
return false;
- for (GSList const* i = this->draggables; i != NULL; i = i->next) { // for all draggables of this
- GrDraggable *da1 = (GrDraggable *) i->data;
- for (GSList const* j = other->draggables; j != NULL; j = j->next) { // for all draggables of other
- GrDraggable *da2 = (GrDraggable *) j->data;
+ for (std::vector<GrDraggable *>::const_iterator i = this->draggables.begin(); i != this->draggables.end(); ++i) {
+ GrDraggable *da1 = *i;
+ for (std::vector<GrDraggable *>::const_iterator j = other->draggables.begin(); j != other->draggables.end(); ++j) {
+ GrDraggable *da2 = *j;
if (!da1->mayMerge(da2))
return false;
}
@@ -1295,8 +1291,8 @@ bool GrDragger::mayMerge(GrDragger *other)
bool GrDragger::mayMerge(GrDraggable *da2)
{
- for (GSList const* i = this->draggables; i != NULL; i = i->next) { // for all draggables of this
- GrDraggable *da1 = (GrDraggable *) i->data;
+ for (std::vector<GrDraggable *>::const_iterator i = this->draggables.begin(); i != this->draggables.end(); ++i) {
+ GrDraggable *da1 = *i;
if (!da1->mayMerge(da2))
return false;
}
@@ -1339,10 +1335,10 @@ GrDragger::updateHandles ( Geom::Point pc_old, MeshNodeOperation op )
bool scale = false;
if( scale == true ) {
- for ( GList *i = drag->selected; i != NULL; i = i->next ) {
- GrDragger *dragger = (GrDragger *) i->data;
- for ( GSList *j = dragger->draggables; j != NULL; j = j->next ) {
- GrDraggable *draggable = (GrDraggable *) j->data;
+ for( std::set<GrDragger *>::const_iterator it = drag->selected.begin(); it != drag->selected.end(); ++it ) {
+ GrDragger *dragger = *it;
+ for (std::vector<GrDraggable *>::const_iterator it2 = dragger->draggables.begin(); it2 != dragger->draggables.end(); ++it2 ) {
+ GrDraggable *draggable = *it2;
// Check draggable is of type POINT_MG_CORNER (don't allow selection of POINT_MG_HANDLE)
if( draggable->point_type != POINT_MG_CORNER ) continue;
@@ -1360,8 +1356,8 @@ GrDragger::updateHandles ( Geom::Point pc_old, MeshNodeOperation op )
// Loop over all draggables in moved corner
std::map<SPGradient*, std::vector<guint> > dragger_corners;
- for ( GSList *j = draggables; j != NULL; j = j->next ) {
- GrDraggable *draggable = (GrDraggable *) j->data;
+ for (std::vector<GrDraggable *>::const_iterator j = draggables.begin(); j != draggables.end(); ++j ) {
+ GrDraggable *draggable = *j;
SPItem *item = draggable->item;
gint point_type = draggable->point_type;
@@ -1417,8 +1413,8 @@ void GrDragger::updateTip()
this->knot->tip = NULL;
}
- if (g_slist_length (this->draggables) == 1) {
- GrDraggable *draggable = (GrDraggable *) this->draggables->data;
+ if (this->draggables.size() == 1) {
+ GrDraggable *draggable = this->draggables[0];
char *item_desc = draggable->item->detailedDescription();
switch (draggable->point_type) {
case POINT_LG_MID:
@@ -1439,10 +1435,10 @@ void GrDragger::updateTip()
break;
}
g_free(item_desc);
- } else if (g_slist_length (draggables) == 2 && isA (POINT_RG_CENTER) && isA (POINT_RG_FOCUS)) {
+ } else if (draggables.size() == 2 && isA (POINT_RG_CENTER) && isA (POINT_RG_FOCUS)) {
this->knot->tip = g_strdup_printf ("%s", _("Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to separate focus"));
} else {
- int length = g_slist_length (this->draggables);
+ int length = this->draggables.size();
this->knot->tip = g_strdup_printf (ngettext("Gradient point shared by <b>%d</b> gradient; drag with <b>Shift</b> to separate",
"Gradient point shared by <b>%d</b> gradients; drag with <b>Shift</b> to separate",
length),
@@ -1455,9 +1451,9 @@ void GrDragger::updateTip()
*/
void GrDragger::updateKnotShape()
{
- if (!draggables)
+ if (draggables.empty())
return;
- GrDraggable *last = (GrDraggable *) g_slist_last(draggables)->data;
+ GrDraggable *last = draggables.back();
g_object_set (G_OBJECT (this->knot->item), "shape", gr_knot_shapes[last->point_type], NULL);
}
@@ -1466,7 +1462,7 @@ void GrDragger::updateKnotShape()
*/
void GrDragger::addDraggable(GrDraggable *draggable)
{
- this->draggables = g_slist_prepend (this->draggables, draggable);
+ this->draggables.insert(this->draggables.begin(), draggable);
this->updateTip();
}
@@ -1477,18 +1473,18 @@ void GrDragger::addDraggable(GrDraggable *draggable)
*/
void GrDragger::moveThisToDraggable(SPItem *item, GrPointType point_type, gint point_i, Inkscape::PaintTarget fill_or_stroke, bool write_repr)
{
- GrDraggable *dr_first = reinterpret_cast<GrDraggable *>(draggables->data);
- if (!dr_first) {
+ if (draggables.empty())
return;
- }
+
+ GrDraggable *dr_first = draggables[0];
this->point = getGradientCoords(dr_first->item, dr_first->point_type, dr_first->point_i, dr_first->fill_or_stroke);
this->point_original = this->point;
this->knot->moveto(this->point);
- for (GSList const* i = draggables; i != NULL; i = i->next) {
- GrDraggable *da = (GrDraggable *) i->data;
+ for (std::vector<GrDraggable *>::const_iterator j = draggables.begin(); j != draggables.end(); ++j ) {
+ GrDraggable *da = *j;
if ( (da->item == item) &&
(point_type == -1 || da->point_type == point_type) &&
(point_i == -1 || da->point_i == point_i) &&
@@ -1531,8 +1527,8 @@ void GrDragger::updateMidstopDependencies(GrDraggable *draggable, bool write_rep
*/
void GrDragger::updateDependencies(bool write_repr)
{
- for (GSList const* i = this->draggables; i != NULL; i = i->next) {
- GrDraggable *draggable = (GrDraggable *) i->data;
+ for (std::vector<GrDraggable *>::const_iterator j = draggables.begin(); j != draggables.end(); ++j ) {
+ GrDraggable *draggable = *j;
switch (draggable->point_type) {
case POINT_LG_BEGIN:
{
@@ -1590,7 +1586,7 @@ GrDragger::GrDragger(GrDrag *parent, Geom::Point p, GrDraggable *draggable)
: point(p),
point_original(p)
{
- this->draggables = NULL;
+ this->draggables.clear();
this->parent = parent;
@@ -1649,12 +1645,10 @@ GrDragger::~GrDragger()
knot_unref(this->knot);
// delete all draggables
- for (GSList const* i = this->draggables; i != NULL; i = i->next) {
- delete ((GrDraggable *) i->data);
+ for (std::vector<GrDraggable *>::const_iterator j = this->draggables.begin(); j != this->draggables.end(); ++j ) {
+ delete (*j);
}
-
- g_slist_free (this->draggables);
- this->draggables = NULL;
+ this->draggables.clear();
}
/**
@@ -1662,10 +1656,10 @@ GrDragger::~GrDragger()
*/
GrDragger *GrDrag::getDraggerFor(SPItem *item, GrPointType point_type, gint point_i, Inkscape::PaintTarget fill_or_stroke)
{
- for (GList const* i = this->draggers; i != NULL; i = i->next) {
- GrDragger *dragger = (GrDragger *) i->data;
- for (GSList const* j = dragger->draggables; j != NULL; j = j->next) {
- GrDraggable *da2 = (GrDraggable *) j->data;
+ for (std::vector<GrDragger *>::const_iterator i = this->draggers.begin(); i != this->draggers.end(); ++i ) {
+ GrDragger *dragger = *i;
+ for (std::vector<GrDraggable *>::const_iterator j = dragger->draggables.begin(); j != dragger->draggables.end(); ++j ) {
+ GrDraggable *da2 = *j;
if ( (da2->item == item) &&
(point_type == -1 || da2->point_type == point_type) && // -1 means this does not matter
(point_i == -1 || da2->point_i == point_i) && // -1 means this does not matter
@@ -1716,7 +1710,7 @@ void GrDragger::deselect()
bool
GrDragger::isSelected()
{
- return g_list_find (parent->selected, this);
+ return parent->selected.find(this) != parent->selected.end();
}
/**
@@ -1724,10 +1718,9 @@ GrDragger::isSelected()
*/
void GrDrag::deselect_all()
{
- while (selected) {
- ( (GrDragger*) selected->data)->deselect();
- selected = g_list_remove(selected, selected->data);
- }
+ for (std::set<GrDragger *>::const_iterator it = selected.begin(); it != selected.end(); ++it )
+ (*it)->deselect();
+ selected.clear();
}
/**
@@ -1744,8 +1737,8 @@ void GrDrag::deselectAll()
*/
void GrDrag::selectAll()
{
- for (GList *l = this->draggers; l != NULL; l = l->next) {
- GrDragger *d = ((GrDragger *) l->data);
+ for (std::vector<GrDragger *>::const_iterator l = this->draggers.begin(); l != this->draggers.end(); ++l) {
+ GrDragger *d = *l;
setSelected (d, true, true);
}
}
@@ -1755,8 +1748,8 @@ void GrDrag::selectAll()
*/
void GrDrag::selectByCoords(std::vector<Geom::Point> coords)
{
- for (GList *l = this->draggers; l != NULL; l = l->next) {
- GrDragger *d = ((GrDragger *) l->data);
+ for (std::vector<GrDragger *>::const_iterator l = this->draggers.begin(); l != this->draggers.end(); ++l) {
+ GrDragger *d = *l;
for (guint k = 0; k < coords.size(); k++) {
if (Geom::L2 (d->point - coords[k]) < 1e-4) {
setSelected (d, true, true);
@@ -1770,12 +1763,12 @@ void GrDrag::selectByCoords(std::vector<Geom::Point> coords)
*/
void GrDrag::selectByStop(SPStop *stop, bool add_to_selection, bool override )
{
- for (GList *i = this->draggers; i != NULL; i = i->next) {
+ for (std::vector<GrDragger *>::const_iterator l = this->draggers.begin(); l != this->draggers.end(); ++l) {
- GrDragger *dragger = (GrDragger *) i->data;
- for (GSList const* j = dragger->draggables; j != NULL; j = j->next) {
+ GrDragger *dragger = *l;
+ for (std::vector<GrDraggable *>::const_iterator j = dragger->draggables.begin(); j != dragger->draggables.end(); ++j) {
- GrDraggable *d = (GrDraggable *) j->data;
+ GrDraggable *d = *j;
SPGradient *gradient = getGradient(d->item, d->fill_or_stroke);
SPGradient *vector = gradient->getVector(false);
SPStop *stop_i = sp_get_stop_i(vector, d->point_i);
@@ -1791,8 +1784,8 @@ void GrDrag::selectByStop(SPStop *stop, bool add_to_selection, bool override )
*/
void GrDrag::selectRect(Geom::Rect const &r)
{
- for (GList *l = this->draggers; l != NULL; l = l->next) {
- GrDragger *d = ((GrDragger *) l->data);
+ for (std::vector<GrDragger *>::const_iterator l = this->draggers.begin(); l != this->draggers.end(); ++l) {
+ GrDragger *d = *l;
if (r.contains(d->point)) {
setSelected (d, true, true);
}
@@ -1816,20 +1809,18 @@ void GrDrag::setSelected(GrDragger *dragger, bool add_to_selection, bool overrid
if (add_to_selection) {
if (!dragger) return;
if (override) {
- if (!g_list_find(selected, dragger)) {
- selected = g_list_prepend(selected, dragger);
- }
+ selected.insert(dragger);
dragger->select();
seldragger = dragger;
} else { // toggle
- if (g_list_find(selected, dragger)) {
- selected = g_list_remove(selected, dragger);
+ if(selected.find(dragger)!=selected.end()) {
+ selected.erase(dragger);
dragger->deselect();
- if (selected) {
- seldragger = (GrDragger*) selected->data; // select the dragger that is first in the list
+ if (!selected.empty()) {
+ seldragger = *(selected.begin()); // select the dragger that is first in the list
}
} else {
- selected = g_list_prepend(selected, dragger);
+ selected.insert(dragger);
dragger->select();
seldragger = dragger;
}
@@ -1837,7 +1828,7 @@ void GrDrag::setSelected(GrDragger *dragger, bool add_to_selection, bool overrid
} else {
deselect_all();
if (dragger) {
- selected = g_list_prepend(selected, dragger);
+ selected.insert(dragger);
dragger->select();
seldragger = dragger;
}
@@ -1853,11 +1844,11 @@ void GrDrag::setSelected(GrDragger *dragger, bool add_to_selection, bool overrid
*/
void GrDrag::setDeselected(GrDragger *dragger)
{
- if (g_list_find(selected, dragger)) {
- selected = g_list_remove(selected, dragger);
+ if (selected.find(dragger) != selected.end()) {
+ selected.erase(dragger);
dragger->deselect();
}
- this->desktop->emitToolSubselectionChanged((gpointer) (selected ? selected->data : NULL ));
+ this->desktop->emitToolSubselectionChanged((gpointer) (selected.empty() ? NULL :*(selected.begin())));
}
@@ -1873,7 +1864,7 @@ void GrDrag::addLine(SPItem *item, Geom::Point p1, Geom::Point p2, Inkscape::Pai
sp_canvas_item_move_to_z(line, 0);
line->item = item;
sp_canvas_item_show(line);
- this->lines = g_slist_append(this->lines, line);
+ this->lines.push_back(line);
}
@@ -1889,7 +1880,7 @@ void GrDrag::addCurve(SPItem *item, Geom::Point p0, Geom::Point p1, Geom::Point
sp_canvas_item_move_to_z(line, 0);
line->item = item;
sp_canvas_item_show (line);
- this->lines = g_slist_append (this->lines, line);
+ this->lines.push_back(line);
}
@@ -1901,8 +1892,8 @@ void GrDrag::addDragger(GrDraggable *draggable)
{
Geom::Point p = getGradientCoords(draggable->item, draggable->point_type, draggable->point_i, draggable->fill_or_stroke);
- for (GList *i = this->draggers; i != NULL; i = i->next) {
- GrDragger *dragger = (GrDragger *) i->data;
+ for (std::vector<GrDragger *>::const_iterator l = this->draggers.begin(); l != this->draggers.end(); ++l) {
+ GrDragger *dragger = *l;
if (dragger->mayMerge (draggable) && Geom::L2 (dragger->point - p) < MERGE_DIST) {
// distance is small, merge this draggable into dragger, no need to create new dragger
dragger->addDraggable (draggable);
@@ -1913,7 +1904,7 @@ void GrDrag::addDragger(GrDraggable *draggable)
GrDragger *new_dragger = new GrDragger(this, p, draggable);
// fixme: draggers should be added AFTER the last one: this way tabbing through them will be from begin to end.
- this->draggers = g_list_append (this->draggers, new_dragger);
+ this->draggers.push_back(new_dragger);
}
/**
@@ -2071,15 +2062,12 @@ void GrDrag::grabKnot(SPItem *item, GrPointType point_type, gint point_i, Inksca
*/
void GrDrag::updateDraggers()
{
- while (selected) {
- selected = g_list_remove(selected, selected->data);
- }
+ selected.clear();
// delete old draggers
- for (GList const* i = this->draggers; i != NULL; i = i->next) {
- delete static_cast<GrDragger *>(i->data);
+ for (std::vector<GrDragger *>::const_iterator l = this->draggers.begin(); l != this->draggers.end(); ++l) {
+ delete (*l);
}
- g_list_free(this->draggers);
- this->draggers = NULL;
+ this->draggers.clear();
g_return_if_fail(this->selection != NULL);
std::vector<SPItem*> list = this->selection->itemList();
@@ -2127,8 +2115,8 @@ void GrDrag::updateDraggers()
*/
bool GrDrag::mouseOver()
{
- for (GList const* i = this->draggers; i != NULL; i = i->next) {
- GrDragger *d = (GrDragger *) i->data;
+ for (std::vector<GrDragger *>::const_iterator l = this->draggers.begin(); l != this->draggers.end(); ++l) {
+ GrDragger *d = *l;
if (d->knot && (d->knot->flags & SP_KNOT_MOUSEOVER)) {
return true;
}
@@ -2143,11 +2131,10 @@ bool GrDrag::mouseOver()
void GrDrag::updateLines()
{
// delete old lines
- for (GSList const *i = this->lines; i != NULL; i = i->next) {
- sp_canvas_item_destroy(SP_CANVAS_ITEM(i->data));
+ for (std::vector<SPCtrlLine *>::const_iterator i = this->lines.begin(); i != this->lines.end(); ++i) {
+ sp_canvas_item_destroy(SP_CANVAS_ITEM(*i));
}
- g_slist_free(this->lines);
- this->lines = NULL;
+ this->lines.clear();
g_return_if_fail(this->selection != NULL);
@@ -2313,13 +2300,11 @@ void GrDrag::updateLevels()
void GrDrag::selected_reverse_vector()
{
- if (selected == NULL)
+ if (selected.empty())
return;
- for (GSList const* i = ( (GrDragger*) selected->data )->draggables; i != NULL; i = i->next) {
- GrDraggable *draggable = (GrDraggable *) i->data;
-
- sp_item_gradient_reverse_vector (draggable->item, draggable->fill_or_stroke);
+ for(std::vector<GrDraggable *>::const_iterator it = (*(selected.begin()))->draggables.begin(); it != (*(selected.begin()))->draggables.end(); ++it) {
+ sp_item_gradient_reverse_vector ((*it)->item, (*it)->fill_or_stroke);
}
}
@@ -2330,13 +2315,13 @@ void GrDrag::selected_move_nowrite(double x, double y, bool scale_radial)
void GrDrag::selected_move(double x, double y, bool write_repr, bool scale_radial)
{
- if (selected == NULL)
+ if (selected.empty())
return;
bool did = false;
- for (GList *i = selected; i != NULL; i = i->next) {
- GrDragger *d = (GrDragger *) i->data;
+ for(std::set<GrDragger *>::const_iterator it = selected.begin(); it != selected.end(); ++it) {
+ GrDragger *d = *it;
if (!d->isA(POINT_LG_MID) && !d->isA(POINT_RG_MID1) && !d->isA(POINT_RG_MID2)) {
// if this is an endpoint,
@@ -2347,12 +2332,12 @@ void GrDrag::selected_move(double x, double y, bool write_repr, bool scale_radia
if (d->isA(POINT_RG_R1) || d->isA(POINT_RG_R2) ||
(d->isA(POINT_RG_FOCUS) && !d->isA(POINT_RG_CENTER))) {
bool skip_radius_with_center = false;
- for (GList *di = selected; di != NULL; di = di->next) {
- GrDragger *d_new = (GrDragger *) di->data;
- if (d_new->isA (((GrDraggable *) d->draggables->data)->item,
+ for(std::set<GrDragger *>::const_iterator di = selected.begin(); di != selected.end(); ++di) {
+ GrDragger *d_new = *di;
+ if (d_new->isA (( d->draggables[0])->item,
POINT_RG_CENTER,
0,
- ((GrDraggable *) d->draggables->data)->fill_or_stroke)) {
+ (d->draggables[0])->fill_or_stroke)) {
// FIXME: here we take into account only the first draggable!
skip_radius_with_center = true;
}
@@ -2382,23 +2367,23 @@ void GrDrag::selected_move(double x, double y, bool write_repr, bool scale_radia
if (!did) { // none of the end draggers are selected, so let's try to move the mids
- GrDragger *dragger = (GrDragger *) selected->data;
+ GrDragger *dragger = *(selected.begin());
// a midpoint dragger can (logically) only contain one GrDraggable
- GrDraggable *draggable = (GrDraggable *) dragger->draggables->data;
+ GrDraggable *draggable = dragger->draggables[0];
Geom::Point begin(0,0), end(0,0);
Geom::Point low_lim(0,0), high_lim(0,0);
SPObject *server = draggable->getServer();
- GSList *moving = NULL;
- gr_midpoint_limits(dragger, server, &begin, &end, &low_lim, &high_lim, &moving);
+ std::vector<GrDragger *> moving;
+ gr_midpoint_limits(dragger, server, &begin, &end, &low_lim, &high_lim, moving);
Geom::LineSegment ls(low_lim, high_lim);
Geom::Point p = ls.pointAt(ls.nearestTime(dragger->point + Geom::Point(x,y)));
Geom::Point displacement = p - dragger->point;
- for (GSList const* i = moving; i != NULL; i = i->next) {
- GrDragger *drg = (GrDragger*) i->data;
+ for(std::vector<GrDragger *>::const_iterator i = moving.begin(); i!= moving.end();++i) {
+ GrDragger *drg = *i;
SPKnot *drgknot = drg->knot;
drg->point += displacement;
drgknot->moveto(drg->point);
@@ -2407,8 +2392,6 @@ void GrDrag::selected_move(double x, double y, bool write_repr, bool scale_radia
did = true;
}
- g_slist_free(moving);
-
if (write_repr && did) {
// we did an undoable action
DocumentUndo::maybeDone(desktop->getDocument(), "grmovem", SP_VERB_CONTEXT_GRADIENT,
@@ -2432,11 +2415,11 @@ void GrDrag::selected_move_screen(double x, double y)
GrDragger *GrDrag::select_next()
{
GrDragger *d = NULL;
- if (selected == NULL || g_list_find(draggers, selected->data)->next == NULL) {
- if (draggers)
- d = (GrDragger *) draggers->data;
+ if (selected.empty() || (++find(draggers.begin(),draggers.end(),*(selected.begin())))==draggers.end()) {
+ if (!draggers.empty())
+ d = draggers[0];
} else {
- d = (GrDragger *) g_list_find(draggers, selected->data)->next->data;
+ d = *(++find(draggers.begin(),draggers.end(),*(selected.begin())));
}
if (d)
setSelected (d);
@@ -2449,11 +2432,11 @@ GrDragger *GrDrag::select_next()
GrDragger *GrDrag::select_prev()
{
GrDragger *d = NULL;
- if (selected == NULL || g_list_find(draggers, selected->data)->prev == NULL) {
- if (draggers)
- d = (GrDragger *) g_list_last (draggers)->data;
+ if (selected.empty() || draggers[0] == (*(selected.begin()))) {
+ if (!draggers.empty())
+ d = draggers[draggers.size()-1];
} else {
- d = (GrDragger *) g_list_find(draggers, selected->data)->prev->data;
+ d = *(--find(draggers.begin(),draggers.end(),*(selected.begin())));
}
if (d)
setSelected (d);
@@ -2464,7 +2447,7 @@ GrDragger *GrDrag::select_prev()
// FIXME: i.m.o. an ugly function that I just made to work, but... aargh! (Johan)
void GrDrag::deleteSelected(bool just_one)
{
- if (!selected) return;
+ if (selected.empty()) return;
SPDocument *document = NULL;
@@ -2477,10 +2460,10 @@ void GrDrag::deleteSelected(bool just_one)
GSList *midstoplist = NULL; // list of stops that must be deleted (will be deleted first)
GSList *endstoplist = NULL; // list of stops that must be deleted
- while (selected) {
- GrDragger *dragger = (GrDragger*) selected->data;
- for (GSList * drgble = dragger->draggables; drgble != NULL; drgble = drgble->next) {
- GrDraggable *draggable = (GrDraggable*) drgble->data;
+ while (!selected.empty()) {
+ GrDragger *dragger = *(selected.begin());
+ for(std::vector<GrDraggable *>::const_iterator drgble = dragger->draggables.begin(); drgble != dragger->draggables.end(); ++drgble) {
+ GrDraggable *draggable = *drgble;
SPGradient *gradient = getGradient(draggable->item, draggable->fill_or_stroke);
SPGradient *vector = sp_gradient_get_forked_vector_if_necessary (gradient, false);
@@ -2538,7 +2521,7 @@ void GrDrag::deleteSelected(bool just_one)
break;
}
}
- selected = g_list_remove(selected, dragger);
+ selected.erase(dragger);
if ( just_one ) break; // iterate once if just_one is set.
}
while (midstoplist) {
diff --git a/src/gradient-drag.h b/src/gradient-drag.h
index da264b4bb..b07f748a7 100644
--- a/src/gradient-drag.h
+++ b/src/gradient-drag.h
@@ -20,6 +20,7 @@
#include <stddef.h>
#include <sigc++/sigc++.h>
#include <vector>
+#include <set>
#include <glib.h>
#include <glibmm/ustring.h>
@@ -86,7 +87,7 @@ struct GrDragger {
// position of the knot before it began to drag; updated when released
Geom::Point point_original;
- GSList *draggables;
+ std::vector<GrDraggable *> draggables;
void addDraggable(GrDraggable *draggable);
@@ -123,6 +124,7 @@ private:
sigc::connection _ungrabbed_connection;
};
+struct SPCtrlLine;
/**
This is the root class of the gradient dragging machinery. It holds lists of GrDraggers
and of lines (simple canvas items). It also remembers one of the draggers as selected.
@@ -133,20 +135,21 @@ public: // FIXME: make more of this private!
GrDrag(SPDesktop *desktop);
virtual ~GrDrag();
- bool isNonEmpty() {return (draggers != NULL);}
- bool hasSelection() {return (selected != NULL);}
- guint numSelected() {return (selected? g_list_length(selected) : 0);}
- guint numDraggers() {return (draggers? g_list_length(draggers) : 0);}
+ bool isNonEmpty() {return !draggers.empty();}
+ bool hasSelection() {return !selected.empty();}
+ guint numSelected() {return selected.size();}
+ guint numDraggers() {return draggers.size();}
guint singleSelectedDraggerNumDraggables() {
- return (selected? g_slist_length(( static_cast<GrDragger *>(selected->data))->draggables) : 0);
+ return (selected.empty()? 0 : (*(selected.begin()))->draggables.size() );
}
guint singleSelectedDraggerSingleDraggableType() {
- return (selected? (static_cast<GrDraggable*>((static_cast<GrDragger*>(selected->data))->draggables->data))->point_type : 0);}
+ return (selected.empty() ? 0 : ((*(selected.begin()))->draggables[0]->point_type));
+ }
// especially the selection must be private, fix gradient-context to remove direct access to it
- GList *selected; // list of GrDragger*
+ std::set<GrDragger *> selected; // list of GrDragger*
void setSelected(GrDragger *dragger, bool add_to_selection = false, bool override = true);
void setDeselected(GrDragger *dragger);
void deselectAll();
@@ -178,8 +181,8 @@ public: // FIXME: make more of this private!
std::vector<double> hor_levels;
std::vector<double> vert_levels;
- GList *draggers;
- GSList *lines;
+ std::vector<GrDragger *> draggers;
+ std::vector<SPCtrlLine *> lines;
void updateDraggers();
void updateLines();
diff --git a/src/graphlayout.cpp b/src/graphlayout.cpp
index 9b67ba0b5..39ffb6cc7 100644
--- a/src/graphlayout.cpp
+++ b/src/graphlayout.cpp
@@ -106,7 +106,6 @@ void graphlayout(std::vector<SPItem*> const &items) {
return;
}
- using Inkscape::Util::GSListIterator;
list<SPItem *> selected;
filterConnectors(items,selected);
if (selected.empty()) return;
@@ -164,10 +163,11 @@ void graphlayout(std::vector<SPItem*> const &items) {
continue;
}
unsigned u=i_iter->second;
- GSList *nlist=iu->avoidRef->getAttachedConnectors(Avoid::runningFrom);
+ std::vector<SPItem *> nlist=iu->avoidRef->getAttachedConnectors(Avoid::runningFrom);
list<SPItem *> connectors;
- connectors.insert<GSListIterator<SPItem *> >(connectors.end(),nlist,NULL);
+ connectors.insert(connectors.end(), nlist.begin(), nlist.end());
+
for (list<SPItem *>::iterator j(connectors.begin());
j != connectors.end();
++j) {
@@ -203,9 +203,6 @@ void graphlayout(std::vector<SPItem*> const &items) {
}
}
}
- if(nlist) {
- g_slist_free(nlist);
- }
}
const unsigned E = es.size();
double eweights[E];
diff --git a/src/graphlayout.h b/src/graphlayout.h
index 9794dd6b5..dfef45359 100644
--- a/src/graphlayout.h
+++ b/src/graphlayout.h
@@ -16,7 +16,6 @@
#include <list>
-typedef struct _GSList GSList;
class SPItem;
void graphlayout(std::vector<SPItem*> const &items);
diff --git a/src/guide-snapper.cpp b/src/guide-snapper.cpp
index 960caed67..17f2d9583 100644
--- a/src/guide-snapper.cpp
+++ b/src/guide-snapper.cpp
@@ -44,11 +44,10 @@ Inkscape::GuideSnapper::LineList Inkscape::GuideSnapper::_getSnapLines(Geom::Poi
}
SPGuide const *guide_to_ignore = _snapmanager->getGuideToIgnore();
-
- for (GSList const *l = _snapmanager->getNamedView()->guides; l != NULL; l = l->next) {
- SPGuide const *g = SP_GUIDE(l->data);
- if (g != guide_to_ignore) {
- s.push_back(std::pair<Geom::Point, Geom::Point>(g->getNormal(), g->getPoint()));
+ std::vector<SPGuide *> guides = _snapmanager->getNamedView()->guides;
+ for(std::vector<SPGuide *>::const_iterator it = guides.begin() ; it != guides.end(); ++it) {
+ if ((*it) != guide_to_ignore) {
+ s.push_back(std::pair<Geom::Point, Geom::Point>((*it)->getNormal(), (*it)->getPoint()));
}
}
diff --git a/src/layer-manager.cpp b/src/layer-manager.cpp
index 3bbc831d5..5dae5f20a 100644
--- a/src/layer-manager.cpp
+++ b/src/layer-manager.cpp
@@ -191,15 +191,12 @@ Glib::ustring LayerManager::getNextLayerName( SPObject* obj, gchar const *label)
}
std::set<Glib::ustring> currentNames;
- GSList const *layers=_document->getResourceList("layer");
+ std::set<SPObject *> layers = _document->getResourceList("layer");
SPObject *root=_desktop->currentRoot();
if ( root ) {
- for ( GSList const *iter=layers ; iter ; iter = iter->next ) {
- SPObject *layer=static_cast<SPObject *>(iter->data);
- if ( layer != obj ) {
- currentNames.insert( layer->label() ? Glib::ustring(layer->label()) : Glib::ustring() );
- }
- }
+ std::set<SPObject *>::iterator iter = layers.find(obj);
+ if (iter != layers.end())
+ currentNames.insert( (*iter)->label() ? Glib::ustring((*iter)->label()) : Glib::ustring() );
}
// Not sure if we need to cap it, but we'll just be paranoid for the moment
@@ -262,15 +259,16 @@ void LayerManager::_rebuild() {
if (!_document) // http://sourceforge.net/mailarchive/forum.php?thread_name=5747bce9a7ed077c1b4fc9f0f4f8a5e0%40localhost&forum_name=inkscape-devel
return;
- GSList const *layers = _document->getResourceList("layer");
+ std::set<SPObject *> layers = _document->getResourceList("layer");
+
SPObject *root=_desktop->currentRoot();
if ( root ) {
_addOne(root);
std::set<SPGroup*> layersToAdd;
- for ( GSList const *iter = layers; iter; iter = iter->next ) {
- SPObject *layer = static_cast<SPObject *>(iter->data);
+ for ( std::set<SPObject *>::const_iterator iter = layers.begin(); iter != layers.end(); ++iter ) {
+ SPObject *layer = *iter;
// Debug::EventTracker<DebugLayerNote> tracker(Util::format("Examining %s", layer->label()));
bool needsAdd = false;
std::set<SPGroup*> additional;
@@ -282,7 +280,7 @@ void LayerManager::_rebuild() {
SPGroup* group = SP_GROUP(curr);
if ( group->layerMode() == SPGroup::LAYER ) {
// If we have a layer-group as the one or a parent, ensure it is listed as a valid layer.
- needsAdd &= ( g_slist_find(const_cast<GSList *>(layers), curr) != NULL );
+ needsAdd &= ( layers.find(curr) != layers.end() );
// XML Tree being used here directly while it shouldn't be...
if ( (!(group->getRepr())) || (!(group->getRepr()->parent())) ) {
needsAdd = false;
diff --git a/src/path-chemistry.h b/src/path-chemistry.h
index f454167a9..35ab923c0 100644
--- a/src/path-chemistry.h
+++ b/src/path-chemistry.h
@@ -24,7 +24,6 @@ class Node;
} // namespace Inkscape
typedef unsigned int guint32;
-typedef struct _GSList GSList;
void sp_selected_path_combine (SPDesktop *desktop);
void sp_selected_path_break_apart (SPDesktop *desktop);
diff --git a/src/profile-manager.cpp b/src/profile-manager.cpp
index 90b124195..035aa6051 100644
--- a/src/profile-manager.cpp
+++ b/src/profile-manager.cpp
@@ -34,11 +34,9 @@ void ProfileManager::_resourcesChanged()
{
std::vector<SPObject*> newList;
if (_doc) {
- const GSList *current = _doc->getResourceList( "iccprofile" );
- while ( current ) {
- newList.push_back(SP_OBJECT(current->data));
- current = g_slist_next(current);
- }
+ std::set<SPObject *> current = _doc->getResourceList( "iccprofile" );
+ for (std::set<SPObject *>::const_iterator i = current.begin(); i != current.end(); ++i)
+ newList.push_back(*i);
}
sort( newList.begin(), newList.end() );
diff --git a/src/removeoverlap.h b/src/removeoverlap.h
index d873663d1..cc0c7d9b7 100644
--- a/src/removeoverlap.h
+++ b/src/removeoverlap.h
@@ -13,8 +13,6 @@
#ifndef SEEN_REMOVEOVERLAP_H
#define SEEN_REMOVEOVERLAP_H
-typedef struct _GSList GSList;
-
void removeoverlap(std::vector<SPItem*> const &items, double xGap, double yGap);
#endif // SEEN_REMOVEOVERLAP_H
diff --git a/src/resource-manager.cpp b/src/resource-manager.cpp
index dbff27827..18d7c6ba2 100644
--- a/src/resource-manager.cpp
+++ b/src/resource-manager.cpp
@@ -179,9 +179,9 @@ std::vector<Glib::ustring> ResourceManagerImpl::findBrokenLinks( SPDocument *doc
std::set<Glib::ustring> uniques;
if ( doc ) {
- GSList const *images = doc->getResourceList("image");
- for (GSList const *it = images; it; it = it->next) {
- Inkscape::XML::Node *ir = static_cast<SPObject *>(it->data)->getRepr();
+ std::set<SPObject *> images = doc->getResourceList("image");
+ for (std::set<SPObject *>::const_iterator it = images.begin(); it != images.end(); ++it) {
+ Inkscape::XML::Node *ir = (*it)->getRepr();
gchar const *href = ir->attribute("xlink:href");
if ( href && ( uniques.find(href) == uniques.end() ) ) {
@@ -305,10 +305,10 @@ bool ResourceManagerImpl::fixupBrokenLinks(SPDocument *doc)
bool savedUndoState = DocumentUndo::getUndoSensitive(doc);
DocumentUndo::setUndoSensitive(doc, true);
-
- GSList const *images = doc->getResourceList("image");
- for (GSList const *it = images; it; it = it->next) {
- Inkscape::XML::Node *ir = static_cast<SPObject *>(it->data)->getRepr();
+
+ std::set<SPObject *> images = doc->getResourceList("image");
+ for (std::set<SPObject *>::const_iterator it = images.begin(); it != images.end(); ++it) {
+ Inkscape::XML::Node *ir = (*it)->getRepr();
gchar const *href = ir->attribute("xlink:href");
if ( href ) {
diff --git a/src/satisfied-guide-cns.cpp b/src/satisfied-guide-cns.cpp
index 028a22405..a83417865 100644
--- a/src/satisfied-guide-cns.cpp
+++ b/src/satisfied-guide-cns.cpp
@@ -10,8 +10,8 @@ void satisfied_guide_cns(SPDesktop const &desktop,
std::vector<SPGuideConstraint> &cns)
{
SPNamedView const &nv = *desktop.getNamedView();
- for (GSList const *l = nv.guides; l != NULL; l = l->next) {
- SPGuide &g = *SP_GUIDE(l->data);
+ for(std::vector<SPGuide *>::const_iterator it = nv.guides.begin(); it != nv.guides.end(); ++it) {
+ SPGuide &g = *(*it);
for (unsigned int i = 0; i < snappoints.size(); ++i) {
if (Geom::are_near(g.getDistanceFrom(snappoints[i].getPoint()), 0, 1e-2)) {
cns.push_back(SPGuideConstraint(&g, i));
diff --git a/src/selection-chemistry.h b/src/selection-chemistry.h
index 5bcc5b1ea..4bfa2c0aa 100644
--- a/src/selection-chemistry.h
+++ b/src/selection-chemistry.h
@@ -22,7 +22,6 @@
class SPCSSAttr;
class SPDesktop;
-typedef struct _GSList GSList;
namespace Inkscape {
@@ -75,7 +74,6 @@ 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_impl(GSList const *reprs_to_group, Inkscape::XML::Node *group, Inkscape::XML::Document *xml_doc, SPDocument *doc);
void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop);
void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop);
diff --git a/src/seltrans.h b/src/seltrans.h
index 26c2e9cd9..f756cc77a 100644
--- a/src/seltrans.h
+++ b/src/seltrans.h
@@ -34,7 +34,6 @@ class SPDesktop;
struct SPCanvasItem;
struct SPCtrlLine;
struct SPSelTransHandle;
-typedef struct _GSList GSList;
namespace Inkscape {
diff --git a/src/snap.cpp b/src/snap.cpp
index 4721283c3..7f0e8d9dc 100644
--- a/src/snap.cpp
+++ b/src/snap.cpp
@@ -69,9 +69,8 @@ SnapManager::SnapperList SnapManager::getGridSnappers() const
SnapperList s;
if (_desktop && _desktop->gridsEnabled() && snapprefs.isTargetSnappable(Inkscape::SNAPTARGET_GRID)) {
- for ( GSList const *l = _named_view->grids; l != NULL; l = l->next) {
- Inkscape::CanvasGrid *grid = (Inkscape::CanvasGrid*) l->data;
- s.push_back(grid->snapper);
+ for(std::vector<Inkscape::CanvasGrid *>::const_iterator it = _named_view->grids.begin(); it != _named_view->grids.end(); ++it) {
+ s.push_back((*it)->snapper);
}
}
@@ -173,8 +172,8 @@ Geom::Point SnapManager::multipleOfGridPitch(Geom::Point const &t, Geom::Point c
// Cannot use getGridSnappers() because we need both the grids AND their snappers
// Therefore we iterate through all grids manually
- for (GSList const *l = _named_view->grids; l != NULL; l = l->next) {
- Inkscape::CanvasGrid *grid = (Inkscape::CanvasGrid*) l->data;
+ for (std::vector<Inkscape::CanvasGrid *>::const_iterator it = _named_view->grids.begin(); it != _named_view->grids.end(); ++it) {
+ Inkscape::CanvasGrid *grid = (*it);
const Inkscape::Snapper* snapper = grid->snapper;
if (snapper && snapper->ThisSnapperMightSnap()) {
// To find the nearest multiple of the grid pitch for a given translation t, we
diff --git a/src/snap.h b/src/snap.h
index c4dd67b4c..41d21b1b2 100644
--- a/src/snap.h
+++ b/src/snap.h
@@ -39,7 +39,6 @@ namespace Inkscape {
class PureTransform;
}
-typedef struct _GSList GSList;
/**
* Class to coordinate snapping operations.
diff --git a/src/sp-clippath.h b/src/sp-clippath.h
index 8abe97f3f..7b1c83356 100644
--- a/src/sp-clippath.h
+++ b/src/sp-clippath.h
@@ -19,7 +19,6 @@
#define SP_IS_CLIPPATH(obj) (dynamic_cast<const SPClipPath*>((SPObject*)obj) != NULL)
struct SPClipPathView;
-typedef struct _GSList GSList;
#include <cstdio>
diff --git a/src/sp-guide.cpp b/src/sp-guide.cpp
index fd07f76ef..70c73b7e3 100644
--- a/src/sp-guide.cpp
+++ b/src/sp-guide.cpp
@@ -53,7 +53,6 @@ SPGuide::SPGuide()
: SPObject()
, label(NULL)
, locked(0)
- , views(NULL)
, normal_to_line(Geom::Point(0.,1.))
, point_on_line(Geom::Point(0.,0.))
, color(0x0000ff7f)
@@ -64,8 +63,8 @@ void SPGuide::setColor(guint32 c)
{
color = c;
- for (GSList *l = this->views; l != NULL; l = l->next) {
- sp_guideline_set_color(SP_GUIDELINE(l->data), this->color);
+ for(std::vector<SPGuideLine *>::const_iterator it = this->views.begin(); it != this->views.end(); ++it) {
+ sp_guideline_set_color(*it, this->color);
}
}
@@ -85,10 +84,10 @@ void SPGuide::build(SPDocument *document, Inkscape::XML::Node *repr)
void SPGuide::release()
{
- while (this->views) {
- sp_guideline_delete(SP_GUIDELINE(this->views->data));
- this->views = g_slist_remove(this->views, this->views->data);
+ for(std::vector<SPGuideLine *>::const_iterator it = this->views.begin(); it != this->views.end(); ++it) {
+ sp_guideline_delete(*it);
}
+ this->views.clear();
if (this->document) {
// Unregister ourselves
@@ -265,10 +264,11 @@ void sp_guide_create_guides_around_page(SPDesktop *dt)
void sp_guide_delete_all_guides(SPDesktop *dt)
{
SPDocument *doc=dt->getDocument();
- const GSList *current;
- while ( (current = doc->getResourceList("guide")) ) {
- SPGuide* guide = SP_GUIDE(current->data);
+ std::set<SPObject *> current = doc->getResourceList("guide");
+ while (!current.empty()){
+ SPGuide* guide = SP_GUIDE(*(current.begin()));
sp_guide_remove(guide);
+ current = doc->getResourceList("guide");
}
DocumentUndo::done(doc, SP_VERB_NONE, _("Delete All Guides"));
@@ -281,14 +281,14 @@ void SPGuide::showSPGuide(SPCanvasGroup *group, GCallback handler)
g_signal_connect(G_OBJECT(item), "event", G_CALLBACK(handler), this);
- views = g_slist_prepend(views, item);
+ views.push_back(SP_GUIDELINE(item));
}
void SPGuide::showSPGuide()
{
- for (GSList *v = views; v != NULL; v = v->next) {
- sp_canvas_item_show(SP_CANVAS_ITEM(v->data));
- sp_canvas_item_show(SP_CANVAS_ITEM(SP_GUIDELINE(v->data)->origin));
+ for(std::vector<SPGuideLine *>::const_iterator it = this->views.begin(); it != this->views.end(); ++it) {
+ sp_canvas_item_show(SP_CANVAS_ITEM(*it));
+ sp_canvas_item_show(SP_CANVAS_ITEM((*it)->origin));
}
}
@@ -296,11 +296,10 @@ void SPGuide::hideSPGuide(SPCanvas *canvas)
{
g_assert(canvas != NULL);
g_assert(SP_IS_CANVAS(canvas));
-
- for (GSList *l = views; l != NULL; l = l->next) {
- if (canvas == SP_CANVAS_ITEM(l->data)->canvas) {
- sp_guideline_delete(SP_GUIDELINE(l->data));
- views = g_slist_remove(views, l->data);
+ for(std::vector<SPGuideLine *>::iterator it = this->views.begin(); it != this->views.end(); ++it) {
+ if (canvas == SP_CANVAS_ITEM(*it)->canvas) {
+ sp_guideline_delete(*it);
+ views.erase(it);
return;
}
}
@@ -310,9 +309,9 @@ void SPGuide::hideSPGuide(SPCanvas *canvas)
void SPGuide::hideSPGuide()
{
- for (GSList *v = views; v != NULL; v = v->next) {
- sp_canvas_item_hide(SP_CANVAS_ITEM(v->data));
- sp_canvas_item_hide(SP_CANVAS_ITEM(SP_GUIDELINE(v->data)->origin));
+ for(std::vector<SPGuideLine *>::const_iterator it = this->views.begin(); it != this->views.end(); ++it) {
+ sp_canvas_item_hide(SP_CANVAS_ITEM(*it));
+ sp_canvas_item_hide(SP_CANVAS_ITEM((*it)->origin));
}
}
@@ -321,9 +320,9 @@ void SPGuide::sensitize(SPCanvas *canvas, bool sensitive)
g_assert(canvas != NULL);
g_assert(SP_IS_CANVAS(canvas));
- for (GSList *l = views; l != NULL; l = l->next) {
- if (canvas == SP_CANVAS_ITEM(l->data)->canvas) {
- sp_guideline_set_sensitive(SP_GUIDELINE(l->data), sensitive);
+ for(std::vector<SPGuideLine *>::const_iterator it = this->views.begin(); it != this->views.end(); ++it) {
+ if (canvas == SP_CANVAS_ITEM(*it)->canvas) {
+ sp_guideline_set_sensitive(*it, sensitive);
return;
}
}
@@ -351,8 +350,8 @@ void SPGuide::moveto(Geom::Point const point_on_line, bool const commit)
if(this->locked) {
return;
}
- for (GSList *l = views; l != NULL; l = l->next) {
- sp_guideline_set_position(SP_GUIDELINE(l->data), point_on_line);
+ for(std::vector<SPGuideLine *>::const_iterator it = this->views.begin(); it != this->views.end(); ++it) {
+ sp_guideline_set_position(*it, point_on_line);
}
/* Calling sp_repr_set_point must precede calling sp_item_notify_moveto in the commit
@@ -400,8 +399,8 @@ void SPGuide::set_normal(Geom::Point const normal_to_line, bool const commit)
if(this->locked) {
return;
}
- for (GSList *l = this->views; l != NULL; l = l->next) {
- sp_guideline_set_normal(SP_GUIDELINE(l->data), normal_to_line);
+ for(std::vector<SPGuideLine *>::const_iterator it = this->views.begin(); it != this->views.end(); ++it) {
+ sp_guideline_set_normal(*it, normal_to_line);
}
/* Calling sp_repr_set_svg_point must precede calling sp_item_notify_moveto in the commit
@@ -426,8 +425,8 @@ void SPGuide::set_color(const unsigned r, const unsigned g, const unsigned b, bo
{
this->color = (r << 24) | (g << 16) | (b << 8) | 0x7f;
- if (views) {
- sp_guideline_set_color(SP_GUIDELINE(views->data), this->color);
+ if (! views.empty()) {
+ sp_guideline_set_color(views[0], this->color);
}
if (commit) {
@@ -441,8 +440,8 @@ void SPGuide::set_color(const unsigned r, const unsigned g, const unsigned b, bo
void SPGuide::set_locked(const bool locked, bool const commit)
{
this->locked = locked;
- if (views) {
- sp_guideline_set_locked(SP_GUIDELINE(views->data), locked);
+ if ( !views.empty() ) {
+ sp_guideline_set_locked(views[0], locked);
}
if (commit) {
@@ -452,8 +451,8 @@ void SPGuide::set_locked(const bool locked, bool const commit)
void SPGuide::set_label(const char* label, bool const commit)
{
- if (views) {
- sp_guideline_set_label(SP_GUIDELINE(views->data), label);
+ if (!views.empty()) {
+ sp_guideline_set_label(views[0], label);
}
if (commit) {
diff --git a/src/sp-guide.h b/src/sp-guide.h
index 1ad415e85..25a0e5af8 100644
--- a/src/sp-guide.h
+++ b/src/sp-guide.h
@@ -22,13 +22,12 @@
typedef unsigned int guint32;
extern "C" {
typedef void (*GCallback) (void);
- typedef struct _GSList GSList;
}
class SPDesktop;
struct SPCanvas;
struct SPCanvasGroup;
-
+struct SPGuideLine;
#define SP_GUIDE(obj) (dynamic_cast<SPGuide*>((SPObject*)obj))
#define SP_IS_GUIDE(obj) (dynamic_cast<const SPGuide*>((SPObject*)obj) != NULL)
@@ -80,8 +79,8 @@ protected:
virtual void set(unsigned int key, const char* value);
char* label;
+ std::vector<SPGuideLine *> views; // contains an object of type SPGuideline (see display/guideline.cpp for definition)
bool locked;
- GSList *views; // contains an object of type SPGuideline (see display/guideline.cpp for definition)
Geom::Point normal_to_line;
Geom::Point point_on_line;
diff --git a/src/sp-item-group.h b/src/sp-item-group.h
index fc0b6382f..0c74c3dc3 100644
--- a/src/sp-item-group.h
+++ b/src/sp-item-group.h
@@ -25,7 +25,6 @@ namespace Inkscape {
class Drawing;
class DrawingItem;
-typedef struct _GSList GSList;
} // namespace Inkscape
diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp
index 5f7a2ec26..7b9ab11c3 100644
--- a/src/sp-mask.cpp
+++ b/src/sp-mask.cpp
@@ -138,23 +138,18 @@ void SPMask::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);
+ std::vector<SPObject *> children = this->childList(false);
+ for (std::vector<SPObject *>::const_iterator child = children.begin();child != children.end();child++) {
+ sp_object_ref(*child);
}
- l = g_slist_reverse (l);
- while (l) {
- SPObject *child = SP_OBJECT(l->data);
- l = g_slist_remove(l, child);
-
- if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- child->updateDisplay(ctx, flags);
+ for (std::vector<SPObject *>::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);
}
- sp_object_unref(child);
+ sp_object_unref(*child);
}
for (SPMaskView *v = this->display; v != NULL; v = v->next) {
@@ -177,23 +172,17 @@ void SPMask::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);
+ std::vector<SPObject *> children = this->childList(false);
+ for (std::vector<SPObject *>::const_iterator child = children.begin();child != children.end();child++) {
+ sp_object_ref(*child);
}
- l = g_slist_reverse(l);
-
- while (l) {
- SPObject *child = SP_OBJECT(l->data);
- l = g_slist_remove(l, child);
-
- if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- child->emitModified(flags);
+ for (std::vector<SPObject *>::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);
}
- sp_object_unref(child);
+ sp_object_unref(*child);
}
}
diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index 22effd93c..50b567d2c 100644
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
@@ -62,7 +62,7 @@ SPNamedView::SPNamedView() : SPObjectGroup(), snap_manager(this) {
this->zoom = 0;
this->guidecolor = 0;
this->guidehicolor = 0;
- this->views = NULL;
+ this->views.clear();
this->borderlayer = 0;
this->page_size_units = NULL;
this->window_x = 0;
@@ -86,9 +86,9 @@ SPNamedView::SPNamedView() : SPObjectGroup(), snap_manager(this) {
this->showborder = TRUE;
this->showpageshadow = TRUE;
- this->guides = NULL;
+ this->guides.clear();
this->viewcount = 0;
- this->grids = NULL;
+ this->grids.clear();
this->default_layer_id = 0;
@@ -249,7 +249,7 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) {
for (SPObject *o = this->firstChild() ; o; o = o->getNext() ) {
if (SP_IS_GUIDE(o)) {
SPGuide * g = SP_GUIDE(o);
- this->guides = g_slist_prepend(this->guides, g);
+ this->guides.push_back(g);
//g_object_set(G_OBJECT(g), "color", nv->guidecolor, "hicolor", nv->guidehicolor, NULL);
g->setColor(this->guidecolor);
g->setHiColor(this->guidehicolor);
@@ -272,18 +272,12 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) {
}
void SPNamedView::release() {
- if (this->guides) {
- g_slist_free(this->guides);
- this->guides = NULL;
- }
+ this->guides.clear();
// delete grids:
- while ( this->grids ) {
- Inkscape::CanvasGrid *gr = (Inkscape::CanvasGrid *)this->grids->data; // get first entry
- delete gr;
- this->grids = g_slist_remove_link(this->grids, this->grids); // deletes first entry
- }
-
+ for(std::vector<Inkscape::CanvasGrid *>::const_iterator it=this->grids.begin();it!=this->grids.end();++it )
+ delete *it;
+ this->grids.clear();
SPObjectGroup::release();
}
@@ -329,10 +323,9 @@ void SPNamedView::set(unsigned int key, const gchar* value) {
this->guidecolor = (this->guidecolor & 0xff) | sp_svg_read_color(value, this->guidecolor);
}
- for (GSList *l = this->guides; l != NULL; l = l->next) {
- SPGuide * g = SP_GUIDE(l->data);
- g->setColor(this->guidecolor);
- g->readAttr("inkscape:color");
+ for(std::vector<SPGuide *>::const_iterator it=this->guides.begin();it!=this->guides.end();++it ) {
+ (*it)->setColor(this->guidecolor);
+ (*it)->readAttr("inkscape:color");
}
this->requestModified(SP_OBJECT_MODIFIED_FLAG);
@@ -341,10 +334,9 @@ void SPNamedView::set(unsigned int key, const gchar* value) {
this->guidecolor = (this->guidecolor & 0xffffff00) | (DEFAULTGUIDECOLOR & 0xff);
sp_nv_read_opacity(value, &this->guidecolor);
- for (GSList *l = this->guides; l != NULL; l = l->next) {
- SPGuide * g = SP_GUIDE(l->data);
- g->setColor(this->guidecolor);
- g->readAttr("inkscape:color");
+ for(std::vector<SPGuide *>::const_iterator it=this->guides.begin();it!=this->guides.end();++it ) {
+ (*it)->setColor(this->guidecolor);
+ (*it)->readAttr("inkscape:color");
}
this->requestModified(SP_OBJECT_MODIFIED_FLAG);
@@ -355,10 +347,8 @@ void SPNamedView::set(unsigned int key, const gchar* value) {
if (value) {
this->guidehicolor = (this->guidehicolor & 0xff) | sp_svg_read_color(value, this->guidehicolor);
}
-
- for (GSList *l = this->guides; l != NULL; l = l->next) {
- //g_object_set(G_OBJECT(l->data), "hicolor", nv->guidehicolor, NULL);
- SP_GUIDE(l->data)->setHiColor(this->guidehicolor);
+ for(std::vector<SPGuide *>::const_iterator it=this->guides.begin();it!=this->guides.end();++it ) {
+ (*it)->setHiColor(this->guidehicolor);
}
this->requestModified(SP_OBJECT_MODIFIED_FLAG);
@@ -366,10 +356,8 @@ void SPNamedView::set(unsigned int key, const gchar* value) {
case SP_ATTR_GUIDEHIOPACITY:
this->guidehicolor = (this->guidehicolor & 0xffffff00) | (DEFAULTGUIDEHICOLOR & 0xff);
sp_nv_read_opacity(value, &this->guidehicolor);
-
- for (GSList *l = this->guides; l != NULL; l = l->next) {
- //g_object_set(G_OBJECT(l->data), "hicolor", nv->guidehicolor, NULL);
- SP_GUIDE(l->data)->setHiColor(this->guidehicolor);
+ for(std::vector<SPGuide *>::const_iterator it=this->guides.begin();it!=this->guides.end();++it ) {
+ (*it)->setHiColor(this->guidehicolor);
}
this->requestModified(SP_OBJECT_MODIFIED_FLAG);
@@ -623,10 +611,9 @@ static Inkscape::CanvasGrid*
sp_namedview_add_grid(SPNamedView *nv, Inkscape::XML::Node *repr, SPDesktop *desktop) {
Inkscape::CanvasGrid* grid = NULL;
//check if namedview already has an object for this grid
- for (GSList *l = nv->grids; l != NULL; l = l->next) {
- Inkscape::CanvasGrid* g = (Inkscape::CanvasGrid*) l->data;
- if (repr == g->repr) {
- grid = g;
+ for(std::vector<Inkscape::CanvasGrid *>::const_iterator it=nv->grids.begin();it!=nv->grids.end();++it ) {
+ if (repr == (*it)->repr) {
+ grid = (*it);
break;
}
}
@@ -639,14 +626,13 @@ sp_namedview_add_grid(SPNamedView *nv, Inkscape::XML::Node *repr, SPDesktop *des
return NULL;
}
grid = Inkscape::CanvasGrid::NewGrid(nv, repr, nv->document, gridtype);
- nv->grids = g_slist_append(nv->grids, grid);
+ nv->grids.push_back(grid);
}
if (!desktop) {
//add canvasitem to all desktops
- for (GSList *l = nv->views; l != NULL; l = l->next) {
- SPDesktop *dt = static_cast<SPDesktop*>(l->data);
- grid->createCanvasItem(dt);
+ for(std::vector<SPDesktop *>::const_iterator it=nv->views.begin();it!=nv->views.end();++it ) {
+ grid->createCanvasItem(*it);
}
} else {
//add canvasitem only for specified desktop
@@ -669,7 +655,7 @@ void SPNamedView::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *r
if (SP_IS_GUIDE(no)) {
SPGuide *g = (SPGuide *) no;
- this->guides = g_slist_prepend(this->guides, g);
+ this->guides.push_back(g);
//g_object_set(G_OBJECT(g), "color", this->guidecolor, "hicolor", this->guidehicolor, NULL);
g->setColor(this->guidecolor);
@@ -677,11 +663,11 @@ void SPNamedView::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *r
g->readAttr("inkscape:color");
if (this->editable) {
- for (GSList *l = this->views; l != NULL; l = l->next) {
- g->SPGuide::showSPGuide(static_cast<SPDesktop*>(l->data)->guides, (GCallback) sp_dt_guide_event);
+ for(std::vector<SPDesktop *>::const_iterator it=this->views.begin();it!=this->views.end();++it ) {
+ g->SPGuide::showSPGuide((*it)->guides, (GCallback) sp_dt_guide_event);
- if (static_cast<SPDesktop*>(l->data)->guides_active) {
- g->sensitize((static_cast<SPDesktop*> (l->data))->getCanvas(), TRUE);
+ if ((*it)->guides_active) {
+ g->sensitize((*it)->getCanvas(), TRUE);
}
sp_namedview_show_single_guide(SP_GUIDE(g), this->showguides);
@@ -694,27 +680,19 @@ void SPNamedView::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *r
void SPNamedView::remove_child(Inkscape::XML::Node *child) {
if (!strcmp(child->name(), "inkscape:grid")) {
- for ( GSList *iter = this->grids ; iter ; iter = iter->next ) {
- Inkscape::CanvasGrid *gr = (Inkscape::CanvasGrid *)iter->data;
-
- if ( gr->repr == child ) {
- delete gr;
- this->grids = g_slist_remove_link(this->grids, iter);
+ for(std::vector<Inkscape::CanvasGrid *>::iterator it=this->grids.begin();it!=this->grids.end();++it ) {
+ if ( (*it)->repr == child ) {
+ delete (*it);
+ this->grids.erase(it);
break;
}
}
} else {
- GSList **ref = &this->guides;
- for ( GSList *iter = this->guides ; iter ; iter = iter->next ) {
-
- if ( reinterpret_cast<SPObject *>(iter->data)->getRepr() == child ) {
- *ref = iter->next;
- iter->next = NULL;
- g_slist_free_1(iter);
+ for(std::vector<SPGuide *>::iterator it=this->guides.begin();it!=this->guides.end();++it ) {
+ if ( (*it)->getRepr() == child ) {
+ this->guides.erase(it);
break;
- }
-
- ref = &iter->next;
+ }
}
}
@@ -737,16 +715,16 @@ Inkscape::XML::Node* SPNamedView::write(Inkscape::XML::Document *xml_doc, Inksca
void SPNamedView::show(SPDesktop *desktop)
{
- for (GSList *l = guides; l != NULL; l = l->next) {
- SP_GUIDE(l->data)->showSPGuide( desktop->guides, (GCallback) sp_dt_guide_event);
+ for(std::vector<SPGuide *>::const_iterator it=this->guides.begin();it!=this->guides.end();++it ) {
+ (*it)->showSPGuide( desktop->guides, (GCallback) sp_dt_guide_event);
if (desktop->guides_active) {
- SP_GUIDE(l->data)->sensitize(desktop->getCanvas(), TRUE);
+ (*it)->sensitize(desktop->getCanvas(), TRUE);
}
- sp_namedview_show_single_guide(SP_GUIDE(l->data), showguides);
- sp_namedview_lock_single_guide(SP_GUIDE(l->data), lockguides);
+ sp_namedview_show_single_guide((*it), showguides);
+ sp_namedview_lock_single_guide((*it), lockguides);
}
- views = g_slist_prepend(views, desktop);
+ views.push_back(desktop);
// generate grids specified in SVG:
Inkscape::XML::Node *repr = this->getRepr();
@@ -935,38 +913,35 @@ void sp_namedview_document_from_window(SPDesktop *desktop)
void SPNamedView::hide(SPDesktop const *desktop)
{
g_assert(desktop != NULL);
- g_assert(g_slist_find(views, desktop));
-
- for (GSList *l = guides; l != NULL; l = l->next) {
- SP_GUIDE(l->data)->hideSPGuide(desktop->getCanvas());
+ g_assert(std::find(views.begin(),views.end(),desktop)!=views.end());
+ for(std::vector<SPGuide *>::iterator it=this->guides.begin();it!=this->guides.end();++it ) {
+ (*it)->hideSPGuide(desktop->getCanvas());
}
-
- views = g_slist_remove(views, desktop);
+ views.erase(std::remove(views.begin(),views.end(),desktop),views.end());
}
void SPNamedView::activateGuides(void* desktop, bool active)
{
g_assert(desktop != NULL);
- g_assert(g_slist_find(views, desktop));
+ g_assert(std::find(views.begin(),views.end(),desktop)!=views.end());
SPDesktop *dt = static_cast<SPDesktop*>(desktop);
-
- for (GSList *l = guides; l != NULL; l = l->next) {
- SP_GUIDE(l->data)->sensitize(dt->getCanvas(), active);
+ for(std::vector<SPGuide *>::iterator it=this->guides.begin();it!=this->guides.end();++it ) {
+ (*it)->sensitize(dt->getCanvas(), active);
}
}
static void sp_namedview_setup_guides(SPNamedView *nv)
{
- for (GSList *l = nv->guides; l != NULL; l = l->next) {
- sp_namedview_show_single_guide(SP_GUIDE(l->data), nv->showguides);
+ for(std::vector<SPGuide *>::iterator it=nv->guides.begin();it!=nv->guides.end();++it ) {
+ sp_namedview_show_single_guide(*it, nv->showguides);
}
}
static void sp_namedview_lock_guides(SPNamedView *nv)
{
- for (GSList *l = nv->guides; l != NULL; l = l->next) {
- sp_namedview_lock_single_guide(SP_GUIDE(l->data), nv->lockguides);
+ for(std::vector<SPGuide *>::iterator it=nv->guides.begin();it!=nv->guides.end();++it ) {
+ sp_namedview_lock_single_guide(*it, nv->lockguides);
}
}
@@ -1050,7 +1025,7 @@ guint SPNamedView::getViewCount()
return ++viewcount;
}
-GSList const *SPNamedView::getViewList() const
+std::vector<SPDesktop *> const SPNamedView::getViewList() const
{
return views;
}
@@ -1185,18 +1160,17 @@ Inkscape::Util::Unit const & SPNamedView::getSVGUnit() const
*/
Inkscape::CanvasGrid * sp_namedview_get_first_enabled_grid(SPNamedView *namedview)
{
- for (GSList const * l = namedview->grids; l != NULL; l = l->next) {
- Inkscape::CanvasGrid * grid = (Inkscape::CanvasGrid*) l->data;
- if (grid->isEnabled())
- return grid;
+ for(std::vector<Inkscape::CanvasGrid *>::const_iterator it=namedview->grids.begin();it!=namedview->grids.end();++it ) {
+ if ((*it)->isEnabled())
+ return (*it);
}
return NULL;
}
void SPNamedView::translateGuides(Geom::Translate const &tr) {
- for (GSList *l = guides; l != NULL; l = l->next) {
- SPGuide &guide = *SP_GUIDE(l->data);
+ for(std::vector<SPGuide *>::iterator it=this->guides.begin();it!=this->guides.end();++it ) {
+ SPGuide &guide = *(*it);
Geom::Point point_on_line = guide.getPoint();
point_on_line *= tr;
guide.moveto(point_on_line, true);
@@ -1204,19 +1178,15 @@ void SPNamedView::translateGuides(Geom::Translate const &tr) {
}
void SPNamedView::translateGrids(Geom::Translate const &tr) {
- for (GSList *l = grids; l != NULL; l = l->next) {
- Inkscape::CanvasGrid* g = reinterpret_cast<Inkscape::CanvasGrid*>(l->data);
- if (g) {
- g->setOrigin(g->origin * tr);
- }
+ for(std::vector<Inkscape::CanvasGrid *>::iterator it=this->grids.begin();it!=this->grids.end();++it ) {
+ (*it)->setOrigin((*it)->origin * tr);
}
}
void SPNamedView::scrollAllDesktops(double dx, double dy, bool is_scrolling) {
- for(GSList *l = views; l; l = l->next) {
- SPDesktop *desktop = static_cast<SPDesktop *>(l->data);
- desktop->scroll_world_in_svg_coords(dx, dy, is_scrolling);
- }
+ for(std::vector<SPDesktop *>::iterator it=this->views.begin();it!=this->views.end();++it ) {
+ (*it)->scroll_world_in_svg_coords(dx, dy, is_scrolling);
+ }
}
diff --git a/src/sp-namedview.h b/src/sp-namedview.h
index d95da1254..7aae90f40 100644
--- a/src/sp-namedview.h
+++ b/src/sp-namedview.h
@@ -21,6 +21,7 @@
#include "snap.h"
#include "document.h"
#include "util/units.h"
+#include <vector>
namespace Inkscape {
class CanvasGrid;
@@ -59,7 +60,7 @@ public:
int window_maximized;
SnapManager snap_manager;
- GSList * grids;
+ std::vector<Inkscape::CanvasGrid *> grids;
bool grids_visible;
Inkscape::Util::Unit const *svg_units; // Units used for the values in SVG
@@ -76,8 +77,8 @@ public:
guint32 pagecolor;
guint32 pageshadow;
- GSList *guides;
- GSList *views;
+ std::vector<SPGuide *> guides;
+ std::vector<SPDesktop *> views;
int viewcount;
@@ -86,7 +87,7 @@ public:
void activateGuides(void* desktop, bool active);
char const *getName() const;
unsigned int getViewCount();
- GSList const *getViewList() const;
+ std::vector<SPDesktop *> const getViewList() const;
Inkscape::Util::Unit const * getDisplayUnit() const;
Inkscape::Util::Unit const & getSVGUnit() const;
diff --git a/src/sp-object.h b/src/sp-object.h
index 7bc02fad5..70d3e5df5 100644
--- a/src/sp-object.h
+++ b/src/sp-object.h
@@ -59,7 +59,6 @@ class SPObject;
class SPCSSAttr;
class SPStyle;
-typedef struct _GSList GSList;
namespace Inkscape {
namespace XML {
diff --git a/src/sp-switch.h b/src/sp-switch.h
index 7152e1b82..57ce8b236 100644
--- a/src/sp-switch.h
+++ b/src/sp-switch.h
@@ -17,7 +17,6 @@
#include "sp-item-group.h"
-typedef struct _GSList GSList;
#define SP_SWITCH(obj) (dynamic_cast<SPSwitch*>((SPObject*)obj))
#define SP_IS_SWITCH(obj) (dynamic_cast<const SPSwitch*>((SPObject*)obj) != NULL)
diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp
index b04e8ecc1..8af744fd3 100644
--- a/src/ui/dialog/document-properties.cpp
+++ b/src/ui/dialog/document-properties.cpp
@@ -511,17 +511,16 @@ void DocumentProperties::linkSelectedProfile()
void DocumentProperties::populate_linked_profiles_box()
{
_LinkedProfilesListStore->clear();
- const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "iccprofile" );
- if (current) {
- _emb_profiles_observer.set(SP_OBJECT(current->data)->parent);
+ std::set<SPObject *> current = SP_ACTIVE_DOCUMENT->getResourceList( "iccprofile" );
+ if (! current.empty()) {
+ _emb_profiles_observer.set((*(current.begin()))->parent);
}
- while ( current ) {
- SPObject* obj = SP_OBJECT(current->data);
+ for (std::set<SPObject *>::const_iterator it = current.begin(); it != current.end(); ++it) {
+ SPObject* obj = *it;
Inkscape::ColorProfile* prof = reinterpret_cast<Inkscape::ColorProfile*>(obj);
Gtk::TreeModel::Row row = *(_LinkedProfilesListStore->append());
row[_LinkedProfilesListColumns.nameColumn] = prof->name;
// row[_LinkedProfilesListColumns.previewColumn] = "Color Preview";
- current = g_slist_next(current);
}
}
@@ -594,10 +593,9 @@ void DocumentProperties::removeSelectedProfile(){
return;
}
}
-
- const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "iccprofile" );
- while ( current ) {
- SPObject* obj = SP_OBJECT(current->data);
+ std::set<SPObject *> current = SP_ACTIVE_DOCUMENT->getResourceList( "iccprofile" );
+ for (std::set<SPObject *>::const_iterator it = current.begin(); it != current.end(); ++it) {
+ SPObject* obj = *it;
Inkscape::ColorProfile* prof = reinterpret_cast<Inkscape::ColorProfile*>(obj);
if (!name.compare(prof->name)){
@@ -606,7 +604,6 @@ void DocumentProperties::removeSelectedProfile(){
DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_EDIT_REMOVE_COLOR_PROFILE, _("Remove linked color profile"));
break; // removing the color profile likely invalidates part of the traversed list, stop traversing here.
}
- current = g_slist_next(current);
}
populate_linked_profiles_box();
@@ -722,9 +719,9 @@ void DocumentProperties::build_cms()
_LinkedProfilesList.signal_button_release_event().connect_notify(sigc::mem_fun(*this, &DocumentProperties::linked_profiles_list_button_release));
cms_create_popup_menu(_LinkedProfilesList, sigc::mem_fun(*this, &DocumentProperties::removeSelectedProfile));
- const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "defs" );
- if (current) {
- _emb_profiles_observer.set(SP_OBJECT(current->data)->parent);
+ std::set<SPObject *> current = SP_ACTIVE_DOCUMENT->getResourceList( "defs" );
+ if (!current.empty()) {
+ _emb_profiles_observer.set((*(current.begin()))->parent);
}
_emb_profiles_observer.signal_changed().connect(sigc::mem_fun(*this, &DocumentProperties::populate_linked_profiles_box));
onColorProfileSelectRow();
@@ -959,9 +956,9 @@ void DocumentProperties::build_scripting()
#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
//TODO: review this observers code:
- const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
- if (current) {
- _scripts_observer.set(SP_OBJECT(current->data)->parent);
+ std::set<SPObject *> current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
+ if (! current.empty()) {
+ _scripts_observer.set((*(current.begin()))->parent);
}
_scripts_observer.signal_changed().connect(sigc::mem_fun(*this, &DocumentProperties::populate_script_lists));
onEmbeddedScriptSelectRow();
@@ -1174,9 +1171,9 @@ void DocumentProperties::removeExternalScript(){
}
}
- const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
- while ( current ) {
- SPObject* obj = reinterpret_cast<SPObject *>(current->data);
+ std::set<SPObject *> current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
+ for (std::set<SPObject *>::const_iterator it = current.begin(); it != current.end(); ++it) {
+ SPObject* obj = *it;
if (obj) {
SPScript* script = dynamic_cast<SPScript *>(obj);
if (script && (name == script->xlinkhref)) {
@@ -1191,7 +1188,6 @@ void DocumentProperties::removeExternalScript(){
}
}
}
- current = g_slist_next(current);
}
populate_script_lists();
@@ -1253,9 +1249,9 @@ void DocumentProperties::changeEmbeddedScript(){
}
bool voidscript=true;
- const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
- while ( current ) {
- SPObject* obj = SP_OBJECT(current->data);
+ std::set<SPObject *> current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
+ for (std::set<SPObject *>::const_iterator it = current.begin(); it != current.end(); ++it) {
+ SPObject* obj = *it;
if (id == obj->getId()){
int count=0;
@@ -1279,7 +1275,6 @@ void DocumentProperties::changeEmbeddedScript(){
}
}
}
- current = g_slist_next(current);
}
if (voidscript)
@@ -1299,9 +1294,9 @@ void DocumentProperties::editEmbeddedScript(){
}
Inkscape::XML::Document *xml_doc = SP_ACTIVE_DOCUMENT->getReprDoc();
- const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
- while ( current ) {
- SPObject* obj = SP_OBJECT(current->data);
+ std::set<SPObject *> current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
+ for (std::set<SPObject *>::const_iterator it = current.begin(); it != current.end(); ++it) {
+ SPObject* obj = *it;
if (id == obj->getId()){
//XML Tree being used directly here while it shouldn't be.
@@ -1317,21 +1312,20 @@ void DocumentProperties::editEmbeddedScript(){
DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_EDIT_EMBEDDED_SCRIPT, _("Edit embedded script"));
}
}
- current = g_slist_next(current);
}
}
void DocumentProperties::populate_script_lists(){
_ExternalScriptsListStore->clear();
_EmbeddedScriptsListStore->clear();
- const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
- if (current) {
- SPObject *obj = reinterpret_cast<SPObject *>(current->data);
+ std::set<SPObject *> current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
+ if (!current.empty()) {
+ SPObject *obj = *(current.begin());
g_assert(obj != NULL);
_scripts_observer.set(obj->parent);
}
- while ( current ) {
- SPObject* obj = reinterpret_cast<SPObject *>(current->data);
+ for (std::set<SPObject *>::const_iterator it = current.begin(); it != current.end(); ++it) {
+ SPObject* obj = *it;
SPScript* script = dynamic_cast<SPScript *>(obj);
g_assert(script != NULL);
if (script->xlinkhref)
@@ -1344,8 +1338,6 @@ void DocumentProperties::populate_script_lists(){
Gtk::TreeModel::Row row = *(_EmbeddedScriptsListStore->append());
row[_EmbeddedScriptsListColumns.idColumn] = obj->getId();
}
-
- current = g_slist_next(current);
}
}
@@ -1364,12 +1356,11 @@ void DocumentProperties::update_gridspage()
//add tabs
bool grids_present = false;
- for (GSList const * l = nv->grids; l != NULL; l = l->next) {
- Inkscape::CanvasGrid * grid = (Inkscape::CanvasGrid*) l->data;
- if (!grid->repr->attribute("id")) continue; // update_gridspage is called again when "id" is added
- Glib::ustring name(grid->repr->attribute("id"));
+ for(std::vector<Inkscape::CanvasGrid *>::const_iterator it = nv->grids.begin(); it != nv->grids.end(); ++it) {
+ if (!(*it)->repr->attribute("id")) continue; // update_gridspage is called again when "id" is added
+ Glib::ustring name((*it)->repr->attribute("id"));
const char *icon = NULL;
- switch (grid->getGridType()) {
+ switch ((*it)->getGridType()) {
case GRID_RECTANGULAR:
icon = "grid-rectangular";
break;
@@ -1379,7 +1370,7 @@ void DocumentProperties::update_gridspage()
default:
break;
}
- _grids_notebook.append_page(*grid->newWidget(), _createPageTabLabel(name, icon));
+ _grids_notebook.append_page(*(*it)->newWidget(), _createPageTabLabel(name, icon));
grids_present = true;
}
_grids_notebook.show_all();
@@ -1639,14 +1630,9 @@ void DocumentProperties::onRemoveGrid()
SPDesktop *dt = getDesktop();
SPNamedView *nv = dt->getNamedView();
Inkscape::CanvasGrid * found_grid = NULL;
- int i = 0;
- for (GSList const * l = nv->grids; l != NULL; l = l->next, i++) { // not a very nice fix, but works.
- Inkscape::CanvasGrid * grid = (Inkscape::CanvasGrid*) l->data;
- if (pagenum == i) {
- found_grid = grid;
- break; // break out of for-loop
- }
- }
+ if( pagenum < nv->grids.size())
+ found_grid = nv->grids[pagenum];
+
if (found_grid) {
// delete the grid that corresponds with the selected tab
// when the grid is deleted from SVG, the SPNamedview handler automatically deletes the object, so found_grid becomes an invalid pointer!
diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp
index 08a58291d..e3196bf59 100644
--- a/src/ui/dialog/filter-effects-dialog.cpp
+++ b/src/ui/dialog/filter-effects-dialog.cpp
@@ -1589,13 +1589,14 @@ void FilterEffectsDialog::FilterModifier::update_filters()
{
SPDesktop* desktop = _dialog.getDesktop();
SPDocument* document = desktop->getDocument();
- const GSList* filters = document->getResourceList("filter");
+
+ std::set<SPObject *> filters = document->getResourceList( "filter" );
_model->clear();
- for(const GSList *l = filters; l; l = l->next) {
+ for (std::set<SPObject *>::const_iterator it = filters.begin(); it != filters.end(); ++it) {
Gtk::TreeModel::Row row = *_model->append();
- SPFilter* f = SP_FILTER(l->data);
+ SPFilter* f = SP_FILTER(*it);
row[_columns.filter] = f;
const gchar* lbl = f->label();
const gchar* id = f->getId();
diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp
index 3f5e80f8d..f4152e556 100644
--- a/src/ui/dialog/layers.cpp
+++ b/src/ui/dialog/layers.cpp
@@ -1040,14 +1040,6 @@ void LayersPanel::setDesktop( SPDesktop* desktop )
_layersChanged();
}
}
-/*
- GSList const *layers = _desktop->doc()->getResourceList( "layer" );
- g_message( "layers list starts at %p", layers );
- for ( GSList const *iter=layers ; iter ; iter = iter->next ) {
- SPObject *layer=static_cast<SPObject *>(iter->data);
- g_message(" {%s} [%s]", layer->id, layer->label() );
- }
-*/
deskTrack.setBase(desktop);
}
diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp
index 12b423602..46e045c14 100644
--- a/src/ui/dialog/svg-fonts-dialog.cpp
+++ b/src/ui/dialog/svg-fonts-dialog.cpp
@@ -266,12 +266,12 @@ void SvgFontsDialog::update_fonts()
{
SPDesktop* desktop = this->getDesktop();
SPDocument* document = desktop->getDocument();
- const GSList* fonts = document->getResourceList("font");
+ std::set<SPObject *> fonts = document->getResourceList( "fonts" );
_model->clear();
- for(const GSList *l = fonts; l; l = l->next) {
+ for (std::set<SPObject *>::const_iterator it = fonts.begin(); it != fonts.end(); ++it) {
Gtk::TreeModel::Row row = *_model->append();
- SPFont* f = SP_FONT(l->data);
+ SPFont* f = SP_FONT(*it);
row[_columns.spfont] = f;
row[_columns.svgfont] = new SvgFont(f);
const gchar* lbl = f->label();
diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp
index 72677c07e..ed1cd2079 100644
--- a/src/ui/dialog/swatches.cpp
+++ b/src/ui/dialog/swatches.cpp
@@ -171,9 +171,9 @@ static void editGradient( GtkMenuItem */*menuitem*/, gpointer /*user_data*/ )
SPDocument *doc = desktop ? desktop->doc() : 0;
if (doc) {
std::string targetName(bounceTarget->def.descr);
- const GSList *gradients = doc->getResourceList("gradient");
- for (const GSList *item = gradients; item; item = item->next) {
- SPGradient* grad = SP_GRADIENT(item->data);
+ std::set<SPObject *> gradients = doc->getResourceList("gradient");
+ for (std::set<SPObject *>::const_iterator item = gradients.begin(); item != gradients.end(); ++item) {
+ SPGradient* grad = SP_GRADIENT(*item);
if ( targetName == grad->getId() ) {
editGradientImpl( desktop, grad );
break;
@@ -192,10 +192,10 @@ void SwatchesPanelHook::convertGradient( GtkMenuItem * /*menuitem*/, gpointer us
gint index = GPOINTER_TO_INT(userData);
if ( doc && (index >= 0) && (static_cast<guint>(index) < popupItems.size()) ) {
Glib::ustring targetName = popupItems[index];
+ std::set<SPObject *> gradients = doc->getResourceList("gradient");
+ for (std::set<SPObject *>::const_iterator item = gradients.begin(); item != gradients.end(); ++item) {
+ SPGradient* grad = SP_GRADIENT(*item);
- const GSList *gradients = doc->getResourceList("gradient");
- for (const GSList *item = gradients; item; item = item->next) {
- SPGradient* grad = SP_GRADIENT(item->data);
if ( targetName == grad->getId() ) {
grad->setSwatch();
DocumentUndo::done(doc, SP_VERB_CONTEXT_GRADIENT,
@@ -326,10 +326,10 @@ gboolean colorItemHandleButtonPress( GtkWidget* widget, GdkEventButton* event, g
SPDesktopWidget *dtw = SP_DESKTOP_WIDGET(wdgt);
if ( dtw && dtw->desktop ) {
// Pick up all gradients with vectors
- const GSList *gradients = (dtw->desktop->doc())->getResourceList("gradient");
+ std::set<SPObject *> gradients = (dtw->desktop->doc())->getResourceList("gradient");
gint index = 0;
- for (const GSList *curr = gradients; curr; curr = curr->next) {
- SPGradient* grad = SP_GRADIENT(curr->data);
+ for (std::set<SPObject *>::const_iterator item = gradients.begin(); item != gradients.end(); ++item) {
+ SPGradient* grad = SP_GRADIENT(*item);
if ( grad->hasStops() && !grad->isSwatch() ) {
//gl = g_slist_prepend(gl, curr->data);
processed = true;
@@ -923,12 +923,11 @@ static void recalcSwatchContents(SPDocument* doc,
std::map<ColorItem*, SPGradient*> &gradMappings)
{
std::vector<SPGradient*> newList;
-
- const GSList *gradients = doc->getResourceList("gradient");
- for (const GSList *item = gradients; item; item = item->next) {
- SPGradient* grad = SP_GRADIENT(item->data);
+ std::set<SPObject *> gradients = doc->getResourceList("gradient");
+ for (std::set<SPObject *>::const_iterator item = gradients.begin(); item != gradients.end(); ++item) {
+ SPGradient* grad = SP_GRADIENT(*item);
if ( grad->isSwatch() ) {
- newList.push_back(SP_GRADIENT(item->data));
+ newList.push_back(SP_GRADIENT(*item));
}
}
diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp
index 91301fb60..69b229519 100644
--- a/src/ui/interface.cpp
+++ b/src/ui/interface.cpp
@@ -1116,9 +1116,9 @@ sp_ui_drag_data_received(GtkWidget *widget,
unsigned int b = color.getB();
SPGradient* matches = 0;
- const GSList *gradients = doc->getResourceList("gradient");
- for (const GSList *item = gradients; item; item = item->next) {
- SPGradient* grad = SP_GRADIENT(item->data);
+ std::set<SPObject *> gradients = doc->getResourceList("gradient");
+ for (std::set<SPObject *>::const_iterator item = gradients.begin(); item != gradients.end(); ++item) {
+ SPGradient* grad = SP_GRADIENT(*item);
if ( color.descr == grad->getId() ) {
if ( grad->hasStops() ) {
matches = grad;
diff --git a/src/ui/tools/gradient-tool.cpp b/src/ui/tools/gradient-tool.cpp
index bcb0b12b7..9d8101cc4 100644
--- a/src/ui/tools/gradient-tool.cpp
+++ b/src/ui/tools/gradient-tool.cpp
@@ -225,13 +225,13 @@ sp_gradient_context_get_stop_intervals (GrDrag *drag, GSList **these_stops, GSLi
std::vector<Geom::Point> coords;
// for all selected draggers
- for (GList *i = drag->selected; i != NULL; i = i->next) {
- GrDragger *dragger = (GrDragger *) i->data;
+ for (std::set<GrDragger *>::const_iterator i = drag->selected.begin(); i != drag->selected.end() ; ++i ) {
+ GrDragger *dragger = *i;
// remember the coord of the dragger to reselect it later
coords.push_back(dragger->point);
// for all draggables of dragger
- for (GSList const* j = dragger->draggables; j != NULL; j = j->next) {
- GrDraggable *d = (GrDraggable *) j->data;
+ for (std::vector<GrDraggable *>::const_iterator j = dragger->draggables.begin(); j != dragger->draggables.end(); ++j) {
+ GrDraggable *d = *j;
// find the gradient
SPGradient *gradient = getGradient(d->item, d->fill_or_stroke);
@@ -315,9 +315,9 @@ sp_gradient_context_add_stops_between_selected_stops (GradientTool *rc)
if (g_slist_length(these_stops) == 0 && drag->numSelected() == 1) {
// if a single stop is selected, add between that stop and the next one
- GrDragger *dragger = (GrDragger *) drag->selected->data;
- for (GSList const* j = dragger->draggables; j != NULL; j = j->next) {
- GrDraggable *d = (GrDraggable *) j->data;
+ GrDragger *dragger = *(drag->selected.begin());
+ for (std::vector<GrDraggable *>::const_iterator j = dragger->draggables.begin(); j != dragger->draggables.end(); ++j) {
+ GrDraggable *d = *j;
if (d->point_type == POINT_RG_FOCUS) {
/*
* There are 2 draggables at the center (start) of a radial gradient
@@ -482,9 +482,9 @@ bool GradientTool::root_handler(GdkEvent* event) {
bool over_line = false;
SPCtrlLine *line = NULL;
- if (drag->lines) {
- for (GSList *l = drag->lines; (l != NULL) && (!over_line); l = l->next) {
- line = (SPCtrlLine*) l->data;
+ if (!drag->lines.empty()) {
+ for (std::vector<SPCtrlLine *>::const_iterator l = drag->lines.begin(); l != drag->lines.end() && (!over_line); ++l) {
+ line = *l;
over_line |= sp_gradient_context_is_over_line (this, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y));
}
}
@@ -588,9 +588,9 @@ bool GradientTool::root_handler(GdkEvent* event) {
bool over_line = false;
- if (drag->lines) {
- for (GSList *l = drag->lines; l != NULL; l = l->next) {
- over_line |= sp_gradient_context_is_over_line (this, (SPItem*) l->data, Geom::Point(event->motion.x, event->motion.y));
+ if (!drag->lines.empty()) {
+ for (std::vector<SPCtrlLine *>::const_iterator l = drag->lines.begin(); l != drag->lines.end(); ++l) {
+ over_line |= sp_gradient_context_is_over_line (this, (SPItem*) (*l), Geom::Point(event->motion.x, event->motion.y));
}
}
@@ -613,12 +613,10 @@ bool GradientTool::root_handler(GdkEvent* event) {
bool over_line = false;
SPCtrlLine *line = NULL;
- if (drag->lines) {
- for (GSList *l = drag->lines; (l != NULL) && (!over_line); l = l->next) {
- line = (SPCtrlLine*) l->data;
+ if (!drag->lines.empty()) {
+ for (std::vector<SPCtrlLine *>::const_iterator l = drag->lines.begin(); l != drag->lines.end() && (!over_line); ++l) {
+ line = *l;
over_line = sp_gradient_context_is_over_line (this, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y));
- if (over_line)
- break;
}
}
@@ -663,7 +661,7 @@ bool GradientTool::root_handler(GdkEvent* event) {
}
} else {
// click in an empty space; do the same as Esc
- if (drag->selected) {
+ if (!drag->selected.empty()) {
drag->deselectAll();
} else {
selection->clear();
@@ -719,7 +717,7 @@ bool GradientTool::root_handler(GdkEvent* event) {
break;
case GDK_KEY_Escape:
- if (drag->selected) {
+ if (!drag->selected.empty()) {
drag->deselectAll();
} else {
Inkscape::SelectionHelper::selectNone(desktop);
diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp
index 56ba08789..7db4e09d8 100644
--- a/src/ui/tools/mesh-tool.cpp
+++ b/src/ui/tools/mesh-tool.cpp
@@ -332,11 +332,11 @@ sp_mesh_context_corner_operation (MeshTool *rc, MeshCornerOperation operation )
// Get list of selected draggers for each mesh.
// For all selected draggers
- for (GList *i = drag->selected; i != NULL; i = i->next) {
- GrDragger *dragger = (GrDragger *) i->data;
+ for (std::set<GrDragger *>::const_iterator i = drag->selected.begin(); i != drag->selected.end(); ++i) {
+ GrDragger *dragger = *i;
// For all draggables of dragger
- for (GSList const* j = dragger->draggables; j != NULL; j = j->next) {
- GrDraggable *d = (GrDraggable *) j->data;
+ for (std::vector<GrDraggable *>::const_iterator j = dragger->draggables.begin(); j != dragger->draggables.end() ; ++j) {
+ GrDraggable *d = *j;
// Only mesh corners
if( d->point_type != POINT_MG_CORNER ) continue;
@@ -457,9 +457,9 @@ bool MeshTool::root_handler(GdkEvent* event) {
bool over_line = false;
SPCtrlCurve *line = NULL;
- if (drag->lines) {
- for (GSList *l = drag->lines; (l != NULL) && (!over_line); l = l->next) {
- line = (SPCtrlCurve*) l->data;
+ if (! drag->lines.empty()) {
+ for (std::vector<SPCtrlLine *>::const_iterator l = drag->lines.begin(); l != drag->lines.end() && (!over_line); l++) {
+ line = (SPCtrlCurve*) (*l);
over_line |= sp_mesh_context_is_over_line (this, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y));
}
}
@@ -593,9 +593,9 @@ bool MeshTool::root_handler(GdkEvent* event) {
// Change cursor shape if over line
bool over_line = false;
- if (drag->lines) {
- for (GSList *l = drag->lines; l != NULL; l = l->next) {
- over_line |= sp_mesh_context_is_over_line (this, (SPItem*) l->data, Geom::Point(event->motion.x, event->motion.y));
+ if (!drag->lines.empty()) {
+ for (std::vector<SPCtrlLine *>::const_iterator l = drag->lines.begin(); l != drag->lines.end() ; l++) {
+ over_line |= sp_mesh_context_is_over_line (this, (SPItem*)(*l), Geom::Point(event->motion.x, event->motion.y));
}
}
@@ -624,9 +624,9 @@ bool MeshTool::root_handler(GdkEvent* event) {
bool over_line = false;
SPCtrlLine *line = NULL;
- if (drag->lines) {
- for (GSList *l = drag->lines; (l != NULL) && (!over_line); l = l->next) {
- line = (SPCtrlLine*) l->data;
+ if (!drag->lines.empty()) {
+ for (std::vector<SPCtrlLine *>::const_iterator l = drag->lines.begin(); l != drag->lines.end() && (!over_line); l++) {
+ line = (SPCtrlLine*)(*l);
over_line = sp_mesh_context_is_over_line (this, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y));
if (over_line) {
@@ -678,7 +678,7 @@ bool MeshTool::root_handler(GdkEvent* event) {
}
} else {
// click in an empty space; do the same as Esc
- if (drag->selected) {
+ if (!drag->selected.empty()) {
drag->deselectAll();
} else {
selection->clear();
@@ -724,7 +724,7 @@ bool MeshTool::root_handler(GdkEvent* event) {
break;
case GDK_KEY_Escape:
- if (drag->selected) {
+ if (!drag->selected.empty()) {
drag->deselectAll();
} else {
selection->clear();
@@ -841,7 +841,7 @@ bool MeshTool::root_handler(GdkEvent* event) {
case GDK_KEY_Delete:
case GDK_KEY_KP_Delete:
case GDK_KEY_BackSpace:
- if ( drag->selected ) {
+ if ( !drag->selected.empty() ) {
std::cout << "Deleting mesh stops not implemented yet" << std::endl;
ret = TRUE;
}
diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp
index f06b03d91..2b85216d2 100644
--- a/src/ui/tools/select-tool.cpp
+++ b/src/ui/tools/select-tool.cpp
@@ -89,10 +89,6 @@ SelectTool::SelectTool()
, button_press_shift(false)
, button_press_ctrl(false)
, button_press_alt(false)
- , cycling_items(NULL)
- , cycling_items_cmp(NULL)
- , cycling_items_selected_before(NULL)
- , cycling_cur_item(NULL)
, cycling_wrap(true)
, item(NULL)
, grabbed(NULL)
@@ -390,16 +386,16 @@ bool SelectTool::item_handler(SPItem* item, GdkEvent* event) {
}
void SelectTool::sp_select_context_cycle_through_items(Inkscape::Selection *selection, GdkEventScroll *scroll_event, bool shift_pressed) {
- if (!this->cycling_cur_item) {
+ if (this->cycling_cur_item == this->cycling_items.end()) {
return;
}
Inkscape::DrawingItem *arenaitem;
- SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(cycling_cur_item->data));
+ SPItem *item = *cycling_cur_item;
g_assert(item != NULL);
// Deactivate current item
- if (!g_list_find(this->cycling_items_selected_before, item) && selection->includes(item)) {
+ if (std::find(cycling_items_selected_before.begin(), cycling_items_selected_before.end(), item) == cycling_items_selected_before.end() && selection->includes(item)) {
selection->remove(item);
}
@@ -407,20 +403,20 @@ void SelectTool::sp_select_context_cycle_through_items(Inkscape::Selection *sele
arenaitem->setOpacity(0.3);
// Find next item and activate it
- GList *next;
+ std::vector<SPItem *>::iterator next = this->cycling_cur_item;
if (scroll_event->direction == GDK_SCROLL_UP) {
- next = this->cycling_cur_item->next;
- if (next == NULL && this->cycling_wrap)
- next = this->cycling_items;
+ next++;
+ if (next == this->cycling_items.end() && this->cycling_wrap)
+ next = this->cycling_items.begin();
} else {
- next = this->cycling_cur_item->prev;
- if (next == NULL && this->cycling_wrap)
- next = g_list_last(this->cycling_items);
+ if(next == this->cycling_items.begin())
+ next = this->cycling_items.end();
+ next--;
}
- if (next) {
+ if (next!=this->cycling_items.end()) {
this->cycling_cur_item = next;
- item = dynamic_cast<SPItem *>(static_cast<SPObject *>(this->cycling_cur_item->data));
+ item = *next;
g_assert(item != NULL);
}
@@ -435,8 +431,8 @@ void SelectTool::sp_select_context_cycle_through_items(Inkscape::Selection *sele
}
void SelectTool::sp_select_context_reset_opacities() {
- for (GList *l = this->cycling_items; l != NULL; l = g_list_next(l)) {
- SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(l->data));
+ for (std::vector<SPItem *>::const_iterator l = this->cycling_items.begin(); l != this->cycling_items.end(); ++l ) {
+ SPItem *item = *l;
if (item) {
Inkscape::DrawingItem *arenaitem = item->get_arenaitem(desktop->dkey);
arenaitem->setOpacity(SP_SCALE24_TO_FLOAT(item->style->opacity.value));
@@ -445,14 +441,10 @@ void SelectTool::sp_select_context_reset_opacities() {
}
}
- g_list_free(this->cycling_items);
- g_list_free(this->cycling_items_selected_before);
- g_list_free(this->cycling_items_cmp);
-
- this->cycling_items = NULL;
- this->cycling_items_selected_before = NULL;
- this->cycling_cur_item = NULL;
- this->cycling_items_cmp = NULL;
+ this->cycling_items.clear();
+ this->cycling_items_selected_before.clear();
+ this->cycling_cur_item = this->cycling_items.end();
+ this->cycling_items_cmp.clear();
}
bool SelectTool::root_handler(GdkEvent* event) {
@@ -819,70 +811,57 @@ bool SelectTool::root_handler(GdkEvent* event) {
SPItem *item = desktop->getItemAtPoint(p, true, NULL);
// Save pointer to current cycle-item so that we can find it again later, in the freshly built list
- SPItem *tmp_cur_item = this->cycling_cur_item ? dynamic_cast<SPItem *>(static_cast<SPObject *>(this->cycling_cur_item->data)) : NULL;
- g_list_free(this->cycling_items);
- this->cycling_items = NULL;
- this->cycling_cur_item = NULL;
-
+ SPItem *tmp_cur_item = this->cycling_cur_item!=this->cycling_items.end() ? (*(this->cycling_cur_item)) : NULL;
+ this->cycling_items.clear();
+ this->cycling_cur_item = this->cycling_items.end();
while(item != NULL) {
- this->cycling_items = g_list_append(this->cycling_items, item);
+ this->cycling_items.push_back(item);
item = desktop->getItemAtPoint(p, true, item);
}
/* Compare current item list with item list during previous scroll ... */
- GList *l1, *l2;
- bool item_lists_differ = false;
-
- // Note that we can do an 'or' comparison in the loop because it is safe to call g_list_next with a NULL pointer.
- for (l1 = this->cycling_items, l2 = this->cycling_items_cmp; l1 != NULL || l2 != NULL; l1 = g_list_next(l1), l2 = g_list_next(l2)) {
- if ((l1 !=NULL && l2 == NULL) || (l1 == NULL && l2 != NULL) || (l1->data != l2->data)) {
- item_lists_differ = true;
- break;
- }
- }
+ bool item_lists_differ = this->cycling_items != this->cycling_items_cmp;
/* If list of items under mouse pointer hasn't changed ... */
if (!item_lists_differ) {
// ... find current item in the freshly built list and continue cycling ...
// TODO: This wouldn't be necessary if cycling_cur_item pointed to an element of cycling_items_cmp instead
- this->cycling_cur_item = g_list_find(this->cycling_items, tmp_cur_item);
- g_assert(this->cycling_cur_item != NULL || this->cycling_items == NULL);
+ this->cycling_cur_item = std::find(this->cycling_items.begin(), this->cycling_items.end(), tmp_cur_item);
+ g_assert(this->cycling_cur_item != this->cycling_items.end() || this->cycling_items.empty());
} else {
// ... otherwise reset opacities for outdated items ...
Inkscape::DrawingItem *arenaitem;
- for(GList *l = this->cycling_items_cmp; l != NULL; l = l->next) {
- SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(l->data));
+ for (std::vector<SPItem *>::const_iterator l = this->cycling_items_cmp.begin(); l != this->cycling_items_cmp.end(); ++l) {
+ SPItem *item = *l;
if (item) {
arenaitem = item->get_arenaitem(desktop->dkey);
arenaitem->setOpacity(1.0);
//if (!shift_pressed && !g_list_find(this->cycling_items_selected_before, item) && selection->includes(item))
- if (!g_list_find(this->cycling_items_selected_before, item) && selection->includes(item)) {
+ if (std::find(this->cycling_items_selected_before.begin(),this->cycling_items_selected_before.end(), item)==this->cycling_items_selected_before.end() && selection->includes(item)) {
selection->remove(item);
}
}
}
// ... clear the lists ...
- g_list_free(this->cycling_items_cmp);
- g_list_free(this->cycling_items_selected_before);
- this->cycling_items_cmp = NULL;
- this->cycling_items_selected_before = NULL;
- this->cycling_cur_item = NULL;
+ this->cycling_items_cmp.clear();
+ this->cycling_items_selected_before.clear();
+ this->cycling_cur_item = this->cycling_items.end();
// ... and rebuild them with the new items.
- this->cycling_items_cmp = g_list_copy(this->cycling_items);
+ this->cycling_items_cmp = (this->cycling_items);
- for(GList *l = this->cycling_items; l != NULL; l = l->next) {
- SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(l->data));
+ for(std::vector<SPItem *>::const_iterator l = this->cycling_items.begin(); l != this->cycling_items.end(); ++l) {
+ SPItem *item =*l;
if (item) {
arenaitem = item->get_arenaitem(desktop->dkey);
arenaitem->setOpacity(0.3);
if (selection->includes(item)) {
// already selected items are stored separately, too
- this->cycling_items_selected_before = g_list_append(this->cycling_items_selected_before, item);
+ this->cycling_items_selected_before.push_back(item);
}
} else {
g_assert_not_reached();
@@ -890,7 +869,8 @@ bool SelectTool::root_handler(GdkEvent* event) {
}
// set the current item to the bottommost one so that the cycling step below re-starts at the top
- this->cycling_cur_item = g_list_last(this->cycling_items);
+ this->cycling_cur_item = this->cycling_items.end();
+ this->cycling_cur_item--;
}
this->cycling_wrap = prefs->getBool("/options/selection/cycleWrap", true);
diff --git a/src/ui/tools/select-tool.h b/src/ui/tools/select-tool.h
index 5af99a56a..af183b1ca 100644
--- a/src/ui/tools/select-tool.h
+++ b/src/ui/tools/select-tool.h
@@ -40,10 +40,10 @@ public:
bool button_press_ctrl;
bool button_press_alt;
- GList *cycling_items;
- GList *cycling_items_cmp;
- GList *cycling_items_selected_before;
- GList *cycling_cur_item;
+ std::vector<SPItem *> cycling_items;
+ std::vector<SPItem *> cycling_items_cmp;
+ std::vector<SPItem *> cycling_items_selected_before;
+ std::vector<SPItem *>::iterator cycling_cur_item;
bool cycling_wrap;
SPItem *item;
diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp
index bf7b61b61..abac2c091 100644
--- a/src/ui/tools/tool-base.cpp
+++ b/src/ui/tools/tool-base.cpp
@@ -924,7 +924,7 @@ void ToolBase::enableGrDrag(bool enable) {
*/
bool ToolBase::deleteSelectedDrag(bool just_one) {
- if (_grdrag && _grdrag->selected) {
+ if (_grdrag && !_grdrag->selected.empty()) {
_grdrag->deleteSelected(just_one);
return TRUE;
}
diff --git a/src/ui/widget/color-icc-selector.cpp b/src/ui/widget/color-icc-selector.cpp
index 1c31ae33a..2fe4a0704 100644
--- a/src/ui/widget/color-icc-selector.cpp
+++ b/src/ui/widget/color-icc-selector.cpp
@@ -676,9 +676,9 @@ void ColorICCSelectorImpl::_profilesChanged(std::string const &name)
gtk_combo_box_set_active(combo, 0);
int index = 1;
- const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList("iccprofile");
- while (current) {
- SPObject *obj = SP_OBJECT(current->data);
+ std::set<SPObject *> current = SP_ACTIVE_DOCUMENT->getResourceList("iccprofile");
+ for (std::set<SPObject *>::const_iterator it = current.begin(); it != current.end(); ++it) {
+ SPObject *obj = *it;
Inkscape::ColorProfile *prof = reinterpret_cast<Inkscape::ColorProfile *>(obj);
gtk_list_store_append(store, &iter);
@@ -690,7 +690,6 @@ void ColorICCSelectorImpl::_profilesChanged(std::string const &name)
}
index++;
- current = g_slist_next(current);
}
g_signal_handler_unblock(G_OBJECT(_profileSel), _profChangedID);
diff --git a/src/unclump.h b/src/unclump.h
index 461e99d0b..c6948f320 100644
--- a/src/unclump.h
+++ b/src/unclump.h
@@ -11,7 +11,6 @@
#ifndef SEEN_DIALOGS_UNCLUMP_H
#define SEEN_DIALOGS_UNCLUMP_H
-typedef struct _GSList GSList;
void unclump(std::vector<SPItem*> &items);
diff --git a/src/vanishing-point.cpp b/src/vanishing-point.cpp
index 19750bd37..9ce60fce7 100644
--- a/src/vanishing-point.cpp
+++ b/src/vanishing-point.cpp
@@ -137,8 +137,8 @@ vp_knot_moved_handler (SPKnot *knot, Geom::Point const &ppointer, guint state, g
if (!(state & GDK_SHIFT_MASK)) {
// without Shift; see if we need to snap to another dragger
- for (GList *di = dragger->parent->draggers; di != NULL; di = di->next) {
- VPDragger *d_new = (VPDragger *) di->data;
+ for (std::vector<VPDragger *>::const_iterator di = dragger->parent->draggers.begin(); di != dragger->parent->draggers.end(); ++di) {
+ VPDragger *d_new = *di;
if ((d_new != dragger) && (Geom::L2 (d_new->point - p) < snap_dist)) {
if (have_VPs_of_same_perspective (dragger, d_new)) {
// this would result in degenerate boxes, which we disallow for the time being
@@ -155,7 +155,7 @@ vp_knot_moved_handler (SPKnot *knot, Geom::Point const &ppointer, guint state, g
d_new->vps.merge(dragger->vps);
// ... delete old dragger ...
- drag->draggers = g_list_remove (drag->draggers, dragger);
+ drag->draggers.erase(std::remove(drag->draggers.begin(), drag->draggers.end(), dragger),drag->draggers.end());
delete dragger;
dragger = NULL;
@@ -494,8 +494,6 @@ VPDrag::VPDrag (SPDocument *document)
this->document = document;
this->selection = SP_ACTIVE_DESKTOP->getSelection();
- this->draggers = NULL;
- this->lines = NULL;
this->show_lines = true;
this->front_or_rear_lines = 0x1;
@@ -522,17 +520,15 @@ VPDrag::~VPDrag()
this->sel_changed_connection.disconnect();
this->sel_modified_connection.disconnect();
- for (GList *l = this->draggers; l != NULL; l = l->next) {
- delete ((VPDragger *) l->data);
+ for (std::vector<VPDragger *>::const_iterator i = this->draggers.begin(); i != this->draggers.end(); ++i) {
+ delete (*i);
}
- g_list_free (this->draggers);
- this->draggers = NULL;
+ this->draggers.clear();
- for (GSList const *i = this->lines; i != NULL; i = i->next) {
- sp_canvas_item_destroy(SP_CANVAS_ITEM(i->data));
+ for (std::vector<SPCtrlLine *>::const_iterator i = this->lines.begin(); i != this->lines.end(); ++i) {
+ sp_canvas_item_destroy(SP_CANVAS_ITEM(*i));
}
- g_slist_free (this->lines);
- this->lines = NULL;
+ this->lines.clear();
}
/**
@@ -541,8 +537,8 @@ VPDrag::~VPDrag()
VPDragger *
VPDrag::getDraggerFor (VanishingPoint const &vp)
{
- for (GList const* i = this->draggers; i != NULL; i = i->next) {
- VPDragger *dragger = (VPDragger *) i->data;
+ for (std::vector<VPDragger *>::const_iterator i = this->draggers.begin(); i != this->draggers.end(); ++i) {
+ VPDragger *dragger = *i;
for (std::list<VanishingPoint>::iterator j = dragger->vps.begin(); j != dragger->vps.end(); ++j) {
// TODO: Should we compare the pointers or the VPs themselves!?!?!?!
if (*j == vp) {
@@ -557,8 +553,8 @@ void
VPDrag::printDraggers ()
{
g_print ("=== VPDrag info: =================================\n");
- for (GList const* i = this->draggers; i != NULL; i = i->next) {
- ((VPDragger *) i->data)->printVPs();
+ for (std::vector<VPDragger *>::const_iterator i = this->draggers.begin(); i != this->draggers.end(); ++i) {
+ (*i)->printVPs();
g_print ("========\n");
}
g_print ("=================================================\n");
@@ -573,11 +569,10 @@ VPDrag::updateDraggers ()
if (this->dragging)
return;
// delete old draggers
- for (GList const* i = this->draggers; i != NULL; i = i->next) {
- delete ((VPDragger *) i->data);
+ for (std::vector<VPDragger *>::const_iterator i = this->draggers.begin(); i != this->draggers.end(); ++i) {
+ delete (*i);
}
- g_list_free (this->draggers);
- this->draggers = NULL;
+ this->draggers.clear();
g_return_if_fail (this->selection != NULL);
@@ -603,11 +598,10 @@ void
VPDrag::updateLines ()
{
// delete old lines
- for (GSList const *i = this->lines; i != NULL; i = i->next) {
- sp_canvas_item_destroy(SP_CANVAS_ITEM(i->data));
+ for (std::vector<SPCtrlLine *>::const_iterator i = this->lines.begin(); i != this->lines.end(); ++i) {
+ sp_canvas_item_destroy(SP_CANVAS_ITEM(*i));
}
- g_slist_free (this->lines);
- this->lines = NULL;
+ this->lines.clear();
// do nothing if perspective lines are currently disabled
if (this->show_lines == 0) return;
@@ -651,8 +645,8 @@ VPDrag::updateBoxHandles ()
void
VPDrag::updateBoxReprs ()
{
- for (GList *i = this->draggers; i != NULL; i = i->next) {
- VPDragger *dragger = (VPDragger *) i->data;
+ for (std::vector<VPDragger *>::const_iterator i = this->draggers.begin(); i != this->draggers.end(); ++i) {
+ VPDragger *dragger = *i;
for (std::list<VanishingPoint>::iterator i = dragger->vps.begin(); i != dragger->vps.end(); ++i) {
(*i).updateBoxReprs();
}
@@ -662,8 +656,8 @@ VPDrag::updateBoxReprs ()
void
VPDrag::updateBoxDisplays ()
{
- for (GList *i = this->draggers; i != NULL; i = i->next) {
- VPDragger *dragger = (VPDragger *) i->data;
+ for (std::vector<VPDragger *>::const_iterator i = this->draggers.begin(); i != this->draggers.end(); ++i) {
+ VPDragger *dragger = *i;
for (std::list<VanishingPoint>::iterator i = dragger->vps.begin(); i != dragger->vps.end(); ++i) {
(*i).updateBoxDisplays();
}
@@ -758,8 +752,8 @@ VPDrag::addDragger (VanishingPoint &vp)
}
Geom::Point p = vp.get_pos();
- for (GList *i = this->draggers; i != NULL; i = i->next) {
- VPDragger *dragger = (VPDragger *) i->data;
+ for (std::vector<VPDragger *>::const_iterator i = this->draggers.begin(); i != this->draggers.end(); ++i) {
+ VPDragger *dragger = *i;
if (Geom::L2 (dragger->point - p) < MERGE_DIST) {
// distance is small, merge this draggable into dragger, no need to create new dragger
dragger->addVP (vp);
@@ -769,16 +763,16 @@ VPDrag::addDragger (VanishingPoint &vp)
VPDragger *new_dragger = new VPDragger(this, p, vp);
// fixme: draggers should be added AFTER the last one: this way tabbing through them will be from begin to end.
- this->draggers = g_list_append (this->draggers, new_dragger);
+ this->draggers.push_back(new_dragger);
}
void
VPDrag::swap_perspectives_of_VPs(Persp3D *persp2, Persp3D *persp1)
{
// iterate over all VP in all draggers and replace persp2 with persp1
- for (GList *i = this->draggers; i != NULL; i = i->next) {
- for (std::list<VanishingPoint>::iterator j = ((VPDragger *) (i->data))->vps.begin();
- j != ((VPDragger *) (i->data))->vps.end(); ++j) {
+ for (std::vector<VPDragger *>::const_iterator i = this->draggers.begin(); i != this->draggers.end(); ++i) {
+ for (std::list<VanishingPoint>::iterator j = (*i)->vps.begin();
+ j != (*i)->vps.end(); ++j) {
if ((*j).get_perspective() == persp2) {
(*j).set_perspective(persp1);
}
@@ -790,7 +784,7 @@ void VPDrag::addLine(Geom::Point const &p1, Geom::Point const &p2, Inkscape::Ctr
{
SPCtrlLine *line = ControlManager::getManager().createControlLine(SP_ACTIVE_DESKTOP->getControls(), p1, p2, type);
sp_canvas_item_show(line);
- this->lines = g_slist_append(this->lines, line);
+ this->lines.push_back(line);
}
} // namespace Box3D
diff --git a/src/vanishing-point.h b/src/vanishing-point.h
index 7242a94ee..28da8e7fa 100644
--- a/src/vanishing-point.h
+++ b/src/vanishing-point.h
@@ -23,8 +23,6 @@
#include "ui/control-manager.h" // TODO break enums out separately
class SPBox3D;
-typedef struct _GList GList;
-typedef struct _GSList GSList;
namespace Box3D {
@@ -173,8 +171,8 @@ public:
bool dragging;
SPDocument *document;
- GList *draggers;
- GSList *lines;
+ std::vector<VPDragger *> draggers;
+ std::vector<SPCtrlLine *> lines;
void printDraggers(); // convenience for debugging
/*
@@ -195,7 +193,6 @@ public:
inline bool hasEmptySelection() { return this->selection->isEmpty(); }
bool allBoxesAreSelected (VPDragger *dragger);
- GSList * selectedBoxesWithVPinDragger (VPDragger *dragger);
// FIXME: Should this be private? (It's the case with the corresponding function in gradient-drag.h)
// But vp_knot_grabbed_handler
diff --git a/src/widgets/connector-toolbar.cpp b/src/widgets/connector-toolbar.cpp
index 8cc254bd2..733fb34e8 100644
--- a/src/widgets/connector-toolbar.cpp
+++ b/src/widgets/connector-toolbar.cpp
@@ -200,17 +200,15 @@ static void connector_spacing_changed(GtkAdjustment *adj, GObject* tbl)
desktop->namedview->updateRepr();
bool modmade = false;
- GSList *items = get_avoided_items(NULL, desktop->currentRoot(), desktop);
- for ( GSList const *iter = items ; iter != NULL ; iter = iter->next ) {
- SPItem *item = reinterpret_cast<SPItem *>(iter->data);
+ std::vector<SPItem *> items;
+ items = get_avoided_items(items, desktop->currentRoot(), desktop);
+ for (std::vector<SPItem *>::const_iterator iter = items.begin(); iter != items.end(); ++iter ) {
+ SPItem *item = *iter;
Geom::Affine m = Geom::identity();
avoid_item_move(&m, item);
modmade = true;
}
- if (items) {
- g_slist_free(items);
- }
if(modmade) {
DocumentUndo::done(doc, SP_VERB_CONTEXT_CONNECTOR,
_("Change connector spacing"));
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index 431b7a05d..85f58c830 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -1868,9 +1868,9 @@ bool SPDesktopWidget::onFocusInEvent(GdkEventFocus*)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (prefs->getBool("/options/bitmapautoreload/value", true)) {
- GSList const *imageList = (desktop->doc())->getResourceList("image");
- for (GSList const *p = imageList; p; p = p->next) {
- SPImage* image = SP_IMAGE(p->data);
+ std::set<SPObject *> imageList = (desktop->doc())->getResourceList("image");
+ for (std::set<SPObject *>::const_iterator it = imageList.begin(); it != imageList.end(); ++it) {
+ SPImage* image = SP_IMAGE(*it);
sp_image_refresh_if_outdated( image );
}
}
diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp
index b24615126..858aa05db 100644
--- a/src/widgets/gradient-toolbar.cpp
+++ b/src/widgets/gradient-toolbar.cpp
@@ -106,10 +106,10 @@ void gr_apply_gradient(Inkscape::Selection *selection, GrDrag *drag, SPGradient
// GRADIENTFIXME: make this work for multiple selected draggers.
// First try selected dragger
- if (drag && drag->selected) {
- GrDragger *dragger = static_cast<GrDragger*>(drag->selected->data);
- for (GSList const* i = dragger->draggables; i != NULL; i = i->next) { // for all draggables of dragger
- GrDraggable *draggable = static_cast<GrDraggable*>(i->data);
+ if (drag && !drag->selected.empty()) {
+ GrDragger *dragger = *(drag->selected.begin());
+ for(std::vector<GrDraggable *>::const_iterator i = dragger->draggables.begin(); i != dragger->draggables.end(); ++i) { //for all draggables of dragger
+ GrDraggable *draggable = *i;
gr_apply_gradient_to_item(draggable->item, gr, initialType, initialMode, draggable->fill_or_stroke);
}
return;
@@ -139,19 +139,18 @@ gboolean gr_vector_list(GtkWidget *combo_box, SPDesktop *desktop, bool selection
/* Clear old list, if there is any */
gtk_list_store_clear(store);
- GSList *gl = NULL;
- const GSList *gradients = document->getResourceList("gradient");
- for (const GSList *i = gradients; i != NULL; i = i->next) {
- SPGradient *grad = SP_GRADIENT(i->data);
+ std::vector<SPObject *> gl;
+ std::set<SPObject *> gradients = document->getResourceList( "gradient" );
+ for (std::set<SPObject *>::const_iterator it = gradients.begin(); it != gradients.end(); ++it) {
+ SPGradient *grad = SP_GRADIENT(*it);
if ( grad->hasStops() && !grad->isSolid() ) {
- gl = g_slist_prepend(gl, i->data);
+ gl.push_back(*it);
}
}
- gl = g_slist_reverse(gl);
guint pos = 0;
- if (!gl) {
+ if (gl.empty()) {
// The document has no gradients
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, _("No gradient"), 1, NULL, 2, NULL, -1);
@@ -180,9 +179,8 @@ gboolean gr_vector_list(GtkWidget *combo_box, SPDesktop *desktop, bool selection
}
guint idx = 0;
- while (gl) {
- SPGradient *gradient = SP_GRADIENT(gl->data);
- gl = g_slist_remove(gl, gradient);
+ for (std::vector<SPObject *>::const_iterator it = gl.begin(); it != gl.end(); ++it) {
+ SPGradient *gradient = SP_GRADIENT(*it);
Glib::ustring label = gr_prepare_label(gradient);
GdkPixbuf *pixb = sp_gradient_to_pixbuf(gradient, 64, 16);
@@ -255,11 +253,11 @@ void gr_read_selection( Inkscape::Selection *selection,
SPGradientSpread &spr_selected,
bool &spr_multi )
{
- if (drag && drag->selected) {
+ if (drag && !drag->selected.empty()) {
// GRADIENTFIXME: make this work for more than one selected dragger?
- GrDragger *dragger = static_cast<GrDragger*>(drag->selected->data);
- for (GSList const* i = dragger->draggables; i; i = i->next) { // for all draggables of dragger
- GrDraggable *draggable = static_cast<GrDraggable *>(i->data);
+ GrDragger *dragger = *(drag->selected.begin());
+ for(std::vector<GrDraggable *>::const_iterator i = dragger->draggables.begin(); i != dragger->draggables.end(); ++i) { //for all draggables of dragger
+ GrDraggable *draggable = *i;
SPGradient *gradient = sp_item_gradient_get_vector(draggable->item, draggable->fill_or_stroke);
SPGradientSpread spread = sp_item_gradient_get_spread(draggable->item, draggable->fill_or_stroke);
@@ -394,10 +392,10 @@ static void gr_tb_selection_changed(Inkscape::Selection * /*selection*/, gpointe
}
InkAction *add = (InkAction *) g_object_get_data(G_OBJECT(widget), "gradient_stops_add_action");
- gtk_action_set_sensitive(GTK_ACTION(add), (gr_selected && !gr_multi && drag && drag->selected));
+ gtk_action_set_sensitive(GTK_ACTION(add), (gr_selected && !gr_multi && drag && !drag->selected.empty()));
InkAction *del = (InkAction *) g_object_get_data(G_OBJECT(widget), "gradient_stops_delete_action");
- gtk_action_set_sensitive(GTK_ACTION(del), (gr_selected && !gr_multi && drag && drag->selected));
+ gtk_action_set_sensitive(GTK_ACTION(del), (gr_selected && !gr_multi && drag && !drag->selected.empty()));
InkAction *reverse = (InkAction *) g_object_get_data(G_OBJECT(widget), "gradient_stops_reverse_action");
gtk_action_set_sensitive(GTK_ACTION(reverse), (gr_selected!= NULL));
@@ -649,7 +647,7 @@ static void select_stop_by_drag(GtkWidget *combo_box, SPGradient *gradient, Tool
GrDrag *drag = ev->get_drag();
- if (!drag || !drag->selected) {
+ if (!drag || drag->selected.empty()) {
blocked = TRUE;
gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box) , 0);
gr_stop_set_offset(GTK_COMBO_BOX(combo_box), data);
@@ -660,11 +658,10 @@ static void select_stop_by_drag(GtkWidget *combo_box, SPGradient *gradient, Tool
gint n = 0;
// for all selected draggers
- for (GList *i = drag->selected; i != NULL; i = i->next) {
- GrDragger *dragger = static_cast<GrDragger*>(i->data);
- // for all draggables of dragger
- for (GSList const* j = dragger->draggables; j != NULL; j = j->next) {
- GrDraggable *draggable = static_cast<GrDraggable*>(j->data);
+ for(std::set<GrDragger *>::const_iterator i = drag->selected.begin(); i != drag->selected.end(); ++i) { //for all draggables of dragger
+ GrDragger *dragger = *i;
+ for(std::vector<GrDraggable *>::const_iterator j = dragger->draggables.begin(); j != dragger->draggables.end(); ++j) { //for all draggables of dragger
+ GrDraggable *draggable = *j;
if (draggable->point_type != POINT_RG_FOCUS) {
n++;
@@ -766,25 +763,25 @@ static gboolean update_stop_list( GtkWidget *stop_combo, SPGradient *gradient, S
}
/* Populate the combobox store */
- GSList *sl = NULL;
+ std::vector<SPObject *> sl;
if ( gradient->hasStops() ) {
for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) {
if (SP_IS_STOP(ochild)) {
- sl = g_slist_append(sl, ochild);
+ sl.push_back(ochild);
}
}
}
- if (!sl) {
+ if (sl.empty()) {
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, _("No stops in gradient"), 1, NULL, 2, NULL, -1);
sensitive = FALSE;
} else {
- for (; sl != NULL; sl = sl->next){
- if (SP_IS_STOP(sl->data)){
- SPStop *stop = SP_STOP(sl->data);
- Inkscape::XML::Node *repr = reinterpret_cast<SPItem *>(sl->data)->getRepr();
+ for (std::vector<SPObject *>::const_iterator it = sl.begin(); it != sl.end(); ++it) {
+ if (SP_IS_STOP(*it)){
+ SPStop *stop = SP_STOP(*it);
+ Inkscape::XML::Node *repr = reinterpret_cast<SPItem *>(*it)->getRepr();
Inkscape::UI::Widget::ColorPreview *cpv = Gtk::manage(new Inkscape::UI::Widget::ColorPreview(stop->get_rgba32()));
GdkPixbuf *pb = cpv->toPixbuf(32, 16);
Glib::ustring label = gr_ellipsize_text(repr->attribute("id"), 25);
diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp
index 8e92f589a..35c1e4a8d 100644
--- a/src/widgets/gradient-vector.cpp
+++ b/src/widgets/gradient-vector.cpp
@@ -298,11 +298,11 @@ static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs)
/* Pick up all gradients with vectors */
GSList *gl = NULL;
if (gvs->gr) {
- const GSList *gradients = gvs->gr->document->getResourceList("gradient");
- for (const GSList *curr = gradients; curr; curr = curr->next) {
- SPGradient* grad = SP_GRADIENT(curr->data);
+ std::set<SPObject *> gradients = gvs->gr->document->getResourceList("gradient");
+ for (std::set<SPObject *>::const_iterator it = gradients.begin(); it != gradients.end(); ++it) {
+ SPGradient* grad = SP_GRADIENT(*it);
if ( grad->hasStops() && (grad->isSwatch() == gvs->swatched) ) {
- gl = g_slist_prepend(gl, curr->data);
+ gl = g_slist_prepend(gl, *it);
}
}
}
diff --git a/src/widgets/mesh-toolbar.cpp b/src/widgets/mesh-toolbar.cpp
index 9937b23ed..3643ce00c 100644
--- a/src/widgets/mesh-toolbar.cpp
+++ b/src/widgets/mesh-toolbar.cpp
@@ -433,14 +433,14 @@ void sp_mesh_toolbox_prep(SPDesktop * desktop, GtkActionGroup* mainActions, GObj
/* Number of mesh rows */
{
- gchar const* labels[] = {};
+ gchar const** labels = NULL;
gdouble values[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
eact = create_adjustment_action( "MeshRowAction",
_("Rows"), _("Rows:"), _("Number of rows in new mesh"),
"/tools/mesh/mesh_rows", 1,
GTK_WIDGET(desktop->canvas), holder, FALSE, NULL,
1, 20, 1, 1,
- labels, values, G_N_ELEMENTS(labels),
+ labels, values, 0,
ms_row_changed, NULL /*unit tracker*/,
1.0, 0 );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
@@ -449,14 +449,14 @@ void sp_mesh_toolbox_prep(SPDesktop * desktop, GtkActionGroup* mainActions, GObj
/* Number of mesh columns */
{
- gchar const* labels[] = {};
+ gchar const** labels = NULL;
gdouble values[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
eact = create_adjustment_action( "MeshColumnAction",
_("Columns"), _("Columns:"), _("Number of columns in new mesh"),
"/tools/mesh/mesh_cols", 1,
GTK_WIDGET(desktop->canvas), holder, FALSE, NULL,
1, 20, 1, 1,
- labels, values, G_N_ELEMENTS(labels),
+ labels, values, 0,
ms_col_changed, NULL /*unit tracker*/,
1.0, 0 );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp
index d8d314834..602cad3c3 100644
--- a/src/widgets/paint-selector.cpp
+++ b/src/widgets/paint-selector.cpp
@@ -844,10 +844,10 @@ ink_pattern_list_get (SPDocument *source)
return NULL;
GSList *pl = NULL;
- GSList const *patterns = source->getResourceList("pattern");
- for (GSList *l = const_cast<GSList *>(patterns); l != NULL; l = l->next) {
- if (SP_PATTERN(l->data) == SP_PATTERN(l->data)->rootPattern()) { // only if this is a root pattern
- pl = g_slist_prepend(pl, l->data);
+ std::set<SPObject *> patterns = source->getResourceList("pattern");
+ for (std::set<SPObject *>::const_iterator it = patterns.begin(); it != patterns.end(); ++it) {
+ if (SP_PATTERN(*it) == SP_PATTERN(*it)->rootPattern()) { // only if this is a root pattern
+ pl = g_slist_prepend(pl, *it);
}
}
diff --git a/src/xml/rebase-hrefs.cpp b/src/xml/rebase-hrefs.cpp
index 9d4f4f9fc..2bcae5d81 100644
--- a/src/xml/rebase-hrefs.cpp
+++ b/src/xml/rebase-hrefs.cpp
@@ -220,9 +220,9 @@ void Inkscape::XML::rebase_hrefs(SPDocument *const doc, gchar const *const new_b
*
* Note also that Inkscape only supports fragment hrefs (href="#pattern257") for many of these
* cases. */
- GSList const *images = doc->getResourceList("image");
- for (GSList const *l = images; l != NULL; l = l->next) {
- Inkscape::XML::Node *ir = static_cast<SPObject *>(l->data)->getRepr();
+ std::set<SPObject *> images = doc->getResourceList("image");
+ for (std::set<SPObject *>::const_iterator it = images.begin(); it != images.end(); ++it) {
+ Inkscape::XML::Node *ir = (*it)->getRepr();
std::string uri;
{
diff --git a/src/xml/repr-io.cpp b/src/xml/repr-io.cpp
index a4146f215..4a6f59b43 100644
--- a/src/xml/repr-io.cpp
+++ b/src/xml/repr-io.cpp
@@ -38,6 +38,7 @@
#include "preferences.h"
#include <glibmm/miscutils.h>
+#include <map>
using Inkscape::IO::Writer;
using Inkscape::Util::List;
@@ -50,8 +51,8 @@ using Inkscape::XML::calc_abs_doc_base;
using Inkscape::XML::rebase_href_attrs;
Document *sp_repr_do_read (xmlDocPtr doc, const gchar *default_ns);
-static Node *sp_repr_svg_read_node (Document *xml_doc, xmlNodePtr node, const gchar *default_ns, GHashTable *prefix_map);
-static gint sp_repr_qualified_name (gchar *p, gint len, xmlNsPtr ns, const xmlChar *name, const gchar *default_ns, GHashTable *prefix_map);
+static Node *sp_repr_svg_read_node (Document *xml_doc, xmlNodePtr node, const gchar *default_ns, std::map<std::string, std::string> &prefix_map);
+static gint sp_repr_qualified_name (gchar *p, gint len, xmlNsPtr ns, const xmlChar *name, const gchar *default_ns, std::map<std::string, std::string> &prefix_map);
static void sp_repr_write_stream_root_element(Node *repr, Writer &out,
bool add_whitespace, gchar const *default_ns,
int inlineattrs, int indent,
@@ -486,8 +487,7 @@ Document *sp_repr_do_read (xmlDocPtr doc, const gchar *default_ns)
return NULL;
}
- GHashTable * prefix_map;
- prefix_map = g_hash_table_new (g_str_hash, g_str_equal);
+ std::map<std::string, std::string> prefix_map;
Document *rdoc = new Inkscape::XML::SimpleDocument();
@@ -536,21 +536,17 @@ Document *sp_repr_do_read (xmlDocPtr doc, const gchar *default_ns)
}
}
- g_hash_table_destroy (prefix_map);
-
return rdoc;
}
-gint sp_repr_qualified_name (gchar *p, gint len, xmlNsPtr ns, const xmlChar *name, const gchar */*default_ns*/, GHashTable *prefix_map)
+gint sp_repr_qualified_name (gchar *p, gint len, xmlNsPtr ns, const xmlChar *name, const gchar */*default_ns*/, std::map<std::string, std::string> &prefix_map)
{
const xmlChar *prefix;
if (ns){
if (ns->href ) {
prefix = reinterpret_cast<const xmlChar*>( sp_xml_ns_uri_prefix(reinterpret_cast<const gchar*>(ns->href),
reinterpret_cast<const char*>(ns->prefix)) );
- void* p0 = reinterpret_cast<gpointer>(const_cast<xmlChar *>(prefix));
- void* p1 = reinterpret_cast<gpointer>(const_cast<xmlChar *>(ns->href));
- g_hash_table_insert( prefix_map, p0, p1 );
+ prefix_map[reinterpret_cast<const char*>(prefix)] = reinterpret_cast<const char*>(ns->href);
}
else {
prefix = NULL;
@@ -567,7 +563,7 @@ gint sp_repr_qualified_name (gchar *p, gint len, xmlNsPtr ns, const xmlChar *nam
}
}
-static Node *sp_repr_svg_read_node (Document *xml_doc, xmlNodePtr node, const gchar *default_ns, GHashTable *prefix_map)
+static Node *sp_repr_svg_read_node (Document *xml_doc, xmlNodePtr node, const gchar *default_ns, std::map<std::string, std::string> &prefix_map)
{
xmlAttrPtr prop;
xmlNodePtr child;