diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index a220d8401c2cb259a9039208592c8a0f8ac1132f..a11904570dd626b2e08d61f231460900685f0a6b 100644 (file)
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
@@ -139,7 +139,6 @@ static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape:
sp_object_read_attr(object, "gridtolerance");
sp_object_read_attr(object, "guidetolerance");
sp_object_read_attr(object, "objecttolerance");
- sp_object_read_attr(object, "inkscape:has_abs_tolerance");
sp_object_read_attr(object, "gridoriginx");
sp_object_read_attr(object, "gridoriginy");
sp_object_read_attr(object, "gridspacingx");
@@ -168,12 +167,12 @@ static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape:
sp_object_read_attr(object, "inkscape:window-height");
sp_object_read_attr(object, "inkscape:window-x");
sp_object_read_attr(object, "inkscape:window-y");
- sp_object_read_attr(object, "inkscape:grid-bbox");
+/* sp_object_read_attr(object, "inkscape:grid-bbox");
sp_object_read_attr(object, "inkscape:guide-bbox");
sp_object_read_attr(object, "inkscape:object-bbox");
sp_object_read_attr(object, "inkscape:grid-points");
sp_object_read_attr(object, "inkscape:guide-points");
- sp_object_read_attr(object, "inkscape:object-points");
+ sp_object_read_attr(object, "inkscape:object-points");*/
sp_object_read_attr(object, "inkscape:object-paths");
sp_object_read_attr(object, "inkscape:object-nodes");
sp_object_read_attr(object, "inkscape:current-layer");
@@ -268,13 +267,6 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
}
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
- case SP_ATTR_ABS_TOLERANCE:
- if (!value)
- nv->has_abs_tolerance = true;
- else
- nv->has_abs_tolerance = (sp_str_to_bool (value) == TRUE);
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
- break;
case SP_ATTR_GRIDORIGINX:
case SP_ATTR_GRIDORIGINY:
{
@@ -443,7 +435,7 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
nv->window_y = value ? atoi(value) : -1; // -1 means not set
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
- case SP_ATTR_INKSCAPE_GRID_BBOX:
+/* case SP_ATTR_INKSCAPE_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;
@@ -467,6 +459,7 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
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_manager.object.setSnapToPaths(value ? sp_str_to_bool(value) : TRUE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
@@ -533,10 +526,49 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
}
}
+/**
+* add a grid item from SVG-repr. Check if this namedview already has a gridobject for this one! If desktop=null, add grid-canvasitem to all desktops of this namedview,
+* otherwise only add it to the specified desktop.
+*/
+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;
+ break;
+ }
+ }
+
+ if (!grid) {
+ //create grid object
+ const char * gridtype = repr->attribute("type");
+ if (!gridtype) {
+ gridtype = "xygrid"; // use this as default gridtype when none is specified
+ repr->setAttribute("type", gridtype);
+ }
+ grid = Inkscape::CanvasGrid::NewGrid(nv, repr, gridtype);
+ nv->grids = g_slist_append(nv->grids, 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);
+ }
+ } else {
+ //add canvasitem only for specified desktop
+ grid->createCanvasItem(desktop);
+ }
+
+ return grid;
+}
+
static void sp_namedview_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
{
-g_message("named view:: child added");
-
SPNamedView *nv = (SPNamedView *) object;
if (((SPObjectClass *) (parent_class))->child_added) {
const gchar *id = child->attribute("id");
if (!strcmp(child->name(), "inkscape:grid")) {
- // check for which grid-type
- Inkscape::CanvasGrid* addedgrid;
- const char * gridtype = child->attribute("type");
- if (!gridtype) {
- gridtype = "xygrid"; // use this as default gridtype when none is specified
- child->setAttribute("type", gridtype);
- }
- addedgrid = Inkscape::CanvasGrid::NewGrid( (SPDesktop*) nv->views->data, child, gridtype);
- if (addedgrid) {
- nv->grids = g_slist_append(nv->grids, addedgrid);
- addedgrid->show();
- }
+ sp_namedview_add_grid(nv, child, NULL);
} else {
SPObject *no = object->document->getObjectById(id);
g_assert(SP_IS_OBJECT(no));
static void sp_namedview_remove_child(SPObject *object, Inkscape::XML::Node *child)
{
-g_message("named view:: child removed");
SPNamedView *nv = (SPNamedView *) object;
if (!strcmp(child->name(), "inkscape:grid")) {
views = g_slist_prepend(views, desktop);
- SPCanvasItem * item = sp_canvas_item_new(sp_desktop_grid(desktop), INKSCAPE_TYPE_CXYGRID, NULL);
+ SPCanvasItem * item = sp_canvas_item_new(sp_desktop_gridgroup(desktop), INKSCAPE_TYPE_CXYGRID, 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);
if (repr) {
for (Inkscape::XML::Node * child = repr->firstChild() ; child != NULL; child = child->next() ) {
if (!strcmp(child->name(), "inkscape:grid")) {
- Inkscape::CanvasXYGrid* addedgrid = new Inkscape::CanvasXYGrid(desktop, child);
- if (addedgrid) {
- grids = g_slist_append(grids, addedgrid);
- addedgrid->enabled = true;
- addedgrid->show();
- }
+ sp_namedview_add_grid(this, child, desktop);
}
}
}
-
-
+
sp_namedview_setup_grid(this);
}