]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/text/core-text/core-text.factor
opengl: properly scale viewports.
[factor.git] / basis / ui / text / core-text / core-text.factor
1 ! Copyright (C) 2009, 2010 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: assocs accessors alien core-graphics.types core-text
4 core-text.fonts kernel hashtables namespaces sequences ui.text
5 ui.text.private destructors combinators core-foundation
6 core-foundation.strings math math.vectors init colors
7 colors.constants cache arrays images ;
8 IN: ui.text.core-text
9
10 SINGLETON: core-text-renderer
11
12 <PRIVATE
13
14 : unscale ( m -- n )
15     retina? get-global [ 2 /i ] when ; inline
16
17 : scale ( m -- n )
18     retina? get-global [ 2 * ] when ; inline
19
20 : scale-dim ( dim -- dim' )
21     retina? get-global [ [ 2 /i ] map ] when ; inline
22
23 : scale-metrics ( metrics -- metrics' )
24     retina? get-global [
25         clone
26             [ 2.0 / ] change-width
27             [ 2.0 / ] change-ascent
28             [ 2.0 / ] change-descent
29             [ 2.0 / ] change-height
30             [ 2.0 / ] change-leading
31             [ 2.0 / ] change-cap-height
32             [ 2.0 / ] change-x-height
33     ] when ; inline
34
35 PRIVATE>
36
37 M: core-text-renderer string-dim
38     [ " " string-dim { 0 1 } v* ]
39     [ cached-line dim>> scale-dim ]
40     if-empty ;
41
42 M: core-text-renderer flush-layout-cache
43     cached-lines get-global purge-cache ;
44
45 M: core-text-renderer string>image ( font string -- image loc )
46     cached-line [ line>image ] [ loc>> scale-dim ] bi ;
47
48 M: core-text-renderer x>offset ( x font string -- n )
49     [ 2drop 0 ] [
50         cached-line line>>
51         swap scale 0 <CGPoint> CTLineGetStringIndexForPosition
52     ] if-empty ;
53
54 M: core-text-renderer offset>x ( n font string -- x )
55     cached-line line>> swap f
56     CTLineGetOffsetForStringIndex unscale ;
57
58 M: core-text-renderer font-metrics ( font -- metrics )
59     cache-font-metrics ;
60
61 M: core-text-renderer line-metrics ( font string -- metrics )
62     [ " " line-metrics clone 0 >>width ]
63     [ cached-line metrics>> scale-metrics ]
64     if-empty ;
65
66 core-text-renderer font-renderer set-global