X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fdocument.cpp;h=a61dffc0b4a1c3fd78d7a9045dc88c51dcc1ab86;hb=589de22f01b0975fcd36bbc99c06013e971c85b8;hp=f403f3aad1ef91811a76b987c69e2a1dab407a66;hpb=c4eb899d30e3e359efe9f708c01a3651b5179f01;p=inkscape.git diff --git a/src/document.cpp b/src/document.cpp index f403f3aad..a61dffc0b 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -106,9 +106,7 @@ SPDocument::SPDocument() { p->history_size = 0; p->undo = NULL; p->redo = NULL; - - p->undoStackObservers.add(p->event_log); - p->event_log.setDocument(this); + p->seeking = false; priv = p; @@ -120,8 +118,6 @@ SPDocument::~SPDocument() { collectOrphans(); if (priv) { - inkscape_remove_document(this); - if (priv->partial) { sp_repr_free_log(priv->partial); priv->partial = NULL; @@ -223,7 +219,7 @@ sp_document_create(Inkscape::XML::Document *rdoc, Inkscape::XML::Node *rroot; Inkscape::Version sodipodi_version; - rroot = sp_repr_document_root(rdoc); + rroot = rdoc->root(); document = new SPDocument(); @@ -264,10 +260,7 @@ sp_document_create(Inkscape::XML::Document *rdoc, /* Quick hack 3 - Set uri attributes */ if (uri) { - /* fixme: Think, what this means for images (Lauris) */ rroot->setAttribute("sodipodi:docname", uri); - if (document->base) - rroot->setAttribute("sodipodi:docbase", document->base); } /* End of quick hack 3 */ @@ -280,11 +273,11 @@ sp_document_create(Inkscape::XML::Document *rdoc, // see if there's a template with id="base" in the preferences if (!r) { // if there's none, create an empty element - rnew = sp_repr_new("sodipodi:namedview"); + rnew = rdoc->createElement("sodipodi:namedview"); rnew->setAttribute("id", "base"); } else { // otherwise, take from preferences - rnew = r->duplicate(); + rnew = r->duplicate(rroot->document()); } // insert into the document rroot->addChild(rnew, NULL); @@ -295,7 +288,7 @@ sp_document_create(Inkscape::XML::Document *rdoc, /* Defs */ if (!SP_ROOT(document->root)->defs) { Inkscape::XML::Node *r; - r = sp_repr_new("svg:defs"); + r = rdoc->createElement("svg:defs"); rroot->addChild(r, NULL); Inkscape::GC::release(r); g_assert(SP_ROOT(document->root)->defs); @@ -320,7 +313,6 @@ sp_document_create(Inkscape::XML::Document *rdoc, document->_selection_changed_connection = Inkscape::NSApplication::Editor::connectSelectionChanged (sigc::mem_fun (*document, &SPDocument::reset_key)); document->_desktop_activated_connection = Inkscape::NSApplication::Editor::connectDesktopActivated (sigc::mem_fun (*document, &SPDocument::reset_key)); } - inkscape_add_document(document); return document; } @@ -344,7 +336,7 @@ sp_document_new(gchar const *uri, unsigned int keepalive, bool make_new) rdoc = sp_repr_read_file(uri, SP_SVG_NS_URI); /* If file cannot be loaded, return NULL without warning */ if (rdoc == NULL) return NULL; - rroot = sp_repr_document_root(rdoc); + rroot = rdoc->root(); /* If xml file is not svg, return NULL without warning */ /* fixme: destroy document */ if (strcmp(rroot->name(), "svg:svg") != 0) return NULL; @@ -393,7 +385,7 @@ sp_document_new_from_mem(gchar const *buffer, gint length, unsigned int keepaliv /* If it cannot be loaded, return NULL without warning */ if (rdoc == NULL) return NULL; - rroot = sp_repr_document_root(rdoc); + rroot = rdoc->root(); /* If xml file is not svg, return NULL without warning */ /* fixme: destroy document */ if (strcmp(rroot->name(), "svg:svg") != 0) return NULL; @@ -407,7 +399,6 @@ sp_document_new_from_mem(gchar const *buffer, gint length, unsigned int keepaliv SPDocument *sp_document_new_dummy() { SPDocument *document = new SPDocument(); - inkscape_add_document(document); return document; } @@ -497,7 +488,7 @@ gdouble sp_document_height(SPDocument *document) */ void SPDocument::fitToRect(NRRect const & rect) { - g_return_if_fail(!empty(rect)); + g_return_if_fail(!nr_rect_d_test_empty(&rect)); gdouble w = rect.x1 - rect.x0; gdouble h = rect.y1 - rect.y0; @@ -551,8 +542,6 @@ void sp_document_set_uri(SPDocument *document, gchar const *uri) // changing uri in the document repr must not be not undoable bool saved = sp_document_get_undo_sensitive(document); sp_document_set_undo_sensitive(document, false); - if (document->base) - repr->setAttribute("sodipodi:docbase", document->base); repr->setAttribute("sodipodi:docname", document->name); sp_document_set_undo_sensitive(document, saved); @@ -659,12 +648,6 @@ SPDocument::removeUndoObserver(Inkscape::UndoStackObserver& observer) this->priv->undoStackObservers.remove(observer); } -Inkscape::EventLog& -SPDocument::getEventLog() const -{ - return priv->event_log; -} - SPObject *SPDocument::getObjectById(gchar const *id) { g_return_val_if_fail(id != NULL, NULL); @@ -846,8 +829,8 @@ static GSList *find_items_in_area(GSList *s, SPGroup *group, unsigned int dkey, s = find_items_in_area(s, SP_GROUP(o), dkey, area, test); } else { SPItem *child = SP_ITEM(o); - NR::Rect box = sp_item_bbox_desktop(child); - if (test(area, box) && (take_insensitive || child->isVisibleAndUnlocked(dkey))) { + NR::Maybe box = sp_item_bbox_desktop(child); + if ( box && test(area, *box) && (take_insensitive || child->isVisibleAndUnlocked(dkey))) { s = g_slist_append(s, child); } } @@ -1013,6 +996,30 @@ GSList *sp_document_partial_items_in_box(SPDocument *document, unsigned int dkey return find_items_in_area(NULL, SP_GROUP(document->root), dkey, box, overlaps); } +GSList * +sp_document_items_at_points(SPDocument *document, unsigned const key, std::vector points) +{ + GSList *items = NULL; + + // When picking along the path, we don't want small objects close together + // (such as hatching strokes) to obscure each other by their deltas, + // so we temporarily set delta to a small value + gdouble saved_delta = prefs_get_double_attribute ("options.cursortolerance", "value", 1.0); + prefs_set_double_attribute ("options.cursortolerance", "value", 0.25); + + for(unsigned int i = 0; i < points.size(); i++) { + SPItem *item = sp_document_item_at_point(document, key, points[i], + false, NULL); + if (item && !g_slist_find(items, item)) + items = g_slist_prepend (items, item); + } + + // and now we restore it back + prefs_set_double_attribute ("options.cursortolerance", "value", saved_delta); + + return items; +} + SPItem * sp_document_item_at_point(SPDocument *document, unsigned const key, NR::Point const p, gboolean const into_groups, SPItem *upto) @@ -1169,6 +1176,10 @@ vacuum_document(SPDocument *document) return start - newend; } +bool SPDocument::isSeeking() const { + return priv->seeking; +} + /* Local Variables: