Noise: Prevent unittest crash caused by division by zero
[oweals/minetest.git] / src / guiChatConsole.cpp
index 8dd5ab032628c544956fefda705a84be4a4b53b6..0dbddf31cd530b097d4bbd85d7ebbca58ab8347b 100644 (file)
@@ -32,7 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <string>
 
 #if USE_FREETYPE
-       #include "xCGUITTFont.h"
+       #include "irrlicht_changes/CGUITTFont.h"
 #endif
 
 inline u32 clamp_u8(s32 value)
@@ -54,25 +54,8 @@ GUIChatConsole::GUIChatConsole(
        m_chat_backend(backend),
        m_client(client),
        m_menumgr(menumgr),
-       m_screensize(v2u32(0,0)),
-       m_animate_time_old(0),
-       m_open(false),
-       m_close_on_enter(false),
-       m_height(0),
-       m_desired_height(0),
-       m_desired_height_fraction(0.0),
-       m_height_speed(5.0),
-       m_open_inhibited(0),
-       m_cursor_blink(0.0),
-       m_cursor_blink_speed(0.0),
-       m_cursor_height(0.0),
-       m_background(NULL),
-       m_background_color(255, 0, 0, 0),
-       m_font(NULL),
-       m_fontsize(0, 0)
+       m_animate_time_old(porting::getTimeMs())
 {
-       m_animate_time_old = getTimeMs();
-
        // load background settings
        s32 console_alpha = g_settings->getS32("console_alpha");
        m_background_color.setAlpha(clamp_u8(console_alpha));
@@ -93,12 +76,9 @@ GUIChatConsole::GUIChatConsole(
 
        m_font = g_fontengine->getFont(FONT_SIZE_UNSPECIFIED, FM_Mono);
 
-       if (m_font == NULL)
-       {
+       if (!m_font) {
                errorstream << "GUIChatConsole: Unable to load mono font ";
-       }
-       else
-       {
+       } else {
                core::dimension2d<u32> dim = m_font->getDimension(L"M");
                m_fontsize = v2u32(dim.Width, dim.Height);
                m_font->grab();
@@ -116,13 +96,15 @@ GUIChatConsole::~GUIChatConsole()
                m_font->drop();
 }
 
-void GUIChatConsole::openConsole(f32 height)
+void GUIChatConsole::openConsole(f32 scale)
 {
+       assert(scale > 0.0f && scale <= 1.0f);
+
        m_open = true;
-       m_desired_height_fraction = height;
-       m_desired_height = height * m_screensize.Y;
+       m_desired_height_fraction = scale;
+       m_desired_height = scale * m_screensize.Y;
        reformatConsole();
-       m_animate_time_old = getTimeMs();
+       m_animate_time_old = porting::getTimeMs();
        IGUIElement::setVisible(true);
        Environment->setFocus(this);
        m_menumgr->createdMenu(this);
@@ -204,13 +186,13 @@ void GUIChatConsole::draw()
                // scale current console height to new window size
                if (m_screensize.Y != 0)
                        m_height = m_height * screensize.Y / m_screensize.Y;
-               m_desired_height = m_desired_height_fraction * m_screensize.Y;
                m_screensize = screensize;
+               m_desired_height = m_desired_height_fraction * m_screensize.Y;
                reformatConsole();
        }
 
        // Animation
-       u32 now = getTimeMs();
+       u64 now = porting::getTimeMs();
        animate(now - m_animate_time_old);
        m_animate_time_old = now;
 
@@ -231,6 +213,7 @@ void GUIChatConsole::reformatConsole()
        s32 rows = m_desired_height / m_fontsize.Y - 1; // make room for the input prompt
        if (cols <= 0 || rows <= 0)
                cols = rows = 0;
+       recalculateConsolePosition();
        m_chat_backend->reformat(cols, rows);
 }
 
@@ -368,7 +351,7 @@ void GUIChatConsole::drawText()
 
 void GUIChatConsole::drawPrompt()
 {
-       if (m_font == NULL)
+       if (!m_font)
                return;
 
        u32 row = m_chat_backend->getConsoleBuffer().getRows();
@@ -627,10 +610,8 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
                        bool backwards = event.KeyInput.Shift;
                        prompt.nickCompletion(names, backwards);
                        return true;
-               }
-               else if(event.KeyInput.Char != 0 && !event.KeyInput.Control)
-               {
-                       #if (defined(__linux__))
+               } else if (!iswcntrl(event.KeyInput.Char) && !event.KeyInput.Control) {
+                       #if defined(__linux__) && (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9)
                                wchar_t wc = L'_';
                                mbtowc( &wc, (char *) &event.KeyInput.Char, sizeof(event.KeyInput.Char) );
                                prompt.input(wc);