< prev index next >

src/java.desktop/windows/native/libawt/windows/ThemeReader.cpp

Print this page

        

*** 29,38 **** --- 29,40 ---- #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,752 **** --- 745,771 ---- return dimObj; } return NULL; } + void rescale(SIZE *size) { + HWND hWnd = ::GetDesktopWindow(); + HDC hDC = ::GetDC(hWnd); + int dpiX = ::GetDeviceCaps(hDC, LOGPIXELSX); + int dpiY = ::GetDeviceCaps(hDC, LOGPIXELSY); + + if (dpiX !=0 && dpiX != 96) { + float invScaleX = 96.0f / dpiX; + size->cx = (int)round(size->cx * invScaleX); + } + if (dpiY != 0 && dpiY != 96) { + float invScaleY = 96.0f / dpiY; + size->cy = (int)round(size->cy * invScaleY); + } + ::ReleaseDC(hWnd, hDC); + } + /* * Class: sun_awt_windows_ThemeReader * Method: getPartSize * Signature: (JII)Ljava/awt/Dimension; */
*** 768,777 **** --- 787,798 ---- } 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 >