mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-30 07:20:38 +00:00
* Headers/Additions/GNUstepGUI/GSTheme.h: Remove GSScrollViewBottomCorner
part name, instead themes should just provide a part called NSScrollView. Add -scrollViewScrollersOverlapBorders method. * Source/GSTheme.m: Remove GSScrollViewBottomCorner part name. * Source/GSThemeDrawing.m: Add -scrollViewScrollersOverlapBorders. * Source/GSThemeDrawing.m (-drawBrowserRect:...): If -scrollViewScrollersOverlapBorders is enabled, fill the browser background with the NSScrollView tile. * Source/GSThemeDrawing.m (-drawScrollViewRect:...): If -scrollViewScrollersOverlapBorders is enabled, fill the scroll view background with the NSScrollView tile. * Source/NSScroller.m (-rectForPart:): Change the meaning of the GSScrollerKnobOvershoot default so the knob only overlaps the buttons by this much (rather than both ends of the track). Turns out this is more useful for themes. * Source/NSScrollView.m (-tile): Add support for -[GSTheme scrollViewScrollersOverlapBorders] * Source/NSBrowser.m (-tile): Add support for -[GSTheme scrollViewScrollersOverlapBorders] and -[GSTheme scrollViewUseBottomCorner] The overall point of these additions is to support NSScrollView and NSBrowser looking like: http://jesseross.com/clients/gnustep/ui/concepts/ git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@37238 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
4e1aeabe94
commit
310b7d5786
7 changed files with 209 additions and 54 deletions
|
@ -611,7 +611,7 @@
|
|||
return defaultScrollerWidth;
|
||||
}
|
||||
|
||||
- (BOOL) scrolViewUseBottomCorner
|
||||
- (BOOL) scrollViewUseBottomCorner
|
||||
{
|
||||
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
|
||||
if ([defs objectForKey: @"GSScrollViewUseBottomCorner"] != nil)
|
||||
|
@ -621,6 +621,16 @@
|
|||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL) scrollViewScrollersOverlapBorders
|
||||
{
|
||||
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
|
||||
if ([defs objectForKey: @"GSScrollViewScrollersOverlapBorders"] != nil)
|
||||
{
|
||||
return [defs boolForKey: @"GSScrollViewScrollersOverlapBorders"];
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (NSColor *) toolbarBackgroundColor
|
||||
{
|
||||
NSColor *color;
|
||||
|
@ -2435,6 +2445,21 @@ typedef enum {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (![self browserUseBezels]
|
||||
&& [self scrollViewScrollersOverlapBorders])
|
||||
{
|
||||
NSRect baseRect = NSMakeRect(0, 0, bounds.size.width, 1);
|
||||
NSRect colFrame = [browser frameOfColumn: [browser firstVisibleColumn]];
|
||||
NSRect scrollViewRect = NSUnionRect(baseRect, colFrame);
|
||||
|
||||
GSDrawTiles *tiles = [self tilesNamed: @"NSScrollView"
|
||||
state: GSThemeNormalState];
|
||||
|
||||
[self fillRect: scrollViewRect
|
||||
withTiles: tiles
|
||||
background: [NSColor clearColor]];
|
||||
}
|
||||
}
|
||||
|
||||
- (CGFloat) browserColumnSeparation
|
||||
|
@ -2521,6 +2546,7 @@ typedef enum {
|
|||
NSRect bounds = [view bounds];
|
||||
BOOL hasInnerBorder = ![[NSUserDefaults standardUserDefaults]
|
||||
boolForKey: @"GSScrollViewNoInnerBorder"];
|
||||
GSDrawTiles *tiles = nil;
|
||||
|
||||
name = [theme nameForElement: self];
|
||||
if (name == nil)
|
||||
|
@ -2528,28 +2554,38 @@ typedef enum {
|
|||
name = @"NSScrollView";
|
||||
}
|
||||
color = [theme colorNamed: name state: GSThemeNormalState];
|
||||
tiles = [theme tilesNamed: name state: GSThemeNormalState];
|
||||
if (color == nil)
|
||||
{
|
||||
color = [NSColor controlDarkShadowColor];
|
||||
}
|
||||
|
||||
switch (borderType)
|
||||
|
||||
if (tiles == nil)
|
||||
{
|
||||
case NSNoBorder:
|
||||
break;
|
||||
|
||||
case NSLineBorder:
|
||||
[color set];
|
||||
NSFrameRect(bounds);
|
||||
break;
|
||||
|
||||
case NSBezelBorder:
|
||||
[theme drawGrayBezel: bounds withClip: rect];
|
||||
break;
|
||||
|
||||
case NSGrooveBorder:
|
||||
[theme drawGroove: bounds withClip: rect];
|
||||
break;
|
||||
switch (borderType)
|
||||
{
|
||||
case NSNoBorder:
|
||||
break;
|
||||
|
||||
case NSLineBorder:
|
||||
[color set];
|
||||
NSFrameRect(bounds);
|
||||
break;
|
||||
|
||||
case NSBezelBorder:
|
||||
[theme drawGrayBezel: bounds withClip: rect];
|
||||
break;
|
||||
|
||||
case NSGrooveBorder:
|
||||
[theme drawGroove: bounds withClip: rect];
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
[self fillRect: bounds
|
||||
withTiles: tiles
|
||||
background: [NSColor clearColor]];
|
||||
}
|
||||
|
||||
if (hasInnerBorder)
|
||||
|
@ -2600,26 +2636,6 @@ typedef enum {
|
|||
DPSstroke(ctxt);
|
||||
}
|
||||
}
|
||||
|
||||
if (![self scrolViewUseBottomCorner]
|
||||
&& [scrollView hasHorizontalScroller]
|
||||
&& [scrollView hasVerticalScroller])
|
||||
{
|
||||
NSScroller *vertScroller = [scrollView verticalScroller];
|
||||
NSScroller *horizScroller = [scrollView horizontalScroller];
|
||||
|
||||
NSRect bottomCornerRect = NSMakeRect([vertScroller frame].origin.x,
|
||||
[horizScroller frame].origin.y,
|
||||
NSWidth([vertScroller frame]),
|
||||
NSHeight([horizScroller frame]));
|
||||
|
||||
GSDrawTiles *tiles = [self tilesNamed: GSScrollViewBottomCorner
|
||||
state: GSThemeNormalState];
|
||||
|
||||
[self fillRect: bottomCornerRect
|
||||
withTiles: tiles
|
||||
background: [NSColor clearColor]];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) drawSliderBorderAndBackground: (NSBorderType)aType
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue