diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2011-12-20 22:07:22 +0000 |
|---|---|---|
| committer | Johan Engelen <goejendaagh@zonnet.nl> | 2011-12-20 22:07:22 +0000 |
| commit | 14b6891e5d84dc76829749d888e9dd769c037ebb (patch) | |
| tree | 1690b0f2187e754a3fed3ecbe2ef2a94c4af3eba /src | |
| parent | fix bug in emphasized line drawing for axonometric grid when origin is not zero (diff) | |
| download | inkscape-14b6891e5d84dc76829749d888e9dd769c037ebb.tar.gz inkscape-14b6891e5d84dc76829749d888e9dd769c037ebb.zip | |
when resizing page, move the origin of the grids too. This way all objects will stay aligned to the grids.
(bzr r10787)
Diffstat (limited to 'src')
| -rw-r--r-- | src/display/canvas-grid.cpp | 20 | ||||
| -rw-r--r-- | src/display/canvas-grid.h | 1 | ||||
| -rw-r--r-- | src/document.cpp | 1 | ||||
| -rw-r--r-- | src/sp-namedview.cpp | 9 | ||||
| -rw-r--r-- | src/sp-namedview.h | 1 |
5 files changed, 31 insertions, 1 deletions
diff --git a/src/display/canvas-grid.cpp b/src/display/canvas-grid.cpp index 8428a277e..734ce2043 100644 --- a/src/display/canvas-grid.cpp +++ b/src/display/canvas-grid.cpp @@ -28,6 +28,7 @@ #include "sp-namedview.h" #include "sp-object.h" #include "svg/svg-color.h" +#include "svg/stringstream.h" #include "util/mathfns.h" #include "xml/node-event-vector.h" @@ -377,6 +378,22 @@ bool CanvasGrid::isEnabled() return snapper->getEnabled(); } +void CanvasGrid::setOrigin(Geom::Point const &origin_px) +{ + Inkscape::SVGOStringStream os_x, os_y; + gdouble val; + + val = origin_px[Geom::X]; + val = sp_pixels_get_units (val, *gridunit); + os_x << val << sp_unit_get_abbreviation(gridunit); + val = origin_px[Geom::Y]; + val = sp_pixels_get_units (val, *gridunit); + os_y << val << sp_unit_get_abbreviation(gridunit); + repr->setAttribute("originx", os_x.str().c_str()); + repr->setAttribute("originy", os_y.str().c_str()); +} + + // ########################################################## // CanvasXYGrid @@ -427,8 +444,9 @@ CanvasXYGrid::CanvasXYGrid (SPNamedView * nv, Inkscape::XML::Node * in_repr, SPD { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gridunit = sp_unit_get_by_abbreviation( prefs->getString("/options/grids/xy/units").data() ); - if (!gridunit) + if (!gridunit) { gridunit = &sp_unit_get_by_id(SP_UNIT_PX); + } origin[Geom::X] = sp_units_get_pixels(prefs->getDouble("/options/grids/xy/origin_x", 0.0), *gridunit); origin[Geom::Y] = sp_units_get_pixels(prefs->getDouble("/options/grids/xy/origin_y", 0.0), *gridunit); color = prefs->getInt("/options/grids/xy/color", 0x0000ff20); diff --git a/src/display/canvas-grid.h b/src/display/canvas-grid.h index f7cc3c032..2788316fd 100644 --- a/src/display/canvas-grid.h +++ b/src/display/canvas-grid.h @@ -86,6 +86,7 @@ public: Gtk::Widget * newWidget(); + void setOrigin(Geom::Point const &origin_px); /**< writes new origin (specified in px units) to SVG */ Geom::Point origin; /**< Origin of the grid */ guint32 color; /**< Color for normal lines */ guint32 empcolor; /**< Color for emphasis lines */ diff --git a/src/document.cpp b/src/document.cpp index 6035ea557..ce8e6d125 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -662,6 +662,7 @@ void SPDocument::fitToRect(Geom::Rect const &rect, bool with_margins) if(nv) { Geom::Translate tr2(-rect_with_margins.min()); nv->translateGuides(tr2); + nv->translateGrids(tr2); // update the viewport so the drawing appears to stay where it was nv->scrollAllDesktops(-tr2[0], tr2[1], false); diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index ca30ccae2..2de38d9f8 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -1116,6 +1116,15 @@ void SPNamedView::translateGuides(Geom::Translate const &tr) { } } +void SPNamedView::translateGrids(Geom::Translate const &tr) { + for (GSList *l = grids; l != NULL; l = l->next) { + Inkscape::CanvasGrid* g = reinterpret_cast<Inkscape::CanvasGrid*>(l->data); + if (g) { + g->setOrigin(g->origin * tr); + } + } +} + void SPNamedView::scrollAllDesktops(double dx, double dy, bool is_scrolling) { for(GSList *l = views; l; l = l->next) { SPDesktop *desktop = static_cast<SPDesktop *>(l->data); diff --git a/src/sp-namedview.h b/src/sp-namedview.h index 1c9c9e879..8c51ad838 100644 --- a/src/sp-namedview.h +++ b/src/sp-namedview.h @@ -84,6 +84,7 @@ struct SPNamedView : public SPObjectGroup { SPMetric getDefaultMetric() const; void translateGuides(Geom::Translate const &translation); + void translateGrids(Geom::Translate const &translation); void scrollAllDesktops(double dx, double dy, bool is_scrolling); void writeNewGrid(SPDocument *document,int gridtype); bool getSnapGlobal() const; |
