diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index bc34b879a..04d4e0e87 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -145,6 +145,14 @@ [_contentView setFrame:[self clipViewFrame]]; [_headerClipView setFrame:[self headerClipViewFrame]]; + var cornerView = [self _cornerView]; + + if (cornerView) + { + [cornerView setFrame:[self cornerViewFrame]]; + [self addSubview:cornerView]; + } + [self reflectScrolledClipView:_contentView]; } @@ -189,6 +197,8 @@ clipViewFrame = [self clipViewFrame], // the size of the visible document, within the scrollbars headerViewFrame = [self headerClipViewFrame], headerViewHeight = _CGRectGetHeight(headerViewFrame), + cornerViewFrame = [self cornerViewFrame], + cornerViewHeight = _CGRectGetHeight(cornerViewFrame), scrollPoint = [_contentView bounds].origin, difference = _CGSizeMake(CPRectGetWidth(documentFrame) - CPRectGetWidth(clipViewFrame), CPRectGetHeight(documentFrame) - CPRectGetHeight(clipViewFrame)), shouldShowVerticalScroller = (!_autohidesScrollers || difference.height > 0.0) && _hasVerticalScroller, @@ -216,7 +226,7 @@ if (shouldShowVerticalScroller) { - var verticalScrollerHeight = CPRectGetHeight([self bounds]) - headerViewHeight; + var verticalScrollerHeight = CPRectGetHeight([self bounds]) - (cornerViewHeight ? cornerViewHeight : headerViewHeight); if (shouldShowHorizontalScroller) verticalScrollerHeight -= horizontalScrollerHeight; @@ -226,7 +236,7 @@ [_verticalScroller setFloatValue:(difference.height <= 0.0) ? 0.0 : scrollPoint.y / difference.height knobProportion:CPRectGetHeight(clipViewFrame) / CPRectGetHeight(documentFrame)]; - [_verticalScroller setFrame:CPRectMake(CPRectGetMaxX(clipViewFrame), headerViewHeight, verticalScrollerWidth, verticalScrollerHeight)]; + [_verticalScroller setFrame:CPRectMake(CPRectGetMaxX(clipViewFrame), (cornerViewHeight ? cornerViewHeight : headerViewHeight), verticalScrollerWidth, verticalScrollerHeight)]; } else if (wasShowingVerticalScroller) [_verticalScroller setFloatValue:0.0 knobProportion:1.0]; @@ -410,21 +420,47 @@ var documentView = [self documentView]; if ([documentView respondsToSelector:@selector(headerView)]) - return [documentView performSelector:@selector(headerView)]; + return [documentView headerView]; return nil; } +- (CPView)_cornerView +{ + var documentView = [self documentView]; + + if ([documentView respondsToSelector:@selector(cornerView)]) + return [documentView cornerView]; +} + +- (CGRect)cornerViewFrame +{ + var cornerView = [self _cornerView], + cornerBounds = [cornerView bounds], + bounds = [self insetBounds]; + + if (!cornerView) + return CGRectMakeZero(); + + cornerBounds.origin.x = CGRectGetMaxX(bounds) - CGRectGetWidth(cornerBounds); + cornerBounds.origin.y = 0; + + return cornerBounds; +} + - (CGRect)headerClipViewFrame { var headerView = [self _headerView], + cornerView = [self _cornerView], bounds = [self insetBounds]; if (!headerView) return CGRectMakeZero(); bounds.size.height = [headerView bounds].size.height; - bounds.size.width -= _verticalScroller ? [_verticalScroller frame].size.width : [CPScroller scrollerWidth]; + + if (cornerView) + bounds.size.width -= CGRectGetWidth([cornerView bounds]); return bounds; } diff --git a/AppKit/NEWCPTableView.j b/AppKit/NEWCPTableView.j index ee72e68de..dc26c92f9 100644 --- a/AppKit/NEWCPTableView.j +++ b/AppKit/NEWCPTableView.j @@ -3,6 +3,8 @@ @import "CPControl.j" @import "CPTableColumn.j" +@import "_CPCornerView.j" +@import "CPScroller.j" #include "CoreGraphics/CGGeometry.h" @@ -82,6 +84,7 @@ CPTableViewSelectionHighlightStyleSourceList = 1; CPTableHeaderView _headerView; + _CPCornerView _cornerView; CPIndexSet _selectedColumnIndexes; CPIndexSet _selectedRowIndexes; @@ -124,6 +127,8 @@ CPTableViewSelectionHighlightStyleSourceList = 1; [_headerView setTableView:self]; + _cornerView = [[_CPCornerView alloc] initWithFrame:CGRectMake(0, 0, [CPScroller scrollerWidth], CGRectGetHeight([_headerView frame]))]; + _selectedColumnIndexes = [CPIndexSet indexSet]; _selectedRowIndexes = [CPIndexSet indexSet]; } @@ -521,6 +526,16 @@ CPTableViewSelectionHighlightStyleSourceList = 1; * - cornerView */ +- (CPView)cornerView +{ + return _cornerView; +} + +- (void)setCornerView:(CPView)aView +{ + _cornerView = aView; +} + - (CPView)headerView { return _headerView; diff --git a/AppKit/_CPCornerView.j b/AppKit/_CPCornerView.j new file mode 100644 index 000000000..5a30dfc90 --- /dev/null +++ b/AppKit/_CPCornerView.j @@ -0,0 +1,18 @@ + +@import "CPView.j" + +@implementation _CPCornerView : CPView +{ +} + +- (id)initWithFrame:(CGRect)aFrame +{ + if (self = [super initWithFrame:aFrame]) + { + [self setBackgroundColor:[CPColor purpleColor]]; + } + + return self; +} + +@end