Mercurial > foo_out_sdl
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/foosdk/sdk/pfc/obj-c.mm Mon Jan 05 02:15:46 2026 -0500 @@ -0,0 +1,143 @@ +// +// PFC-ObjC.m +// pfc-test +// +// Created by PEPE on 28/07/14. +// Copyright (c) 2014 PEPE. All rights reserved. +// +#ifdef __APPLE__ +#import <Foundation/Foundation.h> + + +#include <TargetConditionals.h> + +#if TARGET_OS_MAC && !TARGET_OS_IPHONE +#import <Cocoa/Cocoa.h> +#endif + +#include "pfc.h" +#include "sortstring.h" + + +namespace pfc { + void * thread::g_entry(void * arg) { + @autoreleasepool { + reinterpret_cast<thread*>(arg)->entry(); + } + return NULL; + } + void thread::appleStartThreadPrologue() { + if (![NSThread isMultiThreaded]) [[[NSThread alloc] init] start]; + } + + bool isShiftKeyPressed() { +#if TARGET_OS_MAC && !TARGET_OS_IPHONE + return ( [NSEvent modifierFlags] & NSEventModifierFlagShift ) != 0; +#else + return false; +#endif + } + bool isCtrlKeyPressed() { +#if TARGET_OS_MAC && !TARGET_OS_IPHONE + return ( [NSEvent modifierFlags] & NSEventModifierFlagControl ) != 0; +#else + return false; +#endif + } + bool isAltKeyPressed() { +#if TARGET_OS_MAC && !TARGET_OS_IPHONE + return ( [NSEvent modifierFlags] & NSEventModifierFlagOption ) != 0; +#else + return false; +#endif + } + + void inAutoReleasePool(std::function<void()> f) { + @autoreleasepool { + f(); + } + } + + void appleDebugLog( const char * str ) { + NSLog(@"%s\n", str ); + } + + bool appleRecycleFile( const char * path ) { + @autoreleasepool { + NSFileManager * manager = [NSFileManager defaultManager]; + NSURL * url = [NSURL fileURLWithPath: [NSString stringWithUTF8String: path] ]; + if (@available(iOS 11.0, *)) { + NSError * error = nil; + if ([manager trashItemAtURL: url resultingItemURL: nil error: &error]) { + return true; + } + if ([error.domain isEqualToString: NSCocoaErrorDomain] && error.code == NSFeatureUnsupportedError) { + // trashcan not supported, fall thru + } else { + // failed to remove + return false; + } + } + return [manager removeItemAtURL: url error: nil]; + } + } + void appleSetThreadDescription( const char * str ) { + @autoreleasepool { + [NSThread currentThread].name = [NSString stringWithUTF8String: str]; + } + } + + pfc::string8 unicodeNormalizeD(const char * str) { + @autoreleasepool { + pfc::string8 ret; + NSString * v = [[NSString stringWithUTF8String: str] decomposedStringWithCanonicalMapping]; + if ( v ) ret = v.UTF8String; + else ret = str; + return ret; + } + } + pfc::string8 unicodeNormalizeC(const char * str) { + @autoreleasepool { + pfc::string8 ret; + NSString * v = [[NSString stringWithUTF8String: str] precomposedStringWithCanonicalMapping]; + if ( v ) ret = v.UTF8String; + else ret = str; + return ret; + } + } + + int appleNaturalSortCompare(const char* s1, const char* s2) { + @autoreleasepool { + NSString * str1 = [NSString stringWithUTF8String: s1]; + NSString * str2 = [NSString stringWithUTF8String: s2]; + return (int) [str1 localizedCompare: str2]; + } + } + int appleNaturalSortCompareI(const char* s1, const char* s2) { + @autoreleasepool { + NSString * str1 = [NSString stringWithUTF8String: s1]; + NSString * str2 = [NSString stringWithUTF8String: s2]; + return (int) [str1 localizedCaseInsensitiveCompare: str2]; + } + } + [[noreturn]] void appleThrowException( const char * name, const char * reason ) { + @autoreleasepool { + @throw [NSException exceptionWithName: [NSString stringWithUTF8String: name] reason:[NSString stringWithUTF8String: reason] userInfo:nil]; + } + } + +#ifndef PFC_SORTSTRING_GENERIC + sortString_t makeSortString(const char* str) { + sortString_t ret; + ret.Attach( CFStringCreateWithCString(NULL, str, kCFStringEncodingUTF8) ); + return ret; + } + int sortStringCompare(sortString_t const& s1, sortString_t const& s2) { + return (int) CFStringCompare(s1.p, s2.p, kCFCompareLocalized | kCFCompareNumerically ); + } + int sortStringCompareI(sortString_t const& s1, sortString_t const& s2) { + return (int) CFStringCompare(s1.p, s2.p, kCFCompareLocalized | kCFCompareNumerically | kCFCompareCaseInsensitive ); + } +#endif +} +#endif
