From 010057d9e1d9dd1f63733bc2c5024146e4e43374 Mon Sep 17 00:00:00 2001 From: Didier Korthoudt Date: Fri, 2 Oct 2020 13:05:59 +0200 Subject: [PATCH] New: CPCheckBox Aristo3 ready and compatible with new button state management (#2921) --- AppKit/CPCheckBox.j | 47 +++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/AppKit/CPCheckBox.j b/AppKit/CPCheckBox.j index e6c29b459..ecc99bb06 100644 --- a/AppKit/CPCheckBox.j +++ b/AppKit/CPCheckBox.j @@ -94,23 +94,6 @@ CPCheckBoxImageOffset = 4.0; [self takeStateFromKeyPath:aKeyPath ofObjects:objects]; } -- (CPImage)image -{ - return [self currentValueForThemeAttribute:@"image"]; -} - -- (CPImage)alternateImage -{ - return [self currentValueForThemeAttribute:@"image"]; -} - -- (BOOL)startTrackingAt:(CGPoint)aPoint -{ - var startedTracking = [super startTrackingAt:aPoint]; - [self highlight:YES]; - return startedTracking; -} - #pragma mark - #pragma mark Override methods from CPButton @@ -135,6 +118,36 @@ CPCheckBoxImageOffset = 4.0; return size; } +- (CPThemeState)_contentVisualState +{ + // Note : Behavior differs from CPButton as title doesn't follow the highlightsBy content flag + + var visualState = [self themeState] || CPThemeStateNormal, // Needed during theme compilation + currentState = [self state]; + + if ((currentState !== CPOffState) && (_showsStateBy & CPContentsCellMask)) + visualState = visualState.and((currentState === CPOnState) ? CPThemeStateSelected : CPButtonStateMixed); + + return visualState; +} + +- (CPThemeState)_imageVisualState +{ + // Note : Behavior differs from CPButton as we don't force "not selected" theme state + // when button is highglighted and selected + + var visualState = [self themeState] || CPThemeStateNormal, // Needed during theme compilation + currentState = [self state]; + + if (_isHighlighted && (_highlightsBy & CPContentsCellMask)) + visualState = visualState.and(CPThemeStateHighlighted); + + if ((currentState !== CPOffState) && (_showsStateBy & CPContentsCellMask)) + visualState = visualState.and((currentState === CPOnState) ? CPThemeStateSelected : CPButtonStateMixed); + + return visualState; +} + @end @implementation _CPCheckBoxValueBinder : CPBinder