[gtk/popup-shadow-width: 73/78] Add a test for popover shadows
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/popup-shadow-width: 73/78] Add a test for popover shadows
- Date: Sun, 14 Feb 2021 02:13:21 +0000 (UTC)
commit b2f8cc54a185369a242c0900847b7904dd19b0d7
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Feb 13 15:46:00 2021 -0500
Add a test for popover shadows
tests/meson.build | 1 +
tests/testpopup.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 115 insertions(+)
---
diff --git a/tests/meson.build b/tests/meson.build
index 783dd61914..c0e5f836b0 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -1,5 +1,6 @@
gtk_tests = [
# testname, optional extra sources
+ ['testpopup'],
['testupload'],
['testtransform'],
['testdropdown'],
diff --git a/tests/testpopup.c b/tests/testpopup.c
new file mode 100644
index 0000000000..6ea60a888b
--- /dev/null
+++ b/tests/testpopup.c
@@ -0,0 +1,114 @@
+#include <gtk/gtk.h>
+
+static void
+update_shadow (GObject *object,
+ GParamSpec *pspec,
+ GtkWidget *widget)
+{
+ const char *classes[] = {
+ "no-shadow",
+ "shadow1",
+ "shadow2",
+ "shadow3",
+ "shadow4",
+ };
+ guint selected;
+
+ selected = gtk_drop_down_get_selected (GTK_DROP_DOWN (object));
+ g_assert (selected < G_N_ELEMENTS (classes));
+
+ for (int i = 0; i < G_N_ELEMENTS (classes); i++)
+ gtk_widget_remove_css_class (widget, classes[i]);
+
+ gtk_widget_add_css_class (widget, classes[selected]);
+}
+
+static const char css[] =
+ "popover.no-shadow > contents { box-shadow: none; }\n"
+ "popover.shadow1 > contents { box-shadow: 6px 6px rgba(128,0,255,0.5); }\n"
+ "popover.shadow2 > contents { box-shadow: -6px -6px rgba(255,0,0,0.5), 6px 6px rgba(128,0,255,0.5); }\n"
+ "popover.shadow3 > contents { box-shadow: -6px -6px rgba(255,0,0,0.5), 18px 18px rgba(128,0,255,0.5); }\n"
+ "popover.shadow4 > contents { box-shadow: -18px -18px rgba(255,0,0,0.5), 18px 18px rgba(128,0,255,0.5);
}\n";
+
+int
+main (int argc, char *argv[])
+{
+ GtkWidget *window;
+ GtkWidget *box;
+ GtkWidget *button;
+ GtkWidget *popover;
+ GtkWidget *box2;
+ GtkWidget *box3;
+ GtkWidget *checkbox;
+ GtkWidget *dropdown;
+ GtkWidget *dropdown2;
+ GtkCssProvider *provider;
+
+ gtk_init ();
+
+ provider = gtk_css_provider_new ();
+ gtk_css_provider_load_from_data (provider, css, -1);
+
+ gtk_style_context_add_provider_for_display (gdk_display_get_default (),
+ GTK_STYLE_PROVIDER (provider),
+ 800);
+
+ window = gtk_window_new ();
+ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
+ g_object_set (box,
+ "margin-top", 20,
+ "margin-bottom", 20,
+ "margin-start", 20,
+ "margin-end", 20,
+ NULL);
+
+ button = gtk_menu_button_new ();
+
+ gtk_widget_set_halign (button, GTK_ALIGN_CENTER);
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
+
+ gtk_box_append (GTK_BOX (box), button);
+
+ popover = gtk_popover_new ();
+ box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
+ gtk_popover_set_child (GTK_POPOVER (popover), box2);
+
+ gtk_box_append (GTK_BOX (box2), gtk_label_new ("First item"));
+ gtk_box_append (GTK_BOX (box2), gtk_label_new ("Second item"));
+ gtk_box_append (GTK_BOX (box2), gtk_label_new ("Third item"));
+
+ gtk_menu_button_set_popover (GTK_MENU_BUTTON (button), popover);
+
+ box3 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
+ dropdown = gtk_drop_down_new_from_strings ((const char*[]){ "Left", "Right", "Top", "Bottom", NULL });
+ gtk_drop_down_set_selected (GTK_DROP_DOWN (dropdown), 3);
+
+ checkbox = gtk_check_button_new_with_label ("Arrow");
+
+ dropdown2 = gtk_drop_down_new_from_strings ((const char*[]){ "No Shadow", "Shadow 1", "Shadow 2", "Shadow
3", "Shadow 4", NULL });
+
+ gtk_box_append (GTK_BOX (box3), checkbox);
+ gtk_box_append (GTK_BOX (box3), dropdown);
+ gtk_box_append (GTK_BOX (box3), dropdown2);
+
+ gtk_box_append (GTK_BOX (box), box3);
+
+ g_object_bind_property (checkbox, "active",
+ popover, "has-arrow",
+ G_BINDING_SYNC_CREATE);
+ g_object_bind_property (dropdown, "selected",
+ popover, "position",
+ G_BINDING_SYNC_CREATE);
+ g_signal_connect (dropdown2, "notify::selected",
+ G_CALLBACK (update_shadow), popover);
+ update_shadow (G_OBJECT (dropdown2), NULL, popover);
+
+ gtk_window_set_child (GTK_WINDOW (window), box);
+
+ gtk_window_present (GTK_WINDOW (window));
+
+ while (g_list_model_get_n_items (gtk_window_get_toplevels ()) > 0)
+ g_main_context_iteration (NULL, TRUE);
+
+ return 0;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]