MAINT-6786 scale gets out of bonds and causes crash
parent
7a7dc795f6
commit
89844b345e
|
|
@ -251,6 +251,11 @@ BOOL gDisplayBadge = FALSE;
|
|||
static const U8 NO_FACE = 255;
|
||||
BOOL gQuietSnapshot = FALSE;
|
||||
|
||||
// Minimum value for UIScaleFactor, also defined in preferences, ui_scale_slider
|
||||
static const F32 MIN_UI_SCALE = 0.75f;
|
||||
// 2.0 in preferences, but win10 supports larger scaling and value is used more as
|
||||
// sanity check, so leaving space for larger values from DPI updates.
|
||||
static const F32 MAX_UI_SCALE = 7.0f;
|
||||
static const F32 MIN_DISPLAY_SCALE = 0.75f;
|
||||
|
||||
std::string LLViewerWindow::sSnapshotBaseName;
|
||||
|
|
@ -1595,9 +1600,16 @@ BOOL LLViewerWindow::handleDeviceChange(LLWindow *window)
|
|||
|
||||
void LLViewerWindow::handleDPIChanged(LLWindow *window, F32 ui_scale_factor, S32 window_width, S32 window_height)
|
||||
{
|
||||
gSavedSettings.setF32("UIScaleFactor", ui_scale_factor);
|
||||
LLViewerWindow::reshape(window_width, window_height);
|
||||
mResDirty = true;
|
||||
if (ui_scale_factor >= MIN_UI_SCALE && ui_scale_factor <= MAX_UI_SCALE)
|
||||
{
|
||||
gSavedSettings.setF32("UIScaleFactor", ui_scale_factor);
|
||||
LLViewerWindow::reshape(window_width, window_height);
|
||||
mResDirty = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "DPI change caused UI scale to go out of bounds: " << ui_scale_factor << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLViewerWindow::handlePingWatchdog(LLWindow *window, const char * msg)
|
||||
|
|
@ -1753,6 +1765,11 @@ LLViewerWindow::LLViewerWindow(const Params& p)
|
|||
|
||||
|
||||
F32 system_scale_factor = mWindow->getSystemUISize();
|
||||
if (system_scale_factor < MIN_UI_SCALE || system_scale_factor > MAX_UI_SCALE)
|
||||
{
|
||||
// reset to default;
|
||||
system_scale_factor = 1.f;
|
||||
}
|
||||
if (p.first_run || gSavedSettings.getF32("LastSystemUIScaleFactor") != system_scale_factor)
|
||||
{
|
||||
mSystemUIScaleFactorChanged = !p.first_run;
|
||||
|
|
@ -1763,7 +1780,7 @@ LLViewerWindow::LLViewerWindow(const Params& p)
|
|||
|
||||
// Get the real window rect the window was created with (since there are various OS-dependent reasons why
|
||||
// the size of a window or fullscreen context may have been adjusted slightly...)
|
||||
F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor");
|
||||
F32 ui_scale_factor = llclamp(gSavedSettings.getF32("UIScaleFactor"), MIN_UI_SCALE, MAX_UI_SCALE);
|
||||
|
||||
mDisplayScale.setVec(llmax(1.f / mWindow->getPixelAspectRatio(), 1.f), llmax(mWindow->getPixelAspectRatio(), 1.f));
|
||||
mDisplayScale *= ui_scale_factor;
|
||||
|
|
@ -5251,7 +5268,7 @@ F32 LLViewerWindow::getWorldViewAspectRatio() const
|
|||
|
||||
void LLViewerWindow::calcDisplayScale()
|
||||
{
|
||||
F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor");
|
||||
F32 ui_scale_factor = llclamp(gSavedSettings.getF32("UIScaleFactor"), MIN_UI_SCALE, MAX_UI_SCALE);
|
||||
LLVector2 display_scale;
|
||||
display_scale.setVec(llmax(1.f / mWindow->getPixelAspectRatio(), 1.f), llmax(mWindow->getPixelAspectRatio(), 1.f));
|
||||
display_scale *= ui_scale_factor;
|
||||
|
|
@ -5264,7 +5281,7 @@ void LLViewerWindow::calcDisplayScale()
|
|||
|
||||
if (display_scale != mDisplayScale)
|
||||
{
|
||||
LL_INFOS() << "Setting display scale to " << display_scale << LL_ENDL;
|
||||
LL_INFOS() << "Setting display scale to " << display_scale << " for ui scale: " << ui_scale_factor << LL_ENDL;
|
||||
|
||||
mDisplayScale = display_scale;
|
||||
// Init default fonts
|
||||
|
|
|
|||
Loading…
Reference in New Issue