summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authormc <>2015-02-18 01:02:37 +0000
committerMarc Jeanmougin <mc>2015-02-18 01:02:37 +0000
commit193b25a53c51a36fe9538e03203b0054c8cfc355 (patch)
treeb366fc322e28a2b8c2d2a46f9a3523b19fdb1a03 /src
parentAt first, I was thinking "I just have to go to the selection file, and change... (diff)
downloadinkscape-193b25a53c51a36fe9538e03203b0054c8cfc355.tar.gz
inkscape-193b25a53c51a36fe9538e03203b0054c8cfc355.zip
Just...
some... more... lines... (bzr r13922.1.2)
Diffstat (limited to 'src')
-rw-r--r--src/desktop.cpp2
-rw-r--r--src/desktop.h2
-rw-r--r--src/document.cpp32
-rw-r--r--src/document.h9
-rw-r--r--src/selection-chemistry.cpp13
-rw-r--r--src/splivarot.h3
-rw-r--r--src/trace/trace.cpp6
-rw-r--r--src/ui/dialog/font-substitution.cpp24
-rw-r--r--src/ui/dialog/font-substitution.h6
-rw-r--r--src/ui/dialog/grid-arrange-tab.cpp54
-rw-r--r--src/ui/dialog/icon-preview.cpp8
-rw-r--r--src/ui/dialog/objects.cpp8
-rw-r--r--src/ui/dialog/pixelartdialog.cpp8
-rw-r--r--src/ui/dialog/polar-arrange-tab.cpp14
-rw-r--r--src/ui/dialog/print.cpp2
-rw-r--r--src/ui/dialog/svg-fonts-dialog.cpp4
-rw-r--r--src/ui/dialog/swatches.cpp6
-rw-r--r--src/ui/dialog/tags.cpp11
-rw-r--r--src/ui/dialog/text-edit.cpp26
-rw-r--r--src/ui/dialog/transformation.cpp41
-rw-r--r--src/ui/tools/connector-tool.cpp8
-rw-r--r--src/ui/tools/eraser-tool.cpp31
-rw-r--r--src/ui/tools/gradient-tool.cpp43
-rw-r--r--src/ui/tools/gradient-tool.h3
-rw-r--r--src/ui/tools/lpe-tool.cpp8
-rw-r--r--src/ui/tools/measure-tool.cpp6
-rw-r--r--src/ui/tools/mesh-tool.cpp34
-rw-r--r--src/ui/tools/node-tool.cpp10
-rw-r--r--src/ui/tools/select-tool.cpp5
-rw-r--r--src/ui/tools/spray-tool.cpp32
-rw-r--r--src/ui/tools/text-tool.cpp7
-rw-r--r--src/ui/tools/tool-base.cpp6
-rw-r--r--src/ui/tools/tweak-tool.cpp25
-rw-r--r--src/ui/widget/object-composite-settings.cpp3
-rw-r--r--src/ui/widget/style-subject.cpp34
-rw-r--r--src/ui/widget/style-subject.h15
36 files changed, 270 insertions, 279 deletions
diff --git a/src/desktop.cpp b/src/desktop.cpp
index cdf8f276c..64353e582 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -716,7 +716,7 @@ Inkscape::UI::Widget::Dock* SPDesktop::getDock() {
/**
* \see SPDocument::getItemFromListAtPointBottom()
*/
-SPItem *SPDesktop::getItemFromListAtPointBottom(const GSList *list, Geom::Point const &p) const
+SPItem *SPDesktop::getItemFromListAtPointBottom(const SelContainer &list, Geom::Point const &p) const
{
g_return_val_if_fail (doc() != NULL, NULL);
return SPDocument::getItemFromListAtPointBottom(dkey, doc()->getRoot(), list, p);
diff --git a/src/desktop.h b/src/desktop.h
index a0b9592d0..8765fa699 100644
--- a/src/desktop.h
+++ b/src/desktop.h
@@ -319,7 +319,7 @@ public:
//void push_event_context (GType type, const gchar *config, unsigned int key);
void set_coordinate_status (Geom::Point p);
- SPItem *getItemFromListAtPointBottom(const GSList *list, Geom::Point const &p) const;
+ SPItem *getItemFromListAtPointBottom(const SelContainer &list, Geom::Point const &p) const;
SPItem *getItemAtPoint(Geom::Point const &p, bool into_groups, SPItem *upto = NULL) const;
SPItem *getGroupAtPoint(Geom::Point const &p) const;
Geom::Point point() const;
diff --git a/src/document.cpp b/src/document.cpp
index 11971e63d..5c49ff6c3 100644
--- a/src/document.cpp
+++ b/src/document.cpp
@@ -1235,7 +1235,7 @@ static bool overlaps(Geom::Rect const &area, Geom::Rect const &box)
return area.intersects(box);
}
-static GSList *find_items_in_area(GSList *s, SPGroup *group, unsigned int dkey, Geom::Rect const &area,
+static SelContainer &find_items_in_area(SelContainer &s, SPGroup *group, unsigned int dkey, Geom::Rect const &area,
bool (*test)(Geom::Rect const &, Geom::Rect const &), bool take_insensitive = false)
{
g_return_val_if_fail(SP_IS_GROUP(group), s);
@@ -1248,7 +1248,7 @@ static GSList *find_items_in_area(GSList *s, SPGroup *group, unsigned int dkey,
SPItem *child = SP_ITEM(o);
Geom::OptRect box = child->desktopVisualBounds();
if ( box && test(area, *box) && (take_insensitive || child->isVisibleAndUnlocked(dkey))) {
- s = g_slist_append(s, child);
+ s.push_back(child);
}
}
}
@@ -1275,7 +1275,7 @@ static bool item_is_in_group(SPItem *item, SPGroup *group)
return inGroup;
}
-SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *group, GSList const *list,Geom::Point const &p, bool take_insensitive)
+SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *group, SelContainer const &list,Geom::Point const &p, bool take_insensitive)
{
g_return_val_if_fail(group, NULL);
SPItem *bottomMost = 0;
@@ -1289,7 +1289,7 @@ SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *gro
Inkscape::DrawingItem *arenaitem = item->get_arenaitem(dkey);
if (arenaitem && arenaitem->pick(p, delta, 1) != NULL
&& (take_insensitive || item->isVisibleAndUnlocked(dkey))) {
- if (g_slist_find((GSList *) list, item) != NULL) {
+ if (find(list.begin(),list.end(),item)==list.end() ) {
bottomMost = item;
}
}
@@ -1391,11 +1391,11 @@ static SPItem *find_group_at_point(unsigned int dkey, SPGroup *group, Geom::Poin
* Assumes box is normalized (and g_asserts it!)
*
*/
-GSList *SPDocument::getItemsInBox(unsigned int dkey, Geom::Rect const &box) const
+SelContainer SPDocument::getItemsInBox(unsigned int dkey, Geom::Rect const &box) const
{
- g_return_val_if_fail(this->priv != NULL, NULL);
-
- return find_items_in_area(NULL, SP_GROUP(this->root), dkey, box, is_within);
+ SelContainer x;
+ g_return_val_if_fail(this->priv != NULL, x);
+ return find_items_in_area(x, SP_GROUP(this->root), dkey, box, is_within);
}
/*
@@ -1405,16 +1405,16 @@ GSList *SPDocument::getItemsInBox(unsigned int dkey, Geom::Rect const &box) cons
*
*/
-GSList *SPDocument::getItemsPartiallyInBox(unsigned int dkey, Geom::Rect const &box) const
+SelContainer SPDocument::getItemsPartiallyInBox(unsigned int dkey, Geom::Rect const &box) const
{
- g_return_val_if_fail(this->priv != NULL, NULL);
-
- return find_items_in_area(NULL, SP_GROUP(this->root), dkey, box, overlaps);
+ SelContainer x;
+ g_return_val_if_fail(this->priv != NULL, x);
+ return find_items_in_area(x, SP_GROUP(this->root), dkey, box, overlaps);
}
-GSList *SPDocument::getItemsAtPoints(unsigned const key, std::vector<Geom::Point> points) const
+SelContainer SPDocument::getItemsAtPoints(unsigned const key, std::vector<Geom::Point> points) const
{
- GSList *items = NULL;
+ SelContainer items;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
// When picking along the path, we don't want small objects close together
@@ -1426,8 +1426,8 @@ GSList *SPDocument::getItemsAtPoints(unsigned const key, std::vector<Geom::Point
for(unsigned int i = 0; i < points.size(); i++) {
SPItem *item = getItemAtPoint(key, points[i],
false, NULL);
- if (item && !g_slist_find(items, item))
- items = g_slist_prepend (items, item);
+ if (item && items.end()==find(items.begin(),items.end(), item))
+ items.push_front(item);
}
// and now we restore it back
diff --git a/src/document.h b/src/document.h
index 22c341eae..87262a079 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 "selection.h"
namespace Avoid {
class Router;
@@ -232,7 +233,7 @@ public:
/**
* Returns the bottommost item from the list which is at the point, or NULL if none.
*/
- static SPItem *getItemFromListAtPointBottom(unsigned int dkey, SPGroup *group, const GSList *list, Geom::Point const &p, bool take_insensitive = false);
+ static SPItem *getItemFromListAtPointBottom(unsigned int dkey, SPGroup *group, const SelContainer &list, Geom::Point const &p, bool take_insensitive = false);
static SPDocument *createDoc(Inkscape::XML::Document *rdoc, char const *uri,
char const *base, char const *name, unsigned int keepalive,
@@ -256,10 +257,10 @@ public:
bool addResource(char const *key, SPObject *object);
bool removeResource(char const *key, SPObject *object);
const GSList *getResourceList(char const *key) const;
- GSList *getItemsInBox(unsigned int dkey, Geom::Rect const &box) const;
- GSList *getItemsPartiallyInBox(unsigned int dkey, Geom::Rect const &box) const;
+ SelContainer getItemsInBox(unsigned int dkey, Geom::Rect const &box) const;
+ SelContainer 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;
- GSList *getItemsAtPoints(unsigned const key, std::vector<Geom::Point> points) const;
+ SelContainer getItemsAtPoints(unsigned const key, std::vector<Geom::Point> points) const;
SPItem *getGroupAtPoint(unsigned int key, Geom::Point const &p) const;
void changeUriAndHrefs(char const *uri);
diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp
index f20df1594..05711e734 100644
--- a/src/selection-chemistry.cpp
+++ b/src/selection-chemistry.cpp
@@ -442,10 +442,10 @@ static void add_ids_recursive(std::vector<const gchar *> &ids, SPObject *obj)
}
}
}
-
+/*
bool sp_repr_compare_position_obj(SPObject* &a,SPObject* &b){
return sp_repr_compare_position(dynamic_cast<Inkscape::XML::Node*>(a),dynamic_cast<Inkscape::XML::Node*>(b));
-}
+}*/
void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone)
{
@@ -2301,7 +2301,7 @@ sp_selection_move_screen(Inkscape::Selection *selection, gdouble dx, gdouble dy)
namespace {
template <typename D>
-SPItem *next_item(SPDesktop *desktop, SelContainer &path, SPObject *root,
+SPItem *next_item(SPDesktop *desktop, GSList *path, SPObject *root,
bool only_in_viewport, PrefsSelectionContext inlayer, bool onlyvisible, bool onlysensitive);
template <typename D>
@@ -2481,19 +2481,18 @@ void sp_selection_edit_clip_or_mask(SPDesktop * /*dt*/, bool /*clip*/)
namespace {
template <typename D>
-SPItem *next_item_from_list(SPDesktop *desktop, GSList const *items,
+SPItem *next_item_from_list(SPDesktop *desktop, SelContainer const items,
SPObject *root, bool only_in_viewport, PrefsSelectionContext inlayer, bool onlyvisible, bool onlysensitive)
{
SPObject *current=root;
- while (items) {
- SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(items->data));
+ for(SelContainer::const_iterator i = items.begin();i!=items.end();i++) {
+ SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(*i));
if ( root->isAncestorOf(item) &&
( !only_in_viewport || desktop->isWithinViewport(item) ) )
{
current = item;
break;
}
- items = items->next;
}
GSList *path=NULL;
diff --git a/src/splivarot.h b/src/splivarot.h
index ba314399f..79b9b98a6 100644
--- a/src/splivarot.h
+++ b/src/splivarot.h
@@ -10,6 +10,7 @@
#include <2geom/forward.h>
#include <2geom/path.h>
#include "livarot/Path.h"
+#include "sp-object.h"//kill it
class SPCurve;
class SPDesktop;
@@ -18,7 +19,7 @@ class SPItem;
namespace Inkscape {
class Selection;
}
-
+bool sp_repr_compare_position_obj(SPObject* &a,SPObject* &b);//kill it with fire
// boolean operations
// work on the current selection
// selection has 2 contain exactly 2 items
diff --git a/src/trace/trace.cpp b/src/trace/trace.cpp
index 892ecdb87..2becca5cc 100644
--- a/src/trace/trace.cpp
+++ b/src/trace/trace.cpp
@@ -74,13 +74,13 @@ SPImage *Tracer::getSelectedSPImage()
them as bottom-to-top so that we can discover the image and any
SPItems above it
*/
- for(SelContainer::const_iterator x=list.begin();x!=list.end();x++){
+ for (SelContainer::const_iterator i=list.begin() ; list.end()!=i ; i++)
{
- if (!SP_IS_ITEM(*x))
+ if (!SP_IS_ITEM(*i))
{
continue;
}
- SPItem *item = SP_ITEM(*x);
+ SPItem *item = SP_ITEM(*i);
items.insert(items.begin(), item);
}
std::vector<SPItem *>::iterator iter;
diff --git a/src/ui/dialog/font-substitution.cpp b/src/ui/dialog/font-substitution.cpp
index ae03bdf0e..625ed99b9 100644
--- a/src/ui/dialog/font-substitution.cpp
+++ b/src/ui/dialog/font-substitution.cpp
@@ -70,19 +70,15 @@ FontSubstitution::checkFontSubstitutions(SPDocument* doc)
int show_dlg = prefs->getInt("/options/font/substitutedlg", 0);
if (show_dlg) {
Glib::ustring out;
- GSList *l = getFontReplacedItems(doc, &out);
+ SelContainer l = getFontReplacedItems(doc, &out);
if (out.length() > 0) {
show(out, l);
}
- if (l) {
- g_slist_free(l);
- l = NULL;
- }
}
}
void
-FontSubstitution::show(Glib::ustring out, GSList *l)
+FontSubstitution::show(Glib::ustring out, SelContainer &l)
{
Gtk::MessageDialog warning(_("\nSome fonts are not available and have been substituted."),
false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK, true);
@@ -152,20 +148,18 @@ FontSubstitution::show(Glib::ustring out, GSList *l)
* b. Build up a list of the objects rendered fonts - taken for the objects layout/spans
* If there are fonts in a. that are not in b. then those fonts have been substituted.
*/
-GSList * FontSubstitution::getFontReplacedItems(SPDocument* doc, Glib::ustring *out)
+SelContainer FontSubstitution::getFontReplacedItems(SPDocument* doc, Glib::ustring *out)
{
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- GSList *allList = NULL;
- GSList *outList = NULL;
+ SelContainer allList;
+ SelContainer outList,x,y;
std::set<Glib::ustring> setErrors;
std::set<Glib::ustring> setFontSpans;
std::map<SPItem *, Glib::ustring> mapFontStyles;
- allList = get_all_items(NULL, doc->getRoot(), desktop, false, false, true, NULL);
-
- for (GSList *i = allList; i != NULL; i = i->next) {
-
- SPItem *item = SP_ITEM(i->data);
+ allList = get_all_items(x, doc->getRoot(), desktop, false, false, true, y);
+ for(SelContainer::const_iterator i = allList.begin();i!=allList.end();i++){
+ SPItem *item = SP_ITEM(*i);
SPStyle *style = item->style;
Glib::ustring family = "";
@@ -254,7 +248,7 @@ GSList * FontSubstitution::getFontReplacedItems(SPDocument* doc, Glib::ustring *
Glib::ustring err = Glib::ustring::compose(
_("Font '%1' substituted with '%2'"), fonts.c_str(), subName.c_str());
setErrors.insert(err);
- outList = g_slist_prepend (outList, item);
+ outList.push_front(item);
}
}
diff --git a/src/ui/dialog/font-substitution.h b/src/ui/dialog/font-substitution.h
index 1c445081b..eed7adcf2 100644
--- a/src/ui/dialog/font-substitution.h
+++ b/src/ui/dialog/font-substitution.h
@@ -13,7 +13,7 @@
#define INKSCAPE_UI_FONT_SUBSTITUTION_H
#include <glibmm/ustring.h>
-
+#include "selection.h"
class SPDocument;
namespace Inkscape {
@@ -25,13 +25,13 @@ public:
FontSubstitution();
virtual ~FontSubstitution();
void checkFontSubstitutions(SPDocument* doc);
- void show(Glib::ustring out, GSList *l);
+ void show(Glib::ustring out, SelContainer &l);
static FontSubstitution &getInstance() { return *new FontSubstitution(); }
Glib::ustring getSubstituteFontName (Glib::ustring font);
protected:
- GSList *getFontReplacedItems(SPDocument* doc, Glib::ustring *out);
+ SelContainer getFontReplacedItems(SPDocument* doc, Glib::ustring *out);
private:
FontSubstitution(FontSubstitution const &d);
diff --git a/src/ui/dialog/grid-arrange-tab.cpp b/src/ui/dialog/grid-arrange-tab.cpp
index d3ccb9bde..ba8616d9b 100644
--- a/src/ui/dialog/grid-arrange-tab.cpp
+++ b/src/ui/dialog/grid-arrange-tab.cpp
@@ -109,6 +109,13 @@ static int sp_compare_y_position(SPItem *first, SPItem *second)
return 0;
}
+static bool sp_compare_y_position_obj(SPObject *first, SPObject *second){
+ return sp_compare_y_position(static_cast<SPItem*>(first),static_cast<SPItem*>(second))<0;
+}
+static bool sp_compare_x_position_obj(SPObject *first, SPObject *second){
+ return sp_compare_x_position(static_cast<SPItem*>(first),static_cast<SPItem*>(second))<0;
+}
+
namespace Inkscape {
namespace UI {
@@ -168,10 +175,10 @@ void GridArrangeTab::arrange()
desktop->getDocument()->ensureUpToDate();
Inkscape::Selection *selection = desktop->getSelection();
- const GSList *items = selection ? selection->itemList() : 0;
+ const SelContainer items = selection ? selection->itemList() : SelContainer();
cnt=0;
- for (; items != NULL; items = items->next) {
- SPItem *item = SP_ITEM(items->data);
+ for(SelContainer::const_iterator i = items.begin();i!=items.end();i++){
+ SPItem *item = SP_ITEM(*i);
Geom::OptRect b = item->documentVisualBounds();
if (!b) {
continue;
@@ -198,20 +205,19 @@ void GridArrangeTab::arrange()
// require the sorting done before we can calculate row heights etc.
g_return_if_fail(selection);
- const GSList *items2 = selection->itemList();
- GSList *rev = g_slist_copy(const_cast<GSList *>(items2));
- GSList *sorted = NULL;
- rev = g_slist_sort(rev, (GCompareFunc) sp_compare_y_position);
- sorted = g_slist_sort(rev, (GCompareFunc) sp_compare_x_position);
+ SelContainer rev(selection->itemList());
+ rev.sort(sp_compare_y_position_obj);
+ SelContainer sorted(rev);
+ sorted.sort(sp_compare_x_position_obj);
// Calculate individual Row and Column sizes if necessary
cnt=0;
- const GSList *sizes = sorted;
- for (; sizes != NULL; sizes = sizes->next) {
- SPItem *item = SP_ITEM(sizes->data);
+ const SelContainer sizes(sorted);
+ for (SelContainer::const_iterator i = sizes.begin();i!=sizes.end();i++) {
+ SPItem *item = SP_ITEM(*i);
Geom::OptRect b = item->documentVisualBounds();
if (b) {
width = b->dimensions()[Geom::X];
@@ -308,12 +314,14 @@ g_print("\n row = %f col = %f selection x= %f selection y = %f", total_row_h
}
cnt=0;
- for (row_cnt=0; ((sorted != NULL) && (row_cnt<NoOfRows)); row_cnt++) {
+ SelContainer::iterator it = sorted.begin();
+ for (row_cnt=0; ((it != sorted.end()) && (row_cnt<NoOfRows)); row_cnt++) {
GSList *current_row = NULL;
- for (col_cnt = 0; ((sorted != NULL) && (col_cnt<NoOfCols)); col_cnt++) {
- current_row = g_slist_append (current_row, sorted->data);
- sorted = sorted->next;
+ col_cnt = 0;
+ for(;it!=sorted.end()&&col<NoOfCols;it++) {
+ current_row = g_slist_append (current_row, *it);
+ col_cnt++;
}
for (; current_row != NULL; current_row = current_row->next) {
@@ -374,8 +382,8 @@ void GridArrangeTab::on_row_spinbutton_changed()
Inkscape::Selection *selection = desktop ? desktop->selection : 0;
g_return_if_fail( selection );
- GSList const *items = selection->itemList();
- int selcount = g_slist_length((GSList *)items);
+ SelContainer const items = selection->itemList();
+ int selcount = items.size();
double PerCol = ceil(selcount / NoOfColsSpinner.get_value());
NoOfRowsSpinner.set_value(PerCol);
@@ -400,8 +408,7 @@ void GridArrangeTab::on_col_spinbutton_changed()
Inkscape::Selection *selection = desktop ? desktop->selection : 0;
g_return_if_fail(selection);
- GSList const *items = selection->itemList();
- int selcount = g_slist_length((GSList *)items);
+ int selcount = selection->itemList().size();
double PerRow = ceil(selcount / NoOfRowsSpinner.get_value());
NoOfColsSpinner.set_value(PerRow);
@@ -538,10 +545,10 @@ void GridArrangeTab::updateSelection()
updating = true;
SPDesktop *desktop = Parent->getDesktop();
Inkscape::Selection *selection = desktop ? desktop->selection : 0;
- GSList const *items = selection ? selection->itemList() : 0;
+ SelContainer const items = selection ? selection->itemList() : SelContainer();
- if (items) {
- int selcount = g_slist_length((GSList *)items);
+ if (!items.empty()) {
+ int selcount = items.size();
if (NoOfColsSpinner.get_value() > 1 && NoOfRowsSpinner.get_value() > 1){
// Update the number of rows assuming number of columns wanted remains same.
@@ -609,8 +616,7 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent)
g_return_if_fail( selection );
int selcount = 1;
if (!selection->isEmpty()) {
- GSList const *items = selection->itemList();
- selcount = g_slist_length((GSList *)items);
+ selcount = selection->itemList().size();
}
diff --git a/src/ui/dialog/icon-preview.cpp b/src/ui/dialog/icon-preview.cpp
index b908a90cb..79e5b556d 100644
--- a/src/ui/dialog/icon-preview.cpp
+++ b/src/ui/dialog/icon-preview.cpp
@@ -366,16 +366,14 @@ void IconPreviewPanel::refreshPreview()
if ( sel ) {
//g_message("found a selection to play with");
- GSList const *items = sel->itemList();
- while ( items && !target ) {
- SPItem* item = SP_ITEM( items->data );
+ SelContainer const items = sel->itemList();
+ for(SelContainer::const_iterator i=items.begin();!target && i!=items.end();i++){
+ SPItem* item = SP_ITEM( *i);
gchar const *id = item->getId();
if ( id ) {
targetId = id;
target = item;
}
-
- items = g_slist_next(items);
}
}
}
diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp
index c95529a56..0ae3027c7 100644
--- a/src/ui/dialog/objects.cpp
+++ b/src/ui/dialog/objects.cpp
@@ -479,15 +479,15 @@ void ObjectsPanel::_objectsSelected( Selection *sel ) {
_selectedConnection.block();
_tree.get_selection()->unselect_all();
SPItem *item = NULL;
- for (const GSList * iter = sel->itemList(); iter != NULL; iter = iter->next)
- {
- item = reinterpret_cast<SPItem *>(iter->data);
+ SelContainer const items = sel->itemList();
+ for(SelContainer::const_iterator i=items.begin(); i!=items.end();i++){
+ item = reinterpret_cast<SPItem *>(*i);
if (setOpacity)
{
_setCompositingValues(item);
setOpacity = false;
}
- _store->foreach(sigc::bind<SPItem *, bool>( sigc::mem_fun(*this, &ObjectsPanel::_checkForSelected), item, iter->next == NULL));
+ _store->foreach(sigc::bind<SPItem *, bool>( sigc::mem_fun(*this, &ObjectsPanel::_checkForSelected), item, (*i)==items.back()));
}
if (!item) {
if (_desktop->currentLayer() && SP_IS_ITEM(_desktop->currentLayer())) {
diff --git a/src/ui/dialog/pixelartdialog.cpp b/src/ui/dialog/pixelartdialog.cpp
index 5113f172a..273a378e5 100644
--- a/src/ui/dialog/pixelartdialog.cpp
+++ b/src/ui/dialog/pixelartdialog.cpp
@@ -372,12 +372,12 @@ void PixelArtDialogImpl::vectorize()
return;
}
- for ( GSList const *list = desktop->selection->itemList() ; list
- ; list = list->next ) {
- if ( !SP_IS_IMAGE(list->data) )
+ SelContainer const items = desktop->selection->itemList();
+ for(SelContainer::const_iterator i=items.begin(); i!=items.end();i++){
+ if ( !SP_IS_IMAGE(*i) )
continue;
- SPImage *img = SP_IMAGE(list->data);
+ SPImage *img = SP_IMAGE(*i);
Input input;
input.pixbuf = Glib::wrap(img->pixbuf->getPixbufRaw(), true);
input.x = img->x;
diff --git a/src/ui/dialog/polar-arrange-tab.cpp b/src/ui/dialog/polar-arrange-tab.cpp
index 281958998..8a382fc93 100644
--- a/src/ui/dialog/polar-arrange-tab.cpp
+++ b/src/ui/dialog/polar-arrange-tab.cpp
@@ -297,19 +297,18 @@ static void moveToPoint(int anchor, SPItem *item, Geom::Point p)
void PolarArrangeTab::arrange()
{
Inkscape::Selection *selection = parent->getDesktop()->getSelection();
- const GSList *items, *tmp;
- tmp = items = selection->itemList();
+ const SelContainer tmp(selection->itemList());
SPGenericEllipse *referenceEllipse = NULL; // Last ellipse in selection
bool arrangeOnEllipse = !arrangeOnParametersRadio.get_active();
bool arrangeOnFirstEllipse = arrangeOnEllipse && arrangeOnFirstCircleRadio.get_active();
int count = 0;
- while(tmp)
+ for(SelContainer::const_iterator i=tmp.begin();i!=tmp.end();i++)
{
if(arrangeOnEllipse)
{
- SPItem *item = SP_ITEM(tmp->data);
+ SPItem *item = SP_ITEM(*i);
if(arrangeOnFirstEllipse)
{
@@ -322,7 +321,6 @@ void PolarArrangeTab::arrange()
referenceEllipse = SP_GENERICELLIPSE(item);
}
}
- tmp = tmp->next;
++count;
}
@@ -374,11 +372,10 @@ void PolarArrangeTab::arrange()
Geom::Point realCenter = Geom::Point(cx, cy) * transformation;
- tmp = items;
int i = 0;
- while(tmp)
+ for(SelContainer::const_iterator it=tmp.begin();it!=tmp.end();it++)
{
- SPItem *item = SP_ITEM(tmp->data);
+ SPItem *item = SP_ITEM(*it);
// Ignore the reference ellipse if any
if(item != referenceEllipse)
@@ -396,7 +393,6 @@ void PolarArrangeTab::arrange()
++i;
}
- tmp = tmp->next;
}
DocumentUndo::done(parent->getDesktop()->getDocument(), SP_VERB_SELECTION_ARRANGE,
diff --git a/src/ui/dialog/print.cpp b/src/ui/dialog/print.cpp
index a015d28f9..dc98b6032 100644
--- a/src/ui/dialog/print.cpp
+++ b/src/ui/dialog/print.cpp
@@ -81,7 +81,7 @@ static void draw_page(
width, height,
(unsigned long)(Inkscape::Util::Quantity::convert(width, "px", "in") * dpi),
(unsigned long)(Inkscape::Util::Quantity::convert(height, "px", "in") * dpi),
- dpi, dpi, bgcolor, NULL, NULL, true, NULL);
+ dpi, dpi, bgcolor, NULL, NULL, true, SelContainer());
// This doesn't seem to work:
//context->set_cairo_context ( Cairo::Context::create (Cairo::ImageSurface::create_from_png (tmp_png) ), dpi, dpi );
diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp
index bc228633d..8f5601e3a 100644
--- a/src/ui/dialog/svg-fonts-dialog.cpp
+++ b/src/ui/dialog/svg-fonts-dialog.cpp
@@ -524,7 +524,7 @@ void SvgFontsDialog::set_glyph_description_from_selected_path(){
return;
}
- Inkscape::XML::Node* node = (Inkscape::XML::Node*) g_slist_nth_data((GSList *)sel->reprList(), 0);
+ Inkscape::XML::Node* node = (Inkscape::XML::Node*)(sel->reprList().front());
if (!node) return;//TODO: should this be an assert?
if (!node->matchAttributeName("d") || !node->attribute("d")){
char *msg = _("The selected object does not have a <b>path</b> description.");
@@ -566,7 +566,7 @@ void SvgFontsDialog::missing_glyph_description_from_selected_path(){
return;
}
- Inkscape::XML::Node* node = (Inkscape::XML::Node*) g_slist_nth_data((GSList *)sel->reprList(), 0);
+ Inkscape::XML::Node* node = (Inkscape::XML::Node*)(sel->reprList().front());
if (!node) return;//TODO: should this be an assert?
if (!node->matchAttributeName("d") || !node->attribute("d")){
char *msg = _("The selected object does not have a <b>path</b> description.");
diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp
index 8759039c3..da24ad605 100644
--- a/src/ui/dialog/swatches.cpp
+++ b/src/ui/dialog/swatches.cpp
@@ -123,10 +123,10 @@ static void editGradientImpl( SPDesktop* desktop, SPGradient* gr )
bool shown = false;
if ( desktop && desktop->doc() ) {
Inkscape::Selection *selection = desktop->getSelection();
- GSList const *items = selection->itemList();
- if (items) {
+ SelContainer const items = selection->itemList();
+ if (!items.empty()) {
SPStyle query( desktop->doc() );
- int result = objects_query_fillstroke(const_cast<GSList *>(items), &query, true);
+ int result = objects_query_fillstroke((items), &query, true);
if ( (result == QUERY_STYLE_MULTIPLE_SAME) || (result == QUERY_STYLE_SINGLE) ) {
// could be pertinent
if (query.fill.isPaintserver()) {
diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp
index 8a104d137..ba3a6b914 100644
--- a/src/ui/dialog/tags.cpp
+++ b/src/ui/dialog/tags.cpp
@@ -371,9 +371,10 @@ void TagsPanel::_objectsSelected( Selection *sel ) {
_selectedConnection.block();
_tree.get_selection()->unselect_all();
- for (const GSList * iter = sel->list(); iter != NULL; iter = iter->next)
+ SelContainer tmp=sel->list();
+ for(SelContainer::const_iterator i=tmp.begin();i!=tmp.end();i++)
{
- SPObject *obj = reinterpret_cast<SPObject *>(iter->data);
+ SPObject *obj = reinterpret_cast<SPObject *>(*i);
_store->foreach(sigc::bind<SPObject *>( sigc::mem_fun(*this, &TagsPanel::_checkForSelected), obj));
}
_selectedConnection.unblock();
@@ -668,9 +669,9 @@ bool TagsPanel::_handleButtonEvent(GdkEventButton* event)
if (col == _tree.get_column(COL_ADD - 1) && down_at_add) {
if (SP_IS_TAG(obj)) {
bool wasadded = false;
- for (const GSList * iter = _desktop->selection->itemList(); iter != NULL; iter = iter->next)
- {
- SPObject *newobj = reinterpret_cast<SPObject *>(iter->data);
+ SelContainer items=_desktop->selection->itemList();
+ for(SelContainer::const_iterator i=items.begin();i!=items.end();i++){
+ SPObject *newobj = reinterpret_cast<SPObject *>(*i);
bool addchild = true;
for ( SPObject *child = obj->children; child != NULL; child = child->next) {
if (SP_IS_TAG_USE(child) && SP_TAG_USE(child)->ref->getObject() == newobj) {
diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp
index a8be8b543..593261ec5 100644
--- a/src/ui/dialog/text-edit.cpp
+++ b/src/ui/dialog/text-edit.cpp
@@ -418,12 +418,11 @@ SPItem *TextEdit::getSelectedTextItem (void)
if (!SP_ACTIVE_DESKTOP)
return NULL;
- for (const GSList *item = SP_ACTIVE_DESKTOP->getSelection()->itemList();
- item != NULL;
- item = item->next)
+ SelContainer tmp=SP_ACTIVE_DESKTOP->getSelection()->itemList();
+ for(SelContainer::const_iterator i=tmp.begin();i!=tmp.end();i++)
{
- if (SP_IS_TEXT(item->data) || SP_IS_FLOWTEXT(item->data))
- return SP_ITEM (item->data);
+ if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i))
+ return SP_ITEM (*i);
}
return NULL;
@@ -437,11 +436,10 @@ unsigned TextEdit::getSelectedTextCount (void)
unsigned int items = 0;
- for (const GSList *item = SP_ACTIVE_DESKTOP->getSelection()->itemList();
- item != NULL;
- item = item->next)
+ SelContainer tmp=SP_ACTIVE_DESKTOP->getSelection()->itemList();
+ for(SelContainer::const_iterator i=tmp.begin();i!=tmp.end();i++)
{
- if (SP_IS_TEXT(item->data) || SP_IS_FLOWTEXT(item->data))
+ if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i))
++items;
}
@@ -542,20 +540,20 @@ void TextEdit::onApply()
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
unsigned items = 0;
- const GSList *item_list = desktop->getSelection()->itemList();
+ const SelContainer item_list = desktop->getSelection()->itemList();
SPCSSAttr *css = fillTextStyle ();
sp_desktop_set_style(desktop, css, true);
- for (; item_list != NULL; item_list = item_list->next) {
+ for(SelContainer::const_iterator i=item_list.begin();i!=item_list.end();i++){
// apply style to the reprs of all text objects in the selection
- if (SP_IS_TEXT (item_list->data)) {
+ if (SP_IS_TEXT (*i)) {
// backwards compatibility:
- reinterpret_cast<SPObject*>(item_list->data)->getRepr()->setAttribute("sodipodi:linespacing", sp_repr_css_property (css, "line-height", NULL));
+ reinterpret_cast<SPObject*>(*i)->getRepr()->setAttribute("sodipodi:linespacing", sp_repr_css_property (css, "line-height", NULL));
++items;
}
- else if (SP_IS_FLOWTEXT (item_list->data))
+ else if (SP_IS_FLOWTEXT (*i))
// no need to set sodipodi:linespacing, because Inkscape never supported it on flowtext
++items;
}
diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp
index 233d99750..8c52144e0 100644
--- a/src/ui/dialog/transformation.cpp
+++ b/src/ui/dialog/transformation.cpp
@@ -655,7 +655,7 @@ void Transformation::updatePageTransform(Inkscape::Selection *selection)
{
if (selection && !selection->isEmpty()) {
if (_check_replace_matrix.get_active()) {
- Geom::Affine current (SP_ITEM(selection->itemList()->data)->transform); // take from the first item in selection
+ Geom::Affine current (SP_ITEM(selection->itemList().front())->transform); // take from the first item in selection
Geom::Affine new_displayed = current;
@@ -741,19 +741,19 @@ void Transformation::applyPageMove(Inkscape::Selection *selection)
if (_check_move_relative.get_active()) {
// shift each object relatively to the previous one
using Inkscape::Util::GSListConstIterator;
- std::list<SPItem *> selected;
- selected.insert<GSListConstIterator<SPItem *> >(selected.end(), selection->itemList(), NULL);
+ SelContainer selected(selection->itemList());
if (selected.empty()) return;
if (fabs(x) > 1e-6) {
std::vector< BBoxSort > sorted;
- for (std::list<SPItem *>::iterator it(selected.begin());
+ for (SelContainer::iterator it(selected.begin());
it != selected.end();
++it)
{
- Geom::OptRect bbox = (*it)->desktopPreferredBounds();
+ SPItem* item=static_cast<SPItem*>(*it);
+ Geom::OptRect bbox = (item)->desktopPreferredBounds();
if (bbox) {
- sorted.push_back(BBoxSort(*it, *bbox, Geom::X, x > 0? 1. : 0., x > 0? 0. : 1.));
+ sorted.push_back(BBoxSort(item, *bbox, Geom::X, x > 0? 1. : 0., x > 0? 0. : 1.));
}
}
//sort bbox by anchors
@@ -771,13 +771,14 @@ void Transformation::applyPageMove(Inkscape::Selection *selection)
}
if (fabs(y) > 1e-6) {
std::vector< BBoxSort > sorted;
- for (std::list<SPItem *>::iterator it(selected.begin());
+ for (SelContainer::iterator it(selected.begin());
it != selected.end();
++it)
{
- Geom::OptRect bbox = (*it)->desktopPreferredBounds();
+ SPItem* item=static_cast<SPItem*>(*it);
+ Geom::OptRect bbox = (item)->desktopPreferredBounds();
if (bbox) {
- sorted.push_back(BBoxSort(*it, *bbox, Geom::Y, y > 0? 1. : 0., y > 0? 0. : 1.));
+ sorted.push_back(BBoxSort(item, *bbox, Geom::Y, y > 0? 1. : 0., y > 0? 0. : 1.));
}
}
//sort bbox by anchors
@@ -815,8 +816,9 @@ void Transformation::applyPageScale(Inkscape::Selection *selection)
bool transform_stroke = prefs->getBool("/options/transform/stroke", true);
bool preserve = prefs->getBool("/options/preservetransform/value", false);
if (prefs->getBool("/dialogs/transformation/applyseparately")) {
- for (GSList const *l = selection->itemList(); l != NULL; l = l->next) {
- SPItem *item = SP_ITEM(l->data);
+ SelContainer tmp=selection->itemList();
+ for(SelContainer::const_iterator i=tmp.begin();i!=tmp.end();i++){
+ SPItem *item = SP_ITEM(*i);
Geom::OptRect bbox_pref = item->desktopPreferredBounds();
Geom::OptRect bbox_geom = item->desktopGeometricBounds();
if (bbox_pref && bbox_geom) {
@@ -878,8 +880,9 @@ void Transformation::applyPageRotate(Inkscape::Selection *selection)
}
if (prefs->getBool("/dialogs/transformation/applyseparately")) {
- for (GSList const *l = selection->itemList(); l != NULL; l = l->next) {
- SPItem *item = SP_ITEM(l->data);
+ SelContainer tmp=selection->itemList();
+ for(SelContainer::const_iterator i=tmp.begin();i!=tmp.end();i++){
+ SPItem *item = SP_ITEM(*i);
sp_item_rotate_rel(item, Geom::Rotate (angle*M_PI/180.0));
}
} else {
@@ -897,8 +900,9 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (prefs->getBool("/dialogs/transformation/applyseparately")) {
- for (GSList const *l = selection->itemList(); l != NULL; l = l->next) {
- SPItem *item = SP_ITEM(l->data);
+ SelContainer items=selection->itemList();
+ for(SelContainer::const_iterator i = items.begin();i!=items.end();i++){
+ SPItem *item = SP_ITEM(*i);
if (!_units_skew.isAbsolute()) { // percentage
double skewX = _scalar_skew_horizontal.getValue("%");
@@ -998,8 +1002,9 @@ void Transformation::applyPageTransform(Inkscape::Selection *selection)
}
if (_check_replace_matrix.get_active()) {
- for (GSList const *l = selection->itemList(); l != NULL; l = l->next) {
- SPItem *item = SP_ITEM(l->data);
+ SelContainer tmp=selection->itemList();
+ for(SelContainer::const_iterator i=tmp.begin();i!=tmp.end();i++){
+ SPItem *item = SP_ITEM(*i);
item->set_item_transform(displayed);
SP_OBJECT(item)->updateRepr();
}
@@ -1150,7 +1155,7 @@ void Transformation::onReplaceMatrixToggled()
double f = _scalar_transform_f.getValue();
Geom::Affine displayed (a, b, c, d, e, f);
- Geom::Affine current = SP_ITEM(selection->itemList()->data)->transform; // take from the first item in selection
+ Geom::Affine current = SP_ITEM(selection->itemList().front())->transform; // take from the first item in selection
Geom::Affine new_displayed;
if (_check_replace_matrix.get_active()) {
diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp
index 26a4eadd5..fc40c20e7 100644
--- a/src/ui/tools/connector-tool.cpp
+++ b/src/ui/tools/connector-tool.cpp
@@ -1313,12 +1313,12 @@ void cc_selection_set_avoid(bool const set_avoid)
Inkscape::Selection *selection = desktop->getSelection();
- GSList *l = const_cast<GSList *>(selection->itemList());
int changes = 0;
- while (l) {
- SPItem *item = SP_ITEM(l->data);
+ SelContainer l = selection->itemList();
+ for(SelContainer::const_iterator i=l.begin();i!=l.end();i++) {
+ SPItem *item = SP_ITEM(*i);
char const *value = (set_avoid) ? "true" : NULL;
@@ -1327,8 +1327,6 @@ void cc_selection_set_avoid(bool const set_avoid)
item->avoidRef->handleSettingChange();
changes++;
}
-
- l = l->next;
}
if (changes == 0) {
diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp
index 1b4dcfe25..3526e015a 100644
--- a/src/ui/tools/eraser-tool.cpp
+++ b/src/ui/tools/eraser-tool.cpp
@@ -676,7 +676,7 @@ void EraserTool::set_to_accumulated() {
Geom::OptRect eraserBbox = acid->visualBounds();
Geom::Rect bounds = (*eraserBbox) * desktop->doc2dt();
std::vector<SPItem*> remainingItems;
- GSList* toWorkOn = 0;
+ SelContainer toWorkOn;
if (selection->isEmpty()) {
if ( eraserMode ) {
@@ -686,16 +686,16 @@ void EraserTool::set_to_accumulated() {
toWorkOn = desktop->getDocument()->getItemsAtPoints(desktop->dkey, r->getPoints());
}
- toWorkOn = g_slist_remove( toWorkOn, acid );
+ toWorkOn.remove(static_cast<SPObject*>(acid) );
} else {
- toWorkOn = g_slist_copy(const_cast<GSList*>(selection->itemList()));
+ toWorkOn = selection->itemList();
wasSelection = true;
}
- if ( g_slist_length(toWorkOn) > 0 ) {
+ if ( !toWorkOn.empty() ) {
if ( eraserMode ) {
- for (GSList *i = toWorkOn ; i ; i = i->next ) {
- SPItem *item = SP_ITEM(i->data);
+ for (SelContainer::const_iterator i = toWorkOn.begin();i!=toWorkOn.end();i++) {
+ SPItem *item = SP_ITEM(*i);
if ( eraserMode ) {
Geom::OptRect bbox = item->visualBounds();
@@ -712,13 +712,10 @@ void EraserTool::set_to_accumulated() {
if ( !selection->isEmpty() ) {
// If the item was not completely erased, track the new remainder.
- GSList *nowSel = g_slist_copy(const_cast<GSList *>(selection->itemList()));
-
- for (GSList const *i2 = nowSel ; i2 ; i2 = i2->next ) {
- remainingItems.push_back(SP_ITEM(i2->data));
+ SelContainer nowSel(selection->itemList());
+ for (SelContainer::const_iterator i2 = nowSel.begin();i!=nowSel.end();i++) {
+ remainingItems.push_back(SP_ITEM(*i2));
}
-
- g_slist_free(nowSel);
}
} else {
remainingItems.push_back(item);
@@ -726,20 +723,18 @@ void EraserTool::set_to_accumulated() {
}
}
} else {
- for (GSList *i = toWorkOn ; i ; i = i->next ) {
- sp_object_ref( SP_ITEM(i->data), 0 );
+ for (SelContainer::const_iterator i = toWorkOn.begin();i!=toWorkOn.end();i++) {
+ sp_object_ref( SP_ITEM(*i), 0 );
}
- for (GSList *i = toWorkOn ; i ; i = i->next ) {
- SPItem *item = SP_ITEM(i->data);
+ for (SelContainer::const_iterator i = toWorkOn.begin();i!=toWorkOn.end();i++) {
+ SPItem *item = SP_ITEM(*i);
item->deleteObject(true);
sp_object_unref(item);
workDone = true;
}
}
- g_slist_free(toWorkOn);
-
if ( !eraserMode ) {
//sp_selection_delete(desktop);
remainingItems.clear();
diff --git a/src/ui/tools/gradient-tool.cpp b/src/ui/tools/gradient-tool.cpp
index 5da30da7b..d1db5fb93 100644
--- a/src/ui/tools/gradient-tool.cpp
+++ b/src/ui/tools/gradient-tool.cpp
@@ -116,7 +116,7 @@ void GradientTool::selection_changed(Inkscape::Selection*) {
if (selection == NULL) {
return;
}
- guint n_obj = g_slist_length((GSList *) selection->itemList());
+ guint n_obj = selection->itemList().size();
if (!drag->isNonEmpty() || selection->isEmpty())
return;
@@ -502,10 +502,11 @@ bool GradientTool::root_handler(GdkEvent* event) {
if (over_line) {
// we take the first item in selection, because with doubleclick, the first click
// always resets selection to the single object under cursor
- sp_gradient_context_add_stop_near_point(this, SP_ITEM(selection->itemList()->data), this->mousepoint_doc, event->button.time);
+ sp_gradient_context_add_stop_near_point(this, SP_ITEM(selection->itemList().front()), this->mousepoint_doc, event->button.time);
} else {
- for (GSList const* i = selection->itemList(); i != NULL; i = i->next) {
- SPItem *item = SP_ITEM(i->data);
+ SelContainer items=selection->itemList();
+ for (SelContainer::const_iterator i = items.begin();i!=items.end();i++) {
+ SPItem *item = SP_ITEM(*i);
SPGradientType new_type = (SPGradientType) prefs->getInt("/tools/gradient/newgradient", SP_GRADIENT_TYPE_LINEAR);
Inkscape::PaintTarget fsmode = (prefs->getInt("/tools/gradient/newfillorstroke", 1) != 0) ? Inkscape::FOR_FILL : Inkscape::FOR_STROKE;
@@ -889,6 +890,12 @@ bool GradientTool::root_handler(GdkEvent* event) {
return ret;
}
+int sp_item_repr_compare_position_obj(SPObject const *first, SPObject const *second)
+{
+ return sp_repr_compare_position(((SPItem*)first)->getRepr(),
+ ((SPItem*)second)->getRepr())<0;
+}
+
static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*state*/, guint32 etime)
{
SPDesktop *desktop = SP_EVENT_CONTEXT(&rc)->desktop;
@@ -908,32 +915,32 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta
} else {
// Starting from empty space:
// Sort items so that the topmost comes last
- GSList *items = g_slist_copy ((GSList *) selection->itemList());
- items = g_slist_sort(items, (GCompareFunc) sp_item_repr_compare_position);
+ SelContainer items(selection->itemList());
+ items.sort(sp_item_repr_compare_position_obj);
// take topmost
- vector = sp_gradient_vector_for_object(document, desktop, SP_ITEM(g_slist_last(items)->data), fill_or_stroke);
- g_slist_free (items);
+ vector = sp_gradient_vector_for_object(document, desktop, SP_ITEM(items.back()), fill_or_stroke);
}
// HACK: reset fill-opacity - that 0.75 is annoying; BUT remove this when we have an opacity slider for all tabs
SPCSSAttr *css = sp_repr_css_attr_new();
sp_repr_css_set_property(css, "fill-opacity", "1.0");
- for (GSList const *i = selection->itemList(); i != NULL; i = i->next) {
+ SelContainer itemlist = selection->itemList();
+ for (SelContainer::const_iterator i = itemlist.begin();i!=itemlist.end();i++) {
//FIXME: see above
- sp_repr_css_change_recursive(SP_OBJECT(i->data)->getRepr(), css, "style");
+ sp_repr_css_change_recursive(SP_OBJECT(*i)->getRepr(), css, "style");
- sp_item_set_gradient(SP_ITEM(i->data), vector, (SPGradientType) type, fill_or_stroke);
+ sp_item_set_gradient(SP_ITEM(*i), vector, (SPGradientType) type, fill_or_stroke);
if (type == SP_GRADIENT_TYPE_LINEAR) {
- sp_item_gradient_set_coords (SP_ITEM(i->data), POINT_LG_BEGIN, 0, rc.origin, fill_or_stroke, true, false);
- sp_item_gradient_set_coords (SP_ITEM(i->data), POINT_LG_END, 0, pt, fill_or_stroke, true, false);
+ sp_item_gradient_set_coords (SP_ITEM(*i), POINT_LG_BEGIN, 0, rc.origin, fill_or_stroke, true, false);
+ sp_item_gradient_set_coords (SP_ITEM(*i), POINT_LG_END, 0, pt, fill_or_stroke, true, false);
} else if (type == SP_GRADIENT_TYPE_RADIAL) {
- sp_item_gradient_set_coords (SP_ITEM(i->data), POINT_RG_CENTER, 0, rc.origin, fill_or_stroke, true, false);
- sp_item_gradient_set_coords (SP_ITEM(i->data), POINT_RG_R1, 0, pt, fill_or_stroke, true, false);
+ sp_item_gradient_set_coords (SP_ITEM(*i), POINT_RG_CENTER, 0, rc.origin, fill_or_stroke, true, false);
+ sp_item_gradient_set_coords (SP_ITEM(*i), POINT_RG_R1, 0, pt, fill_or_stroke, true, false);
}
- SP_OBJECT(i->data)->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ SP_OBJECT(*i)->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
if (ec->_grdrag) {
ec->_grdrag->updateDraggers();
@@ -942,7 +949,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta
ec->_grdrag->local_change = true;
// give the grab out-of-bounds values of xp/yp because we're already dragging
// and therefore are already out of tolerance
- ec->_grdrag->grabKnot (SP_ITEM(selection->itemList()->data),
+ ec->_grdrag->grabKnot (SP_ITEM(selection->itemList().front()),
type == SP_GRADIENT_TYPE_LINEAR? POINT_LG_END : POINT_RG_R1,
-1, // ignore number (though it is always 1)
fill_or_stroke, 99999, 99999, etime);
@@ -951,7 +958,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta
// status text; we do not track coords because this branch is run once, not all the time
// during drag
- int n_objects = g_slist_length((GSList *) selection->itemList());
+ int n_objects = selection->itemList().size();
rc.message_context->setF(Inkscape::NORMAL_MESSAGE,
ngettext("<b>Gradient</b> for %d object; with <b>Ctrl</b> to snap angle",
"<b>Gradient</b> for %d objects; with <b>Ctrl</b> to snap angle", n_objects),
diff --git a/src/ui/tools/gradient-tool.h b/src/ui/tools/gradient-tool.h
index 6fe3bca9f..786aed372 100644
--- a/src/ui/tools/gradient-tool.h
+++ b/src/ui/tools/gradient-tool.h
@@ -18,6 +18,7 @@
#include <stddef.h>
#include <sigc++/sigc++.h>
#include "ui/tools/tool-base.h"
+class SPObject;//kill it
#define SP_GRADIENT_CONTEXT(obj) (dynamic_cast<Inkscape::UI::Tools::GradientTool*>((Inkscape::UI::Tools::ToolBase*)obj))
#define SP_IS_GRADIENT_CONTEXT(obj) (dynamic_cast<const Inkscape::UI::Tools::GradientTool*>((const Inkscape::UI::Tools::ToolBase*)obj) != NULL)
@@ -25,12 +26,12 @@
namespace Inkscape {
namespace UI {
namespace Tools {
+int sp_item_repr_compare_position_obj(SPObject const *first, SPObject const *second);//kill it
class GradientTool : public ToolBase {
public:
GradientTool();
virtual ~GradientTool();
-
Geom::Point origin;
bool cursor_addnode;
diff --git a/src/ui/tools/lpe-tool.cpp b/src/ui/tools/lpe-tool.cpp
index c9b656397..ce0ad7a9a 100644
--- a/src/ui/tools/lpe-tool.cpp
+++ b/src/ui/tools/lpe-tool.cpp
@@ -407,10 +407,10 @@ lpetool_create_measuring_items(LpeTool *lc, Inkscape::Selection *selection)
SPCanvasGroup *tmpgrp = lc->desktop->getTempGroup();
gchar *arc_length;
double lengthval;
-
- for (GSList const *i = selection->itemList(); i != NULL; i = i->next) {
- if (SP_IS_PATH(i->data)) {
- path = SP_PATH(i->data);
+ SelContainer items=selection->itemList();
+ for(SelContainer::const_iterator i=items.begin();i!=items.end();i++){
+ if (SP_IS_PATH(*i)) {
+ path = SP_PATH(*i);
curve = path->getCurve();
Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2 = paths_to_pw(curve->get_pathvector());
canvas_text = (SPCanvasText *) sp_canvastext_new(tmpgrp, lc->desktop, Geom::Point(0,0), "");
diff --git a/src/ui/tools/measure-tool.cpp b/src/ui/tools/measure-tool.cpp
index b7e54b9c8..8d52210ff 100644
--- a/src/ui/tools/measure-tool.cpp
+++ b/src/ui/tools/measure-tool.cpp
@@ -441,10 +441,10 @@ bool MeasureTool::root_handler(GdkEvent* event) {
// TODO switch to a different variable name. The single letter 'l' is easy to misread.
//select elements crossed by line segment:
- GSList *items = desktop->getDocument()->getItemsAtPoints(desktop->dkey, points);
+ SelContainer items = desktop->getDocument()->getItemsAtPoints(desktop->dkey, points);
std::vector<double> intersection_times;
- for (GSList *l = items; l != NULL; l = l->next) {
- SPItem *item = static_cast<SPItem*>(l->data);
+ for (SelContainer::const_iterator i=items.begin();i!=items.end();i++) {
+ SPItem *item = static_cast<SPItem*>(*i);
if (SP_IS_SHAPE(item)) {
calculate_intersections(desktop, item, lineseg, SP_SHAPE(item)->getCurve(), intersection_times);
diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp
index d333b932e..1cc06a5b9 100644
--- a/src/ui/tools/mesh-tool.cpp
+++ b/src/ui/tools/mesh-tool.cpp
@@ -48,6 +48,7 @@
// Mesh specific
#include "ui/tools/mesh-tool.h"
+#include "ui/tools/gradient-tool.h"//not needed
#include "sp-mesh-gradient.h"
#include "display/sp-ctrlcurve.h"
@@ -113,7 +114,7 @@ void MeshTool::selection_changed(Inkscape::Selection* /*sel*/) {
return;
}
- guint n_obj = g_slist_length((GSList *) selection->itemList());
+ guint n_obj = selection->itemList().size();
if (!drag->isNonEmpty() || selection->isEmpty()) {
return;
@@ -477,11 +478,12 @@ bool MeshTool::root_handler(GdkEvent* event) {
if (over_line) {
// We take the first item in selection, because with doubleclick, the first click
// always resets selection to the single object under cursor
- sp_mesh_context_split_near_point(this, SP_ITEM(selection->itemList()->data), this->mousepoint_doc, event->button.time);
+ sp_mesh_context_split_near_point(this, SP_ITEM(selection->itemList().front()), this->mousepoint_doc, event->button.time);
} else {
// Create a new gradient with default coordinates.
- for (GSList const* i = selection->itemList(); i != NULL; i = i->next) {
- SPItem *item = SP_ITEM(i->data);
+ SelContainer items=selection->itemList();
+ for(SelContainer::const_iterator i=items.begin();i!=items.end();i++){
+ SPItem *item = SP_ITEM(*i);
SPGradientType new_type = SP_GRADIENT_TYPE_MESH;
Inkscape::PaintTarget fsmode = (prefs->getInt("/tools/gradient/newfillorstroke", 1) != 0) ? Inkscape::FOR_FILL : Inkscape::FOR_STROKE;
@@ -930,6 +932,12 @@ bool MeshTool::root_handler(GdkEvent* event) {
return ret;
}
+/*
+int sp_item_repr_compare_position_obj(SPObject const *first, SPObject const *second)
+{
+ return sp_repr_compare_position(((SPItem*)first)->getRepr(),
+ ((SPItem*)second)->getRepr())<0;
+}*/
static void sp_mesh_drag(MeshTool &rc, Geom::Point const /*pt*/, guint /*state*/, guint32 /*etime*/) {
SPDesktop *desktop = SP_EVENT_CONTEXT(&rc)->desktop;
@@ -950,27 +958,27 @@ static void sp_mesh_drag(MeshTool &rc, Geom::Point const /*pt*/, guint /*state*/
} else {
// Starting from empty space:
// Sort items so that the topmost comes last
- GSList *items = g_slist_copy ((GSList *) selection->itemList());
- items = g_slist_sort(items, (GCompareFunc) sp_item_repr_compare_position);
+ SelContainer items(selection->itemList());
+ items.sort(sp_item_repr_compare_position_obj);
// take topmost
- vector = sp_gradient_vector_for_object(document, desktop, SP_ITEM(g_slist_last(items)->data), fill_or_stroke);
- g_slist_free (items);
+ vector = sp_gradient_vector_for_object(document, desktop, SP_ITEM(items.back()), fill_or_stroke);
}
// HACK: reset fill-opacity - that 0.75 is annoying; BUT remove this when we have an opacity slider for all tabs
SPCSSAttr *css = sp_repr_css_attr_new();
sp_repr_css_set_property(css, "fill-opacity", "1.0");
- for (GSList const *i = selection->itemList(); i != NULL; i = i->next) {
+ SelContainer items=selection->itemList();
+ for(SelContainer::const_iterator i=items.begin();i!=items.end();i++){
//FIXME: see above
- sp_repr_css_change_recursive(SP_OBJECT(i->data)->getRepr(), css, "style");
+ sp_repr_css_change_recursive(SP_OBJECT(*i)->getRepr(), css, "style");
- sp_item_set_gradient(SP_ITEM(i->data), vector, (SPGradientType) type, fill_or_stroke);
+ sp_item_set_gradient(SP_ITEM(*i), vector, (SPGradientType) type, fill_or_stroke);
// We don't need to do anything. Mesh is already sized appropriately.
- SP_OBJECT(i->data)->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ SP_OBJECT(*i)->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
// if (ec->_grdrag) {
// ec->_grdrag->updateDraggers();
@@ -988,7 +996,7 @@ static void sp_mesh_drag(MeshTool &rc, Geom::Point const /*pt*/, guint /*state*/
// status text; we do not track coords because this branch is run once, not all the time
// during drag
- int n_objects = g_slist_length((GSList *) selection->itemList());
+ int n_objects = selection->itemList().size();
rc.message_context->setF(Inkscape::NORMAL_MESSAGE,
ngettext("<b>Gradient</b> for %d object; with <b>Ctrl</b> to snap angle",
"<b>Gradient</b> for %d objects; with <b>Ctrl</b> to snap angle", n_objects),
diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp
index caec901a6..46c978c84 100644
--- a/src/ui/tools/node-tool.cpp
+++ b/src/ui/tools/node-tool.cpp
@@ -420,10 +420,9 @@ void NodeTool::selection_changed(Inkscape::Selection *sel) {
std::set<ShapeRecord> shapes;
- GSList const *ilist = sel->itemList();
-
- for (GSList *i = const_cast<GSList*>(ilist); i; i = i->next) {
- SPObject *obj = static_cast<SPObject*>(i->data);
+ SelContainer items=sel->itemList();
+ for(SelContainer::const_iterator i=items.begin();i!=items.end();i++){
+ SPObject *obj = static_cast<SPObject*>(*i);
if (SP_IS_ITEM(obj)) {
gather_items(this, NULL, static_cast<SPItem*>(obj), SHAPE_ROLE_NORMAL, shapes);
@@ -668,9 +667,8 @@ void NodeTool::select_area(Geom::Rect const &sel, GdkEventButton *event) {
if (this->_multipath->empty()) {
// if multipath is empty, select rubberbanded items rather than nodes
Inkscape::Selection *selection = this->desktop->selection;
- GSList *items = this->desktop->getDocument()->getItemsInBox(this->desktop->dkey, sel);
+ SelContainer items = this->desktop->getDocument()->getItemsInBox(this->desktop->dkey, sel);
selection->setList(items);
- g_slist_free(items);
} else {
if (!held_shift(*event)) {
this->_selected_nodes->clear();
diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp
index 939b1a0b3..f84170631 100644
--- a/src/ui/tools/select-tool.cpp
+++ b/src/ui/tools/select-tool.cpp
@@ -481,7 +481,7 @@ bool SelectTool::root_handler(GdkEvent* event) {
case GDK_2BUTTON_PRESS:
if (event->button.button == 1) {
if (!selection->isEmpty()) {
- SPItem *clicked_item = static_cast<SPItem *>(selection->itemList()->data);
+ SPItem *clicked_item = static_cast<SPItem *>(selection->itemList().front());
if (dynamic_cast<SPGroup *>(clicked_item) && !dynamic_cast<SPBox3D *>(clicked_item)) { // enter group if it's not a 3D box
desktop->setCurrentLayer(clicked_item);
@@ -718,7 +718,7 @@ bool SelectTool::root_handler(GdkEvent* event) {
if (r->is_started() && !within_tolerance) {
// this was a rubberband drag
- GSList *items = NULL;
+ SelContainer items;
if (r->getMode() == RUBBERBAND_MODE_RECT) {
Geom::OptRect const b = r->getRectangle();
@@ -739,7 +739,6 @@ bool SelectTool::root_handler(GdkEvent* event) {
selection->setList (items);
}
- g_slist_free (items);
} else { // it was just a click, or a too small rubberband
r->stop();
diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp
index a01c5c55b..d339f6d19 100644
--- a/src/ui/tools/spray-tool.cpp
+++ b/src/ui/tools/spray-tool.cpp
@@ -188,7 +188,7 @@ void SprayTool::update_cursor(bool /*with_shift*/) {
gchar *sel_message = NULL;
if (!desktop->selection->isEmpty()) {
- num = g_slist_length(const_cast<GSList *>(desktop->selection->itemList()));
+ num = desktop->selection->itemList().size();
sel_message = g_strdup_printf(ngettext("<b>%i</b> object selected","<b>%i</b> objects selected",num), num);
} else {
sel_message = g_strdup_printf("%s", _("<b>Nothing</b> selected"));
@@ -436,11 +436,9 @@ static bool sp_spray_recursive(SPDesktop *desktop,
SPItem *unionResult = NULL; // Previous union
int i=1;
- for (GSList *items = g_slist_copy(const_cast<GSList *>(selection->itemList()));
- items != NULL;
- items = items->next) {
-
- SPItem *item1 = dynamic_cast<SPItem *>(static_cast<SPObject *>(items->data));
+ SelContainer items=selection->itemList();
+ for(SelContainer::const_iterator it=items.begin();it!=items.end();it++){
+ SPItem *item1 = dynamic_cast<SPItem *>(static_cast<SPObject *>(*it));
if (i == 1) {
parent_item = item1;
}
@@ -552,20 +550,16 @@ static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point
double move_standard_deviation = get_move_standard_deviation(tc);
{
- GSList *const original_selection = g_slist_copy(const_cast<GSList *>(selection->itemList()));
+ SelContainer const items(selection->itemList());
- for (GSList *items = original_selection;
- items != NULL;
- items = items->next) {
- SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(items->data));
+ for(SelContainer::const_iterator i=items.begin();i!=items.end();i++){
+ SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(*i));
g_assert(item != NULL);
sp_object_ref(item);
}
- for (GSList *items = original_selection;
- items != NULL;
- items = items->next) {
- SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(items->data));
+ for(SelContainer::const_iterator i=items.begin();i!=items.end();i++){
+ SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(*i));
g_assert(item != NULL);
if (is_transform_modes(tc->mode)) {
@@ -579,10 +573,8 @@ static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point
}
}
- for (GSList *items = original_selection;
- items != NULL;
- items = items->next) {
- SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(items->data));
+ for(SelContainer::const_iterator i=items.begin();i!=items.end();i++){
+ SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(*i));
g_assert(item != NULL);
sp_object_unref(item);
}
@@ -658,7 +650,7 @@ bool SprayTool::root_handler(GdkEvent* event) {
guint num = 0;
if (!desktop->selection->isEmpty()) {
- num = g_slist_length(const_cast<GSList *>(desktop->selection->itemList()));
+ num = desktop->selection->itemList().size();
}
if (num == 0) {
this->message_context->flash(Inkscape::ERROR_MESSAGE, _("<b>Nothing selected!</b> Select objects to spray."));
diff --git a/src/ui/tools/text-tool.cpp b/src/ui/tools/text-tool.cpp
index df0583d67..a4370256d 100644
--- a/src/ui/tools/text-tool.cpp
+++ b/src/ui/tools/text-tool.cpp
@@ -1470,7 +1470,7 @@ int TextTool::_styleQueried(SPStyle *style, int property)
}
sp_text_context_validate_cursor_iterators(this);
- GSList *styles_list = NULL;
+ SelContainer styles_list;
Inkscape::Text::Layout::iterator begin_it, end_it;
if (this->text_sel_start < this->text_sel_end) {
@@ -1486,7 +1486,7 @@ int TextTool::_styleQueried(SPStyle *style, int property)
}
}
for (Inkscape::Text::Layout::iterator it = begin_it ; it < end_it ; it.nextStartOfSpan()) {
- SPObject const *pos_obj = 0;
+ SPObject *pos_obj = 0;
void *rawptr = 0;
layout->getSourceOfCharacter(it, &rawptr);
if (!rawptr || !SP_IS_OBJECT(rawptr)) {
@@ -1496,12 +1496,11 @@ int TextTool::_styleQueried(SPStyle *style, int property)
while (SP_IS_STRING(pos_obj) && pos_obj->parent) {
pos_obj = pos_obj->parent; // SPStrings don't have style
}
- styles_list = g_slist_prepend(styles_list, (gpointer)pos_obj);
+ styles_list.push_front(pos_obj);
}
int result = sp_desktop_query_style_from_list (styles_list, style, property);
- g_slist_free(styles_list);
return result;
}
diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp
index a07f2fb86..cc05f9775 100644
--- a/src/ui/tools/tool-base.cpp
+++ b/src/ui/tools/tool-base.cpp
@@ -1178,11 +1178,9 @@ SPItem *sp_event_context_find_item(SPDesktop *desktop, Geom::Point const &p,
SPItem *
sp_event_context_over_item(SPDesktop *desktop, SPItem *item,
Geom::Point const &p) {
- GSList *temp = NULL;
- temp = g_slist_prepend(temp, item);
+ SelContainer temp;
+ temp.push_front(static_cast<SPObject*>(item));
SPItem *item_at_point = desktop->getItemFromListAtPointBottom(temp, p);
- g_slist_free(temp);
-
return item_at_point;
}
diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp
index 5e53fdb93..9342127ce 100644
--- a/src/ui/tools/tweak-tool.cpp
+++ b/src/ui/tools/tweak-tool.cpp
@@ -163,7 +163,7 @@ void TweakTool::update_cursor (bool with_shift) {
gchar *sel_message = NULL;
if (!desktop->selection->isEmpty()) {
- num = g_slist_length(const_cast<GSList *>(desktop->selection->itemList()));
+ num = desktop->selection->itemList().size();
sel_message = g_strdup_printf(ngettext("<b>%i</b> object selected","<b>%i</b> objects selected",num), num);
} else {
sel_message = g_strdup_printf("%s", _("<b>Nothing</b> selected"));
@@ -382,14 +382,13 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
}
if (dynamic_cast<SPText *>(item) || dynamic_cast<SPFlowtext *>(item)) {
- GSList *items = g_slist_prepend (NULL, item);
- GSList *selected = NULL;
- GSList *to_select = NULL;
+ SelContainer items;
+ items.push_back(item);
+ SelContainer selected;
+ SelContainer to_select;
SPDocument *doc = item->document;
- sp_item_list_to_curves (items, &selected, &to_select);
- g_slist_free (items);
- SPObject* newObj = doc->getObjectByRepr(static_cast<Inkscape::XML::Node *>(to_select->data));
- g_slist_free (to_select);
+ sp_item_list_to_curves (items, selected, to_select);
+ SPObject* newObj = doc->getObjectByRepr(dynamic_cast<Inkscape::XML::Node *>(to_select.front()));
item = dynamic_cast<SPItem *>(newObj);
g_assert(item != NULL);
selection->add(item);
@@ -1088,11 +1087,9 @@ sp_tweak_dilate (TweakTool *tc, Geom::Point event_p, Geom::Point p, Geom::Point
double move_force = get_move_force(tc);
double color_force = MIN(sqrt(path_force)/20.0, 1);
- for (GSList *items = g_slist_copy(const_cast<GSList *>(selection->itemList()));
- items != NULL;
- items = items->next) {
-
- SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(items->data));
+ SelContainer items=selection->itemList();
+ for(SelContainer::const_iterator i=items.begin();i!=items.end();i++){
+ SPItem *item = dynamic_cast<SPItem *>(static_cast<SPObject *>(*i));
if (is_color_mode (tc->mode)) {
if (do_fill || do_stroke || do_opacity) {
@@ -1199,7 +1196,7 @@ bool TweakTool::root_handler(GdkEvent* event) {
guint num = 0;
if (!desktop->selection->isEmpty()) {
- num = g_slist_length(const_cast<GSList *>(desktop->selection->itemList()));
+ num = desktop->selection->itemList().size();
}
if (num == 0) {
this->message_context->flash(Inkscape::ERROR_MESSAGE, _("<b>Nothing selected!</b> Select objects to tweak."));
diff --git a/src/ui/widget/object-composite-settings.cpp b/src/ui/widget/object-composite-settings.cpp
index 00a74c4fe..ddf67fb5b 100644
--- a/src/ui/widget/object-composite-settings.cpp
+++ b/src/ui/widget/object-composite-settings.cpp
@@ -125,7 +125,8 @@ ObjectCompositeSettings::_blendBlurValueChanged()
const Glib::ustring blendmode = _fe_cb.get_blend_mode();
//apply created filter to every selected item
- for (StyleSubject::iterator i = _subject->begin() ; i != _subject->end() ; ++i ) {
+ SelContainer sel=_subject->getDesktop()->getSelection()->itemList();
+ for (SelContainer::const_iterator i = sel.begin() ; i != sel.end() ; ++i ) {
if (!SP_IS_ITEM(*i)) {
continue;
}
diff --git a/src/ui/widget/style-subject.cpp b/src/ui/widget/style-subject.cpp
index a48370d9b..9d09e67d3 100644
--- a/src/ui/widget/style-subject.cpp
+++ b/src/ui/widget/style-subject.cpp
@@ -54,7 +54,7 @@ Inkscape::Selection *StyleSubject::Selection::_getSelection() const {
return NULL;
}
}
-
+/*
StyleSubject::iterator StyleSubject::Selection::begin() {
Inkscape::Selection *selection = _getSelection();
if (selection) {
@@ -62,7 +62,7 @@ StyleSubject::iterator StyleSubject::Selection::begin() {
} else {
return iterator(NULL);
}
-}
+}*/
Geom::OptRect StyleSubject::Selection::getBounds(SPItem::BBoxType type) {
Inkscape::Selection *selection = _getSelection();
@@ -104,8 +104,7 @@ void StyleSubject::Selection::setCSS(SPCSSAttr *css) {
}
StyleSubject::CurrentLayer::CurrentLayer() {
- _element.data = NULL;
- _element.next = NULL;
+ _element = NULL;
}
StyleSubject::CurrentLayer::~CurrentLayer() {
@@ -114,10 +113,10 @@ StyleSubject::CurrentLayer::~CurrentLayer() {
void StyleSubject::CurrentLayer::_setLayer(SPObject *layer) {
_layer_release.disconnect();
_layer_modified.disconnect();
- if (_element.data) {
- sp_object_unref(static_cast<SPObject *>(_element.data), NULL);
+ if (_element) {
+ sp_object_unref(static_cast<SPObject *>(_element), NULL);
}
- _element.data = layer;
+ _element = layer;
if (layer) {
sp_object_ref(layer, NULL);
_layer_release = layer->connectRelease(sigc::hide(sigc::bind(sigc::mem_fun(*this, &CurrentLayer::_setLayer), (SPObject *)NULL)));
@@ -127,20 +126,17 @@ void StyleSubject::CurrentLayer::_setLayer(SPObject *layer) {
}
SPObject *StyleSubject::CurrentLayer::_getLayer() const {
- return static_cast<SPObject *>(_element.data);
+ return static_cast<SPObject *>(_element);
}
-GSList *StyleSubject::CurrentLayer::_getLayerSList() const {
- if (_element.data) {
- return &_element;
- } else {
- return NULL;
- }
-}
+SPObject *StyleSubject::CurrentLayer::_getLayerSList() const {
+ return _element;
+}
+/*
StyleSubject::iterator StyleSubject::CurrentLayer::begin() {
return iterator(_getLayerSList());
-}
+}*/
Geom::OptRect StyleSubject::CurrentLayer::getBounds(SPItem::BBoxType type) {
SPObject *layer = _getLayer();
@@ -152,8 +148,10 @@ Geom::OptRect StyleSubject::CurrentLayer::getBounds(SPItem::BBoxType type) {
}
int StyleSubject::CurrentLayer::queryStyle(SPStyle *query, int property) {
- GSList *list = _getLayerSList();
- if (list) {
+ SelContainer list;
+ SPObject* i=_getLayerSList();
+ if (i) {
+ list.push_back(i);
return sp_desktop_query_style_from_list(list, query, property);
} else {
return QUERY_STYLE_NOTHING;
diff --git a/src/ui/widget/style-subject.h b/src/ui/widget/style-subject.h
index 47da91732..60f979eb0 100644
--- a/src/ui/widget/style-subject.h
+++ b/src/ui/widget/style-subject.h
@@ -35,7 +35,8 @@ public:
class Selection;
class CurrentLayer;
- typedef Util::GSListConstIterator<SPObject *> iterator;
+ //typedef Util::GSListConstIterator<SPObject *> iterator;
+ typedef std::list<SPObject*>::iterator iterator;
StyleSubject();
virtual ~StyleSubject();
@@ -43,8 +44,8 @@ public:
void setDesktop(SPDesktop *desktop);
SPDesktop *getDesktop() const { return _desktop; }
- virtual iterator begin() = 0;
- virtual iterator end() { return iterator(NULL); }
+// virtual iterator begin() = 0;
+// virtual iterator end() { return iterator(NULL); }
virtual Geom::OptRect getBounds(SPItem::BBoxType type) = 0;
virtual int queryStyle(SPStyle *query, int property) = 0;
virtual void setCSS(SPCSSAttr *css) = 0;
@@ -67,7 +68,7 @@ public:
Selection();
~Selection();
- virtual iterator begin();
+// virtual iterator begin();
virtual Geom::OptRect getBounds(SPItem::BBoxType type);
virtual int queryStyle(SPStyle *query, int property);
virtual void setCSS(SPCSSAttr *css);
@@ -88,7 +89,7 @@ public:
CurrentLayer();
~CurrentLayer();
- virtual iterator begin();
+// virtual iterator begin();
virtual Geom::OptRect getBounds(SPItem::BBoxType type);
virtual int queryStyle(SPStyle *query, int property);
virtual void setCSS(SPCSSAttr *css);
@@ -99,12 +100,12 @@ protected:
private:
SPObject *_getLayer() const;
void _setLayer(SPObject *layer);
- GSList *_getLayerSList() const;
+ SPObject *_getLayerSList() const;
sigc::connection _layer_switched;
sigc::connection _layer_release;
sigc::connection _layer_modified;
- mutable GSList _element;
+ mutable SPObject* _element;
};
}