17242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 27242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Use of this source code is governed by a BSD-style license that can be 37242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// found in the LICENSE file. 47242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 57242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "config.h" 67242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/paint/BlockFlowPainter.h" 77242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 87242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/FloatingObjects.h" 97242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/PaintInfo.h" 107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/RenderBlockFlow.h" 117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccinamespace blink { 137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid BlockFlowPainter::paintFloats(PaintInfo& paintInfo, const LayoutPoint& paintOffset, bool preservePhase) 157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!m_renderBlockFlow.floatingObjects()) 177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci const FloatingObjectSet& floatingObjectSet = m_renderBlockFlow.floatingObjects()->set(); 207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci FloatingObjectSetIterator end = floatingObjectSet.end(); 217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (FloatingObjectSetIterator it = floatingObjectSet.begin(); it != end; ++it) { 227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci FloatingObject* floatingObject = it->get(); 237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Only paint the object if our m_shouldPaint flag is set. 247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (floatingObject->shouldPaint() && !floatingObject->renderer()->hasSelfPaintingLayer()) { 257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci PaintInfo currentPaintInfo(paintInfo); 267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci currentPaintInfo.phase = preservePhase ? paintInfo.phase : PaintPhaseBlockBackground; 277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: LayoutPoint version of xPositionForFloatIncludingMargin would make this much cleaner. 287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci LayoutPoint childPoint = m_renderBlockFlow.flipFloatForWritingModeForChild( 297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci floatingObject, LayoutPoint(paintOffset.x() 307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci + m_renderBlockFlow.xPositionForFloatIncludingMargin(floatingObject) - floatingObject->renderer()->x(), paintOffset.y() 317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci + m_renderBlockFlow.yPositionForFloatIncludingMargin(floatingObject) - floatingObject->renderer()->y())); 327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci floatingObject->renderer()->paint(currentPaintInfo, childPoint); 337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!preservePhase) { 347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci currentPaintInfo.phase = PaintPhaseChildBlockBackgrounds; 357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci floatingObject->renderer()->paint(currentPaintInfo, childPoint); 367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci currentPaintInfo.phase = PaintPhaseFloat; 377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci floatingObject->renderer()->paint(currentPaintInfo, childPoint); 387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci currentPaintInfo.phase = PaintPhaseForeground; 397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci floatingObject->renderer()->paint(currentPaintInfo, childPoint); 407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci currentPaintInfo.phase = PaintPhaseOutline; 417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci floatingObject->renderer()->paint(currentPaintInfo, childPoint); 427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink 48