X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;ds=sidebyside;f=gtk%2Fgtkspinner.c;h=af96fe9d50d8533b93b2b1711202a4f43ed7a79c;hb=25bf8ba4defeff5b22b87cb9bc337042730e9f47;hp=a4ab26a49ad0e257f577619ecde4c3a1788990cc;hpb=e6db32de44a1c85472939275ba554cfbb50354c9;p=~andy%2Fgtk diff --git a/gtk/gtkspinner.c b/gtk/gtkspinner.c index a4ab26a49..af96fe9d5 100644 --- a/gtk/gtkspinner.c +++ b/gtk/gtkspinner.c @@ -53,7 +53,7 @@ */ -G_DEFINE_TYPE (GtkSpinner, gtk_spinner, GTK_TYPE_DRAWING_AREA); +#define SPINNER_SIZE 12 enum { PROP_0, @@ -69,15 +69,11 @@ struct _GtkSpinnerPrivate guint timeout; }; -static void gtk_spinner_class_init (GtkSpinnerClass *klass); -static void gtk_spinner_init (GtkSpinner *spinner); static void gtk_spinner_dispose (GObject *gobject); -static void gtk_spinner_realize (GtkWidget *widget); -static void gtk_spinner_unrealize (GtkWidget *widget); -static gboolean gtk_spinner_expose (GtkWidget *widget, - GdkEventExpose *event); -static void gtk_spinner_screen_changed (GtkWidget *widget, - GdkScreen *old_screen); +static void gtk_spinner_map (GtkWidget *widget); +static void gtk_spinner_unmap (GtkWidget *widget); +static gboolean gtk_spinner_draw (GtkWidget *widget, + cairo_t *cr); static void gtk_spinner_style_set (GtkWidget *widget, GtkStyle *prev_style); static void gtk_spinner_get_property (GObject *object, @@ -90,9 +86,18 @@ static void gtk_spinner_set_property (GObject *object, GParamSpec *pspec); static void gtk_spinner_set_active (GtkSpinner *spinner, gboolean active); +static void gtk_spinner_get_preferred_width (GtkWidget *widget, + gint *minimum_size, + gint *natural_size); +static void gtk_spinner_get_preferred_height (GtkWidget *widget, + gint *minimum_size, + gint *natural_size); + static AtkObject *gtk_spinner_get_accessible (GtkWidget *widget); static GType gtk_spinner_accessible_get_type (void); +G_DEFINE_TYPE (GtkSpinner, gtk_spinner, GTK_TYPE_WIDGET) + static void gtk_spinner_class_init (GtkSpinnerClass *klass) { @@ -106,12 +111,13 @@ gtk_spinner_class_init (GtkSpinnerClass *klass) gobject_class->set_property = gtk_spinner_set_property; widget_class = GTK_WIDGET_CLASS(klass); - widget_class->expose_event = gtk_spinner_expose; - widget_class->realize = gtk_spinner_realize; - widget_class->unrealize = gtk_spinner_unrealize; - widget_class->screen_changed = gtk_spinner_screen_changed; + widget_class->map = gtk_spinner_map; + widget_class->unmap = gtk_spinner_unmap; + widget_class->draw = gtk_spinner_draw; widget_class->style_set = gtk_spinner_style_set; widget_class->get_accessible = gtk_spinner_get_accessible; + widget_class->get_preferred_width = gtk_spinner_get_preferred_width; + widget_class->get_preferred_height = gtk_spinner_get_preferred_height; /* GtkSpinner:active: * @@ -213,35 +219,52 @@ gtk_spinner_init (GtkSpinner *spinner) gtk_widget_set_has_window (GTK_WIDGET (spinner), FALSE); } +static void +gtk_spinner_get_preferred_width (GtkWidget *widget, + gint *minimum_size, + gint *natural_size) +{ + if (minimum_size) + *minimum_size = SPINNER_SIZE; + + if (natural_size) + *natural_size = SPINNER_SIZE; +} + +static void +gtk_spinner_get_preferred_height (GtkWidget *widget, + gint *minimum_size, + gint *natural_size) +{ + if (minimum_size) + *minimum_size = SPINNER_SIZE; + + if (natural_size) + *natural_size = SPINNER_SIZE; +} + static gboolean -gtk_spinner_expose (GtkWidget *widget, - GdkEventExpose *event) +gtk_spinner_draw (GtkWidget *widget, + cairo_t *cr) { GtkStateType state_type; GtkSpinnerPrivate *priv; - int width, height; priv = GTK_SPINNER (widget)->priv; - width = widget->allocation.width; - height = widget->allocation.height; - - if ((width < 12) || (height <12)) - gtk_widget_set_size_request (widget, 12, 12); - state_type = GTK_STATE_NORMAL; if (!gtk_widget_is_sensitive (widget)) state_type = GTK_STATE_INSENSITIVE; - gtk_paint_spinner (widget->style, - widget->window, + gtk_paint_spinner (gtk_widget_get_style (widget), + cr, state_type, - &event->area, widget, "spinner", priv->current, - event->area.x, event->area.y, - event->area.width, event->area.height); + 0, 0, + gtk_widget_get_allocated_width (widget), + gtk_widget_get_allocated_height (widget)); return FALSE; } @@ -285,51 +308,27 @@ gtk_spinner_remove_timeout (GtkSpinner *spinner) } static void -gtk_spinner_realize (GtkWidget *widget) +gtk_spinner_map (GtkWidget *widget) { - GtkSpinnerPrivate *priv; - - priv = GTK_SPINNER (widget)->priv; + GtkSpinner *spinner = GTK_SPINNER (widget); + GtkSpinnerPrivate *priv = spinner->priv; - GTK_WIDGET_CLASS (gtk_spinner_parent_class)->realize (widget); + GTK_WIDGET_CLASS (gtk_spinner_parent_class)->map (widget); if (priv->active) - gtk_spinner_add_timeout (GTK_SPINNER (widget)); + gtk_spinner_add_timeout (spinner); } static void -gtk_spinner_unrealize (GtkWidget *widget) +gtk_spinner_unmap (GtkWidget *widget) { - GtkSpinnerPrivate *priv; - - priv = GTK_SPINNER (widget)->priv; + GtkSpinner *spinner = GTK_SPINNER (widget); + GtkSpinnerPrivate *priv = spinner->priv; if (priv->timeout != 0) - { - gtk_spinner_remove_timeout (GTK_SPINNER (widget)); - } - - GTK_WIDGET_CLASS (gtk_spinner_parent_class)->unrealize (widget); -} - -static void -gtk_spinner_screen_changed (GtkWidget* widget, GdkScreen* old_screen) -{ - GtkSpinner *spinner; - GdkScreen* new_screen; - GdkColormap* colormap; - - spinner = GTK_SPINNER (widget); - - new_screen = gtk_widget_get_screen (widget); - colormap = gdk_screen_get_rgba_colormap (new_screen); - - if (!colormap) - { - colormap = gdk_screen_get_rgb_colormap (new_screen); - } + gtk_spinner_remove_timeout (spinner); - gtk_widget_set_colormap (widget, colormap); + GTK_WIDGET_CLASS (gtk_spinner_parent_class)->unmap (widget); } static void @@ -473,6 +472,7 @@ gtk_spinner_accessible_image_get_size (AtkImage *image, gint *width, gint *height) { + GtkAllocation allocation; GtkWidget *widget; widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (image)); @@ -482,8 +482,9 @@ gtk_spinner_accessible_image_get_size (AtkImage *image, } else { - *width = widget->allocation.width; - *height = widget->allocation.height; + gtk_widget_get_allocation (widget, &allocation); + *width = allocation.width; + *height = allocation.height; } } @@ -507,7 +508,6 @@ gtk_spinner_accessible_get_type (void) (GInterfaceFinalizeFunc) NULL, NULL }; - GType type; GType parent_atk_type; GTypeInfo tinfo = { 0 }; GTypeQuery query;