Listview X8

Dimitrie O. Paun dpaun at rogers.com
Thu Oct 24 13:55:17 CDT 2002


ChangeLog
  Small iterator-over-range[s] cleanup.

--- dlls/comctl32/listview.c.X7	Thu Oct 24 11:15:52 2002
+++ dlls/comctl32/listview.c	Thu Oct 24 13:45:48 2002
@@ -1011,13 +1011,22 @@
     return TRUE;
 }
 
+/***
+ * Create an iterator over a range.
+ */
+static inline BOOL iterator_rangeitems(ITERATOR* i, RANGE range)
+{
+    iterator_empty(i);
+    i->range = range;
+    return TRUE;
+}
 
 /***
  * Create an iterator over a bunch of ranges.
  * Please note that the iterator will take ownership of the ranges,
  * and will free them upon destruction.
  */
-static inline BOOL iterator_ranges(ITERATOR* i, RANGES ranges)
+static inline BOOL iterator_rangesitems(ITERATOR* i, RANGES ranges)
 {
     iterator_empty(i);
     i->ranges = ranges;
@@ -1051,7 +1060,7 @@
 	    if (IntersectRect(&rcTemp, &rcItem, lprc))
 		i->nSpecial = infoPtr->nFocusedItem;
 	}
-	if (!(i->ranges = ranges_create(50))) return FALSE;
+	if (!(iterator_rangesitems(i, ranges_create(50)))) return FALSE;
 	/* to do better here, we need to have PosX, and PosY sorted */
 	TRACE("building icon ranges:\n");
 	for (nItem = 0; nItem < infoPtr->nItemCount; nItem++)
@@ -1067,16 +1076,15 @@
     }
     else if (uView == LVS_REPORT)
     {
-	INT lower, upper;
+	RANGE range;
 	
 	if (frame.left >= infoPtr->nItemWidth) return TRUE;
 	if (frame.top >= infoPtr->nItemHeight * infoPtr->nItemCount) return TRUE;
 	
-	lower = max(frame.top / infoPtr->nItemHeight, 0);
-	upper = min((frame.bottom - 1) / infoPtr->nItemHeight, infoPtr->nItemCount - 1);
-	if (upper < lower) return TRUE;
-	i->range.lower = lower;
-	i->range.upper = upper + 1;
+	range.lower = max(frame.top / infoPtr->nItemHeight, 0);
+	range.upper = min((frame.bottom - 1) / infoPtr->nItemHeight, infoPtr->nItemCount - 1) + 1;
+	if (range.upper <= range.lower) return TRUE;
+	if (!iterator_rangeitems(i, range)) return FALSE;
 	TRACE("    report=%s\n", debugrange(&i->range));
     }
     else
@@ -1095,7 +1103,7 @@
 	
 	if (nLastCol < nFirstCol || nLastRow < nFirstRow) return TRUE;
 
-	if (!(i->ranges = ranges_create(nLastCol - nFirstCol + 1))) return FALSE;
+	if (!(iterator_rangesitems(i, ranges_create(nLastCol - nFirstCol + 1)))) return FALSE;
 	TRACE("building list ranges:\n");
 	for (nCol = nFirstCol; nCol <= nLastCol; nCol++)
 	{
@@ -2650,7 +2658,7 @@
     
     /* need to clone the DPA because callbacks can change it */
     if (!(clone = ranges_clone(infoPtr->selectionRanges))) return FALSE;
-    iterator_ranges(&i, ranges_diff(clone, toSkip));
+    iterator_rangesitems(&i, ranges_diff(clone, toSkip));
     while(iterator_next(&i))
 	LISTVIEW_SetItemState(infoPtr, i.nItem, &lvItem);
     /* note that the iterator destructor will free the cloned range */
@@ -2868,7 +2876,7 @@
     }
 
     LISTVIEW_DeselectAllSkipItems(infoPtr, selection);
-    iterator_ranges(&i, selection);
+    iterator_rangesitems(&i, selection);
     while(iterator_next(&i))
 	LISTVIEW_SetItemState(infoPtr, i.nItem, &item);
     /* this will also destroy the selection */


-- 
Dimi.




More information about the wine-patches mailing list