src/macosx/native/sun/awt/splashscreen/splashscreen_sys.m

Print this page

        

@@ -123,10 +123,40 @@
 done:
     setlocale(LC_ALL, old_locale);
     return buf;
 }
 
+char* SplashGetScaledImageName(const char* jar, const char* file,
+                               float *scaleFactor) {
+    NSString *fileName = [[[NSString alloc] initWithUTF8String: file]
+                          autorelease];
+    NSUInteger length = [fileName length];
+    *scaleFactor = 1;
+    float screenScaleFactor = [[NSScreen mainScreen] backingScaleFactor];
+    
+    if (1 < screenScaleFactor) {
+        NSRange range = [fileName rangeOfString: @"."
+                                        options:NSBackwardsSearch];
+        int index = range.location;
+        
+        if (index != NSNotFound && index != 0 && index != length-1) {
+            NSString *fileName2x = [fileName substringToIndex: index];
+            fileName2x = [fileName2x stringByAppendingString: @"@2x"];
+            fileName2x = [fileName2x stringByAppendingString:
+                          [fileName substringFromIndex: index]];
+            
+            if (!jar && ![[NSFileManager defaultManager]
+                          fileExistsAtPath: fileName2x]){
+                return nil;
+            }
+
+            *scaleFactor = 2;
+            return strdup([fileName2x UTF8String]);
+        }
+    }
+    return nil;
+}
 
 void
 SplashInitPlatform(Splash * splash) {
     pthread_mutex_init(&splash->lock, NULL);
 

@@ -223,10 +253,18 @@
         NSImage * image = [[NSImage alloc]
             initWithSize: NSMakeSize(splash->width, splash->height)];
         [image setBackgroundColor: [NSColor clearColor]];
 
         [image addRepresentation: rep];
+        float scaleFactor = splash->scaleFactor;
+        if (scaleFactor != 1) {
+            [image setScalesWhenResized:YES];
+            NSSize size = [image size];
+            size.width /= scaleFactor;
+            size.height /= scaleFactor;
+            [image setSize: size];
+        }
 
         NSImageView * view = [[NSImageView alloc] init];
 
         [view setImage: image];
         [view setEditable: NO];