< prev index next >

src/java.desktop/share/native/libsplashscreen/splashscreen_impl.c

Print this page

        

@@ -23,10 +23,16 @@
  * questions.
  */
 
 #include "splashscreen_impl.h"
 #include "splashscreen_gfx_impl.h"
+#define BUFF_SIZE 1024
+#ifdef _MSC_VER
+# ifndef snprintf
+#       define snprintf _snprintf
+# endif
+#endif
 
 int splashIsVisible = 0;
 
 Splash *
 SplashGetInstance()

@@ -390,7 +396,66 @@
     return 1;
 }
 
 SPLASHEXPORT int
 SplashGetScaledImgNameMaxPstfixLen(const char *fileName){
-    return strlen(fileName) + strlen(".java-scale-200") + 1;
+    return strlen(fileName) + strlen("@100pct") + 1;
 }
+
+jboolean GetScaledImageName(const char *fileName,char *scaleImageName, 
+        float *scaleFactor, const size_t scaledImageLength) {
+    FILE *fp = NULL;
+    if (*scaleFactor > 1.0) {
+        char strDpi[BUFF_SIZE];
+        char *dupFileName = strdup(fileName);
+        char *fileExtension = strrchr(dupFileName, '.');
+        size_t length = 0;
+        int retVal = 0;
+        if(*scaleFactor - (int)*scaleFactor < 0.000001) {
+            snprintf(strDpi, BUFF_SIZE, "%s%d%s", "@", (int)(*scaleFactor), "x");
+        } else {
+            snprintf(strDpi, BUFF_SIZE, "%s%d%s", "@", (int)(*scaleFactor * 100), "pct");
+        }
+        /*File is missing extension */
+        if (fileExtension == NULL) {
+            length = strlen(dupFileName) +
+                strlen(strDpi) + 1;
+            if (length > scaledImageLength) {
+                *scaleFactor = 1;
+                free(dupFileName);
+                return JNI_FALSE;
+            }
+            retVal = snprintf(scaleImageName, length, "%s%s", dupFileName,
+                strDpi);
+            if (retVal < 0 || (retVal != length - 1)) {
+                *scaleFactor = 1;
+                free(dupFileName);
+                return JNI_FALSE;
+            }
+        } else {
+            int length_Without_Ext = fileExtension - dupFileName;
+            length = length_Without_Ext + strlen(strDpi) +
+                strlen(fileExtension) + 1;
+            if (length > scaledImageLength) {
+                *scaleFactor = 1;
+                free(dupFileName);
+                return JNI_FALSE;
+            }
+            retVal = snprintf(scaleImageName, length, "%.*s%s%s",
+                length_Without_Ext, dupFileName, strDpi, fileExtension);
+            if (retVal < 0 || (retVal != length - 1)) {
+                *scaleFactor = 1;
+                free(dupFileName);
+                return JNI_FALSE;
+            }
+        }
+        free(dupFileName);
+        if (!(fp = fopen(scaleImageName, "r"))) {
+            *scaleFactor = 1;
+            return JNI_FALSE;
+        }
+        fclose(fp);
+        return JNI_TRUE;
+    }
+    return JNI_FALSE;
+}
+
< prev index next >