Mercurial > foo_out_sdl
diff foosdk/sdk/foobar2000/helpers-mac/fb2k-platform.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/foobar2000/helpers-mac/fb2k-platform.mm Mon Jan 05 02:15:46 2026 -0500 @@ -0,0 +1,118 @@ +#include "fb2k-platform.h" +#include "NSFont+pp.h" + +namespace fb2k { + NSString * strToPlatform( const char * s, size_t len ) { + pfc::string8 temp( s, len ); + return strToPlatform( temp ); + } + NSString * strToPlatform( const char * arg, NSString * returnIfError ) { + if ( arg ) @try { + NSString * ret = [NSString stringWithUTF8String: arg]; + if ( ret ) return ret; + } @catch(NSException *) {} + return returnIfError; + } + NSString * strToPlatform( const char * s ) { + return [NSString stringWithUTF8String: s]; + } + NSString * strToPlatform( stringRef s ) { + if ( s.is_empty( ) ) return nil; + return strToPlatform( s->c_str() ); + } + stringRef strFromPlatform( NSString * s ) { + return makeString( s.UTF8String ); + } + + stringRef urlFromPlatform( id obj ) { + if ( [obj isKindOfClass: [NSURL class] ] ) { + NSURL * URL = obj; + obj = URL.absoluteString; + if ([obj hasPrefix:@"file://"]) + obj = URL.path; + } + if ( [obj respondsToSelector: @selector(UTF8String)]) { + pfc::string8 temp; + filesystem::g_get_canonical_path( [obj UTF8String], temp ); + return makeString( temp ); + } + return nullptr; + } + + NSURL * urlToPlatform(const char * arg) { + pfc::string8 native; + if (filesystem::g_get_native_path(arg, native)) { + return [NSURL fileURLWithPath: [NSString stringWithUTF8String: native ] ]; + } + return [NSURL URLWithString: [NSString stringWithUTF8String: arg]]; + } + + void openURL( const char * URL ) { + @autoreleasepool { + [[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString: [NSString stringWithUTF8String: URL]]]; + } + } + void openWebBrowser( const char * URL) { + openURL(URL); + } + + NSImage * imageToPlatform( fb2k::objRef obj ) { + fb2k::image::ptr img; + if ( img &= obj ) { + return (__bridge NSImage *) img->getNative(); + } + return nil; + } + BOOL testFontParams(NSDictionary<NSString*, NSString*> * arg) { + return arg[@"font-name"] || arg[@"font-size"]; + } + NSFont * fontFromParams(NSDictionary<NSString*, NSString*> * arg, NSFont * base) { + NSString * fontName = arg[@"font-name"]; + NSString * fontSize = arg[@"font-size"]; + NSFont * font = nil; + if ( fontName && fontSize ) { + font = [NSFont fontWithName: fontName size: fontSize.floatValue]; + } else if ( fontName ) { + font = [NSFont fontWithName: fontName size: base ? base.pointSize : NSFont.systemFontSize]; + } else if ( fontSize ) { + if ( base ) { + font = [ base fontWithSize: fontSize.floatValue ]; + } else { + font = [NSFont monospacedDigitSystemFontOfSize: fontSize.floatValue weight: NSFontWeightRegular]; + } + } + if ( font ) return font; + if ( base ) return base; + // Reuse shared font object + return [NSFont pp_monospacedDigitFont]; + } + void tableViewPrepareForFont( NSTableView * tableView, NSFont * font ) { + + // Must use NSTableViewRowSizeStyleCustom + // Other options either discard our font or break down with multiple cell templates used (autolayout) + // Height is fixed anyway, better precalculate it + assert( tableView.rowSizeStyle == NSTableViewRowSizeStyleCustom ); + + tableView.rowHeight = tableViewRowHeightForFont(font); + } + CGFloat tableViewRowHeightForFont( NSFont * f ) { + return (CGFloat) round( f.pointSize * 1.5 ); + } +} + +namespace pfc { + string8 strFromPlatform(NSString* str) { + string8 ret; + if ( str ) ret = str.UTF8String; + return ret; + } + NSString * strToPlatform( const char * str) { + return fb2k::strToPlatform( str ); + } + NSString * strToPlatform(string8 const& str) { + return fb2k::strToPlatform( str.c_str() ); + } + string8 strFromPlatform(CFStringRef str) { + return strFromPlatform( (__bridge NSString*) str ); + } +}
