From fb61856b4534f0b23c5e4d7a498527206cb8634f Mon Sep 17 00:00:00 2001 From: Igor Tarasov Date: Wed, 14 May 2008 05:50:20 +0500 Subject: [PATCH] comctl32: Fix statusbar text alignment bug. --- dlls/comctl32/commctrl.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/dlls/comctl32/commctrl.c b/dlls/comctl32/commctrl.c index 554eb4dde9f..4ff20753020 100644 --- a/dlls/comctl32/commctrl.c +++ b/dlls/comctl32/commctrl.c @@ -535,18 +535,27 @@ void WINAPI DrawStatusTextW (HDC hdc, LPCRECT lprc, LPCWSTR text, UINT style) if (text) { int oldbkmode = SetBkMode (hdc, TRANSPARENT); UINT align = DT_LEFT; - if (*text == '\t') { - text++; - align = DT_CENTER; - if (*text == '\t') { - text++; - align = DT_RIGHT; - } - } - r.left += 3; + int strCnt = 0; + if (style & SBT_RTLREADING) - FIXME("Unsupported RTL style!\n"); - DrawTextW (hdc, text, -1, &r, align|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX); + FIXME("Unsupported RTL style!\n"); + r.left += 3; + do { + if (*text == '\t') { + if (strCnt) { + DrawTextW (hdc, text - strCnt, strCnt, &r, align|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX); + strCnt = 0; + } + if (align==DT_RIGHT) { + break; + } + align = (align==DT_LEFT ? DT_CENTER : DT_RIGHT); + } else { + strCnt++; + } + } while(*text++); + + if (strCnt) DrawTextW (hdc, text - strCnt, -1, &r, align|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX); SetBkMode(hdc, oldbkmode); } }