diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index f1d957d84acd87578da4bda8e413db3131a81c94..9c36b5057aa4df5f978a88e120914971b43816eb 100644 (file)
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
#include "config.h"
-
-
-
#include "display/canvas-grid.h"
#include "helper/units.h"
-#include "svg/svg.h"
+#include "svg/svg-color.h"
#include "xml/repr.h"
#include "attributes.h"
#include "document.h"
#include "desktop-events.h"
#include "desktop-handles.h"
+#include "event-log.h"
#include "sp-guide.h"
#include "sp-item-group.h"
#include "sp-namedview.h"
nv->connector_spacing = defaultConnSpacing;
- new (&nv->grid_snapper) Inkscape::GridSnapper(nv, 0);
- new (&nv->guide_snapper) Inkscape::GuideSnapper(nv, 0);
- new (&nv->object_snapper) Inkscape::ObjectSnapper(nv, 0);
+ new (&nv->snap_manager) SnapManager(nv);
}
static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
namedview->gridviews = g_slist_remove(namedview->gridviews, namedview->gridviews->data);
}
- namedview->grid_snapper.~GridSnapper();
- namedview->guide_snapper.~GuideSnapper();
- namedview->object_snapper.~ObjectSnapper();
-
if (((SPObjectClass *) parent_class)->release) {
((SPObjectClass *) parent_class)->release(object);
}
+
+ namedview->snap_manager.~SnapManager();
}
static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *value)
@@ -228,13 +222,8 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
case SP_ATTR_SHOWGRID:
nv->showgrid = sp_str_to_bool(value);
sp_namedview_setup_grid(nv);
- if (!nv->showgrid) { // grid goes off, disable snaps even if they are turned on
- nv->grid_snapper.setSnapTo(Inkscape::Snapper::BBOX_POINT, false);
- nv->grid_snapper.setSnapTo(Inkscape::Snapper::SNAP_POINT, false);
- } else { // grid goes on, enable snaps if they are turned on
- nv->grid_snapper.setSnapTo(Inkscape::Snapper::BBOX_POINT, nv->snap_grid_bbox);
- nv->grid_snapper.setSnapTo(Inkscape::Snapper::SNAP_POINT, nv->snap_grid_point);
- }
+ /* Disable grid snaps if the grid is turned off */
+ nv->snap_manager.grid.setEnabled(nv->showgrid);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_SHOWGUIDES:
@@ -243,13 +232,6 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
} else {
nv->showguides = sp_str_to_bool(value);
}
- if (!nv->showguides) { // guides go off, disable snaps even if they are turned on
- nv->guide_snapper.setSnapTo(Inkscape::Snapper::BBOX_POINT, false);
- nv->guide_snapper.setSnapTo(Inkscape::Snapper::SNAP_POINT, false);
- } else { // guides go on, enable snaps if they are turned on
- nv->guide_snapper.setSnapTo(Inkscape::Snapper::BBOX_POINT, nv->snap_guide_bbox);
- nv->guide_snapper.setSnapTo(Inkscape::Snapper::SNAP_POINT, nv->snap_guide_point);
- }
sp_namedview_setup_guides(nv);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
@@ -453,43 +435,35 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_GRID_BBOX:
- nv->snap_grid_bbox = (value) ? sp_str_to_bool(value) : TRUE;
- nv->grid_snapper.setSnapTo(Inkscape::Snapper::BBOX_POINT, nv->showgrid && nv->snap_grid_bbox);
+ nv->snap_manager.grid.setSnapTo(Inkscape::Snapper::BBOX_POINT, value ? sp_str_to_bool(value) : TRUE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_GRID_POINTS:
- nv->snap_grid_point = (value) ? sp_str_to_bool(value) : FALSE;
- nv->grid_snapper.setSnapTo(Inkscape::Snapper::SNAP_POINT, nv->showgrid && nv->snap_grid_point);
+ nv->snap_manager.grid.setSnapTo(Inkscape::Snapper::SNAP_POINT, value ? sp_str_to_bool(value) : FALSE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_GUIDE_BBOX:
- nv->snap_guide_bbox = (value) ? sp_str_to_bool(value) : TRUE;
- nv->guide_snapper.setSnapTo(Inkscape::Snapper::BBOX_POINT, nv->showguides && nv->snap_guide_bbox);
+ nv->snap_manager.guide.setSnapTo(Inkscape::Snapper::BBOX_POINT, value ? sp_str_to_bool(value) : TRUE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_GUIDE_POINTS:
- nv->snap_guide_point = (value) ? sp_str_to_bool(value) : FALSE;
- nv->guide_snapper.setSnapTo(Inkscape::Snapper::SNAP_POINT, nv->showguides && nv->snap_guide_point);
+ nv->snap_manager.guide.setSnapTo(Inkscape::Snapper::SNAP_POINT, value ? sp_str_to_bool(value) : FALSE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_OBJECT_BBOX:
- nv->snap_object_bbox = (value) ? sp_str_to_bool(value) : FALSE;
- nv->object_snapper.setSnapTo(Inkscape::Snapper::BBOX_POINT, nv->snap_object_bbox);
+ nv->snap_manager.object.setSnapTo(Inkscape::Snapper::BBOX_POINT, (value) ? sp_str_to_bool(value) : FALSE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_OBJECT_POINTS:
- nv->snap_object_point = (value) ? sp_str_to_bool(value) : FALSE;
- nv->object_snapper.setSnapTo(Inkscape::Snapper::SNAP_POINT, nv->snap_object_point);
+ nv->snap_manager.object.setSnapTo(Inkscape::Snapper::SNAP_POINT, (value) ? sp_str_to_bool(value) : FALSE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_OBJECT_PATHS:
- nv->snap_object_paths = (value) ? sp_str_to_bool(value) : TRUE;
- nv->object_snapper.setSnapToPaths(nv->snap_object_paths);
+ nv->snap_manager.object.setSnapToPaths(value ? sp_str_to_bool(value) : TRUE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_OBJECT_NODES:
- nv->snap_object_nodes = (value) ? sp_str_to_bool(value) : TRUE;
- nv->object_snapper.setSnapToNodes(nv->snap_object_nodes);
+ nv->snap_manager.object.setSnapToNodes(value ? sp_str_to_bool(value) : TRUE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_CURRENT_LAYER:
@@ -571,7 +545,7 @@ static void sp_namedview_child_added(SPObject *object, Inkscape::XML::Node *chil
sp_guide_show(g, static_cast<SPDesktop*>(l->data)->guides, (GCallback) sp_dt_guide_event);
if (static_cast<SPDesktop*>(l->data)->guides_active)
sp_guide_sensitize(g,
- SP_DT_CANVAS(static_cast<SPDesktop*> (l->data)),
+ sp_desktop_canvas(static_cast<SPDesktop*> (l->data)),
TRUE);
if (nv->showguides) {
for (GSList *v = SP_GUIDE(g)->views; v != NULL; v = v->next) {
for (GSList *l = guides; l != NULL; l = l->next) {
sp_guide_show(SP_GUIDE(l->data), desktop->guides, (GCallback) sp_dt_guide_event);
if (desktop->guides_active) {
- sp_guide_sensitize(SP_GUIDE(l->data), SP_DT_CANVAS(desktop), TRUE);
+ sp_guide_sensitize(SP_GUIDE(l->data), sp_desktop_canvas(desktop), TRUE);
}
if (showguides) {
for (GSList *v = SP_GUIDE(l->data)->views; v != NULL; v = v->next) {
views = g_slist_prepend(views, desktop);
- SPCanvasItem *item = sp_canvas_item_new(SP_DT_GRID(desktop), SP_TYPE_CGRID, NULL);
+ SPCanvasItem *item = sp_canvas_item_new(sp_desktop_grid(desktop), SP_TYPE_CGRID, NULL);
// since we're keeping a copy, we need to bump up the ref count
gtk_object_ref(GTK_OBJECT(item));
gridviews = g_slist_prepend(gridviews, item);
&& nv->cx != HUGE_VAL && !isNaN(nv->cx)
&& nv->cy != HUGE_VAL && !isNaN(nv->cy)) {
desktop->zoom_absolute(nv->cx, nv->cy, nv->zoom);
- } else if (SP_DT_DOCUMENT(desktop)) { // document without saved zoom, zoom to its page
+ } else if (sp_desktop_document(desktop)) { // document without saved zoom, zoom to its page
desktop->zoom_page();
}
if (layer) {
desktop->setCurrentLayer(layer);
}
+
+ // FIXME: find a better place to do this
+ sp_desktop_document(desktop)->getEventLog().updateUndoVerbs();
}
void sp_namedview_document_from_window(SPDesktop *desktop)
NR::Rect const r = desktop->get_display_area();
// saving window geometry is not undoable
- gboolean saved = sp_document_get_undo_sensitive(SP_DT_DOCUMENT(desktop));
- sp_document_set_undo_sensitive(SP_DT_DOCUMENT(desktop), FALSE);
+ bool saved = sp_document_get_undo_sensitive(sp_desktop_document(desktop));
+ sp_document_set_undo_sensitive(sp_desktop_document(desktop), false);
sp_repr_set_svg_double(view, "inkscape:zoom", desktop->current_zoom());
sp_repr_set_svg_double(view, "inkscape:cx", r.midpoint()[NR::X]);
view->setAttribute("inkscape:current-layer", SP_OBJECT_ID(desktop->currentLayer()));
// restore undoability
- sp_document_set_undo_sensitive(SP_DT_DOCUMENT(desktop), saved);
+ sp_document_set_undo_sensitive(sp_desktop_document(desktop), saved);
}
void SPNamedView::hide(SPDesktop const *desktop)
g_assert(g_slist_find(views, desktop));
for (GSList *l = guides; l != NULL; l = l->next) {
- sp_guide_hide(SP_GUIDE(l->data), SP_DT_CANVAS(desktop));
+ sp_guide_hide(SP_GUIDE(l->data), sp_desktop_canvas(desktop));
}
views = g_slist_remove(views, desktop);
GSList *l;
for (l = gridviews; l != NULL; l = l->next) {
- if (SP_CANVAS_ITEM(l->data)->canvas == SP_DT_CANVAS(desktop)) {
+ if (SP_CANVAS_ITEM(l->data)->canvas == sp_desktop_canvas(desktop)) {
break;
}
}
SPDesktop *dt = static_cast<SPDesktop*>(desktop);
for (GSList *l = guides; l != NULL; l = l->next) {
- sp_guide_sensitize(SP_GUIDE(l->data), SP_DT_CANVAS(dt), active);
+ sp_guide_sensitize(SP_GUIDE(l->data), sp_desktop_canvas(dt), active);
}
}
v = !v;
}
- gboolean saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, FALSE);
+ bool saved = sp_document_get_undo_sensitive(doc);
+ sp_document_set_undo_sensitive(doc, false);
sp_repr_set_boolean(repr, "showguides", v);
sp_repr_get_boolean(repr, "showgrid", &v);
v = !v;
- gboolean saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, FALSE);
+ bool saved = sp_document_get_undo_sensitive(doc);
+ sp_document_set_undo_sensitive(doc, false);
sp_repr_set_boolean(repr, "showgrid", v);
}
}
-SPNamedView::SnapperList SPNamedView::getSnappers() const
-{
- SnapperList s;
- s.push_back(&grid_snapper);
- s.push_back(&guide_snapper);
- s.push_back(&object_snapper);
- return s;
-}
-
/*
Local Variables:
mode:c++