1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel accessors math.vectors ui.images opengl fry
8 TUPLE: tile-pen left center right background foreground ;
10 : <tile-pen> ( left center right background foreground -- pen )
13 : >tile-pen< ( pen -- left center right )
14 [ left>> ] [ center>> ] [ right>> ] tri ; inline
16 M: tile-pen pen-pref-dim
18 >tile-pen< [ image-dim ] tri@
19 [ vmax vmax ] [ v+ v+ ] 3bi
20 ] dip orientation>> set-axis ;
22 : compute-tile-xs ( gadget pen -- x1 x2 x3 )
24 [ nip left>> image-dim ]
25 [ [ dim>> ] [ right>> image-dim ] bi* v- ]
28 : compute-tile-widths ( gadget pen -- w1 w2 w3 )
29 [ nip left>> image-dim ]
30 [ [ dim>> ] [ [ left>> ] [ right>> ] bi [ image-dim ] bi@ ] bi* v+ v- ]
31 [ nip right>> image-dim ]
34 : render-tile ( tile x width gadget -- )
35 [ orientation>> '[ _ v* ] dip ] keep
37 _ _ [ dim>> swap ] [ orientation>> ] bi set-axis
38 swap draw-scaled-image
41 M: tile-pen draw-interior ( gadget pen -- )
45 [ compute-tile-widths ]
48 [ render-tile ] curry tri-curry@ tri-curry* tri* ;
50 M: tile-pen pen-background nip background>> ;
52 M: tile-pen pen-foreground nip foreground>> ;