X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsp-namedview.cpp;h=da95a8ab70449d9714719d334d15a3226ad46ee9;hb=62d31275d48feeac9615611451ff4c9b724465e0;hp=4f9e4e2881aafdb791a77e0f244b7b9908bbef33;hpb=d05834b3cdca77ccd9a1ab0a32b1ca2dc09a745d;p=inkscape.git diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 4f9e4e288..da95a8ab7 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -7,6 +7,7 @@ * Lauris Kaplinski * bulia byak * + * Copyright (C) 2006 Johan Engelen * Copyright (C) 1999-2005 Authors * Copyright (C) 2000-2001 Ximian, Inc. * @@ -16,6 +17,7 @@ #include "config.h" #include "display/canvas-grid.h" +#include "display/canvas-axonomgrid.h" #include "helper/units.h" #include "svg/svg-color.h" #include "xml/repr.h" @@ -23,6 +25,7 @@ #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" @@ -106,6 +109,7 @@ static void sp_namedview_init(SPNamedView *nv) { nv->editable = TRUE; nv->showgrid = FALSE; + nv->gridtype = 0; nv->showguides = TRUE; nv->showborder = TRUE; nv->showpageshadow = TRUE; @@ -132,6 +136,7 @@ static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape: sp_object_read_attr(object, "inkscape:document-units"); sp_object_read_attr(object, "viewonly"); sp_object_read_attr(object, "showgrid"); + sp_object_read_attr(object, "gridtype"); sp_object_read_attr(object, "showguides"); sp_object_read_attr(object, "gridtolerance"); sp_object_read_attr(object, "guidetolerance"); @@ -141,6 +146,8 @@ static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape: sp_object_read_attr(object, "gridoriginy"); sp_object_read_attr(object, "gridspacingx"); sp_object_read_attr(object, "gridspacingy"); + sp_object_read_attr(object, "gridanglex"); + sp_object_read_attr(object, "gridanglez"); sp_object_read_attr(object, "gridempspacing"); sp_object_read_attr(object, "gridcolor"); sp_object_read_attr(object, "gridempcolor"); @@ -223,6 +230,12 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va sp_namedview_setup_grid(nv); /* Disable grid snaps if the grid is turned off */ nv->snap_manager.grid.setEnabled(nv->showgrid); + nv->snap_manager.axonomgrid.setEnabled(nv->showgrid); + object->requestModified(SP_OBJECT_MODIFIED_FLAG); + break; + case SP_ATTR_GRIDTYPE: + nv->gridtype = sp_str_to_bool(value); + sp_namedview_setup_grid(nv); object->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_SHOWGUIDES: @@ -293,6 +306,18 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va object->requestModified(SP_OBJECT_MODIFIED_FLAG); break; } + case SP_ATTR_GRIDANGLEX: + case SP_ATTR_GRIDANGLEZ: + { + unsigned const d = (key == SP_ATTR_GRIDANGLEZ); // 0=X 1=Z + nv->gridangle[d] = 30; // 30 deg default + if (value) { + nv->gridangle[d] = g_ascii_strtod(value, NULL); + } + sp_namedview_setup_grid(nv); + object->requestModified(SP_OBJECT_MODIFIED_FLAG); + break; + } case SP_ATTR_GRIDCOLOR: nv->gridcolor = (nv->gridcolor & 0xff) | (DEFAULTGRIDCOLOR & 0xffffff00); if (value) { @@ -435,10 +460,12 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va break; case SP_ATTR_INKSCAPE_GRID_BBOX: nv->snap_manager.grid.setSnapTo(Inkscape::Snapper::BBOX_POINT, value ? sp_str_to_bool(value) : TRUE); + nv->snap_manager.axonomgrid.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_manager.grid.setSnapTo(Inkscape::Snapper::SNAP_POINT, value ? sp_str_to_bool(value) : FALSE); + nv->snap_manager.axonomgrid.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: @@ -615,11 +642,17 @@ void SPNamedView::show(SPDesktop *desktop) views = g_slist_prepend(views, desktop); - SPCanvasItem *item = sp_canvas_item_new(sp_desktop_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); + + item = sp_canvas_item_new(sp_desktop_grid(desktop), SP_TYPE_CAXONOMGRID, 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); - sp_namedview_setup_grid_item(this, item); + + sp_namedview_setup_grid(this); } /* @@ -674,6 +707,9 @@ void sp_namedview_window_from_document(SPDesktop *desktop) if (layer) { desktop->setCurrentLayer(layer); } + + // FIXME: find a better place to do this + desktop->event_log->updateUndoVerbs(); } void sp_namedview_document_from_window(SPDesktop *desktop) @@ -683,8 +719,8 @@ 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_desktop_document(desktop)); - sp_document_set_undo_sensitive(sp_desktop_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]); @@ -719,15 +755,11 @@ void SPNamedView::hide(SPDesktop const *desktop) GSList *l; for (l = gridviews; l != NULL; l = l->next) { if (SP_CANVAS_ITEM(l->data)->canvas == sp_desktop_canvas(desktop)) { - break; + sp_canvas_item_hide(SP_CANVAS_ITEM(l->data)); + gtk_object_unref(GTK_OBJECT(l->data)); + gridviews = g_slist_remove(gridviews, l->data); } } - - g_assert(l); - - sp_canvas_item_hide(SP_CANVAS_ITEM(l->data)); - gtk_object_unref(GTK_OBJECT(l->data)); - gridviews = g_slist_remove(gridviews, l->data); } void SPNamedView::activateGuides(gpointer desktop, gboolean active) @@ -767,8 +799,8 @@ void sp_namedview_toggle_guides(SPDocument *doc, Inkscape::XML::Node *repr) 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); @@ -782,8 +814,8 @@ void sp_namedview_toggle_grid(SPDocument *doc, Inkscape::XML::Node *repr) 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); @@ -791,6 +823,17 @@ void sp_namedview_toggle_grid(SPDocument *doc, Inkscape::XML::Node *repr) sp_document_set_undo_sensitive(doc, saved); } +void sp_namedview_set_gridtype(bool type, SPDocument *doc, Inkscape::XML::Node *repr) +{ + bool saved = sp_document_get_undo_sensitive(doc); + sp_document_set_undo_sensitive(doc, false); + + sp_repr_set_boolean(repr, "showgrid", type); + + doc->rroot->setAttribute("sodipodi:modified", "true"); + sp_document_set_undo_sensitive(doc, saved); +} + static void sp_namedview_setup_grid(SPNamedView *nv) { for (GSList *l = nv->gridviews; l != NULL; l = l->next) { @@ -800,23 +843,37 @@ static void sp_namedview_setup_grid(SPNamedView *nv) static void sp_namedview_setup_grid_item(SPNamedView *nv, SPCanvasItem *item) { - if (nv->showgrid) { + bool btype = SP_IS_CAXONOMGRID(GTK_OBJECT(item)); + + if ( nv->showgrid && (nv->gridtype == btype) ) { sp_canvas_item_show(item); } else { sp_canvas_item_hide(item); } - + sp_canvas_item_set((GtkObject *) item, "color", nv->gridcolor, "originx", nv->gridorigin[NR::X], "originy", nv->gridorigin[NR::Y], - "spacingx", nv->gridspacing[NR::X], "spacingy", nv->gridspacing[NR::Y], "empcolor", nv->gridempcolor, "empspacing", nv->gridempspacing, NULL); + if (!btype){ + // CGRID + sp_canvas_item_set((GtkObject *) item, + "spacingx", nv->gridspacing[NR::X], + NULL); + } else { + // CAXONOMGRID + sp_canvas_item_set((GtkObject *) item, + "anglex", nv->gridangle[0], + "anglez", nv->gridangle[1], + NULL); + } } + gchar const *SPNamedView::getName() const { SPException ex;