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:
parent
8dc41cdb01
commit
2e23d84992
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user