From d1947e768272c703674129d5c583204ff2b59251 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 13 Jul 2016 13:36:19 +0200 Subject: Second part of new SPObject children list (bzr r14954.1.19) --- src/sp-namedview.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 616ec3921..173055dbd 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -248,9 +248,9 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { this->readAttr( "inkscape:lockguides" ); /* Construct guideline list */ - for (SPObject *o = this->firstChild() ; o; o = o->getNext() ) { - if (SP_IS_GUIDE(o)) { - SPGuide * g = SP_GUIDE(o); + for (auto& o: _children) { + if (SP_IS_GUIDE(&o)) { + SPGuide * g = SP_GUIDE(&o); this->guides.push_back(g); //g_object_set(G_OBJECT(g), "color", nv->guidecolor, "hicolor", nv->guidehicolor, NULL); g->setColor(this->guidecolor); @@ -858,9 +858,9 @@ void sp_namedview_update_layers_from_document (SPDesktop *desktop) } // if that didn't work out, look for the topmost layer if (!layer) { - for ( SPObject *iter = document->getRoot()->firstChild(); iter ; iter = iter->getNext() ) { - if (desktop->isLayer(iter)) { - layer = iter; + for (auto& iter: document->getRoot()->_children) { + if (desktop->isLayer(&iter)) { + layer = &iter; } } } -- cgit v1.2.3 From 24d3f50003ca3cec6a03a7f5267cc4fe5588c69f Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 14 Jul 2016 13:17:21 +0200 Subject: Renamed children list in SPObject (bzr r14954.1.21) --- src/sp-namedview.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 173055dbd..e1d69e297 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -248,7 +248,7 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { this->readAttr( "inkscape:lockguides" ); /* Construct guideline list */ - for (auto& o: _children) { + for (auto& o: children) { if (SP_IS_GUIDE(&o)) { SPGuide * g = SP_GUIDE(&o); this->guides.push_back(g); @@ -858,7 +858,7 @@ void sp_namedview_update_layers_from_document (SPDesktop *desktop) } // if that didn't work out, look for the topmost layer if (!layer) { - for (auto& iter: document->getRoot()->_children) { + for (auto& iter: document->getRoot()->children) { if (desktop->isLayer(&iter)) { layer = &iter; } -- cgit v1.2.3 From f35bb1f74a0ffeb5c6477a25e3c4cde87a97bcf1 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 28 Jul 2016 12:06:06 +0200 Subject: Removed unused includes, decrease compilation time (bzr r15025) --- src/sp-namedview.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 616ec3921..45e3d4cf8 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -14,14 +14,12 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "config.h" #include #include #include "event-log.h" #include <2geom/transforms.h> #include "display/canvas-grid.h" -#include "display/guideline.h" #include "util/units.h" #include "svg/svg-color.h" #include "xml/repr.h" -- cgit v1.2.3 From 43b49e325db73cc19b1731db6c69545664ee8fbe Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 28 Jul 2016 13:26:17 +0200 Subject: Reverted changes to r15024 after many building problems (bzr r15027) --- src/sp-namedview.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 45e3d4cf8..616ec3921 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -14,12 +14,14 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ +#include "config.h" #include #include #include "event-log.h" #include <2geom/transforms.h> #include "display/canvas-grid.h" +#include "display/guideline.h" #include "util/units.h" #include "svg/svg-color.h" #include "xml/repr.h" -- cgit v1.2.3 From 35830f456cadaecf8b8e3944e3031a1a93f6cb41 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 3 Aug 2016 15:29:38 +0200 Subject: Removed unused includes, decreased compilation time. Once again (bzr r15034) --- src/sp-namedview.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 616ec3921..45e3d4cf8 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -14,14 +14,12 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "config.h" #include #include #include "event-log.h" #include <2geom/transforms.h> #include "display/canvas-grid.h" -#include "display/guideline.h" #include "util/units.h" #include "svg/svg-color.h" #include "xml/repr.h" -- cgit v1.2.3 From b1fd9e5520ba0578f3b1dbfa53a806bfdb74f3a3 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 3 Oct 2016 00:48:49 +0200 Subject: Doc rotate start (bzr r15142.1.1) --- src/sp-namedview.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index b9526433f..69fc78b33 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -29,12 +29,14 @@ #include "desktop-events.h" #include "sp-guide.h" +#include "sp-root.h" #include "sp-item-group.h" #include "sp-namedview.h" #include "preferences.h" #include "desktop.h" +#include "selection.h" +#include "inkscape.h" #include "conn-avoid-ref.h" // for defaultConnSpacing. -#include "sp-root.h" #include using Inkscape::DocumentUndo; @@ -49,6 +51,7 @@ using Inkscape::Util::unit_table; #define DEFAULTPAGECOLOR 0xffffff00 static void sp_namedview_setup_guides(SPNamedView * nv); +static void sp_namedview_set_document_rotation(SPDocument * doc, SPNamedView * nv); static void sp_namedview_lock_guides(SPNamedView * nv); static void sp_namedview_show_single_guide(SPGuide* guide, bool show); static void sp_namedview_lock_single_guide(SPGuide* guide, bool show); @@ -72,6 +75,7 @@ SPNamedView::SPNamedView() : SPObjectGroup(), snap_manager(this) { this->pagecolor = 0; this->cx = 0; this->pageshadow = 0; + this->document_rotation = 0; this->window_width = 0; this->window_height = 0; this->window_maximized = 0; @@ -212,6 +216,7 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { this->readAttr( "inkscape:zoom" ); this->readAttr( "inkscape:cx" ); this->readAttr( "inkscape:cy" ); + this->readAttr( "inkscape:document-rotation" ); this->readAttr( "inkscape:window-width" ); this->readAttr( "inkscape:window-height" ); this->readAttr( "inkscape:window-x" ); @@ -409,6 +414,13 @@ void SPNamedView::set(unsigned int key, const gchar* value) { this->cy = value ? g_ascii_strtod(value, NULL) : HUGE_VAL; // HUGE_VAL means not set this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; + case SP_ATTR_INKSCAPE_DOCUMENT_ROTATION: + this->document_rotation = value ? g_ascii_strtod(value, NULL) : 0; // zero means not set + if (value && document) { + sp_namedview_set_document_rotation(document, this); + } + this->requestModified(SP_OBJECT_MODIFIED_FLAG); + break; case SP_ATTR_INKSCAPE_WINDOW_WIDTH: this->window_width = value? atoi(value) : -1; // -1 means not set this->requestModified(SP_OBJECT_MODIFIED_FLAG); @@ -939,6 +951,39 @@ static void sp_namedview_lock_guides(SPNamedView *nv) } } +static void sp_namedview_set_document_rotation(SPDocument *doc, SPNamedView *nv) +{ + SPDesktop * desktop = SP_ACTIVE_DESKTOP; + Geom::Rect area; + Geom::Point p = Geom::Point(); + if (desktop) { + area = desktop->get_display_area(); + p = area.midpoint(); + p *= desktop->doc2dt(); + p *= doc->getRoot()->rotation.inverse(); + } + doc->getRoot()->set_rotation(nv->document_rotation); + if (nv->document_rotation) { + nv->showborder = FALSE; + } else { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + nv->showborder = prefs->getBool("/template/base/showborder", 1.0); + } + if (desktop) { + p *= doc->getRoot()->rotation; + //desktop->scroll_world_in_svg_coords (p[Geom::X], p[Geom::Y], true); + // *= doc->getRoot()->c2p * doc->getRoot()->rotation(); + //desktop->zoom_absolute (p[Geom::X], p[Geom::Y], desktop->current_zoom()); + std::cout << p << "pppppp\n"; +// Geom::Point min_pt = Geom::Point(p[Geom::X] - (area.width() / 2.0), p[Geom::Y] - (area.height() / 2.0)); +// Geom::Point max_pt = Geom::Point(p[Geom::X] + (area.width() / 2.0), p[Geom::Y] + (area.height() / 2.0)); +// Geom::Rect const new_area(min_pt, max_pt); +// desktop->set_display_area (new_area, 0, false); + Inkscape::Selection * sel = desktop->getSelection(); + sel->clear(); + } +} + static void sp_namedview_show_single_guide(SPGuide* guide, bool show) { if (show) { -- cgit v1.2.3 From f5e77f7f48954ec3bed892fa6763b0ed099a044e Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 8 Oct 2016 16:48:24 +0200 Subject: add rotate from current desktop center (bzr r15142.1.3) --- src/sp-namedview.cpp | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 69fc78b33..b4199e4c4 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -39,6 +39,9 @@ #include "conn-avoid-ref.h" // for defaultConnSpacing. #include +#include "display/sodipodi-ctrl.h" +#include "ui/dialog/knot-properties.h" + using Inkscape::DocumentUndo; using Inkscape::Util::unit_table; @@ -416,7 +419,7 @@ void SPNamedView::set(unsigned int key, const gchar* value) { break; case SP_ATTR_INKSCAPE_DOCUMENT_ROTATION: this->document_rotation = value ? g_ascii_strtod(value, NULL) : 0; // zero means not set - if (value && document) { + if (document) { sp_namedview_set_document_rotation(document, this); } this->requestModified(SP_OBJECT_MODIFIED_FLAG); @@ -950,18 +953,26 @@ static void sp_namedview_lock_guides(SPNamedView *nv) sp_namedview_lock_single_guide(*it, nv->lockguides); } } - +void hp2(Geom::Point a) { + SPDesktop *desktop = SP_ACTIVE_DESKTOP; + a = desktop->dt2doc(a); + guint32 color = 0xff0000ff; + SPCanvasItem * canvasitem = sp_canvas_item_new(desktop->getTempGroup(), + SP_TYPE_CTRL, + "anchor", SP_ANCHOR_CENTER, + "size", 8.0, + "stroked", TRUE, + "stroke_color", color, + "mode", SP_KNOT_MODE_XOR, + "shape", SP_KNOT_SHAPE_CROSS, + NULL ); + + SP_CTRL(canvasitem)->moveto(a); + sp_canvas_item_show(canvasitem); +} static void sp_namedview_set_document_rotation(SPDocument *doc, SPNamedView *nv) { SPDesktop * desktop = SP_ACTIVE_DESKTOP; - Geom::Rect area; - Geom::Point p = Geom::Point(); - if (desktop) { - area = desktop->get_display_area(); - p = area.midpoint(); - p *= desktop->doc2dt(); - p *= doc->getRoot()->rotation.inverse(); - } doc->getRoot()->set_rotation(nv->document_rotation); if (nv->document_rotation) { nv->showborder = FALSE; @@ -970,15 +981,6 @@ static void sp_namedview_set_document_rotation(SPDocument *doc, SPNamedView *nv) nv->showborder = prefs->getBool("/template/base/showborder", 1.0); } if (desktop) { - p *= doc->getRoot()->rotation; - //desktop->scroll_world_in_svg_coords (p[Geom::X], p[Geom::Y], true); - // *= doc->getRoot()->c2p * doc->getRoot()->rotation(); - //desktop->zoom_absolute (p[Geom::X], p[Geom::Y], desktop->current_zoom()); - std::cout << p << "pppppp\n"; -// Geom::Point min_pt = Geom::Point(p[Geom::X] - (area.width() / 2.0), p[Geom::Y] - (area.height() / 2.0)); -// Geom::Point max_pt = Geom::Point(p[Geom::X] + (area.width() / 2.0), p[Geom::Y] + (area.height() / 2.0)); -// Geom::Rect const new_area(min_pt, max_pt); -// desktop->set_display_area (new_area, 0, false); Inkscape::Selection * sel = desktop->getSelection(); sel->clear(); } -- cgit v1.2.3 From 45b6180786db318dd135ea918732ce8051470e75 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 8 Oct 2016 20:29:16 +0200 Subject: Keep selection (bzr r15142.1.5) --- src/sp-namedview.cpp | 43 +++++++++++++++---------------------------- 1 file changed, 15 insertions(+), 28 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index b4199e4c4..e44c548bd 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -35,13 +35,11 @@ #include "preferences.h" #include "desktop.h" #include "selection.h" +#include "object-set.h" #include "inkscape.h" #include "conn-avoid-ref.h" // for defaultConnSpacing. #include -#include "display/sodipodi-ctrl.h" -#include "ui/dialog/knot-properties.h" - using Inkscape::DocumentUndo; using Inkscape::Util::unit_table; @@ -419,9 +417,7 @@ void SPNamedView::set(unsigned int key, const gchar* value) { break; case SP_ATTR_INKSCAPE_DOCUMENT_ROTATION: this->document_rotation = value ? g_ascii_strtod(value, NULL) : 0; // zero means not set - if (document) { - sp_namedview_set_document_rotation(document, this); - } + sp_namedview_set_document_rotation(document, this); this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_INKSCAPE_WINDOW_WIDTH: @@ -953,26 +949,10 @@ static void sp_namedview_lock_guides(SPNamedView *nv) sp_namedview_lock_single_guide(*it, nv->lockguides); } } -void hp2(Geom::Point a) { - SPDesktop *desktop = SP_ACTIVE_DESKTOP; - a = desktop->dt2doc(a); - guint32 color = 0xff0000ff; - SPCanvasItem * canvasitem = sp_canvas_item_new(desktop->getTempGroup(), - SP_TYPE_CTRL, - "anchor", SP_ANCHOR_CENTER, - "size", 8.0, - "stroked", TRUE, - "stroke_color", color, - "mode", SP_KNOT_MODE_XOR, - "shape", SP_KNOT_SHAPE_CROSS, - NULL ); - - SP_CTRL(canvasitem)->moveto(a); - sp_canvas_item_show(canvasitem); -} + static void sp_namedview_set_document_rotation(SPDocument *doc, SPNamedView *nv) { - SPDesktop * desktop = SP_ACTIVE_DESKTOP; + doc->getRoot()->set_rotation(nv->document_rotation); if (nv->document_rotation) { nv->showborder = FALSE; @@ -980,10 +960,17 @@ static void sp_namedview_set_document_rotation(SPDocument *doc, SPNamedView *nv) Inkscape::Preferences *prefs = Inkscape::Preferences::get(); nv->showborder = prefs->getBool("/template/base/showborder", 1.0); } - if (desktop) { - Inkscape::Selection * sel = desktop->getSelection(); - sel->clear(); - } +// //TODO: fix ti for work: To update knots of selected items +// SPDesktop * desktop = SP_ACTIVE_DESKTOP; +// if (desktop) { +// Inkscape::Selection * sel = desktop->getSelection(); +// std::vector il(sel->items().begin(), sel->items().end()); +// for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ +// SPItem *item = *l; +// sel->remove(item->getRepr()); +// sel->add(item->getRepr()); +// } +// } } static void sp_namedview_show_single_guide(SPGuide* guide, bool show) -- cgit v1.2.3 From 7f008cb2f657420416aef950a1576e1162c89fa4 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 9 Oct 2016 03:19:42 +0200 Subject: Added widget to to rotate (bzr r15142.1.7) --- src/sp-namedview.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index e44c548bd..e51d62522 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -416,8 +416,8 @@ void SPNamedView::set(unsigned int key, const gchar* value) { this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_INKSCAPE_DOCUMENT_ROTATION: - this->document_rotation = value ? g_ascii_strtod(value, NULL) : 0; // zero means not set - sp_namedview_set_document_rotation(document, this); + this->document_rotation = value ? g_ascii_strtod(value, NULL) : 0; + sp_namedview_set_document_rotation(this); this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_INKSCAPE_WINDOW_WIDTH: @@ -950,10 +950,9 @@ static void sp_namedview_lock_guides(SPNamedView *nv) } } -static void sp_namedview_set_document_rotation(SPDocument *doc, SPNamedView *nv) +void sp_namedview_set_document_rotation(SPNamedView *nv) { - - doc->getRoot()->set_rotation(nv->document_rotation); + nv->document->getRoot()->set_rotation(nv->document_rotation); if (nv->document_rotation) { nv->showborder = FALSE; } else { -- cgit v1.2.3 From c7f5c676fa15f59f5f78c934263539981a26bbd2 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 10 Oct 2016 14:08:35 +0200 Subject: Fix some canvas problems and refactorization (bzr r15142.1.8) --- src/sp-namedview.cpp | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index e51d62522..ff0ac8336 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -19,7 +19,12 @@ #include "event-log.h" #include <2geom/transforms.h> +#include "display/sp-canvas-group.h" +#include "display/canvas-bpath.h" +#include "display/canvas-temporary-item.h" +#include "display/canvas-temporary-item-list.h" #include "display/canvas-grid.h" +#include "display/curve.h" #include "util/units.h" #include "svg/svg-color.h" #include "xml/repr.h" @@ -52,7 +57,6 @@ using Inkscape::Util::unit_table; #define DEFAULTPAGECOLOR 0xffffff00 static void sp_namedview_setup_guides(SPNamedView * nv); -static void sp_namedview_set_document_rotation(SPDocument * doc, SPNamedView * nv); static void sp_namedview_lock_guides(SPNamedView * nv); static void sp_namedview_show_single_guide(SPGuide* guide, bool show); static void sp_namedview_lock_single_guide(SPGuide* guide, bool show); @@ -97,9 +101,13 @@ SPNamedView::SPNamedView() : SPObjectGroup(), snap_manager(this) { this->default_layer_id = 0; this->connector_spacing = defaultConnSpacing; + this->page_border_rotated = NULL; } SPNamedView::~SPNamedView() { + if(!this->getViewList().empty()) { // >0 Desktops + this->getViewList()[0]->remove_temporary_canvasitem(this->page_border_rotated); + } } static void sp_namedview_generate_old_grid(SPNamedView * /*nv*/, SPDocument *document, Inkscape::XML::Node *repr) { @@ -952,7 +960,32 @@ static void sp_namedview_lock_guides(SPNamedView *nv) void sp_namedview_set_document_rotation(SPNamedView *nv) { - nv->document->getRoot()->set_rotation(nv->document_rotation); + if(!nv->getViewList().empty()) { // >0 Desktops + SPDesktop *desktop = nv->getViewList()[0]; + desktop->remove_temporary_canvasitem(nv->page_border_rotated); + SPRoot * root = nv->document->getRoot(); + SPCurve *c = new SPCurve(); + c->moveto(root->viewBox.min()); + c->lineto(Geom::Point(root->viewBox.max()[Geom::X],root->viewBox.min()[Geom::Y])); + c->lineto(Geom::Point(root->viewBox.max()[Geom::X],root->viewBox.max()[Geom::Y])); + c->lineto(Geom::Point(root->viewBox.min()[Geom::X],root->viewBox.max()[Geom::Y])); + c->closepath(); + Geom::Point page_center = root->viewBox.midpoint(); + Geom::PathVector const box = c->get_pathvector(); + Geom::Affine rot = Geom::identity(); + rot *= Geom::Translate(page_center).inverse(); + rot *= Geom::Rotate(Geom::rad_from_deg(nv->document_rotation * -1)); + rot *= Geom::Translate(page_center); + if (nv->document_rotation) { + SPCanvasItem *canvas_border = sp_canvas_bpath_new(desktop->getTempGroup(), c, true); + sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(canvas_border), 0xFF00009A, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); + sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(canvas_border), 0, SP_WIND_RULE_NONZERO); + sp_canvas_item_affine_absolute(canvas_border, rot * root->vbt); + nv->page_border_rotated = desktop->add_temporary_canvasitem(canvas_border, 0); + } + nv->document->getRoot()->set_rotation(nv->document_rotation); + c->unref(); + } if (nv->document_rotation) { nv->showborder = FALSE; } else { -- cgit v1.2.3 From b949d0bdb9f751a94fd71f8bab7610d9a6a11a90 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 10 Oct 2016 16:06:22 +0200 Subject: Fix some canvas item problems and refresh items on rotate (bzr r15142.1.10) --- src/sp-namedview.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index ff0ac8336..df0778265 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -960,6 +960,7 @@ static void sp_namedview_lock_guides(SPNamedView *nv) void sp_namedview_set_document_rotation(SPNamedView *nv) { + if ( nv->document->getRoot()->get_rotation() == nv->document_rotation) return; if(!nv->getViewList().empty()) { // >0 Desktops SPDesktop *desktop = nv->getViewList()[0]; desktop->remove_temporary_canvasitem(nv->page_border_rotated); @@ -992,9 +993,10 @@ void sp_namedview_set_document_rotation(SPNamedView *nv) Inkscape::Preferences *prefs = Inkscape::Preferences::get(); nv->showborder = prefs->getBool("/template/base/showborder", 1.0); } -// //TODO: fix ti for work: To update knots of selected items -// SPDesktop * desktop = SP_ACTIVE_DESKTOP; -// if (desktop) { + + SPDesktop * desktop = SP_ACTIVE_DESKTOP; + if (desktop) { +//TODO: Remove knots of shapes on selected items // Inkscape::Selection * sel = desktop->getSelection(); // std::vector il(sel->items().begin(), sel->items().end()); // for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ @@ -1002,7 +1004,11 @@ void sp_namedview_set_document_rotation(SPNamedView *nv) // sel->remove(item->getRepr()); // sel->add(item->getRepr()); // } -// } + SPObject *updated = desktop->getDocument()->getRoot(); + if (updated) { + updated->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + } + } } static void sp_namedview_show_single_guide(SPGuide* guide, bool show) -- cgit v1.2.3 From 4a0131d1899c373cda20b36da683e9597b88ba87 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Sat, 4 Feb 2017 01:10:10 +0100 Subject: Disable rotate guides in doc rotation (bzr r15470) --- src/sp-namedview.cpp | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index c9e71955f..d430f6321 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -958,26 +958,26 @@ static void sp_namedview_lock_guides(SPNamedView *nv) } } -void sp_namedview_doc_rotate_guides(SPNamedView *nv) -{ - bool saved = DocumentUndo::getUndoSensitive(nv->document); - DocumentUndo::setUndoSensitive(nv->document, false); - SPRoot * root = nv->document->getRoot(); - Geom::Point page_center = root->viewBox.midpoint() * root->vbt; - Geom::Affine rot = Geom::identity(); - rot *= Geom::Translate(page_center).inverse(); - rot *= Geom::Rotate(Geom::rad_from_deg((nv->document_rotation - root->get_rotation()) * -1)); - rot *= Geom::Translate(page_center); - for(std::vector::iterator it=nv->guides.begin();it!=nv->guides.end();++it ) { - Geom::Point const on_line = (*it)->getPoint() * rot ; - (*it)->moveto(on_line, true); - Geom::Affine rot_normal_affine = Geom::Rotate(Geom::rad_from_deg((nv->document_rotation - root->get_rotation()) * -1)); - Geom::Point const rot_normal = (*it)->getNormal() * rot_normal_affine; - (*it)->set_normal(rot_normal, true); - } - DocumentUndo::setUndoSensitive(nv->document, saved); - nv->document->setModifiedSinceSave(); -} +//void sp_namedview_doc_rotate_guides(SPNamedView *nv) +//{ +// bool saved = DocumentUndo::getUndoSensitive(nv->document); +// DocumentUndo::setUndoSensitive(nv->document, false); +// SPRoot * root = nv->document->getRoot(); +// Geom::Point page_center = root->viewBox.midpoint() * root->vbt; +// Geom::Affine rot = Geom::identity(); +// rot *= Geom::Translate(page_center).inverse(); +// rot *= Geom::Rotate(Geom::rad_from_deg((nv->document_rotation - root->get_rotation()) * -1)); +// rot *= Geom::Translate(page_center); +// for(std::vector::iterator it=nv->guides.begin();it!=nv->guides.end();++it ) { +// Geom::Point const on_line = (*it)->getPoint() * rot ; +// (*it)->moveto(on_line, true); +// Geom::Affine rot_normal_affine = Geom::Rotate(Geom::rad_from_deg((nv->document_rotation - root->get_rotation()) * -1)); +// Geom::Point const rot_normal = (*it)->getNormal() * rot_normal_affine; +// (*it)->set_normal(rot_normal, true); +// } +// DocumentUndo::setUndoSensitive(nv->document, saved); +// nv->document->setModifiedSinceSave(); +//} void sp_namedview_set_document_rotation(SPNamedView *nv) { @@ -1005,7 +1005,7 @@ void sp_namedview_set_document_rotation(SPNamedView *nv) sp_canvas_item_affine_absolute(canvas_border, rot * root->vbt); nv->page_border_rotated = desktop->add_temporary_canvasitem(canvas_border, 0); } - sp_namedview_doc_rotate_guides(nv); + //sp_namedview_doc_rotate_guides(nv); nv->document->getRoot()->set_rotation(nv->document_rotation); c->unref(); } -- cgit v1.2.3 From 0dc3e9ec72db77e707135e42023bfb2d8e04bcbd Mon Sep 17 00:00:00 2001 From: Eduard Braun Date: Sat, 11 Feb 2017 21:55:19 +0100 Subject: Fix and improve window sizing and positioning behavior when opening new documents * The option "Remember and use last window's geometry" often had no effect. * When setting "Default window size" to "Large" the functions gdk_screen_width() / gdk_screen_height() were used to derive the size of the Inkscape window. However those functions return the combined screen size of all attached monitors resulting in window sizes that were too large. Now the size of the primary display is used. * In many cases the Inkscape window was moved to the top left corner of the combined screen area (which could be on a different monitor at best and outside of the visible screen area at worst). Inkscape should always spawn on the primary monitor now when not restoring the previous position. Fixed bugs: - https://launchpad.net/bugs/1190828 - https://launchpad.net/bugs/195683 - https://launchpad.net/bugs/568867 - https://launchpad.net/bugs/1654464 (bzr r15507) --- src/sp-namedview.cpp | 64 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 26 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index d430f6321..166e90238 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -754,7 +754,7 @@ void SPNamedView::show(SPDesktop *desktop) namespace { -gint const MIN_ONSCREEN_DISTANCE = 50; +gint const MIN_ONSCREEN_DISTANCE = 100; gdouble const NEWDOC_X_SCALE = 0.75; gdouble const NEWDOC_Y_SCALE = NEWDOC_X_SCALE; @@ -774,12 +774,6 @@ Geom::Point calcAnchorPoint(gint const x, gint const y, } // namespace -void SPNamedView::writeNewGrid(SPDocument *document,int gridtype) -{ - g_assert(this->getRepr() != NULL); - Inkscape::CanvasGrid::writeNewGridToRepr(this->getRepr(),document,static_cast(gridtype)); -} - /* * Restores window geometry from the document settings or defaults in prefs */ @@ -788,22 +782,42 @@ void sp_namedview_window_from_document(SPDesktop *desktop) SPNamedView *nv = desktop->namedview; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool geometry_from_file = (1 == prefs->getInt("/options/savewindowgeometry/value", 0)); + bool geometry_from_last = (2 == prefs->getInt("/options/savewindowgeometry/value", 0)); gint default_geometry = prefs->getInt("/options/defaultwindowsize/value", 1); bool new_document = (nv->window_width <= 0) || (nv->window_height <= 0); bool show_dialogs = true; // restore window size and position stored with the document - bool sizeSet = false; - - if ((geometry_from_file && nv->window_maximized) || (new_document && (default_geometry == 2))) { + if (geometry_from_last) { + // do nothing, as we already have code for that in interface.cpp + // TODO: Probably should not do similar things in two places + } else if ((geometry_from_file && nv->window_maximized) || (new_document && (default_geometry == 2))) { Gtk::Window *win = desktop->getToplevel(); if (win) { win->maximize(); } - sizeSet = true; - } else if (geometry_from_file && !nv->window_maximized) { - gint w = MIN(gdk_screen_width(), nv->window_width); - gint h = MIN(gdk_screen_height(), nv->window_height); + } else { + // gdk_screen_width() / gdk_screen_height() return the dimensions of all displays combined + // therefore we have to get the dimensions of one monitor explicitly (currently the primary monitor) + // TODO: account for multi-monitor setups (i.e. on which monitor do we want to display Inkscape?) + gint monitor_number; + GdkRectangle monitor_geometry; + monitor_number = gdk_screen_get_primary_monitor(gdk_screen_get_default()); + gdk_screen_get_monitor_geometry(gdk_screen_get_default(), monitor_number, &monitor_geometry); + + gint w = monitor_geometry.width; + gint h = monitor_geometry.height; + bool move_to_screen = false; + if (geometry_from_file and !new_document) { + w = MIN(w, nv->window_width); + h = MIN(h, nv->window_height); + move_to_screen = true; + } else if (default_geometry == 1) { + w *= NEWDOC_X_SCALE; + h *= NEWDOC_Y_SCALE; + } else if (default_geometry == 0) { + w = h = 0; // use the smallest possible window size; could be a factor like NEWDOC_X_SCALE in future + } if ((w > 0) && (h > 0)) { #ifndef WIN32 gint dx= 0; @@ -817,22 +831,14 @@ void sp_namedview_window_from_document(SPDesktop *desktop) show_dialogs = FALSE; } #endif - Geom::Point origin = calcAnchorPoint(nv->window_x, nv->window_y, w, h, MIN_ONSCREEN_DISTANCE); desktop->setWindowSize(w, h); - desktop->setWindowPosition(origin); - sizeSet = true; + if (move_to_screen) { + Geom::Point origin = calcAnchorPoint(nv->window_x, nv->window_y, w, h, MIN_ONSCREEN_DISTANCE); + desktop->setWindowPosition(origin); + } } } - if (!sizeSet && new_document && (default_geometry == 1)) - { - gint w = gdk_screen_width() * NEWDOC_X_SCALE; - gint h = gdk_screen_height() * NEWDOC_Y_SCALE; - Geom::Point origin = calcAnchorPoint(nv->window_x, nv->window_y, w, h, MIN_ONSCREEN_DISTANCE); - desktop->setWindowSize(w, h); - desktop->setWindowPosition(origin); - } - // restore zoom and view if (nv->zoom != 0 && nv->zoom != HUGE_VAL && !IS_NAN(nv->zoom) && nv->cx != HUGE_VAL && !IS_NAN(nv->cx) @@ -850,6 +856,12 @@ void sp_namedview_window_from_document(SPDesktop *desktop) } } +void SPNamedView::writeNewGrid(SPDocument *document,int gridtype) +{ + g_assert(this->getRepr() != NULL); + Inkscape::CanvasGrid::writeNewGridToRepr(this->getRepr(),document,static_cast(gridtype)); +} + bool SPNamedView::getSnapGlobal() const { return this->snap_manager.snapprefs.getSnapEnabledGlobally(); -- cgit v1.2.3 From 014489163050d8abe9e5c4949fb80f3c21b1c17b Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Mon, 13 Mar 2017 15:22:22 +0100 Subject: Replace rectangle based zooming by affine based zooming. This allows a rotation to be included in the drawing to window mapping. General code cleanup. Added documentation. Any change to zooming behavior is probably a bug. (bzr r15592) --- src/sp-namedview.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 166e90238..403b8a41b 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -839,18 +839,18 @@ void sp_namedview_window_from_document(SPDesktop *desktop) } } + // Cancel any history of transforms up to this point (must be before call to zoom). + desktop->clear_transform_history(); + // restore zoom and view if (nv->zoom != 0 && nv->zoom != HUGE_VAL && !IS_NAN(nv->zoom) && nv->cx != HUGE_VAL && !IS_NAN(nv->cx) && nv->cy != HUGE_VAL && !IS_NAN(nv->cy)) { - desktop->zoom_absolute(nv->cx, nv->cy, nv->zoom); + desktop->zoom_absolute_center_point( Geom::Point(nv->cx, nv->cy), nv->zoom ); } else if (desktop->getDocument()) { // document without saved zoom, zoom to its page desktop->zoom_page(); } - // cancel any history of zooms up to this point - desktop->zooms_past.clear(); - if (show_dialogs) { desktop->show_dialogs(); } @@ -1280,7 +1280,7 @@ void SPNamedView::translateGrids(Geom::Translate const &tr) { void SPNamedView::scrollAllDesktops(double dx, double dy, bool is_scrolling) { for(std::vector::iterator it=this->views.begin();it!=this->views.end();++it ) { - (*it)->scroll_world_in_svg_coords(dx, dy, is_scrolling); + (*it)->scroll_relative_in_svg_coords(dx, dy, is_scrolling); } } -- cgit v1.2.3 From f47466c701b2256b2ce232f6d311d2be47136eab Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Mon, 20 Mar 2017 21:12:31 +0100 Subject: Implement rotation via desktop to window affine. Remove rotation via viewbox. Still some work to do... (bzr r15603) --- src/sp-namedview.cpp | 98 +--------------------------------------------------- 1 file changed, 1 insertion(+), 97 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 403b8a41b..c40006a92 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -19,12 +19,7 @@ #include "event-log.h" #include <2geom/transforms.h> -#include "display/sp-canvas-group.h" -#include "display/canvas-bpath.h" -#include "display/canvas-temporary-item.h" -#include "display/canvas-temporary-item-list.h" #include "display/canvas-grid.h" -#include "display/curve.h" #include "util/units.h" #include "svg/svg-color.h" #include "xml/repr.h" @@ -34,15 +29,12 @@ #include "desktop-events.h" #include "sp-guide.h" -#include "sp-root.h" #include "sp-item-group.h" #include "sp-namedview.h" #include "preferences.h" #include "desktop.h" -#include "selection.h" -#include "object-set.h" -#include "inkscape.h" #include "conn-avoid-ref.h" // for defaultConnSpacing. +#include "sp-root.h" #include using Inkscape::DocumentUndo; @@ -80,7 +72,6 @@ SPNamedView::SPNamedView() : SPObjectGroup(), snap_manager(this) { this->pagecolor = 0; this->cx = 0; this->pageshadow = 0; - this->document_rotation = 0; this->window_width = 0; this->window_height = 0; this->window_maximized = 0; @@ -101,13 +92,9 @@ SPNamedView::SPNamedView() : SPObjectGroup(), snap_manager(this) { this->default_layer_id = 0; this->connector_spacing = defaultConnSpacing; - this->page_border_rotated = NULL; } SPNamedView::~SPNamedView() { - if(!this->getViewList().empty()) { // >0 Desktops - this->getViewList()[0]->remove_temporary_canvasitem(this->page_border_rotated); - } } static void sp_namedview_generate_old_grid(SPNamedView * /*nv*/, SPDocument *document, Inkscape::XML::Node *repr) { @@ -225,7 +212,6 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { this->readAttr( "inkscape:zoom" ); this->readAttr( "inkscape:cx" ); this->readAttr( "inkscape:cy" ); - this->readAttr( "inkscape:document-rotation" ); this->readAttr( "inkscape:window-width" ); this->readAttr( "inkscape:window-height" ); this->readAttr( "inkscape:window-x" ); @@ -423,11 +409,6 @@ void SPNamedView::set(unsigned int key, const gchar* value) { this->cy = value ? g_ascii_strtod(value, NULL) : HUGE_VAL; // HUGE_VAL means not set this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; - case SP_ATTR_INKSCAPE_DOCUMENT_ROTATION: - this->document_rotation = value ? g_ascii_strtod(value, NULL) : 0; - sp_namedview_set_document_rotation(this); - this->requestModified(SP_OBJECT_MODIFIED_FLAG); - break; case SP_ATTR_INKSCAPE_WINDOW_WIDTH: this->window_width = value? atoi(value) : -1; // -1 means not set this->requestModified(SP_OBJECT_MODIFIED_FLAG); @@ -970,81 +951,6 @@ static void sp_namedview_lock_guides(SPNamedView *nv) } } -//void sp_namedview_doc_rotate_guides(SPNamedView *nv) -//{ -// bool saved = DocumentUndo::getUndoSensitive(nv->document); -// DocumentUndo::setUndoSensitive(nv->document, false); -// SPRoot * root = nv->document->getRoot(); -// Geom::Point page_center = root->viewBox.midpoint() * root->vbt; -// Geom::Affine rot = Geom::identity(); -// rot *= Geom::Translate(page_center).inverse(); -// rot *= Geom::Rotate(Geom::rad_from_deg((nv->document_rotation - root->get_rotation()) * -1)); -// rot *= Geom::Translate(page_center); -// for(std::vector::iterator it=nv->guides.begin();it!=nv->guides.end();++it ) { -// Geom::Point const on_line = (*it)->getPoint() * rot ; -// (*it)->moveto(on_line, true); -// Geom::Affine rot_normal_affine = Geom::Rotate(Geom::rad_from_deg((nv->document_rotation - root->get_rotation()) * -1)); -// Geom::Point const rot_normal = (*it)->getNormal() * rot_normal_affine; -// (*it)->set_normal(rot_normal, true); -// } -// DocumentUndo::setUndoSensitive(nv->document, saved); -// nv->document->setModifiedSinceSave(); -//} - -void sp_namedview_set_document_rotation(SPNamedView *nv) -{ - if ( nv->document->getRoot()->get_rotation() == nv->document_rotation) return; - if(!nv->getViewList().empty()) { // >0 Desktops - SPDesktop *desktop = nv->getViewList()[0]; - desktop->remove_temporary_canvasitem(nv->page_border_rotated); - SPRoot * root = nv->document->getRoot(); - SPCurve *c = new SPCurve(); - c->moveto(root->viewBox.min()); - c->lineto(Geom::Point(root->viewBox.max()[Geom::X],root->viewBox.min()[Geom::Y])); - c->lineto(Geom::Point(root->viewBox.max()[Geom::X],root->viewBox.max()[Geom::Y])); - c->lineto(Geom::Point(root->viewBox.min()[Geom::X],root->viewBox.max()[Geom::Y])); - c->closepath(); - Geom::Point page_center = root->viewBox.midpoint(); - Geom::PathVector const box = c->get_pathvector(); - Geom::Affine rot = Geom::identity(); - rot *= Geom::Translate(page_center).inverse(); - rot *= Geom::Rotate(Geom::rad_from_deg(nv->document_rotation * -1)); - rot *= Geom::Translate(page_center); - if (nv->document_rotation) { - SPCanvasItem *canvas_border = sp_canvas_bpath_new(desktop->getTempGroup(), c, true); - sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(canvas_border), 0xFF00009A, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); - sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(canvas_border), 0, SP_WIND_RULE_NONZERO); - sp_canvas_item_affine_absolute(canvas_border, rot * root->vbt); - nv->page_border_rotated = desktop->add_temporary_canvasitem(canvas_border, 0); - } - //sp_namedview_doc_rotate_guides(nv); - nv->document->getRoot()->set_rotation(nv->document_rotation); - c->unref(); - } - if (nv->document_rotation) { - nv->showborder = FALSE; - } else { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - nv->showborder = prefs->getBool("/template/base/showborder", 1.0); - } - - SPDesktop * desktop = SP_ACTIVE_DESKTOP; - if (desktop) { -//TODO: Remove knots of shapes on selected items -// Inkscape::Selection * sel = desktop->getSelection(); -// std::vector il(sel->items().begin(), sel->items().end()); -// for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ -// SPItem *item = *l; -// sel->remove(item->getRepr()); -// sel->add(item->getRepr()); -// } - SPObject *updated = desktop->getDocument()->getRoot(); - if (updated) { - updated->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); - } - } -} - static void sp_namedview_show_single_guide(SPGuide* guide, bool show) { if (show) { @@ -1059,8 +965,6 @@ static void sp_namedview_lock_single_guide(SPGuide* guide, bool locked) guide->set_locked(locked, true); } - - void sp_namedview_toggle_guides(SPDocument *doc, Inkscape::XML::Node *repr) { unsigned int v; -- cgit v1.2.3