summaryrefslogtreecommitdiffstats
path: root/src/widgets/select-toolbar.cpp
diff options
context:
space:
mode:
authorMartin Owens <doctormo@gmail.com>2014-03-27 01:33:44 +0000
committerMartin Owens <doctormo@gmail.com>2014-03-27 01:33:44 +0000
commit5a4fb2325f60d292b47330f540b26a3279341c90 (patch)
treed2aa7967be25450b83e625025366c618101ae49f /src/widgets/select-toolbar.cpp
parentThe Polar Arrange Tab of the Arrange Dialog now hides the parametric (diff)
parentRemove Snap menu item and improve grid menu item text (diff)
downloadinkscape-5a4fb2325f60d292b47330f540b26a3279341c90.tar.gz
inkscape-5a4fb2325f60d292b47330f540b26a3279341c90.zip
Commit a merge to trunk, with probabal errors
(bzr r11073.1.36)
Diffstat (limited to 'src/widgets/select-toolbar.cpp')
-rw-r--r--src/widgets/select-toolbar.cpp129
1 files changed, 64 insertions, 65 deletions
diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp
index 4378bc19d..284e436bf 100644
--- a/src/widgets/select-toolbar.cpp
+++ b/src/widgets/select-toolbar.cpp
@@ -16,45 +16,42 @@
# include "config.h"
#endif
-#include "ui/widget/spinbutton.h"
-#include <gtk/gtk.h>
-
-#include "widgets/button.h"
-#include "widgets/spw-utilities.h"
-#include "widgets/widget-sizes.h"
-#include "widgets/spinbutton-events.h"
-#include "widgets/icon.h"
-#include "widgets/sp-widget.h"
+#include <2geom/rect.h>
-#include "preferences.h"
-#include "selection-chemistry.h"
-#include "document.h"
-#include "document-undo.h"
-#include "inkscape.h"
-#include "desktop-style.h"
-#include "desktop.h"
-#include "desktop-handles.h"
-#include "sp-namedview.h"
-#include "toolbox.h"
+#include "ui/widget/spinbutton.h"
#include <glibmm/i18n.h>
-#include "helper/unit-menu.h"
-#include "helper/units.h"
-#include "inkscape.h"
-#include "verbs.h"
-#include "selection.h"
-#include "selection-chemistry.h"
-#include "sp-item-transform.h"
-#include "message-stack.h"
+#include "select-toolbar.h"
+#include "desktop-handles.h"
+#include "desktop.h"
#include "display/sp-canvas.h"
-#include "helper/unit-tracker.h"
+#include "document-undo.h"
+#include "document.h"
#include "ege-adjustment-action.h"
-#include "ege-output-action.h"
+#include "helper/action-context.h"
+#include "helper/action.h"
#include "ink-action.h"
-#include <2geom/rect.h>
+#include "inkscape.h"
+#include "message-stack.h"
+#include "preferences.h"
+#include "selection-chemistry.h"
+#include "selection.h"
+#include "sp-item-transform.h"
+#include "sp-namedview.h"
+#include "toolbox.h"
#include "ui/icon-names.h"
+#include "ui/widget/unit-tracker.h"
+#include "util/units.h"
+#include "verbs.h"
+#include "widgets/icon.h"
+#include "widgets/sp-widget.h"
+#include "widgets/spw-utilities.h"
+#include "widgets/widget-sizes.h"
-using Inkscape::UnitTracker;
+using Inkscape::UI::Widget::UnitTracker;
+using Inkscape::Util::Unit;
+using Inkscape::Util::Quantity;
using Inkscape::DocumentUndo;
+using Inkscape::Util::unit_table;
static void
sp_selection_layout_widget_update(SPWidget *spw, Inkscape::Selection *sel)
@@ -75,7 +72,7 @@ sp_selection_layout_widget_update(SPWidget *spw, Inkscape::Selection *sel)
Geom::OptRect const bbox(sel->bounds(bbox_type));
if ( bbox ) {
UnitTracker *tracker = reinterpret_cast<UnitTracker*>(g_object_get_data(G_OBJECT(spw), "tracker"));
- SPUnit const &unit = *tracker->getActiveUnit();
+ Unit const *unit = tracker->getActiveUnit();
struct { char const *key; double val; } const keyval[] = {
{ "X", bbox->min()[X] },
@@ -84,17 +81,17 @@ sp_selection_layout_widget_update(SPWidget *spw, Inkscape::Selection *sel)
{ "height", bbox->dimensions()[Y] }
};
- if (unit.base == SP_UNIT_DIMENSIONLESS) {
- double const val = 1. / unit.unittobase;
+ if (unit->type == Inkscape::Util::UNIT_TYPE_DIMENSIONLESS) {
+ double const val = unit->factor * 100;
for (unsigned i = 0; i < G_N_ELEMENTS(keyval); ++i) {
- GtkAdjustment *a = (GtkAdjustment *) g_object_get_data(G_OBJECT(spw), keyval[i].key);
+ GtkAdjustment *a = GTK_ADJUSTMENT(g_object_get_data(G_OBJECT(spw), keyval[i].key));
gtk_adjustment_set_value(a, val);
tracker->setFullVal( a, keyval[i].val );
}
} else {
for (unsigned i = 0; i < G_N_ELEMENTS(keyval); ++i) {
- GtkAdjustment *a = (GtkAdjustment *) g_object_get_data(G_OBJECT(spw), keyval[i].key);
- gtk_adjustment_set_value(a, sp_pixels_get_units(keyval[i].val, unit));
+ GtkAdjustment *a = GTK_ADJUSTMENT(g_object_get_data(G_OBJECT(spw), keyval[i].key));
+ gtk_adjustment_set_value(a, Quantity::convert(keyval[i].val, "px", unit));
}
}
}
@@ -180,28 +177,28 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, SPWidget *spw)
gdouble y1 = 0;
gdouble xrel = 0;
gdouble yrel = 0;
- SPUnit const &unit = *tracker->getActiveUnit();
+ Unit const *unit = tracker->getActiveUnit();
GtkAdjustment* a_x = GTK_ADJUSTMENT( g_object_get_data( G_OBJECT(spw), "X" ) );
GtkAdjustment* a_y = GTK_ADJUSTMENT( g_object_get_data( G_OBJECT(spw), "Y" ) );
GtkAdjustment* a_w = GTK_ADJUSTMENT( g_object_get_data( G_OBJECT(spw), "width" ) );
GtkAdjustment* a_h = GTK_ADJUSTMENT( g_object_get_data( G_OBJECT(spw), "height" ) );
- if (unit.base == SP_UNIT_ABSOLUTE || unit.base == SP_UNIT_DEVICE) {
- x0 = sp_units_get_pixels (gtk_adjustment_get_value (a_x), unit);
- y0 = sp_units_get_pixels (gtk_adjustment_get_value (a_y), unit);
- x1 = x0 + sp_units_get_pixels (gtk_adjustment_get_value (a_w), unit);
- xrel = sp_units_get_pixels (gtk_adjustment_get_value (a_w), unit) / bbox_user->dimensions()[Geom::X];
- y1 = y0 + sp_units_get_pixels (gtk_adjustment_get_value (a_h), unit);
- yrel = sp_units_get_pixels (gtk_adjustment_get_value (a_h), unit) / bbox_user->dimensions()[Geom::Y];
+ if (unit->type == Inkscape::Util::UNIT_TYPE_LINEAR) {
+ x0 = Quantity::convert(gtk_adjustment_get_value(a_x), unit, "px");
+ y0 = Quantity::convert(gtk_adjustment_get_value(a_y), unit, "px");
+ x1 = x0 + Quantity::convert(gtk_adjustment_get_value(a_w), unit, "px");
+ xrel = Quantity::convert(gtk_adjustment_get_value(a_w), unit, "px") / bbox_user->dimensions()[Geom::X];
+ y1 = y0 + Quantity::convert(gtk_adjustment_get_value(a_h), unit, "px");;
+ yrel = Quantity::convert(gtk_adjustment_get_value(a_h), unit, "px") / bbox_user->dimensions()[Geom::Y];
} else {
- double const x0_propn = gtk_adjustment_get_value (a_x) * unit.unittobase;
+ double const x0_propn = gtk_adjustment_get_value (a_x) / 100 / unit->factor;
x0 = bbox_user->min()[Geom::X] * x0_propn;
- double const y0_propn = gtk_adjustment_get_value (a_y) * unit.unittobase;
+ double const y0_propn = gtk_adjustment_get_value (a_y) / 100 / unit->factor;
y0 = y0_propn * bbox_user->min()[Geom::Y];
- xrel = gtk_adjustment_get_value (a_w) * unit.unittobase;
+ xrel = gtk_adjustment_get_value (a_w) / (100 / unit->factor);
x1 = x0 + xrel * bbox_user->dimensions()[Geom::X];
- yrel = gtk_adjustment_get_value (a_h) * unit.unittobase;
+ yrel = gtk_adjustment_get_value (a_h) / (100 / unit->factor);
y1 = y0 + yrel * bbox_user->dimensions()[Geom::Y];
}
@@ -222,11 +219,11 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, SPWidget *spw)
double sv = fabs(y1 - bbox_user->max()[Geom::Y]);
// unless the unit is %, convert the scales and moves to the unit
- if (unit.base == SP_UNIT_ABSOLUTE || unit.base == SP_UNIT_DEVICE) {
- mh = sp_pixels_get_units (mh, unit);
- sh = sp_pixels_get_units (sh, unit);
- mv = sp_pixels_get_units (mv, unit);
- sv = sp_pixels_get_units (sv, unit);
+ if (unit->type == Inkscape::Util::UNIT_TYPE_LINEAR) {
+ mh = Quantity::convert(mh, "px", unit);
+ sh = Quantity::convert(sh, "px", unit);
+ mv = Quantity::convert(mv, "px", unit);
+ sv = Quantity::convert(sv, "px", unit);
}
// do the action only if one of the scales/moves is greater than half the last significant
@@ -244,17 +241,18 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, SPWidget *spw)
// FIXME: fix for GTK breakage, see comment in SelectedStyle::on_opacity_changed
sp_desktop_canvas(desktop)->forceFullRedrawAfterInterruptions(0);
- int transform_stroke = prefs->getBool("/options/transform/stroke", true) ? 1 : 0;
+ bool transform_stroke = prefs->getBool("/options/transform/stroke", true);
+ bool preserve = prefs->getBool("/options/preservetransform/value", false);
Geom::Affine scaler;
if (bbox_type == SPItem::VISUAL_BBOX) {
- scaler = get_scale_transform_for_variable_stroke (*bbox_vis, *bbox_geom, transform_stroke, x0, y0, x1, y1);
+ scaler = get_scale_transform_for_variable_stroke (*bbox_vis, *bbox_geom, transform_stroke, preserve, x0, y0, x1, y1);
} else {
// 1) We could have use the newer get_scale_transform_for_variable_stroke() here, but to avoid regressions
// we'll just use the old get_scale_transform_for_uniform_stroke() for now.
// 2) get_scale_transform_for_uniform_stroke() is intended for visual bounding boxes, not geometrical ones!
// we'll trick it into using a geometric bounding box though, by setting the stroke width to zero
- scaler = get_scale_transform_for_uniform_stroke (*bbox_geom, 0, false, x0, y0, x1, y1);
+ scaler = get_scale_transform_for_uniform_stroke (*bbox_geom, 0, 0, false, false, x0, y0, x1, y1);
}
sp_selection_apply_affine(selection, scaler);
@@ -268,7 +266,7 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, SPWidget *spw)
g_object_set_data(G_OBJECT(spw), "update", GINT_TO_POINTER(FALSE));
}
-static GtkWidget* createCustomSlider( GtkAdjustment *adjustment, gdouble climbRate, guint digits )
+static GtkWidget* createCustomSlider( GtkAdjustment *adjustment, gdouble climbRate, guint digits, Inkscape::UI::Widget::UnitTracker *unit_tracker )
{
#if WITH_GTKMM_3_0
Glib::RefPtr<Gtk::Adjustment> adj = Glib::wrap(adjustment, true);
@@ -276,6 +274,7 @@ static GtkWidget* createCustomSlider( GtkAdjustment *adjustment, gdouble climbRa
#else
Inkscape::UI::Widget::SpinButton *inkSpinner = new Inkscape::UI::Widget::SpinButton(*Glib::wrap(adjustment, true), climbRate, digits);
#endif
+ inkSpinner->addUnitTracker(unit_tracker);
inkSpinner = Gtk::manage( inkSpinner );
GtkWidget *widget = GTK_WIDGET( inkSpinner->gobj() );
return widget;
@@ -308,7 +307,7 @@ static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
g_object_set_data( G_OBJECT(spw), data, adj );
}
- EgeAdjustmentAction* act = ege_adjustment_action_new( adj, name, Q_(label), tooltip, 0, SPIN_STEP, 3 );
+ EgeAdjustmentAction* act = ege_adjustment_action_new( adj, name, Q_(label), tooltip, 0, SPIN_STEP, 3, tracker );
if ( shortLabel ) {
g_object_set( act, "short_label", Q_(shortLabel), NULL );
}
@@ -412,7 +411,7 @@ static GtkAction* create_action_for_verb( Inkscape::Verb* verb, Inkscape::UI::Vi
{
GtkAction* act = 0;
- SPAction* targetAction = verb->get_action(view);
+ SPAction* targetAction = verb->get_action(Inkscape::ActionContext(view));
InkAction* inky = ink_action_new( verb->get_id(), verb->get_name(), verb->get_tip(), verb->get_image(), size );
act = GTK_ACTION(inky);
@@ -485,8 +484,8 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
gtk_container_add(GTK_CONTAINER(spw), vb);
// Create the units menu.
- UnitTracker* tracker = new UnitTracker( SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE );
- tracker->addUnit( SP_UNIT_PERCENT, 0 );
+ UnitTracker* tracker = new UnitTracker(Inkscape::Util::UNIT_TYPE_LINEAR);
+ tracker->addUnit(unit_table.getUnit("%"));
tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
g_object_set_data( G_OBJECT(spw), "tracker", tracker );
@@ -497,7 +496,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
// four spinbuttons
eact = create_adjustment_action( "XAction", C_("Select toolbar", "X position"), C_("Select toolbar", "X:"), "X",
- -1e6, GTK_WIDGET(desktop->canvas), tracker, spw,
+ -1e6, GTK_WIDGET(desktop->canvas), tracker, spw,
_("Horizontal coordinate of selection"), TRUE );
gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) );
contextActions->push_back( GTK_ACTION(eact) );
@@ -509,7 +508,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
contextActions->push_back( GTK_ACTION(eact) );
eact = create_adjustment_action( "WidthAction", C_("Select toolbar", "Width"), C_("Select toolbar", "W:"), "width",
- 1e-3, GTK_WIDGET(desktop->canvas), tracker, spw,
+ 0.0, GTK_WIDGET(desktop->canvas), tracker, spw,
_("Width of selection"), FALSE );
gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) );
contextActions->push_back( GTK_ACTION(eact) );
@@ -528,7 +527,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
}
eact = create_adjustment_action( "HeightAction", C_("Select toolbar", "Height"), C_("Select toolbar", "H:"), "height",
- 1e-3, GTK_WIDGET(desktop->canvas), tracker, spw,
+ 0.0, GTK_WIDGET(desktop->canvas), tracker, spw,
_("Height of selection"), FALSE );
gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) );
contextActions->push_back( GTK_ACTION(eact) );