From e840a1eb10fcde8fa8df887cc4c94a579b67e40f Mon Sep 17 00:00:00 2001 From: Pk11 Date: Mon, 6 Sep 2021 18:51:14 -0500 Subject: [PATCH] Fix non-buffered text --- source/font.cpp | 21 ++++++++++----------- source/gui.cpp | 17 +++++++++++++---- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/source/font.cpp b/source/font.cpp index f9f45c1..1f15f82 100644 --- a/source/font.cpp +++ b/source/font.cpp @@ -30,11 +30,10 @@ #include "tonccpy.h" #ifdef UNIVCORE_TEXT_BUFFERED -u8 Font::textBuf[2][256 * 192]; + u8 Font::textBuf[2][256 * 192]; #endif Font::Font(const std::vector &paths) { - FILE *file = nullptr; for(const auto &path : paths) { file = fopen(path.c_str(), "rb"); @@ -330,11 +329,11 @@ ITCM_CODE void Font::print(std::u16string_view text, int x, int y, Alignment ali } else { width = 256; height = 192; -#ifdef UNIVCORE_TEXT_BUFFERED - dstBegin = textBuf[currentScreen]; -#else - dstBegin = (u8 *)bgGetGfxPtr(Gui::top ? 2 : 6); -#endif + #ifdef UNIVCORE_TEXT_BUFFERED + dstBegin = textBuf[currentScreen]; + #else + dstBegin = (u8 *)bgGetGfxPtr(currentScreen ? 3 : 7); + #endif } dstBegin += y * width + x + fontWidths[(index * 3)]; @@ -369,9 +368,9 @@ ITCM_CODE void Font::print(std::u16string_view text, int x, int y, Alignment ali } #ifdef UNIVCORE_TEXT_BUFFERED -void Font::clear(bool top) { dmaFillWords(0, Font::textBuf[top], 256 * 192); } + void Font::clear(bool top) { dmaFillWords(0, Font::textBuf[top], 256 * 192); } -void Font::update(bool top) { - tonccpy(bgGetGfxPtr(top ? 2 : 6), Font::textBuf[top], 256 * 192); -} + void Font::update(bool top) { + tonccpy(bgGetGfxPtr(top ? 2 : 6), Font::textBuf[top], 256 * 192); + } #endif diff --git a/source/gui.cpp b/source/gui.cpp index 3c1fa41..931cc4e 100644 --- a/source/gui.cpp +++ b/source/gui.cpp @@ -86,11 +86,15 @@ void Gui::clearScreen(bool top) { } void Gui::clearTextBufs(void) { - Font::clear(); + #ifdef UNIVCORE_TEXT_BUFFERED + Font::clear(); + #endif } void Gui::updateTextBufs(bool top) { - Font::update(top); + #ifdef UNIVCORE_TEXT_BUFFERED + Font::update(top); + #endif } void Gui::DrawSprite(Spritesheet &sheet, size_t imgindex, int x, int y, float ScaleX, float ScaleY) { @@ -121,8 +125,13 @@ void Gui::DrawStringCentered(int x, int y, u8 size, u8 color, const std::string void Gui::DrawString(int x, int y, u8 size, u8 color, const std::string &Text, float maxWidth, float maxHeight, Font *fnt, int flags) { if (!fnt && size >= DefaultFonts.size()) return; - float heightScale = maxHeight == 0 ? 1.0f : std::min(1.0f, maxHeight / Gui::GetStringHeight(size, Text, fnt)); - float widthScale = maxWidth == 0 ? 1.0f : std::min(1.0f, maxWidth / Gui::GetStringWidth(size, Text, fnt)); + #ifdef UNIVCORE_3DS_SIZE + float heightScale = maxHeight == 0 ? 1.0f : std::min(1.0f, (maxWidth * 4 / 5) / Gui::GetStringHeight(size, Text, fnt)); + float widthScale = maxWidth == 0 ? 1.0f : std::min(1.0f, (maxWidth * 4 / 5) / Gui::GetStringWidth(size, Text, fnt)); + #else + float heightScale = maxHeight == 0 ? 1.0f : std::min(1.0f, maxHeight / Gui::GetStringHeight(size, Text, fnt)); + float widthScale = maxWidth == 0 ? 1.0f : std::min(1.0f, maxWidth / Gui::GetStringWidth(size, Text, fnt)); + #endif // TODO: Wrapping and such (fnt ? *fnt : *DefaultFonts[size]).print(x, y, Text, flags & C2D_AlignCenter ? Alignment::center : (flags & C2D_AlignRight ? Alignment::right : Alignment::left), color, maxWidth, widthScale, heightScale);