Themed backgrounds for flat generic buttons

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34088 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn 2005-05-17 00:41:02 +00:00
parent c08df24903
commit d167fc518a
3 changed files with 46 additions and 10 deletions

View File

@ -114,6 +114,22 @@ class TestPanel(wx.Panel):
b.SetBestSize()
sizer.Add(b)
# a flat text button
b = buttons.GenButton(self, -1, 'Flat buttons too!', style=wx.BORDER_NONE)
self.Bind(wx.EVT_BUTTON, self.OnButton, b)
sizer.Add(b, flag=wx.ALIGN_CENTER_VERTICAL)
# A flat image button
bmp = images.getTest2Bitmap()
bmp.SetMaskColour("blue")
b = buttons.GenBitmapButton(self, -1, bmp, style=wx.BORDER_NONE)
self.Bind(wx.EVT_BUTTON, self.OnButton, b)
sizer.Add(b)
##b.SetBackgroundColour("sky blue")
##b.SetBackgroundColour("pink")
border = wx.BoxSizer(wx.VERTICAL)
border.Add(sizer, 0, wx.ALL, 25)
self.SetSizer(border)

View File

@ -69,6 +69,9 @@ parameter, like this::
wxversion.select("2.6-unicode", True)
import wx
Tweaked wx.lib.buttons such that flat buttons (e.g. have no bevel and
a wx.BORDER_NONE style flag) paint themed backgrounds if there are
transparent areas and the parent is displaying a theme.

View File

@ -62,12 +62,13 @@ class GenButton(wx.PyControl):
name = "genbutton"):
cstyle = style
if cstyle == 0:
cstyle = wx.NO_BORDER
cstyle = wx.BORDER_NONE
wx.PyControl.__init__(self, parent, ID, pos, size, cstyle, validator, name)
self.up = True
self.hasFocus = False
if style & wx.NO_BORDER:
self.style = style
if style & wx.BORDER_NONE:
self.bezelWidth = 0
self.useFocusInd = False
else:
@ -88,7 +89,6 @@ class GenButton(wx.PyControl):
self.Bind(wx.EVT_KILL_FOCUS, self.OnLoseFocus)
self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self.Bind(wx.EVT_KEY_UP, self.OnKeyUp)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
self.Bind(wx.EVT_PAINT, self.OnPaint)
@ -261,22 +261,39 @@ class GenButton(wx.PyControl):
x1 = y1 = 0
x2 = width-1
y2 = height-1
dc = wx.BufferedPaintDC(self)
brush = None
if self.up:
dc.SetBackground(wx.Brush(self.GetBackgroundColour(), wx.SOLID))
colBg = self.GetBackgroundColour()
brush = wx.Brush(colBg, wx.SOLID)
if self.style & wx.BORDER_NONE:
myAttr = self.GetDefaultAttributes()
parAttr = self.GetParent().GetDefaultAttributes()
myDef = colBg == myAttr.colBg
parDef = self.GetParent().GetBackgroundColour() == parAttr.colBg
if myDef and parDef:
if wx.Platform == "__WXMAC__":
brush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive
elif wx.Platform == "__WXMSW__":
if self.DoEraseBackground(dc):
brush = None
elif myDef and not parDef:
colBg = self.GetParent().GetBackgroundColour()
brush = wx.Brush(colBg, wx.SOLID)
else:
dc.SetBackground(wx.Brush(self.faceDnClr, wx.SOLID))
dc.Clear()
brush = wx.Brush(self.faceDnClr, wx.SOLID)
if brush is not None:
dc.SetBackground(brush)
dc.Clear()
self.DrawBezel(dc, x1, y1, x2, y2)
self.DrawLabel(dc, width, height)
if self.hasFocus and self.useFocusInd:
self.DrawFocusIndicator(dc, width, height)
def OnEraseBackground(self, event):
pass
def OnLeftDown(self, event):
if not self.IsEnabled():
return