modules/graphics/src/main/native-glass/win/GlassScreen.cpp
Print this page
@@ -46,12 +46,12 @@
RECT rcWork;
RECT fxMonitor;
RECT fxWork;
jboolean primaryScreen;
jint colorDepth;
- jfloat uiScale;
- jfloat renderScale;
+ jfloat uiScaleX;
+ jfloat uiScaleY;
jint dpiX;
jint dpiY;
jint anchoredInPass;
jobject gScreen;
};
@@ -188,11 +188,11 @@
ASSERT(hDC);
mis->primaryScreen = ((mix.dwFlags & MONITORINFOF_PRIMARY) != 0) ? JNI_TRUE : JNI_FALSE;
mis->colorDepth = ::GetDeviceCaps(hDC, BITSPIXEL) * ::GetDeviceCaps(hDC, PLANES);
UINT resx, resy;
- UINT uires;
+ UINT uiresx, uiresy;
if (pGetDPIForMonitor) {
// If we can use the GetDPIForMonitor function, then its Effective
// value will tell us how much we should scale ourselves based on
// all system settings, and its Raw value will tell us exactly how
// many pixels per inch there are. The Effective value can be
@@ -210,27 +210,29 @@
#endif /* DEBUG_DPI */
if (res != S_OK) {
resx = ::GetDeviceCaps(hDC, LOGPIXELSX);
resy = ::GetDeviceCaps(hDC, LOGPIXELSY);
}
- uires = resx;
+ uiresx = resx;
+ uiresy = resy;
res = (*pGetDPIForMonitor)(hMonitor, MDT_Raw_DPI, &resx, &resy);
#ifdef DEBUG_DPI
fprintf(stderr, "raw DPI X,Y = [0x%08x] %d, %d\n", res, resx, resy);
#endif /* DEBUG_DPI */
} else {
resx = ::GetDeviceCaps(hDC, LOGPIXELSX);
resy = ::GetDeviceCaps(hDC, LOGPIXELSY);
#ifdef DEBUG_DPI
fprintf(stderr, "logpixelsX,Y = %d, %d\n", resx, resy);
#endif /* DEBUG_DPI */
- uires = resx;
+ uiresx = resx;
+ uiresy = resy;
}
mis->dpiX = resx;
mis->dpiY = resy;
- mis->uiScale = GlassApplication::GetUIScale(uires);
- mis->renderScale = GlassApplication::getRenderScale(mis->uiScale);
+ mis->uiScaleX = GlassApplication::GetUIScale(uiresx);
+ mis->uiScaleY = GlassApplication::GetUIScale(uiresy);
::DeleteDC(hDC);
}
jclass GetScreenCls(JNIEnv *env)
@@ -277,11 +279,11 @@
jobject CreateJavaMonitorFromMIS(JNIEnv *env, MonitorInfoStruct *pMIS)
{
jclass screenCls = GetScreenCls(env);
if (javaIDs.Screen.init == NULL) {
- javaIDs.Screen.init = env->GetMethodID(screenCls, "<init>", "(JIIIIIIIIIIIFF)V");
+ javaIDs.Screen.init = env->GetMethodID(screenCls, "<init>", "(JIIIIIIIIIIIIIIIFFFF)V");
ASSERT(javaIDs.Screen.init);
if (CheckAndClearException(env)) return NULL;
}
jobject gScn = env->NewObject(screenCls, javaIDs.Screen.init,
@@ -291,20 +293,27 @@
pMIS->fxMonitor.left,
pMIS->fxMonitor.top,
pMIS->fxMonitor.right - pMIS->fxMonitor.left,
pMIS->fxMonitor.bottom - pMIS->fxMonitor.top,
+ pMIS->rcMonitor.left,
+ pMIS->rcMonitor.top,
+ pMIS->rcMonitor.right - pMIS->rcMonitor.left,
+ pMIS->rcMonitor.bottom - pMIS->rcMonitor.top,
+
pMIS->fxWork.left,
pMIS->fxWork.top,
pMIS->fxWork.right - pMIS->fxWork.left,
pMIS->fxWork.bottom - pMIS->fxWork.top,
pMIS->dpiX,
pMIS->dpiY,
- pMIS->uiScale,
- pMIS->renderScale);
+ pMIS->uiScaleX,
+ pMIS->uiScaleY,
+ pMIS->uiScaleX,
+ pMIS->uiScaleY);
if (CheckAndClearException(env)) return NULL;
pMIS->gScreen = env->NewGlobalRef(gScn);
return gScn;
}
@@ -388,20 +397,23 @@
jint monH = pMIS->rcMonitor.bottom - monY;
jint wrkL = pMIS->rcWork .left - monX;
jint wrkT = pMIS->rcWork .top - monY;
jint wrkR = pMIS->rcWork .right - monX;
jint wrkB = pMIS->rcWork .bottom - monY;
- jfloat scale = pMIS->uiScale;
- if (scale > 1.0f) {
- pMIS->dpiX = (jint) floorf((pMIS->dpiX / scale) + 0.5f);
- pMIS->dpiY = (jint) floorf((pMIS->dpiY / scale) + 0.5f);
- monW = (jint) floorf((monW / scale) + 0.5f);
- monH = (jint) floorf((monH / scale) + 0.5f);
- wrkL = (jint) floorf((wrkL / scale) + 0.5f);
- wrkT = (jint) floorf((wrkT / scale) + 0.5f);
- wrkR = (jint) floorf((wrkR / scale) + 0.5f);
- wrkB = (jint) floorf((wrkB / scale) + 0.5f);
+ jfloat scalex = pMIS->uiScaleX;
+ jfloat scaley = pMIS->uiScaleY;
+ if (scalex != 1.0f) {
+ pMIS->dpiX = (jint) floorf((pMIS->dpiX / scalex) + 0.5f);
+ monW = (jint) floorf((monW / scalex) + 0.5f);
+ wrkL = (jint) floorf((wrkL / scalex) + 0.5f);
+ wrkR = (jint) floorf((wrkR / scalex) + 0.5f);
+ }
+ if (scaley != 1.0f) {
+ pMIS->dpiY = (jint) floorf((pMIS->dpiY / scaley) + 0.5f);
+ monH = (jint) floorf((monH / scaley) + 0.5f);
+ wrkT = (jint) floorf((wrkT / scaley) + 0.5f);
+ wrkB = (jint) floorf((wrkB / scaley) + 0.5f);
}
if (xBefore) fxX -= monW;
if (yBefore) fxY -= monH;
pMIS->fxMonitor.left = fxX;
@@ -437,21 +449,21 @@
jboolean before, jint pass)
{
int x = before ? pAnchor->fxMonitor.left : pAnchor->fxMonitor.right;
int yoff = originOffsetFromRanges(pAnchor->rcMonitor.top, pAnchor->rcMonitor.bottom,
pMon->rcMonitor.top, pMon->rcMonitor.bottom,
- pAnchor->uiScale, pMon->uiScale);
+ pAnchor->uiScaleY, pMon->uiScaleY);
int y = pAnchor->fxMonitor.top + yoff;
anchorTo(pMon, x, before, y, false, pass);
}
void anchorV(MonitorInfoStruct *pAnchor, MonitorInfoStruct *pMon,
jboolean before, jint pass)
{
int xoff = originOffsetFromRanges(pAnchor->rcMonitor.left, pAnchor->rcMonitor.right,
pMon->rcMonitor.left, pMon->rcMonitor.right,
- pAnchor->uiScale, pMon->uiScale);
+ pAnchor->uiScaleX, pMon->uiScaleX);
int x = pAnchor->fxMonitor.left + xoff;
int y = before ? pAnchor->fxMonitor.top : pAnchor->fxMonitor.bottom;
anchorTo(pMon, x, false, y, before, pass);
}