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