Optimized the **** out of shipbrowser.(Category,Ship)Item gradient background drawing

This commit is contained in:
HomeWorld
2010-12-09 21:49:56 +02:00
parent ff130f910c
commit f623b72b94

View File

@@ -23,8 +23,7 @@ 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
SB_ITEM_HIGHLIGHTED = 2
class PFWidgetsContainer(PFListPane):
def __init__(self,parent):
@@ -716,6 +715,8 @@ class CategoryItem(wx.Window):
self.width,self.height = size
self.highlighted = 0
self.selected = False
self.bkBitmap = None
self.editWasShown = 0
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
@@ -754,6 +755,61 @@ class CategoryItem(wx.Window):
def OnEraseBackground(self, event):
pass
def GetState(self):
activeFitID = self.mainFrame.getActiveFit()
if self.highlighted and not self.selected:
state = SB_ITEM_HIGHLIGHTED
elif self.selected:
if self.highlighted:
state = SB_ITEM_SELECTED | SB_ITEM_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)
state = self.GetState()
sFactor = 0.2
mFactor = None
eFactor = 0
if state == SB_ITEM_HIGHLIGHTED:
mFactor = 0.55
elif state == SB_ITEM_SELECTED | SB_ITEM_HIGHLIGHTED:
eFactor = 0.3
elif state == SB_ITEM_SELECTED:
eFactor = 0.15
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()
@@ -763,20 +819,10 @@ class CategoryItem(wx.Window):
mdc = wx.BufferedPaintDC(self)
if self.highlighted:
if self.bkBitmap is None:
self.RenderBackground()
sFactor = 0.2
eFactor = 0
mFactor = 0.55
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)
@@ -868,17 +914,19 @@ class ShipItem(wx.Window):
self.shipBrowser = self.Parent.Parent
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.editPosX = 0
self.editPosY = 0
self.highlighted = 0
self.selected = False
self.editWasShown = 0
self.btnsStatus = ""
self.Refresh()
self.bkBitmap = None
self.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s fit" % self.shipName, wx.DefaultPosition, (120,-1), wx.TE_PROCESS_ENTER)
self.tcFitName.Show(False)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Bind(wx.EVT_LEFT_UP, self.checkPosition)
self.Bind(wx.EVT_MOTION, self.cursorCheck)
@@ -998,6 +1046,60 @@ class ShipItem(wx.Window):
def OnEraseBackground(self, event):
pass
def GetState(self):
activeFitID = self.mainFrame.getActiveFit()
if self.highlighted and not self.selected:
state = SB_ITEM_HIGHLIGHTED
elif self.selected:
if self.highlighted:
state = SB_ITEM_SELECTED | SB_ITEM_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)
state = self.GetState()
sFactor = 0.2
mFactor = None
eFactor = 0
if state == SB_ITEM_HIGHLIGHTED:
mFactor = 0.55
elif state == SB_ITEM_SELECTED | SB_ITEM_HIGHLIGHTED:
eFactor = 0.3
elif state == SB_ITEM_SELECTED:
eFactor = 0.15
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()
@@ -1006,19 +1108,10 @@ class ShipItem(wx.Window):
mdc = wx.BufferedPaintDC(self)
if self.highlighted:
if self.bkBitmap is None:
self.RenderBackground()
sFactor = 0.2
eFactor = 0
mFactor = 0.55
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)
@@ -1517,7 +1610,7 @@ class FitItem(wx.Window):
else:
if activeFitID == self.fitID:
if self.highlighted:
state = SB_ITEM_SELECTED_HIGHLIGHTED
state = SB_ITEM_SELECTED | SB_ITEM_HIGHLIGHTED
else:
state = SB_ITEM_SELECTED
else:
@@ -1540,7 +1633,7 @@ class FitItem(wx.Window):
if state == SB_ITEM_HIGHLIGHTED:
mFactor = 0.55
elif state == SB_ITEM_SELECTED_HIGHLIGHTED:
elif state == SB_ITEM_SELECTED | SB_ITEM_HIGHLIGHTED:
eFactor = 0.3
elif state == SB_ITEM_SELECTED:
eFactor = (0x33 - self.selectedDelta)/100