]> gitweb.factorcode.org Git - factor.git/commitdiff
cocoa: Ask the OS for which image file extensions are supported.
authorDoug Coleman <doug.coleman@gmail.com>
Fri, 16 Apr 2021 04:21:30 +0000 (23:21 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Fri, 16 Apr 2021 13:24:45 +0000 (08:24 -0500)
basis/cocoa/cocoa.factor
basis/images/loader/cocoa/cocoa.factor

index 1bd2d8bb090e15f1a918ece049ea92c6f7974785..10f6a93ffc915c281d73d247bbdc773fae5e57d8 100644 (file)
@@ -66,6 +66,7 @@ SYNTAX: IMPORT: scan-token [ ] import-objc-class ;
         "NSError"
         "NSEvent"
         "NSException"
+        "NSImage"
         "NSMenu"
         "NSMenuItem"
         "NSMutableDictionary"
index 4b0b48b33de8d38cb26846a31b621eca2a9c273b..5d2fac82a13a2b4e01a1d6c36e2513e377be49f9 100644 (file)
@@ -1,16 +1,36 @@
 ! Copyright (C) 2010, 2011 Joe Groff, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors cocoa cocoa.classes core-foundation
-core-foundation.data core-foundation.urls core-graphics
+USING: accessors alien.syntax assocs cocoa cocoa.classes
+cocoa.enumeration cocoa.plists.private core-foundation
+core-foundation.data core-foundation.dictionaries
+core-foundation.strings core-foundation.urls core-graphics
 core-graphics.private core-graphics.types destructors
-images.loader io kernel locals math sequences system ;
+images.loader io kernel math sequences system ;
 IN: images.loader.cocoa
 
 SINGLETON: ns-image
 
+FUNCTION: CFDictionaryRef UTTypeCopyDeclaration ( CFStringRef inUTI )
+
+<<
+
+: supported-ns-images ( -- seq )
+    NSImage -> imageTypes [ CF>string ] NSFastEnumeration-map ;
+
+: supported-ns-images-utt ( -- seq )
+    NSImage -> imageTypes
+    [ [ CF>string ] NSFastEnumeration-map ]
+    [ [ UTTypeCopyDeclaration (plist-NSDictionary>) ] NSFastEnumeration-map ] bi zip ;
+
+: supported-ns-image-extensions ( -- seq )
+    supported-ns-images-utt
+    [ "UTTypeTagSpecification" of dup [ "public.filename-extension" of ] when ] assoc-map values concat ;
+
+>>
+
 os macosx? [
-    { "png" "tif" "tiff" "gif" "jpg" "jpeg" "bmp" "ico" }
-    [ ns-image register-image-class ] each
+    ! { "png" "tif" "tiff" "gif" "jpg" "jpeg" "bmp" "ico" "webp" }
+    supported-ns-image-extensions [ ns-image register-image-class ] each
 ] when
 
 : <CGImage> ( byte-array -- image-rep )