1 ! Copyright (C) 2009 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
4 USING: accessors alien alien.c-types alien.data
5 alien.destructors alien.syntax colors
6 core-foundation.dictionaries core-foundation.strings
7 core-foundation.urls core-foundation.utilities
8 core-graphics.types destructors images images.memory kernel
9 libc math opengl.gl sequences ;
13 TYPEDEF: int CGImageAlphaInfo
14 CONSTANT: kCGImageAlphaNone 0
15 CONSTANT: kCGImageAlphaPremultipliedLast 1
16 CONSTANT: kCGImageAlphaPremultipliedFirst 2
17 CONSTANT: kCGImageAlphaLast 3
18 CONSTANT: kCGImageAlphaFirst 4
19 CONSTANT: kCGImageAlphaNoneSkipLast 5
20 CONSTANT: kCGImageAlphaNoneSkipFirst 6
22 CONSTANT: kCGBitmapAlphaInfoMask 0x1f
23 CONSTANT: kCGBitmapFloatComponents 256
25 CONSTANT: kCGBitmapByteOrderMask 0x7000
26 CONSTANT: kCGBitmapByteOrderDefault 0
27 CONSTANT: kCGBitmapByteOrder16Little 4096
28 CONSTANT: kCGBitmapByteOrder32Little 8192
29 CONSTANT: kCGBitmapByteOrder16Big 12288
30 CONSTANT: kCGBitmapByteOrder32Big 16384
32 : kCGBitmapByteOrder16Host ( -- n )
34 kCGBitmapByteOrder16Little
35 kCGBitmapByteOrder16Big ? ; foldable
37 : kCGBitmapByteOrder32Host ( -- n )
39 kCGBitmapByteOrder32Little
40 kCGBitmapByteOrder32Big ? ; foldable
42 FUNCTION: CGColorRef CGColorCreateGenericRGB (
49 : <CGColor> ( color -- CGColor )
50 >rgba-components CGColorCreateGenericRGB ;
52 M: color (>cf) <CGColor> ;
54 FUNCTION: CGColorSpaceRef CGColorSpaceCreateDeviceRGB ( )
56 FUNCTION: CGContextRef CGBitmapContextCreate (
60 size_t bitsPerComponent,
62 CGColorSpaceRef colorspace,
63 CGBitmapInfo bitmapInfo
66 FUNCTION: CGImageRef CGBitmapContextCreateImage (
70 FUNCTION: void CGColorSpaceRelease ( CGColorSpaceRef ref )
72 DESTRUCTOR: CGColorSpaceRelease
74 FUNCTION: void CGContextRelease ( CGContextRef ref )
76 DESTRUCTOR: CGContextRelease
78 FUNCTION: void CGContextSetRGBStrokeColor (
86 FUNCTION: void CGContextSetRGBFillColor (
94 FUNCTION: void CGContextSetTextPosition (
100 FUNCTION: void CGContextFillRect (
105 FUNCTION: void CGContextSetShouldSmoothFonts (
107 bool shouldSmoothFonts
110 FUNCTION: void CGContextDrawImage (
116 FUNCTION: size_t CGImageGetWidth (
120 FUNCTION: size_t CGImageGetHeight (
124 FUNCTION: CGImageDestinationRef CGImageDestinationCreateWithURL (
128 CFDictionaryRef options
131 FUNCTION: void CGImageDestinationAddImage (
132 CGImageDestinationRef idst,
134 CFDictionaryRef properties
137 FUNCTION: bool CGImageDestinationFinalize (
138 CGImageDestinationRef idst
141 FUNCTION: void* CGBitmapContextGetData ( CGContextRef c )
143 CONSTANT: kCGLRendererGenericFloatID 0x00020400
145 FUNCTION: CGLError CGLSetParameter ( CGLContextObj ctx, CGLContextParameter pname, GLint* params )
147 FUNCTION: CGDirectDisplayID CGMainDisplayID ( )
149 FUNCTION: CGError CGDisplayHideCursor ( CGDirectDisplayID display )
150 FUNCTION: CGError CGDisplayShowCursor ( CGDirectDisplayID display )
152 FUNCTION: CGError CGDisplayMoveCursorToPoint ( CGDirectDisplayID display, CGPoint point )
154 FUNCTION: CGError CGAssociateMouseAndMouseCursorPosition ( boolean_t connected )
156 FUNCTION: CGError CGWarpMouseCursorPosition ( CGPoint newCursorPosition )
158 FUNCTION: uint GetCurrentButtonState ( )
162 : bitmap-flags ( -- n )
163 kCGImageAlphaPremultipliedFirst kCGBitmapByteOrder32Host bitor ;
165 : bitmap-color-space ( -- color-space )
166 CGColorSpaceCreateDeviceRGB &CGColorSpaceRelease ;
168 : <CGBitmapContext> ( data dim -- context )
169 [ first2 8 ] [ first 4 * ] bi
170 bitmap-color-space bitmap-flags CGBitmapContextCreate
171 [ "CGBitmapContextCreate failed" throw ] unless* ;
175 : dummy-context ( -- context )
177 [ 4 malloc { 1 1 } <CGBitmapContext> ] with-destructors
180 : make-bitmap-image ( dim quot -- image )
181 '[ <CGBitmapContext> &CGContextRelease @ ] make-memory-bitmap
182 ARGB >>component-order
183 ubyte-components >>component-type
184 t >>premultiplied-alpha? ; inline