diff options
| author | Jabier Arraiza Cenoz <jabier.arraiza@marker.es> | 2016-03-14 16:37:50 +0000 |
|---|---|---|
| committer | Jabiertxof <jtx@jtx.marker.es> | 2016-03-14 16:37:50 +0000 |
| commit | b8d22beef5345210ad27cdc2685083aeae6f8f3b (patch) | |
| tree | d69b8bfd19d3627a8425a1b265c2abf229b05354 /src/util | |
| parent | fixes for update to trunk (diff) | |
| parent | "Relative to" option for node alignment. (diff) | |
| download | inkscape-b8d22beef5345210ad27cdc2685083aeae6f8f3b.tar.gz inkscape-b8d22beef5345210ad27cdc2685083aeae6f8f3b.zip | |
update to trunk
(bzr r13708.1.39)
Diffstat (limited to 'src/util')
| -rw-r--r-- | src/util/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/util/Makefile_insert | 1 | ||||
| -rw-r--r-- | src/util/glib-list-iterators.h | 237 | ||||
| -rw-r--r-- | src/util/units.cpp | 70 | ||||
| -rw-r--r-- | src/util/units.h | 8 |
5 files changed, 64 insertions, 253 deletions
diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index 8fd8c8c66..9680b6377 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -24,7 +24,6 @@ set(util_SRC format.h forward-pointer-iterator.h function.h - glib-list-iterators.h list-container-test.h list-container.h list-copy.h diff --git a/src/util/Makefile_insert b/src/util/Makefile_insert index c23dffbca..2a778e660 100644 --- a/src/util/Makefile_insert +++ b/src/util/Makefile_insert @@ -25,7 +25,6 @@ util_libutil_a_SOURCES = \ util/format.h \ util/forward-pointer-iterator.h \ util/function.h \ - util/glib-list-iterators.h \ util/list.h \ util/list-container.h \ util/list-copy.h \ diff --git a/src/util/glib-list-iterators.h b/src/util/glib-list-iterators.h deleted file mode 100644 index 6244e5b18..000000000 --- a/src/util/glib-list-iterators.h +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Inkscape::Util::GSListIterator - STL iterator for GSList - * Inkscape::Util::GSListConstIterator - STL iterator for GSList - * Inkscape::Util::GListIterator - STL iterator for GList - * Inkscape::Util::GListConstIterator - STL iterator for GList - * - * Authors: - * MenTaLguY <mental@rydia.net> - * - * Copyright (C) 2005 MenTaLguY - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#ifndef SEEN_INKSCAPE_GLIB_LIST_ITERATORS_H -#define SEEN_INKSCAPE_GLIB_LIST_ITERATORS_H - -#include <cstddef> -#include <iterator> -#include <glib.h> - -namespace Inkscape { - -namespace Util { - -template <typename T> class GSListConstIterator; -template <typename T> class GSListIterator; -template <typename T> class GListConstIterator; -template <typename T> class GListIterator; - -template <typename T> -class GSListConstIterator<T *> { -public: - typedef std::forward_iterator_tag iterator_category; - typedef T * const value_type G_GNUC_MAY_ALIAS; - typedef std::ptrdiff_t difference_type; - typedef value_type *pointer; - typedef value_type &reference; - - GSListConstIterator(GSList const *list) : _list(list) {} - // default copy - // default assign - GSList const *list() const { return _list; } - - reference operator*() const { - return *reinterpret_cast<pointer>(&_list->data); - } - - bool operator==(GSListConstIterator const &other) { - return other._list == _list; - } - bool operator!=(GSListConstIterator const &other) { - return other._list != _list; - } - - GSListConstIterator &operator++() { - _list = _list->next; - return *this; - } - GSListConstIterator operator++(int) { - GSListConstIterator saved=*this; - _list = _list->next; - return saved; - } - -private: - GSList const *_list; -}; - -template <typename T> -class GSListIterator<T *> { -public: - typedef std::forward_iterator_tag iterator_category; - typedef T *value_type G_GNUC_MAY_ALIAS; - typedef std::ptrdiff_t difference_type; - typedef value_type *pointer; - typedef value_type &reference; - typedef value_type const &const_reference; - - GSListIterator(GSList *list) : _list(list) {} - // default copy - // default assign - operator GSListConstIterator<T *>() const { return _list; } - GSList const *list() const { return _list; } - GSList *list() { return _list; } - - const_reference operator*() const { - return *reinterpret_cast<pointer>(&_list->data); - } - reference operator*() { - return *reinterpret_cast<pointer>(&_list->data); - } - - bool operator==(GSListIterator const &other) { - return other._list == _list; - } - bool operator!=(GSListIterator const &other) { - return other._list != _list; - } - - GSListIterator &operator++() { - _list = _list->next; - return *this; - } - GSListIterator operator++(int) { - GSListIterator saved=*this; - _list = _list->next; - return saved; - } - -private: - GSList *_list; -}; - -template <typename T> -class GListConstIterator<T *> { -public: - typedef std::bidirectional_iterator_tag iterator_category; - typedef T * const value_type G_GNUC_MAY_ALIAS; - typedef std::ptrdiff_t difference_type; - typedef value_type *pointer; - typedef value_type &reference; - - GListConstIterator(GList const *list) : _list(list) {} - // default copy - // default assign - GList const *list() const { return _list; } - - reference operator*() const { - return *reinterpret_cast<pointer>(&_list->data); - } - - bool operator==(GListConstIterator const &other) { - return other._list == _list; - } - bool operator!=(GListConstIterator const &other) { - return other._list != _list; - } - - GListConstIterator &operator++() { - _list = _list->next; - return *this; - } - GListConstIterator operator++(int) { - GListConstIterator saved=*this; - _list = _list->next; - return saved; - } - - GListConstIterator &operator--() { - _list = _list->prev; - return *this; - } - GListConstIterator operator--(int) { - GListConstIterator saved=*this; - _list = _list->prev; - return saved; - } - -private: - GList const *_list; -}; - -template <typename T> -class GListIterator<T *> { -public: - typedef std::bidirectional_iterator_tag iterator_category; - typedef T *value_type G_GNUC_MAY_ALIAS; - typedef std::ptrdiff_t difference_type; - typedef value_type *pointer; - typedef value_type &reference; - typedef value_type const &const_reference; - - GListIterator(GList *list) : _list(list) {} - // default copy - // default assign - operator GSListConstIterator<T *>() const { - return reinterpret_cast<GSList *>(_list); - } - operator GSListIterator<T *>() const { - return reinterpret_cast<GSList *>(_list); - } - operator GListConstIterator<T *>() const { return _list; } - GList const *list() const { return _list; } - GList *list() { return _list; } - - const_reference operator*() const { - return *reinterpret_cast<pointer>(&_list->data); - } - reference operator*() { return *reinterpret_cast<pointer>(&_list->data); } - - bool operator==(GListIterator const &other) { - return other._list == _list; - } - bool operator!=(GListIterator const &other) { - return other._list != _list; - } - - GListIterator &operator++() { - _list = _list->next; - return *this; - } - GListIterator operator++(int) { - GListIterator saved=*this; - _list = _list->next; - return saved; - } - - GListIterator &operator--() { - _list = _list->prev; - return *this; - } - GListIterator operator--(int) { - GListIterator saved=*this; - _list = _list->prev; - return saved; - } - -private: - GList *_list; -}; - -} - -} - -#endif -/* - Local Variables: - mode:c++ - c-file-style:"stroustrup" - c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) - indent-tabs-mode:nil - fill-column:99 - End: -*/ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/util/units.cpp b/src/util/units.cpp index 2c72ec3ae..2e7a3b1d2 100644 --- a/src/util/units.cpp +++ b/src/util/units.cpp @@ -81,7 +81,21 @@ unsigned const svg_length_lookup[] = { UNIT_CODE_PERCENT }; - +/* From SP_CSS_UNIT_* to unit */ +unsigned const sp_css_unit_lookup[] = { + 0, + UNIT_CODE_PX, + UNIT_CODE_PT, + UNIT_CODE_PC, + UNIT_CODE_MM, + UNIT_CODE_CM, + UNIT_CODE_IN, + UNIT_CODE_EM, + UNIT_CODE_EX, + UNIT_CODE_PERCENT + // UNIT_CODE_FT Missing, + // UNIT_CODE_MT Missing, +}; // maps unit codes obtained from their abbreviations to their SVGLength unit indexes typedef INK_UNORDERED_MAP<unsigned, SVGLength::Unit> UnitCodeLookup; @@ -213,6 +227,10 @@ bool Unit::compatibleWith(Glib::ustring const &u) const { return compatibleWith(unit_table.getUnit(u)); } +bool Unit::compatibleWith(char const *u) const +{ + return compatibleWith(unit_table.getUnit(u)); +} bool Unit::operator==(Unit const &other) const { @@ -231,7 +249,29 @@ int Unit::svgUnit() const return 0; } - +double Unit::convert(double from_dist, Unit const *to) const +{ + // Percentage + if (to->type == UNIT_TYPE_DIMENSIONLESS) { + return from_dist * to->factor; + } + + // Incompatible units + if (type != to->type) { + return -1; + } + + // Compatible units + return from_dist * factor / to->factor; +} +double Unit::convert(double from_dist, Glib::ustring const &to) const +{ + return convert(from_dist, unit_table.getUnit(to)); +} +double Unit::convert(double from_dist, char const *to) const +{ + return convert(from_dist, unit_table.getUnit(to)); +} Unit UnitTable::_empty_unit; @@ -283,6 +323,19 @@ Unit const *UnitTable::getUnit(SVGLength::Unit u) const } return &_empty_unit; } +/* SP_CSS_UNIT lookup */ +Unit const *UnitTable::getUnit(unsigned int u) const +{ + if (u == 0 || u > 9) { + return &_empty_unit; + } + + UnitCodeMap::const_iterator f = _unit_map.find(sp_css_unit_lookup[u]); + if (f != _unit_map.end()) { + return &(*f->second); + } + return &_empty_unit; +} Unit const *UnitTable::findUnit(double factor, UnitType type) const { @@ -505,18 +558,7 @@ Glib::ustring Quantity::string() const { double Quantity::convert(double from_dist, Unit const *from, Unit const *to) { - // Percentage - if (to->type == UNIT_TYPE_DIMENSIONLESS) { - return from_dist * to->factor; - } - - // Incompatible units - if (from->type != to->type) { - return -1; - } - - // Compatible units - return from_dist * from->factor / to->factor; + return from->convert(from_dist, to); } double Quantity::convert(double from_dist, Glib::ustring const &from, Unit const *to) { diff --git a/src/util/units.h b/src/util/units.h index 13777fd1b..a840a37ec 100644 --- a/src/util/units.h +++ b/src/util/units.h @@ -75,6 +75,11 @@ public: /** Get SVG unit code. */ int svgUnit() const; + + /** Convert value from this unit **/ + double convert(double from_dist, Unit const *to) const; + double convert(double from_dist, Glib::ustring const &to) const; + double convert(double from_dist, char const *to) const; }; class Quantity @@ -147,6 +152,9 @@ public: /** Retrieve a given unit based on its SVGLength unit */ Unit const *getUnit(SVGLength::Unit u) const; + + /** Retrieve a given unit based on its SP_CSS_UNIT */ + Unit const *getUnit(unsigned int u) const; /** Retrieve a quantity based on its string identifier */ Quantity parseQuantity(Glib::ustring const &q) const; |
