diff --git a/JubeatMenu/Display.cpp b/JubeatMenu/Display.cpp index bbb937d..0bfe160 100644 --- a/JubeatMenu/Display.cpp +++ b/JubeatMenu/Display.cpp @@ -35,6 +35,30 @@ void MessageHandler() } } +void DrawCenteredText(HDC hdc, RECT rect, wchar_t *text) +{ + /* Save original specs */ + int top = rect.top; + int bottom = rect.bottom; + int left = rect.left; + int right = rect.right; + + /* Draw text, get the height, clip it, and then later draw a rectangle over it to erase. */ + int buttonHeight = bottom - top + 1; + int textHeight = DrawText(hdc, text, -1, &rect, DT_HIDEPREFIX | DT_WORDBREAK | DT_CALCRECT); + if (textHeight > buttonHeight) + { + textHeight = buttonHeight; + } + + /* Now, draw text vertically centered in rectangle */ + rect.top = top + (buttonHeight - textHeight) / 2; + rect.bottom = bottom; + rect.left = left; + rect.right = right; + DrawText(hdc, text, -1, &rect, DT_HIDEPREFIX | DT_CENTER | DT_TOP | DT_WORDBREAK); +} + LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) @@ -173,7 +197,7 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) wchar_t* wString = new wchar_t[4096]; MultiByteToWideChar(CP_ACP, 0, start_text, -1, wString, 4096); SelectObject(hdc, hItemFont); - DrawText(hdc, wString, -1, &rect, DT_HIDEPREFIX | DT_CENTER | DT_TOP); + DrawCenteredText(hdc, rect, wString); delete wString; } @@ -305,11 +329,11 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) SelectObject(hdc, whitePen); } - // Draw bounding rectangle + /* Draw bounding rectangle */ Rectangle(hdc, left, top, right, bottom); if (item >= maxEntries) { continue; } - // Draw text + /* Draw text */ RECT rect; rect.top = top + TEXT_PADDING; rect.bottom = bottom - TEXT_PADDING; @@ -319,7 +343,7 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) wchar_t* wString = new wchar_t[4096]; MultiByteToWideChar(CP_ACP, 0, globalMenu->GetEntryName(item), -1, wString, 4096); SelectObject(hdc, hItemFont); - DrawText(hdc, wString, -1, &rect, DT_HIDEPREFIX | DT_CENTER | DT_TOP | DT_WORDBREAK); + DrawCenteredText(hdc, rect, wString); delete wString; } diff --git a/JubeatMenu/Display.h b/JubeatMenu/Display.h index bc15a4c..7c41358 100644 --- a/JubeatMenu/Display.h +++ b/JubeatMenu/Display.h @@ -18,12 +18,12 @@ #define VIEWPORT_BOTTOM 463 #define BUTTON_LEFT 8 -#define BUTTON_TOP 602 +#define BUTTON_TOP 600 #define BUTTON_WIDTH 159 #define BUTTON_HEIGHT 159 #define BUTTON_HORIZONTAL_STRIDE 197 -#define BUTTON_VERTICAL_STRIDE 197 +#define BUTTON_VERTICAL_STRIDE 195 #define TEXT_PADDING 10