15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef InlineFlowBox_h 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define InlineFlowBox_h 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/InlineBox.h" 25197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/rendering/RenderObjectInlines.h" 2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderOverflow.h" 2753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/style/ShadowData.h" 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HitTestRequest; 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HitTestResult; 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InlineTextBox; 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderLineBoxList; 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SimpleFontData; 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class VerticalPositionCache; 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct GlyphOverflow; 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef HashMap<const InlineTextBox*, pair<Vector<const SimpleFontData*>, GlyphOverflow> > GlyphOverflowAndFallbackFontsMap; 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InlineFlowBox : public InlineBox { 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 44d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) InlineFlowBox(RenderObject& obj) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : InlineBox(obj) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_firstChild(0) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_lastChild(0) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_prevLineBox(0) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_nextLineBox(0) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_includeLogicalLeftEdge(false) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_includeLogicalRightEdge(false) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_descendantsHaveSameLineHeightAndBaseline(true) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_baselineType(AlphabeticBaseline) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasAnnotationsBefore(false) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasAnnotationsAfter(false) 56f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , m_lineBreakBidiStatusEor(WTF::Unicode::LeftToRight) 57f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , m_lineBreakBidiStatusLastStrong(WTF::Unicode::LeftToRight) 58f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , m_lineBreakBidiStatusLast(WTF::Unicode::LeftToRight) 59197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(ASSERT) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasBadChildList(false) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Internet Explorer and Firefox always create a marker for list items, even when the list-style-type is none. We do not make a marker 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // in the list-style-type: none case, since it is wasteful to do so. However, in order to match other browsers we have to pretend like 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // an invisible marker exists. The side effect of having an invisible marker is that the quirks mode behavior of shrinking lines with no 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // text children must not apply. This change also means that gaps will exist between image bullet list items. Even when the list bullet 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // is an image, the line is still considered to be immune from the quirk. 68d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_hasTextChildren = obj.style()->display() == LIST_ITEM; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_hasTextDescendants = m_hasTextChildren; 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 72197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(ASSERT) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~InlineFlowBox(); 74197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#endif 7502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 76197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#ifndef NDEBUG 7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void showLineTreeAndMark(const InlineBox* = 0, const char* = 0, const InlineBox* = 0, const char* = 0, const RenderObject* = 0, int = 0) const OVERRIDE; 7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual const char* boxName() const OVERRIDE; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InlineFlowBox* prevLineBox() const { return m_prevLineBox; } 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InlineFlowBox* nextLineBox() const { return m_nextLineBox; } 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setNextLineBox(InlineFlowBox* n) { m_nextLineBox = n; } 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setPreviousLineBox(InlineFlowBox* p) { m_prevLineBox = p; } 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InlineBox* firstChild() const { checkConsistency(); return m_firstChild; } 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InlineBox* lastChild() const { checkConsistency(); return m_lastChild; } 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) virtual bool isLeaf() const OVERRIDE FINAL { return false; } 9002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InlineBox* firstLeafChild() const; 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InlineBox* lastLeafChild() const; 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) typedef void (*CustomInlineBoxRangeReverse)(void* userData, Vector<InlineBox*>::iterator first, Vector<InlineBox*>::iterator last); 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void collectLeafBoxesInLogicalOrder(Vector<InlineBox*>&, CustomInlineBoxRangeReverse customReverseImplementation = 0, void* userData = 0) const; 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) virtual void setConstructed() OVERRIDE FINAL 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InlineBox::setConstructed(); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (InlineBox* child = firstChild(); child; child = child->nextOnLine()) 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child->setConstructed(); 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void addToLine(InlineBox* child); 105f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) virtual void deleteLine() OVERRIDE FINAL; 10653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) virtual void extractLine() OVERRIDE FINAL; 10753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) virtual void attachLine() OVERRIDE FINAL; 10809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void adjustPosition(float dx, float dy) OVERRIDE; 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void extractLineBoxFromRenderObject(); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void attachLineBoxToRenderObject(); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void removeLineBoxFromRenderObject(); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void clearTruncation() OVERRIDE; 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect roundedFrameRect() const; 11702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void paint(PaintInfo&, const LayoutPoint&, LayoutUnit lineTop, LayoutUnit lineBottom) OVERRIDE; 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, LayoutUnit lineTop, LayoutUnit lineBottom) OVERRIDE; 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool boxShadowCanBeAppliedToBackground(const FillLayer&) const; 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual RenderLineBoxList* rendererLineBoxes() const; 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // logicalLeft = left in a horizontal line and top in a vertical line. 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit marginBorderPaddingLogicalLeft() const { return marginLogicalLeft() + borderLogicalLeft() + paddingLogicalLeft(); } 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit marginBorderPaddingLogicalRight() const { return marginLogicalRight() + borderLogicalRight() + paddingLogicalRight(); } 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit marginLogicalLeft() const 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!includeLogicalLeftEdge()) 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isHorizontal() ? boxModelObject()->marginLeft() : boxModelObject()->marginTop(); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit marginLogicalRight() const 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!includeLogicalRightEdge()) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isHorizontal() ? boxModelObject()->marginRight() : boxModelObject()->marginBottom(); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int borderLogicalLeft() const 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!includeLogicalLeftEdge()) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 144d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return isHorizontal() ? renderer().style(isFirstLineStyle())->borderLeftWidth() : renderer().style(isFirstLineStyle())->borderTopWidth(); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int borderLogicalRight() const 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!includeLogicalRightEdge()) 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 150d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return isHorizontal() ? renderer().style(isFirstLineStyle())->borderRightWidth() : renderer().style(isFirstLineStyle())->borderBottomWidth(); 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int paddingLogicalLeft() const 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!includeLogicalLeftEdge()) 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isHorizontal() ? boxModelObject()->paddingLeft() : boxModelObject()->paddingTop(); 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int paddingLogicalRight() const 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!includeLogicalRightEdge()) 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isHorizontal() ? boxModelObject()->paddingRight() : boxModelObject()->paddingBottom(); 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool includeLogicalLeftEdge() const { return m_includeLogicalLeftEdge; } 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool includeLogicalRightEdge() const { return m_includeLogicalRightEdge; } 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setEdges(bool includeLeft, bool includeRight) 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_includeLogicalLeftEdge = includeLeft; 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_includeLogicalRightEdge = includeRight; 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Helper functions used during line construction and placement. 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void determineSpacingForFlowBoxes(bool lastLine, bool isLogicallyLastRunWrapped, RenderObject* logicallyLastRunRenderer); 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit getFlowSpacingLogicalWidth(); 176c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) float placeBoxesInInlineDirection(float logicalLeft, bool& needsWordSpacing); 177c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) float placeBoxRangeInInlineDirection(InlineBox* firstChild, InlineBox* lastChild, 178c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) float& logicalLeft, float& minLogicalLeft, float& maxLogicalRight, bool& needsWordSpacing); 179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void beginPlacingBoxRangesInInlineDirection(float logicalLeft) { setLogicalLeft(logicalLeft); } 180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void endPlacingBoxRangesInInlineDirection(float logicalLeft, float logicalRight, float minLogicalLeft, float maxLogicalRight) 181926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 182926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setLogicalWidth(logicalRight - logicalLeft); 183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (knownToHaveNoOverflow() && (minLogicalLeft < logicalLeft || maxLogicalRight > logicalRight)) 184926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) clearKnownToHaveNoOverflow(); 185926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 186926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void computeLogicalBoxHeights(RootInlineBox*, LayoutUnit& maxPositionTop, LayoutUnit& maxPositionBottom, 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int& maxAscent, int& maxDescent, bool& setMaxAscent, bool& setMaxDescent, 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool strictMode, GlyphOverflowAndFallbackFontsMap&, FontBaseline, VerticalPositionCache&); 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent, 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int maxPositionTop, int maxPositionBottom); 192197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void placeBoxesInBlockDirection(LayoutUnit logicalTop, LayoutUnit maxHeight, int maxAscent, bool strictMode, LayoutUnit& lineTop, LayoutUnit& lineBottom, LayoutUnit& selectionBottom, bool& setLineTop, 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit& lineTopIncludingMargins, LayoutUnit& lineBottomIncludingMargins, bool& hasAnnotationsBefore, bool& hasAnnotationsAfter, FontBaseline); 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void flipLinesInBlockDirection(LayoutUnit lineTop, LayoutUnit lineBottom); 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool requiresIdeographicBaseline(const GlyphOverflowAndFallbackFontsMap&) const; 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit computeOverAnnotationAdjustment(LayoutUnit allowedPosition) const; 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit computeUnderAnnotationAdjustment(LayoutUnit allowedPosition) const; 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void computeOverflow(LayoutUnit lineTop, LayoutUnit lineBottom, GlyphOverflowAndFallbackFontsMap&); 20102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 202f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu void removeChild(InlineBox* child, MarkLineBoxes); 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual RenderObject::SelectionState selectionState() const OVERRIDE; 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) virtual bool canAccommodateEllipsis(bool ltr, int blockEdge, int ellipsisWidth) const OVERRIDE FINAL; 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual float placeEllipsisBox(bool ltr, float blockLeftEdge, float blockRightEdge, float ellipsisWidth, float &truncatedWidth, bool&) OVERRIDE; 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasTextChildren() const { return m_hasTextChildren; } 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasTextDescendants() const { return m_hasTextDescendants; } 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHasTextChildren() { m_hasTextChildren = true; setHasTextDescendants(); } 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHasTextDescendants() { m_hasTextDescendants = true; } 21302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void checkConsistency() const; 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHasBadChildList(); 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Line visual and layout overflow are in the coordinate space of the block. This means that they aren't purely physical directions. 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // For horizontal-tb and vertical-lr they will match physical directions, but for horizontal-bt and vertical-rl, the top/bottom and left/right 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // respectively are flipped when compared to their physical counterparts. For example minX is on the left in vertical-lr, but it is on the right in vertical-rl. 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect layoutOverflowRect(LayoutUnit lineTop, LayoutUnit lineBottom) const 22102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch { 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_overflow ? m_overflow->layoutOverflowRect() : enclosingLayoutRect(frameRectIncludingLineHeight(lineTop, lineBottom)); 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalLeftLayoutOverflow() const 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_overflow ? (isHorizontal() ? m_overflow->layoutOverflowRect().x() : m_overflow->layoutOverflowRect().y()) : 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static_cast<LayoutUnit>(logicalLeft()); 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalRightLayoutOverflow() const 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_overflow ? (isHorizontal() ? m_overflow->layoutOverflowRect().maxX() : m_overflow->layoutOverflowRect().maxY()) : 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static_cast<LayoutUnit>(ceilf(logicalRight())); 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalTopLayoutOverflow(LayoutUnit lineTop) const 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_overflow) 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isHorizontal() ? m_overflow->layoutOverflowRect().y() : m_overflow->layoutOverflowRect().x(); 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return lineTop; 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalBottomLayoutOverflow(LayoutUnit lineBottom) const 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_overflow) 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isHorizontal() ? m_overflow->layoutOverflowRect().maxY() : m_overflow->layoutOverflowRect().maxX(); 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return lineBottom; 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect logicalLayoutOverflowRect(LayoutUnit lineTop, LayoutUnit lineBottom) const 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect result = layoutOverflowRect(lineTop, lineBottom); 249d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!renderer().isHorizontalWritingMode()) 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = result.transposedRect(); 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect visualOverflowRect(LayoutUnit lineTop, LayoutUnit lineBottom) const 25502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch { 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_overflow ? m_overflow->visualOverflowRect() : enclosingLayoutRect(frameRectIncludingLineHeight(lineTop, lineBottom)); 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalLeftVisualOverflow() const { return m_overflow ? (isHorizontal() ? m_overflow->visualOverflowRect().x() : m_overflow->visualOverflowRect().y()) : static_cast<LayoutUnit>(logicalLeft()); } 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalRightVisualOverflow() const { return m_overflow ? (isHorizontal() ? m_overflow->visualOverflowRect().maxX() : m_overflow->visualOverflowRect().maxY()) : static_cast<LayoutUnit>(ceilf(logicalRight())); } 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalTopVisualOverflow(LayoutUnit lineTop) const 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_overflow) 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isHorizontal() ? m_overflow->visualOverflowRect().y() : m_overflow->visualOverflowRect().x(); 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return lineTop; 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalBottomVisualOverflow(LayoutUnit lineBottom) const 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_overflow) 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isHorizontal() ? m_overflow->visualOverflowRect().maxY() : m_overflow->visualOverflowRect().maxX(); 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return lineBottom; 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect logicalVisualOverflowRect(LayoutUnit lineTop, LayoutUnit lineBottom) const 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect result = visualOverflowRect(lineTop, lineBottom); 275d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!renderer().isHorizontalWritingMode()) 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = result.transposedRect(); 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setOverflowFromLogicalRects(const LayoutRect& logicalLayoutOverflow, const LayoutRect& logicalVisualOverflow, LayoutUnit lineTop, LayoutUnit lineBottom); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatRect frameRectIncludingLineHeight(LayoutUnit lineTop, LayoutUnit lineBottom) const 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isHorizontal()) 285d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return FloatRect(m_topLeft.x(), lineTop.toFloat(), width(), (lineBottom - lineTop).toFloat()); 286d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return FloatRect(lineTop.toFloat(), m_topLeft.y(), (lineBottom - lineTop).toFloat(), height()); 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 28802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatRect logicalFrameRectIncludingLineHeight(LayoutUnit lineTop, LayoutUnit lineBottom) const 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 291d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return FloatRect(logicalLeft(), lineTop.toFloat(), logicalWidth(), (lineBottom - lineTop).toFloat()); 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 29302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool descendantsHaveSameLineHeightAndBaseline() const { return m_descendantsHaveSameLineHeightAndBaseline; } 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearDescendantsHaveSameLineHeightAndBaseline() 29602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch { 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_descendantsHaveSameLineHeightAndBaseline = false; 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (parent() && parent()->descendantsHaveSameLineHeightAndBaseline()) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parent()->clearDescendantsHaveSameLineHeightAndBaseline(); 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void addBoxShadowVisualOverflow(LayoutRect& logicalVisualOverflow); 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void addBorderOutsetVisualOverflow(LayoutRect& logicalVisualOverflow); 30507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void addOutlineVisualOverflow(LayoutRect& logicalVisualOverflow); 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void addTextBoxVisualOverflow(InlineTextBox*, GlyphOverflowAndFallbackFontsMap&, LayoutRect& logicalVisualOverflow); 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void addReplacedChildOverflow(const InlineBox*, LayoutRect& logicalLayoutOverflow, LayoutRect& logicalVisualOverflow); 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void constrainToLineTopAndBottomIfNeeded(LayoutRect&) const; 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 310d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setLayoutOverflow(const LayoutRect&, const LayoutRect&); 311d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setVisualOverflow(const LayoutRect&, const LayoutRect&); 312d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<RenderOverflow> m_overflow; 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) virtual bool isInlineFlowBox() const OVERRIDE FINAL { return true; } 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InlineBox* m_firstChild; 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InlineBox* m_lastChild; 32002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InlineFlowBox* m_prevLineBox; // The previous box that also uses our RenderObject 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InlineFlowBox* m_nextLineBox; // The next box that also uses our RenderObject 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 324926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Maximum logicalTop among all children of an InlineFlowBox. Used to 325926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // calculate the offset for TextUnderlinePositionUnder. 32693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void computeMaxLogicalTop(float& maxLogicalTop) const; 32719cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_includeLogicalLeftEdge : 1; 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_includeLogicalRightEdge : 1; 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_hasTextChildren : 1; 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_hasTextDescendants : 1; 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_descendantsHaveSameLineHeightAndBaseline : 1; 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The following members are only used by RootInlineBox but moved here to keep the bits packed. 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Whether or not this line uses alphabetic or ideographic baselines by default. 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_baselineType : 1; // FontBaseline 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the line contains any ruby runs, then this will be true. 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_hasAnnotationsBefore : 1; 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_hasAnnotationsAfter : 1; 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_lineBreakBidiStatusEor : 5; // WTF::Unicode::Direction 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_lineBreakBidiStatusLastStrong : 5; // WTF::Unicode::Direction 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_lineBreakBidiStatusLast : 5; // WTF::Unicode::Direction 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // End of RootInlineBox-specific members. 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 351197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(ASSERT) 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_hasBadChildList : 1; 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 357a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)DEFINE_INLINE_BOX_TYPE_CASTS(InlineFlowBox); 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 359197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if !ENABLE(ASSERT) 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void InlineFlowBox::checkConsistency() const 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void InlineFlowBox::setHasBadChildList() 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 367197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(ASSERT) 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_hasBadChildList = true; 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 372c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Outside the WebCore namespace for ease of invocation from gdb. 376c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)void showTree(const blink::InlineFlowBox*); 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // InlineFlowBox_h 380