* 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:
Eric Wasylishen 2013-10-14 17:18:38 +00:00
parent 856b71dd2f
commit 6f4a16835b
5 changed files with 58 additions and 4 deletions

View file

@ -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:...):

View file

@ -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;

View file

@ -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;

View file

@ -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

View file

@ -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