Better handling of the bg to allow the theme (if any) to be visible.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34040 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn 2005-05-13 01:39:09 +00:00
parent 8dc41cdb01
commit 2e23d84992

View File

@ -19,6 +19,9 @@
import wx import wx
BUFFERED = 0 # In unbuffered mode we can let the theme shine through,
# is there a way to do this when buffering?
#---------------------------------------------------------------------- #----------------------------------------------------------------------
class GenStaticText(wx.PyControl): class GenStaticText(wx.PyControl):
@ -32,12 +35,16 @@ class GenStaticText(wx.PyControl):
wx.DefaultValidator, name) wx.DefaultValidator, name)
wx.PyControl.SetLabel(self, label) # don't check wx.ST_NO_AUTORESIZE yet wx.PyControl.SetLabel(self, label) # don't check wx.ST_NO_AUTORESIZE yet
self.defBackClr = self.GetBackgroundColour()
self.InheritAttributes() self.InheritAttributes()
self.SetBestFittingSize(size) self.SetBestFittingSize(size)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Bind(wx.EVT_PAINT, self.OnPaint) if BUFFERED:
self.defBackClr = self.GetBackgroundColour()
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
else:
self.SetBackgroundStyle(wx.BG_STYLE_SYSTEM)
def SetLabel(self, label): def SetLabel(self, label):
@ -47,10 +54,9 @@ class GenStaticText(wx.PyControl):
""" """
wx.PyControl.SetLabel(self, label) wx.PyControl.SetLabel(self, label)
style = self.GetWindowStyleFlag() style = self.GetWindowStyleFlag()
self.InvalidateBestSize()
if not style & wx.ST_NO_AUTORESIZE: if not style & wx.ST_NO_AUTORESIZE:
best = self.GetBestSize() self.SetBestFittingSize(self.GetBestSize())
self.SetSize(best)
self.SetMinSize(best)
self.Refresh() self.Refresh()
@ -61,28 +67,35 @@ class GenStaticText(wx.PyControl):
""" """
wx.PyControl.SetFont(self, font) wx.PyControl.SetFont(self, font)
style = self.GetWindowStyleFlag() style = self.GetWindowStyleFlag()
self.InvalidateBestSize()
if not style & wx.ST_NO_AUTORESIZE: if not style & wx.ST_NO_AUTORESIZE:
best = self.GetBestSize() self.SetBestFittingSize(self.GetBestSize())
self.SetSize(best)
self.SetMinSize(best)
self.Refresh() self.Refresh()
def DoGetBestSize(self): def DoGetBestSize(self):
""" """
Overridden base class virtual. Determines the best size of Overridden base class virtual. Determines the best size of
the button based on the label size. the control based on the label size and the current font.
""" """
label = self.GetLabel() label = self.GetLabel()
font = self.GetFont()
if not font:
font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
dc = wx.ClientDC(self)
dc.SetFont(font)
maxWidth = totalHeight = 0 maxWidth = totalHeight = 0
for line in label.split('\n'): for line in label.split('\n'):
if line == '': if line == '':
w, h = self.GetTextExtent('W') # empty lines have height too w, h = dc.GetTextExtent('W') # empty lines have height too
else: else:
w, h = self.GetTextExtent(line) w, h = dc.GetTextExtent(line)
totalHeight += h totalHeight += h
maxWidth = max(maxWidth, w) maxWidth = max(maxWidth, w)
return wx.Size(maxWidth, totalHeight) best = wx.Size(maxWidth, totalHeight)
self.CacheBestSize(best)
return best
def AcceptsFocus(self): def AcceptsFocus(self):
@ -104,24 +117,27 @@ class GenStaticText(wx.PyControl):
colours then we want this control to inherit them. colours then we want this control to inherit them.
""" """
return True return True
def OnPaint(self, event): def OnPaint(self, event):
dc = wx.BufferedPaintDC(self) if BUFFERED:
#dc = wx.PaintDC(self) dc = wx.BufferedPaintDC(self)
else:
dc = wx.PaintDC(self)
width, height = self.GetClientSize() width, height = self.GetClientSize()
if not width or not height: if not width or not height:
return return
clr = self.GetBackgroundColour() if BUFFERED:
backBrush = wx.Brush(clr, wx.SOLID) clr = self.GetBackgroundColour()
if wx.Platform == "__WXMAC__" and clr == self.defBackClr: backBrush = wx.Brush(clr, wx.SOLID)
# if colour is still the default then use the striped background on Mac if wx.Platform == "__WXMAC__" and clr == self.defBackClr:
backBrush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive # if colour is still the default then use the striped background on Mac
dc.SetBackground(backBrush) backBrush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive
dc.SetBackground(backBrush)
dc.Clear()
dc.SetTextForeground(self.GetForegroundColour()) dc.SetTextForeground(self.GetForegroundColour())
dc.Clear()
dc.SetFont(self.GetFont()) dc.SetFont(self.GetFont())
label = self.GetLabel() label = self.GetLabel()
style = self.GetWindowStyleFlag() style = self.GetWindowStyleFlag()