--- old/src/java.desktop/windows/native/libsplashscreen/splashscreen_sys.c 2016-02-16 14:27:46.295855183 +0530 +++ new/src/java.desktop/windows/native/libsplashscreen/splashscreen_sys.c 2016-02-16 14:27:46.047855178 +0530 @@ -58,6 +58,8 @@ #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; @@ -573,6 +575,51 @@ SplashGetScaledImageName(const char* jarName, const char* fileName, float *scaleFactor) { - *scaleFactor = 1; + *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; } +