diff --git a/basis/cocoa/cocoa.factor b/basis/cocoa/cocoa.factor index fb21843c0f..53f22addcb 100644 --- a/basis/cocoa/cocoa.factor +++ b/basis/cocoa/cocoa.factor @@ -43,7 +43,9 @@ SYNTAX: IMPORT: scan [ ] import-objc-class ; "NSApplication" "NSArray" "NSAutoreleasePool" + "NSBitmapImageRep" "NSBundle" + "NSColorSpace" "NSData" "NSDictionary" "NSError" diff --git a/basis/images/cocoa/authors.txt b/basis/images/cocoa/authors.txt new file mode 100644 index 0000000000..f13c9c1e77 --- /dev/null +++ b/basis/images/cocoa/authors.txt @@ -0,0 +1 @@ +Joe Groff diff --git a/basis/images/cocoa/cocoa.factor b/basis/images/cocoa/cocoa.factor new file mode 100644 index 0000000000..2150747138 --- /dev/null +++ b/basis/images/cocoa/cocoa.factor @@ -0,0 +1,64 @@ +! (c)2010 Joe Groff bsd license +USING: accessors alien.data cocoa cocoa.classes cocoa.messages +combinators core-foundation.data core-graphics.types fry images +images.loader io kernel literals ; +IN: images.cocoa + +SINGLETON: ns-image +! "png" ns-image register-image-class +! "tif" ns-image register-image-class +! "tiff" ns-image register-image-class +! "gif" ns-image register-image-class +! "jpg" ns-image register-image-class +! "jpeg" ns-image register-image-class +! "bmp" ns-image register-image-class +! "ico" ns-image register-image-class + +CONSTANT: NSImageRepLoadStatusUnknownType -1 +CONSTANT: NSImageRepLoadStatusReadingHeader -2 +CONSTANT: NSImageRepLoadStatusWillNeedAllData -3 +CONSTANT: NSImageRepLoadStatusInvalidData -4 +CONSTANT: NSImageRepLoadStatusUnexpectedEOF -5 +CONSTANT: NSImageRepLoadStatusCompleted -6 + +CONSTANT: NSColorRenderingIntentDefault 0 +CONSTANT: NSColorRenderingIntentAbsoluteColorimetric 1 +CONSTANT: NSColorRenderingIntentRelativeColorimetric 2 +CONSTANT: NSColorRenderingIntentPerceptual 3 +CONSTANT: NSColorRenderingIntentSaturation 4 + +ERROR: ns-image-unknown-type ; +ERROR: ns-image-invalid-data ; +ERROR: ns-image-unexpected-eof ; +ERROR: ns-image-planar-images-not-supported ; + + + +: load-image-rep ( -- image-rep ) + NSBitmapImageRep contents -> autorelease -> imageRepWithData: + NSColorSpace -> genericRGBColorSpace + NSColorRenderingIntentDefault + -> bitmapImageRepByConvertingToColorSpace:renderingIntent: ; + +: image-rep>image ( image-rep -- image ) + image new swap { + [ -> size CGSize>dim >>dim ] + [ -> bitmapData ] + [ -> bytesPerPlane memory>byte-array >>bitmap ] + } cleave + RGBA >>component-order + ubyte-components >>component-type + f >>upside-down? ; + +M: ns-image stream>image + drop [ load-image-rep ] with-input-stream image-rep>image ; diff --git a/basis/images/cocoa/platforms.txt b/basis/images/cocoa/platforms.txt new file mode 100644 index 0000000000..6e806f449e --- /dev/null +++ b/basis/images/cocoa/platforms.txt @@ -0,0 +1 @@ +macosx diff --git a/basis/images/cocoa/summary.txt b/basis/images/cocoa/summary.txt new file mode 100644 index 0000000000..628cce90e9 --- /dev/null +++ b/basis/images/cocoa/summary.txt @@ -0,0 +1 @@ +Image loading using MacOS X's native Cocoa APIs