]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/gadgets/labels/labels.factor
Fix conflict
[factor.git] / basis / ui / gadgets / labels / labels.factor
1 ! Copyright (C) 2005, 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays hashtables io kernel math math.functions
4 namespaces make opengl sequences strings splitting ui.gadgets
5 ui.gadgets.tracks ui.gadgets.packs fonts ui.render ui.text
6 colors colors.constants models ;
7 IN: ui.gadgets.labels
8
9 ! A label gadget draws a string.
10 TUPLE: label < gadget text font ;
11
12 SLOT: string
13
14 M: label string>> ( label -- string )
15     text>> dup string? [ "\n" join ] unless ; inline
16
17 M: label (>>string) ( string label -- )
18     [ CHAR: \n over memq? [ string-lines ] when ] dip (>>text) ; inline
19
20 : label-theme ( gadget -- gadget )
21     sans-serif-font >>font ; inline
22
23 : new-label ( string class -- label )
24     new-gadget
25     swap >>string
26     label-theme ; inline
27
28 : <label> ( string -- label )
29     label new-label ;
30
31 : >label< ( label -- font text )
32     [ font>> ] [ text>> ] bi ;
33
34 M: label pref-dim*
35     >label< text-dim ;
36
37 M: label baseline
38     >label< dup string? [ first ] unless
39     line-metrics ascent>> round ;
40
41 M: label draw-gadget*
42     >label< origin get draw-text ;
43
44 M: label gadget-text* string>> % ;
45
46 TUPLE: label-control < label ;
47
48 M: label-control model-changed
49     swap value>> >>string relayout ;
50
51 : <label-control> ( model -- gadget )
52     "" label-control new-label
53         swap >>model ;
54
55 : text-theme ( gadget -- gadget )
56     monospace-font >>font ;
57
58 : reverse-video-theme ( label -- label )
59     sans-serif-font reverse-video-font >>font
60     COLOR: black <solid> >>interior ;
61
62 GENERIC: >label ( obj -- gadget )
63 M: string >label <label> ;
64 M: array >label <label> ;
65 M: object >label ;
66 M: f >label drop <gadget> ;
67
68 <PRIVATE
69
70 : label-on-left/right ( -- track )
71     horizontal <track>
72         +baseline+ >>align
73         { 5 5 } >>gap ; inline
74 PRIVATE>
75
76 : label-on-left ( gadget label -- button )
77     label-on-left/right
78         swap >label f track-add
79         swap 1 track-add ;
80
81 : label-on-right ( label gadget -- button )
82     label-on-left/right
83         swap f track-add
84         swap >label 1 track-add ;