]> gitweb.factorcode.org Git - factor.git/commitdiff
unmaintained: reanimated cairo demos, mostly working.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 25 Oct 2014 04:39:18 +0000 (21:39 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 25 Oct 2014 04:39:18 +0000 (21:39 -0700)
extra/cairo-demo/authors.txt [new file with mode: 0755]
extra/cairo-demo/cairo-demo.factor [new file with mode: 0644]
extra/cairo-gadgets/cairo-gadgets.factor [new file with mode: 0644]
extra/cairo-gadgets/summary.txt [new file with mode: 0644]
extra/cairo-samples/cairo-samples.factor [new file with mode: 0644]
unmaintained/cairo-demo/authors.txt [deleted file]
unmaintained/cairo-demo/cairo-demo.factor [deleted file]
unmaintained/cairo-gadgets/gadgets.factor [deleted file]
unmaintained/cairo-gadgets/summary.txt [deleted file]
unmaintained/cairo-samples/cairo-samples.factor [deleted file]

diff --git a/extra/cairo-demo/authors.txt b/extra/cairo-demo/authors.txt
new file mode 100755 (executable)
index 0000000..4a2736d
--- /dev/null
@@ -0,0 +1 @@
+Sampo Vuori
diff --git a/extra/cairo-demo/cairo-demo.factor b/extra/cairo-demo/cairo-demo.factor
new file mode 100644 (file)
index 0000000..32d203d
--- /dev/null
@@ -0,0 +1,86 @@
+! Cairo "Hello World" demo
+!  Copyright (c) 2007 Sampo Vuori
+!    License: http://factorcode.org/license.txt
+!
+! This example is an adaptation of the following cairo sample code:
+!  http://cairographics.org/samples/text/
+
+
+USING: cairo.ffi math math.constants byte-arrays kernel ui
+ui.render combinators ui.gadgets opengl.gl accessors
+namespaces opengl sequences ;
+
+IN: cairo-demo
+
+: make-image-array ( -- array )
+    384 256 4 * * <byte-array> ;
+
+: convert-array-to-surface ( array -- cairo_surface_t )
+    CAIRO_FORMAT_ARGB32 384 256 over 4 *
+    cairo_image_surface_create_for_data ;
+
+TUPLE: cairo-demo-gadget < gadget image-array cairo-t ;
+
+USE: io
+USE: formatting
+
+M: cairo-demo-gadget draw-gadget* ( gadget -- )
+    0 0 glRasterPos2i
+    1.0 -1.0 glPixelZoom
+    [ 384 256 GL_RGBA GL_UNSIGNED_BYTE ] dip
+    image-array>> glDrawPixels ;
+
+: create-surface ( gadget -- cairo_surface_t )
+    make-image-array [ swap image-array<< ] keep
+    convert-array-to-surface ;
+
+: init-cairo ( gadget -- cairo_t )
+    create-surface cairo_create ;
+
+M: cairo-demo-gadget pref-dim* drop { 384 256 } ;
+
+ERROR: no-cairo-t ;
+
+<PRIVATE
+
+: draw-hello-world ( gadget -- )
+    cairo-t>> [ no-cairo-t ] unless*
+    {
+        [
+            "Sans" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_BOLD
+            cairo_select_font_face
+        ]
+        [ 90.0 cairo_set_font_size ]
+        [ 10.0 135.0 cairo_move_to ]
+        [ "Hello" cairo_show_text ]
+        [ 70.0 165.0 cairo_move_to ]
+        [ "World" cairo_text_path ]
+        [ 0.5 0.5 1 cairo_set_source_rgb ]
+        [ cairo_fill_preserve ]
+        [ 0 0 0 cairo_set_source_rgb ]
+        [ 2.56 cairo_set_line_width ]
+        [ cairo_stroke ]
+        [ 1 0.2 0.2 0.6 cairo_set_source_rgba ]
+        [ 10.0 135.0 5.12 0 pi 2 * cairo_arc ]
+        [ cairo_close_path ]
+        [ 70.0 165.0 5.12 0 pi 2 * cairo_arc ]
+        [ cairo_fill ]
+    } cleave ;
+
+PRIVATE>
+
+M: cairo-demo-gadget graft* ( gadget -- )
+    dup dup init-cairo swap cairo-t<< draw-hello-world ;
+
+M: cairo-demo-gadget ungraft* ( gadget -- )
+    cairo-t>> cairo_destroy ;
+
+: <cairo-demo-gadget> ( -- gadget )
+    cairo-demo-gadget new ;
+
+: run ( -- )
+    [
+        <cairo-demo-gadget> "Hello World from Factor!" open-window
+    ] with-ui ;
+
+MAIN: run
diff --git a/extra/cairo-gadgets/cairo-gadgets.factor b/extra/cairo-gadgets/cairo-gadgets.factor
new file mode 100644 (file)
index 0000000..4a5d39d
--- /dev/null
@@ -0,0 +1,61 @@
+! Copyright (C) 2008 Matthew Willis.
+! See http://factorcode.org/license.txt for BSD license.
+USING: sequences math kernel byte-arrays cairo.ffi cairo
+io.backend ui.gadgets accessors opengl.gl arrays fry
+classes ui.render namespaces destructors libc ;
+IN: cairo-gadgets
+
+SYMBOL: current-cairo
+
+: cr ( -- cairo )
+    current-cairo get ;
+
+<PRIVATE
+
+: width>stride ( width -- stride ) 4 * ;
+
+: image-dims ( gadget -- width height stride )
+    dim>> first2 over width>stride ; inline
+
+: image-buffer ( width height stride -- alien )
+    * nip malloc &free ; inline
+
+: with-cairo ( cairo quot -- )
+    [ &cairo_destroy current-cairo ] dip
+    '[ @ current-cairo get check-cairo ] with-variable ; inline
+
+: with-surface ( cairo_surface quot -- alien )
+    [ &cairo_surface_destroy ] dip [ check-surface ] bi ; inline
+
+: with-cairo-from-surface ( cairo_surface quot -- )
+    '[ cairo_create _ with-cairo ] with-surface ; inline
+
+PRIVATE>
+
+GENERIC: render-cairo* ( gadget -- )
+
+: render-cairo ( gadget -- alien )
+    [
+        image-dims
+        [ image-buffer dup CAIRO_FORMAT_ARGB32 ]
+        [ cairo_image_surface_create_for_data ] 3bi
+    ] [ '[ _ render-cairo* ] with-cairo-from-surface ] bi ;
+
+TUPLE: cairo-gadget < gadget ;
+
+: <cairo-gadget> ( dim -- gadget )
+    cairo-gadget new
+        swap >>dim ;
+
+M: cairo-gadget draw-gadget*
+    [
+        [ dim>> ] [ render-cairo ] bi
+        0 0 glRasterPos2i
+        1.0 -1.0 glPixelZoom
+        [ first2 GL_BGRA GL_UNSIGNED_BYTE ] dip
+        glDrawPixels
+    ] with-destructors ;
+
+: copy-surface ( surface -- )
+    cr swap 0 0 cairo_set_source_surface
+    cr cairo_paint ;
diff --git a/extra/cairo-gadgets/summary.txt b/extra/cairo-gadgets/summary.txt
new file mode 100644 (file)
index 0000000..18dc464
--- /dev/null
@@ -0,0 +1 @@
+UI gadget for rendering graphics with Cairo
diff --git a/extra/cairo-samples/cairo-samples.factor b/extra/cairo-samples/cairo-samples.factor
new file mode 100644 (file)
index 0000000..e67261a
--- /dev/null
@@ -0,0 +1,157 @@
+! Copyright (C) 2008 Matthew Willis
+! See http://factorcode.org/license.txt for BSD license.
+!
+! these samples are a subset of the samples on
+! http://cairographics.org/samples/
+USING: cairo cairo.ffi locals math.constants math
+io.backend kernel alien.c-types libc namespaces
+cairo-gadgets ui.gadgets accessors specialized-arrays
+classes.struct ;
+SPECIALIZED-ARRAY: double
+IN: cairo-samples
+
+TUPLE: arc-gadget < cairo-gadget ;
+M:: arc-gadget render-cairo* ( gadget -- )
+    128.0 :> xc
+    128.0 :> yc
+    100.0 :> radius
+    pi 1/4 * :> angle1
+    pi :> angle2
+    cr 10.0 cairo_set_line_width
+    cr xc yc radius angle1 angle2 cairo_arc
+    cr cairo_stroke
+
+    ! draw helping lines
+    cr 1 0.2 0.2 0.6 cairo_set_source_rgba
+    cr 6.0 cairo_set_line_width
+
+    cr xc yc 10.0 0 2 pi * cairo_arc
+    cr cairo_fill
+
+    cr xc yc radius angle1 angle1 cairo_arc
+    cr xc yc cairo_line_to
+    cr xc yc radius angle2 angle2 cairo_arc
+    cr xc yc cairo_line_to
+    cr cairo_stroke
+    ;
+
+TUPLE: clip-gadget < cairo-gadget ;
+M: clip-gadget render-cairo* ( gadget -- )
+    drop
+    cr 128 128 76.8 0 2 pi * cairo_arc
+    cr cairo_clip
+    cr cairo_new_path
+
+    cr 0 0 256 256 cairo_rectangle
+    cr cairo_fill
+    cr 0 1 0 cairo_set_source_rgb
+    cr 0 0 cairo_move_to
+    cr 256 256 cairo_line_to
+    cr 256 0 cairo_move_to
+    cr 0 256 cairo_line_to
+    cr 10 cairo_set_line_width
+    cr cairo_stroke ;
+
+TUPLE: clip-image-gadget < cairo-gadget ;
+M:: clip-image-gadget render-cairo* ( gadget -- )
+    "resource:misc/icons/Factor_128x128.png"
+    normalize-path cairo_image_surface_create_from_png :> png
+    png cairo_image_surface_get_width :> w
+    png cairo_image_surface_get_height :> h
+    cr 128 128 76.8 0 2 pi * cairo_arc
+    cr cairo_clip
+    cr cairo_new_path
+
+    cr 192.0 w / 192.0 h / cairo_scale
+    cr png 32 32 cairo_set_source_surface
+    cr cairo_paint
+    png cairo_surface_destroy ;
+
+TUPLE: dash-gadget < cairo-gadget ;
+M:: dash-gadget render-cairo* ( gadget -- )
+    double-array{ 50 10 10 10 } underlying>> :> dashes
+    4 :> ndash
+    cr dashes ndash -50 cairo_set_dash
+    cr 10 cairo_set_line_width
+    cr 128.0 25.6 cairo_move_to
+    cr 230.4 230.4 cairo_line_to
+    cr -102.4 0 cairo_rel_line_to
+    cr 51.2 230.4 51.2 128.0 128.0 128.0 cairo_curve_to
+    cr cairo_stroke ;
+
+TUPLE: gradient-gadget < cairo-gadget ;
+M:: gradient-gadget render-cairo* ( gadget -- )
+    0 0 0 256 cairo_pattern_create_linear :> pat
+    115.2 102.4 25.6 102.4 102.4 128.0
+    cairo_pattern_create_radial :> radial
+    pat 1 0 0 0 1 cairo_pattern_add_color_stop_rgba
+    pat 0 1 1 1 1 cairo_pattern_add_color_stop_rgba
+    cr 0 0 256 256 cairo_rectangle
+    cr pat cairo_set_source
+    cr cairo_fill
+    pat cairo_pattern_destroy
+
+    radial 0 1 1 1 1 cairo_pattern_add_color_stop_rgba
+    radial 1 0 0 0 1 cairo_pattern_add_color_stop_rgba
+    cr radial cairo_set_source
+    cr 128.0 128.0 76.8 0 2 pi * cairo_arc
+    cr cairo_fill
+    radial cairo_pattern_destroy ;
+
+TUPLE: text-gadget < cairo-gadget ;
+M: text-gadget render-cairo* ( gadget -- )
+    drop
+    cr "Serif" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_BOLD
+    cairo_select_font_face
+    cr 50 cairo_set_font_size
+    cr 10 135 cairo_move_to
+    cr "Hello" cairo_show_text
+
+    cr 70 165 cairo_move_to
+    cr "factor" cairo_text_path
+    cr 0.5 0.5 1 cairo_set_source_rgb
+    cr cairo_fill_preserve
+    cr 0 0 0 cairo_set_source_rgb
+    cr 2.56 cairo_set_line_width
+    cr cairo_stroke
+
+    ! draw helping lines
+    cr 1 0.2 0.2 0.6 cairo_set_source_rgba
+    cr 10 135 5.12 0 2 pi * cairo_arc
+    cr cairo_close_path
+    cr 70 165 5.12 0 2 pi * cairo_arc
+    cr cairo_fill ;
+
+TUPLE: utf8-gadget < cairo-gadget ;
+M: utf8-gadget render-cairo* ( gadget -- )
+    drop
+    cr "Sans" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_NORMAL
+    cairo_select_font_face
+    cr 50 cairo_set_font_size
+    cairo_text_extents_t malloc-struct
+    cr "日本語" pick cairo_text_extents
+    cr over
+    [ width>> 2 / ] [ x_bearing>> ] bi +
+    128 swap - pick
+    [ height>> 2 / ] [ y_bearing>> ] bi +
+    128 swap - cairo_move_to
+    free
+    cr "日本語" cairo_show_text
+
+    cr 1 0.2 0.2 0.6 cairo_set_source_rgba
+    cr 6 cairo_set_line_width
+    cr 128 0 cairo_move_to
+    cr 0 256 cairo_rel_line_to
+    cr 0 128 cairo_move_to
+    cr 256 0 cairo_rel_line_to
+    cr cairo_stroke ;
+
+ USING: quotations ui.gadgets.panes sequences ;
+ : samples ( -- )
+    {
+        arc-gadget clip-gadget clip-image-gadget dash-gadget
+        gradient-gadget text-gadget utf8-gadget
+    }
+    [ new { 256 256 } >>dim gadget. ] each ;
+
+MAIN: samples
diff --git a/unmaintained/cairo-demo/authors.txt b/unmaintained/cairo-demo/authors.txt
deleted file mode 100755 (executable)
index 4a2736d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Sampo Vuori
diff --git a/unmaintained/cairo-demo/cairo-demo.factor b/unmaintained/cairo-demo/cairo-demo.factor
deleted file mode 100644 (file)
index da744e1..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-! Cairo "Hello World" demo
-!  Copyright (c) 2007 Sampo Vuori
-!    License: http://factorcode.org/license.txt
-!
-! This example is an adaptation of the following cairo sample code:
-!  http://cairographics.org/samples/text/
-
-
-USING: cairo.ffi math math.constants byte-arrays kernel ui
-ui.render combinators ui.gadgets opengl.gl accessors
-namespaces opengl ;
-
-IN: cairo-demo
-
-: make-image-array ( -- array )
-    384 256 4 * * <byte-array> ;
-
-: convert-array-to-surface ( array -- cairo_surface_t )
-    CAIRO_FORMAT_ARGB32 384 256 over 4 *
-    cairo_image_surface_create_for_data ;
-
-TUPLE: cairo-demo-gadget < gadget image-array cairo-t ;
-
-M: cairo-demo-gadget draw-gadget* ( gadget -- )
-    origin get [
-        0 0 glRasterPos2i
-        1.0 -1.0 glPixelZoom
-        [ 384 256 GL_RGBA GL_UNSIGNED_BYTE ] dip
-        image-array>> glDrawPixels
-    ] with-translation ;
-
-: create-surface ( gadget -- cairo_surface_t )
-    make-image-array [ swap (>>image-array) ] keep
-    convert-array-to-surface ;
-
-: init-cairo ( gadget -- cairo_t )
-    create-surface cairo_create ;
-
-M: cairo-demo-gadget pref-dim* drop { 384 256 } ;
-
-ERROR: no-cairo-t ;
-
-<PRIVATE
-
-: draw-hello-world ( gadget -- )
-    cairo-t>> [ no-cairo-t ] unless*
-    {
-        [
-            "Sans" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_BOLD
-            cairo_select_font_face
-        ]
-        [ 90.0 cairo_set_font_size ]
-        [ 10.0 135.0 cairo_move_to ]
-        [ "Hello" cairo_show_text ]
-        [ 70.0 165.0 cairo_move_to ]
-        [ "World" cairo_text_path ]
-        [ 0.5 0.5 1 cairo_set_source_rgb ]
-        [ cairo_fill_preserve ]
-        [ 0 0 0 cairo_set_source_rgb ]
-        [ 2.56 cairo_set_line_width ]
-        [ cairo_stroke ]
-        [ 1 0.2 0.2 0.6 cairo_set_source_rgba ]
-        [ 10.0 135.0 5.12 0 pi 2 * cairo_arc ]
-        [ cairo_close_path ]
-        [ 70.0 165.0 5.12 0 pi 2 * cairo_arc ]
-        [ cairo_fill ]
-    } cleave ;
-
-PRIVATE>
-
-M: cairo-demo-gadget graft* ( gadget -- )
-    dup dup init-cairo swap (>>cairo-t) draw-hello-world ;
-
-M: cairo-demo-gadget ungraft* ( gadget -- )
-    cairo-t>> cairo_destroy ;
-
-: <cairo-demo-gadget> ( -- gadget )
-    cairo-demo-gadget new-gadget ;
-
-: run ( -- )
-    [
-        <cairo-demo-gadget> "Hello World from Factor!" open-window
-    ] with-ui ;
-
-MAIN: run
diff --git a/unmaintained/cairo-gadgets/gadgets.factor b/unmaintained/cairo-gadgets/gadgets.factor
deleted file mode 100644 (file)
index a120f86..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-! Copyright (C) 2008 Matthew Willis.
-! See http://factorcode.org/license.txt for BSD license.
-USING: sequences math kernel byte-arrays cairo.ffi cairo
-io.backend ui.gadgets accessors opengl.gl arrays fry
-classes ui.render namespaces destructors libc ;
-IN: cairo.gadgets
-
-<PRIVATE
-: width>stride ( width -- stride ) 4 * ;
-
-: image-dims ( gadget -- width height stride )
-    dim>> first2 over width>stride ; inline
-: image-buffer ( width height stride -- alien )
-    * nip malloc ; inline
-PRIVATE>
-    
-GENERIC: render-cairo* ( gadget -- )
-
-: render-cairo ( gadget -- alien )
-    [
-        image-dims
-        [ image-buffer dup CAIRO_FORMAT_ARGB32 ] 
-        [ cairo_image_surface_create_for_data ] 3bi
-    ] [ '[ _ render-cairo* ] with-cairo-from-surface ] bi ;
-
-TUPLE: cairo-gadget < gadget ;
-
-: <cairo-gadget> ( dim -- gadget )
-    cairo-gadget new
-        swap >>dim ;
-
-M: cairo-gadget draw-gadget*
-    [
-        [ dim>> ] [ render-cairo &free ] bi
-        origin get first2 glRasterPos2i
-        1.0 -1.0 glPixelZoom
-        [ first2 GL_BGRA GL_UNSIGNED_BYTE ] dip
-        glDrawPixels
-    ] with-destructors ;
-
-: copy-surface ( surface -- )
-    cr swap 0 0 cairo_set_source_surface
-    cr cairo_paint ;
diff --git a/unmaintained/cairo-gadgets/summary.txt b/unmaintained/cairo-gadgets/summary.txt
deleted file mode 100644 (file)
index 18dc464..0000000
+++ /dev/null
@@ -1 +0,0 @@
-UI gadget for rendering graphics with Cairo
diff --git a/unmaintained/cairo-samples/cairo-samples.factor b/unmaintained/cairo-samples/cairo-samples.factor
deleted file mode 100644 (file)
index a29e12c..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-! Copyright (C) 2008 Matthew Willis
-! See http://factorcode.org/license.txt for BSD license.
-!
-! these samples are a subset of the samples on
-! http://cairographics.org/samples/
-USING: cairo cairo.ffi locals math.constants math
-io.backend kernel alien.c-types libc namespaces
-cairo.gadgets ui.gadgets accessors specialized-arrays.double ;
-
-IN: cairo-samples
-
-TUPLE: arc-gadget < cairo-gadget ;
-M:: arc-gadget render-cairo* ( gadget -- )
-    [let | xc [ 128.0 ]
-           yc [ 128.0 ]
-           radius [ 100.0 ]
-           angle1 [ pi 1/4 * ]
-           angle2 [ pi ] |
-        cr 10.0 cairo_set_line_width
-        cr xc yc radius angle1 angle2 cairo_arc
-        cr cairo_stroke
-        
-        ! draw helping lines
-        cr 1 0.2 0.2 0.6 cairo_set_source_rgba
-        cr 6.0 cairo_set_line_width
-        
-        cr xc yc 10.0 0 2 pi * cairo_arc
-        cr cairo_fill
-        
-        cr xc yc radius angle1 angle1 cairo_arc
-        cr xc yc cairo_line_to
-        cr xc yc radius angle2 angle2 cairo_arc
-        cr xc yc cairo_line_to
-        cr cairo_stroke
-    ] ;
-
-TUPLE: clip-gadget < cairo-gadget ;
-M: clip-gadget render-cairo* ( gadget -- )
-    drop
-    cr 128 128 76.8 0 2 pi * cairo_arc
-    cr cairo_clip
-    cr cairo_new_path
-    
-    cr 0 0 256 256 cairo_rectangle
-    cr cairo_fill
-    cr 0 1 0 cairo_set_source_rgb
-    cr 0 0 cairo_move_to
-    cr 256 256 cairo_line_to
-    cr 256 0 cairo_move_to
-    cr 0 256 cairo_line_to
-    cr 10 cairo_set_line_width
-    cr cairo_stroke ;
-
-TUPLE: clip-image-gadget < cairo-gadget ;
-M:: clip-image-gadget render-cairo* ( gadget -- )
-    [let* | png [ "resource:misc/icons/Factor_128x128.png"
-                  normalize-path cairo_image_surface_create_from_png ]
-            w [ png cairo_image_surface_get_width ]
-            h [ png cairo_image_surface_get_height ] |
-        cr 128 128 76.8 0 2 pi * cairo_arc
-        cr cairo_clip
-        cr cairo_new_path
-
-        cr 192.0 w / 192.0 h / cairo_scale
-        cr png 32 32 cairo_set_source_surface
-        cr cairo_paint
-        png cairo_surface_destroy
-    ] ;
-
-TUPLE: dash-gadget < cairo-gadget ;
-M:: dash-gadget render-cairo* ( gadget -- )
-    [let | dashes [ double-array{ 50 10 10 10 } underlying>> ]
-           ndash [ 4 ] |
-        cr dashes ndash -50 cairo_set_dash
-        cr 10 cairo_set_line_width
-        cr 128.0 25.6 cairo_move_to
-        cr 230.4 230.4 cairo_line_to
-        cr -102.4 0 cairo_rel_line_to
-        cr 51.2 230.4 51.2 128.0 128.0 128.0 cairo_curve_to
-        cr cairo_stroke
-    ] ;
-
-TUPLE: gradient-gadget < cairo-gadget ;
-M:: gradient-gadget render-cairo* ( gadget -- )
-    [let | pat [ 0 0 0 256 cairo_pattern_create_linear ]
-           radial [ 115.2 102.4 25.6 102.4 102.4 128.0
-                    cairo_pattern_create_radial ] |
-        pat 1 0 0 0 1 cairo_pattern_add_color_stop_rgba
-        pat 0 1 1 1 1 cairo_pattern_add_color_stop_rgba
-        cr 0 0 256 256 cairo_rectangle
-        cr pat cairo_set_source
-        cr cairo_fill
-        pat cairo_pattern_destroy
-        
-        radial 0 1 1 1 1 cairo_pattern_add_color_stop_rgba
-        radial 1 0 0 0 1 cairo_pattern_add_color_stop_rgba
-        cr radial cairo_set_source
-        cr 128.0 128.0 76.8 0 2 pi * cairo_arc
-        cr cairo_fill
-        radial cairo_pattern_destroy
-    ] ;
-
-TUPLE: text-gadget < cairo-gadget ;
-M: text-gadget render-cairo* ( gadget -- )
-    drop
-    cr "Serif" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_BOLD
-    cairo_select_font_face
-    cr 50 cairo_set_font_size
-    cr 10 135 cairo_move_to
-    cr "Hello" cairo_show_text
-    
-    cr 70 165 cairo_move_to
-    cr "factor" cairo_text_path
-    cr 0.5 0.5 1 cairo_set_source_rgb
-    cr cairo_fill_preserve
-    cr 0 0 0 cairo_set_source_rgb
-    cr 2.56 cairo_set_line_width
-    cr cairo_stroke
-    
-    ! draw helping lines
-    cr 1 0.2 0.2 0.6 cairo_set_source_rgba
-    cr 10 135 5.12 0 2 pi * cairo_arc
-    cr cairo_close_path
-    cr 70 165 5.12 0 2 pi * cairo_arc
-    cr cairo_fill ;
-
-TUPLE: utf8-gadget < cairo-gadget ;
-M: utf8-gadget render-cairo* ( gadget -- )
-    drop
-    cr "Sans" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_NORMAL
-    cairo_select_font_face
-    cr 50 cairo_set_font_size
-    "cairo_text_extents_t" malloc-object
-    cr "日本語" pick cairo_text_extents
-    cr over
-    [ cairo_text_extents_t-width 2 / ]
-    [ cairo_text_extents_t-x_bearing ] bi +
-    128 swap - pick
-    [ cairo_text_extents_t-height 2 / ]
-    [ cairo_text_extents_t-y_bearing ] bi +
-    128 swap - cairo_move_to
-    free
-    cr "日本語" cairo_show_text
-    
-    cr 1 0.2 0.2 0.6 cairo_set_source_rgba
-    cr 6 cairo_set_line_width
-    cr 128 0 cairo_move_to
-    cr 0 256 cairo_rel_line_to
-    cr 0 128 cairo_move_to
-    cr 256 0 cairo_rel_line_to
-    cr cairo_stroke ;
- USING: quotations cairo.gadgets ui.gadgets.panes sequences ;
- : samples ( -- )
-    {
-        arc-gadget clip-gadget clip-image-gadget dash-gadget
-        gradient-gadget text-gadget utf8-gadget
-    }
-    [ new-gadget { 256 256 } >>dim gadget. ] each ;
- MAIN: samples