1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "config.h"
#include "core/rendering/RenderMultiColumnSpannerPlaceholder.h"
namespace blink {
RenderMultiColumnSpannerPlaceholder* RenderMultiColumnSpannerPlaceholder::createAnonymous(RenderStyle* parentStyle, RenderBox* rendererInFlowThread)
{
RenderMultiColumnSpannerPlaceholder* newSpanner = new RenderMultiColumnSpannerPlaceholder(rendererInFlowThread);
Document& document = rendererInFlowThread->document();
newSpanner->setDocumentForAnonymous(&document);
RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(parentStyle, BLOCK);
newSpanner->setStyle(newStyle);
return newSpanner;
}
RenderMultiColumnSpannerPlaceholder::RenderMultiColumnSpannerPlaceholder(RenderBox* rendererInFlowThread)
: RenderBox(0)
, m_rendererInFlowThread(rendererInFlowThread)
{
}
void RenderMultiColumnSpannerPlaceholder::spannerWillBeRemoved()
{
ASSERT(m_rendererInFlowThread);
RenderBox* renderer = m_rendererInFlowThread;
m_rendererInFlowThread = 0;
flowThread()->flowThreadDescendantWillBeRemoved(renderer);
// |this| should be destroyed by now.
}
void RenderMultiColumnSpannerPlaceholder::willBeRemovedFromTree()
{
if (m_rendererInFlowThread)
m_rendererInFlowThread->clearSpannerPlaceholder();
RenderBox::willBeRemovedFromTree();
}
bool RenderMultiColumnSpannerPlaceholder::needsPreferredWidthsRecalculation() const
{
return m_rendererInFlowThread->needsPreferredWidthsRecalculation();
}
void RenderMultiColumnSpannerPlaceholder::layout()
{
ASSERT(needsLayout());
// FIXME: actual spanner positioning isn't implemented yet. Just set it to 0,0 for consistency
// (in case the spanner used to be something else that was laid out properly).
m_rendererInFlowThread->setLogicalTop(LayoutUnit());
m_rendererInFlowThread->setLogicalLeft(LayoutUnit());
// Lay out the actual column-span:all element.
m_rendererInFlowThread->layoutIfNeeded();
clearNeedsLayout();
}
void RenderMultiColumnSpannerPlaceholder::invalidateTreeIfNeeded(const PaintInvalidationState& paintInvalidationState)
{
PaintInvalidationState newPaintInvalidationState(paintInvalidationState, *this, paintInvalidationState.paintInvalidationContainer());
m_rendererInFlowThread->invalidateTreeIfNeeded(newPaintInvalidationState);
RenderBox::invalidateTreeIfNeeded(paintInvalidationState);
}
const char* RenderMultiColumnSpannerPlaceholder::renderName() const
{
return "RenderMultiColumnSpannerPlaceholder";
}
}
|