1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.data alien.destructors
4 alien.syntax accessors destructors fry kernel math math.bitwise
5 sequences libc colors images images.memory core-graphics.types
6 core-foundation.utilities opengl.gl literals ;
9 TYPEDEF: int CGImageAlphaInfo
10 CONSTANT: kCGImageAlphaNone 0
11 CONSTANT: kCGImageAlphaPremultipliedLast 1
12 CONSTANT: kCGImageAlphaPremultipliedFirst 2
13 CONSTANT: kCGImageAlphaLast 3
14 CONSTANT: kCGImageAlphaFirst 4
15 CONSTANT: kCGImageAlphaNoneSkipLast 5
16 CONSTANT: kCGImageAlphaNoneSkipFirst 6
18 CONSTANT: kCGBitmapAlphaInfoMask HEX: 1f
19 CONSTANT: kCGBitmapFloatComponents 256
21 CONSTANT: kCGBitmapByteOrderMask HEX: 7000
22 CONSTANT: kCGBitmapByteOrderDefault 0
23 CONSTANT: kCGBitmapByteOrder16Little 4096
24 CONSTANT: kCGBitmapByteOrder32Little 8192
25 CONSTANT: kCGBitmapByteOrder16Big 12288
26 CONSTANT: kCGBitmapByteOrder32Big 16384
28 : kCGBitmapByteOrder16Host ( -- n )
30 kCGBitmapByteOrder16Little
31 kCGBitmapByteOrder16Big ? ; foldable
33 : kCGBitmapByteOrder32Host ( -- n )
35 kCGBitmapByteOrder32Little
36 kCGBitmapByteOrder32Big ? ; foldable
38 FUNCTION: CGColorRef CGColorCreateGenericRGB (
45 : <CGColor> ( color -- CGColor )
46 >rgba-components CGColorCreateGenericRGB ;
48 M: color (>cf) <CGColor> ;
50 FUNCTION: CGColorSpaceRef CGColorSpaceCreateDeviceRGB ( ) ;
52 FUNCTION: CGContextRef CGBitmapContextCreate (
56 size_t bitsPerComponent,
58 CGColorSpaceRef colorspace,
59 CGBitmapInfo bitmapInfo
62 FUNCTION: void CGColorSpaceRelease ( CGColorSpaceRef ref ) ;
64 DESTRUCTOR: CGColorSpaceRelease
66 FUNCTION: void CGContextRelease ( CGContextRef ref ) ;
68 DESTRUCTOR: CGContextRelease
70 FUNCTION: void CGContextSetRGBStrokeColor (
78 FUNCTION: void CGContextSetRGBFillColor (
86 FUNCTION: void CGContextSetTextPosition (
92 FUNCTION: void CGContextFillRect (
97 FUNCTION: void CGContextSetShouldSmoothFonts (
99 bool shouldSmoothFonts
102 FUNCTION: void CGContextDrawImage (
108 FUNCTION: size_t CGImageGetWidth (
112 FUNCTION: size_t CGImageGetHeight (
116 FUNCTION: void* CGBitmapContextGetData ( CGContextRef c ) ;
118 CONSTANT: kCGLRendererGenericFloatID HEX: 00020400
120 FUNCTION: CGLError CGLSetParameter ( CGLContextObj ctx, CGLContextParameter pname, GLint* params ) ;
122 FUNCTION: CGDirectDisplayID CGMainDisplayID ( ) ;
124 FUNCTION: CGError CGDisplayHideCursor ( CGDirectDisplayID display ) ;
125 FUNCTION: CGError CGDisplayShowCursor ( CGDirectDisplayID display ) ;
127 FUNCTION: CGError CGDisplayMoveCursorToPoint ( CGDirectDisplayID display, CGPoint point ) ;
129 FUNCTION: CGError CGAssociateMouseAndMouseCursorPosition ( boolean_t connected ) ;
131 FUNCTION: CGError CGWarpMouseCursorPosition ( CGPoint newCursorPosition ) ;
133 FUNCTION: uint GetCurrentButtonState ( ) ;
137 : bitmap-flags ( -- n )
138 kCGImageAlphaPremultipliedFirst kCGBitmapByteOrder32Host bitor ;
140 : bitmap-color-space ( -- color-space )
141 CGColorSpaceCreateDeviceRGB &CGColorSpaceRelease ;
143 : <CGBitmapContext> ( data dim -- context )
144 [ first2 8 ] [ first 4 * ] bi
145 bitmap-color-space bitmap-flags CGBitmapContextCreate
146 [ "CGBitmapContextCreate failed" throw ] unless* ;
150 : dummy-context ( -- context )
152 [ 4 malloc { 1 1 } <CGBitmapContext> ] with-destructors
155 : make-bitmap-image ( dim quot -- image )
156 '[ <CGBitmapContext> &CGContextRelease @ ] make-memory-bitmap
157 ARGB >>component-order
158 ubyte-components >>component-type
159 t >>premultiplied-alpha? ; inline