NSButton is interesting in that it separates out the state (e.g. 
`isHighlighted` and `state`) from the presentation of that state. The state 
manipulation behavior is totally uniform, i.e. the `state` property always 
toggles between Off and On when any button is clicked. Most buttons aren't 
configured to draw differently when On, so you don’t notice it.

Subclassers often just ignore this and implement whatever drawing behavior they 
want, but if you want to be sensitive to the configuration, you’ll want to 
check the showsStateBy mask on the cell.

• For a Toggle button, which exchanges contents based on state, the 
NSContentsCellMask bit will be set.
• For a On/Off button, which reflects the state in the button artwork, the 
NSChangeBackgroundCellMask bit will be set.

It’s legal for a button cell to have any combination of bits configured, but 
none of the built-in NSButtonTypes set both at once.

- Jeff

> On Aug 20, 2018, at 3:04 AM, Guillaume Laurent <glaur...@telegraph-road.org> 
> wrote:
> 
> Hi all,
> 
> 
> For a custom UI I’ve had to write a custom control deriving from NSButton, 
> which highlights itself in a special way on mouse-over. In the method which 
> does the highlighting, I check if the button’s state is either .on or .off, 
> so I know which title or alternateTitle to display. But I realized that, no 
> matter the button's type, the state is always toggled on click. That is, even 
> if the button’s type is set to MomentaryPushIn, the button’s state is toggled 
> after a click. I’d have thought that this was the case only for 
> OnOff/Toggle/Switch… types.
> 
> Since there is no NSButton.type getter, is there a way to determine if the 
> button’s type is toggleable or not ? And what is the reason for switching 
> state for types like MomentaryPushIn ?
> 
> 
> Thanks,
> 
> Guillaume.
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/jnadeau%40apple.com
> 
> This email sent to jnad...@apple.com

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to