Exemple #1
0
    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))