Fix $or
[factor/jcg.git] / extra / slides / slides.factor
blob0ce946dc49e409e84c96cb2a8b3b71aa1238f0aa
1 ! Copyright (C) 2007, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays hashtables help.markup help.stylesheet io
4 io.styles kernel math models namespaces sequences ui ui.gadgets
5 ui.gadgets.books ui.gadgets.panes ui.gestures ui.render
6 parser accessors colors ;
7 IN: slides
9 : stylesheet
10     H{
11         { default-span-style
12             H{
13                 { font "sans-serif" }
14                 { font-size 36 }
15             }
16         }
17         { default-block-style
18             H{
19                 { wrap-margin 1100 }
20             }
21         }
22         { code-style
23             H{
24                 { font "monospace" }
25                 { font-size 36 }
26                 { page-color T{ rgba f 0.4 0.4 0.4 0.3 } }
27             }
28         }
29         { snippet-style
30             H{
31                 { font "monospace" }
32                 { font-size 36 }
33                 { foreground T{ rgba f 0.1 0.1 0.4 1 } }
34             }
35         }
36         { table-content-style
37             H{ { wrap-margin 1000 } }
38         }
39         { list-style
40             H{ { table-gap { 10 20 } } }
41         }
42         { bullet "\u0000b7" }
43     } ;
45 : $title ( string -- )
46     [ H{ { font "sans-serif" } { font-size 48 } } format ] ($block) ;
48 : $divider ( -- )
49     [
50         <gadget>
51         {
52             T{ rgba f 0.25 0.25 0.25 1.0 }
53             T{ rgba f 1.0 1.0 1.0 0.0 }
54         } <gradient> >>interior
55         { 800 10 } >>dim
56         { 1 0 } >>orientation
57         gadget.
58     ] ($block) ;
60 : page-theme ( gadget -- )
61     { T{ rgba f 0.8 0.8 1.0 1.0 } T{ rgba f 0.8 1.0 1.0 1.0 } } <gradient>
62     >>interior drop ;
64 : <page> ( list -- gadget )
65     [
66         stylesheet clone [
67             [ print-element ] with-default-style
68         ] bind
69     ] make-pane
70     dup page-theme ;
72 : $slide ( element -- )
73     unclip $title
74     $divider
75     $list ;
77 TUPLE: slides < book ;
79 : <slides> ( slides -- gadget )
80     [ <page> ] map 0 <model> slides new-book ;
82 : change-page ( book n -- )
83     over control-value + over children>> length rem
84     swap model>> set-model ;
86 : next-page ( book -- ) 1 change-page ;
88 : prev-page ( book -- ) -1 change-page ;
90 : (strip-tease) ( data n -- data )
91     [ first3 ] dip head 3array ;
93 : strip-tease ( data -- seq )
94     dup third length 1- [
95         2 + (strip-tease)
96     ] with map ;
98 : STRIP-TEASE:
99     parse-definition strip-tease [ parsed ] each ; parsing
101 \ slides H{
102     { T{ key-down f f "DOWN" } [ next-page ] }
103     { T{ key-down f f "UP" } [ prev-page ] }
104 } set-gestures
106 : slides-window ( slides -- )
107     [ <slides> "Slides" open-window ] with-ui ;