diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j index abdfc38e2..16e346ee9 100644 --- a/AppKit/CPComboBox.j +++ b/AppKit/CPComboBox.j @@ -573,9 +573,10 @@ var CPComboBoxTextSubview = @"text", [self _updatePlaceholderState]; -#if PLATFORM(DOM) - [self _setCSSStyleForInputElement]; -#endif + if (CPDOMAvailable) + { + [self _setCSSStyleForInputElement]; + } [self _reverseSetBinding]; diff --git a/AppKit/CPImageView.j b/AppKit/CPImageView.j index eeadcbc9e..b1891a430 100644 --- a/AppKit/CPImageView.j +++ b/AppKit/CPImageView.j @@ -25,6 +25,7 @@ @import "CPControl.j" @import "CPImage.j" @import "CPShadowView.j" +@import "CPDOMDisplayServer.j" @global CPImagesPboardType @global appkit_tag_dom_elements @@ -89,9 +90,10 @@ var CPImageViewEmptyPlaceholderImage = nil; if (self) { -#if PLATFORM(DOM) - [self _createDOMImageElement]; -#endif + if (CPDOMAvailable) + { + [self _createDOMImageElement]; + } } return self; @@ -99,7 +101,9 @@ var CPImageViewEmptyPlaceholderImage = nil; - (void)_createDOMImageElement { -#if PLATFORM(DOM) + if (!CPDOMAvailable) + return; + var image = [self objectValue], isCSSBasedImage = [image isCSSBased], isIMGImageElement = _DOMImageElement && (_DOMImageElement.nodeName == "IMG"); @@ -140,7 +144,6 @@ var CPImageViewEmptyPlaceholderImage = nil; AppKitTagDOMElement(self, _DOMImageElement); CPDOMDisplayServerAppendChild(_DOMElement, _DOMImageElement); -#endif } /*! @@ -173,17 +176,18 @@ var CPImageViewEmptyPlaceholderImage = nil; var newImage = [self objectValue]; -#if PLATFORM(DOM) - [self _createDOMImageElement]; + if (CPDOMAvailable) + { + [self _createDOMImageElement]; - if ([newImage isCSSBased]) - _cssStyleNode = [newImage applyCSSImageForView:self - onDOMElement:_DOMImageElement - styleNode:_cssStyleNode - previousState:@ref(_cssStylePreviousState)]; - else - _DOMImageElement.src = newImage ? [newImage filename] : [CPImageViewEmptyPlaceholderImage filename]; -#endif + if ([newImage isCSSBased]) + _cssStyleNode = [newImage applyCSSImageForView:self + onDOMElement:_DOMImageElement + styleNode:_cssStyleNode + previousState:@ref(_cssStylePreviousState)]; + else + _DOMImageElement.src = newImage ? [newImage filename] : [CPImageViewEmptyPlaceholderImage filename]; + } var size = [newImage size]; @@ -191,10 +195,11 @@ var CPImageViewEmptyPlaceholderImage = nil; { [defaultCenter addObserver:self selector:@selector(imageDidLoad:) name:CPImageDidLoadNotification object:newImage]; -#if PLATFORM(DOM) - _DOMImageElement.width = 0; - _DOMImageElement.height = 0; -#endif + if (CPDOMAvailable) + { + _DOMImageElement.width = 0; + _DOMImageElement.height = 0; + } [_shadowView setHidden:YES]; } @@ -289,12 +294,10 @@ var CPImageViewEmptyPlaceholderImage = nil; { [super setImageScaling:anImageScaling]; -#if PLATFORM(DOM) - if ([self currentValueForThemeAttribute:@"image-scaling"] === CPImageScaleAxesIndependently) + if (CPDOMAvailable && [self currentValueForThemeAttribute:@"image-scaling"] === CPImageScaleAxesIndependently) { CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, 0.0, 0.0); } -#endif [self setNeedsLayout]; [self setNeedsDisplay:YES]; @@ -312,16 +315,18 @@ var CPImageViewEmptyPlaceholderImage = nil; { if (![self image]) { -#if PLATFORM(DOM) - _DOMImageElement.style.visibility = "hidden"; -#endif + if (CPDOMAvailable) + { + _DOMImageElement.style.visibility = "hidden"; + } [_shadowView setHidden:YES]; } else { -#if PLATFORM(DOM) - _DOMImageElement.style.visibility = "visible"; -#endif + if (CPDOMAvailable) + { + _DOMImageElement.style.visibility = "visible"; + } [_shadowView setHidden:NO]; } } @@ -356,10 +361,11 @@ var CPImageViewEmptyPlaceholderImage = nil; if (imageScaling === CPImageScaleAxesIndependently) { - #if PLATFORM(DOM) + if (CPDOMAvailable) + { _DOMImageElement.width = ROUND(width); _DOMImageElement.height = ROUND(height); - #endif + } } else { @@ -397,10 +403,11 @@ var CPImageViewEmptyPlaceholderImage = nil; break; } - #if PLATFORM(DOM) + if (CPDOMAvailable) + { _DOMImageElement.width = ROUND(width); _DOMImageElement.height = ROUND(height); - #endif + } var x, y; @@ -443,13 +450,13 @@ var CPImageViewEmptyPlaceholderImage = nil; break; } -#if PLATFORM(DOM) - CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, x, y); -#endif + if (CPDOMAvailable) + { + CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, x, y); + } } -#if PLATFORM(DOM) - if ([image isCSSBased] && [image _shouldBeResized]) + if (CPDOMAvailable && [image isCSSBased] && [image _shouldBeResized]) { [image _setDisplaySize:CGSizeMake(ROUND(width), ROUND(height))]; @@ -459,12 +466,11 @@ var CPImageViewEmptyPlaceholderImage = nil; previousState:@ref(_cssStylePreviousState)]; } - if ([image isCSSBased]) + if (CPDOMAvailable && [image isCSSBased]) { _DOMImageElement.style.width = _DOMImageElement.width + 'px'; _DOMImageElement.style.height = _DOMImageElement.height + 'px'; } -#endif _imageRect = CGRectMake(x, y, width, height); @@ -586,9 +592,10 @@ var CPImageViewImageKey = @"CPImageViewImageKey", if (self) { -#if PLATFORM(DOM) - [self _createDOMImageElement]; -#endif + if (CPDOMAvailable) + { + [self _createDOMImageElement]; + } [self setHasShadow:[aCoder decodeBoolForKey:CPImageViewHasShadowKey]]; [self setImageAlignment:[aCoder decodeIntForKey:CPImageViewImageAlignmentKey]]; diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j index 3312bea2b..685de3aa6 100644 --- a/AppKit/CPOutlineView.j +++ b/AppKit/CPOutlineView.j @@ -2647,23 +2647,23 @@ function SHOULD_SELECT_ITEM(anOutlineView, anItem) { _isAnimatingClone = NO; // Default for real buttons -#if PLATFORM(DOM) + if (CPDOMAvailable) + { + // Add a dedicated DOM element for the SVG arrow + _arrowElement = document.createElement("div"); + _arrowElement.style.position = "absolute"; + _arrowElement.style.top = "0px"; + _arrowElement.style.left = "0px"; + _arrowElement.style.width = "100%"; + _arrowElement.style.height = "100%"; + _arrowElement.style.backgroundPosition = "center center"; + _arrowElement.style.backgroundRepeat = "no-repeat"; + // 24px maps the 24x24 viewBox to exact pixels, making the 10x5 path scale perfectly + _arrowElement.style.backgroundSize = "24px 24px"; + _arrowElement.style.pointerEvents = "none"; - // Add a dedicated DOM element for the SVG arrow - _arrowElement = document.createElement("div"); - _arrowElement.style.position = "absolute"; - _arrowElement.style.top = "0px"; - _arrowElement.style.left = "0px"; - _arrowElement.style.width = "100%"; - _arrowElement.style.height = "100%"; - _arrowElement.style.backgroundPosition = "center center"; - _arrowElement.style.backgroundRepeat = "no-repeat"; - // 24px maps the 24x24 viewBox to exact pixels, making the 10x5 path scale perfectly - _arrowElement.style.backgroundSize = "24px 24px"; - _arrowElement.style.pointerEvents = "none"; - - self._DOMElement.appendChild(_arrowElement); -#endif + self._DOMElement.appendChild(_arrowElement); + } } - (void)setAngle:(float)anAngle @@ -2673,9 +2673,10 @@ function SHOULD_SELECT_ITEM(anOutlineView, anItem) // Rotate the DOM element directly using standard CSS transforms var deg = _angle * (180.0 / Math.PI); -#if PLATFORM(DOM) - _arrowElement.style.transform = "rotate(" + deg + "deg)"; -#endif + if (CPDOMAvailable) + { + _arrowElement.style.transform = "rotate(" + deg + "deg)"; + } [self display]; } @@ -2761,10 +2762,11 @@ function SHOULD_SELECT_ITEM(anOutlineView, anItem) - (void)drawRect:(CGRect)aRect { -#if PLATFORM(DOM) - if (_arrowElement && _arrowElement.parentNode !== self._DOMElement) - self._DOMElement.appendChild(_arrowElement); -#endif + if (CPDOMAvailable) + { + if (_arrowElement && _arrowElement.parentNode !== self._DOMElement) + self._DOMElement.appendChild(_arrowElement); + } // If I am NOT the clone, I must check if my row is animating. // If it is animating, the clone is drawing on top of me, so I should be invisible. @@ -2777,9 +2779,10 @@ function SHOULD_SELECT_ITEM(anOutlineView, anItem) if (row !== CPNotFound && [outlineView _isRowAnimatingDisclosure:row]) { -#if PLATFORM(DOM) - _arrowElement.style.display = "none"; -#endif + if (CPDOMAvailable) + { + _arrowElement.style.display = "none"; + } return; // Suppress the real button } } @@ -2828,9 +2831,10 @@ function SHOULD_SELECT_ITEM(anOutlineView, anItem) var svgString = ''; var b64 = window.btoa(svgString); -#if PLATFORM(DOM) - _arrowElement.style.backgroundImage = "url('data:image/svg+xml;charset=utf-8;base64," + b64 + "')"; -#endif + if (CPDOMAvailable) + { + _arrowElement.style.backgroundImage = "url('data:image/svg+xml;charset=utf-8;base64," + b64 + "')"; + } } } diff --git a/AppKit/CPProgressIndicator.j b/AppKit/CPProgressIndicator.j index 97ababacc..2d4390c9a 100644 --- a/AppKit/CPProgressIndicator.j +++ b/AppKit/CPProgressIndicator.j @@ -77,34 +77,34 @@ CPProgressIndicatorHUDBarStyle = 2; if (self !== [CPProgressIndicator class]) return; -#if PLATFORM(DOM) + if (CPDOMAvailable) + { + if (document.getElementById("cp-progress-indicator-style")) + return; - if (document.getElementById("cp-progress-indicator-style")) - return; + var style = document.createElement("style"); + style.id = "cp-progress-indicator-style"; + style.type = "text/css"; - var style = document.createElement("style"); - style.id = "cp-progress-indicator-style"; - style.type = "text/css"; - - // We define two animations: - // 1. cp-progress-indicator-spin: Rotates 360 degrees (for spinners) - // 2. cp-progress-indicator-bar-slide: Moves background-position (for striped bars) - var css = - "@keyframes cp-progress-indicator-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } " + - "@-webkit-keyframes cp-progress-indicator-spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); } } " + - - "@keyframes cp-progress-indicator-bar-slide { 0% { background-position: 0 0; } 100% { background-position: 30px 0; } } " + - "@-webkit-keyframes cp-progress-indicator-bar-slide { 0% { background-position: 0 0; } 100% { background-position: 30px 0; } }"; - - if (style.styleSheet) - style.styleSheet.cssText = css; - else - style.appendChild(document.createTextNode(css)); - - var head = document.getElementsByTagName("head")[0]; - if (head) - head.appendChild(style); -#endif + // We define two animations: + // 1. cp-progress-indicator-spin: Rotates 360 degrees (for spinners) + // 2. cp-progress-indicator-bar-slide: Moves background-position (for striped bars) + var css = + "@keyframes cp-progress-indicator-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } " + + "@-webkit-keyframes cp-progress-indicator-spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); } } " + + + "@keyframes cp-progress-indicator-bar-slide { 0% { background-position: 0 0; } 100% { background-position: 30px 0; } } " + + "@-webkit-keyframes cp-progress-indicator-bar-slide { 0% { background-position: 0 0; } 100% { background-position: 30px 0; } }"; + + if (style.styleSheet) + style.styleSheet.cssText = css; + else + style.appendChild(document.createTextNode(css)); + + var head = document.getElementsByTagName("head")[0]; + if (head) + head.appendChild(style); + } } + (CPString)defaultThemeClass diff --git a/AppKit/CPSearchField.j b/AppKit/CPSearchField.j index b8b091fe5..409ed2466 100644 --- a/AppKit/CPSearchField.j +++ b/AppKit/CPSearchField.j @@ -127,10 +127,11 @@ var CPAutosavedRecentsChangedNotification = @"CPAutosavedRecentsChangedNotificat cancelButton = nil, searchButton = nil; -#if PLATFORM(DOM) - cancelButton = [[CPButton alloc] initWithFrame:[self cancelButtonRectForBounds:bounds]]; - searchButton = [[CPButton alloc] initWithFrame:[self searchButtonRectForBounds:bounds]]; -#endif + if (CPDOMAvailable) + { + cancelButton = [[CPButton alloc] initWithFrame:[self cancelButtonRectForBounds:bounds]]; + searchButton = [[CPButton alloc] initWithFrame:[self searchButtonRectForBounds:bounds]]; + } [self setCancelButton:cancelButton]; [self resetCancelButton]; diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index e5c898ce9..dccc7878f 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -700,10 +700,11 @@ CPSegmentSwitchTrackingMomentary = 2; // Trick : Put selected segments over unselected ones to automaticaly manage borders -#if PLATFORM(DOM) - contentView._DOMElement.style.zIndex = ([segment selected] ? 1 : 0); - bezelView._DOMElement.style.zIndex = ([segment selected] ? 1 : 0); -#endif + if (CPDOMAvailable) + { + contentView._DOMElement.style.zIndex = ([segment selected] ? 1 : 0); + bezelView._DOMElement.style.zIndex = ([segment selected] ? 1 : 0); + } [contentView setText:[segment label]]; [contentView setImage:[segment image]]; diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index a9686a6f1..862632dfb 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -119,15 +119,6 @@ CPTableViewReverseSequentialColumnAutoresizingStyle = 3; CPTableViewLastColumnOnlyAutoresizingStyle = 4; CPTableViewFirstColumnOnlyAutoresizingStyle = 5; -#define NUMBER_OF_COLUMNS() (_tableColumns.length) -#define UPDATE_COLUMN_RANGES_IF_NECESSARY() \ - if (_dirtyTableColumnRangeIndex !== CPNotFound) \ - [self _recalculateTableColumnRanges]; -#define FULL_ROW_HEIGHT() (_rowHeight + _intercellSpacing.height) -#define ROW_BOTTOM(__heightInfo) (__heightInfo.y + __heightInfo.height + _intercellSpacing.height) -#define HAS_VARIABLE_ROW_HEIGHTS() (_implementedDelegateMethods & CPTableViewDelegate_tableView_heightOfRow_) - - @protocol CPTableViewDataSource @optional @@ -226,7 +217,9 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; - (void)updateState { -#if PLATFORM(DOM) + if (!CPDOMAvailable) + return; + var backgroundColor = nil; if (_selected && [_tableView selectionHighlightStyle] != CPTableViewSelectionHighlightStyleNone) @@ -253,7 +246,6 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; [self setBackgroundColor:backgroundColor]; [self _updateGridLine]; -#endif } - (void)_updateGridLine @@ -630,7 +622,9 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; - (void)_updateSelectedColumnBackgrounds { -#if PLATFORM(DOM) + if (!CPDOMAvailable) + return; + // 1. Remove existing column background views [_selectedColumnBackgroundViews makeObjectsPerformSelector:@selector(removeFromSuperview)]; [_selectedColumnBackgroundViews removeAllObjects]; @@ -668,7 +662,6 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; if (_visibleRowViews.hasOwnProperty(rowIndex)) [self addSubview:_visibleRowViews[rowIndex] positioned:CPWindowBelow relativeTo:nil]; } -#endif } /*! @@ -1278,9 +1271,9 @@ NOT YET IMPLEMENTED [aTableColumn setTableView:self]; if (_dirtyTableColumnRangeIndex < 0) - _dirtyTableColumnRangeIndex = NUMBER_OF_COLUMNS() - 1; + _dirtyTableColumnRangeIndex = [self _numberOfColumns] - 1; else - _dirtyTableColumnRangeIndex = MIN(NUMBER_OF_COLUMNS() - 1, _dirtyTableColumnRangeIndex); + _dirtyTableColumnRangeIndex = MIN([self _numberOfColumns] - 1, _dirtyTableColumnRangeIndex); if ([[self sortDescriptors] count] > 0) { @@ -1453,7 +1446,7 @@ NOT YET IMPLEMENTED - (CPInteger)columnWithIdentifier:(CPString)anIdentifier { var index = 0, - count = NUMBER_OF_COLUMNS(); + count = [self _numberOfColumns]; for (; index < count; ++index) if ([_tableColumns[index] identifier] === anIdentifier) @@ -1816,7 +1809,7 @@ NOT YET IMPLEMENTED */ - (int)numberOfColumns { - return NUMBER_OF_COLUMNS(); + return [self _numberOfColumns]; } /*! @@ -1935,7 +1928,7 @@ NOT YET IMPLEMENTED _numberOfHiddenColumns = 0; var index = _dirtyTableColumnRangeIndex, - count = NUMBER_OF_COLUMNS(), + count = [self _numberOfColumns], x = index === 0 ? 0.0 : CPMaxRange(_tableColumnRanges[index - 1]); for (; index < count; ++index) @@ -1975,13 +1968,13 @@ NOT YET IMPLEMENTED // Coerce aColumnIndex to a number in case it is a string. aColumnIndex = +aColumnIndex; - if (aColumnIndex < 0 || aColumnIndex >= NUMBER_OF_COLUMNS()) + if (aColumnIndex < 0 || aColumnIndex >= [self _numberOfColumns]) return CGRectMakeZero(); if ([[_tableColumns objectAtIndex:aColumnIndex] isHidden]) return CGRectMakeZero(); - UPDATE_COLUMN_RANGES_IF_NECESSARY(); + [self _updateColumnRangesIfNecessary]; var range = _tableColumnRanges[aColumnIndex]; @@ -2010,7 +2003,7 @@ NOT YET IMPLEMENTED height, fixedHeightRows = 0; - if (HAS_VARIABLE_ROW_HEIGHTS()) + if ([self _hasVariableRowHeights]) { [self _populateRowHeightCacheIfNeeded]; @@ -2026,12 +2019,12 @@ NOT YET IMPLEMENTED } else { - height = FULL_ROW_HEIGHT(); + height = [self _fullRowHeight]; if (_numberOfRows > 0) { heightInfo = _cachedRowHeights[lastIndex]; - y = ROW_BOTTOM(heightInfo); + y = [self _rowBottomOfHeightInfo:heightInfo]; // y is now at the top of the first row beyond the last valid row. // Add the height of any rows beyond that. @@ -2042,10 +2035,10 @@ NOT YET IMPLEMENTED else { fixedHeightRows = aRowIndex; - height = FULL_ROW_HEIGHT(); + height = [self _fullRowHeight]; } - y += fixedHeightRows * FULL_ROW_HEIGHT(); + y += fixedHeightRows * [self _fullRowHeight]; return CGRectMake(0.0, y, CGRectGetWidth([self bounds]), height); } @@ -2115,7 +2108,7 @@ NOT YET IMPLEMENTED if (bottomOfRealRows >= rectBottom) return rowRange; - var numberOfSynthesizedRows = CEIL((rectBottom - bottomOfRealRows) / FULL_ROW_HEIGHT()); + var numberOfSynthesizedRows = CEIL((rectBottom - bottomOfRealRows) / [self _fullRowHeight]); rowRange.length += numberOfSynthesizedRows; @@ -2133,14 +2126,14 @@ NOT YET IMPLEMENTED // O(log numberOfColumns) if table view contains no hidden columns // O(numberOfColumns) if table view contains hidden columns - if (NUMBER_OF_COLUMNS() === 0) + if ([self _numberOfColumns] === 0) return [CPIndexSet indexSet]; var column = MAX(0, [self columnAtPoint:CGPointMake(aRect.origin.x, 0.0)]), lastColumn = [self columnAtPoint:CGPointMake(CGRectGetMaxX(aRect), 0.0)]; if (lastColumn === CPNotFound) - lastColumn = NUMBER_OF_COLUMNS() - 1; + lastColumn = [self _numberOfColumns] - 1; if (column > lastColumn || lastColumn < 0) return [CPIndexSet indexSet]; @@ -2178,7 +2171,7 @@ NOT YET IMPLEMENTED if (!CGRectContainsPoint(bounds, aPoint)) return CPNotFound; - UPDATE_COLUMN_RANGES_IF_NECESSARY(); + [self _updateColumnRangesIfNecessary]; var x = aPoint.x, low = 0, @@ -2231,13 +2224,13 @@ NOT YET IMPLEMENTED // aPoint.x is in bounds, now we just have to check aPoint.y - if (HAS_VARIABLE_ROW_HEIGHTS()) + if ([self _hasVariableRowHeights]) { // First make sure aPoint.y is above the bottom of the last row, otherwise we might // search the (potentially large number of) rows for nothing. var heightInfo = [_cachedRowHeights lastObject]; - if (!heightInfo || aPoint.y >= ROW_BOTTOM(heightInfo)) + if (!heightInfo || aPoint.y >= [self _rowBottomOfHeightInfo:heightInfo]) return -1; return [_cachedRowHeights indexOfObject:aPoint @@ -2248,7 +2241,7 @@ NOT YET IMPLEMENTED if (aPoint.y < heightInfo.y) return CPOrderedAscending; - if (aPoint.y > ROW_BOTTOM(heightInfo)) + if (aPoint.y > [self _rowBottomOfHeightInfo:heightInfo]) return CPOrderedDescending; return CPOrderedSame; @@ -2256,7 +2249,7 @@ NOT YET IMPLEMENTED } else { - var row = FLOOR(aPoint.y / FULL_ROW_HEIGHT()); + var row = FLOOR(aPoint.y / [self _fullRowHeight]); return row >= _numberOfRows ? -1 : row; } @@ -2363,7 +2356,7 @@ NOT YET IMPLEMENTED */ - (CGRect)frameOfDataViewAtColumn:(CPInteger)aColumn row:(CPInteger)aRow { - UPDATE_COLUMN_RANGES_IF_NECESSARY(); + [self _updateColumnRangesIfNecessary]; if (aColumn > [self numberOfColumns] || aRow > [self numberOfRows]) return CGRectMakeZero(); @@ -2428,9 +2421,9 @@ NOT YET IMPLEMENTED if (!superview) return; - UPDATE_COLUMN_RANGES_IF_NECESSARY(); + [self _updateColumnRangesIfNecessary]; - var count = NUMBER_OF_COLUMNS(), + var count = [self _numberOfColumns], columnToResize = nil, totalWidth = 0, i = 0; @@ -2474,10 +2467,10 @@ NOT YET IMPLEMENTED if (!superview || ![superview isKindOfClass:[CPClipView class]]) return; - UPDATE_COLUMN_RANGES_IF_NECESSARY(); + [self _updateColumnRangesIfNecessary]; var superviewWidth = [superview bounds].size.width, - count = NUMBER_OF_COLUMNS(), + count = [self _numberOfColumns], resizableColumns = [CPIndexSet indexSet], remainingSpace = 0.0, i = 0; @@ -2582,9 +2575,9 @@ NOT YET IMPLEMENTED var superviewSize = [superview bounds].size; - UPDATE_COLUMN_RANGES_IF_NECESSARY(); + [self _updateColumnRangesIfNecessary]; - var count = NUMBER_OF_COLUMNS(); + var count = [self _numberOfColumns]; // Decrement the counter until we get to the last column that's not hidden while (count-- && [_tableColumns[count] isHidden]); @@ -2652,7 +2645,7 @@ NOT YET IMPLEMENTED */ - (void)_noteHeightOfRowsWithIndexesChanged:(CPIndexSet)anIndexSet { - if (!HAS_VARIABLE_ROW_HEIGHTS()) + if (![self _hasVariableRowHeights]) return; // Update the height of the given rows by calling the delegate. Since the row height cache also contains @@ -2694,21 +2687,21 @@ NOT YET IMPLEMENTED */ - (void)tile { - UPDATE_COLUMN_RANGES_IF_NECESSARY(); + [self _updateColumnRangesIfNecessary]; var width = _tableColumnRanges.length > 0 ? CPMaxRange([_tableColumnRanges lastObject]) : 0.0, superview = [self superview], height = 0; - if (!HAS_VARIABLE_ROW_HEIGHTS()) - height = FULL_ROW_HEIGHT() * _numberOfRows; + if (![self _hasVariableRowHeights]) + height = [self _fullRowHeight] * _numberOfRows; else if (_numberOfRows > 0) { [self _populateRowHeightCacheIfNeeded]; var heightInfo = _cachedRowHeights[_cachedRowHeights.length - 1]; - height = ROW_BOTTOM(heightInfo); + height = [self _rowBottomOfHeightInfo:heightInfo]; } if ([superview isKindOfClass:[CPClipView class]]) @@ -3887,7 +3880,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad if (![rowIndexes count] || ![columnIndexes count]) return; - UPDATE_COLUMN_RANGES_IF_NECESSARY(); + [self _updateColumnRangesIfNecessary]; if (_numberOfHiddenColumns > 0) columnIndexes = [columnIndexes indexesPassingTest:function(idx, stop) @@ -4177,9 +4170,9 @@ Your delegate can implement this method to avoid subclassing the tableview to ad [CPException raise:CPInvalidArgumentException reason:@"Row " + row + " out of row range [0-" + (_numberOfRows - 1) + "] for rowViewAtRow:createIfNeeded:"]; - if (column > (NUMBER_OF_COLUMNS() - 1)) + if (column > ([self _numberOfColumns] - 1)) [CPException raise:CPInvalidArgumentException - reason:@"Column " + column + " out of row range [0-" + (NUMBER_OF_COLUMNS ()- 1) + "] for rowViewAtRow:createIfNeeded:"]; + reason:@"Column " + column + " out of row range [0-" + ([self _numberOfColumns]- 1) + "] for rowViewAtRow:createIfNeeded:"]; var dataViewsForRow = _dataViewsForRows[row], tableColumn = _tableColumns[column], @@ -5674,6 +5667,31 @@ Your delegate can implement this method to avoid subclassing the tableview to ad }, 0); } +- (int)_numberOfColumns +{ + return _tableColumns.length; +} + +- (void)_updateColumnRangesIfNecessary +{ + if (_dirtyTableColumnRangeIndex !== CPNotFound) + [self _recalculateTableColumnRanges]; +} + +- (CGFloat)_fullRowHeight +{ + return (_rowHeight + _intercellSpacing.height); +} + +- (CGFloat)_rowBottomOfHeightInfo:(JSObject)heightInfo +{ + return (heightInfo.y + heightInfo.height + _intercellSpacing.height); +} + +- (BOOL)_hasVariableRowHeights +{ + return (_implementedDelegateMethods & CPTableViewDelegate_tableView_heightOfRow_); +} @end @@ -6536,4 +6554,5 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey", return "<" + [self className] + " 0x" + [CPString stringWithHash:[self UID]] + " identifier=" + [self identifier] + ">"; } + @end diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 6981ef4c8..306cf3de1 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -1358,12 +1358,13 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)validateEditing { -#if PLATFORM(DOM) + if (!CPDOMAvailable) + return; + var element = [self _inputElement]; if (element) [self _setStringValue:element.value isNewValue:YES errorDescription:nil]; -#endif } - (void)textDidBeginEditing:(CPNotification)note diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 22d15ce5c..a8f2ec8fe 100644 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -1085,9 +1085,10 @@ var kDelegateRespondsTo_textShouldBeginEditing { [_caret setRect:aRect]; -#if PLATFORM(DOM) - _caret._caretDOM.style.backgroundColor = [_insertionPointColor cssString] || "black"; -#endif + if (CPDOMAvailable) + { + _caret._caretDOM.style.backgroundColor = [_insertionPointColor cssString] || "black"; + } [_caret setVisibility:flag stop:NO]; }