summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthew Petroff <matthew@mpetroff.net>2013-07-22 03:38:29 +0000
committerMatthew Petroff <matthew@mpetroff.net>2013-07-22 03:38:29 +0000
commit4deb0f64f3bdab48475819a4d236f125594244f4 (patch)
treeb12f86cc1718c54a6010f49701baf3ddc498047c /src
parentPorted away from and removed "sp-metrics.*". (diff)
downloadinkscape-4deb0f64f3bdab48475819a4d236f125594244f4.tar.gz
inkscape-4deb0f64f3bdab48475819a4d236f125594244f4.zip
Ported "widgets/ruler.*" away from SPMetric.
(bzr r12380.1.48)
Diffstat (limited to 'src')
-rw-r--r--src/sp-namedview.cpp13
-rw-r--r--src/sp-namedview.h1
-rw-r--r--src/widgets/desktop-widget.cpp17
-rw-r--r--src/widgets/ruler.cpp36
-rw-r--r--src/widgets/ruler.h11
5 files changed, 50 insertions, 28 deletions
diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index bf3adf816..d01185981 100644
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
@@ -1139,6 +1139,19 @@ SPMetric SPNamedView::getDefaultMetric() const
}
/**
+ * Returns namedview's default unit.
+ */
+Inkscape::Util::Unit const SPNamedView::getDefaultUnit() const
+{
+ if (doc_units) {
+ return *doc_units;
+ } else {
+ Inkscape::Util::UnitTable unit_table;
+ return *(new Inkscape::Util::Unit(unit_table.getUnit("pt")));
+ }
+}
+
+/**
* Returns the first grid it could find that isEnabled(). Returns NULL, if none is enabled
*/
Inkscape::CanvasGrid * sp_namedview_get_first_enabled_grid(SPNamedView *namedview)
diff --git a/src/sp-namedview.h b/src/sp-namedview.h
index f9629f0c6..7f7e81f1f 100644
--- a/src/sp-namedview.h
+++ b/src/sp-namedview.h
@@ -85,6 +85,7 @@ struct SPNamedView : public SPObjectGroup {
guint getViewCount();
GSList const *getViewList() const;
SPMetric getDefaultMetric() const;
+ Inkscape::Util::Unit const getDefaultUnit() const;
void translateGuides(Geom::Translate const &translation);
void translateGrids(Geom::Translate const &translation);
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index 56a5baf5b..863912d03 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -393,9 +393,10 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
GtkWidget *eventbox = gtk_event_box_new ();
dtw->hruler = sp_ruler_new(GTK_ORIENTATION_HORIZONTAL);
dtw->hruler_box = eventbox;
- sp_ruler_set_unit(SP_RULER(dtw->hruler), SP_PT);
Inkscape::Util::UnitTable unit_table;
- gtk_widget_set_tooltip_text (dtw->hruler_box, gettext(unit_table.getUnit("pt").name_plural.c_str()));
+ Inkscape::Util::Unit pt = unit_table.getUnit("pt");
+ sp_ruler_set_unit(SP_RULER(dtw->hruler), pt);
+ gtk_widget_set_tooltip_text (dtw->hruler_box, gettext(pt.name_plural.c_str()));
gtk_container_add (GTK_CONTAINER (eventbox), dtw->hruler);
g_signal_connect (G_OBJECT (eventbox), "button_press_event", G_CALLBACK (sp_dt_hruler_event), dtw);
g_signal_connect (G_OBJECT (eventbox), "button_release_event", G_CALLBACK (sp_dt_hruler_event), dtw);
@@ -423,8 +424,8 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
eventbox = gtk_event_box_new ();
dtw->vruler = sp_ruler_new(GTK_ORIENTATION_VERTICAL);
dtw->vruler_box = eventbox;
- sp_ruler_set_unit (SP_RULER (dtw->vruler), SP_PT);
- gtk_widget_set_tooltip_text (dtw->vruler_box, gettext(unit_table.getUnit("pt").name_plural.c_str()));
+ sp_ruler_set_unit (SP_RULER (dtw->vruler), pt);
+ gtk_widget_set_tooltip_text (dtw->vruler_box, gettext(pt.name_plural.c_str()));
gtk_container_add (GTK_CONTAINER (eventbox), GTK_WIDGET (dtw->vruler));
#if GTK_CHECK_VERSION(3,0,0)
@@ -1675,7 +1676,7 @@ SPDesktopWidget* SPDesktopWidget::createInstance(SPNamedView *namedview)
{
SPDesktopWidget *dtw = static_cast<SPDesktopWidget*>(g_object_new(SP_TYPE_DESKTOP_WIDGET, NULL));
- dtw->dt2r = namedview->doc_units->factor;
+ dtw->dt2r = 1. / namedview->doc_units->factor;
dtw->ruler_origin = Geom::Point(0,0); //namedview->gridorigin; Why was the grid origin used here?
@@ -1747,11 +1748,11 @@ void SPDesktopWidget::namedviewModified(SPObject *obj, guint flags)
SPNamedView *nv=SP_NAMEDVIEW(obj);
if (flags & SP_OBJECT_MODIFIED_FLAG) {
- this->dt2r = nv->doc_units->factor;
+ this->dt2r = 1. / 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());
- sp_ruler_set_unit(SP_RULER (this->hruler), nv->getDefaultMetric());
+ sp_ruler_set_unit(SP_RULER (this->vruler), nv->getDefaultUnit());
+ sp_ruler_set_unit(SP_RULER (this->hruler), nv->getDefaultUnit());
/* This loops through all the grandchildren of aux toolbox,
* and for each that it finds, it performs an sp_search_by_data_recursive(),
diff --git a/src/widgets/ruler.cpp b/src/widgets/ruler.cpp
index c1f9be2a5..274e1df54 100644
--- a/src/widgets/ruler.cpp
+++ b/src/widgets/ruler.cpp
@@ -33,9 +33,9 @@
#include "widget-sizes.h"
#include "ruler.h"
-#include "unit-constants.h"
#include "round.h"
#include <glibmm/i18n.h>
+#include "util/units.h"
#define ROUND(x) ((int) ((x) + 0.5))
@@ -62,7 +62,7 @@ enum {
typedef struct
{
GtkOrientation orientation;
- SPMetric unit;
+ Inkscape::Util::Unit *unit;
gdouble lower;
gdouble upper;
gdouble position;
@@ -196,11 +196,10 @@ sp_ruler_class_init (SPRulerClass *klass)
/* FIXME: Should probably use g_param_spec_enum */
g_object_class_install_property (object_class,
PROP_UNIT,
- g_param_spec_uint ("unit",
+ g_param_spec_string ("unit",
_("Unit"),
_("Unit of the ruler"),
- 0, 8,
- SP_PX,
+ "px",
static_cast<GParamFlags>(GTK_PARAM_READWRITE)));
g_object_class_install_property (object_class,
@@ -259,8 +258,10 @@ sp_ruler_init (SPRuler *ruler)
gtk_widget_set_has_window (GTK_WIDGET (ruler), FALSE);
+ Inkscape::Util::UnitTable unit_table;
+
priv->orientation = GTK_ORIENTATION_HORIZONTAL;
- priv->unit = SP_PX;
+ priv->unit = new Inkscape::Util::Unit(unit_table.getUnit("px"));
priv->lower = 0;
priv->upper = 0;
priv->position = 0;
@@ -379,6 +380,8 @@ sp_ruler_set_property (GObject *object,
SPRuler *ruler = SP_RULER (object);
SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler);
+ Inkscape::Util::UnitTable unit_table;
+
switch (prop_id)
{
case PROP_ORIENTATION:
@@ -387,7 +390,7 @@ sp_ruler_set_property (GObject *object,
break;
case PROP_UNIT:
- sp_ruler_set_unit (ruler, static_cast<SPMetric>(g_value_get_int (value)));
+ sp_ruler_set_unit (ruler, unit_table.getUnit(g_value_get_string (value)));
break;
case PROP_LOWER:
@@ -436,7 +439,7 @@ sp_ruler_get_property (GObject *object,
break;
case PROP_UNIT:
- g_value_set_int (value, priv->unit);
+ g_value_set_string (value, priv->unit->abbr.c_str());
break;
case PROP_LOWER:
g_value_set_double (value, priv->lower);
@@ -1071,15 +1074,15 @@ sp_ruler_remove_track_widget (SPRuler *ruler,
*/
void
sp_ruler_set_unit (SPRuler *ruler,
- SPMetric unit)
+ const Inkscape::Util::Unit &unit)
{
SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler);
g_return_if_fail (SP_IS_RULER (ruler));
- if (priv->unit != unit)
+ if (*priv->unit != unit)
{
- priv->unit = unit;
+ priv->unit = new Inkscape::Util::Unit(unit);
g_object_notify(G_OBJECT(ruler), "unit");
gtk_widget_queue_draw (GTK_WIDGET (ruler));
@@ -1092,11 +1095,9 @@ sp_ruler_set_unit (SPRuler *ruler,
*
* Return value: the unit currently used in the @ruler widget.
**/
-SPMetric
+Inkscape::Util::Unit*
sp_ruler_get_unit (SPRuler *ruler)
{
- g_return_val_if_fail(SP_IS_RULER(ruler), static_cast<SPMetric>(0));
-
return SP_RULER_GET_PRIVATE (ruler)->unit;
}
@@ -1184,10 +1185,11 @@ sp_ruler_draw_ticks (SPRuler *ruler)
gint text_size;
gint pos;
gdouble max_size;
- SPMetric unit;
+ Inkscape::Util::Unit *unit;
SPRulerMetric ruler_metric = ruler_metric_general; /* The metric to use for this unit system */
PangoLayout *layout;
PangoRectangle logical_rect, ink_rect;
+ Inkscape::Util::UnitTable unit_table;
if (! gtk_widget_is_drawable (widget))
return;
@@ -1300,7 +1302,7 @@ sp_ruler_draw_ticks (SPRuler *ruler)
/* Inkscape change to ruler: Use a 1,2,4,8... scale for inches
* or a 1,2,5,10... scale for everything else */
- if (sp_ruler_get_unit (ruler) == SP_IN)
+ if (*sp_ruler_get_unit (ruler) == unit_table.getUnit("in"))
ruler_metric = ruler_metric_inches;
for (scale = 0; scale < G_N_ELEMENTS (ruler_metric.ruler_scale); scale++)
@@ -1319,7 +1321,7 @@ sp_ruler_draw_ticks (SPRuler *ruler)
gdouble subd_incr;
/* hack to get proper subdivisions at full pixels */
- if (unit == SP_PX && scale == 1 && i == 1)
+ if (*unit == unit_table.getUnit("px") && scale == 1 && i == 1)
subd_incr = 1.0;
else
subd_incr = ((gdouble) ruler_metric.ruler_scale[scale] /
diff --git a/src/widgets/ruler.h b/src/widgets/ruler.h
index f0d866fff..08760f584 100644
--- a/src/widgets/ruler.h
+++ b/src/widgets/ruler.h
@@ -14,10 +14,15 @@
*/
#include <gtk/gtk.h>
-#include "sp-metric.h"
#include <iostream>
#include <glib.h>
+namespace Inkscape {
+ namespace Util {
+ class Unit;
+ }
+}
+
G_BEGIN_DECLS
#define SP_TYPE_RULER (sp_ruler_get_type ())
@@ -51,8 +56,8 @@ void sp_ruler_remove_track_widget (SPRuler *ruler,
GtkWidget *widget);
void sp_ruler_set_unit (SPRuler *ruler,
- SPMetric unit);
-SPMetric sp_ruler_get_unit (SPRuler *ruler);
+ const Inkscape::Util::Unit &unit);
+Inkscape::Util::Unit *sp_ruler_get_unit (SPRuler *ruler);
void sp_ruler_set_position (SPRuler *ruler,
gdouble set_position);
gdouble sp_ruler_get_position (SPRuler *ruler);