Fix f6 debug/profiler display
authorCraig Robbins <kde.psych@gmail.com>
Sun, 7 Dec 2014 11:01:42 +0000 (21:01 +1000)
committerCraig Robbins <kde.psych@gmail.com>
Sun, 7 Dec 2014 14:01:22 +0000 (00:01 +1000)
After fonts were re-engineered the height of the f6 debug/profiler display would only display about 2-3 lines of text.

src/game.cpp
src/profiler.h

index a2944d309e048b69c213ccec0b33fd2b10cd5ea0..c15f9e09384c82a667013055d1405c9bd61b52c3 100644 (file)
@@ -439,7 +439,7 @@ PointedThing getPointedThing(Client *client, v3f player_position,
 /* Profiler display */
 
 void update_profiler_gui(gui::IGUIStaticText *guitext_profiler, FontEngine *fe,
-               u32 show_profiler, u32 show_profiler_max)
+               u32 show_profiler, u32 show_profiler_max, s32 screen_height)
 {
        if (show_profiler == 0) {
                guitext_profiler->setVisible(false);
@@ -456,9 +456,20 @@ void update_profiler_gui(gui::IGUIStaticText *guitext_profiler, FontEngine *fe,
                if (w < 400)
                        w = 400;
 
-               core::rect<s32> rect(6, 4 + (fe->getTextHeight() + 5) * 2, 12 + w,
-                                    8 + (fe->getTextHeight() + 5) * 2 +
-                                    fe->getTextHeight());
+               unsigned text_height = fe->getTextHeight();
+
+               core::position2di upper_left, lower_right;
+
+               upper_left.X  = 6;
+               upper_left.Y  = (text_height + 5) * 2;
+               lower_right.X = 12 + w;
+               lower_right.Y = upper_left.Y + (text_height + 1) * MAX_PROFILER_TEXT_ROWS;
+
+               if (lower_right.Y > screen_height * 2 / 3)
+                       lower_right.Y = screen_height * 2 / 3;
+
+               core::rect<s32> rect(upper_left, lower_right);
+
                guitext_profiler->setRelativePosition(rect);
                guitext_profiler->setVisible(true);
        }
@@ -2366,7 +2377,8 @@ void Game::updateProfilers(const GameRunData &run_data, const RunStats &stats,
                }
 
                update_profiler_gui(guitext_profiler, g_fontengine,
-                               run_data.profiler_current_page, run_data.profiler_max_page);
+                               run_data.profiler_current_page, run_data.profiler_max_page,
+                               driver->getScreenSize().Height);
 
                g_profiler->clear();
        }
@@ -2778,7 +2790,7 @@ void Game::toggleProfiler(float *statustext_time, u32 *profiler_current_page,
 
        // FIXME: This updates the profiler with incomplete values
        update_profiler_gui(guitext_profiler, g_fontengine, *profiler_current_page,
-                       profiler_max_page);
+                       profiler_max_page, driver->getScreenSize().Height);
 
        if (*profiler_current_page != 0) {
                std::wstringstream sstr;
index 25d89c6c8a6304fd77988ab50fc01189c0f5c5b3..5816f05ca66652960034708e4bc60c58fcdcb0ef 100644 (file)
@@ -30,6 +30,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "util/numeric.h" // paging()
 #include "debug.h" // assert()
 
+#define MAX_PROFILER_TEXT_ROWS 20
+
 /*
        Time profiler
 */