From 2e23d84992fa067d769a3b976a284a2175ed0fc9 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Fri, 13 May 2005 01:39:09 +0000 Subject: [PATCH] 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 --- wxPython/wx/lib/stattext.py | 62 +++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/wxPython/wx/lib/stattext.py b/wxPython/wx/lib/stattext.py index ac50f76e73..1f47005e36 100644 --- a/wxPython/wx/lib/stattext.py +++ b/wxPython/wx/lib/stattext.py @@ -19,6 +19,9 @@ 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): @@ -32,12 +35,16 @@ class GenStaticText(wx.PyControl): wx.DefaultValidator, name) wx.PyControl.SetLabel(self, label) # don't check wx.ST_NO_AUTORESIZE yet - self.defBackClr = self.GetBackgroundColour() self.InheritAttributes() 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): @@ -47,10 +54,9 @@ class GenStaticText(wx.PyControl): """ wx.PyControl.SetLabel(self, label) style = self.GetWindowStyleFlag() + self.InvalidateBestSize() if not style & wx.ST_NO_AUTORESIZE: - best = self.GetBestSize() - self.SetSize(best) - self.SetMinSize(best) + self.SetBestFittingSize(self.GetBestSize()) self.Refresh() @@ -61,28 +67,35 @@ class GenStaticText(wx.PyControl): """ wx.PyControl.SetFont(self, font) style = self.GetWindowStyleFlag() + self.InvalidateBestSize() if not style & wx.ST_NO_AUTORESIZE: - best = self.GetBestSize() - self.SetSize(best) - self.SetMinSize(best) + self.SetBestFittingSize(self.GetBestSize()) self.Refresh() def DoGetBestSize(self): """ 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() + 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 for line in label.split('\n'): if line == '': - w, h = self.GetTextExtent('W') # empty lines have height too + w, h = dc.GetTextExtent('W') # empty lines have height too else: - w, h = self.GetTextExtent(line) + w, h = dc.GetTextExtent(line) totalHeight += h maxWidth = max(maxWidth, w) - return wx.Size(maxWidth, totalHeight) + best = wx.Size(maxWidth, totalHeight) + self.CacheBestSize(best) + return best def AcceptsFocus(self): @@ -104,24 +117,27 @@ class GenStaticText(wx.PyControl): colours then we want this control to inherit them. """ return True - + def OnPaint(self, event): - dc = wx.BufferedPaintDC(self) - #dc = wx.PaintDC(self) + if BUFFERED: + dc = wx.BufferedPaintDC(self) + else: + dc = wx.PaintDC(self) width, height = self.GetClientSize() if not width or not height: return - clr = self.GetBackgroundColour() - backBrush = wx.Brush(clr, wx.SOLID) - if wx.Platform == "__WXMAC__" and clr == self.defBackClr: - # if colour is still the default then use the striped background on Mac - backBrush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive - dc.SetBackground(backBrush) + if BUFFERED: + clr = self.GetBackgroundColour() + backBrush = wx.Brush(clr, wx.SOLID) + if wx.Platform == "__WXMAC__" and clr == self.defBackClr: + # if colour is still the default then use the striped background on Mac + backBrush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive + dc.SetBackground(backBrush) + dc.Clear() dc.SetTextForeground(self.GetForegroundColour()) - dc.Clear() dc.SetFont(self.GetFont()) label = self.GetLabel() style = self.GetWindowStyleFlag() -- 2.45.2