[Dev] Re: [commits] (alecf) [7659] more optimization in calendar
drawing:
John Anderson
john at osafoundation.org
Fri Oct 7 08:15:14 PDT 2005
Alecf:
Given the current processor designs, not to mention the overhead of
Python, I would be very surprised if you see benefit from moving a float
to an int. Did you measure any perfromance improvement from that change?
John
commits at osafoundation.org wrote:
> Revision
> 7659 <http://viewcvs.osafoundation.org/chandler?view=rev&rev=7659>
> Author
> alecf
> Date
> 2005-10-06 11:44:06 -0700 (Thu, 06 Oct 2005)
>
>
> Log Message
>
> more optimization in calendar drawing:
> - calculate the locale-specific hour strings for the legend once,
> rather than on every paint
> - use Freeze/Thaw on the header while changing the widths of all the
> columns
> - round the 255-based colors to integers early, so that folks dealing
> with rgb2color results are not bogged down with floats
>
>
> Modified Paths
>
> * trunk/chandler/parcels/osaf/framework/blocks/DrawingUtilities.py
> <#trunkchandlerparcelsosafframeworkblocksDrawingUtilitiespy>
> * trunk/chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py
> <#trunkchandlerparcelsosafframeworkblockscalendarCalendarCanvaspy>
> * trunk/chandler/parcels/osaf/framework/blocks/calendar/TimedCanvas.py
> <#trunkchandlerparcelsosafframeworkblockscalendarTimedCanvaspy>
>
>
> Diff
>
>
> Modified:
> trunk/chandler/parcels/osaf/framework/blocks/DrawingUtilities.py
> (7658 => 7659)
>
>--- trunk/chandler/parcels/osaf/framework/blocks/DrawingUtilities.py 2005-10-06 17:44:23 UTC (rev 7658)
>+++ trunk/chandler/parcels/osaf/framework/blocks/DrawingUtilities.py 2005-10-06 18:44:06 UTC (rev 7659)
>@@ -12,7 +12,7 @@
> return red/255.0, green/255.0, blue/255.0
>
> def rgb2color(r, g, b):
>- return r*255, g*255, b*255
>+ return int(r*255), int(g*255), int(b*255)
>
> def SetTextColorsAndFont(grid, attr, dc, isSelected):
> """
>
>
> Modified:
> trunk/chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py
> (7658 => 7659)
>
>--- trunk/chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py 2005-10-06 17:44:23 UTC (rev 7658)
>+++ trunk/chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py 2005-10-06 18:44:06 UTC (rev 7659)
>@@ -1,4 +1,4 @@
>-"""
>+""
> Canvas for calendaring blocks
> """
>
>@@ -603,7 +603,7 @@
>
> if item in collections:
> widget.Refresh()
>-
>+
> def onSelectWeekEvent(self, event):
> self.dayMode = not event.arguments['doSelectWeek']
> if self.dayMode:
>@@ -769,7 +769,6 @@
> else:
> date = date.astimezone(defaultTzinfo)
>
>- defaultTzinfo = ICUtzinfo.getDefault()
> if nextDate.tzinfo is None:
> nextDate = nextDate.replace(tzinfo=defaultTzinfo)
> else:
>@@ -1294,7 +1293,7 @@
>
> def onSelectedDateChangedEvent(self, event):
> super(CalendarControl, self).onSelectedDateChangedEvent(event)
>-
>+
> def onSelectWeekEvent(self, event):
> """
> I believe, as of now only calctrl sends SelectWeek events anyways.. but just in case...
>@@ -1466,8 +1465,10 @@
>
> def ResizeHeader(self):
> drawInfo = self
>+ self.weekColumnHeader.Freeze()
> for (i,width) in enumerate(drawInfo.columnWidths):
> self.weekColumnHeader.SetUIExtent(i, (0,width))
>+ self.weekColumnHeader.Thaw()
>
> def OnSize(self, event):
> self._doDrawingCalculations()
>
>
> Modified:
> trunk/chandler/parcels/osaf/framework/blocks/calendar/TimedCanvas.py
> (7658 => 7659)
>
>--- trunk/chandler/parcels/osaf/framework/blocks/calendar/TimedCanvas.py 2005-10-06 17:44:23 UTC (rev 7658)
>+++ trunk/chandler/parcels/osaf/framework/blocks/calendar/TimedCanvas.py 2005-10-06 18:44:06 UTC (rev 7659)
>@@ -61,7 +61,6 @@
> self.Refresh()
> event.Skip()
>
>-
> def OnInit(self):
> super (wxTimedEventsCanvas, self).OnInit()
>
>@@ -71,6 +70,8 @@
> self.Bind(wx.EVT_SIZE, self.OnSize)
> self.Bind(wx.EVT_KEY_DOWN, self.OnKeyPressed)
>
>+ self.localeHourStrings = list(self.GetLocaleHourStrings(range(24)))
>+
> def ScaledScroll(self, dx, dy):
> (scrollX, scrollY) = self.CalcUnscrolledPosition(0,0)
> scrollX += dx
>@@ -114,10 +115,9 @@
> timeFormatter = DateFormat.createTimeInstance()
> hourFP = FieldPosition(DateFormat.HOUR1_FIELD)
> dummyDate = date.today()
>- defaultTzinfo = TimeZoneInfo.get(view=self.blockItem.itsView).default
>-
>+
> for hour in hourrange:
>- timedate = time(hour=hour, tzinfo=defaultTzinfo)
>+ timedate = time(hour=hour)
> hourdate = datetime.combine(dummyDate, timedate)
> timeString = timeFormatter.format(hourdate, hourFP)
> (start, end) = (hourFP.getBeginIndex(),hourFP.getEndIndex())
>@@ -146,7 +146,7 @@
> halfHourHeight = self.hourHeight/2
>
> # we'll need these for hour formatting
>- for hour,hourString in self.GetLocaleHourStrings(range(24)):
>+ for hour,hourString in self.localeHourStrings:
>
> if hour > 0:
> # Draw the hour legend
>@@ -194,7 +194,7 @@
> rects = \
> TimedCanvasItem.GenerateBoundsRects(self,
> self._bgSelectionStartTime,
>- self._bgSelectionEndTime,
>+ self._bgSelectionEndTime,
> self.dayWidth)
> for rect in rects:
> dc.DrawRectangleRect(rect)
>@@ -263,7 +263,7 @@
> # sorted by startTime. If no conflicts, this is an O(n) operation
> # (note that as of Python 2.4, sorts are stable, so this remains safe)
> self.canvasItemList.sort(key=TimedCanvasItem.GetIndentLevel)
>-
>+
> def DrawCells(self, dc):
> styles = self.blockItem.calendarContainer
>
>
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Commits mailing list
>Commits at osafoundation.org
>http://lists.osafoundation.org/mailman/listinfo/commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osafoundation.org/pipermail/dev/attachments/20051007/875f55e5/attachment.htm
More information about the Dev
mailing list