gtk3-demo: Add a fancy text demo
authorMatthias Clasen <mclasen@redhat.com>
Mon, 29 Jun 2015 05:43:27 +0000 (22:43 -0700)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 29 Jun 2015 05:43:27 +0000 (22:43 -0700)
This demonstrates rendering text with a pattern instead of a
single color.

demos/gtk-demo/Makefile.am
demos/gtk-demo/demo.gresource.xml
demos/gtk-demo/textmask.c [new file with mode: 0644]

index 72ba8755952857bedad04ad273e230c176570c7b..ec54896a2cfebac03259afef31ab0f521bad6e00 100644 (file)
@@ -56,6 +56,7 @@ demos_base =                                  \
        spinbutton.c                            \
        spinner.c                               \
        stack.c                                 \
+       textmask.c                              \
        textview.c                              \
        textscroll.c                            \
        theming_style_classes.c                 \
index 5f84bfb27fd6e5371274f56225e1f0c17bfef276..3c71240d460c5e396b88a42faf08070d03bed9a0 100644 (file)
     <file>toolpalette.c</file>
     <file>transparent.c</file>
     <file>tree_store.c</file>
+    <file>textmask.c</file>
   </gresource>
   <gresource prefix="/textview">
     <file>floppybuddy.gif</file>
diff --git a/demos/gtk-demo/textmask.c b/demos/gtk-demo/textmask.c
new file mode 100644 (file)
index 0000000..0971d35
--- /dev/null
@@ -0,0 +1,85 @@
+/* Text Mask
+ *
+ * This demo shows how to use PangoCairo to draw text with more than
+ * just a single color.
+ */
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+static gboolean
+draw_text (GtkWidget *da,
+           cairo_t   *cr,
+           gpointer   data)
+{
+  cairo_pattern_t *pattern;
+  PangoLayout *layout;
+  PangoFontDescription *desc;
+
+  cairo_save (cr);
+
+  layout = gtk_widget_create_pango_layout (da, "Pango power!\nPango power!\nPango power!");
+  desc = pango_font_description_from_string ("sans bold 34");
+  pango_layout_set_font_description (layout, desc);
+  pango_font_description_free (desc);
+
+  cairo_move_to (cr, 30, 20);
+  pango_cairo_layout_path (cr, layout);
+  g_object_unref (layout);
+
+  pattern = cairo_pattern_create_linear (0.0, 0.0,
+                                         gtk_widget_get_allocated_width (da),
+                                         gtk_widget_get_allocated_height (da));
+  cairo_pattern_add_color_stop_rgb (pattern, 0.0, 1.0, 0.0, 0.0);
+  cairo_pattern_add_color_stop_rgb (pattern, 0.2, 1.0, 0.0, 0.0);
+  cairo_pattern_add_color_stop_rgb (pattern, 0.3, 1.0, 1.0, 0.0);
+  cairo_pattern_add_color_stop_rgb (pattern, 0.4, 0.0, 1.0, 0.0);
+  cairo_pattern_add_color_stop_rgb (pattern, 0.6, 0.0, 1.0, 1.0);
+  cairo_pattern_add_color_stop_rgb (pattern, 0.7, 0.0, 0.0, 1.0);
+  cairo_pattern_add_color_stop_rgb (pattern, 0.8, 1.0, 0.0, 1.0);
+  cairo_pattern_add_color_stop_rgb (pattern, 1.0, 1.0, 0.0, 1.0);
+
+  cairo_set_source (cr, pattern);
+  cairo_fill_preserve (cr);
+
+  cairo_pattern_destroy (pattern);
+
+  cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
+  cairo_set_line_width (cr, 0.5);
+  cairo_stroke (cr);
+
+  cairo_restore (cr);
+
+  return TRUE;
+}
+
+GtkWidget *
+do_textmask (GtkWidget *do_widget)
+{
+  static GtkWidget *window = NULL;
+  static GtkWidget *da;
+
+  if (!window)
+    {
+      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
+      gtk_widget_set_size_request (window, 400, 200);
+      gtk_window_set_title (GTK_WINDOW (window), "Text Mask");
+
+      g_signal_connect (window, "destroy",
+                        G_CALLBACK (gtk_widget_destroyed), &window);
+
+      da = gtk_drawing_area_new ();
+
+      gtk_container_add (GTK_CONTAINER (window), da);
+      g_signal_connect (da, "draw",
+                        G_CALLBACK (draw_text), NULL);
+    }
+
+  if (!gtk_widget_get_visible (window))
+    gtk_widget_show_all (window);
+  else
+    gtk_widget_destroy (window);
+
+  return window;
+}