< 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 >