TreeView - minor bugfix and optimization:

- GetDC call moved down to avoid possible resource leak.
   - Invariant code is moved out of loop.
This commit is contained in:
Serge Ivanov 2000-04-11 19:37:01 +00:00 committed by Alexandre Julliard
parent 40cd846356
commit 39ec6e48f9
1 changed files with 21 additions and 21 deletions

View File

@ -1055,7 +1055,7 @@ TREEVIEW_Refresh (HWND hwnd, HDC hdc)
TEXTMETRICA tm;
HBRUSH hbrBk;
RECT rect;
INT iItem, indent, x, y, cx, height, itemHeight;
INT iItem, indent, x, y, height, itemHeight;
INT viewtop,viewbottom,viewleft,viewright;
TREEVIEW_ITEM *wineItem, *prevItem;
@ -1070,48 +1070,49 @@ TREEVIEW_Refresh (HWND hwnd, HDC hdc)
GetClientRect (hwnd, &rect);
if ((rect.left-rect.right ==0) || (rect.top-rect.bottom==0)) return;
hdc=GetDC (hwnd);
infoPtr->cdmode=TREEVIEW_SendCustomDrawNotify
(hwnd, CDDS_PREPAINT, hdc, rect);
infoPtr->cdmode=TREEVIEW_SendCustomDrawNotify(hwnd,CDDS_PREPAINT,hdc,rect);
if (infoPtr->cdmode==CDRF_SKIPDEFAULT) return;
if (infoPtr->cdmode==CDRF_SKIPDEFAULT) return;
infoPtr->uVisibleHeight= rect.bottom-rect.top;
infoPtr->uVisibleWidth= rect.right-rect.left;
infoPtr->uVisibleHeight= rect.bottom-rect.top;
infoPtr->uVisibleWidth= rect.right-rect.left;
viewtop=infoPtr->cy;
viewbottom=infoPtr->cy + rect.bottom-rect.top;
viewleft=infoPtr->cx;
viewright=infoPtr->cx + rect.right-rect.left;
TRACE("[%d %d %d %d]\n",viewtop,viewbottom,viewleft,viewright);
/* draw background */
hbrBk = CreateSolidBrush (infoPtr->clrBk);
FillRect(hdc, &rect, hbrBk);
DeleteObject(hbrBk);
ImageList_GetIconSize (infoPtr->himlNormal, &x, &itemHeight);
if (infoPtr->uItemHeight>itemHeight)
itemHeight=infoPtr->uItemHeight;
GetTextMetricsA (hdc, &tm);
if ((tm.tmHeight + tm.tmExternalLeading) > itemHeight)
itemHeight=tm.tmHeight + tm.tmExternalLeading;
infoPtr->uRealItemHeight=itemHeight;
iItem=(INT)infoPtr->TopRootItem;
infoPtr->firstVisible=0;
wineItem=NULL;
indent=0;
x=y=0;
TRACE("[%d %d %d %d]\n",viewtop,viewbottom,viewleft,viewright);
while (iItem) {
prevItem=wineItem;
prevItem=wineItem;
wineItem= & infoPtr->items[iItem];
wineItem->iLevel=indent;
ImageList_GetIconSize (infoPtr->himlNormal, &cx, &itemHeight);
if (infoPtr->uItemHeight>itemHeight)
itemHeight=infoPtr->uItemHeight;
GetTextMetricsA (hdc, &tm);
if ((tm.tmHeight + tm.tmExternalLeading) > itemHeight)
itemHeight=tm.tmHeight + tm.tmExternalLeading;
infoPtr->uRealItemHeight=itemHeight;
wineItem->iLevel=indent;
/* FIXME: remove this in later stage */
/*
@ -1161,7 +1162,6 @@ TREEVIEW_Refresh (HWND hwnd, HDC hdc)
while ((!iItem) && (indent>0)) {
indent--;
x-=infoPtr->uIndent;
prevItem=wineItem;
wineItem=&infoPtr->items[(INT)wineItem->parent];
iItem=(INT)wineItem->sibling;
}