X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d7403ad2d154a8e2974fdc5fc215258f3a75cdde..d1dc2b32e00303839aec0077aefcbc60bd712f00:/wxPython/wx/lib/buttons.py diff --git a/wxPython/wx/lib/buttons.py b/wxPython/wx/lib/buttons.py index 7078664585..acc7ee46a4 100644 --- a/wxPython/wx/lib/buttons.py +++ b/wxPython/wx/lib/buttons.py @@ -66,22 +66,23 @@ class GenButton(wx.PyControl): pos = wx.DefaultPosition, size = wx.DefaultSize, style = 0, validator = wx.DefaultValidator, name = "genbutton"): - if style == 0: - style = wx.NO_BORDER - wx.PyControl.__init__(self, parent, ID, pos, size, style, validator, name) + cstyle = style + if cstyle == 0: + cstyle = wx.NO_BORDER + wx.PyControl.__init__(self, parent, ID, pos, size, cstyle, validator, name) self.up = True - self.bezelWidth = 2 self.hasFocus = False - self.useFocusInd = True + if style & wx.NO_BORDER: + self.bezelWidth = 0 + self.useFocusInd = False + else: + self.bezelWidth = 2 + self.useFocusInd = True self.SetLabel(label) - self.SetPosition(pos) - font = parent.GetFont() - if not font.Ok(): - font = wx.SystemSettings.GetSystemFont(wx.SYS_DEFAULT_GUI_FONT) - self.SetFont(font) - self.SetBestSize(size) + self.InheritAttributes() + self.SetBestFittingSize(size) self.InitColours() self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) @@ -103,23 +104,15 @@ class GenButton(wx.PyControl): and set a good size. """ if size is None: - size = wx.Size(-1,-1) - if type(size) == type(()): - size = wx.Size(size[0], size[1]) - size = wx.Size(size.width, size.height) # make a copy - - best = self.GetBestSize() - if size.width == -1: - size.width = best.width - if size.height == -1: - size.height = best.height - - self.SetSize(size) + size = wx.DefaultSize + wx.PyControl.SetBestFittingSize(self, size) def DoGetBestSize(self): - """Overridden base class virtual. Determines the best size of the - button based on the label and bezel size.""" + """ + Overridden base class virtual. Determines the best size of the + button based on the label and bezel size. + """ w, h, useMin = self._GetLabelSize() defSize = wx.Button.GetDefaultSize() width = 12 + w @@ -138,6 +131,22 @@ class GenButton(wx.PyControl): return self.IsShown() and self.IsEnabled() + def GetDefaultAttributes(self): + """ + Overridden base class virtual. By default we should use + the same font/colour attributes as the native Button. + """ + return wx.Button.GetClassDefaultAttributes() + + + def ShouldInheritColours(self): + """ + Overridden base class virtual. Buttons usually don't inherit + the parent's colours. + """ + return False + + def Enable(self, enable=True): wx.PyControl.Enable(self, enable) self.Refresh() @@ -161,39 +170,37 @@ class GenButton(wx.PyControl): def InitColours(self): - faceClr = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE) - textClr = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNTEXT) - self.faceDnClr = faceClr - self.SetBackgroundColour(faceClr) - self.SetForegroundColour(textClr) - - shadowClr = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNSHADOW) - highlightClr = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNHIGHLIGHT) - self.shadowPen = wx.Pen(shadowClr, 1, wx.SOLID) - self.highlightPen = wx.Pen(highlightClr, 1, wx.SOLID) + """ + Calculate a new set of highlight and shadow colours based on + the background colour. Works okay if the colour is dark... + """ + faceClr = self.GetBackgroundColour() + r, g, b = faceClr.Get() + fr, fg, fb = min(255,r+32), min(255,g+32), min(255,b+32) + self.faceDnClr = wx.Colour(fr, fg, fb) + sr, sg, sb = max(0,r-32), max(0,g-32), max(0,b-32) + self.shadowPen = wx.Pen(wx.Colour(sr,sg,sb), 1, wx.SOLID) + hr, hg, hb = min(255,r+64), min(255,g+64), min(255,b+64) + self.highlightPen = wx.Pen(wx.Colour(hr,hg,hb), 1, wx.SOLID) + self.focusClr = wx.Colour(hr, hg, hb) + + textClr = self.GetForegroundColour() if wx.Platform == "__WXMAC__": self.focusIndPen = wx.Pen(textClr, 1, wx.SOLID) else: self.focusIndPen = wx.Pen(textClr, 1, wx.USER_DASH) self.focusIndPen.SetDashes([1,1]) self.focusIndPen.SetCap(wx.CAP_BUTT) - self.focusClr = highlightClr - - + + def SetBackgroundColour(self, colour): wx.PyControl.SetBackgroundColour(self, colour) - colour = self.GetBackgroundColour() + self.InitColours() - # Calculate a new set of highlight and shadow colours based on - # the new background colour. Works okay if the colour is dark... - r, g, b = colour.Get() - fr, fg, fb = min(255,r+32), min(255,g+32), min(255,b+32) - self.faceDnClr = wx.Colour(fr, fg, fb) - sr, sg, sb = max(0,r-32), max(0,g-32), max(0,b-32) - self.shadowPen = wx.Pen(wx.Colour(sr,sg,sb), 1, wx.SOLID) - hr, hg, hb = min(255,r+64), min(255,g+64), min(255,b+64) - self.highlightPen = wx.Pen(wx.Colour(hr,hg,hb), 1, wx.SOLID) - self.focusClr = wx.Colour(hr, hg, hb) + + def SetForegroundColour(self, colour): + wx.PyControl.SetForegroundColour(self, colour) + self.InitColours() def _GetLabelSize(self): @@ -245,11 +252,6 @@ class GenButton(wx.PyControl): def DrawFocusIndicator(self, dc, w, h): bw = self.bezelWidth -## if self.hasFocus: -## self.focusIndPen.SetColour(self.GetForegroundColour()) -## else: -## #self.focusIndPen.SetColour(self.GetBackgroundColour()) -## self.focusIndPen.SetColour(self.GetForegroundColour()) self.focusIndPen.SetColour(self.focusClr) dc.SetLogicalFunction(wx.INVERT) dc.SetPen(self.focusIndPen)