Draw borders using image tiles, if available.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@29503 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Eric Wasylishen 2010-02-07 21:42:50 +00:00
parent b05ce5111e
commit e086eb3dbe
4 changed files with 72 additions and 24 deletions

View file

@ -1,3 +1,10 @@
2010-02-07 Eric Wasylishen <ewasylishen@gmail.com>
* Source/GSTheme.m:
* Source/GSThemePrivate.h:
* Source/GSThemeDrawing.m (-drawBorderType:frame:view:):
Draw borders using image tiles, if available.
2010-02-07 Eric Wasylishen <ewasylishen@gmail.com>
* Source/NSPopUpButtonCell.m (-selectItem:): Mark the previously

View file

@ -184,6 +184,21 @@ GSStringFromBezelStyle(NSBezelStyle bezelStyle)
}
}
NSString *
GSStringFromBorderType(NSBorderType borderType)
{
switch (borderType)
{
case NSNoBorder: return @"NSNoBorder";
case NSLineBorder: return @"NSLineBorder";
case NSBezelBorder: return @"NSBezelBorder";
case NSGrooveBorder: return @"NSGrooveBorder";
default: return nil;
}
}
@interface NSImage (GSTheme)
+ (NSImage*) _setImage: (NSImage*)image name: (NSString*)name;
@end

View file

@ -237,37 +237,62 @@
frame: (NSRect)frame
view: (NSView*)view
{
switch (aType)
NSString *name = GSStringFromBorderType(aType);
GSDrawTiles *tiles = [self tilesNamed: name state: GSThemeNormalState];
if (tiles == nil)
{
case NSLineBorder:
[[NSColor controlDarkShadowColor] set];
NSFrameRect(frame);
break;
case NSGrooveBorder:
[self drawGroove: frame withClip: NSZeroRect];
break;
case NSBezelBorder:
[self drawWhiteBezel: frame withClip: NSZeroRect];
break;
case NSNoBorder:
default:
break;
switch (aType)
{
case NSLineBorder:
[[NSColor controlDarkShadowColor] set];
NSFrameRect(frame);
break;
case NSGrooveBorder:
[self drawGroove: frame withClip: NSZeroRect];
break;
case NSBezelBorder:
[self drawWhiteBezel: frame withClip: NSZeroRect];
break;
case NSNoBorder:
default:
break;
}
}
else
{
[self fillRect: frame
withTiles: tiles
background: [NSColor clearColor]];
}
}
- (NSSize) sizeForBorderType: (NSBorderType)aType
{
// Returns the size of a border
switch (aType)
NSString *name = GSStringFromBorderType(aType);
GSDrawTiles *tiles = [self tilesNamed: name state: GSThemeNormalState];
if (tiles == nil)
{
case NSLineBorder:
return NSMakeSize(1, 1);
case NSGrooveBorder:
case NSBezelBorder:
return NSMakeSize(2, 2);
case NSNoBorder:
default:
return NSZeroSize;
// Returns the size of a border
switch (aType)
{
case NSLineBorder:
return NSMakeSize(1, 1);
case NSGrooveBorder:
case NSBezelBorder:
return NSMakeSize(2, 2);
case NSNoBorder:
default:
return NSZeroSize;
}
}
else
{
// FIXME: We assume the button's top and right padding are the same as
// its bottom and left.
return NSMakeSize(tiles->contentRect.origin.x,
tiles->contentRect.origin.y);
}
}

View file

@ -38,6 +38,7 @@
NSString *GSStringFromSegmentStyle(NSSegmentStyle segmentStyle);
NSString *GSStringFromBezelStyle(NSBezelStyle bezelStyle);
NSString *GSStringFromBorderType(NSBorderType borderType);
/** These are the nine types of tile used to draw a rectangular object.
*/