From f0f92e6aad8d897fa206474754a7bd09220c993d Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Thu, 20 Nov 2014 10:22:42 +0100 Subject: Rename variable to better express its use. (units -> page_size_units) (bzr r13740) --- src/sp-namedview.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 8b28347f1..b68421dc6 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -72,7 +72,7 @@ SPNamedView::SPNamedView() : SPObjectGroup(), snap_manager(this) { this->guidehicolor = 0; this->views = NULL; this->borderlayer = 0; - this->units = NULL; + this->page_size_units = NULL; this->window_x = 0; this->cy = 0; this->window_y = 0; @@ -581,6 +581,7 @@ void SPNamedView::set(unsigned int key, const gchar* value) { break; } case SP_ATTR_UNITS: { + // Only used in "Custom size" section of Document Properties dialog Inkscape::Util::Unit const *new_unit = NULL; if (value) { @@ -599,7 +600,7 @@ void SPNamedView::set(unsigned int key, const gchar* value) { /* fixme: Don't use g_log (see above). */ } } - this->units = new_unit; + this->page_size_units = new_unit; this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; } -- cgit v1.2.3 From bad0504958a10f1b99db3ae2557305541f388a52 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Mon, 24 Nov 2014 20:56:53 +0100 Subject: Units: make it absolutely clear that Document properties unit dropdown is for UI Display Units. Upon document load, calculate the units used for SVG values, if a viewbox is available. If not, default to "px" SVG units. Change all code to use either Display units OR svg units. (bzr r13751) --- src/sp-namedview.cpp | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index b68421dc6..09d383e3c 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -76,7 +76,9 @@ SPNamedView::SPNamedView() : SPObjectGroup(), snap_manager(this) { this->window_x = 0; this->cy = 0; this->window_y = 0; - this->doc_units = NULL; + this->svg_units = unit_table.getUnit("px"); // legacy behavior: if no viewbox present, default to 'px' units + this->display_units = NULL; + this->page_size_units = NULL; this->pagecolor = 0; this->cx = 0; this->pageshadow = 0; @@ -262,6 +264,14 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { // backwards compatibility with grid settings (pre 0.46) sp_namedview_generate_old_grid(this, document, repr); + + // If viewbox defined: try to calculate the SVG unit from document width and viewbox + if (document->getRoot()->viewBox_set) { + Inkscape::Util::Quantity svgwidth = document->getWidth(); + Geom::Rect viewbox = document->getRoot()->viewBox; + double factor = svgwidth.value(unit_table.primary(Inkscape::Util::UNIT_TYPE_LINEAR)) / viewbox.width(); + svg_units = unit_table.findUnit(factor, Inkscape::Util::UNIT_TYPE_LINEAR); + } } void SPNamedView::release() { @@ -540,22 +550,13 @@ void SPNamedView::set(unsigned int key, const gchar* value) { this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_INKSCAPE_DOCUMENT_UNITS: { - /* The default unit if the document doesn't override this: e.g. for files saved as + /* The default display unit if the document doesn't override this: e.g. for files saved as * `plain SVG', or non-inkscape files, or files created by an inkscape 0.40 & * earlier. * - * Here we choose `px': useful for screen-destined SVGs, and fewer bug reports - * about "not the same numbers as what's in the SVG file" (at least for documents - * without a viewBox attribute on the root element). Similarly, it's also - * the most reliable unit (i.e. least likely to be wrong in different viewing - * conditions) for viewBox-less SVG files given that it's the unit that inkscape - * uses for all coordinates. + * Note that these units are not the same as the units used for the values in SVG! * - * For documents that do have a viewBox attribute on the root element, it - * might be better if we used either viewBox coordinates or if we used the unit of - * say the width attribute of the root element. However, these pose problems - * in that they aren't in general absolute units as currently required by - * doc_units. + * We default to `px'. */ static Inkscape::Util::Unit const *px = unit_table.getUnit("px"); Inkscape::Util::Unit const *new_unit = px; @@ -576,7 +577,7 @@ void SPNamedView::set(unsigned int key, const gchar* value) { /* fixme: Don't use g_log (see above). */ } } - this->doc_units = new_unit; + this->display_units = new_unit; this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; } @@ -1133,7 +1134,13 @@ double SPNamedView::getMarginLength(gchar const * const key, */ Inkscape::Util::Unit const * SPNamedView::getDefaultUnit() const { - return doc_units ? doc_units : unit_table.getUnit("pt"); + return display_units ? display_units : unit_table.getUnit("pt"); +} + +Inkscape::Util::Unit const & SPNamedView::getSVGUnit() const +{ + assert(svg_units); + return *svg_units; } /** -- cgit v1.2.3 From 970401eaa2de197733cadc350848dc5cd4c007a5 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Wed, 26 Nov 2014 20:23:03 +0100 Subject: Change default display unit to 'px'. (bzr r13773) --- src/sp-namedview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-namedview.cpp') diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 09d383e3c..c505186e9 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -1134,7 +1134,7 @@ double SPNamedView::getMarginLength(gchar const * const key, */ Inkscape::Util::Unit const * SPNamedView::getDefaultUnit() const { - return display_units ? display_units : unit_table.getUnit("pt"); + return display_units ? display_units : unit_table.getUnit("px"); } Inkscape::Util::Unit const & SPNamedView::getSVGUnit() const -- cgit v1.2.3 From c94cbdb38d7ac2f70a669035b090140eae3cc05b Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Wed, 26 Nov 2014 20:45:29 +0100 Subject: Change getDefaultUnit() to getDisplayUnit() to better reflect value returned by function. (bzr r13774) --- 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 c505186e9..1817e74e0 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -1130,9 +1130,9 @@ double SPNamedView::getMarginLength(gchar const * const key, /** * Returns namedview's default unit. - * If no default unit is set, "pt" is returned + * If no default unit is set, "px" is returned */ -Inkscape::Util::Unit const * SPNamedView::getDefaultUnit() const +Inkscape::Util::Unit const * SPNamedView::getDisplayUnit() const { return display_units ? display_units : unit_table.getUnit("px"); } -- cgit v1.2.3