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