summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2011-12-20 22:07:22 +0000
committerJohan Engelen <goejendaagh@zonnet.nl>2011-12-20 22:07:22 +0000
commit14b6891e5d84dc76829749d888e9dd769c037ebb (patch)
tree1690b0f2187e754a3fed3ecbe2ef2a94c4af3eba /src
parentfix bug in emphasized line drawing for axonometric grid when origin is not zero (diff)
downloadinkscape-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.cpp20
-rw-r--r--src/display/canvas-grid.h1
-rw-r--r--src/document.cpp1
-rw-r--r--src/sp-namedview.cpp9
-rw-r--r--src/sp-namedview.h1
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;