summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/rendering/RenderDetails.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-06-02 12:07:03 +0100
committerBen Murdoch <benm@google.com>2011-06-10 10:47:21 +0100
commit2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch)
treee4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebCore/rendering/RenderDetails.cpp
parent87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff)
downloadexternal_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.zip
external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.gz
external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.bz2
Merge WebKit at r84325: Initial merge by git.
Change-Id: Ic1a909300ecc0a13ddc6b4e784371d2ac6e3d59b
Diffstat (limited to 'Source/WebCore/rendering/RenderDetails.cpp')
-rw-r--r--Source/WebCore/rendering/RenderDetails.cpp176
1 files changed, 1 insertions, 175 deletions
diff --git a/Source/WebCore/rendering/RenderDetails.cpp b/Source/WebCore/rendering/RenderDetails.cpp
index be2b435..6b5a1b2 100644
--- a/Source/WebCore/rendering/RenderDetails.cpp
+++ b/Source/WebCore/rendering/RenderDetails.cpp
@@ -24,10 +24,6 @@
#include "CSSStyleSelector.h"
#include "HTMLDetailsElement.h"
#include "HTMLNames.h"
-#include "LocalizedStrings.h"
-#include "RenderDetailsMarker.h"
-#include "RenderTextFragment.h"
-#include "RenderView.h"
namespace WebCore {
@@ -37,23 +33,10 @@ RenderDetails::RenderDetails(Node* node)
: RenderBlock(node)
, m_summaryBlock(0)
, m_contentBlock(0)
- , m_defaultSummaryBlock(0)
- , m_defaultSummaryText(0)
- , m_marker(0)
, m_mainSummary(0)
{
}
-void RenderDetails::destroy()
-{
- if (m_marker) {
- m_marker->destroy();
- m_marker = 0;
- }
-
- RenderBlock::destroy();
-}
-
RenderBlock* RenderDetails::summaryBlock()
{
if (!m_summaryBlock) {
@@ -106,26 +89,9 @@ void RenderDetails::removeChild(RenderObject* oldChild)
ASSERT_NOT_REACHED();
}
-void RenderDetails::setMarkerStyle()
-{
- if (m_marker) {
- RefPtr<RenderStyle> markerStyle = RenderStyle::create();
- markerStyle->inheritFrom(style());
- m_marker->setStyle(markerStyle.release());
- }
-}
-
void RenderDetails::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
{
RenderBlock::styleDidChange(diff, oldStyle);
-
- if (m_defaultSummaryBlock) {
- m_defaultSummaryBlock->setStyle(createSummaryStyle());
- m_defaultSummaryText->setStyle(m_defaultSummaryBlock->style());
- }
-
- setMarkerStyle();
-
// Ensure that if we ended up being inline that we set our replaced flag
// so that we're treated like an inline-block.
setReplaced(isInline());
@@ -144,11 +110,6 @@ RenderObject* RenderDetails::getRenderPosition(RenderObject* object)
return element ? element->renderer() : 0;
}
-void RenderDetails::markerDestroyed()
-{
- m_marker = 0;
-}
-
void RenderDetails::summaryDestroyed(RenderObject* summary)
{
if (summary == m_mainSummary)
@@ -157,14 +118,6 @@ void RenderDetails::summaryDestroyed(RenderObject* summary)
void RenderDetails::moveSummaryToContents()
{
- if (m_defaultSummaryBlock) {
- ASSERT(!m_mainSummary);
- m_defaultSummaryBlock->destroy();
- m_defaultSummaryBlock = 0;
- m_defaultSummaryText = 0;
- return;
- }
-
if (!m_mainSummary)
return;
@@ -173,12 +126,6 @@ void RenderDetails::moveSummaryToContents()
m_mainSummary = 0;
}
-PassRefPtr<RenderStyle> RenderDetails::createSummaryStyle()
-{
- RefPtr<HTMLElement> summary(HTMLElement::create(summaryTag, document()));
- return document()->styleSelector()->styleForElement(summary.get(), style(), true);
-}
-
void RenderDetails::replaceMainSummary(RenderObject* newSummary)
{
ASSERT(newSummary);
@@ -191,68 +138,20 @@ void RenderDetails::replaceMainSummary(RenderObject* newSummary)
m_mainSummary = newSummary;
}
-void RenderDetails::createDefaultSummary()
-{
- if (m_defaultSummaryBlock)
- return;
-
- moveSummaryToContents();
-
- m_defaultSummaryBlock = summaryBlock()->createAnonymousBlock();
- m_defaultSummaryBlock->setStyle(createSummaryStyle());
-
- m_defaultSummaryText = new (renderArena()) RenderTextFragment(document(), defaultDetailsSummaryText().impl());
- m_defaultSummaryText->setStyle(m_defaultSummaryBlock->style());
- m_defaultSummaryBlock->addChild(m_defaultSummaryText);
-
- summaryBlock()->addChild(m_defaultSummaryBlock);
-}
-
void RenderDetails::checkMainSummary()
{
if (!node() || !node()->hasTagName(detailsTag))
return;
Node* mainSummaryNode = static_cast<HTMLDetailsElement*>(node())->mainSummary();
-
- if (!mainSummaryNode || !mainSummaryNode->renderer() || mainSummaryNode->renderer()->isFloatingOrPositioned())
- createDefaultSummary();
- else
+ if (mainSummaryNode && mainSummaryNode->renderer())
replaceMainSummary(mainSummaryNode->renderer());
-
}
void RenderDetails::layout()
{
- ASSERT(needsLayout());
-
checkMainSummary();
- ASSERT(m_summaryBlock);
-
- if (!m_marker) {
- m_marker = new (renderArena()) RenderDetailsMarker(this);
- setMarkerStyle();
- }
- updateMarkerLocation();
-
RenderBlock::layout();
-
- m_interactiveArea = m_summaryBlock->frameRect();
-
- // FIXME: the following code will not be needed once absoluteToLocal get patched to handle flipped blocks writing modes.
- switch (style()->writingMode()) {
- case TopToBottomWritingMode:
- case LeftToRightWritingMode:
- break;
- case RightToLeftWritingMode: {
- m_interactiveArea.setX(width() - m_interactiveArea.x() - m_interactiveArea.width());
- break;
- }
- case BottomToTopWritingMode: {
- m_interactiveArea.setY(height() - m_interactiveArea.y() - m_interactiveArea.height());
- break;
- }
- }
}
bool RenderDetails::isOpen() const
@@ -260,77 +159,4 @@ bool RenderDetails::isOpen() const
return node() && node()->isElementNode() ? !static_cast<Element*>(node())->getAttribute(openAttr).isNull() : false;
}
-RenderObject* RenderDetails::getParentOfFirstLineBox(RenderBlock* curr)
-{
- RenderObject* firstChild = curr->firstChild();
- if (!firstChild)
- return 0;
-
- for (RenderObject* currChild = firstChild; currChild; currChild = currChild->nextSibling()) {
- if (currChild == m_marker)
- continue;
-
- if (currChild->isInline() && (!currChild->isRenderInline() || curr->generatesLineBoxesForInlineChild(currChild)))
- return curr;
-
- if (currChild->isFloating() || currChild->isPositioned())
- continue;
-
- if (currChild->isTable() || !currChild->isRenderBlock() || (currChild->isBox() && toRenderBox(currChild)->isWritingModeRoot()))
- break;
-
- if (currChild->isDetails())
- break;
-
- RenderObject* lineBox = getParentOfFirstLineBox(toRenderBlock(currChild));
- if (lineBox)
- return lineBox;
- }
-
- return 0;
-}
-
-RenderObject* RenderDetails::firstNonMarkerChild(RenderObject* parent)
-{
- RenderObject* result = parent->firstChild();
- while (result && result->isDetailsMarker())
- result = result->nextSibling();
- return result;
-}
-
-void RenderDetails::updateMarkerLocation()
-{
- // Sanity check the location of our marker.
- if (m_marker) {
- RenderObject* markerPar = m_marker->parent();
- RenderObject* lineBoxParent = getParentOfFirstLineBox(m_summaryBlock);
- if (!lineBoxParent) {
- // If the marker is currently contained inside an anonymous box,
- // then we are the only item in that anonymous box (since no line box
- // parent was found). It's ok to just leave the marker where it is
- // in this case.
- if (markerPar && markerPar->isAnonymousBlock())
- lineBoxParent = markerPar;
- else
- lineBoxParent = m_summaryBlock;
- }
-
- if (markerPar != lineBoxParent || m_marker->preferredLogicalWidthsDirty()) {
- // Removing and adding the marker can trigger repainting in
- // containers other than ourselves, so we need to disable LayoutState.
- view()->disableLayoutState();
- m_marker->remove();
- if (!lineBoxParent)
- lineBoxParent = m_summaryBlock;
- lineBoxParent->addChild(m_marker, firstNonMarkerChild(lineBoxParent));
-
- if (m_marker->preferredLogicalWidthsDirty())
- m_marker->computePreferredLogicalWidths();
-
- view()->enableLayoutState();
- }
- }
-}
-
} // namespace WebCore
-