diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2006-09-21 22:25:16 +0000 |
|---|---|---|
| committer | johanengelen <johanengelen@users.sourceforge.net> | 2006-09-21 22:25:16 +0000 |
| commit | 2cc945f5bad59ff19a872970434ccf1515c0aa79 (patch) | |
| tree | 6901d797dac6ba08036125d59f34575ba2997292 /src/sp-namedview.cpp | |
| parent | 1) Updated da, tr, sl and es translation to versions in patch tracker (diff) | |
| download | inkscape-2cc945f5bad59ff19a872970434ccf1515c0aa79.tar.gz inkscape-2cc945f5bad59ff19a872970434ccf1515c0aa79.zip | |
AXONOMETRIC (3D) GRID! OK, still alot of work to be done. Snapping, diagonal guides, 0-degree angle axes, user-input checking, emphasis lines, optimizing, ... try and find as many bugs as possible :P Or just look at it playing with the angles of the lines, it's pretty cool to look at all by itself :)
(bzr r1716)
Diffstat (limited to 'src/sp-namedview.cpp')
| -rw-r--r-- | src/sp-namedview.cpp | 94 |
1 files changed, 74 insertions, 20 deletions
diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 9c36b5057..54805f872 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -7,6 +7,7 @@ * Lauris Kaplinski <lauris@kaplinski.com> * bulia byak <buliabyak@users.sf.net> * + * Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl> * 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" @@ -107,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; @@ -133,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"); @@ -142,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"); @@ -226,6 +232,11 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va nv->snap_manager.grid.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: if (!value) { // show guides if not specified, for backwards compatibility nv->showguides = TRUE; @@ -294,6 +305,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) { @@ -616,11 +639,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); } /* @@ -723,15 +752,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) @@ -795,6 +820,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) { @@ -804,23 +840,41 @@ 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, + "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); + } else { + // CAXONOMGRID + sp_canvas_item_set((GtkObject *) item, + "color", nv->gridcolor, + "originx", nv->gridorigin[NR::X], + "originy", nv->gridorigin[NR::Y], + "spacingy", nv->gridspacing[NR::Y], + "anglex", nv->gridangle[0], + "anglez", nv->gridangle[1], + "empcolor", nv->gridempcolor, + "empspacing", nv->gridempspacing, + NULL); + } } + gchar const *SPNamedView::getName() const { SPException ex; |
