[gtk/wip/exalm/text-handles] texthandle: Add a contents css node




commit 0e58bfe90e97ad7522fde2d983df2d14f53e7942
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Tue May 4 23:53:05 2021 +0500

    texthandle: Add a contents css node
    
    Allow to theme it including using css transforms to avoid having assets.
    
    Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3475

 gtk/gtktexthandle.c | 31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)
---
diff --git a/gtk/gtktexthandle.c b/gtk/gtktexthandle.c
index 33bbc6bf42..0f92fc74d1 100644
--- a/gtk/gtktexthandle.c
+++ b/gtk/gtktexthandle.c
@@ -17,7 +17,8 @@
 
 #include "config.h"
 
-#include "gtkcssnumbervalueprivate.h"
+#include "gtkbinlayout.h"
+#include "gtkgizmoprivate.h"
 #include "gtkprivatetypebuiltins.h"
 #include "gtktexthandleprivate.h"
 #include "gtkmarshalers.h"
@@ -47,6 +48,7 @@ struct _GtkTextHandle
   GskRenderer *renderer;
   GtkEventController *controller;
   GtkWidget *controller_widget;
+  GtkWidget *contents;
 
   GdkRectangle pointing_to;
   GtkBorder border;
@@ -221,6 +223,8 @@ gtk_text_handle_snapshot (GtkWidget   *widget,
                                snapshot,
                                gtk_widget_get_width (widget),
                                gtk_widget_get_height (widget));
+
+  GTK_WIDGET_CLASS (gtk_text_handle_parent_class)->snapshot (widget, snapshot);
 }
 
 static void
@@ -322,18 +326,13 @@ gtk_text_handle_unmap (GtkWidget *widget)
 }
 
 static void
-gtk_text_handle_measure (GtkWidget      *widget,
-                         GtkOrientation  orientation,
-                         int             for_size,
-                         int            *minimum,
-                         int            *natural,
-                         int            *minimum_baseline,
-                         int            *natural_baseline)
+gtk_text_handle_dispose (GObject *object)
 {
-  *natural = 0;
-  *minimum = 0;
-  *minimum_baseline = -1;
-  *natural_baseline = -1;
+  GtkTextHandle *handle = GTK_TEXT_HANDLE (object);
+
+  g_clear_pointer (&handle->contents, gtk_widget_unparent);
+
+  G_OBJECT_CLASS (gtk_text_handle_parent_class)->dispose (object);
 }
 
 static void
@@ -342,12 +341,13 @@ gtk_text_handle_class_init (GtkTextHandleClass *klass)
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
+  object_class->dispose = gtk_text_handle_dispose;
+
   widget_class->snapshot = gtk_text_handle_snapshot;
   widget_class->realize = gtk_text_handle_realize;
   widget_class->unrealize = gtk_text_handle_unrealize;
   widget_class->map = gtk_text_handle_map;
   widget_class->unmap = gtk_text_handle_unmap;
-  widget_class->measure = gtk_text_handle_measure;
 
   signals[HANDLE_DRAGGED] =
     g_signal_new (I_("handle-dragged"),
@@ -373,6 +373,7 @@ gtk_text_handle_class_init (GtkTextHandleClass *klass)
                   G_TYPE_NONE, 0, G_TYPE_NONE);
 
   gtk_widget_class_set_css_name (widget_class, I_("cursor-handle"));
+  gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
 }
 
 /* Relative to pointing_to x/y */
@@ -507,6 +508,10 @@ gtk_text_handle_update_for_role (GtkTextHandle *handle)
 static void
 gtk_text_handle_init (GtkTextHandle *handle)
 {
+  handle->contents = gtk_gizmo_new ("contents", NULL, NULL, NULL, NULL, NULL, NULL);
+  gtk_widget_set_can_target (handle->contents, FALSE);
+  gtk_widget_set_parent (handle->contents, GTK_WIDGET (handle));
+
   gtk_text_handle_update_for_role (handle);
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]