summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-07-18 01:17:43 +0000
committerMatthias Clasen <mclasen@redhat.com>2020-07-18 01:17:43 +0000
commit96ce0eb600399eb69111eb437d2035936d6c51df (patch)
tree1e32b049e9b0eb392f37ea6dc96789b9cb7211a1
parentf2924988dbf7d2a556f29f030cb0664a65787275 (diff)
parent0e476c1f287c67cd4a57da14d449e821a19dc6c5 (diff)
downloadgtk+-96ce0eb600399eb69111eb437d2035936d6c51df.tar.gz
Merge branch 'matthiasc/for-master' into 'master'
gtk-demo: Don't use GtkColorSwatch See merge request GNOME/gtk!2262
-rw-r--r--demos/gtk-demo/dnd.c90
1 files changed, 78 insertions, 12 deletions
diff --git a/demos/gtk-demo/dnd.c b/demos/gtk-demo/dnd.c
index 667f2b6f2f..70ea875c1c 100644
--- a/demos/gtk-demo/dnd.c
+++ b/demos/gtk-demo/dnd.c
@@ -597,6 +597,83 @@ css_button_new (const char *class)
return button;
}
+typedef struct
+{
+ GtkWidget parent_instance;
+ GdkRGBA color;
+} ColorSwatch;
+
+typedef struct
+{
+ GtkWidgetClass parent_class;
+} ColorSwatchClass;
+
+G_DEFINE_TYPE (ColorSwatch, color_swatch, GTK_TYPE_WIDGET)
+
+static GdkContentProvider *
+color_swatch_drag_prepare (GtkDragSource *source,
+ double x,
+ double y,
+ ColorSwatch *swatch)
+{
+ return gdk_content_provider_new_typed (GDK_TYPE_RGBA, &swatch->color);
+}
+
+static void
+color_swatch_init (ColorSwatch *swatch)
+{
+ GtkDragSource *source = gtk_drag_source_new ();
+ g_signal_connect (source, "prepare", G_CALLBACK (color_swatch_drag_prepare), swatch);
+ gtk_widget_add_controller (GTK_WIDGET (swatch), GTK_EVENT_CONTROLLER (source));
+}
+
+static void
+color_swatch_snapshot (GtkWidget *widget,
+ GtkSnapshot *snapshot)
+{
+ ColorSwatch *swatch = (ColorSwatch *)widget;
+ float w = gtk_widget_get_width (widget);
+ float h = gtk_widget_get_height (widget);
+
+ gtk_snapshot_append_color (snapshot, &swatch->color,
+ &GRAPHENE_RECT_INIT(0, 0, w, h));
+}
+
+void
+color_swatch_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ int for_size,
+ int *minimum_size,
+ int *natural_size,
+ int *minimum_baseline,
+ int *natural_baseline)
+{
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ *minimum_size = *natural_size = 48;
+ else
+ *minimum_size = *natural_size = 32;
+}
+
+static void
+color_swatch_class_init (ColorSwatchClass *class)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+
+ widget_class->snapshot = color_swatch_snapshot;
+ widget_class->measure = color_swatch_measure;
+ gtk_widget_class_set_css_name (widget_class, "colorswatch");
+}
+
+static GtkWidget *
+color_swatch_new (const char *color)
+{
+ ColorSwatch *swatch = g_object_new (color_swatch_get_type (), NULL);
+
+ gdk_rgba_parse (&swatch->color, color);
+
+ return GTK_WIDGET (swatch);
+}
+
static GtkWidget *window = NULL;
GtkWidget *
@@ -670,18 +747,7 @@ do_dnd (GtkWidget *do_widget)
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), box3);
for (i = 0; colors[i]; i++)
- {
- GdkRGBA rgba;
- GtkWidget *swatch;
-
- gdk_rgba_parse (&rgba, colors[i]);
-
- swatch = g_object_new (g_type_from_name ("GtkColorSwatch"),
- "rgba", &rgba,
- "selectable", FALSE,
- NULL);
- gtk_box_append (GTK_BOX (box3), swatch);
- }
+ gtk_box_append (GTK_BOX (box3), color_swatch_new (colors[i]));
gtk_box_append (GTK_BOX (box3), css_button_new ("rainbow1"));
gtk_box_append (GTK_BOX (box3), css_button_new ("rainbow2"));