CLAMP digits into a meaningfull range (we need to stay below a certain

Mon Jan 18 18:53:08 1999  Tim Janik  <timj@gtk.org>

        * gtk/gtkscale.c (gtk_scale_set_digits): CLAMP digits into a
        meaningfull range (we need to stay below a certain limit anyways
        to avoid string buffer overflows).

        * gtk/gtkvscale.c (gtk_vscale_pos_background): fixed up background
        area calculations for GTK_POS_RIGHT and GTK_POS_BOTTOM.
        * gtk/gtkhscale.c (gtk_hscale_pos_background): likewise.
        (gtk_hscale_draw_value): safety CLAMP the value's x position for
        GTK_POS_TOP and GTK_POS_BOTTOM, so we don't paint strings outside of
        our allocation.

        * gtk/gtkscale.c: implemented GtkScale::digits, GtkScale::draw_value
        and GtkScale::value_pos arguments.
This commit is contained in:
Tim Janik
1999-01-18 19:42:59 +00:00
committed by Tim Janik
parent 7709c1d12d
commit 4ee10fdefa
11 changed files with 211 additions and 13 deletions

View File

@ -23,9 +23,22 @@
#define SCALE_CLASS(w) GTK_SCALE_CLASS (GTK_OBJECT (w)->klass)
enum {
ARG_0,
ARG_DIGITS,
ARG_DRAW_VALUE,
ARG_VALUE_POS
};
static void gtk_scale_class_init (GtkScaleClass *klass);
static void gtk_scale_init (GtkScale *scale);
static void gtk_scale_set_arg (GtkObject *object,
GtkArg *arg,
guint arg_id);
static void gtk_scale_get_arg (GtkObject *object,
GtkArg *arg,
guint arg_id);
static void gtk_scale_map (GtkWidget *widget);
static void gtk_scale_unmap (GtkWidget *widget);
@ -70,12 +83,28 @@ gtk_scale_class_init (GtkScaleClass *class)
object_class = (GtkObjectClass*) class;
range_class = (GtkRangeClass*) class;
widget_class = (GtkWidgetClass*) class;
parent_class = gtk_type_class (GTK_TYPE_RANGE);
gtk_object_add_arg_type ("GtkScale::digits",
GTK_TYPE_INT,
GTK_ARG_READWRITE,
ARG_DIGITS);
gtk_object_add_arg_type ("GtkScale::draw_value",
GTK_TYPE_BOOL,
GTK_ARG_READWRITE,
ARG_DRAW_VALUE);
gtk_object_add_arg_type ("GtkScale::value_pos",
GTK_TYPE_POSITION_TYPE,
GTK_ARG_READWRITE,
ARG_VALUE_POS);
object_class->set_arg = gtk_scale_set_arg;
object_class->get_arg = gtk_scale_get_arg;
widget_class->map = gtk_scale_map;
widget_class->unmap = gtk_scale_unmap;
range_class->draw_background = gtk_scale_draw_background;
class->slider_length = 31;
@ -83,6 +112,57 @@ gtk_scale_class_init (GtkScaleClass *class)
class->draw_value = NULL;
}
static void
gtk_scale_set_arg (GtkObject *object,
GtkArg *arg,
guint arg_id)
{
GtkScale *scale;
scale = GTK_SCALE (object);
switch (arg_id)
{
case ARG_DIGITS:
gtk_scale_set_digits (scale, GTK_VALUE_INT (*arg));
break;
case ARG_DRAW_VALUE:
gtk_scale_set_draw_value (scale, GTK_VALUE_BOOL (*arg));
break;
case ARG_VALUE_POS:
gtk_scale_set_value_pos (scale, GTK_VALUE_ENUM (*arg));
break;
default:
break;
}
}
static void
gtk_scale_get_arg (GtkObject *object,
GtkArg *arg,
guint arg_id)
{
GtkScale *scale;
scale = GTK_SCALE (object);
switch (arg_id)
{
case ARG_DIGITS:
GTK_VALUE_INT (*arg) = GTK_RANGE (scale)->digits;
break;
case ARG_DRAW_VALUE:
GTK_VALUE_BOOL (*arg) = scale->draw_value;
break;
case ARG_VALUE_POS:
GTK_VALUE_ENUM (*arg) = scale->value_pos;
break;
default:
arg->type = GTK_TYPE_INVALID;
break;
}
}
static void
gtk_scale_init (GtkScale *scale)
{
@ -131,28 +211,30 @@ gtk_scale_set_digits (GtkScale *scale,
g_return_if_fail (scale != NULL);
g_return_if_fail (GTK_IS_SCALE (scale));
digits = CLAMP (digits, -1, 16);
if (GTK_RANGE (scale)->digits != digits)
{
GTK_RANGE (scale)->digits = digits;
if (GTK_WIDGET_VISIBLE (scale) && GTK_WIDGET_MAPPED (scale))
gtk_widget_queue_resize (GTK_WIDGET (scale));
gtk_widget_queue_resize (GTK_WIDGET (scale));
}
}
void
gtk_scale_set_draw_value (GtkScale *scale,
gint draw_value)
gboolean draw_value)
{
g_return_if_fail (scale != NULL);
g_return_if_fail (GTK_IS_SCALE (scale));
draw_value = draw_value != FALSE;
if (scale->draw_value != draw_value)
{
scale->draw_value = (draw_value != 0);
scale->draw_value = draw_value;
if (GTK_WIDGET_VISIBLE (scale) && GTK_WIDGET_MAPPED (scale))
gtk_widget_queue_resize (GTK_WIDGET (scale));
gtk_widget_queue_resize (GTK_WIDGET (scale));
}
}