[gtk+/resolution-independence: 8/24] port GtkMisc, GtkRange, GtkScale and GtkScaleButton to RI
- From: Davyd Madeley <davyd src gnome org>
- To: svn-commits-list gnome org
- Subject: [gtk+/resolution-independence: 8/24] port GtkMisc, GtkRange, GtkScale and GtkScaleButton to RI
- Date: Sat, 2 May 2009 02:17:42 -0400 (EDT)
commit fda93a2977c72d5eb8e16ac034330e5fe8d7d786
Author: David Zeuthen <davidz redhat com>
Date: Wed Aug 13 14:02:03 2008 -0400
port GtkMisc, GtkRange, GtkScale and GtkScaleButton to RI
min/max for GtkMisc
min/max for GtkRange
min/max for GtkScale
fixed gtkscale.c
fixed gtkrange.c
fixed gtkmisc.c
---
docs/reference/gtk/gtk-sections.txt | 1 +
gtk/gtk.symbols | 1 +
gtk/gtkmisc.c | 121 ++++++++++++++++++++++++++--------
gtk/gtkmisc.h | 8 ++-
gtk/gtkrange.c | 88 +++++++++++--------------
gtk/gtkscale.c | 42 +++++++-----
gtk/gtkscalebutton.c | 43 +++++++++----
7 files changed, 192 insertions(+), 112 deletions(-)
diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt
index a81f357..4b1cd42 100644
--- a/docs/reference/gtk/gtk-sections.txt
+++ b/docs/reference/gtk/gtk-sections.txt
@@ -2598,6 +2598,7 @@ gtk_misc_set_alignment
gtk_misc_set_padding
gtk_misc_get_alignment
gtk_misc_get_padding
+gtk_misc_get_padding_unit
<SUBSECTION Standard>
GTK_MISC
GTK_IS_MISC
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index 3f448b4..ee88445 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -2538,6 +2538,7 @@ gtk_message_dialog_get_image
#if IN_FILE(__GTK_MISC_C__)
gtk_misc_get_alignment
gtk_misc_get_padding
+gtk_misc_get_padding_unit
gtk_misc_get_type G_GNUC_CONST
gtk_misc_set_alignment
gtk_misc_set_padding
diff --git a/gtk/gtkmisc.c b/gtk/gtkmisc.c
index bd82805..2c97155 100644
--- a/gtk/gtkmisc.c
+++ b/gtk/gtkmisc.c
@@ -40,6 +40,14 @@ enum {
PROP_YPAD
};
+#define GTK_MISC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_MISC, GtkMiscPrivate))
+
+struct _GtkMiscPrivate
+{
+ GtkSize xpad_unit;
+ GtkSize ypad_unit;
+};
+
static void gtk_misc_realize (GtkWidget *widget);
static void gtk_misc_set_property (GObject *object,
guint prop_id,
@@ -50,6 +58,7 @@ static void gtk_misc_get_property (GObject *object,
GValue *value,
GParamSpec *pspec);
+static void gtk_misc_unit_changed (GtkWidget *widget);
G_DEFINE_ABSTRACT_TYPE (GtkMisc, gtk_misc, GTK_TYPE_WIDGET)
@@ -66,6 +75,7 @@ gtk_misc_class_init (GtkMiscClass *class)
gobject_class->get_property = gtk_misc_get_property;
widget_class->realize = gtk_misc_realize;
+ widget_class->unit_changed = gtk_misc_unit_changed;
g_object_class_install_property (gobject_class,
PROP_XALIGN,
@@ -89,32 +99,33 @@ gtk_misc_class_init (GtkMiscClass *class)
g_object_class_install_property (gobject_class,
PROP_XPAD,
- g_param_spec_int ("xpad",
- P_("X pad"),
- P_("The amount of space to add on the left and right of the widget, in pixels"),
- 0,
- G_MAXINT,
- 0,
- GTK_PARAM_READWRITE));
+ gtk_param_spec_size ("xpad",
+ P_("X pad"),
+ P_("The amount of space to add on the left and right of the widget, in pixels"),
+ 0, G_MAXINT, 0,
+ GTK_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_YPAD,
- g_param_spec_int ("ypad",
- P_("Y pad"),
- P_("The amount of space to add on the top and bottom of the widget, in pixels"),
- 0,
- G_MAXINT,
- 0,
- GTK_PARAM_READWRITE));
+ gtk_param_spec_size ("ypad",
+ P_("Y pad"),
+ P_("The amount of space to add on the top and bottom of the widget, in pixels"),
+ 0, G_MAXINT, 0,
+ GTK_PARAM_READWRITE));
+
+ g_type_class_add_private (gobject_class, sizeof (GtkMiscPrivate));
}
static void
gtk_misc_init (GtkMisc *misc)
{
+ GtkMiscPrivate *priv = GTK_MISC_GET_PRIVATE (misc);
misc->xalign = 0.5;
misc->yalign = 0.5;
misc->xpad = 0;
misc->ypad = 0;
+ priv->xpad_unit = 0;
+ priv->ypad_unit = 0;
}
static void
@@ -124,8 +135,10 @@ gtk_misc_set_property (GObject *object,
GParamSpec *pspec)
{
GtkMisc *misc;
+ GtkMiscPrivate *priv;
misc = GTK_MISC (object);
+ priv = GTK_MISC_GET_PRIVATE (misc);
switch (prop_id)
{
@@ -136,10 +149,10 @@ gtk_misc_set_property (GObject *object,
gtk_misc_set_alignment (misc, misc->xalign, g_value_get_float (value));
break;
case PROP_XPAD:
- gtk_misc_set_padding (misc, g_value_get_int (value), misc->ypad);
+ gtk_misc_set_padding (misc, gtk_value_get_size (value), priv->ypad_unit);
break;
case PROP_YPAD:
- gtk_misc_set_padding (misc, misc->xpad, g_value_get_int (value));
+ gtk_misc_set_padding (misc, priv->xpad_unit, gtk_value_get_size (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -154,8 +167,10 @@ gtk_misc_get_property (GObject *object,
GParamSpec *pspec)
{
GtkMisc *misc;
+ GtkMiscPrivate *priv;
misc = GTK_MISC (object);
+ priv = GTK_MISC_GET_PRIVATE (misc);
switch (prop_id)
{
@@ -166,10 +181,10 @@ gtk_misc_get_property (GObject *object,
g_value_set_float (value, misc->yalign);
break;
case PROP_XPAD:
- g_value_set_int (value, misc->xpad);
+ gtk_value_set_size (value, priv->xpad_unit, misc);
break;
case PROP_YPAD:
- g_value_set_int (value, misc->ypad);
+ gtk_value_set_size (value, priv->ypad_unit, misc);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -244,33 +259,36 @@ gtk_misc_get_alignment (GtkMisc *misc,
void
gtk_misc_set_padding (GtkMisc *misc,
- gint xpad,
- gint ypad)
+ GtkSize xpad,
+ GtkSize ypad)
{
+ GtkMiscPrivate *priv = GTK_MISC_GET_PRIVATE (misc);
GtkRequisition *requisition;
g_return_if_fail (GTK_IS_MISC (misc));
- if (xpad < 0)
+ if (gtk_widget_size_to_pixel (misc, xpad) < 0)
xpad = 0;
- if (ypad < 0)
+ if (gtk_widget_size_to_pixel (misc, ypad) < 0)
ypad = 0;
- if ((xpad != misc->xpad) || (ypad != misc->ypad))
+ if ((xpad != priv->xpad_unit) || (ypad != priv->ypad_unit))
{
g_object_freeze_notify (G_OBJECT (misc));
- if (xpad != misc->xpad)
+ if (xpad != priv->xpad_unit)
g_object_notify (G_OBJECT (misc), "xpad");
- if (ypad != misc->ypad)
+ if (ypad != priv->ypad_unit)
g_object_notify (G_OBJECT (misc), "ypad");
requisition = &(GTK_WIDGET (misc)->requisition);
requisition->width -= misc->xpad * 2;
requisition->height -= misc->ypad * 2;
- misc->xpad = xpad;
- misc->ypad = ypad;
+ misc->xpad = gtk_widget_size_to_pixel (misc, xpad);
+ misc->ypad = gtk_widget_size_to_pixel (misc, ypad);
+ priv->xpad_unit = xpad;
+ priv->ypad_unit = ypad;
requisition->width += misc->xpad * 2;
requisition->height += misc->ypad * 2;
@@ -296,12 +314,43 @@ gtk_misc_get_padding (GtkMisc *misc,
gint *xpad,
gint *ypad)
{
+ GtkMiscPrivate *priv;
+
+ g_return_if_fail (GTK_IS_MISC (misc));
+
+ priv = GTK_MISC_GET_PRIVATE (misc);
+
+ if (xpad)
+ *xpad = gtk_widget_size_to_pixel (misc, priv->xpad_unit);
+ if (ypad)
+ *ypad = gtk_widget_size_to_pixel (misc, priv->ypad_unit);
+}
+
+/**
+ * gtk_misc_get_padding_unit:
+ * @misc: a #GtkMisc
+ * @xpad: location to store padding in the X direction, or %NULL
+ * @ypad: location to store padding in the Y direction, or %NULL
+ *
+ * Like gtk_misc_get_padding() but preserves the unit.
+ *
+ * Since: 2.14
+ **/
+void
+gtk_misc_get_padding_unit (GtkMisc *misc,
+ GtkSize *xpad,
+ GtkSize *ypad)
+{
+ GtkMiscPrivate *priv;
+
g_return_if_fail (GTK_IS_MISC (misc));
+ priv = GTK_MISC_GET_PRIVATE (misc);
+
if (xpad)
- *xpad = misc->xpad;
+ *xpad = priv->xpad_unit;
if (ypad)
- *ypad = misc->ypad;
+ *ypad = priv->ypad_unit;
}
static void
@@ -339,5 +388,19 @@ gtk_misc_realize (GtkWidget *widget)
}
}
+static void
+gtk_misc_unit_changed (GtkWidget *widget)
+{
+ GtkMisc *misc = GTK_MISC (widget);
+ GtkMiscPrivate *priv = GTK_MISC_GET_PRIVATE (misc);
+
+ misc->xpad = gtk_widget_size_to_pixel (misc, priv->xpad_unit);
+ misc->ypad = gtk_widget_size_to_pixel (misc, priv->ypad_unit);
+
+ /* must chain up */
+ if (GTK_WIDGET_CLASS (gtk_misc_parent_class)->unit_changed != NULL)
+ GTK_WIDGET_CLASS (gtk_misc_parent_class)->unit_changed (widget);
+}
+
#define __GTK_MISC_C__
#include "gtkaliasdef.c"
diff --git a/gtk/gtkmisc.h b/gtk/gtkmisc.h
index 477c73b..1a6a50c 100644
--- a/gtk/gtkmisc.h
+++ b/gtk/gtkmisc.h
@@ -47,6 +47,7 @@ G_BEGIN_DECLS
typedef struct _GtkMisc GtkMisc;
typedef struct _GtkMiscClass GtkMiscClass;
+typedef struct _GtkMiscPrivate GtkMiscPrivate;
struct _GtkMisc
{
@@ -73,11 +74,14 @@ void gtk_misc_get_alignment (GtkMisc *misc,
gfloat *xalign,
gfloat *yalign);
void gtk_misc_set_padding (GtkMisc *misc,
- gint xpad,
- gint ypad);
+ GtkSize xpad,
+ GtkSize ypad);
void gtk_misc_get_padding (GtkMisc *misc,
gint *xpad,
gint *ypad);
+void gtk_misc_get_padding_unit (GtkMisc *misc,
+ GtkSize *xpad,
+ GtkSize *ypad);
G_END_DECLS
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index 0c1b313..ec6cdf0 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -448,29 +448,23 @@ gtk_range_class_init (GtkRangeClass *class)
GTK_PARAM_READWRITE));
gtk_widget_class_install_style_property (widget_class,
- g_param_spec_int ("slider-width",
- P_("Slider Width"),
- P_("Width of scrollbar or scale thumb"),
- 0,
- G_MAXINT,
- 14,
- GTK_PARAM_READABLE));
+ gtk_param_spec_size ("slider-width",
+ P_("Slider Width"),
+ P_("Width of scrollbar or scale thumb"),
+ 0, G_MAXINT, GTK_SIZE_ONE_TWELFTH_EM (14),
+ GTK_PARAM_READABLE));
gtk_widget_class_install_style_property (widget_class,
- g_param_spec_int ("trough-border",
- P_("Trough Border"),
- P_("Spacing between thumb/steppers and outer trough bevel"),
- 0,
- G_MAXINT,
- 1,
- GTK_PARAM_READABLE));
+ gtk_param_spec_size ("trough-border",
+ P_("Trough Border"),
+ P_("Spacing between thumb/steppers and outer trough bevel"),
+ 0, G_MAXINT, GTK_SIZE_ONE_TWELFTH_EM (1),
+ GTK_PARAM_READABLE));
gtk_widget_class_install_style_property (widget_class,
- g_param_spec_int ("stepper-size",
- P_("Stepper Size"),
- P_("Length of step buttons at ends"),
- 0,
- G_MAXINT,
- 14,
- GTK_PARAM_READABLE));
+ gtk_param_spec_size ("stepper-size",
+ P_("Stepper Size"),
+ P_("Length of step buttons at ends"),
+ 0, G_MAXINT, GTK_SIZE_ONE_TWELFTH_EM (14),
+ GTK_PARAM_READABLE));
/**
* GtkRange:stepper-spacing:
*
@@ -480,29 +474,23 @@ gtk_range_class_init (GtkRangeClass *class)
* stepper-spacing won't have any effect if there are no steppers.
*/
gtk_widget_class_install_style_property (widget_class,
- g_param_spec_int ("stepper-spacing",
- P_("Stepper Spacing"),
- P_("Spacing between step buttons and thumb"),
- 0,
- G_MAXINT,
- 0,
- GTK_PARAM_READABLE));
+ gtk_param_spec_size ("stepper-spacing",
+ P_("Stepper Spacing"),
+ P_("Spacing between step buttons and thumb"),
+ 0, G_MAXINT, 0,
+ GTK_PARAM_READABLE));
gtk_widget_class_install_style_property (widget_class,
- g_param_spec_int ("arrow-displacement-x",
- P_("Arrow X Displacement"),
- P_("How far in the x direction to move the arrow when the button is depressed"),
- G_MININT,
- G_MAXINT,
- 0,
- GTK_PARAM_READABLE));
+ gtk_param_spec_size ("arrow-displacement-x",
+ P_("Arrow X Displacement"),
+ P_("How far in the x direction to move the arrow when the button is depressed"),
+ 0, G_MAXINT, 0,
+ GTK_PARAM_READABLE));
gtk_widget_class_install_style_property (widget_class,
- g_param_spec_int ("arrow-displacement-y",
- P_("Arrow Y Displacement"),
- P_("How far in the y direction to move the arrow when the button is depressed"),
- G_MININT,
- G_MAXINT,
- 0,
- GTK_PARAM_READABLE));
+ gtk_param_spec_size ("arrow-displacement-y",
+ P_("Arrow Y Displacement"),
+ P_("How far in the y direction to move the arrow when the button is depressed"),
+ 0, G_MAXINT, 0,
+ GTK_PARAM_READABLE));
gtk_widget_class_install_style_property (widget_class,
g_param_spec_boolean ("activate-slider",
@@ -661,7 +649,7 @@ gtk_range_init (GtkRange *range)
range->update_policy = GTK_UPDATE_CONTINUOUS;
range->inverted = FALSE;
range->flippable = FALSE;
- range->min_slider_size = 1;
+ range->min_slider_size = GTK_SIZE_ONE_TWELFTH_EM (1);
range->has_stepper_a = FALSE;
range->has_stepper_b = FALSE;
range->has_stepper_c = FALSE;
@@ -2935,7 +2923,7 @@ gtk_range_calc_request (GtkRange *range,
n_steppers = n_steppers_ab + n_steppers_cd;
- slider_length = range->min_slider_size;
+ slider_length = gtk_widget_size_to_pixel (range, range->min_slider_size);
range_rect->x = 0;
range_rect->y = 0;
@@ -3159,11 +3147,11 @@ gtk_range_calc_layout (GtkRange *range,
height = ((bottom - top) * (range->adjustment->page_size /
(range->adjustment->upper - range->adjustment->lower)));
else
- height = range->min_slider_size;
+ height = gtk_widget_size_to_pixel (range, range->min_slider_size);
- if (height < range->min_slider_size ||
+ if (height < gtk_widget_size_to_pixel (range, range->min_slider_size) ||
range->slider_size_fixed)
- height = range->min_slider_size;
+ height = gtk_widget_size_to_pixel (range, range->min_slider_size);
height = MIN (height, layout->trough.height);
@@ -3308,11 +3296,11 @@ gtk_range_calc_layout (GtkRange *range,
width = ((right - left) * (range->adjustment->page_size /
(range->adjustment->upper - range->adjustment->lower)));
else
- width = range->min_slider_size;
+ width = gtk_widget_size_to_pixel (range, range->min_slider_size);
- if (width < range->min_slider_size ||
+ if (width < gtk_widget_size_to_pixel (range, range->min_slider_size) ||
range->slider_size_fixed)
- width = range->min_slider_size;
+ width = gtk_widget_size_to_pixel (range, range->min_slider_size);
width = MIN (width, layout->trough.width);
diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c
index b738d6d..623f571 100644
--- a/gtk/gtkscale.c
+++ b/gtk/gtkscale.c
@@ -110,6 +110,7 @@ static gboolean gtk_scale_expose (GtkWidget *widget,
static void gtk_scale_real_get_layout_offsets (GtkScale *scale,
gint *x,
gint *y);
+static void gtk_scale_unit_changed (GtkWidget *widget);
G_DEFINE_ABSTRACT_TYPE (GtkScale, gtk_scale, GTK_TYPE_RANGE)
@@ -155,6 +156,7 @@ gtk_scale_class_init (GtkScaleClass *class)
widget_class->screen_changed = gtk_scale_screen_changed;
widget_class->expose_event = gtk_scale_expose;
widget_class->size_request = gtk_scale_size_request;
+ widget_class->unit_changed = gtk_scale_unit_changed;
range_class->slider_detail = "Xscale";
range_class->get_range_border = gtk_scale_get_range_border;
@@ -222,22 +224,18 @@ gtk_scale_class_init (GtkScaleClass *class)
GTK_PARAM_READWRITE));
gtk_widget_class_install_style_property (widget_class,
- g_param_spec_int ("slider-length",
- P_("Slider Length"),
- P_("Length of scale's slider"),
- 0,
- G_MAXINT,
- 31,
- GTK_PARAM_READABLE));
+ gtk_param_spec_size ("slider-length",
+ P_("Slider Length"),
+ P_("Length of scale's slider"),
+ 0, G_MAXINT, GTK_SIZE_ONE_TWELFTH_EM (31),
+ GTK_PARAM_READABLE));
gtk_widget_class_install_style_property (widget_class,
- g_param_spec_int ("value-spacing",
- P_("Value spacing"),
- P_("Space between value text and the slider/trough area"),
- 0,
- G_MAXINT,
- 2,
- GTK_PARAM_READABLE));
+ gtk_param_spec_size ("value-spacing",
+ P_("Value spacing"),
+ P_("Space between value text and the slider/trough area"),
+ 0, G_MAXINT, GTK_SIZE_ONE_TWELFTH_EM (2),
+ GTK_PARAM_READABLE));
/* All bindings (even arrow keys) are on both h/v scale, because
* blind users etc. don't care about scale orientation.
@@ -854,14 +852,14 @@ static void
gtk_scale_style_set (GtkWidget *widget,
GtkStyle *previous)
{
- gint slider_length;
+ GtkSize slider_length;
GtkRange *range;
range = GTK_RANGE (widget);
- gtk_widget_style_get (widget,
- "slider-length", &slider_length,
- NULL);
+ gtk_widget_style_get_unit (widget,
+ "slider-length", &slider_length,
+ NULL);
range->min_slider_size = slider_length;
@@ -1355,6 +1353,14 @@ gtk_scale_add_mark (GtkScale *scale,
gtk_widget_queue_resize (GTK_WIDGET (scale));
}
+gtk_scale_unit_changed (GtkWidget *widget)
+{
+ /* must chain up */
+ if (GTK_WIDGET_CLASS (gtk_scale_parent_class)->unit_changed != NULL)
+ GTK_WIDGET_CLASS (gtk_scale_parent_class)->unit_changed (widget);
+
+ _gtk_scale_clear_layout (GTK_SCALE (widget));
+}
#define __GTK_SCALE_C__
#include "gtkaliasdef.c"
diff --git a/gtk/gtkscalebutton.c b/gtk/gtkscalebutton.c
index 628121e..bc81b64 100644
--- a/gtk/gtkscalebutton.c
+++ b/gtk/gtkscalebutton.c
@@ -60,7 +60,7 @@
#include "gtkintl.h"
#include "gtkalias.h"
-#define SCALE_SIZE 100
+#define SCALE_SIZE GTK_SIZE_ONE_TWELFTH_EM(100)
#define CLICK_TIMEOUT 250
enum
@@ -125,6 +125,7 @@ static gboolean gtk_scale_button_scroll (GtkWidget *widget,
GdkEventScroll *event);
static void gtk_scale_button_screen_changed (GtkWidget *widget,
GdkScreen *previous_screen);
+static void gtk_scale_button_unit_changed (GtkWidget *widget);
static gboolean gtk_scale_button_press (GtkWidget *widget,
GdkEventButton *event);
static gboolean gtk_scale_button_key_release (GtkWidget *widget,
@@ -183,6 +184,7 @@ gtk_scale_button_class_init (GtkScaleButtonClass *klass)
widget_class->key_release_event = gtk_scale_button_key_release;
widget_class->scroll_event = gtk_scale_button_scroll;
widget_class->screen_changed = gtk_scale_button_screen_changed;
+ widget_class->unit_changed = gtk_scale_button_unit_changed;
/**
* GtkScaleButton:orientation:
@@ -943,9 +945,9 @@ gtk_scale_popup (GtkWidget *widget,
y += widget->allocation.y;
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
- gtk_window_move (GTK_WINDOW (priv->dock), x, y - (SCALE_SIZE / 2));
+ gtk_window_move (GTK_WINDOW (priv->dock), x, y - (gtk_widget_size_to_pixel (widget, SCALE_SIZE) / 2));
else
- gtk_window_move (GTK_WINDOW (priv->dock), x - (SCALE_SIZE / 2), y);
+ gtk_window_move (GTK_WINDOW (priv->dock), x - (gtk_widget_size_to_pixel (widget, SCALE_SIZE) / 2), y);
gtk_widget_show_all (priv->dock);
@@ -968,9 +970,9 @@ gtk_scale_popup (GtkWidget *widget,
x += (widget->allocation.width - priv->dock->allocation.width) / 2;
y -= startoff;
- y -= GTK_RANGE (priv->scale)->min_slider_size / 2;
+ y -= gtk_widget_size_to_pixel (widget, GTK_RANGE (priv->scale)->min_slider_size) / 2;
m = priv->scale->allocation.height -
- GTK_RANGE (priv->scale)->min_slider_size;
+ gtk_widget_size_to_pixel (widget, GTK_RANGE (priv->scale)->min_slider_size);
y -= m * (1.0 - v);
}
else
@@ -979,9 +981,9 @@ gtk_scale_popup (GtkWidget *widget,
x -= startoff;
y += (widget->allocation.height - priv->dock->allocation.height) / 2;
- x -= GTK_RANGE (priv->scale)->min_slider_size / 2;
+ x -= gtk_widget_size_to_pixel (widget, GTK_RANGE (priv->scale)->min_slider_size) / 2;
m = priv->scale->allocation.width -
- GTK_RANGE (priv->scale)->min_slider_size;
+ gtk_widget_size_to_pixel (widget, GTK_RANGE (priv->scale)->min_slider_size);
x -= m * v;
}
@@ -1061,15 +1063,15 @@ gtk_scale_popup (GtkWidget *widget,
{
e->x = priv->scale->allocation.width / 2;
m = priv->scale->allocation.height -
- GTK_RANGE (priv->scale)->min_slider_size;
- e->y = ((1.0 - v) * m) + GTK_RANGE (priv->scale)->min_slider_size / 2;
+ gtk_widget_size_to_pixel (widget, GTK_RANGE (priv->scale)->min_slider_size);
+ e->y = ((1.0 - v) * m) + gtk_widget_size_to_pixel (widget, GTK_RANGE (priv->scale)->min_slider_size) / 2;
}
else
{
e->y = priv->scale->allocation.height / 2;
m = priv->scale->allocation.width -
- GTK_RANGE (priv->scale)->min_slider_size;
- e->x = (v * m) + GTK_RANGE (priv->scale)->min_slider_size / 2;
+ gtk_widget_size_to_pixel (widget, GTK_RANGE (priv->scale)->min_slider_size);
+ e->x = (v * m) + gtk_widget_size_to_pixel (widget, GTK_RANGE (priv->scale)->min_slider_size) / 2;
}
gtk_widget_event (priv->scale, (GdkEvent *) e);
@@ -1413,12 +1415,14 @@ gtk_scale_button_scale_new (GtkScaleButton *button)
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
{
- gtk_widget_set_size_request (GTK_WIDGET (scale), -1, SCALE_SIZE);
+ gtk_widget_set_size_request (GTK_WIDGET (scale), -1,
+ gtk_widget_size_to_pixel (button, SCALE_SIZE));
gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
}
else
{
- gtk_widget_set_size_request (GTK_WIDGET (scale), SCALE_SIZE, -1);
+ gtk_widget_set_size_request (GTK_WIDGET (scale),
+ gtk_widget_size_to_pixel (button, SCALE_SIZE), -1);
gtk_range_set_inverted (GTK_RANGE (scale), FALSE);
}
@@ -1564,5 +1568,18 @@ gtk_scale_button_scale_value_changed (GtkRange *range)
g_object_notify (G_OBJECT (button), "value");
}
+static void
+gtk_scale_button_unit_changed (GtkWidget *widget)
+{
+ GtkScaleButton *scale_button = GTK_SCALE_BUTTON (widget);
+
+ /* must chain up */
+ if (GTK_WIDGET_CLASS (gtk_scale_button_parent_class)->unit_changed != NULL)
+ GTK_WIDGET_CLASS (gtk_scale_button_parent_class)->unit_changed (widget);
+
+ gtk_scale_button_update_icon (scale_button);
+}
+
+
#define __GTK_SCALE_BUTTON_C__
#include "gtkaliasdef.c"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]