modules/graphics/src/main/native-glass/win/GlassScreen.cpp

Print this page

        

*** 46,57 **** RECT rcWork; RECT fxMonitor; RECT fxWork; jboolean primaryScreen; jint colorDepth; ! jfloat uiScale; ! jfloat renderScale; jint dpiX; jint dpiY; jint anchoredInPass; jobject gScreen; }; --- 46,57 ---- RECT rcWork; RECT fxMonitor; RECT fxWork; jboolean primaryScreen; jint colorDepth; ! jfloat uiScaleX; ! jfloat uiScaleY; jint dpiX; jint dpiY; jint anchoredInPass; jobject gScreen; };
*** 188,198 **** 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; 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 --- 188,198 ---- 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 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,236 **** #endif /* DEBUG_DPI */ if (res != S_OK) { resx = ::GetDeviceCaps(hDC, LOGPIXELSX); resy = ::GetDeviceCaps(hDC, LOGPIXELSY); } ! uires = resx; 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; } mis->dpiX = resx; mis->dpiY = resy; ! mis->uiScale = GlassApplication::GetUIScale(uires); ! mis->renderScale = GlassApplication::getRenderScale(mis->uiScale); ::DeleteDC(hDC); } jclass GetScreenCls(JNIEnv *env) --- 210,238 ---- #endif /* DEBUG_DPI */ if (res != S_OK) { resx = ::GetDeviceCaps(hDC, LOGPIXELSX); resy = ::GetDeviceCaps(hDC, LOGPIXELSY); } ! 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 */ ! uiresx = resx; ! uiresy = resy; } mis->dpiX = resx; mis->dpiY = resy; ! mis->uiScaleX = uiresx / 96.0f; ! mis->uiScaleY = uiresy / 96.0f; ::DeleteDC(hDC); } jclass GetScreenCls(JNIEnv *env)
*** 277,287 **** jobject CreateJavaMonitorFromMIS(JNIEnv *env, MonitorInfoStruct *pMIS) { jclass screenCls = GetScreenCls(env); if (javaIDs.Screen.init == NULL) { ! javaIDs.Screen.init = env->GetMethodID(screenCls, "<init>", "(JIIIIIIIIIIIFF)V"); ASSERT(javaIDs.Screen.init); if (CheckAndClearException(env)) return NULL; } jobject gScn = env->NewObject(screenCls, javaIDs.Screen.init, --- 279,289 ---- jobject CreateJavaMonitorFromMIS(JNIEnv *env, MonitorInfoStruct *pMIS) { jclass screenCls = GetScreenCls(env); if (javaIDs.Screen.init == NULL) { ! 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,310 **** pMIS->fxMonitor.left, pMIS->fxMonitor.top, pMIS->fxMonitor.right - pMIS->fxMonitor.left, pMIS->fxMonitor.bottom - pMIS->fxMonitor.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); if (CheckAndClearException(env)) return NULL; pMIS->gScreen = env->NewGlobalRef(gScn); return gScn; } --- 293,319 ---- 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->uiScaleX, ! pMIS->uiScaleY, ! pMIS->uiScaleX, ! pMIS->uiScaleY); if (CheckAndClearException(env)) return NULL; pMIS->gScreen = env->NewGlobalRef(gScn); return gScn; }
*** 388,407 **** 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); } if (xBefore) fxX -= monW; if (yBefore) fxY -= monH; pMIS->fxMonitor.left = fxX; --- 397,419 ---- 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 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,457 **** 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); 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); int x = pAnchor->fxMonitor.left + xoff; int y = before ? pAnchor->fxMonitor.top : pAnchor->fxMonitor.bottom; anchorTo(pMon, x, false, y, before, pass); } --- 449,469 ---- 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->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->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); }