]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/images/images.factor
ui.images: load all UI images as 2x for retina displays.
[factor.git] / basis / ui / images / images.factor
1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs cache combinators images.loader kernel
4 math memoize namespaces opengl.textures sequences system
5 ui.gadgets.worlds vocabs ;
6 IN: ui.images
7
8 TUPLE: image-name path ;
9
10 C: <image-name> image-name
11
12 MEMO: cached-image ( image-name -- image )
13     path>> load-image t >>2x? ;
14
15 <PRIVATE
16
17 : image-texture-cache ( world -- texture-cache )
18     [ [ <cache-assoc> ] unless* ] change-images images>> ;
19
20 PRIVATE>
21
22 : rendered-image ( image-name -- texture )
23     world get image-texture-cache
24     [ cached-image { 0 0 } <texture> ] cache ;
25
26 : draw-image ( image-name -- )
27     rendered-image draw-texture ;
28
29 : draw-scaled-image ( dim image-name -- )
30     rendered-image draw-scaled-texture ;
31
32 : image-dim ( image-name -- dim )
33     cached-image dim>> [ 2 / ] map ;
34
35 {
36     { [ os macosx? ] [ "images.loader.cocoa" require ] }
37     { [ os windows?  ] [ "images.loader.gdiplus" require ] }
38     { [ os { freebsd } member? ] [
39         "images.png" require
40         "images.tiff" require
41     ] }
42     [ "images.loader.gtk" require ]
43 } cond