Skip to content
Permalink
Browse files

Fixed bug 2137 - SDL Message Boxes don't cope with fixed width fonts …

…(in windows at least)

Pegasus Epsilon

With the system dialog font set to Arial or Tahoma or another variable-width font, everything works just as expected. When using a fixed-width font, like Courier or DejaVu Sans Mono, the text gets cut off. Example screenshots attached.
  • Loading branch information
slouken committed Aug 15, 2017
1 parent fb14cb7 commit e83764a5e0a8238590590b7a6cf4e8a2ebc61daf
Showing with 12 additions and 2 deletions.
  1. +12 −2 src/video/windows/SDL_windowsmessagebox.c
@@ -411,14 +411,24 @@ WIN_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
{
/* Get the metrics to try and figure our DLU conversion. */
GetTextMetrics(FontDC, &TM);
s_BaseUnitsX = TM.tmAveCharWidth + 1;

/* Calculation from the following documentation:
* https://support.microsoft.com/en-gb/help/125681/how-to-calculate-dialog-base-units-with-non-system-based-font
* This fixes bug 2137, dialog box calculation with a fixed-width system font
*/
{
SIZE extent;
GetTextExtentPoint32A(FontDC, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 52, &extent);
s_BaseUnitsX = (extent.cx / 26 + 1) / 2;
}
/*s_BaseUnitsX = TM.tmAveCharWidth + 1;*/
s_BaseUnitsY = TM.tmHeight;
}

/* Measure the *pixel* size of the string. */
wmessage = WIN_UTF8ToString(messageboxdata->message);
SDL_zero(TextSize);
Size.cx = DrawText(FontDC, wmessage, -1, &TextSize, DT_CALCRECT);
DrawText(FontDC, wmessage, -1, &TextSize, DT_CALCRECT);

/* Add some padding for hangs, etc. */
TextSize.right += 2;

0 comments on commit e83764a

Please sign in to comment.