X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsp-namedview.cpp;h=d3792133bc788aae39e700e23f8cca8658d83212;hb=5e8a08857af3a55929109a0e6eaf5a149b4b6e1c;hp=32e713792a67521578027f825cb1a1bba3c92ce0;hpb=449c491223fe78da73b171e6a23949ee37c7c68e;p=inkscape.git diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 32e713792..d3792133b 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. * @@ -15,17 +16,16 @@ #include "config.h" - - - #include "display/canvas-grid.h" +#include "display/canvas-axonomgrid.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" @@ -91,12 +91,12 @@ static void sp_namedview_class_init(SPNamedViewClass * klass) { GObjectClass * gobject_class; SPObjectClass * sp_object_class; - + gobject_class = (GObjectClass *) klass; sp_object_class = (SPObjectClass *) klass; - + parent_class = (SPObjectGroupClass*) g_type_class_ref(SP_TYPE_OBJECTGROUP); - + sp_object_class->build = sp_namedview_build; sp_object_class->release = sp_namedview_release; sp_object_class->set = sp_namedview_set; @@ -109,34 +109,34 @@ 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; - + nv->guides = NULL; nv->viewcount = 0; - + nv->default_layer_id = 0; - + 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) { SPNamedView *nv = (SPNamedView *) object; SPObjectGroup *og = (SPObjectGroup *) object; - + if (((SPObjectClass *) (parent_class))->build) { (* ((SPObjectClass *) (parent_class))->build)(object, document, repr); } - + 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"); @@ -146,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"); @@ -180,9 +182,9 @@ static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape: sp_object_read_attr(object, "inkscape:object-nodes"); sp_object_read_attr(object, "inkscape:current-layer"); sp_object_read_attr(object, "inkscape:connector-spacing"); - + /* Construct guideline list */ - + for (SPObject *o = sp_object_first_child(SP_OBJECT(og)) ; o != NULL; o = SP_OBJECT_NEXT(o) ) { if (SP_IS_GUIDE(o)) { SPGuide * g = SP_GUIDE(o); @@ -195,24 +197,22 @@ static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape: static void sp_namedview_release(SPObject *object) { SPNamedView *namedview = (SPNamedView *) object; - + if (namedview->guides) { g_slist_free(namedview->guides); namedview->guides = NULL; } - + while (namedview->gridviews) { gtk_object_unref(GTK_OBJECT(namedview->gridviews->data)); 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 +228,14 @@ 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); + 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: @@ -243,13 +244,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; @@ -312,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) { @@ -453,43 +459,37 @@ 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); + 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_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); + 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: - 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: @@ -520,7 +520,7 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va * doc_units. */ SPUnit const *new_unit = &sp_unit_get_by_id(SP_UNIT_PX); - + if (value) { SPUnit const *const req_unit = sp_unit_get_by_abbreviation(value); if ( req_unit == NULL ) { @@ -553,15 +553,15 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va static void sp_namedview_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { SPNamedView *nv = (SPNamedView *) object; - + if (((SPObjectClass *) (parent_class))->child_added) { (* ((SPObjectClass *) (parent_class))->child_added)(object, child, ref); } - + const gchar *id = child->attribute("id"); SPObject *no = object->document->getObjectById(id); g_assert(SP_IS_OBJECT(no)); - + if (SP_IS_GUIDE(no)) { SPGuide *g = (SPGuide *) no; nv->guides = g_slist_prepend(nv->guides, g); @@ -569,9 +569,9 @@ static void sp_namedview_child_added(SPObject *object, Inkscape::XML::Node *chil if (nv->editable) { for (GSList *l = nv->views; l != NULL; l = l->next) { sp_guide_show(g, static_cast(l->data)->guides, (GCallback) sp_dt_guide_event); - if (static_cast(l->data)->guides_active) - sp_guide_sensitize(g, - SP_DT_CANVAS(static_cast (l->data)), + if (static_cast(l->data)->guides_active) + sp_guide_sensitize(g, + sp_desktop_canvas(static_cast (l->data)), TRUE); if (nv->showguides) { for (GSList *v = SP_GUIDE(g)->views; v != NULL; v = v->next) { @@ -590,7 +590,7 @@ static void sp_namedview_child_added(SPObject *object, Inkscape::XML::Node *chil static void sp_namedview_remove_child(SPObject *object, Inkscape::XML::Node *child) { SPNamedView *nv = (SPNamedView *) object; - + GSList **ref = &nv->guides; for ( GSList *iter = nv->guides ; iter ; iter = iter->next ) { if ( SP_OBJECT_REPR((SPObject *)iter->data) == child ) { @@ -601,7 +601,7 @@ static void sp_namedview_remove_child(SPObject *object, Inkscape::XML::Node *chi } ref = &iter->next; } - + if (((SPObjectClass *) (parent_class))->remove_child) { (* ((SPObjectClass *) (parent_class))->remove_child)(object, child); } @@ -618,7 +618,7 @@ static Inkscape::XML::Node *sp_namedview_write(SPObject *object, Inkscape::XML:: repr = SP_OBJECT_REPR(object)->duplicate(); } } - + return repr; } @@ -627,7 +627,7 @@ void SPNamedView::show(SPDesktop *desktop) 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) { @@ -639,16 +639,24 @@ void SPNamedView::show(SPDesktop *desktop) } } } - + 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), 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); + + 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); } +#define MIN_ONSCREEN_DISTANCE 50 + /* * Restores window geometry from the document settings */ @@ -656,32 +664,44 @@ void sp_namedview_window_from_document(SPDesktop *desktop) { SPNamedView *nv = desktop->namedview; gint save_geometry = prefs_get_int_attribute("options.savewindowgeometry", "value", 0); - + // restore window size and position if (save_geometry) { - if (nv->window_width != -1 && nv->window_height != -1) - desktop->setWindowSize(nv->window_width, nv->window_height); - if (nv->window_x != -1 && nv->window_y != -1) - desktop->setWindowPosition(NR::Point(nv->window_x, nv->window_y)); + gint w = MIN(gdk_screen_width(), nv->window_width); + gint h = MIN(gdk_screen_height(), nv->window_height); + gint x = MIN(gdk_screen_width() - MIN_ONSCREEN_DISTANCE, nv->window_x); + gint y = MIN(gdk_screen_height() - MIN_ONSCREEN_DISTANCE, nv->window_y); + if (w>0 && h>0 && x>0 && y>0) { + x = MIN(gdk_screen_width() - w, x); + y = MIN(gdk_screen_height() - h, y); + } + if (w>0 && h>0) + desktop->setWindowSize(w, h); + if (x>0 && y>0) + desktop->setWindowPosition(NR::Point(x, y)); } - + // restore zoom and view if (nv->zoom != 0 && nv->zoom != HUGE_VAL && !isNaN(nv->zoom) - && nv->cx != HUGE_VAL && !isNaN(nv->cx) + && 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(); } - + // cancel any history of zooms up to this point if (desktop->zooms_past) { g_list_free(desktop->zooms_past); desktop->zooms_past = NULL; } - +} + +void sp_namedview_update_layers_from_document (SPDesktop *desktop) +{ SPObject *layer = NULL; SPDocument *document = desktop->doc(); + SPNamedView *nv = desktop->namedview; if ( nv->default_layer_id != 0 ) { layer = document->getObjectById(g_quark_to_string(nv->default_layer_id)); } @@ -701,6 +721,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) @@ -708,15 +731,15 @@ void sp_namedview_document_from_window(SPDesktop *desktop) gint save_geometry = prefs_get_int_attribute("options.savewindowgeometry", "value", 0); Inkscape::XML::Node *view = SP_OBJECT_REPR(desktop->namedview); 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]); sp_repr_set_svg_double(view, "inkscape:cy", r.midpoint()[NR::Y]); - + if (save_geometry) { gint w, h, x, y; desktop->getWindowGeometry(x, y, w, h); @@ -725,47 +748,48 @@ void sp_namedview_document_from_window(SPDesktop *desktop) sp_repr_set_int(view, "inkscape:window-x", x); sp_repr_set_int(view, "inkscape:window-y", y); } - + 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(desktop != NULL); 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)) { - break; + if (! l->data) { + continue; } - } + SPCanvasItem *item = static_cast(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); + if (item->canvas == sp_desktop_canvas(desktop)) { + 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) { g_assert(desktop != NULL); g_assert(g_slist_find(views, desktop)); - + SPDesktop *dt = static_cast(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); } } @@ -793,12 +817,12 @@ void sp_namedview_toggle_guides(SPDocument *doc, Inkscape::XML::Node *repr) } else { 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); - + doc->rroot->setAttribute("sodipodi:modified", "true"); sp_document_set_undo_sensitive(doc, saved); } @@ -808,12 +832,23 @@ void sp_namedview_toggle_grid(SPDocument *doc, Inkscape::XML::Node *repr) unsigned int 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); - + + doc->rroot->setAttribute("sodipodi:modified", "true"); + sp_document_set_undo_sensitive(doc, saved); +} + +void sp_namedview_set_gridtype(unsigned int 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_int(repr, "gridtype", (gint)type); + doc->rroot->setAttribute("sodipodi:modified", "true"); sp_document_set_undo_sensitive(doc, saved); } @@ -827,7 +862,9 @@ 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); @@ -837,13 +874,25 @@ static void sp_namedview_setup_grid_item(SPNamedView *nv, SPCanvasItem *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){ + // CXYGRID + 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; @@ -873,7 +922,7 @@ static gboolean sp_str_to_bool(const gchar *str) return TRUE; } } - + return FALSE; } @@ -893,13 +942,13 @@ static gboolean sp_nv_read_length(const gchar *str, guint base, gdouble *val, co while (isspace(*u)) { u += 1; } - + if (!*u) { /* No unit specified - keep default */ *val = v; return TRUE; } - + if (base & SP_UNIT_DEVICE) { if (u[0] && u[1] && !isalnum(u[2]) && !strncmp(u, "px", 2)) { *unit = &sp_unit_get_by_id(SP_UNIT_PX); @@ -907,7 +956,7 @@ static gboolean sp_nv_read_length(const gchar *str, guint base, gdouble *val, co return TRUE; } } - + if (base & SP_UNIT_ABSOLUTE) { if (!strncmp(u, "pt", 2)) { *unit = &sp_unit_get_by_id(SP_UNIT_PT); @@ -925,7 +974,7 @@ static gboolean sp_nv_read_length(const gchar *str, guint base, gdouble *val, co *val = v; return TRUE; } - + return FALSE; } @@ -936,32 +985,32 @@ static gboolean sp_nv_read_opacity(const gchar *str, guint32 *color) } gchar *u; - gdouble v = strtod(str, &u); + gdouble v = g_ascii_strtod(str, &u); if (!u) { return FALSE; } v = CLAMP(v, 0.0, 1.0); - + *color = (*color & 0xffffff00) | (guint32) floor(v * 255.9999); - + return TRUE; } SPNamedView *sp_document_namedview(SPDocument *document, const gchar *id) { g_return_val_if_fail(document != NULL, NULL); - + SPObject *nv = sp_item_group_get_child_by_name((SPGroup *) document->root, NULL, "sodipodi:namedview"); g_assert(nv != NULL); - + if (id == NULL) { return (SPNamedView *) nv; } - + while (nv && strcmp(nv->id, id)) { nv = sp_item_group_get_child_by_name((SPGroup *) document->root, nv, "sodipodi:namedview"); } - + return (SPNamedView *) nv; } @@ -977,15 +1026,6 @@ SPMetric SPNamedView::getDefaultMetric() const } } -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++