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];
}