summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2016-03-18 10:23:29 +0000
committertavmjong-free <tavmjong@free.fr>2016-03-18 10:23:29 +0000
commita714c688d60a3a62114591984f57f26cd41dbed9 (patch)
tree3ad1c84aaf1097272b8ee2d4fca5db70f9c4edd3 /src/widgets
parentRevert 14707 (diff)
downloadinkscape-a714c688d60a3a62114591984f57f26cd41dbed9.tar.gz
inkscape-a714c688d60a3a62114591984f57f26cd41dbed9.zip
Reverting 14701.
(bzr r14716.1.2)
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/select-toolbar.cpp159
-rw-r--r--src/widgets/text-toolbar.cpp81
-rw-r--r--src/widgets/toolbox.cpp6
3 files changed, 98 insertions, 148 deletions
diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp
index 3cd6c0e28..e49c4c00a 100644
--- a/src/widgets/select-toolbar.cpp
+++ b/src/widgets/select-toolbar.cpp
@@ -136,13 +136,13 @@ sp_selection_layout_widget_change_selection(SPWidget *spw, Inkscape::Selection *
}
static void
-sp_object_layout_any_value_changed(GtkAdjustment *adj, GObject *tbl)
+sp_object_layout_any_value_changed(GtkAdjustment *adj, SPWidget *spw)
{
- if (g_object_get_data(tbl, "update")) {
+ if (g_object_get_data(G_OBJECT(spw), "update")) {
return;
}
- UnitTracker *tracker = reinterpret_cast<UnitTracker*>(g_object_get_data(tbl, "tracker"));
+ UnitTracker *tracker = reinterpret_cast<UnitTracker*>(g_object_get_data(G_OBJECT(spw), "tracker"));
if ( !tracker || tracker->isUpdating() ) {
/*
* When only units are being changed, don't treat changes
@@ -150,7 +150,7 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, GObject *tbl)
*/
return;
}
- g_object_set_data(tbl, "update", GINT_TO_POINTER(TRUE));
+ g_object_set_data(G_OBJECT(spw), "update", GINT_TO_POINTER(TRUE));
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
Inkscape::Selection *selection = desktop->getSelection();
@@ -168,7 +168,7 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, GObject *tbl)
Geom::OptRect bbox_user = selection->bounds(bbox_type);
if ( !bbox_user ) {
- g_object_set_data(tbl, "update", GINT_TO_POINTER(FALSE));
+ g_object_set_data(G_OBJECT(spw), "update", GINT_TO_POINTER(FALSE));
return;
}
@@ -181,10 +181,10 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, GObject *tbl)
Unit const *unit = tracker->getActiveUnit();
g_return_if_fail(unit != NULL);
- GtkAdjustment* a_x = GTK_ADJUSTMENT( g_object_get_data( tbl, "X" ) );
- GtkAdjustment* a_y = GTK_ADJUSTMENT( g_object_get_data( tbl, "Y" ) );
- GtkAdjustment* a_w = GTK_ADJUSTMENT( g_object_get_data( tbl, "width" ) );
- GtkAdjustment* a_h = GTK_ADJUSTMENT( g_object_get_data( tbl, "height" ) );
+ 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->type == Inkscape::Util::UNIT_TYPE_LINEAR) {
x0 = Quantity::convert(gtk_adjustment_get_value(a_x), unit, "px");
@@ -205,7 +205,7 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, GObject *tbl)
}
// Keep proportions if lock is on
- GtkToggleAction *lock = GTK_TOGGLE_ACTION( g_object_get_data(tbl, "lock") );
+ GtkToggleAction *lock = GTK_TOGGLE_ACTION( g_object_get_data(G_OBJECT(spw), "lock") );
if ( gtk_toggle_action_get_active(lock) ) {
if (adj == a_h) {
x1 = x0 + yrel * bbox_user->dimensions()[Geom::X];
@@ -265,7 +265,68 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, GObject *tbl)
desktop->getCanvas()->endForcedFullRedraws();
}
- g_object_set_data(tbl, "update", GINT_TO_POINTER(FALSE));
+ g_object_set_data(G_OBJECT(spw), "update", GINT_TO_POINTER(FALSE));
+}
+
+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);
+ Inkscape::UI::Widget::SpinButton *inkSpinner = new Inkscape::UI::Widget::SpinButton(adj, climbRate, digits);
+#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;
+}
+
+// TODO create_adjustment_action appears to be a rogue tile copy from toolbox.cpp. Resolve it to be unified:
+
+static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
+ gchar const *label,
+ gchar const *shortLabel,
+ gchar const *data,
+ gdouble lower,
+ GtkWidget* focusTarget,
+ UnitTracker* tracker,
+ GtkWidget* spw,
+ gchar const *tooltip,
+ gboolean altx )
+{
+ static bool init = false;
+ if ( !init ) {
+ init = true;
+ ege_adjustment_action_set_compact_tool_factory( createCustomSlider );
+ }
+
+ GtkAdjustment* adj = GTK_ADJUSTMENT( gtk_adjustment_new( 0.0, lower, 1e6, SPIN_STEP, SPIN_PAGE_STEP, 0 ) );
+ if (tracker) {
+ tracker->addAdjustment(adj);
+ }
+ if ( spw ) {
+ g_object_set_data( G_OBJECT(spw), data, adj );
+ }
+
+ 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 );
+ }
+
+ g_signal_connect( G_OBJECT(adj), "value_changed", G_CALLBACK(sp_object_layout_any_value_changed), spw );
+ if ( focusTarget ) {
+ ege_adjustment_action_set_focuswidget( act, focusTarget );
+ }
+
+ if ( altx ) { // this spinbutton will be activated by alt-x
+ g_object_set( G_OBJECT(act), "self-id", "altx", NULL );
+ }
+
+ // Using a cast just to make sure we pass in the right kind of function pointer
+ g_object_set( G_OBJECT(act), "tool-post", static_cast<EgeWidgetFixup>(sp_set_font_size_smaller), NULL );
+
+ return act;
}
// toggle button callbacks and updaters
@@ -436,60 +497,21 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
// four spinbuttons
- eact = create_adjustment_action(
- /* name= */ "XAction",
- /* label= */ C_("Select toolbar", "X position"),
- /* shortLabel= */ C_("Select toolbar", "X:"),
- /* tooltip= */ C_("Select toolbar", "Horizontal coordinate of selection"),
- /* path= */ "/tools/select/X",
- /* def(default) */ 0.0,
- /* focusTarget= */ GTK_WIDGET(desktop->canvas),
- /* dataKludge= */ G_OBJECT(spw),
- /* altx, altx_mark */ TRUE, "altx",
- /* lower, uppper, step, page */ -1e6, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
- /* descrLabels, descrValues, descrCount */ 0, 0, 0,
- /* callback= */ sp_object_layout_any_value_changed,
- /* unit_tracker= */ tracker,
- /* climb, digits, factor */ SPIN_STEP, 3, 1);
-
+ eact = create_adjustment_action( "XAction", C_("Select toolbar", "X position"), C_("Select toolbar", "X:"), "X",
+ -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) );
- eact = create_adjustment_action(
- /* name= */ "YAction",
- /* label= */ C_("Select toolbar", "Y position"),
- /* shortLabel= */ C_("Select toolbar", "Y:"),
- /* tooltip= */ C_("Select toolbar", "Vertical coordinate of selection"),
- /* path= */ "/tools/select/Y",
- /* def(default) */ 0.0,
- /* focusTarget= */ GTK_WIDGET(desktop->canvas),
- /* dataKludge= */ G_OBJECT(spw),
- /* altx, altx_mark */ TRUE, "altx",
- /* lower, uppper, step, page */ -1e6, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
- /* descrLabels, descrValues, descrCount */ 0, 0, 0,
- /* callback= */ sp_object_layout_any_value_changed,
- /* unit_tracker= */ tracker,
- /* climb, digits, factor */ SPIN_STEP, 3, 1);
-
+ eact = create_adjustment_action( "YAction", C_("Select toolbar", "Y position"), C_("Select toolbar", "Y:"), "Y",
+ -1e6, GTK_WIDGET(desktop->canvas), tracker, spw,
+ _("Vertical coordinate of selection"), FALSE );
gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) );
contextActions->push_back( GTK_ACTION(eact) );
- eact = create_adjustment_action(
- /* name= */ "WidthAction",
- /* label= */ C_("Select toolbar", "Width"),
- /* shortLabel= */ C_("Select toolbar", "W:"),
- /* tooltip= */ C_("Select toolbar", "Width of selection"),
- /* path= */ "/tools/select/width",
- /* def(default) */ 0.0,
- /* focusTarget= */ GTK_WIDGET(desktop->canvas),
- /* dataKludge= */ G_OBJECT(spw),
- /* altx, altx_mark */ TRUE, "altx",
- /* lower, uppper, step, page */ 0.0, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
- /* descrLabels, descrValues, descrCount */ 0, 0, 0,
- /* callback= */ sp_object_layout_any_value_changed,
- /* unit_tracker= */ tracker,
- /* climb, digits, factor */ SPIN_STEP, 3, 1);
-
+ eact = create_adjustment_action( "WidthAction", C_("Select toolbar", "Width"), C_("Select toolbar", "W:"), "width",
+ 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) );
@@ -506,22 +528,9 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb
gtk_action_group_add_action( mainActions, GTK_ACTION(itact) );
}
- eact = create_adjustment_action(
- /* name= */ "HeightAction",
- /* label= */ C_("Select toolbar", "Height"),
- /* shortLabel= */ C_("Select toolbar", "H:"),
- /* tooltip= */ C_("Select toolbar", "Height of selection"),
- /* path= */ "/tools/select/height",
- /* def(default) */ 0.0,
- /* focusTarget= */ GTK_WIDGET(desktop->canvas),
- /* dataKludge= */ G_OBJECT(spw),
- /* altx, altx_mark */ TRUE, "altx",
- /* lower, uppper, step, page */ 0.0, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
- /* descrLabels, descrValues, descrCount */ 0, 0, 0,
- /* callback= */ sp_object_layout_any_value_changed,
- /* unit_tracker= */ tracker,
- /* climb, digits, factor */ SPIN_STEP, 3, 1);
-
+ eact = create_adjustment_action( "HeightAction", C_("Select toolbar", "Height"), C_("Select toolbar", "H:"), "height",
+ 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) );
diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp
index c49f0bc05..5ca92b4c0 100644
--- a/src/widgets/text-toolbar.cpp
+++ b/src/widgets/text-toolbar.cpp
@@ -54,17 +54,12 @@
#include "ui/icon-names.h"
#include "ui/tools/text-tool.h"
#include "ui/tools/tool-base.h"
-#include "ui/widget/unit-tracker.h"
-#include "util/units.h"
#include "verbs.h"
#include "xml/repr.h"
using Inkscape::DocumentUndo;
using Inkscape::UI::ToolboxFactory;
using Inkscape::UI::PrefPusher;
-using Inkscape::UI::Widget::UnitTracker;
-using Inkscape::Util::Unit;
-using Inkscape::Util::unit_table;
//#define DEBUG_TEXT
@@ -509,14 +504,8 @@ static void sp_text_align_mode_changed( EgeSelectOneAction *act, GObject *tbl )
static void sp_text_lineheight_value_changed( GtkAdjustment *adj, GObject *tbl )
{
- UnitTracker *tracker = reinterpret_cast<UnitTracker*>(g_object_get_data(tbl, "tracker"));
-
- if ( !tracker || tracker->isUpdating() || g_object_get_data(tbl, "freeze")) {
- /*
- * When only units are being changed, don't treat changes
- * to adjuster values as object changes.
- * or quit if run by the _changed callbacks
- */
+ // quit if run by the _changed callbacks
+ if (g_object_get_data(G_OBJECT(tbl), "freeze")) {
return;
}
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
@@ -525,18 +514,7 @@ static void sp_text_lineheight_value_changed( GtkAdjustment *adj, GObject *tbl )
// Set css line height.
SPCSSAttr *css = sp_repr_css_attr_new ();
Inkscape::CSSOStringStream osfs;
-
- gdouble value = gtk_adjustment_get_value(adj);
-
- Unit const *unit = tracker->getActiveUnit();
-
- // Value can only be in px or percent or naked pc (e.g. 0.7 for 70%)
- if (unit->abbr != "%") {
- value = unit->convert(value, "px");
- unit = unit_table.getUnit("px");
- }
-
- osfs << value << unit->abbr;
+ osfs << gtk_adjustment_get_value(adj)*100 << "%";
sp_repr_css_set_property (css, "line-height", osfs.str().c_str());
// Apply line-height to selected objects.
@@ -1095,31 +1073,21 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/
// Line height (spacing)
double height;
-
- Unit const *lh_unit;
- UnitTracker* tracker = reinterpret_cast<UnitTracker*>( g_object_get_data( tbl, "tracker" ) );
-
if (query.line_height.normal) {
- lh_unit = unit_table.getUnit("%");
- height = Inkscape::Text::Layout::LINE_HEIGHT_NORMAL * 100;
- } else if (query.line_height.unit == SP_CSS_UNIT_PERCENT) {
- lh_unit = unit_table.getUnit("%");
- height = query.line_height.value * 100;
+ height = Inkscape::Text::Layout::LINE_HEIGHT_NORMAL;
} else {
- lh_unit = tracker->getActiveUnit();
- // Can get unit like this: unit_table.getUnit(query.line_height.unit);
- height = Inkscape::Util::Quantity::convert(query.line_height.computed, "px", lh_unit);
+ if (query.line_height.unit == SP_CSS_UNIT_PERCENT) {
+ height = query.line_height.value;
+ } else {
+ height = query.line_height.computed;
+ }
}
- // Set before value is set
- tracker->setActiveUnit(lh_unit);
-
GtkAction* lineHeightAction = GTK_ACTION( g_object_get_data( tbl, "TextLineHeightAction" ) );
GtkAdjustment *lineHeightAdjustment =
ege_adjustment_action_get_adjustment(EGE_ADJUSTMENT_ACTION( lineHeightAction ));
gtk_adjustment_set_value( lineHeightAdjustment, height );
- height = gtk_adjustment_get_value( lineHeightAdjustment );
// Word spacing
double wordSpacing;
@@ -1322,15 +1290,6 @@ static void sp_text_toolbox_select_cb( GtkEntry* entry, GtkEntryIconPosition /*p
static void text_toolbox_watch_ec(SPDesktop* dt, Inkscape::UI::Tools::ToolBase* ec, GObject* holder);
-static void destroy_tracker( GObject* obj, gpointer /*user_data*/ )
-{
- UnitTracker *tracker = reinterpret_cast<UnitTracker*>(g_object_get_data(obj, "tracker"));
- if ( tracker ) {
- delete tracker;
- g_object_set_data( obj, "tracker", 0 );
- }
-}
-
// Define all the "widgets" in the toolbar.
void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
{
@@ -1629,29 +1588,22 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje
gchar const* labels[] = {_("Smaller spacing"), 0, 0, 0, 0, C_("Text tool", "Normal"), 0, 0, 0, 0, 0, _("Larger spacing")};
gdouble values[] = { 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1,2, 1.3, 1.4, 1.5, 2.0};
- // Add the units menu.
- UnitTracker* tracker = new UnitTracker(Inkscape::Util::UNIT_TYPE_LINEAR);
- tracker->prependUnit(unit_table.getUnit("%"));
-
- g_object_set_data( holder, "tracker", tracker );
- g_signal_connect( holder, "destroy", G_CALLBACK(destroy_tracker), holder );
-
EgeAdjustmentAction *eact = create_adjustment_action(
"TextLineHeightAction", /* name */
_("Line Height"), /* label */
_("Line:"), /* short label */
- _("Spacing between baselines"), /* tooltip */
+ _("Spacing between baselines (times font size)"), /* tooltip */
"/tools/text/lineheight", /* preferences path */
- 125, /* default */
+ 0.0, /* default */
GTK_WIDGET(desktop->canvas), /* focusTarget */
holder, /* dataKludge */
FALSE, /* set alt-x keyboard shortcut? */
NULL, /* altx_mark */
- 0.0, 1e6, 1.0, 10.0, /* lower, upper, step (arrow up/down), page up/down */
+ 0.0, 10.0, 0.01, 0.10, /* lower, upper, step (arrow up/down), page up/down */
labels, values, G_N_ELEMENTS(labels), /* drop down menu */
sp_text_lineheight_value_changed, /* callback */
- tracker, /* unit tracker */
- 1.0, /* step (used?) */
+ NULL, /* unit tracker */
+ 0.1, /* step (used?) */
2, /* digits to show */
1.0 /* factor (multiplies default) */
);
@@ -1659,11 +1611,6 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje
gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
g_object_set_data( holder, "TextLineHeightAction", eact );
g_object_set( G_OBJECT(eact), "iconId", "text_line_spacing", NULL );
-
- GtkAction* act = tracker->createAction( "TextLineHeightUnitAction", _("Units"), ("") );
- gtk_action_group_add_action( mainActions, act );
- g_object_set_data( holder, "TextLineHeightUnitAction", act );
-
}
/* Word spacing */
diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp
index f4d7ebf25..72537f727 100644
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
@@ -55,7 +55,6 @@
#include "ui/tools-switch.h"
#include "../ui/icon-names.h"
#include "../ui/widget/style-swatch.h"
-#include "../ui/widget/unit-tracker.h"
#include "../verbs.h"
#include "../widgets/button.h"
#include "../widgets/spinbutton-events.h"
@@ -516,7 +515,6 @@ static gchar const * ui_descr =
" <toolitem action='TextSubscriptAction' />"
" <separator />"
" <toolitem action='TextLineHeightAction' />"
- " <toolitem action='TextLineHeightUnitAction' />"
" <toolitem action='TextLetterSpacingAction' />"
" <toolitem action='TextWordSpacingAction' />"
" <toolitem action='TextDxAction' />"
@@ -1124,10 +1122,6 @@ EgeAdjustmentAction * create_adjustment_action( gchar const *name,
g_object_set_data( dataKludge, prefs->getEntry(path).getEntryName().data(), adj );
}
- if (unit_tracker) {
- unit_tracker->addAdjustment(adj);
- }
-
// Using a cast just to make sure we pass in the right kind of function pointer
g_object_set( G_OBJECT(act), "tool-post", static_cast<EgeWidgetFixup>(sp_set_font_size_smaller), NULL );