mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-23 02:10:48 +00:00
* Headers/Additions/GNUstepGUI/GSTheme.h: Add three new theme
control state: GSThemeFirstResponderState, GSThemeHighlightedFirstResponderState, and GSThemeSelectedFirstResponderState. This lets themes draw custom first responder tiles, if the desired effect can't be accomplished by drawing on top of an existing button. * Source/GSThemeDrawing.m (-drawFocusFrame:inRect:): Use tiles named "NSFocusRing" if available, else draw dotted rect. * Source/GSTheme.m: * Source/NSButtonCell.m: Use new GSTheme*FirstResponderState states git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@37227 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
856b71dd2f
commit
6f4a16835b
5 changed files with 58 additions and 4 deletions
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
|||
2013-10-14 Eric Wasylishen <ewasylishen@gmail.com>
|
||||
|
||||
* Headers/Additions/GNUstepGUI/GSTheme.h: Add three new theme
|
||||
control state: GSThemeFirstResponderState,
|
||||
GSThemeHighlightedFirstResponderState,
|
||||
and GSThemeSelectedFirstResponderState. This lets themes draw
|
||||
custom first responder tiles, if the desired effect can't be
|
||||
accomplished by drawing on top of an existing button.
|
||||
* Source/GSThemeDrawing.m (-drawFocusFrame:inRect:):
|
||||
Use tiles named "NSFocusRing" if available, else draw dotted
|
||||
rect.
|
||||
* Source/GSTheme.m:
|
||||
* Source/NSButtonCell.m: Use new GSTheme*FirstResponderState
|
||||
states
|
||||
|
||||
2013-10-14 Eric Wasylishen <ewasylishen@gmail.com>
|
||||
|
||||
* Source/GSThemeDrawing.m (-drawTableViewBackgroundInClipRect:...):
|
||||
|
|
|
@ -377,8 +377,11 @@ GSThemeFillStyleFromString(NSString *s);
|
|||
*/
|
||||
typedef enum {
|
||||
GSThemeNormalState = 0, /** A control in its normal state */
|
||||
GSThemeFirstResponderState,
|
||||
GSThemeDisabledState, /** A control which is disabled */
|
||||
GSThemeHighlightedFirstResponderState,
|
||||
GSThemeHighlightedState, /** A control which is highlighted */
|
||||
GSThemeSelectedFirstResponderState,
|
||||
GSThemeSelectedState /** A control which is selected */
|
||||
} GSThemeControlState;
|
||||
|
||||
|
|
|
@ -1131,12 +1131,21 @@ typedef struct {
|
|||
case GSThemeNormalState:
|
||||
fullName = aName;
|
||||
break;
|
||||
case GSThemeFirstResponderState:
|
||||
fullName = [aName stringByAppendingString: @"FirstResponder"];
|
||||
break;
|
||||
case GSThemeDisabledState:
|
||||
fullName = [aName stringByAppendingString: @"Disabled"];
|
||||
break;
|
||||
case GSThemeHighlightedFirstResponderState:
|
||||
fullName = [aName stringByAppendingString: @"HighlightedFirstResponder"];
|
||||
break;
|
||||
case GSThemeHighlightedState:
|
||||
fullName = [aName stringByAppendingString: @"Highlighted"];
|
||||
break;
|
||||
case GSThemeSelectedFirstResponderState:
|
||||
fullName = [aName stringByAppendingString: @"SelectedFirstResponder"];
|
||||
break;
|
||||
case GSThemeSelectedState:
|
||||
fullName = [aName stringByAppendingString: @"Selected"];
|
||||
break;
|
||||
|
|
|
@ -122,11 +122,13 @@
|
|||
{
|
||||
color = [NSColor controlBackgroundColor];
|
||||
}
|
||||
else if (state == GSThemeHighlightedState)
|
||||
else if (state == GSThemeHighlightedState
|
||||
|| state == GSThemeHighlightedFirstResponderState)
|
||||
{
|
||||
color = [NSColor selectedControlColor];
|
||||
}
|
||||
else if (state == GSThemeSelectedState)
|
||||
else if (state == GSThemeSelectedState
|
||||
|| state == GSThemeSelectedFirstResponderState)
|
||||
{
|
||||
color = [NSColor selectedControlColor];
|
||||
}
|
||||
|
@ -207,7 +209,7 @@
|
|||
{
|
||||
[self drawButton: frame withClip: NSZeroRect];
|
||||
}
|
||||
else if (state == GSThemeSelectedState)
|
||||
else if (state == GSThemeSelectedState || state == GSThemeSelectedFirstResponderState)
|
||||
{
|
||||
[self drawGrayBezel: frame withClip: NSZeroRect];
|
||||
}
|
||||
|
@ -295,7 +297,18 @@
|
|||
|
||||
- (void) drawFocusFrame: (NSRect) frame view: (NSView*) view
|
||||
{
|
||||
NSDottedFrameRect(frame);
|
||||
GSDrawTiles *tiles = [self tilesNamed: @"NSFocusRing" state: GSThemeNormalState];
|
||||
|
||||
if (tiles == nil)
|
||||
{
|
||||
NSDottedFrameRect(frame);
|
||||
}
|
||||
else
|
||||
{
|
||||
[self fillRect: frame
|
||||
withTiles: tiles
|
||||
background: [NSColor clearColor]];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) drawWindowBackground: (NSRect) frame view: (NSView*) view
|
||||
|
|
|
@ -972,6 +972,20 @@ typedef struct _GSButtonCellFlags
|
|||
buttonState = GSThemeDisabledState;
|
||||
}
|
||||
|
||||
/* If we are first responder, change to the corresponding
|
||||
first responder state. Note that GSThemeDisabledState
|
||||
doesn't have a first responder variant, currently. */
|
||||
if (_cell.shows_first_responder
|
||||
&& [[controlView window] firstResponder] == controlView)
|
||||
{
|
||||
if (buttonState == GSThemeSelectedState)
|
||||
buttonState = GSThemeSelectedFirstResponderState;
|
||||
else if (buttonState == GSThemeHighlightedState)
|
||||
buttonState = GSThemeHighlightedFirstResponderState;
|
||||
else if (buttonState == GSThemeNormalState)
|
||||
buttonState = GSThemeFirstResponderState;
|
||||
}
|
||||
|
||||
[[GSTheme theme] drawButton: cellFrame
|
||||
in: self
|
||||
view: controlView
|
||||
|
|
Loading…
Reference in a new issue