2008-09-04 13:55:11 -04:00
|
|
|
! Copyright (C) 2007 Doug Coleman.
|
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2009-02-06 01:01:28 -05:00
|
|
|
USING: accessors arrays combinators graphics.bitmap kernel math
|
|
|
|
|
math.functions namespaces opengl opengl.gl ui ui.gadgets
|
2009-02-09 19:39:46 -05:00
|
|
|
ui.gadgets.panes ui.render graphics.tiff sequences ;
|
2008-09-04 13:55:11 -04:00
|
|
|
IN: graphics.viewer
|
|
|
|
|
|
|
|
|
|
TUPLE: graphics-gadget < gadget image ;
|
|
|
|
|
|
|
|
|
|
GENERIC: draw-image ( image -- )
|
|
|
|
|
GENERIC: width ( image -- w )
|
|
|
|
|
GENERIC: height ( image -- h )
|
|
|
|
|
|
|
|
|
|
M: graphics-gadget pref-dim*
|
|
|
|
|
image>> [ width ] keep height abs 2array ;
|
|
|
|
|
|
|
|
|
|
M: graphics-gadget draw-gadget* ( gadget -- )
|
|
|
|
|
origin get [ image>> draw-image ] with-translation ;
|
|
|
|
|
|
|
|
|
|
: <graphics-gadget> ( bitmap -- gadget )
|
|
|
|
|
\ graphics-gadget new-gadget
|
|
|
|
|
swap >>image ;
|
2009-02-06 01:01:28 -05:00
|
|
|
|
2009-02-09 19:39:46 -05:00
|
|
|
: bits>gl-params ( n -- gl-bgr gl-format )
|
|
|
|
|
{
|
|
|
|
|
{ 32 [ GL_BGRA GL_UNSIGNED_BYTE ] }
|
|
|
|
|
{ 24 [ GL_BGR GL_UNSIGNED_BYTE ] }
|
|
|
|
|
{ 8 [ GL_BGR GL_UNSIGNED_BYTE ] }
|
|
|
|
|
{ 4 [ GL_BGR GL_UNSIGNED_BYTE ] }
|
|
|
|
|
} case ;
|
|
|
|
|
|
2009-02-06 01:01:28 -05:00
|
|
|
M: bitmap draw-image ( bitmap -- )
|
|
|
|
|
dup height>> 0 < [
|
|
|
|
|
0 0 glRasterPos2i
|
|
|
|
|
1.0 -1.0 glPixelZoom
|
|
|
|
|
] [
|
|
|
|
|
0 over height>> abs glRasterPos2i
|
|
|
|
|
1.0 1.0 glPixelZoom
|
|
|
|
|
] if
|
|
|
|
|
[ width>> ] keep
|
|
|
|
|
[
|
|
|
|
|
[ height>> abs ] keep
|
2009-02-09 19:39:46 -05:00
|
|
|
bit-count>> bits>gl-params
|
2009-02-06 01:01:28 -05:00
|
|
|
] keep array>> glDrawPixels ;
|
|
|
|
|
|
|
|
|
|
M: bitmap width ( bitmap -- ) width>> ;
|
|
|
|
|
M: bitmap height ( bitmap -- ) height>> ;
|
|
|
|
|
|
|
|
|
|
: bitmap. ( path -- )
|
|
|
|
|
load-bitmap <graphics-gadget> gadget. ;
|
|
|
|
|
|
|
|
|
|
: bitmap-window ( path -- gadget )
|
|
|
|
|
load-bitmap <graphics-gadget> [ "bitmap" open-window ] keep ;
|
2009-02-09 19:39:46 -05:00
|
|
|
|
2009-02-09 20:16:46 -05:00
|
|
|
M: tiff width ( tiff -- ) ifds>> first image-width find-tag ;
|
|
|
|
|
M: tiff height ( tiff -- ) ifds>> first image-length find-tag ;
|
2009-02-09 19:39:46 -05:00
|
|
|
|
|
|
|
|
M: tiff draw-image ( tiff -- )
|
|
|
|
|
[ 0 0 glRasterPos2i 1.0 -1.0 glPixelZoom ] dip
|
|
|
|
|
ifds>> first
|
|
|
|
|
{
|
2009-02-09 20:16:46 -05:00
|
|
|
[ image-width find-tag ]
|
|
|
|
|
[ image-length find-tag ]
|
|
|
|
|
[ bits-per-sample find-tag sum bits>gl-params ]
|
2009-02-09 19:39:46 -05:00
|
|
|
[ buffer>> ]
|
|
|
|
|
} cleave glDrawPixels ;
|