! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs cache combinators images images.loader kernel math namespaces opengl opengl.textures sequences splitting system ui.gadgets.worlds vocabs ; IN: ui.images TUPLE: image-name path ; C: image-name >2x? ] bi ; PRIVATE> GENERIC: cached-image ( image -- image ) M: image-name cached-image path>> gl-scale-factor get-global [ 1.0 > ] [ f ] if* [ "." split1-last "@2x." glue ] when cached-image-path ; M: image cached-image ; ] unless* ] change-images images>> ; PRIVATE> : rendered-image ( image -- texture ) world get image-texture-cache [ cached-image { 0 0 } ] cache ; : draw-image ( image -- ) rendered-image draw-texture ; : draw-scaled-image ( dim image -- ) rendered-image draw-scaled-texture ; : image-dim ( image -- dim ) cached-image [ dim>> ] [ 2x?>> [ [ 2 / ] map ] when ] bi ; { { [ os macosx? ] [ "images.loader.cocoa" require ] } { [ os windows? ] [ "images.loader.gdiplus" require ] } { [ os { freebsd } member? ] [ "images.png" require "images.tiff" require ] } [ "images.loader.gtk" require ] } cond