< prev index next >

src/java.desktop/windows/native/libsplashscreen/splashscreen_sys.c

Print this page

        

@@ -56,10 +56,12 @@
 #endif
 
 #define WM_SPLASHUPDATE         WM_USER+1
 #define WM_SPLASHRECONFIGURE    WM_USER+2
 
+#define BUFF_SIZE 1024
+
 /* Could use npt but decided to cut down on linked code size */
 char* SplashConvertStringAlloc(const char* in, int *size) {
     int len, outChars, rc;
     WCHAR* buf;
     if (!in) {

@@ -571,8 +573,53 @@
 
 SPLASHEXPORT char*
 SplashGetScaledImageName(const char* jarName, const char* fileName,
                            float *scaleFactor)
 {
+    *scaleFactor = 1.0;
+    float dpiScale = -1.0f;
+
+    dpiScale = GetScreenDpi();
+    *scaleFactor = dpiScale > 0 ? dpiScale / 96 : *scaleFactor;
+
+    if (*scaleFactor > 1.0) {
+
+        char strDpi[BUFF_SIZE];
+        _snprintf(strDpi, BUFF_SIZE, "%d", (int)dpiScale);
+        char *dupFileName = strdup(fileName);
+        char *fileExtension = strrchr(dupFileName, '.');
+        char *scaledImgName = NULL;
+        char *nameToAppend = ".scale-";
+        size_t length = 0;
+
+        /*File is missing extension */
+        if (fileExtension == NULL) {
+            length = strlen(dupFileName) + strlen(nameToAppend) +
+                    strlen(strDpi) + 1;
+            scaledImgName = SAFE_SIZE_ARRAY_ALLOC(malloc,length, sizeof(char));
+            _snprintf(scaledImgName, length, "%s%s%s", dupFileName,
+                    nameToAppend, strDpi);
+        } else {
+            length = fileExtension - dupFileName + 1;
+            char *fNameWithoutExt = SAFE_SIZE_ARRAY_ALLOC(malloc, length, sizeof(char));
+            memcpy(fNameWithoutExt, dupFileName, length);
+            fNameWithoutExt[length - 1] = '\0';
+            length = length + strlen(nameToAppend) + strlen(strDpi) +
+                    strlen(fileExtension) + 1;
+            scaledImgName = SAFE_SIZE_ARRAY_ALLOC(malloc, length, sizeof(char));
+            _snprintf(scaledImgName, length, "%s%s%s%s",
+                    fNameWithoutExt, nameToAppend, strDpi, fileExtension);
+            free(fNameWithoutExt);
+        }
+        free(dupFileName);
+        FILE *fp = NULL;
+        if (!(fp = fopen(scaledImgName, "r"))) {
     *scaleFactor = 1;
+            free(scaledImgName);
+            return NULL;
+        }
+        fclose(fp);
+        return scaledImgName;
+    }
     return NULL;
 }
+
< prev index next >