summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthew Petroff <matthew@mpetroff.net>2013-07-09 20:42:04 +0000
committerMatthew Petroff <matthew@mpetroff.net>2013-07-09 20:42:04 +0000
commit9dc7b786c9ef31060012ea4ae13a8188548b4f62 (patch)
treef8b063fe5b6da450ba252f2275aa342e2627b420 /src
parentSwitch setWidth and setHeight to use Quantity and switch to forward declarati... (diff)
downloadinkscape-9dc7b786c9ef31060012ea4ae13a8188548b4f62.tar.gz
inkscape-9dc7b786c9ef31060012ea4ae13a8188548b4f62.zip
Ported sp-namedview.cpp (todo: fix a bunch of things).
(bzr r12380.1.8)
Diffstat (limited to 'src')
-rw-r--r--src/sp-namedview.cpp27
-rw-r--r--src/sp-namedview.h11
-rw-r--r--src/ui/dialog/clonetiler.cpp2
-rw-r--r--src/ui/dialog/document-properties.cpp4
-rw-r--r--src/ui/dialog/export.cpp4
-rw-r--r--src/ui/dialog/guides.cpp2
-rw-r--r--src/ui/widget/page-sizer.cpp4
-rw-r--r--src/ui/widget/selected-style.cpp2
-rw-r--r--src/util/units.cpp21
-rw-r--r--src/util/units.h1
-rw-r--r--src/widgets/desktop-widget.cpp10
-rw-r--r--src/widgets/lpe-toolbar.cpp2
-rw-r--r--src/widgets/measure-toolbar.cpp2
-rw-r--r--src/widgets/node-toolbar.cpp2
-rw-r--r--src/widgets/rect-toolbar.cpp2
-rw-r--r--src/widgets/select-toolbar.cpp2
-rw-r--r--src/widgets/stroke-style.cpp6
-rw-r--r--src/widgets/text-toolbar.cpp2
18 files changed, 66 insertions, 40 deletions
diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index 5184d37a9..c7301f9bd 100644
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
@@ -22,7 +22,7 @@
#include "display/canvas-grid.h"
#include "display/guideline.h"
-#include "helper/units.h"
+#include "util/units.h"
#include "svg/svg-color.h"
#include "xml/repr.h"
#include "attributes.h"
@@ -287,6 +287,8 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
{
SPNamedView *nv = SP_NAMEDVIEW(object);
+ static Inkscape::Util::UnitTable unit_table;
+
switch (key) {
case SP_ATTR_VIEWONLY:
nv->editable = (!value);
@@ -549,18 +551,19 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
* in that they aren't in general absolute units as currently required by
* doc_units.
*/
- SPUnit const *new_unit = &sp_unit_get_by_id(SP_UNIT_PX);
+ static Inkscape::Util::Unit px = unit_table.getUnit("px");
+ Inkscape::Util::Unit const *new_unit = &px;
if (value) {
- SPUnit const *const req_unit = sp_unit_get_by_abbreviation(value);
- if ( req_unit == NULL ) {
+ Inkscape::Util::Unit u = unit_table.getUnit(value);
+ Inkscape::Util::Unit const *const req_unit = &u;
+ if ( !unit_table.hasUnit(value) ) {
g_warning("Unrecognized unit `%s'", value);
/* fixme: Document errors should be reported in the status bar or
* the like (e.g. as per
* http://www.w3.org/TR/SVG11/implnote.html#ErrorProcessing); g_log
* should be only for programmer errors. */
- } else if ( req_unit->base == SP_UNIT_ABSOLUTE ||
- req_unit->base == SP_UNIT_DEVICE ) {
+ } else if ( req_unit->isAbsolute() ) {
new_unit = req_unit;
} else {
g_warning("Document units must be absolute like `mm', `pt' or `px', but found `%s'",
@@ -573,18 +576,18 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
break;
}
case SP_ATTR_UNITS: {
- SPUnit const *new_unit = NULL;
+ Inkscape::Util::Unit const *new_unit = NULL;
if (value) {
- SPUnit const *const req_unit = sp_unit_get_by_abbreviation(value);
- if ( req_unit == NULL ) {
+ Inkscape::Util::Unit u = unit_table.getUnit(value);
+ Inkscape::Util::Unit const *const req_unit = &u;
+ if ( !unit_table.hasUnit(value) ) {
g_warning("Unrecognized unit `%s'", value);
/* fixme: Document errors should be reported in the status bar or
* the like (e.g. as per
* http://www.w3.org/TR/SVG11/implnote.html#ErrorProcessing); g_log
* should be only for programmer errors. */
- } else if ( req_unit->base == SP_UNIT_ABSOLUTE ||
- req_unit->base == SP_UNIT_DEVICE ) {
+ } else if ( req_unit->isAbsolute() ) {
new_unit = req_unit;
} else {
g_warning("Document units must be absolute like `mm', `pt' or `px', but found `%s'",
@@ -1130,7 +1133,7 @@ double SPNamedView::getMarginLength(gchar const * const key,
SPMetric SPNamedView::getDefaultMetric() const
{
if (doc_units) {
- return sp_unit_get_metric(doc_units);
+ return (SPMetric) doc_units->metric();
} else {
return SP_PT;
}
diff --git a/src/sp-namedview.h b/src/sp-namedview.h
index a84368c86..f9629f0c6 100644
--- a/src/sp-namedview.h
+++ b/src/sp-namedview.h
@@ -28,10 +28,11 @@
G_BEGIN_DECLS
-struct SPUnit;
-
namespace Inkscape {
-class CanvasGrid;
+ class CanvasGrid;
+ namespace Util {
+ class Unit;
+ }
}
enum {
@@ -59,8 +60,8 @@ struct SPNamedView : public SPObjectGroup {
GSList * grids;
bool grids_visible;
- SPUnit const *doc_units;
- SPUnit const *units;
+ Inkscape::Util::Unit const *doc_units;
+ Inkscape::Util::Unit const *units;
GQuark default_layer_id;
diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
index 753320ab9..00bb6f0e2 100644
--- a/src/ui/dialog/clonetiler.cpp
+++ b/src/ui/dialog/clonetiler.cpp
@@ -1093,7 +1093,7 @@ CloneTiler::CloneTiler (void) :
// unitmenu
GtkWidget *u = sp_unit_selector_new (SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE);
- sp_unit_selector_set_unit (SP_UNIT_SELECTOR(u), sp_desktop_namedview(SP_ACTIVE_DESKTOP)->doc_units);
+ //sp_unit_selector_set_unit (SP_UNIT_SELECTOR(u), sp_desktop_namedview(SP_ACTIVE_DESKTOP)->doc_units);
{
// Width spinbutton
diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp
index d335fb303..af462a1df 100644
--- a/src/ui/dialog/document-properties.cpp
+++ b/src/ui/dialog/document-properties.cpp
@@ -1431,8 +1431,8 @@ void DocumentProperties::update()
_rcp_bord.setRgba32 (nv->bordercolor);
_rcb_shad.setActive (nv->showpageshadow);
- if (nv->doc_units)
- _rum_deflt.setUnit (nv->doc_units);
+ //if (nv->doc_units)
+ // _rum_deflt.setUnit (nv->doc_units);
double const doc_w_px = sp_desktop_document(dt)->getWidth();
double const doc_h_px = sp_desktop_document(dt)->getHeight();
diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp
index a851503fe..25300cfc0 100644
--- a/src/ui/dialog/export.cpp
+++ b/src/ui/dialog/export.cpp
@@ -200,8 +200,8 @@ Export::Export (void) :
earlier than that */
unit_selector = Glib::wrap(sp_unit_selector_new (SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE));
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- if (desktop)
- sp_unit_selector_set_unit (SP_UNIT_SELECTOR(unit_selector->gobj()), sp_desktop_namedview(desktop)->doc_units);
+ //if (desktop)
+ // sp_unit_selector_set_unit (SP_UNIT_SELECTOR(unit_selector->gobj()), sp_desktop_namedview(desktop)->doc_units);
unitbox.pack_end(*unit_selector, false, false, 0);
unitbox.pack_end(units_label, false, false, 3);
diff --git a/src/ui/dialog/guides.cpp b/src/ui/dialog/guides.cpp
index 51bbc7d9a..9a7b19c35 100644
--- a/src/ui/dialog/guides.cpp
+++ b/src/ui/dialog/guides.cpp
@@ -230,7 +230,7 @@ void GuidelinePropertiesDialog::_setup() {
_unit_menu.setUnitType(UNIT_TYPE_LINEAR);
_unit_menu.setUnit("px");
if (_desktop->namedview->doc_units) {
- _unit_menu.setUnit( sp_unit_get_abbreviation(_desktop->namedview->doc_units) );
+ //_unit_menu.setUnit( sp_unit_get_abbreviation(_desktop->namedview->doc_units) );
}
_spin_angle.setUnit(_angle_unit_status);
diff --git a/src/ui/widget/page-sizer.cpp b/src/ui/widget/page-sizer.cpp
index 884f9ea0a..14e280f6d 100644
--- a/src/ui/widget/page-sizer.cpp
+++ b/src/ui/widget/page-sizer.cpp
@@ -316,9 +316,9 @@ PageSizer::PageSizer(Registry & _wr)
SPNamedView *nv = sp_desktop_namedview(dt);
_wr.setUpdating (true);
if (nv->units) {
- _dimensionUnits.setUnit(nv->units);
+ //_dimensionUnits.setUnit(nv->units);
} else if (nv->doc_units) {
- _dimensionUnits.setUnit(nv->doc_units);
+ //_dimensionUnits.setUnit(nv->doc_units);
}
_wr.setUpdating (false);
diff --git a/src/ui/widget/selected-style.cpp b/src/ui/widget/selected-style.cpp
index 18dbb984b..d6e2406c9 100644
--- a/src/ui/widget/selected-style.cpp
+++ b/src/ui/widget/selected-style.cpp
@@ -476,7 +476,7 @@ SelectedStyle::setDesktop(SPDesktop *desktop)
this )
));
- _sw_unit = const_cast<SPUnit*>(sp_desktop_namedview(desktop)->doc_units);
+ //_sw_unit = const_cast<SPUnit*>(sp_desktop_namedview(desktop)->doc_units);
// Set the doc default unit active in the units list
gint length = g_slist_length(_unit_mis);
diff --git a/src/util/units.cpp b/src/util/units.cpp
index a51eb2570..6c225f717 100644
--- a/src/util/units.cpp
+++ b/src/util/units.cpp
@@ -106,6 +106,27 @@ int Unit::svgUnit() const {
return 0;
}
+/** Temporary - get metric. */
+int Unit::metric() const {
+ if (!abbr.compare("mm"))
+ return 1;
+ if (!abbr.compare("cm"))
+ return 2;
+ if (!abbr.compare("in"))
+ return 3;
+ if (!abbr.compare("ft"))
+ return 4;
+ if (!abbr.compare("pt"))
+ return 5;
+ if (!abbr.compare("pc"))
+ return 6;
+ if (!abbr.compare("px"))
+ return 7;
+ if (!abbr.compare("m"))
+ return 8;
+ return 0;
+}
+
/**
* Initializes the unit tables and identifies the primary unit types.
*
diff --git a/src/util/units.h b/src/util/units.h
index 0ea84bfbb..64eb4a665 100644
--- a/src/util/units.h
+++ b/src/util/units.h
@@ -54,6 +54,7 @@ class Unit {
// temporary
int svgUnit() const;
+ int metric() const;
};
class UnitTable {
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index 814298041..7d3bbc44a 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -1672,7 +1672,7 @@ SPDesktopWidget* SPDesktopWidget::createInstance(SPNamedView *namedview)
{
SPDesktopWidget *dtw = static_cast<SPDesktopWidget*>(g_object_new(SP_TYPE_DESKTOP_WIDGET, NULL));
- dtw->dt2r = 1.0 / namedview->doc_units->unittobase;
+ dtw->dt2r = 1.0 / namedview->doc_units->factor;
dtw->ruler_origin = Geom::Point(0,0); //namedview->gridorigin; Why was the grid origin used here?
@@ -1744,7 +1744,7 @@ void SPDesktopWidget::namedviewModified(SPObject *obj, guint flags)
SPNamedView *nv=SP_NAMEDVIEW(obj);
if (flags & SP_OBJECT_MODIFIED_FLAG) {
- this->dt2r = 1.0 / nv->doc_units->unittobase;
+ this->dt2r = 1.0 / nv->doc_units->factor;
this->ruler_origin = Geom::Point(0,0); //nv->gridorigin; Why was the grid origin used here?
sp_ruler_set_unit(SP_RULER (this->vruler), nv->getDefaultMetric());
@@ -1778,14 +1778,14 @@ void SPDesktopWidget::namedviewModified(SPObject *obj, guint flags)
if (tracker == NULL) // it's null when inkscape is first opened
continue;
- tracker->setActiveUnit( nv->doc_units );
+ // tracker->setActiveUnit( nv->doc_units );
} // grandchildren
} // if child is a container
} // children
} // if aux_toolbox is a container
- gtk_widget_set_tooltip_text(this->hruler_box, gettext(sp_unit_get_plural (nv->doc_units)));
- gtk_widget_set_tooltip_text(this->vruler_box, gettext(sp_unit_get_plural (nv->doc_units)));
+ gtk_widget_set_tooltip_text(this->hruler_box, gettext(nv->doc_units->name_plural.c_str()));
+ gtk_widget_set_tooltip_text(this->vruler_box, gettext(nv->doc_units->name_plural.c_str()));
sp_desktop_widget_update_rulers(this);
ToolboxFactory::updateSnapToolbox(this->desktop, 0, this->snap_toolbox);
diff --git a/src/widgets/lpe-toolbar.cpp b/src/widgets/lpe-toolbar.cpp
index 3126175b3..8c481d2f1 100644
--- a/src/widgets/lpe-toolbar.cpp
+++ b/src/widgets/lpe-toolbar.cpp
@@ -294,7 +294,7 @@ static void lpetool_open_lpe_dialog(GtkToggleAction *act, gpointer data)
void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
{
UnitTracker* tracker = new UnitTracker(SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE);
- tracker->setActiveUnit(sp_desktop_namedview(desktop)->doc_units);
+ //tracker->setActiveUnit(sp_desktop_namedview(desktop)->doc_units);
g_object_set_data(holder, "tracker", tracker);
SPUnit const *unit = tracker->getActiveUnit();
diff --git a/src/widgets/measure-toolbar.cpp b/src/widgets/measure-toolbar.cpp
index 21df4c6d9..387dbbeae 100644
--- a/src/widgets/measure-toolbar.cpp
+++ b/src/widgets/measure-toolbar.cpp
@@ -91,7 +91,7 @@ static void measure_unit_changed(GtkAction* /*act*/, GObject* tbl)
void sp_measure_toolbox_prep(SPDesktop * desktop, GtkActionGroup* mainActions, GObject* holder)
{
UnitTracker* tracker = new UnitTracker( SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE );
- tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
+ //tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
g_object_set_data( holder, "tracker", tracker );
EgeAdjustmentAction *eact = 0;
diff --git a/src/widgets/node-toolbar.cpp b/src/widgets/node-toolbar.cpp
index 849de874d..d6de74817 100644
--- a/src/widgets/node-toolbar.cpp
+++ b/src/widgets/node-toolbar.cpp
@@ -340,7 +340,7 @@ static void sp_node_toolbox_sel_modified(Inkscape::Selection *selection, guint /
void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
{
UnitTracker* tracker = new UnitTracker( SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE );
- tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
+ //tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
g_object_set_data( holder, "tracker", tracker );
Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1);
diff --git a/src/widgets/rect-toolbar.cpp b/src/widgets/rect-toolbar.cpp
index 8c1a735c5..5fa96289f 100644
--- a/src/widgets/rect-toolbar.cpp
+++ b/src/widgets/rect-toolbar.cpp
@@ -304,7 +304,7 @@ void sp_rect_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje
UnitTracker* tracker = new UnitTracker( SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE );
//tracker->addUnit( SP_UNIT_PERCENT, 0 );
// fixme: add % meaning per cent of the width/height
- tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
+ //tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
g_object_set_data( holder, "tracker", tracker );
/* W */
diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp
index 549581610..693fc870b 100644
--- a/src/widgets/select-toolbar.cpp
+++ b/src/widgets/select-toolbar.cpp
@@ -488,7 +488,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
// Create the units menu.
UnitTracker* tracker = new UnitTracker( SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE );
tracker->addUnit( SP_UNIT_PERCENT, 0 );
- tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
+ //tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
g_object_set_data( G_OBJECT(spw), "tracker", tracker );
g_signal_connect( G_OBJECT(spw), "destroy", G_CALLBACK(destroy_tracker), spw );
diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp
index 0a5b3781b..17e3984bb 100644
--- a/src/widgets/stroke-style.cpp
+++ b/src/widgets/stroke-style.cpp
@@ -193,8 +193,8 @@ StrokeStyle::StrokeStyle() :
Gtk::Widget *us = manage(Glib::wrap(unitSelector));
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- if (desktop)
- sp_unit_selector_set_unit (SP_UNIT_SELECTOR(unitSelector), sp_desktop_namedview(desktop)->doc_units);
+ //if (desktop)
+ // sp_unit_selector_set_unit (SP_UNIT_SELECTOR(unitSelector), sp_desktop_namedview(desktop)->doc_units);
sp_unit_selector_add_unit(SP_UNIT_SELECTOR(unitSelector), &sp_unit_get_by_id(SP_UNIT_PERCENT), 0);
g_signal_connect ( G_OBJECT (unitSelector), "set_unit", G_CALLBACK (StrokeStyle::setStrokeWidthUnit), this );
us->show();
@@ -884,7 +884,7 @@ StrokeStyle::updateLine()
} else {
// same width, or only one object; no sense to keep percent, switch to absolute
if (unit->base != SP_UNIT_ABSOLUTE && unit->base != SP_UNIT_DEVICE) {
- sp_unit_selector_set_unit(SP_UNIT_SELECTOR(unitSelector), sp_desktop_namedview(SP_ACTIVE_DESKTOP)->doc_units);
+ //sp_unit_selector_set_unit(SP_UNIT_SELECTOR(unitSelector), sp_desktop_namedview(SP_ACTIVE_DESKTOP)->doc_units);
}
}
diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp
index 87cb54d10..144a2a3e8 100644
--- a/src/widgets/text-toolbar.cpp
+++ b/src/widgets/text-toolbar.cpp
@@ -1219,7 +1219,7 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje
// Is this used?
UnitTracker* tracker = new UnitTracker( SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE );
- tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
+ //tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
g_object_set_data( holder, "tracker", tracker );
/* Font family */