mirror of https://github.com/snes9xgit/snes9x.git
Only use JIS->UTF8 conversion with new overlay.
Fix pixel font display.
This commit is contained in:
parent
ff35034cf7
commit
8719a4761e
|
@ -140,6 +140,30 @@ static void ImGui_DrawTextOverlay(const char *text,
|
|||
draw_list->AddText(nullptr, 0.0f, ImVec2(x + padding, y + padding), settings.text_color, text, nullptr, wrap_at);
|
||||
}
|
||||
|
||||
static std::string sjis_to_utf8(std::string in)
|
||||
{
|
||||
std::string out;
|
||||
for (const auto &i : in)
|
||||
{
|
||||
unsigned char c = i;
|
||||
if (c > 160 && c < 192)
|
||||
{
|
||||
out += "\357\275";
|
||||
out += c;
|
||||
}
|
||||
else if (c >= 192)
|
||||
{
|
||||
out += "\357\276";
|
||||
c -= 0x40;
|
||||
out += c;
|
||||
}
|
||||
else
|
||||
out += c;
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
bool S9xImGuiDraw(int width, int height)
|
||||
{
|
||||
if (Memory.ROMFilename.empty())
|
||||
|
@ -223,13 +247,16 @@ bool S9xImGuiDraw(int width, int height)
|
|||
}
|
||||
|
||||
if (!GFX.InfoString.empty())
|
||||
ImGui_DrawTextOverlay(GFX.InfoString.c_str(),
|
||||
{
|
||||
auto utf8_message = sjis_to_utf8(GFX.InfoString);
|
||||
ImGui_DrawTextOverlay(utf8_message.c_str(),
|
||||
settings.spacing,
|
||||
height - settings.spacing,
|
||||
settings.spacing,
|
||||
ImGui::DrawTextAlignment::BEGIN,
|
||||
ImGui::DrawTextAlignment::END,
|
||||
width - settings.spacing * 4);
|
||||
}
|
||||
|
||||
ImGui::Render();
|
||||
|
||||
|
|
8
gfx.cpp
8
gfx.cpp
|
@ -1818,7 +1818,7 @@ void S9xVariableDisplayString(const char* string, int linesFromBottom, int pixel
|
|||
int min_lines = 1;
|
||||
std::string msg(string);
|
||||
for (auto& c : msg)
|
||||
if (c < 32)
|
||||
if (c == '\n')
|
||||
min_lines++;
|
||||
if (min_lines > linesFromBottom)
|
||||
linesFromBottom = min_lines;
|
||||
|
@ -1836,10 +1836,10 @@ void S9xVariableDisplayString(const char* string, int linesFromBottom, int pixel
|
|||
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
int cindex = string[i] - 32;
|
||||
int cindex = (uint8)string[i] - 32;
|
||||
int char_width = font_width - (monospace ? 1 : (var8x10font_kern[cindex][0] + var8x10font_kern[cindex][1]));
|
||||
|
||||
if (dst_x + char_width > SNES_WIDTH || (uint8)string[i] < 32)
|
||||
if (dst_x + char_width > SNES_WIDTH || string[i] == '\n')
|
||||
{
|
||||
if (!allowWrap)
|
||||
break;
|
||||
|
@ -1852,7 +1852,7 @@ void S9xVariableDisplayString(const char* string, int linesFromBottom, int pixel
|
|||
break;
|
||||
}
|
||||
|
||||
if ((uint8)string[i] < 32)
|
||||
if (string[i] == '\n')
|
||||
continue;
|
||||
|
||||
VariableDisplayChar(dst_x, dst_y, string[i], monospace, overlap);
|
||||
|
|
28
memmap.cpp
28
memmap.cpp
|
@ -3377,37 +3377,13 @@ const char * CMemory::PublishingCompany (void)
|
|||
return (nintendo_licensees[CompanyId]);
|
||||
}
|
||||
|
||||
static std::string sjis_to_utf8(std::string in)
|
||||
{
|
||||
std::string out;
|
||||
for (const auto &i : in)
|
||||
{
|
||||
unsigned char c = i;
|
||||
if (c > 160 && c < 192)
|
||||
{
|
||||
out += "\357\275";
|
||||
out += c;
|
||||
}
|
||||
else if (c >= 192)
|
||||
{
|
||||
out += "\357\276";
|
||||
c -= 0x40;
|
||||
out += c;
|
||||
}
|
||||
else if (c >= 32)
|
||||
out += c;
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
std::string CMemory::GetMultilineROMInfo()
|
||||
{
|
||||
bool8 isChecksumOK = (Memory.ROMChecksum + Memory.ROMComplementChecksum == 0xffff) &&
|
||||
(Memory.ROMChecksum == Memory.CalculatedChecksum);
|
||||
std::string utf8_romname = sjis_to_utf8(Memory.ROMName);
|
||||
std::string utf8_romname = Memory.ROMName;
|
||||
std::string tvstandard = Settings.PAL ? "PAL" : "NTSC";
|
||||
std::string romid = sjis_to_utf8(Memory.ROMId);
|
||||
std::string romid = Memory.ROMId;
|
||||
std::string checksum = isChecksumOK ? "Checksum OK"
|
||||
: Settings.IsPatched == 3 ? "UPS patched"
|
||||
: Settings.IsPatched == 2 ? "BPS patched"
|
||||
|
|
Loading…
Reference in New Issue