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 );
+    }
+}