0ad/source/graphics/FontMetrics.cpp
trompetin17 b71cd96d12
Fix exceeding input boundaries in console
After 734386ce9f the new font system calculate height and cap height,
previously was having some magic number. Now we are using cap height
divide 2 to give a more nice space.

Remove an extra pixel in the buffer and improves background color for
better reading and eye care.

This also support the change console font option added in d549cbeeaa

Fixes: #8351
(cherry picked from commit 8e820a988e)
Signed-off-by: phosit <phosit@autistici.org>
2026-01-01 16:08:45 +01:00

64 lines
1.6 KiB
C++

/* Copyright (C) 2025 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* 0 A.D. is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
*/
#include "precompiled.h"
#include "FontMetrics.h"
#include "graphics/Font.h"
#include "graphics/FontManager.h"
#include "ps/CStrIntern.h"
#include "renderer/Renderer.h"
CFontMetrics::CFontMetrics(CStrIntern font)
: CFontMetrics(font, CStrIntern())
{
}
CFontMetrics::CFontMetrics(CStrIntern font, CStrIntern locale)
{
m_Font = g_Renderer.GetFontManager().LoadFont(font, locale);
}
float CFontMetrics::GetHeight() const
{
if (!m_Font)
return 6;
return m_Font->GetHeight();
}
float CFontMetrics::GetCharacterWidth(wchar_t c) const
{
if (!m_Font)
return 6;
return m_Font->GetCharacterWidth(c);
}
void CFontMetrics::CalculateStringSize(const wchar_t* string, float& w, float& h) const
{
if (!m_Font)
w = h = 0;
else
m_Font->CalculateStringSize(string, w, h);
}
float CFontMetrics::GetCapHeight() const
{
if (!m_Font)
return 0.0f;
return m_Font->GetCapHeight();
}