From 90b74458d2ac8fcedea8f9dc3e28a3e9d9455bc7 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sun, 18 Jul 2010 10:56:35 +0100 Subject: [PATCH] cookbook: Add an empty recipe for shadows under text Currently, it's just an example and an image, but it should be easy to flesh it out properly for the "Text" chapter. --- doc/cookbook/Makefile.am | 1 + doc/cookbook/clutter-cookbook.xml.in | 1 + doc/cookbook/examples/.gitignore | 1 + doc/cookbook/examples/Makefile.am | 3 ++ doc/cookbook/examples/text-shadow.c | 59 +++++++++++++++++++++++++++ doc/cookbook/images/text-shadow.png | Bin 0 -> 17618 bytes doc/cookbook/text.xml | 40 ++++++++++++++++++ 7 files changed, 105 insertions(+) create mode 100644 doc/cookbook/examples/text-shadow.c create mode 100644 doc/cookbook/images/text-shadow.png create mode 100644 doc/cookbook/text.xml diff --git a/doc/cookbook/Makefile.am b/doc/cookbook/Makefile.am index 3752f5d5e..d13cbf195 100644 --- a/doc/cookbook/Makefile.am +++ b/doc/cookbook/Makefile.am @@ -34,6 +34,7 @@ IMAGE_FILES = \ images/textures-reflection.png \ images/actors-opacity.png \ images/actors-opacity-container-affects-opacity.png \ + images/text-shadow.png \ $(NULL) VIDEO_FILES = \ videos/animations-fading-out.ogv \ diff --git a/doc/cookbook/clutter-cookbook.xml.in b/doc/cookbook/clutter-cookbook.xml.in index fce2d3a12..646d942a1 100644 --- a/doc/cookbook/clutter-cookbook.xml.in +++ b/doc/cookbook/clutter-cookbook.xml.in @@ -43,6 +43,7 @@ + Contributing to this document diff --git a/doc/cookbook/examples/.gitignore b/doc/cookbook/examples/.gitignore index 2bf0d0198..7f90480bd 100644 --- a/doc/cookbook/examples/.gitignore +++ b/doc/cookbook/examples/.gitignore @@ -1 +1,2 @@ +/text-shadow /textures-reflection diff --git a/doc/cookbook/examples/Makefile.am b/doc/cookbook/examples/Makefile.am index 16cad26e4..5353a9d93 100644 --- a/doc/cookbook/examples/Makefile.am +++ b/doc/cookbook/examples/Makefile.am @@ -4,6 +4,7 @@ NULL = noinst_PROGRAMS = \ textures-reflection \ + text-shadow \ $(NULL) INCLUDES = \ @@ -26,3 +27,5 @@ AM_CFLAGS = \ AM_LDFLAGS = $(CLUTTER_LIBS) textures_reflection_SOURCES = textures-reflection.c + +text_shadow_SOURCES = text-shadow.c diff --git a/doc/cookbook/examples/text-shadow.c b/doc/cookbook/examples/text-shadow.c new file mode 100644 index 000000000..4afe62c4a --- /dev/null +++ b/doc/cookbook/examples/text-shadow.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include + +#define SHADOW_X_OFFSET 3 +#define SHADOW_Y_OFFSET 3 + +static void +_text_paint_cb (ClutterActor *actor) +{ + ClutterText *text = CLUTTER_TEXT (actor); + + ClutterActorBox alloc = { 0, }; + clutter_actor_get_allocation_box (actor, &alloc); + + PangoLayout *layout; + layout = clutter_text_get_layout (text); + + ClutterColor text_color = { 0, }; + clutter_text_get_color (text, &text_color); + + guint8 real_opacity; + real_opacity = clutter_actor_get_paint_opacity (actor) + * text_color.alpha + / 255; + + CoglColor color; + cogl_color_set_from_4ub (&color, 0xcc, 0xcc, 0xcc, real_opacity); + cogl_pango_render_layout (layout, SHADOW_X_OFFSET, SHADOW_Y_OFFSET, &color, 0); +} + +int +main (int argc, char *argv[]) +{ + clutter_init (&argc, &argv); + + ClutterActor *stage; + + stage = clutter_stage_new (); + clutter_stage_set_title (CLUTTER_STAGE (stage), "Text shadow"); + g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL); + + ClutterActor *text; + text = clutter_text_new (); + clutter_text_set_text (CLUTTER_TEXT (text), "Hello, World!"); + clutter_text_set_font_name (CLUTTER_TEXT (text), "Sans 64px"); + clutter_actor_add_constraint (text, clutter_align_constraint_new (stage, CLUTTER_ALIGN_X_AXIS, 0.5)); + clutter_actor_add_constraint (text, clutter_align_constraint_new (stage, CLUTTER_ALIGN_Y_AXIS, 0.5)); + g_signal_connect (text, "paint", G_CALLBACK (_text_paint_cb), NULL); + + clutter_container_add (CLUTTER_CONTAINER (stage), text, NULL); + + clutter_actor_show (stage); + + clutter_main (); + + return EXIT_SUCCESS; +} diff --git a/doc/cookbook/images/text-shadow.png b/doc/cookbook/images/text-shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..61824ef146a4a2fcd58d3610316ffb29a7ee8e49 GIT binary patch literal 17618 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 u_{Gk9e(MuGLZV(%$53B}Ztjq`4>8{SQO9X + + + Text + + + Antoine de Saint-Exupery + A rock pile ceases to be a rock pile the moment a single man + contemplates it, bearing within him the image of a cathedral. + + +
+ Introduction + +
+ +
+ Drawing a shadow under the text + +
+ Problem + + You want to draw a shadow under the text displayed by a + ClutterText actor. +
+ +
+ Solution + +
+ +
+ Discussion + +
+ +
+ +