def __paint(self, e): dc = wx.AutoBufferedPaintDC(self, style = wx.BUFFER_VIRTUAL_AREA) size = self.ClientSize viewstartx, viewstarty = self.ViewStart viewend = viewstarty + size[1] #region = self.GetUpdateRegion() #regioniter = wx.RegionIterator(region) #while regioniter: # print regioniter.Next() self.bg.Draw(dc, RectPS((viewstartx, viewstarty), size)) #wxRegionIterator upd(GetUpdateRegion()); // get the update rect list left, top, right, bottom = self.GetItemMargins() r = Rect(left, top, *size) r.SetSize((r.Width - right, 0)) visible = self.visible visappend = visible.append del visible[:] selection = self._selection measureitem, drawitem, drawbg = self.OnMeasureItem, self.OnDrawItem, self.OnDrawBackground offset = r.Offset for n in xrange(self._itemcount): itemHeight = measureitem(n) if r.Y > viewend: break if r.Y + itemHeight >= viewstarty:# and region.IntersectRect(wx.Rect(r.X, r.Y + viewstarty, r.Width, r.Height)): r.Height = itemHeight visappend((r.Y - top, r.Y + r.Height + bottom, n)) drawbg(dc, Rect(*r), n, n in selection) drawitem(dc, Rect(*r), n, n in selection) offset((0, itemHeight + top + bottom))