From 8afdd181d0f7b79b77283623b247b1f4dabc6f7f Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sat, 25 May 2024 10:38:49 +0200 Subject: [PATCH] WrapperWidget: simulate GTK_OVERFLOW_HIDDEN for 0x0 allocated Views --- src/api-impl-jni/widgets/WrapperWidget.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/api-impl-jni/widgets/WrapperWidget.c b/src/api-impl-jni/widgets/WrapperWidget.c index 1f1e4eca..4b245113 100644 --- a/src/api-impl-jni/widgets/WrapperWidget.c +++ b/src/api-impl-jni/widgets/WrapperWidget.c @@ -115,6 +115,22 @@ void wrapper_widget_allocate(GtkWidget *widget, int width, int height, int basel gtk_widget_size_allocate(wrapper->background, &allocation, baseline); } +static void wrapper_widget_snapshot(GtkWidget *widget, GdkSnapshot *snapshot) +{ + WrapperWidget *wrapper = WRAPPER_WIDGET(widget); + if (wrapper->real_height > 0 && wrapper->real_width > 0) { + gtk_snapshot_push_clip(snapshot, &GRAPHENE_RECT_INIT(0, 0, wrapper->real_width, wrapper->real_height)); + } + GtkWidget *child = gtk_widget_get_first_child(widget); + while (child) { + gtk_widget_snapshot_child(widget, child, snapshot); + child = gtk_widget_get_next_sibling(child); + } + if (wrapper->real_height > 0 && wrapper->real_width > 0) { + gtk_snapshot_pop(snapshot); + } +} + static void wrapper_widget_class_init(WrapperWidgetClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); @@ -125,6 +141,7 @@ static void wrapper_widget_class_init(WrapperWidgetClass *class) widget_class->get_request_mode = wrapper_widget_get_request_mode; widget_class->measure = wrapper_widget_measure; widget_class->size_allocate = wrapper_widget_allocate; + widget_class->snapshot = wrapper_widget_snapshot; } GtkWidget * wrapper_widget_new(void)