From: Matthias Clasen Date: Thu, 7 Jun 2018 17:06:07 +0000 (-0400) Subject: puzzle: Use plain labels X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~22^2~204 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ebf042d305510c0f1ec1a2565524a2dc7c9267f8;p=gtk4.git puzzle: Use plain labels The previous code looked cool in the UI, but was too much of a hack in the code. --- diff --git a/demos/gtk-demo/sliding_puzzle.c b/demos/gtk-demo/sliding_puzzle.c index 09671024dc..f21a84b8f1 100644 --- a/demos/gtk-demo/sliding_puzzle.c +++ b/demos/gtk-demo/sliding_puzzle.c @@ -11,166 +11,6 @@ #include "puzzlepiece.h" #include "paintable.h" -#define ICON_TYPE_PAINTABLE (icon_paintable_get_type ()) - -G_DECLARE_FINAL_TYPE (IconPaintable, icon_paintable, ICON, PAINTABLE, GObject) - -GdkPaintable * icon_paintable_new (GdkPaintable *paintable, - double height); - -struct _IconPaintable -{ - GObject parent_instance; - - GdkPaintable *paintable; - double height; - double scale_factor; -}; - -struct _IconPaintableClass -{ - GObjectClass parent_class; -}; - - -static void -icon_paintable_paintable_snapshot (GdkPaintable *paintable, - GdkSnapshot *snapshot, - double width, - double height) -{ - IconPaintable *self = ICON_PAINTABLE (paintable); - - if (self->scale_factor == 1.0) - { - gdk_paintable_snapshot (self->paintable, snapshot, width, height); - } - else - { - graphene_matrix_t scale_matrix; - - graphene_matrix_init_scale (&scale_matrix, 1.0 / self->scale_factor, 1.0 / self->scale_factor, 1.0); - gtk_snapshot_push_transform (snapshot, &scale_matrix); - gdk_paintable_snapshot (self->paintable, - snapshot, - width * self->scale_factor, - height * self->scale_factor); - gtk_snapshot_pop (snapshot); - } -} - -static GdkPaintable * -icon_paintable_paintable_get_current_image (GdkPaintable *paintable) -{ - IconPaintable *self = ICON_PAINTABLE (paintable); - GdkPaintable *current_paintable, *current_self; - - current_paintable = gdk_paintable_get_current_image (self->paintable); - current_self = icon_paintable_new (current_paintable, self->height); - g_object_unref (current_paintable); - - return current_self; -} - -static GdkPaintableFlags -icon_paintable_paintable_get_flags (GdkPaintable *paintable) -{ - IconPaintable *self = ICON_PAINTABLE (paintable); - - return gdk_paintable_get_flags (self->paintable); -} - -static int -icon_paintable_paintable_get_intrinsic_width (GdkPaintable *paintable) -{ - IconPaintable *self = ICON_PAINTABLE (paintable); - - return gdk_paintable_get_intrinsic_width (self->paintable) / self->scale_factor; -} - -static int -icon_paintable_paintable_get_intrinsic_height (GdkPaintable *paintable) -{ - IconPaintable *self = ICON_PAINTABLE (paintable); - - return gdk_paintable_get_intrinsic_height (self->paintable) / self->scale_factor; -} - -static double icon_paintable_paintable_get_intrinsic_aspect_ratio (GdkPaintable *paintable) -{ - IconPaintable *self = ICON_PAINTABLE (paintable); - - return gdk_paintable_get_intrinsic_aspect_ratio (self->paintable); -}; - -static void -icon_paintable_paintable_init (GdkPaintableInterface *iface) -{ - iface->snapshot = icon_paintable_paintable_snapshot; - iface->get_current_image = icon_paintable_paintable_get_current_image; - iface->get_flags = icon_paintable_paintable_get_flags; - iface->get_intrinsic_width = icon_paintable_paintable_get_intrinsic_width; - iface->get_intrinsic_height = icon_paintable_paintable_get_intrinsic_height; - iface->get_intrinsic_aspect_ratio = icon_paintable_paintable_get_intrinsic_aspect_ratio; -} - -G_DEFINE_TYPE_EXTENDED (IconPaintable, icon_paintable, G_TYPE_OBJECT, 0, - G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE, - icon_paintable_paintable_init)) - -static void -icon_paintable_dispose (GObject *object) -{ - IconPaintable *self = ICON_PAINTABLE (object); - - if (self->paintable) - { - g_signal_handlers_disconnect_by_func (self->paintable, gdk_paintable_invalidate_contents, self); - g_signal_handlers_disconnect_by_func (self->paintable, gdk_paintable_invalidate_size, self); - g_clear_object (&self->paintable); - } - - G_OBJECT_CLASS (icon_paintable_parent_class)->dispose (object); -} - -static void -icon_paintable_class_init (IconPaintableClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - gobject_class->dispose = icon_paintable_dispose; -} - -static void -icon_paintable_init (IconPaintable *self) -{ - self->scale_factor = 1.0; -} - -GdkPaintable * -icon_paintable_new (GdkPaintable *paintable, - double height) -{ - IconPaintable *self; - - g_return_val_if_fail (GDK_IS_PAINTABLE (paintable), NULL); - g_return_val_if_fail (height > 0.0, NULL); - - self = g_object_new (ICON_TYPE_PAINTABLE, NULL); - - self->paintable = g_object_ref (paintable); - g_signal_connect_swapped (paintable, "invalidate-contents", G_CALLBACK (gdk_paintable_invalidate_contents), self); - g_signal_connect_swapped (paintable, "invalidate-size", G_CALLBACK (gdk_paintable_invalidate_size), self); - self->height = height; - if (gdk_paintable_get_intrinsic_height (paintable) == 0) - self->scale_factor = 1.0; - else - self->scale_factor = gdk_paintable_get_intrinsic_height (paintable) / height; - - return GDK_PAINTABLE (self); -} - - static GtkWidget *window = NULL; static GtkWidget *frame = NULL; static GtkWidget *size_spin = NULL; @@ -497,21 +337,11 @@ do_sliding_puzzle (GtkWidget *do_widget) gtk_grid_set_column_spacing (GTK_GRID (tweaks), 10); g_object_set (tweaks, "margin", 10, NULL); - rose_button = button = gtk_radio_button_new (NULL); - image = gtk_image_new_from_paintable (icon_paintable_new (rose, 40)); - gtk_image_set_can_shrink (GTK_IMAGE (image), TRUE); - gtk_widget_set_size_request (image, 40, 40); - gtk_container_add (GTK_CONTAINER (button), image); + rose_button = button = gtk_radio_button_new_with_label (NULL, "Rose"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); gtk_grid_attach (GTK_GRID (tweaks), button, 0, 0, 1, 1); - button = gtk_radio_button_new_from_widget (button); - image = gtk_image_new_from_paintable (icon_paintable_new (atom, 40)); - gtk_image_set_can_shrink (GTK_IMAGE (image), TRUE); - gtk_widget_set_size_request (image, 40, 40); - gtk_container_add (GTK_CONTAINER (button), image); - gtk_widget_set_halign (button, GTK_ALIGN_CENTER); - gtk_widget_set_valign (button, GTK_ALIGN_CENTER); + button = gtk_radio_button_new_with_label_from_widget (button, "Danger"); gtk_grid_attach (GTK_GRID (tweaks), button, 1, 0, 1, 1); label = gtk_label_new ("Size");