From cb0223da226fadcedaaae8cadce0c52bb1eeca56 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Wed, 19 Nov 2014 21:34:11 +0100 Subject: units: remove a remnant from old code. There should be only one UnitTable instantiated. (bzr r13737) --- src/util/units.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/util') diff --git a/src/util/units.cpp b/src/util/units.cpp index eb4a313e0..3d635e2d2 100644 --- a/src/util/units.cpp +++ b/src/util/units.cpp @@ -206,7 +206,6 @@ bool Unit::compatibleWith(Unit const *u) const } bool Unit::compatibleWith(Glib::ustring const &u) const { - static UnitTable unit_table; return compatibleWith(unit_table.getUnit(u)); } -- 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/util/units.cpp | 24 ++++++++++++++++++++++++ src/util/units.h | 3 +++ 2 files changed, 27 insertions(+) (limited to 'src/util') diff --git a/src/util/units.cpp b/src/util/units.cpp index 3d635e2d2..8ad3560dd 100644 --- a/src/util/units.cpp +++ b/src/util/units.cpp @@ -21,6 +21,8 @@ #include #include +#include <2geom/coord.h> + #include "util/units.h" #include "path-prefix.h" #include "streq.h" @@ -279,6 +281,28 @@ Unit const *UnitTable::getUnit(SVGLength::Unit u) const return &_empty_unit; } +Unit const *UnitTable::findUnit(double factor, UnitType type) const +{ + const double eps = factor * 0.01; // allow for 1% deviation + + UnitCodeMap::const_iterator cit = _unit_map.begin(); + while (cit != _unit_map.end()) { + if (cit->second->type == type) { + if (Geom::are_near(cit->second->factor, factor, eps)) { + // unit found! + break; + } + } + ++cit; + } + + if (cit != _unit_map.end()) { + return cit->second; + } else { + return getUnit(_primary_unit[type]); + } +} + Quantity UnitTable::parseQuantity(Glib::ustring const &q) const { Glib::MatchInfo match_info; diff --git a/src/util/units.h b/src/util/units.h index efe1dbec7..13777fd1b 100644 --- a/src/util/units.h +++ b/src/util/units.h @@ -141,6 +141,9 @@ public: /** Retrieve a given unit based on its string identifier */ Unit const *getUnit(Glib::ustring const &name) const; Unit const *getUnit(char const *name) const; + + /** Try to find a unit based on its conversion factor to the primary */ + Unit const *findUnit(double factor, UnitType type) const; /** Retrieve a given unit based on its SVGLength unit */ Unit const *getUnit(SVGLength::Unit u) const; -- cgit v1.2.3 From 9827a6723d62935725b67b1bf55eea08bbbab527 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Tue, 25 Nov 2014 15:20:24 +0100 Subject: Move 'm' handling code from document.cpp to svg-length.cpp and units.cpp to match handling of 'ft'. (bzr r13758) --- src/util/units.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/util') diff --git a/src/util/units.cpp b/src/util/units.cpp index 8ad3560dd..2c72ec3ae 100644 --- a/src/util/units.cpp +++ b/src/util/units.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -46,6 +47,7 @@ enum UnitCode { UNIT_CODE_CM = MAKE_UNIT_CODE('c','m'), UNIT_CODE_IN = MAKE_UNIT_CODE('i','n'), UNIT_CODE_FT = MAKE_UNIT_CODE('f','t'), + UNIT_CODE_MT = MAKE_UNIT_CODE('m',' '), UNIT_CODE_EM = MAKE_UNIT_CODE('e','m'), UNIT_CODE_EX = MAKE_UNIT_CODE('e','x'), UNIT_CODE_PERCENT = MAKE_UNIT_CODE('%',0) @@ -73,6 +75,7 @@ unsigned const svg_length_lookup[] = { UNIT_CODE_CM, UNIT_CODE_IN, UNIT_CODE_FT, + UNIT_CODE_MT, UNIT_CODE_EM, UNIT_CODE_EX, UNIT_CODE_PERCENT -- cgit v1.2.3