mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-31 06:40:47 +00:00
New drawing function and small patches on button cell.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@18593 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
e447a55ea3
commit
38d9d84c34
4 changed files with 113 additions and 5 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2004-02-11 Fred Kiefer <FredKiefer@gmx.de>
|
||||
|
||||
* Source/NSButtonCel.m: (-setObjectValue:, -objectValue)
|
||||
Implemented to set/return the state.
|
||||
(-mouseEntered:, -mouseExited:, -drawWithFrame:inView:)
|
||||
Partially added old showsBorderOnlyWhileMouseInside patch from
|
||||
Michael Hanni (mhanni@yahoo.com).
|
||||
* Headers/Additions/GNUstepGUI/GSDrawFunctions.h:
|
||||
* Source/GSDrawFunctions.m: New gradient border drawing method.
|
||||
|
||||
2004-02-12 Adam Fedor <fedor@gnu.org>
|
||||
|
||||
* Documentation/GuiUser/KeyboardSetup.gsdoc: Update.
|
||||
|
|
|
@ -28,6 +28,8 @@
|
|||
#define _GNUstep_H_GSDrawFunctions
|
||||
|
||||
#include <Foundation/NSGeometry.h>
|
||||
// For gradient types
|
||||
#include "AppKit/NSButtonCell.h"
|
||||
|
||||
@class NSColor;
|
||||
|
||||
|
@ -41,6 +43,10 @@
|
|||
+ (void) drawGroove: (NSRect)border : (NSRect)clip;
|
||||
+ (void) drawFramePhoto: (NSRect)border : (NSRect)clip;
|
||||
|
||||
+ (NSRect) drawGradient: (NSGradientType)gradientType
|
||||
inRect: (NSRect)border
|
||||
withClip: (NSRect)clip;
|
||||
|
||||
@end
|
||||
|
||||
#endif /* _GNUstep_H_GSDrawFunctions */
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
|
||||
#include "GNUstepGUI/GSDrawFunctions.h"
|
||||
#include "AppKit/NSColor.h"
|
||||
#include "AppKit/NSView.h"
|
||||
#include "AppKit/NSGraphics.h"
|
||||
#include "AppKit/NSView.h"
|
||||
#include "AppKit/PSOperators.h"
|
||||
|
||||
|
||||
|
@ -237,4 +237,58 @@
|
|||
}
|
||||
}
|
||||
|
||||
/** Draw a gradient border. */
|
||||
+ (NSRect) drawGradientBorder: (NSGradientType)gradientType
|
||||
inRect: (NSRect)border
|
||||
withClip: (NSRect)clip
|
||||
{
|
||||
NSRectEdge up_sides[] = {NSMaxXEdge, NSMinYEdge,
|
||||
NSMinXEdge, NSMaxYEdge};
|
||||
NSRectEdge dn_sides[] = {NSMaxXEdge, NSMaxYEdge,
|
||||
NSMinXEdge, NSMinYEdge};
|
||||
NSColor *black = [NSColor controlDarkShadowColor];
|
||||
NSColor *dark = [NSColor controlShadowColor];
|
||||
NSColor *light = [NSColor controlColor];
|
||||
NSColor **colors;
|
||||
NSColor *concaveWeak[] = {dark, dark,
|
||||
light, light};
|
||||
NSColor *concaveStrong[] = {black, black,
|
||||
light, light};
|
||||
NSColor *convexWeak[] = {light, light,
|
||||
dark, dark};
|
||||
NSColor *convexStrong[] = {light, light,
|
||||
black, black};
|
||||
NSRect rect;
|
||||
|
||||
switch (gradientType)
|
||||
{
|
||||
case NSGradientConcaveWeak:
|
||||
colors = concaveWeak;
|
||||
break;
|
||||
case NSGradientConcaveStrong:
|
||||
colors = concaveStrong;
|
||||
break;
|
||||
case NSGradientConvexWeak:
|
||||
colors = convexWeak;
|
||||
break;
|
||||
case NSGradientConvexStrong:
|
||||
colors = convexStrong;
|
||||
break;
|
||||
case NSGradientNone:
|
||||
default:
|
||||
return border;
|
||||
}
|
||||
|
||||
if ([[NSView focusView] isFlipped] == YES)
|
||||
{
|
||||
rect = NSDrawColorTiledRects(border, clip, dn_sides, colors, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
rect = NSDrawColorTiledRects(border, clip, up_sides, colors, 4);
|
||||
}
|
||||
|
||||
return rect;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <Foundation/NSString.h>
|
||||
#include <Foundation/NSException.h>
|
||||
#include <Foundation/NSDebug.h>
|
||||
#include <Foundation/NSValue.h>
|
||||
#include <GNUstepBase/GSCategories.h>
|
||||
|
||||
#include "AppKit/AppKitExceptions.h"
|
||||
|
@ -446,8 +447,13 @@
|
|||
|
||||
- (void)setShowsBorderOnlyWhileMouseInside:(BOOL)show
|
||||
{
|
||||
// FIXME: Switch mouse tracking on
|
||||
if (_shows_border_only_while_mouse_inside == show)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_shows_border_only_while_mouse_inside = show;
|
||||
// FIXME Switch mouse tracking on
|
||||
}
|
||||
|
||||
- (NSGradientType)gradientType
|
||||
|
@ -584,8 +590,37 @@
|
|||
return _cell.state;
|
||||
}
|
||||
|
||||
// FIXME: The spec says that the stringValue and setStringValue methods should
|
||||
// also be redefined. But this does not fit to the way we uses this for the title.
|
||||
- (void) setObjectValue: (id)object
|
||||
{
|
||||
if (object == nil)
|
||||
{
|
||||
[self setState: NSOffState];
|
||||
}
|
||||
else if ([object respondsToSelector: @selector(intValue)])
|
||||
{
|
||||
[self setState: [object intValue]];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self setState: NSOnState];
|
||||
}
|
||||
}
|
||||
|
||||
- (id) objectValue
|
||||
{
|
||||
if (_cell.state == NSOffState)
|
||||
{
|
||||
return [NSNumber numberWithBool: NO];
|
||||
}
|
||||
else if (_cell.state == NSOnState)
|
||||
{
|
||||
return [NSNumber numberWithBool: YES];
|
||||
}
|
||||
else // NSMixedState
|
||||
{
|
||||
return [NSNumber numberWithInt: -1];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Displaying
|
||||
|
@ -615,7 +650,8 @@
|
|||
return;
|
||||
|
||||
// draw the border if needed
|
||||
if (_cell.is_bordered)
|
||||
if ((_cell.is_bordered) &&
|
||||
(!_shows_border_only_while_mouse_inside || _mouse_inside))
|
||||
{
|
||||
// FIXME Should check the bezel and gradient style
|
||||
if (_cell.is_highlighted && (_highlightsByMask & NSPushInCellMask))
|
||||
|
@ -1057,11 +1093,13 @@
|
|||
- (void) mouseEntered: (NSEvent *)event
|
||||
{
|
||||
_mouse_inside = YES;
|
||||
[(NSView *)[event userData] setNeedsDisplay: YES];
|
||||
}
|
||||
|
||||
- (void) mouseExited: (NSEvent *)event
|
||||
{
|
||||
_mouse_inside = NO;
|
||||
[(NSView *)[event userData] setNeedsDisplay: YES];
|
||||
}
|
||||
|
||||
- (void) performClick: (id)sender
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue