summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-05-03 16:32:33 -0400
committerMatthias Clasen <mclasen@redhat.com>2020-05-04 22:53:08 -0400
commitfa848e94d2b1a7910d265d928c6bed8ec58cebeb (patch)
tree3a552050ddab40016223f856cca6a9afb9aa1056
parentd8e47383cb2ce69e9db43455357fb29acf3b5174 (diff)
downloadgtk+-fa848e94d2b1a7910d265d928c6bed8ec58cebeb.tar.gz
gtk-demo: Port blur demo from GtkBin
-rw-r--r--demos/gtk-demo/bluroverlay.c70
-rw-r--r--demos/gtk-demo/bluroverlay.h7
-rw-r--r--demos/gtk-demo/transparent.c2
3 files changed, 32 insertions, 47 deletions
diff --git a/demos/gtk-demo/bluroverlay.c b/demos/gtk-demo/bluroverlay.c
index b48747f78b..6436b3cad4 100644
--- a/demos/gtk-demo/bluroverlay.c
+++ b/demos/gtk-demo/bluroverlay.c
@@ -39,7 +39,7 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
static GQuark child_data_quark = 0;
-G_DEFINE_TYPE (BlurOverlay, blur_overlay, GTK_TYPE_BIN)
+G_DEFINE_TYPE (BlurOverlay, blur_overlay, GTK_TYPE_WIDGET)
static void
blur_overlay_set_overlay_child (GtkWidget *widget,
@@ -204,7 +204,7 @@ blur_overlay_size_allocate (GtkWidget *widget,
GtkWidget *child;
GtkWidget *main_widget;
- main_widget = gtk_overlay_get_child (GTK_OVERLAY (overlay));
+ main_widget = overlay->main_widget;
if (main_widget && gtk_widget_get_visible (main_widget))
gtk_widget_size_allocate (main_widget,
&(GtkAllocation) {
@@ -291,43 +291,6 @@ blur_overlay_get_child_position (BlurOverlay *overlay,
}
static void
-blur_overlay_add (GtkContainer *container,
- GtkWidget *widget)
-{
- BlurOverlay *overlay = BLUR_OVERLAY (container);
- gtk_widget_insert_after (widget, GTK_WIDGET (container), NULL);
- overlay->main_widget = widget;
-}
-
-static void
-blur_overlay_remove (GtkContainer *container,
- GtkWidget *widget)
-{
- BlurOverlay *overlay = BLUR_OVERLAY (container);
- gtk_widget_unparent (widget);
- if (overlay->main_widget == widget)
- overlay->main_widget = NULL;
-}
-
-static void
-blur_overlay_forall (GtkContainer *overlay,
- GtkCallback callback,
- gpointer callback_data)
-{
- GtkWidget *child;
-
- child = gtk_widget_get_first_child (GTK_WIDGET (overlay));
- while (child != NULL)
- {
- GtkWidget *next = gtk_widget_get_next_sibling (child);
-
- (* callback) (child, callback_data);
-
- child = next;
- }
-}
-
-static void
blur_overlay_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot)
{
@@ -421,20 +384,31 @@ blur_overlay_snapshot (GtkWidget *widget,
}
static void
+blur_overlay_dispose (GObject *object)
+{
+ BlurOverlay *overlay = BLUR_OVERLAY (object);
+ GtkWidget *child;
+
+ g_clear_pointer (&overlay->main_widget, gtk_widget_unparent);
+
+ while ((child = gtk_widget_get_first_child (GTK_WIDGET (overlay))))
+ gtk_widget_unparent (child);
+
+ G_OBJECT_CLASS (blur_overlay_parent_class)->dispose (object);
+}
+
+static void
blur_overlay_class_init (BlurOverlayClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
+
+ object_class->dispose = blur_overlay_dispose;
widget_class->measure = blur_overlay_measure;
widget_class->size_allocate = blur_overlay_size_allocate;
widget_class->snapshot = blur_overlay_snapshot;
- container_class->add = blur_overlay_add;
- container_class->remove = blur_overlay_remove;
- container_class->forall = blur_overlay_forall;
-
klass->get_child_position = blur_overlay_get_child_position;
signals[GET_CHILD_POSITION] =
@@ -477,3 +451,11 @@ blur_overlay_add_overlay (BlurOverlay *overlay,
blur_overlay_set_overlay_child (widget, child);
}
+
+void
+blur_overlay_set_child (BlurOverlay *overlay,
+ GtkWidget *widget)
+{
+ gtk_widget_insert_after (widget, GTK_WIDGET (overlay), NULL);
+ overlay->main_widget = widget;
+}
diff --git a/demos/gtk-demo/bluroverlay.h b/demos/gtk-demo/bluroverlay.h
index e3fc27c7a8..57aa1fb757 100644
--- a/demos/gtk-demo/bluroverlay.h
+++ b/demos/gtk-demo/bluroverlay.h
@@ -37,14 +37,14 @@ typedef struct _BlurOverlayClass BlurOverlayClass;
struct _BlurOverlay
{
- GtkBin parent_instance;
+ GtkWidget parent_instance;
GtkWidget *main_widget;
};
struct _BlurOverlayClass
{
- GtkBinClass parent_class;
+ GtkWidgetClass parent_class;
gboolean (*get_child_position) (BlurOverlay *overlay,
GtkWidget *widget,
@@ -59,6 +59,9 @@ GDK_AVAILABLE_IN_ALL
void blur_overlay_add_overlay (BlurOverlay *overlay,
GtkWidget *widget,
double blur);
+GDK_AVAILABLE_IN_ALL
+void blur_overlay_set_child (BlurOverlay *overlay,
+ GtkWidget *widget);
G_END_DECLS
diff --git a/demos/gtk-demo/transparent.c b/demos/gtk-demo/transparent.c
index f53dabed24..6d2c010c10 100644
--- a/demos/gtk-demo/transparent.c
+++ b/demos/gtk-demo/transparent.c
@@ -58,7 +58,7 @@ do_transparent (GtkWidget *do_widget)
blur_overlay_add_overlay (BLUR_OVERLAY (overlay), button, 5.0);
picture = gtk_picture_new_for_resource ("/transparent/portland-rose.jpg");
- gtk_overlay_set_child (GTK_OVERLAY (overlay), picture);
+ blur_overlay_set_child (BLUR_OVERLAY (overlay), picture);
}
if (!gtk_widget_get_visible (window))