diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 4f7a5c769..982fe55ef 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -634,6 +634,9 @@ crosshair_color (Crosshair color) string (255,255,255) # Crosshair alpha (opaqueness, between 0 and 255). crosshair_alpha (Crosshair alpha) int 255 0 255 +# Maximum number of recent chat items to show +recent_chat_size (Recent Chat Messages) int 6 3 99 + # Whether node texture animations should be desynchronized per mapblock. desynchronize_mapblock_texture_animation (Desynchronize block animation) bool true diff --git a/src/chat.cpp b/src/chat.cpp index fd0718707..967e159f8 100644 --- a/src/chat.cpp +++ b/src/chat.cpp @@ -369,6 +369,13 @@ s32 ChatBuffer::getBottomScrollPos() const return formatted_count - rows; } +void ChatBuffer::resize(u32 scrollback) { + m_scrollback = scrollback; + if (m_unformatted.size() > m_scrollback) + { + deleteOldest(m_unformatted.size() - m_scrollback); + } +} ChatPrompt::ChatPrompt(const std::wstring &prompt, u32 history_limit): @@ -731,6 +738,11 @@ void ChatBackend::clearRecentChat() m_recent_buffer.clear(); } + +void ChatBackend::applySettings(Settings* settings) { + m_recent_buffer.resize(settings->getU32("recent_chat_size")); +} + void ChatBackend::step(float dtime) { m_recent_buffer.step(dtime); diff --git a/src/chat.h b/src/chat.h index 38727c668..b1b3edcb0 100644 --- a/src/chat.h +++ b/src/chat.h @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes.h" #include "util/enriched_string.h" +#include "settings.h" // Chat console related classes @@ -118,6 +119,7 @@ public: u32 formatChatLine(const ChatLine& line, u32 cols, std::vector& destination) const; + void resize(u32 scrollback); protected: s32 getTopScrollPos() const; s32 getBottomScrollPos() const; @@ -281,6 +283,9 @@ public: void scrollPageDown(); void scrollPageUp(); + // Resize recent buffer based on settings + void applySettings(Settings* settings); + private: ChatBuffer m_console_buffer; ChatBuffer m_recent_buffer; diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 7612ceb44..e2a7ea562 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -190,6 +190,7 @@ void set_default_settings(Settings *settings) settings->setDefault("node_highlighting", "box"); settings->setDefault("crosshair_color", "(255,255,255)"); settings->setDefault("crosshair_alpha", "255"); + settings->setDefault("recent_chat_size", "6"); settings->setDefault("hud_scaling", "1.0"); settings->setDefault("gui_scaling", "1.0"); settings->setDefault("gui_scaling_filter", "false"); diff --git a/src/game.cpp b/src/game.cpp index 8da789a9e..7f717cb5f 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2051,6 +2051,9 @@ bool Game::initGui() // Remove stale "recent" chat messages from previous connections chat_backend->clearRecentChat(); + // Make sure the size of the recent messages buffer is right + chat_backend->applySettings(g_settings); + // Chat backend and console gui_chat_console = new GUIChatConsole(guienv, guienv->getRootGUIElement(), -1, chat_backend, client, &g_menumgr);