aboutsummaryrefslogtreecommitdiff
path: root/src/gui/guiChatConsole.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/guiChatConsole.cpp')
-rw-r--r--src/gui/guiChatConsole.cpp52
1 files changed, 28 insertions, 24 deletions
diff --git a/src/gui/guiChatConsole.cpp b/src/gui/guiChatConsole.cpp
index 280f7e45b..2cd2508d3 100644
--- a/src/gui/guiChatConsole.cpp
+++ b/src/gui/guiChatConsole.cpp
@@ -353,44 +353,48 @@ void GUIChatConsole::drawPrompt()
if (!m_font)
return;
- u32 row = m_chat_backend->getConsoleBuffer().getRows();
- s32 line_height = m_fontsize.Y;
- s32 y = row * line_height + m_height - m_desired_height;
-
ChatPrompt& prompt = m_chat_backend->getPrompt();
std::wstring prompt_text = prompt.getVisiblePortion();
- // FIXME Draw string at once, not character by character
- // That will only work with the cursor once we have a monospace font
- for (u32 i = 0; i < prompt_text.size(); ++i)
- {
- wchar_t ws[2] = {prompt_text[i], 0};
- s32 x = (1 + i) * m_fontsize.X;
- core::rect<s32> destrect(
- x, y, x + m_fontsize.X, y + m_fontsize.Y);
- m_font->draw(
- ws,
- destrect,
- video::SColor(255, 255, 255, 255),
- false,
- false,
- &AbsoluteClippingRect);
- }
+ u32 font_width = m_fontsize.X;
+ u32 font_height = m_fontsize.Y;
+
+ core::dimension2d<u32> size = m_font->getDimension(prompt_text.c_str());
+ u32 text_width = size.Width;
+ if (size.Height > font_height)
+ font_height = size.Height;
+
+ u32 row = m_chat_backend->getConsoleBuffer().getRows();
+ s32 y = row * font_height + m_height - m_desired_height;
+
+ core::rect<s32> destrect(
+ font_width, y, font_width + text_width, y + font_height);
+ m_font->draw(
+ prompt_text.c_str(),
+ destrect,
+ video::SColor(255, 255, 255, 255),
+ false,
+ false,
+ &AbsoluteClippingRect);
// Draw the cursor during on periods
if ((m_cursor_blink & 0x8000) != 0)
{
s32 cursor_pos = prompt.getVisibleCursorPosition();
+
if (cursor_pos >= 0)
{
+
+ u32 text_to_cursor_pos_width = m_font->getDimension(prompt_text.substr(0, cursor_pos).c_str()).Width;
+
s32 cursor_len = prompt.getCursorLength();
video::IVideoDriver* driver = Environment->getVideoDriver();
- s32 x = (1 + cursor_pos) * m_fontsize.X;
+ s32 x = font_width + text_to_cursor_pos_width;
core::rect<s32> destrect(
x,
- y + m_fontsize.Y * (1.0 - m_cursor_height),
- x + m_fontsize.X * MYMAX(cursor_len, 1),
- y + m_fontsize.Y * (cursor_len ? m_cursor_height+1 : 1)
+ y + font_height * (1.0 - m_cursor_height),
+ x + font_width * MYMAX(cursor_len, 1),
+ y + font_height * (cursor_len ? m_cursor_height+1 : 1)
);
video::SColor cursor_color(255,255,255,255);
driver->draw2DRectangle(