Make non-formspec modal menus respect gui scale (#7850)
authorstujones11 <stujones111@gmail.com>
Mon, 26 Nov 2018 21:55:24 +0000 (21:55 +0000)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Mon, 26 Nov 2018 21:55:24 +0000 (22:55 +0100)
src/gui/guiConfirmRegistration.cpp
src/gui/guiKeyChangeMenu.cpp
src/gui/guiPasswordChange.cpp
src/gui/guiPathSelectMenu.cpp
src/gui/guiVolumeChange.cpp
src/gui/modalMenu.cpp
src/gui/modalMenu.h
util/travis/clang-format-whitelist.txt

index 9ffd9563ec0c76b5972278414944598721d38f3d..a13929a4890bcdbd3d300573f6ccf19d58683eec 100644 (file)
@@ -70,13 +70,16 @@ void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
        /*
                Calculate new sizes and positions
        */
-       core::rect<s32> rect(screensize.X / 2 - 600 / 2, screensize.Y / 2 - 360 / 2,
-                       screensize.X / 2 + 600 / 2, screensize.Y / 2 + 360 / 2);
-
-       DesiredRect = rect;
+       const float s = m_gui_scale;
+       DesiredRect = core::rect<s32>(
+               screensize.X / 2 - 600 * s / 2,
+               screensize.Y / 2 - 360 * s / 2,
+               screensize.X / 2 + 600 * s / 2,
+               screensize.Y / 2 + 360 * s / 2
+       );
        recalculateAbsolutePosition(false);
 
-       v2s32 size = rect.getSize();
+       v2s32 size = DesiredRect.getSize();
        v2s32 topleft_client(0, 0);
 
        const wchar_t *text;
@@ -84,13 +87,13 @@ void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
        /*
                Add stuff
        */
-       s32 ypos = 30;
+       s32 ypos = 30 * s;
        {
                std::string address = m_address;
                if (address.empty())
                        address = "localhost";
-               core::rect<s32> rect2(0, 0, 540, 180);
-               rect2 += topleft_client + v2s32(30, ypos);
+               core::rect<s32> rect2(0, 0, 540 * s, 180 * s);
+               rect2 += topleft_client + v2s32(30 * s, ypos);
                static const std::string info_text_template = strgettext(
                                "You are about to join the server at %1$s with the "
                                "name \"%2$s\" for the first time. If you proceed, a "
@@ -114,33 +117,33 @@ void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
                e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER);
        }
 
-       ypos += 210;
+       ypos += 210 * s;
        {
-               core::rect<s32> rect2(0, 0, 540, 30);
-               rect2 += topleft_client + v2s32(30, ypos);
+               core::rect<s32> rect2(0, 0, 540 * s, 30 * s);
+               rect2 += topleft_client + v2s32(30 * s, ypos);
                gui::IGUIEditBox *e = Environment->addEditBox(m_pass_confirm.c_str(),
                                rect2, true, this, ID_confirmPassword);
                e->setPasswordBox(true);
        }
 
-       ypos += 60;
+       ypos += 60 * s;
        {
-               core::rect<s32> rect2(0, 0, 230, 35);
-               rect2 = rect2 + v2s32(size.X / 2 - 220, ypos);
+               core::rect<s32> rect2(0, 0, 230 * s, 35 * s);
+               rect2 = rect2 + v2s32(size.X / 2 - 220 * s, ypos);
                text = wgettext("Register and Join");
                Environment->addButton(rect2, this, ID_confirm, text);
                delete[] text;
        }
        {
-               core::rect<s32> rect2(0, 0, 120, 35);
-               rect2 = rect2 + v2s32(size.X / 2 + 70, ypos);
+               core::rect<s32> rect2(0, 0, 120 * s, 35 * s);
+               rect2 = rect2 + v2s32(size.X / 2 + 70 * s, ypos);
                text = wgettext("Cancel");
                Environment->addButton(rect2, this, ID_cancel, text);
                delete[] text;
        }
        {
-               core::rect<s32> rect2(0, 0, 200, 20);
-               rect2 += topleft_client + v2s32(30, ypos - 40);
+               core::rect<s32> rect2(0, 0, 200 * s, 20 * s);
+               rect2 += topleft_client + v2s32(30 * s, ypos - 40 * s);
                text = wgettext("Passwords do not match!");
                IGUIElement *e = Environment->addStaticText(
                                text, rect2, false, true, this, ID_message);
index f3d8e8eef4ac1847511e3df0b1af96f57cc86987..1a41e58284c5ad79fcd2673806e6f3dd04e1a6f9 100644 (file)
@@ -116,20 +116,22 @@ void GUIKeyChangeMenu::removeChildren()
 void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
 {
        removeChildren();
-       v2s32 size(745, 430);
 
-       core::rect < s32 > rect(screensize.X / 2 - size.X / 2,
-                                                       screensize.Y / 2 - size.Y / 2, screensize.X / 2 + size.X / 2,
-                                                       screensize.Y / 2 + size.Y / 2);
-
-       DesiredRect = rect;
+       const float s = m_gui_scale;
+       DesiredRect = core::rect<s32>(
+               screensize.X / 2 - 745 * s / 2,
+               screensize.Y / 2 - 430 * s / 2,
+               screensize.X / 2 + 745 * s / 2,
+               screensize.Y / 2 + 430 * s / 2
+       );
        recalculateAbsolutePosition(false);
 
+       v2s32 size = DesiredRect.getSize();
        v2s32 topleft(0, 0);
 
        {
-               core::rect < s32 > rect(0, 0, 600, 40);
-               rect += topleft + v2s32(25, 3);
+               core::rect<s32> rect(0, 0, 600 * s, 40 * s);
+               rect += topleft + v2s32(25 * s, 3 * s);
                //gui::IGUIStaticText *t =
                const wchar_t *text = wgettext("Keybindings. (If this menu screws up, remove stuff from minetest.conf)");
                Environment->addStaticText(text,
@@ -140,68 +142,68 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
 
        // Build buttons
 
-       v2s32 offset(25, 60);
+       v2s32 offset(25 * s, 60 * s);
 
        for(size_t i = 0; i < key_settings.size(); i++)
        {
                key_setting *k = key_settings.at(i);
                {
-                       core::rect < s32 > rect(0, 0, 150, 20);
+                       core::rect<s32> rect(0, 0, 150 * s, 20 * s);
                        rect += topleft + v2s32(offset.X, offset.Y);
                        Environment->addStaticText(k->button_name, rect, false, true, this, -1);
                }
 
                {
-                       core::rect < s32 > rect(0, 0, 100, 30);
-                       rect += topleft + v2s32(offset.X + 120, offset.Y - 5);
+                       core::rect<s32> rect(0, 0, 100 * s, 30 * s);
+                       rect += topleft + v2s32(offset.X + 120 * s, offset.Y - 5 * s);
                        const wchar_t *text = wgettext(k->key.name());
                        k->button = Environment->addButton(rect, this, k->id, text);
                        delete[] text;
                }
                if ((i + 1) % KMaxButtonPerColumns == 0) {
-                       offset.X += 230;
-                       offset.Y = 60;
+                       offset.X += 230 * s;
+                       offset.Y = 60 * s;
                } else {
-                       offset += v2s32(0, 25);
+                       offset += v2s32(0, 25 * s);
                }
        }
 
        {
                s32 option_x = offset.X;
-               s32 option_y = offset.Y + 5;
-               u32 option_w = 180;
+               s32 option_y = offset.Y + 5 * s;
+               u32 option_w = 180 * s;
                {
-                       core::rect<s32> rect(0, 0, option_w, 30);
+                       core::rect<s32> rect(0, 0, option_w, 30 * s);
                        rect += topleft + v2s32(option_x, option_y);
                        const wchar_t *text = wgettext("\"Special\" = climb down");
                        Environment->addCheckBox(g_settings->getBool("aux1_descends"), rect, this,
                                        GUI_ID_CB_AUX1_DESCENDS, text);
                        delete[] text;
                }
-               offset += v2s32(0, 25);
+               offset += v2s32(0, 25 * s);
        }
 
        {
                s32 option_x = offset.X;
-               s32 option_y = offset.Y + 5;
-               u32 option_w = 280;
+               s32 option_y = offset.Y + 5 * s;
+               u32 option_w = 280 * s;
                {
-                       core::rect<s32> rect(0, 0, option_w, 30);
+                       core::rect<s32> rect(0, 0, option_w, 30 * s);
                        rect += topleft + v2s32(option_x, option_y);
                        const wchar_t *text = wgettext("Double tap \"jump\" to toggle fly");
                        Environment->addCheckBox(g_settings->getBool("doubletap_jump"), rect, this,
                                        GUI_ID_CB_DOUBLETAP_JUMP, text);
                        delete[] text;
                }
-               offset += v2s32(0, 25);
+               offset += v2s32(0, 25 * s);
        }
 
        {
                s32 option_x = offset.X;
-               s32 option_y = offset.Y + 5;
+               s32 option_y = offset.Y + 5 * s;
                u32 option_w = 280;
                {
-                       core::rect<s32> rect(0, 0, option_w, 30);
+                       core::rect<s32> rect(0, 0, option_w, 30 * s);
                        rect += topleft + v2s32(option_x, option_y);
                        const wchar_t *text = wgettext("Automatic jumping");
                        Environment->addCheckBox(g_settings->getBool("autojump"), rect, this,
@@ -212,16 +214,16 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
        }
 
        {
-               core::rect < s32 > rect(0, 0, 100, 30);
-               rect += topleft + v2s32(size.X / 2 - 105, size.Y - 40);
+               core::rect<s32> rect(0, 0, 100 * s, 30 * s);
+               rect += topleft + v2s32(size.X / 2 - 105 * s, size.Y - 40 * s);
                const wchar_t *text =  wgettext("Save");
                Environment->addButton(rect, this, GUI_ID_BACK_BUTTON,
                                 text);
                delete[] text;
        }
        {
-               core::rect < s32 > rect(0, 0, 100, 30);
-               rect += topleft + v2s32(size.X / 2 + 5, size.Y - 40);
+               core::rect<s32> rect(0, 0, 100 * s, 30 * s);
+               rect += topleft + v2s32(size.X / 2 + 5 * s, size.Y - 40 * s);
                const wchar_t *text = wgettext("Cancel");
                Environment->addButton(rect, this, GUI_ID_ABORT_BUTTON,
                                text);
@@ -237,12 +239,7 @@ void GUIKeyChangeMenu::drawMenu()
        video::IVideoDriver* driver = Environment->getVideoDriver();
 
        video::SColor bgcolor(140, 0, 0, 0);
-
-       {
-               core::rect < s32 > rect(0, 0, 745, 620);
-               rect += AbsoluteRect.UpperLeftCorner;
-               driver->draw2DRectangle(bgcolor, rect, &AbsoluteClippingRect);
-       }
+       driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
 
        gui::IGUIElement::draw();
 }
index 9ca0ba6891e2f533d501f9f4ba9b9e41eca4c00f..e29ef27e603aa39b66d6c2b6e8e4ca5f2af17e14 100644 (file)
@@ -76,91 +76,90 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize)
        /*
                Calculate new sizes and positions
        */
-       core::rect<s32> rect(
-                       screensize.X/2 - 580/2,
-                       screensize.Y/2 - 300/2,
-                       screensize.X/2 + 580/2,
-                       screensize.Y/2 + 300/2
+       const float s = m_gui_scale;
+       DesiredRect = core::rect<s32>(
+               screensize.X / 2 - 580 * s / 2,
+               screensize.Y / 2 - 300 * s / 2,
+               screensize.X / 2 + 580 * s / 2,
+               screensize.Y / 2 + 300 * s / 2
        );
-
-       DesiredRect = rect;
        recalculateAbsolutePosition(false);
 
-       v2s32 size = rect.getSize();
-       v2s32 topleft_client(40, 0);
+       v2s32 size = DesiredRect.getSize();
+       v2s32 topleft_client(40 * s, 0);
 
        const wchar_t *text;
 
        /*
                Add stuff
        */
-       s32 ypos = 50;
+       s32 ypos = 50 * s;
        {
-               core::rect<s32> rect(0, 0, 150, 20);
-               rect += topleft_client + v2s32(25, ypos + 6);
+               core::rect<s32> rect(0, 0, 150 * s, 20 * s);
+               rect += topleft_client + v2s32(25 * s, ypos + 6 * s);
                text = wgettext("Old Password");
                Environment->addStaticText(text, rect, false, true, this, -1);
                delete[] text;
        }
        {
-               core::rect<s32> rect(0, 0, 230, 30);
-               rect += topleft_client + v2s32(160, ypos);
+               core::rect<s32> rect(0, 0, 230 * s, 30 * s);
+               rect += topleft_client + v2s32(160 * s, ypos);
                gui::IGUIEditBox *e = Environment->addEditBox(
                                m_oldpass.c_str(), rect, true, this, ID_oldPassword);
                Environment->setFocus(e);
                e->setPasswordBox(true);
        }
-       ypos += 50;
+       ypos += 50 * s;
        {
-               core::rect<s32> rect(0, 0, 150, 20);
-               rect += topleft_client + v2s32(25, ypos + 6);
+               core::rect<s32> rect(0, 0, 150 * s, 20 * s);
+               rect += topleft_client + v2s32(25 * s, ypos + 6 * s);
                text = wgettext("New Password");
                Environment->addStaticText(text, rect, false, true, this, -1);
                delete[] text;
        }
        {
-               core::rect<s32> rect(0, 0, 230, 30);
-               rect += topleft_client + v2s32(160, ypos);
+               core::rect<s32> rect(0, 0, 230 * s, 30 * s);
+               rect += topleft_client + v2s32(160 * s, ypos);
                gui::IGUIEditBox *e = Environment->addEditBox(
                                m_newpass.c_str(), rect, true, this, ID_newPassword1);
                e->setPasswordBox(true);
        }
-       ypos += 50;
+       ypos += 50 * s;
        {
-               core::rect<s32> rect(0, 0, 150, 20);
-               rect += topleft_client + v2s32(25, ypos + 6);
+               core::rect<s32> rect(0, 0, 150 * s, 20 * s);
+               rect += topleft_client + v2s32(25 * s, ypos + 6 * s);
                text = wgettext("Confirm Password");
                Environment->addStaticText(text, rect, false, true, this, -1);
                delete[] text;
        }
        {
-               core::rect<s32> rect(0, 0, 230, 30);
-               rect += topleft_client + v2s32(160, ypos);
+               core::rect<s32> rect(0, 0, 230 * s, 30 * s);
+               rect += topleft_client + v2s32(160 * s, ypos);
                gui::IGUIEditBox *e = Environment->addEditBox(
                                m_newpass_confirm.c_str(), rect, true, this, ID_newPassword2);
                e->setPasswordBox(true);
        }
 
-       ypos += 50;
+       ypos += 50 * s;
        {
-               core::rect<s32> rect(0, 0, 100, 30);
-               rect = rect + v2s32(size.X / 4 + 56, ypos);
+               core::rect<s32> rect(0, 0, 100 * s, 30 * s);
+               rect = rect + v2s32(size.X / 4 + 56 * s, ypos);
                text = wgettext("Change");
                Environment->addButton(rect, this, ID_change, text);
                delete[] text;
        }
        {
-               core::rect<s32> rect(0, 0, 100, 30);
-               rect = rect + v2s32(size.X / 4 + 185, ypos);
+               core::rect<s32> rect(0, 0, 100 * s, 30 * s);
+               rect = rect + v2s32(size.X / 4 + 185 * s, ypos);
                text = wgettext("Cancel");
                Environment->addButton(rect, this, ID_cancel, text);
                delete[] text;
        }
 
-       ypos += 50;
+       ypos += 50 * s;
        {
-               core::rect<s32> rect(0, 0, 300, 20);
-               rect += topleft_client + v2s32(35, ypos);
+               core::rect<s32> rect(0, 0, 300 * s, 20 * s);
+               rect += topleft_client + v2s32(35 * s, ypos);
                text = wgettext("Passwords do not match!");
                IGUIElement *e =
                        Environment->addStaticText(
index b999f0a683fd754aee24ee4b295b4c789aae54dd..489927a11d822989a6332caba3225169d82f1463 100644 (file)
@@ -41,7 +41,7 @@ void GUIFileSelectMenu::regenerateGui(v2u32 screensize)
        removeChildren();
        m_fileOpenDialog = 0;
 
-       core::dimension2du size(600, 400);
+       core::dimension2du size(600 * m_gui_scale, 400 * m_gui_scale);
        core::rect<s32> rect(0, 0, screensize.X, screensize.Y);
 
        DesiredRect = rect;
index 8c462312bcc4c85bcaea1e99f9b3c84fadae6673..e0cb6fa729b7ec846ad04df98a1edd3a5eb58c71 100644 (file)
@@ -66,15 +66,15 @@ void GUIVolumeChange::regenerateGui(v2u32 screensize)
                Remove stuff
        */
        removeChildren();
-
        /*
                Calculate new sizes and positions
        */
+       const float s = m_gui_scale;
        DesiredRect = core::rect<s32>(
-               screensize.X/2 - 380/2,
-               screensize.Y/2 - 200/2,
-               screensize.X/2 + 380/2,
-               screensize.Y/2 + 200/2
+               screensize.X / 2 - 380 * s / 2,
+               screensize.Y / 2 - 200 * s / 2,
+               screensize.X / 2 + 380 * s / 2,
+               screensize.Y / 2 + 200 * s / 2
        );
        recalculateAbsolutePosition(false);
 
@@ -85,8 +85,8 @@ void GUIVolumeChange::regenerateGui(v2u32 screensize)
                Add stuff
        */
        {
-               core::rect<s32> rect(0, 0, 160, 20);
-               rect = rect + v2s32(size.X / 2 - 80, size.Y / 2 - 70);
+               core::rect<s32> rect(0, 0, 160 * s, 20 * s);
+               rect = rect + v2s32(size.X / 2 - 80 * s, size.Y / 2 - 70 * s);
 
                const wchar_t *text = wgettext("Sound Volume: ");
                core::stringw volume_text = text;
@@ -97,24 +97,24 @@ void GUIVolumeChange::regenerateGui(v2u32 screensize)
                                true, this, ID_soundText);
        }
        {
-               core::rect<s32> rect(0, 0, 80, 30);
-               rect = rect + v2s32(size.X/2-80/2, size.Y/2+55);
+               core::rect<s32> rect(0, 0, 80 * s, 30 * s);
+               rect = rect + v2s32(size.X / 2 - 80 * s / 2, size.Y / 2 + 55 * s);
                const wchar_t *text = wgettext("Exit");
                Environment->addButton(rect, this, ID_soundExitButton,
                        text);
                delete[] text;
        }
        {
-               core::rect<s32> rect(0, 0, 300, 20);
-               rect = rect + v2s32(size.X / 2 - 150, size.Y / 2);
+               core::rect<s32> rect(0, 0, 300 * s, 20 * s);
+               rect = rect + v2s32(size.X / 2 - 150 * s, size.Y / 2);
                gui::IGUIScrollBar *e = Environment->addScrollBar(true,
                        rect, this, ID_soundSlider);
                e->setMax(100);
                e->setPos(volume);
        }
        {
-               core::rect<s32> rect(0, 0, 160, 20);
-               rect = rect + v2s32(size.X / 2 - 80, size.Y / 2 - 35);
+               core::rect<s32> rect(0, 0, 160 * s, 20 * s);
+               rect = rect + v2s32(size.X / 2 - 80 * s, size.Y / 2 - 35 * s);
                const wchar_t *text = wgettext("Muted");
                Environment->addCheckBox(g_settings->getBool("mute_sound"), rect, this,
                                ID_soundMuteButton, text);
index d8df2540c1ba3ef5ff2164d8d31511852d8d71c2..4ffe88800fa2527dcee1f6baa31bb4e9f32b1e03 100644 (file)
@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "modalMenu.h"
 #include "gettext.h"
 #include "porting.h"
+#include "settings.h"
 
 #ifdef HAVE_TOUCHSCREENGUI
 #include "touchscreengui.h"
@@ -37,6 +38,11 @@ GUIModalMenu::GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent,
 #endif
                m_menumgr(menumgr)
 {
+       m_gui_scale = g_settings->getFloat("gui_scaling");
+#ifdef __ANDROID__
+       float d = porting::getDisplayDensity();
+       m_gui_scale *= 1.1 - 0.3 * d + 0.2 * d * d;
+#endif
        setVisible(true);
        Environment->setFocus(this);
        m_menumgr->createdMenu(this);
index 8d32ad1590228bd148c090af12ca8c652c5c1488..5bd70bb84749175f8306febfb1569a5605231262 100644 (file)
@@ -65,6 +65,7 @@ protected:
        v2s32 m_pointer;
        v2s32 m_old_pointer;  // Mouse position after previous mouse event
        v2u32 m_screensize_old;
+       float m_gui_scale;
 #ifdef __ANDROID__
        v2s32 m_down_pos;
        std::string m_jni_field_name;
index 8f3b0ee6cf19931233cc2e9caa7eefebae009386..22e688a1fb67d15df0b7e7b824ac76d35cd206fd 100644 (file)
@@ -86,6 +86,7 @@ src/gettext.cpp
 src/gettext.h
 src/gui/guiChatConsole.cpp
 src/gui/guiChatConsole.h
+src/gui/guiConfirmRegistration.cpp
 src/gui/guiEditBoxWithScrollbar.cpp
 src/gui/guiEditBoxWithScrollbar.h
 src/gui/guiEngine.cpp