diff options
author | sapier <Sapier at GMX dot net> | 2014-11-23 13:40:43 +0100 |
---|---|---|
committer | sapier <Sapier at GMX dot net> | 2014-11-30 17:50:09 +0100 |
commit | dceb9f7d6058785cf60d9dbcc8eecdcee1053412 (patch) | |
tree | 0cbaa6969210d3e104f195ac5d3c2cabad8d6338 /src/game.cpp | |
parent | 25945dc5395a03cab069ff0e6470ba8d59b03978 (diff) | |
download | minetest-dceb9f7d6058785cf60d9dbcc8eecdcee1053412.tar.gz minetest-dceb9f7d6058785cf60d9dbcc8eecdcee1053412.tar.bz2 minetest-dceb9f7d6058785cf60d9dbcc8eecdcee1053412.zip |
Implement proper font handling
Diffstat (limited to 'src/game.cpp')
-rw-r--r-- | src/game.cpp | 66 |
1 files changed, 27 insertions, 39 deletions
diff --git a/src/game.cpp b/src/game.cpp index 4af483bd7..c2b53420e 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -70,6 +70,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/pointedthing.h" #include "drawscene.h" #include "content_cao.h" +#include "fontengine.h" #ifdef HAVE_TOUCHSCREENGUI #include "touchscreengui.h" @@ -437,9 +438,8 @@ PointedThing getPointedThing(Client *client, v3f player_position, /* Profiler display */ -void update_profiler_gui(gui::IGUIStaticText *guitext_profiler, - gui::IGUIFont *font, u32 text_height, u32 show_profiler, - u32 show_profiler_max) +void update_profiler_gui(gui::IGUIStaticText *guitext_profiler, FontEngine *fe, + u32 show_profiler, u32 show_profiler_max) { if (show_profiler == 0) { guitext_profiler->setVisible(false); @@ -451,14 +451,14 @@ void update_profiler_gui(gui::IGUIStaticText *guitext_profiler, guitext_profiler->setText(text.c_str()); guitext_profiler->setVisible(true); - s32 w = font->getDimension(text.c_str()).Width; + s32 w = fe->getTextWidth(text.c_str()); if (w < 400) w = 400; - core::rect<s32> rect(6, 4 + (text_height + 5) * 2, 12 + w, - 8 + (text_height + 5) * 2 + - font->getDimension(text.c_str()).Height); + core::rect<s32> rect(6, 4 + (fe->getTextHeight() + 5) * 2, 12 + w, + 8 + (fe->getTextHeight() + 5) * 2 + + fe->getTextHeight()); guitext_profiler->setRelativePosition(rect); guitext_profiler->setVisible(true); } @@ -1136,8 +1136,7 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec, /******************************************************************************/ static void updateChat(Client &client, f32 dtime, bool show_debug, const v2u32 &screensize, bool show_chat, u32 show_profiler, - ChatBackend &chat_backend, gui::IGUIStaticText *guitext_chat, - gui::IGUIFont *font) + ChatBackend &chat_backend, gui::IGUIStaticText *guitext_chat) { // Add chat log output for errors to be shown in chat static LogOutputBuffer chat_log_error_buf(LMT_ERROR); @@ -1160,9 +1159,7 @@ static void updateChat(Client &client, f32 dtime, bool show_debug, // Display all messages in a static text element unsigned int recent_chat_count = chat_backend.getRecentBuffer().getLineCount(); std::wstring recent_chat = chat_backend.getRecentChat(); - - // TODO replace by fontengine fcts - unsigned int line_height = font->getDimension(L"Ay").Height + font->getKerningHeight(); + unsigned int line_height = glb_fontengine->getLineHeight(); guitext_chat->setText(recent_chat.c_str()); @@ -1173,7 +1170,7 @@ static void updateChat(Client &client, f32 dtime, bool show_debug, chat_y += line_height; // first pass to calculate height of text to be set - s32 width = std::min(font->getDimension(recent_chat.c_str()).Width + 10, + s32 width = std::min(glb_fontengine->getTextWidth(recent_chat) + 10, porting::getWindowSize().X - 20); core::rect<s32> rect(10, chat_y, width, chat_y + porting::getWindowSize().Y); guitext_chat->setRelativePosition(rect); @@ -1402,7 +1399,6 @@ public: bool random_input, InputHandler *input, IrrlichtDevice *device, - gui::IGUIFont *font, const std::string &map_dir, const std::string &playername, const std::string &password, @@ -1522,8 +1518,6 @@ private: Client *client; Server *server; - gui::IGUIFont *font; - IWritableTextureSource *texture_src; IWritableShaderSource *shader_src; @@ -1558,7 +1552,6 @@ private: IrrlichtDevice *device; video::IVideoDriver *driver; scene::ISceneManager *smgr; - u32 text_height; bool *kill; std::wstring *error_message; IGameDef *gamedef; // Convenience (same as *client) @@ -1592,7 +1585,6 @@ private: Game::Game() : client(NULL), server(NULL), - font(NULL), texture_src(NULL), shader_src(NULL), itemdef_manager(NULL), @@ -1648,7 +1640,6 @@ bool Game::startup(bool *kill, bool random_input, InputHandler *input, IrrlichtDevice *device, - gui::IGUIFont *font, const std::string &map_dir, const std::string &playername, const std::string &password, @@ -1661,7 +1652,6 @@ bool Game::startup(bool *kill, { // "cache" this->device = device; - this->font = font; this->kill = kill; this->error_message = error_message; this->random_input = random_input; @@ -1671,7 +1661,6 @@ bool Game::startup(bool *kill, driver = device->getVideoDriver(); smgr = device->getSceneManager(); - text_height = font->getDimension(L"Random test string").Height; if (!init(map_dir, address, port, gamespec)) return false; @@ -1934,7 +1923,7 @@ bool Game::createClient(const std::string &playername, } // Update cached textures, meshes and materials - client->afterContentReceived(device, font); + client->afterContentReceived(device, glb_fontengine->getFont()); /* Camera */ @@ -1992,8 +1981,8 @@ bool Game::createClient(const std::string &playername, player->hurt_tilt_timer = 0; player->hurt_tilt_strength = 0; - hud = new Hud(driver, smgr, guienv, font, text_height, gamedef, - player, local_inventory); + hud = new Hud(driver, smgr, guienv, glb_fontengine->getFont(), + glb_fontengine->getTextHeight(), gamedef, player, local_inventory); if (!hud) { *error_message = L"Memory error: could not create HUD"; @@ -2022,7 +2011,7 @@ bool Game::initGui(std::wstring *error_message) // Object infos are shown in this guitext_info = guienv->addStaticText( L"", - core::rect<s32>(0, 0, 400, text_height * 5 + 5) + v2s32(100, 200), + core::rect<s32>(0, 0, 400, glb_fontengine->getTextHeight() * 5 + 5) + v2s32(100, 200), false, true, guiroot); // Status text (displays info when showing and hiding GUI stuff, etc.) @@ -2224,12 +2213,12 @@ bool Game::getServerContent(bool *aborted) if (!client->itemdefReceived()) { wchar_t *text = wgettext("Item definitions..."); progress = 0; - draw_load_screen(text, device, guienv, font, dtime, progress); + draw_load_screen(text, device, guienv, dtime, progress); delete[] text; } else if (!client->nodedefReceived()) { wchar_t *text = wgettext("Node definitions..."); progress = 25; - draw_load_screen(text, device, guienv, font, dtime, progress); + draw_load_screen(text, device, guienv, dtime, progress); delete[] text; } else { std::stringstream message; @@ -2251,7 +2240,7 @@ bool Game::getServerContent(bool *aborted) progress = 50 + client->mediaReceiveProgress() * 50 + 0.5; draw_load_screen(narrow_to_wide(message.str().c_str()), device, - guienv, font, dtime, progress); + guienv, dtime, progress); } } @@ -2353,7 +2342,7 @@ void Game::updateProfilers(const GameRunData &run_data, const RunStats &stats, g_profiler->print(infostream); } - update_profiler_gui(guitext_profiler, font, text_height, + update_profiler_gui(guitext_profiler, glb_fontengine, run_data.profiler_current_page, run_data.profiler_max_page); g_profiler->clear(); @@ -2764,8 +2753,8 @@ void Game::toggleProfiler(float *statustext_time, u32 *profiler_current_page, *profiler_current_page = (*profiler_current_page + 1) % (profiler_max_page + 1); // FIXME: This updates the profiler with incomplete values - update_profiler_gui(guitext_profiler, font, text_height, - *profiler_current_page, profiler_max_page); + update_profiler_gui(guitext_profiler, glb_fontengine, *profiler_current_page, + profiler_max_page); if (*profiler_current_page != 0) { std::wstringstream sstr; @@ -3805,7 +3794,7 @@ void Game::updateFrame(std::vector<aabb3f> &highlight_boxes, updateChat(*client, dtime, flags.show_debug, screensize, flags.show_chat, runData->profiler_current_page, - *chat_backend, guitext_chat, font); + *chat_backend, guitext_chat); /* Inventory @@ -3883,7 +3872,7 @@ void Game::updateFrame(std::vector<aabb3f> &highlight_boxes, Profiler graph */ if (flags.show_profiler_graph) - graph->draw(10, screensize.Y - 10, driver, font); + graph->draw(10, screensize.Y - 10, driver, glb_fontengine->getFont()); /* Damage flash @@ -3966,7 +3955,7 @@ void Game::updateGui(float *statustext_time, const RunStats& stats, if (guitext->isVisible()) { core::rect<s32> rect( 5, 5, - screensize.X, 5 + text_height + screensize.X, 5 + glb_fontengine->getTextHeight() ); guitext->setRelativePosition(rect); } @@ -3984,8 +3973,8 @@ void Game::updateGui(float *statustext_time, const RunStats& stats, guitext2->setVisible(true); core::rect<s32> rect( - 5, 5 + text_height, - screensize.X, 5 + text_height * 2 + 5, 5 + glb_fontengine->getTextHeight(), + screensize.X, 5 + glb_fontengine->getTextHeight() * 2 ); guitext2->setRelativePosition(rect); } else { @@ -4096,7 +4085,7 @@ void Game::showOverlayMessage(const char *msg, float dtime, int percent, bool draw_clouds) { wchar_t *text = wgettext(msg); - draw_load_screen(text, device, guienv, font, dtime, percent, draw_clouds); + draw_load_screen(text, device, guienv, dtime, percent, draw_clouds); delete[] text; } @@ -4136,7 +4125,6 @@ void the_game(bool *kill, bool random_input, InputHandler *input, IrrlichtDevice *device, - gui::IGUIFont *font, const std::string &map_dir, const std::string &playername, @@ -4159,7 +4147,7 @@ void the_game(bool *kill, try { - if (game.startup(kill, random_input, input, device, font, map_dir, + if (game.startup(kill, random_input, input, device, map_dir, playername, password, &server_address, port, &error_message, &chat_backend, gamespec, simple_singleplayer_mode)) { |