From b7e4e6fb0bbfdd91f969be5011c0b76ef0ab2e2d Mon Sep 17 00:00:00 2001 From: Jonas Kümmerlin Date: Thu, 11 Jun 2020 14:38:31 +0200 Subject: double buffering implementation for pre-Vista systems label is now drawn double-buffered to reduce flicker --- alf/alflabel.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'alf/alflabel.cpp') diff --git a/alf/alflabel.cpp b/alf/alflabel.cpp index b3a87c4..0a47d58 100644 --- a/alf/alflabel.cpp +++ b/alf/alflabel.cpp @@ -222,16 +222,28 @@ ALF_Label_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); - ALF_Label_Paint(hwnd, priv, hdc, &ps.rcPaint); + RECT rcClient; + GetClientRect(hwnd, &rcClient); + RECT rcPaint = { 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top }; + + HDC hdcBuffer = NULL; + ALF_Compat_HPAINTBUFFER hpb = ALF_Compat_BeginBufferedPaint(hdc, &rcPaint, 0, NULL, &hdcBuffer); + if (hpb) { + ALF_Label_Paint(hwnd, priv, hdcBuffer, &ps.rcPaint); + ALF_Compat_EndBufferedPaint(hpb, TRUE); + } else { + ALF_Label_Paint(hwnd, priv, hdc, &ps.rcPaint); + } EndPaint(hwnd, &ps); return TRUE; } else if (uMsg == WM_PRINTCLIENT) { - RECT rc; - GetClientRect(hwnd, &rc); + RECT rcClient; + GetClientRect(hwnd, &rcClient); + RECT rcPaint = { 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top }; - ALF_Label_Paint(hwnd, priv, (HDC)wParam, &rc); + ALF_Label_Paint(hwnd, priv, (HDC)wParam, &rcPaint); } else if (uMsg == WM_NCHITTEST) { return HTTRANSPARENT; } else if (uMsg == ALF_WM_QUERYSIZE) { -- cgit v1.2.3