Optimized the **** out of shipbrowser.FitItem gradient background drawing

This commit is contained in:
HomeWorld
2010-12-09 19:43:20 +02:00
parent 668e0ff0b9
commit 667433dee5

View File

@@ -21,6 +21,10 @@ Stage2Selected, EVT_SB_STAGE2_SEL = wx.lib.newevent.NewEvent()
Stage3Selected, EVT_SB_STAGE3_SEL = wx.lib.newevent.NewEvent()
SearchSelected, EVT_SB_SEARCH_SEL = wx.lib.newevent.NewEvent()
SB_ITEM_NORMAL = 0
SB_ITEM_SELECTED = 1
SB_ITEM_SELECTED_HIGHLIGHTED = 2
SB_ITEM_HIGHLIGHTED = 3
class PFWidgetsContainer(PFListPane):
def __init__(self,parent):
@@ -1197,9 +1201,8 @@ class FitItem(wx.Window):
self.dragTLFBmp = None
self.bkBitmap = None
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.renamePosX = 0
self.renamePosY = 0
@@ -1239,6 +1242,7 @@ class FitItem(wx.Window):
self.selectedDelta = 0
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
self.Bind(wx.EVT_LEFT_UP, self.checkPosition)
@@ -1504,6 +1508,62 @@ class FitItem(wx.Window):
def OnEraseBackground(self, event):
pass
def GetState(self):
activeFitID = self.mainFrame.getActiveFit()
if self.highlighted and not activeFitID == self.fitID:
state = SB_ITEM_HIGHLIGHTED
else:
if activeFitID == self.fitID:
if self.highlighted:
state = SB_ITEM_SELECTED_HIGHLIGHTED
else:
state = SB_ITEM_SELECTED
else:
state = SB_ITEM_NORMAL
return state
def RenderBackground(self):
rect = self.GetRect()
windowColor = wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)
activeFitID = self.mainFrame.getActiveFit()
state = self.GetState()
sFactor = 0.2
mFactor = None
eFactor = 0
if state == SB_ITEM_HIGHLIGHTED:
mFactor = 0.55
elif state == SB_ITEM_SELECTED_HIGHLIGHTED:
eFactor = 0.3
elif state == SB_ITEM_SELECTED:
eFactor = (0x33 - self.selectedDelta)/100
else:
sFactor = 0
if self.bkBitmap:
if self.bkBitmap.eFactor == eFactor and self.bkBitmap.sFactor == sFactor and self.bkBitmap.mFactor == mFactor \
and rect.width == self.bkBitmap.GetWidth() and rect.height == self.bkBitmap.GetHeight() :
return
else:
del self.bkBitmap
self.bkBitmap = drawUtils.RenderGradientBar(windowColor, rect.width, rect.height, sFactor, eFactor, mFactor)
self.bkBitmap.state = state
self.bkBitmap.sFactor = sFactor
self.bkBitmap.eFactor = eFactor
self.bkBitmap.mFactor = mFactor
def Refresh(self):
self.RenderBackground()
wx.Window.Refresh(self)
def OnPaint(self, event):
rect = self.GetRect()
@@ -1512,35 +1572,10 @@ class FitItem(wx.Window):
mdc = wx.BufferedPaintDC(self)
activeFitID = self.mainFrame.getActiveFit()
if self.bkBitmap is None:
self.RenderBackground()
if self.highlighted and not activeFitID == self.fitID:
sFactor = 0.2
eFactor = 0
mFactor = 0.55
else:
if activeFitID == self.fitID:
sFactor = 0.2
if self.highlighted:
factor = 0.3
else:
factor = (0x33 - self.selectedDelta)/100
eFactor = factor
mFactor = None
else:
sFactor = 0
eFactor = 0
mFactor = None
bkBitmap = drawUtils.RenderGradientBar(windowColor, rect.width, rect.height, sFactor, eFactor, mFactor)
mdc.DrawBitmap(bkBitmap, 0,0)
mdc.DrawBitmap(self.bkBitmap, 0,0)
mdc.SetTextForeground(textColor)