My NSButton
is using custom NSButtonCell
class, which in turn is overriding drawBezel
:
override func drawBezel(withFrame frame: NSRect, in controlView: NSView) {
let path = NSBezierPath(bound: frame.insetBy(dx: CGFloat(NumKeypadConstants.buttonInset), dy: CGFloat(NumKeypadConstants.buttonInset)), withCorners: corners, withRadius: CGFloat(NumKeypadConstants.cornerRadius), flip: flipIt)
path.lineWidth = NumKeypadConstants.borderWidth
if(isEnabled)
{
if(isHighlighted)
{
let fillColor: NSColor = NumKeypadConstants.buttonHighlightColor
let strokeColor: NSColor = NumKeypadConstants.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
else
{
if(state == .on)
{
let fillColor: NSColor = NumKeypadConstants.buttonOnColor
let strokeColor: NSColor = NumKeypadConstants.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
else
{
let fillColor: NSColor = NumKeypadConstants.buttonBackgroundColor
let strokeColor: NSColor = NumKeypadConstants.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
}
}
else
{
let fillColor: NSColor = NumKeypadConstants.buttonBackgroundDisabledColor
let strokeColor: NSColor = NumKeypadConstants.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
}
Now my button supports both types 1) .momentaryChange
2) .pushOnPushOff
. I was expecting that depending on button types, the state will be altered or not. But no matter what I set using setButtonType
, the .state member of cell is always changing on button press.
Do I understand correct, that it is my responsibility to check the type of button and either regard or disregard .state
? Could it be that certain combination of bezelStyle
and button type will tell the cell to internally ignore .state
when using momentary types?
If I have to check for the button type, then how I check for the type in NSButtonCell
? The type is not passed to it. Should I create own property and pass type?