WebCore:
2009-01-25 Darin Adler <darin@apple.com>
Reviewed by Sam Weinig.
Bug 23522: use checked casts for render tree
https://bugs.webkit.org/show_bug.cgi?id=23522
Step one: RenderText.
Also change set of RenderFlow* to be a ListHashSet as the comment in the
header indicated.
* dom/CharacterData.cpp:
(WebCore::CharacterData::setData): Use toRenderText.
(WebCore::CharacterData::appendData): Ditto.
(WebCore::CharacterData::insertData): Ditto.
(WebCore::CharacterData::deleteData): Ditto.
(WebCore::CharacterData::replaceData): Ditto.
* dom/ContainerNode.cpp:
(WebCore::ContainerNode::getUpperLeftCorner): Ditto.
(WebCore::ContainerNode::getLowerRightCorner): Ditto.
* dom/Position.cpp:
(WebCore::nextRenderedEditable): Ditto.
(WebCore::previousRenderedEditable): Ditto.
(WebCore::Position::renderedOffset): Ditto. Also use function members
instead of data members of InlineTextBox.
(WebCore::Position::upstream): Ditto.
(WebCore::Position::downstream): Ditto.
(WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight): Ditto.
(WebCore::Position::inRenderedText): Ditto.
(WebCore::Position::isRenderedCharacter): Ditto.
(WebCore::searchAheadForBetterMatch): Ditto.
(WebCore::Position::getInlineBoxAndOffset): Ditto.
* dom/Range.cpp: Added include of VisiblePosition.h now that it's no longer
included in RenderObject.h.
* dom/Text.cpp:
(WebCore::Text::splitText): Use toRenderText.
(WebCore::Text::recalcStyle): Ditto.
* editing/CompositeEditCommand.cpp:
(WebCore::CompositeEditCommand::deleteInsignificantText): Ditto.
* editing/SelectionController.cpp:
(WebCore::SelectionController::debugRenderer): Ditto.
* editing/TextIterator.cpp:
(WebCore::TextIterator::handleTextNode): Ditto.
(WebCore::TextIterator::handleTextBox): Ditto.
(WebCore::TextIterator::emitText): Ditto.
(WebCore::SimplifiedBackwardsTextIterator::handleTextNode): Ditto.
* editing/VisiblePosition.cpp: Added include of FloatQuad.h now that it's
no longer included in RenderObject.h.
* inspector/InspectorController.cpp: Ditto.
* page/Frame.cpp: Ditto.
* rendering/RenderBox.cpp: Ditto.
* rendering/RenderInline.cpp: Ditto.
* rendering/RenderPath.cpp: Ditto.
* rendering/RenderSVGContainer.cpp: Ditto.
* rendering/RenderSVGImage.cpp: Ditto.
* rendering/RenderSVGInlineText.cpp: Ditto.
* rendering/RenderSVGTSpan.cpp: Ditto.
* rendering/RenderSVGText.cpp: Ditto.
* rendering/RenderSVGTextPath.cpp: Ditto.
* rendering/RenderTableCell.cpp: Ditto.
* rendering/RenderView.cpp: Ditto.
* editing/visible_units.cpp:
(WebCore::startPositionForLine): Use function members instead of data
members of InlineTextBox.
(WebCore::endPositionForLine): Ditto.
(WebCore::startOfParagraph): Use toRenderText.
(WebCore::endOfParagraph): Ditto.
* page/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::accessibilityIsIgnored): Use toRenderText.
* rendering/InlineFlowBox.cpp:
(WebCore::InlineFlowBox::placeBoxesHorizontally): Ditto.
* rendering/InlineTextBox.cpp:
(WebCore::InlineTextBox::deleteLine): Ditto.
(WebCore::InlineTextBox::extractLine): Ditto.
(WebCore::InlineTextBox::attachLine): Ditto.
(WebCore::InlineTextBox::placeEllipsisBox): Ditto.
(WebCore::InlineTextBox::paintDecoration): Ditto.
(WebCore::InlineTextBox::paintCompositionUnderline): Ditto.
(WebCore::InlineTextBox::offsetForPosition): Ditto.
(WebCore::InlineTextBox::positionForOffset): Ditto.
* rendering/InlineTextBox.h: Made most members private. Use toRenderText.
* rendering/RenderArena.cpp:
(WebCore::RenderArena::allocate): Use static_cast instead of C-style cast.
(WebCore::RenderArena::free): Ditto.
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::addContinuationWithOutline): Use ListHashSet<RenderFlow*>
instead of RenderFlowSequencedSet.
(WebCore::RenderBlock::paintContinuationOutlines): Ditto.
(WebCore::stripTrailingSpace): Ditto.
(WebCore::RenderBlock::calcInlinePrefWidths): Ditto.
(WebCore::RenderBlock::updateFirstLetter): Ditto.
* rendering/RenderContainer.cpp:
(WebCore::RenderContainer::addChild): Use toRenderText.
* rendering/RenderFlow.cpp:
(WebCore::RenderFlow::dirtyLinesFromChangedChild): Use ListHashSet<RenderFlow*>
instead of RenderFlowSequencedSet.
(WebCore::RenderFlow::paintLines): Ditto.
* rendering/RenderMenuList.cpp: Removed some unneeded includes.
* rendering/RenderMenuList.h: Added now-needed forward declaration of RenderText.
Made more members private.
* rendering/RenderObject.cpp: Updated includes.
(WebCore::RenderObject::isEditable): Use toRenderText.
(WebCore::RenderObject::positionForPoint): Made non-inline so we wouldn't have to
include VisiblePosition.h in the header just for this.
* rendering/RenderObject.h: Removed unneeded includes and forward declarations.
Changed special vertical position values to be constants rather than an enum.
Eliminated RenderFlowSequencedSet, and changed clients to use ListHashSet<RenderFlow*>.
* rendering/RenderText.cpp:
(WebCore::RenderText::findNextInlineTextBox): Use function members instead of
data members of InlineTextBox.
(WebCore::RenderText::positionForCoordinates): Ditto.
(WebCore::isInlineFlowOrEmptyText): Use toRenderText.
(WebCore::RenderText::previousCharacter): Use function members instead of
data members of InlineTextBox.
(WebCore::RenderText::position): Ditto.
(WebCore::RenderText::caretMinOffset): Ditto.
(WebCore::RenderText::caretMaxOffset): Ditto.
(WebCore::RenderText::caretMaxRenderedOffset): Ditto.
* rendering/RenderText.h: Added definition of toRenderText.
* rendering/RenderTextControl.cpp:
(WebCore::RenderTextControl::textWithHardLineBreaks): Use toRenderText.
* rendering/RenderTreeAsText.cpp:
(WebCore::operator<<): Use toRenderText and toRenderBox.
(WebCore::writeTextRun): Ditto.
(WebCore::write): Ditto.
* rendering/bidi.cpp:
(WebCore::InlineIterator::increment): Use toRenderText.
(WebCore::InlineIterator::current): Ditto.
(WebCore::checkMidpoints): Ditto.
(WebCore::RenderBlock::computeHorizontalPositionsForLine): Ditto.
(WebCore::RenderBlock::layoutInlineChildren): Ditto.
(WebCore::RenderBlock::determineStartPosition): Ditto.
(WebCore::shouldSkipWhitespaceAfterStartObject): Ditto.
(WebCore::RenderBlock::findNextLineBreak): Ditto.
WebKit/mac:
2009-01-25 Darin Adler <darin@apple.com>
Reviewed by Sam Weinig.
Bug 23522: use checked casts for render tree
https://bugs.webkit.org/show_bug.cgi?id=23522
Step one: RenderText.
* WebView/WebRenderNode.mm:
(copyRenderNode): Use toRenderText.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@40229 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/rendering/bidi.cpp b/WebCore/rendering/bidi.cpp
index 199396f..53fad27 100644
--- a/WebCore/rendering/bidi.cpp
+++ b/WebCore/rendering/bidi.cpp
@@ -278,7 +278,7 @@
return;
if (obj->isText()) {
pos++;
- if (pos >= static_cast<RenderText*>(obj)->textLength()) {
+ if (pos >= toRenderText(obj)->textLength()) {
obj = bidiNext(block, obj, resolver);
pos = 0;
nextBreakablePosition = -1;
@@ -306,7 +306,7 @@
if (!obj || !obj->isText())
return 0;
- RenderText* text = static_cast<RenderText*>(obj);
+ RenderText* text = toRenderText(obj);
if (pos >= text->textLength())
return 0;
@@ -358,12 +358,12 @@
if (endpoint.obj->style()->collapseWhiteSpace()) {
if (endpoint.obj->isText()) {
// Don't shave a character off the endpoint if it was from a soft hyphen.
- RenderText* textObj = static_cast<RenderText*>(endpoint.obj);
+ RenderText* textObj = toRenderText(endpoint.obj);
if (endpoint.pos + 1 < textObj->textLength()) {
if (textObj->characters()[endpoint.pos+1] == softHyphen)
return;
} else if (startpoint.obj->isText()) {
- RenderText *startText = static_cast<RenderText*>(startpoint.obj);
+ RenderText *startText = toRenderText(startpoint.obj);
if (startText->textLength() && startText->characters()[0] == softHyphen)
return;
}
@@ -578,7 +578,7 @@
// correct static x position. They have no effect on the width.
// Similarly, line break boxes have no effect on the width.
if (r->m_object->isText()) {
- RenderText* rt = static_cast<RenderText*>(r->m_object);
+ RenderText* rt = toRenderText(r->m_object);
if (textAlign == JUSTIFY && r != trailingSpaceRun) {
const UChar* characters = rt->characters();
@@ -688,7 +688,7 @@
int spaceAdd = 0;
if (r->m_object->isText() && !r->m_compact) {
unsigned spaces = 0;
- const UChar* characters = static_cast<RenderText*>(r->m_object)->characters();
+ const UChar* characters = toRenderText(r->m_object)->characters();
for (int i = r->m_start; i < r->m_stop; i++) {
UChar c = characters[i];
if (c == ' ' || c == '\n' || c == '\t')
@@ -963,7 +963,7 @@
trailingSpaceRun = resolver.logicallyLastRun();
RenderObject* lastObject = trailingSpaceRun->m_object;
if (lastObject->isText()) {
- RenderText* lastText = static_cast<RenderText*>(lastObject);
+ RenderText* lastText = toRenderText(lastObject);
const UChar* characters = lastText->characters();
int firstSpace = trailingSpaceRun->stop();
while (firstSpace > trailingSpaceRun->start()) {
@@ -1211,7 +1211,7 @@
// We have a dirty line.
if (RootInlineBox* prevRootBox = curr->prevRootBox()) {
// We have a previous line.
- if (!dirtiedByFloat && (!prevRootBox->endsWithBreak() || prevRootBox->lineBreakObj()->isText() && prevRootBox->lineBreakPos() >= static_cast<RenderText*>(prevRootBox->lineBreakObj())->textLength()))
+ if (!dirtiedByFloat && (!prevRootBox->endsWithBreak() || prevRootBox->lineBreakObj()->isText() && prevRootBox->lineBreakPos() >= toRenderText(prevRootBox->lineBreakObj())->textLength()))
// The previous line didn't break cleanly or broke at a newline
// that has been deleted, so treat it as dirty too.
curr = prevRootBox;
@@ -1531,8 +1531,8 @@
static bool shouldSkipWhitespaceAfterStartObject(RenderBlock* block, RenderObject* o)
{
RenderObject* next = bidiNext(block, o);
- if (next && !next->isBR() && next->isText() && static_cast<RenderText*>(next)->textLength() > 0) {
- RenderText* nextText = static_cast<RenderText*>(next);
+ if (next && !next->isBR() && next->isText() && toRenderText(next)->textLength() > 0) {
+ RenderText* nextText = toRenderText(next);
UChar nextChar = nextText->characters()[0];
if (nextText->style()->isCollapsibleWhiteSpace(nextChar)) {
addMidpoint(InlineIterator(0, o, 0));
@@ -1768,7 +1768,7 @@
if (!pos)
appliedStartWidth = false;
- RenderText* t = static_cast<RenderText*>(o);
+ RenderText* t = toRenderText(o);
int strlen = t->textLength();
int len = strlen - pos;
@@ -1815,7 +1815,7 @@
if (pos)
beforeSoftHyphen = InlineIterator(0, o, pos - 1);
else
- beforeSoftHyphen = InlineIterator(0, last, last->isText() ? static_cast<RenderText*>(last)->textLength() - 1 : 0);
+ beforeSoftHyphen = InlineIterator(0, last, last->isText() ? toRenderText(last)->textLength() - 1 : 0);
// Two consecutive soft hyphens. Avoid overlapping midpoints.
if (sNumMidpoints && smidpoints->at(sNumMidpoints - 1).obj == o && smidpoints->at(sNumMidpoints - 1).pos == pos)
sNumMidpoints--;
@@ -1905,7 +1905,7 @@
}
}
if (lineWasTooWide || w + tmpW > width) {
- if (lBreak.obj && shouldPreserveNewline(lBreak.obj) && lBreak.obj->isText() && !static_cast<RenderText*>(lBreak.obj)->isWordBreak() && static_cast<RenderText*>(lBreak.obj)->characters()[lBreak.pos] == '\n') {
+ if (lBreak.obj && shouldPreserveNewline(lBreak.obj) && lBreak.obj->isText() && !toRenderText(lBreak.obj)->isWordBreak() && toRenderText(lBreak.obj)->characters()[lBreak.pos] == '\n') {
if (!stoppedIgnoringSpaces && pos > 0) {
// We need to stop right before the newline and then start up again.
addMidpoint(InlineIterator(0, o, pos - 1)); // Stop
@@ -2026,7 +2026,7 @@
checkForBreak = true;
else {
checkForBreak = false;
- RenderText* nextText = static_cast<RenderText*>(next);
+ RenderText* nextText = toRenderText(next);
if (nextText->textLength()) {
UChar c = nextText->characters()[0];
if (c == ' ' || c == '\t' || (c == '\n' && !shouldPreserveNewline(next)))
@@ -2150,7 +2150,7 @@
// lBreak.pos--;
else if (lBreak.obj == 0 && trailingSpaceObject->isText()) {
// Add a new end midpoint that stops right at the very end.
- RenderText* text = static_cast<RenderText *>(trailingSpaceObject);
+ RenderText* text = toRenderText(trailingSpaceObject);
unsigned length = text->textLength();
unsigned pos = length >= 2 ? length - 2 : UINT_MAX;
InlineIterator endMid(0, trailingSpaceObject, pos);
@@ -2170,7 +2170,7 @@
if (lBreak.obj && lBreak.pos >= 2 && lBreak.obj->isText()) {
// For soft hyphens on line breaks, we have to chop out the midpoints that made us
// ignore the hyphen so that it will render at the end of the line.
- UChar c = static_cast<RenderText*>(lBreak.obj)->characters()[lBreak.pos-1];
+ UChar c = toRenderText(lBreak.obj)->characters()[lBreak.pos-1];
if (c == softHyphen)
chopMidpointsAt(lBreak.obj, lBreak.pos-2);
}