< prev index next >
src/java.desktop/windows/native/libawt/windows/ThemeReader.cpp
Print this page
@@ -29,10 +29,12 @@
#include "awt.h"
#include "awt_Toolkit.h"
#include "awt_Object.h"
#include "awt_Component.h"
+#include "math.h"
+
// Important note about VC6 and VC7 (or XP Platform SDK) !
//
// These type definitions have been imported from UxTheme.h
// They have been imported instead of including them, because
// currently we don't require Platform SDK for building J2SE and
@@ -743,10 +745,23 @@
return dimObj;
}
return NULL;
}
+void rescale(SIZE *size) {
+ HWND hWnd = ::GetDesktopWindow();
+ HDC hDC = ::GetDC(hWnd);
+ int dpi = ::GetDeviceCaps(hDC, LOGPIXELSX);
+
+ if (dpi !=0 && dpi != 96) {
+ float invScale = 96.0f / dpi;
+ size->cx = (int)round(size->cx * invScale);
+ size->cy = (int)round(size->cy * invScale);
+ }
+ ::ReleaseDC(hWnd, hDC);
+}
+
/*
* Class: sun_awt_windows_ThemeReader
* Method: getPartSize
* Signature: (JII)Ljava/awt/Dimension;
*/
@@ -768,10 +783,12 @@
}
if (dimMID == NULL) {
dimMID = env->GetMethodID(dimClassID, "<init>", "(II)V");
CHECK_NULL_RETURN(dimMID, NULL);
}
+
+ rescale(&size);
jobject dimObj = env->NewObject(dimClassID, dimMID, size.cx, size.cy);
if (safe_ExceptionOccurred(env)) {
env->ExceptionDescribe();
env->ExceptionClear();
}
< prev index next >