Mercurial > foo_out_sdl
comparison foosdk/sdk/pfc/obj-c.mm @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:e9bb126753e7 | 1:20d02a178406 |
|---|---|
| 1 // | |
| 2 // PFC-ObjC.m | |
| 3 // pfc-test | |
| 4 // | |
| 5 // Created by PEPE on 28/07/14. | |
| 6 // Copyright (c) 2014 PEPE. All rights reserved. | |
| 7 // | |
| 8 #ifdef __APPLE__ | |
| 9 #import <Foundation/Foundation.h> | |
| 10 | |
| 11 | |
| 12 #include <TargetConditionals.h> | |
| 13 | |
| 14 #if TARGET_OS_MAC && !TARGET_OS_IPHONE | |
| 15 #import <Cocoa/Cocoa.h> | |
| 16 #endif | |
| 17 | |
| 18 #include "pfc.h" | |
| 19 #include "sortstring.h" | |
| 20 | |
| 21 | |
| 22 namespace pfc { | |
| 23 void * thread::g_entry(void * arg) { | |
| 24 @autoreleasepool { | |
| 25 reinterpret_cast<thread*>(arg)->entry(); | |
| 26 } | |
| 27 return NULL; | |
| 28 } | |
| 29 void thread::appleStartThreadPrologue() { | |
| 30 if (![NSThread isMultiThreaded]) [[[NSThread alloc] init] start]; | |
| 31 } | |
| 32 | |
| 33 bool isShiftKeyPressed() { | |
| 34 #if TARGET_OS_MAC && !TARGET_OS_IPHONE | |
| 35 return ( [NSEvent modifierFlags] & NSEventModifierFlagShift ) != 0; | |
| 36 #else | |
| 37 return false; | |
| 38 #endif | |
| 39 } | |
| 40 bool isCtrlKeyPressed() { | |
| 41 #if TARGET_OS_MAC && !TARGET_OS_IPHONE | |
| 42 return ( [NSEvent modifierFlags] & NSEventModifierFlagControl ) != 0; | |
| 43 #else | |
| 44 return false; | |
| 45 #endif | |
| 46 } | |
| 47 bool isAltKeyPressed() { | |
| 48 #if TARGET_OS_MAC && !TARGET_OS_IPHONE | |
| 49 return ( [NSEvent modifierFlags] & NSEventModifierFlagOption ) != 0; | |
| 50 #else | |
| 51 return false; | |
| 52 #endif | |
| 53 } | |
| 54 | |
| 55 void inAutoReleasePool(std::function<void()> f) { | |
| 56 @autoreleasepool { | |
| 57 f(); | |
| 58 } | |
| 59 } | |
| 60 | |
| 61 void appleDebugLog( const char * str ) { | |
| 62 NSLog(@"%s\n", str ); | |
| 63 } | |
| 64 | |
| 65 bool appleRecycleFile( const char * path ) { | |
| 66 @autoreleasepool { | |
| 67 NSFileManager * manager = [NSFileManager defaultManager]; | |
| 68 NSURL * url = [NSURL fileURLWithPath: [NSString stringWithUTF8String: path] ]; | |
| 69 if (@available(iOS 11.0, *)) { | |
| 70 NSError * error = nil; | |
| 71 if ([manager trashItemAtURL: url resultingItemURL: nil error: &error]) { | |
| 72 return true; | |
| 73 } | |
| 74 if ([error.domain isEqualToString: NSCocoaErrorDomain] && error.code == NSFeatureUnsupportedError) { | |
| 75 // trashcan not supported, fall thru | |
| 76 } else { | |
| 77 // failed to remove | |
| 78 return false; | |
| 79 } | |
| 80 } | |
| 81 return [manager removeItemAtURL: url error: nil]; | |
| 82 } | |
| 83 } | |
| 84 void appleSetThreadDescription( const char * str ) { | |
| 85 @autoreleasepool { | |
| 86 [NSThread currentThread].name = [NSString stringWithUTF8String: str]; | |
| 87 } | |
| 88 } | |
| 89 | |
| 90 pfc::string8 unicodeNormalizeD(const char * str) { | |
| 91 @autoreleasepool { | |
| 92 pfc::string8 ret; | |
| 93 NSString * v = [[NSString stringWithUTF8String: str] decomposedStringWithCanonicalMapping]; | |
| 94 if ( v ) ret = v.UTF8String; | |
| 95 else ret = str; | |
| 96 return ret; | |
| 97 } | |
| 98 } | |
| 99 pfc::string8 unicodeNormalizeC(const char * str) { | |
| 100 @autoreleasepool { | |
| 101 pfc::string8 ret; | |
| 102 NSString * v = [[NSString stringWithUTF8String: str] precomposedStringWithCanonicalMapping]; | |
| 103 if ( v ) ret = v.UTF8String; | |
| 104 else ret = str; | |
| 105 return ret; | |
| 106 } | |
| 107 } | |
| 108 | |
| 109 int appleNaturalSortCompare(const char* s1, const char* s2) { | |
| 110 @autoreleasepool { | |
| 111 NSString * str1 = [NSString stringWithUTF8String: s1]; | |
| 112 NSString * str2 = [NSString stringWithUTF8String: s2]; | |
| 113 return (int) [str1 localizedCompare: str2]; | |
| 114 } | |
| 115 } | |
| 116 int appleNaturalSortCompareI(const char* s1, const char* s2) { | |
| 117 @autoreleasepool { | |
| 118 NSString * str1 = [NSString stringWithUTF8String: s1]; | |
| 119 NSString * str2 = [NSString stringWithUTF8String: s2]; | |
| 120 return (int) [str1 localizedCaseInsensitiveCompare: str2]; | |
| 121 } | |
| 122 } | |
| 123 [[noreturn]] void appleThrowException( const char * name, const char * reason ) { | |
| 124 @autoreleasepool { | |
| 125 @throw [NSException exceptionWithName: [NSString stringWithUTF8String: name] reason:[NSString stringWithUTF8String: reason] userInfo:nil]; | |
| 126 } | |
| 127 } | |
| 128 | |
| 129 #ifndef PFC_SORTSTRING_GENERIC | |
| 130 sortString_t makeSortString(const char* str) { | |
| 131 sortString_t ret; | |
| 132 ret.Attach( CFStringCreateWithCString(NULL, str, kCFStringEncodingUTF8) ); | |
| 133 return ret; | |
| 134 } | |
| 135 int sortStringCompare(sortString_t const& s1, sortString_t const& s2) { | |
| 136 return (int) CFStringCompare(s1.p, s2.p, kCFCompareLocalized | kCFCompareNumerically ); | |
| 137 } | |
| 138 int sortStringCompareI(sortString_t const& s1, sortString_t const& s2) { | |
| 139 return (int) CFStringCompare(s1.p, s2.p, kCFCompareLocalized | kCFCompareNumerically | kCFCompareCaseInsensitive ); | |
| 140 } | |
| 141 #endif | |
| 142 } | |
| 143 #endif |
