diff options
author | Havoc Pennington <hp@redhat.com> | 2001-02-17 00:11:03 +0000 |
---|---|---|
committer | Havoc Pennington <hp@src.gnome.org> | 2001-02-17 00:11:03 +0000 |
commit | 08add3cd503b3b891a0028b9b5400e271439c89f (patch) | |
tree | 1de50fc1006a3cc8c2c1de1b8742c200e7888840 /gtk/gtkalignment.c | |
parent | f139b1c9036128e5fef9bb0fea3a77d1afb8b8fe (diff) | |
download | gtk+-08add3cd503b3b891a0028b9b5400e271439c89f.tar.gz |
convert the X coordinates so they're with respect to the line, rather than
2001-02-15 Havoc Pennington <hp@redhat.com>
* gdk/gdkpango.c (gdk_pango_layout_line_get_clip_region): convert
the X coordinates so they're with respect to the line, rather than
with respect to the layout.
* gtk/gtkalignment.c: Convert to new property API, patch from Lee
Mallabone
* gtk/testgtk.c (create_range_controls): add vscale tests,
and inverted test
* gtk/gtkrange.c (gtk_range_set_inverted): new function to fix
#50806
* gtk/gtkentry.c (gtk_entry_get_text): add G_CONST_RETURN
* gtk/gtktextiter.h (gtk_text_iter_is_last): rename
gtk_text_iter_is_end
* gtk/gtktextbuffer.h (gtk_text_buffer_get_last_iter):
rename gtk_text_buffer_get_end_iter
* gtk/testgtk.c (create_labels): Add test for selectable
* gtk/gtkentry.c (gtk_entry_draw_text): Use new GDK API to draw
the selection stuff. This code is kind of broken since it doesn't
use the theme engine.
* gdk/gdkpango.c (gdk_pango_layout_line_get_clip_region):
fix infinite loop and y offset problem
(gdk_draw_layout_line_with_colors): fix foreground color handling
* gtk/gtklabel.h, gtk/gtklabel.c: Implement a "selectable" flag
that makes the label selectable.
* gtk/gtklabel.c (gtk_label_style_set): recreate the label's
layout when the style is set, since fonts etc. could have changed.
Diffstat (limited to 'gtk/gtkalignment.c')
-rw-r--r-- | gtk/gtkalignment.c | 175 |
1 files changed, 118 insertions, 57 deletions
diff --git a/gtk/gtkalignment.c b/gtk/gtkalignment.c index 54c49ee38f..8d9cb05ee2 100644 --- a/gtk/gtkalignment.c +++ b/gtk/gtkalignment.c @@ -25,14 +25,17 @@ */ #include "gtkalignment.h" - +#include "gtkintl.h" enum { - ARG_0, - ARG_XALIGN, - ARG_YALIGN, - ARG_XSCALE, - ARG_YSCALE + PROP_0, + + PROP_XALIGN, + PROP_YALIGN, + PROP_XSCALE, + PROP_YSCALE, + + PROP_LAST }; @@ -42,14 +45,16 @@ static void gtk_alignment_size_request (GtkWidget *widget, GtkRequisition *requisition); static void gtk_alignment_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static void gtk_alignment_set_arg (GtkObject *object, - GtkArg *arg, - guint arg_id); -static void gtk_alignment_get_arg (GtkObject *object, - GtkArg *arg, - guint arg_id); - - +static void gtk_alignment_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec, + const gchar *trailer); +static void gtk_alignment_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec, + const gchar *trailer); GtkType gtk_alignment_get_type (void) @@ -85,13 +90,46 @@ gtk_alignment_class_init (GtkAlignmentClass *class) object_class = (GtkObjectClass*) class; widget_class = (GtkWidgetClass*) class; - gtk_object_add_arg_type ("GtkAlignment::xalign", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_XALIGN); - gtk_object_add_arg_type ("GtkAlignment::yalign", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_YALIGN); - gtk_object_add_arg_type ("GtkAlignment::xscale", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_XSCALE); - gtk_object_add_arg_type ("GtkAlignment::yscale", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_YSCALE); - - object_class->set_arg = gtk_alignment_set_arg; - object_class->get_arg = gtk_alignment_get_arg; + g_object_class_install_property(G_OBJECT_CLASS(object_class), + PROP_XALIGN, + g_param_spec_float("xalign", + _("Horizontal alignment"), + _("Value between 0.0 and 1.0 to indicate X alignment"), + 0.0, + 1.0, + 0.5, + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + g_object_class_install_property(G_OBJECT_CLASS(object_class), + PROP_YALIGN, + g_param_spec_float("yalign", + _("Vertical alignment"), + _("Value between 0.0 and 1.0 to indicate Y alignment"), + 0.0, + 1.0, + 0.5, + G_PARAM_READABLE | G_PARAM_WRITABLE)); + g_object_class_install_property(G_OBJECT_CLASS(object_class), + PROP_XSCALE, + g_param_spec_float("xscale", + _("Horizontal scale"), + _("Value between 0.0 and 1.0 to indicate X scale"), + 0.0, + 1.0, + 0.5, + G_PARAM_READABLE | G_PARAM_WRITABLE)); + g_object_class_install_property(G_OBJECT_CLASS(object_class), + PROP_YSCALE, + g_param_spec_float("yscale", + _("Vertical scale"), + _("Value between 0.0 and 1.0 to indicate Y scale"), + 0.0, + 1.0, + 0.5, + G_PARAM_READABLE | G_PARAM_WRITABLE)); + + G_OBJECT_CLASS(object_class)->set_property = gtk_alignment_set_property; + G_OBJECT_CLASS(object_class)->get_property = gtk_alignment_get_property; widget_class->size_request = gtk_alignment_size_request; widget_class->size_allocate = gtk_alignment_size_allocate; @@ -126,75 +164,79 @@ gtk_alignment_new (gfloat xalign, return GTK_WIDGET (alignment); } -static void -gtk_alignment_set_arg (GtkObject *object, - GtkArg *arg, - guint arg_id) +static void gtk_alignment_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec, + const gchar *trailer) { GtkAlignment *alignment; alignment = GTK_ALIGNMENT (object); - switch (arg_id) + switch (prop_id) { - case ARG_XALIGN: + case PROP_XALIGN: gtk_alignment_set (alignment, - GTK_VALUE_FLOAT (*arg), + g_value_get_float(value), alignment->yalign, alignment->xscale, alignment->yscale); break; - case ARG_YALIGN: + case PROP_YALIGN: gtk_alignment_set (alignment, alignment->xalign, - GTK_VALUE_FLOAT (*arg), + g_value_get_float(value), alignment->xscale, alignment->yscale); break; - case ARG_XSCALE: + case PROP_XSCALE: gtk_alignment_set (alignment, alignment->xalign, alignment->yalign, - GTK_VALUE_FLOAT (*arg), + g_value_get_float(value), alignment->yscale); break; - case ARG_YSCALE: + case PROP_YSCALE: gtk_alignment_set (alignment, alignment->xalign, alignment->yalign, alignment->xscale, - GTK_VALUE_FLOAT (*arg)); + g_value_get_float(value)); break; default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } -static void -gtk_alignment_get_arg (GtkObject *object, - GtkArg *arg, - guint arg_id) +static void gtk_alignment_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec, + const gchar *trailer) { GtkAlignment *alignment; alignment = GTK_ALIGNMENT (object); - - switch (arg_id) + g_assert (GTK_IS_ALIGNMENT(object)); + + switch (prop_id) { - case ARG_XALIGN: - GTK_VALUE_FLOAT (*arg) = alignment->xalign; + case PROP_XALIGN: + g_value_set_float(value, alignment->xalign); break; - case ARG_YALIGN: - GTK_VALUE_FLOAT (*arg) = alignment->yalign; + case PROP_YALIGN: + g_value_set_float(value, alignment->yalign); break; - case ARG_XSCALE: - GTK_VALUE_FLOAT (*arg) = alignment->xscale; + case PROP_XSCALE: + g_value_set_float(value, alignment->xscale); break; - case ARG_YSCALE: - GTK_VALUE_FLOAT (*arg) = alignment->yscale; + case PROP_YSCALE: + g_value_set_float(value, alignment->yscale); break; default: - arg->type = GTK_TYPE_INVALID; + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } @@ -206,6 +248,8 @@ gtk_alignment_set (GtkAlignment *alignment, gfloat xscale, gfloat yscale) { + gboolean values_changed = FALSE; + g_return_if_fail (alignment != NULL); g_return_if_fail (GTK_IS_ALIGNMENT (alignment)); @@ -214,16 +258,33 @@ gtk_alignment_set (GtkAlignment *alignment, xscale = CLAMP (xscale, 0.0, 1.0); yscale = CLAMP (yscale, 0.0, 1.0); - if ((alignment->xalign != xalign) || - (alignment->yalign != yalign) || - (alignment->xscale != xscale) || - (alignment->yscale != yscale)) + if (alignment->xalign != xalign) + { + values_changed = TRUE; + alignment->xalign = xalign; + g_object_notify(G_OBJECT(alignment), "xalign"); + } + if (alignment->yalign != yalign) + { + values_changed = TRUE; + alignment->yalign = yalign; + g_object_notify(G_OBJECT(alignment), "yalign"); + } + if (alignment->xscale != xscale) { - alignment->xalign = xalign; - alignment->yalign = yalign; - alignment->xscale = xscale; - alignment->yscale = yscale; + values_changed = TRUE; + alignment->xscale = xscale; + g_object_notify(G_OBJECT(alignment), "xscale"); + } + if (alignment->yscale != yscale) + { + values_changed = TRUE; + alignment->yscale = yscale; + g_object_notify(G_OBJECT(alignment), "yscale"); + } + if (values_changed == TRUE) + { gtk_widget_size_allocate (GTK_WIDGET (alignment), &(GTK_WIDGET (alignment)->allocation)); gtk_widget_queue_draw (GTK_WIDGET (alignment)); } |