| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
| 5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
| 6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
| 7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
| 8 * | 8 * |
| 9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 class RenderLineBoxList; | 33 class RenderLineBoxList; |
| 34 class SimpleFontData; | 34 class SimpleFontData; |
| 35 class VerticalPositionCache; | 35 class VerticalPositionCache; |
| 36 | 36 |
| 37 struct GlyphOverflow; | 37 struct GlyphOverflow; |
| 38 | 38 |
| 39 typedef HashMap<const InlineTextBox*, pair<Vector<const SimpleFontData*>, GlyphO
verflow> > GlyphOverflowAndFallbackFontsMap; | 39 typedef HashMap<const InlineTextBox*, pair<Vector<const SimpleFontData*>, GlyphO
verflow> > GlyphOverflowAndFallbackFontsMap; |
| 40 | 40 |
| 41 class InlineFlowBox : public InlineBox { | 41 class InlineFlowBox : public InlineBox { |
| 42 public: | 42 public: |
| 43 InlineFlowBox(RenderObject* obj) | 43 InlineFlowBox(RenderObject& obj) |
| 44 : InlineBox(obj) | 44 : InlineBox(obj) |
| 45 , m_firstChild(0) | 45 , m_firstChild(0) |
| 46 , m_lastChild(0) | 46 , m_lastChild(0) |
| 47 , m_prevLineBox(0) | 47 , m_prevLineBox(0) |
| 48 , m_nextLineBox(0) | 48 , m_nextLineBox(0) |
| 49 , m_includeLogicalLeftEdge(false) | 49 , m_includeLogicalLeftEdge(false) |
| 50 , m_includeLogicalRightEdge(false) | 50 , m_includeLogicalRightEdge(false) |
| 51 , m_descendantsHaveSameLineHeightAndBaseline(true) | 51 , m_descendantsHaveSameLineHeightAndBaseline(true) |
| 52 , m_baselineType(AlphabeticBaseline) | 52 , m_baselineType(AlphabeticBaseline) |
| 53 , m_hasAnnotationsBefore(false) | 53 , m_hasAnnotationsBefore(false) |
| 54 , m_hasAnnotationsAfter(false) | 54 , m_hasAnnotationsAfter(false) |
| 55 #ifndef NDEBUG | 55 #ifndef NDEBUG |
| 56 , m_hasBadChildList(false) | 56 , m_hasBadChildList(false) |
| 57 #endif | 57 #endif |
| 58 { | 58 { |
| 59 // 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 | 59 // 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 |
| 60 // in the list-style-type: none case, since it is wasteful to do so. Ho
wever, in order to match other browsers we have to pretend like | 60 // in the list-style-type: none case, since it is wasteful to do so. Ho
wever, in order to match other browsers we have to pretend like |
| 61 // an invisible marker exists. The side effect of having an invisible m
arker is that the quirks mode behavior of shrinking lines with no | 61 // an invisible marker exists. The side effect of having an invisible m
arker is that the quirks mode behavior of shrinking lines with no |
| 62 // text children must not apply. This change also means that gaps will
exist between image bullet list items. Even when the list bullet | 62 // text children must not apply. This change also means that gaps will
exist between image bullet list items. Even when the list bullet |
| 63 // is an image, the line is still considered to be immune from the quirk
. | 63 // is an image, the line is still considered to be immune from the quirk
. |
| 64 m_hasTextChildren = obj->style()->display() == LIST_ITEM; | 64 m_hasTextChildren = obj.style()->display() == LIST_ITEM; |
| 65 m_hasTextDescendants = m_hasTextChildren; | 65 m_hasTextDescendants = m_hasTextChildren; |
| 66 } | 66 } |
| 67 | 67 |
| 68 #ifndef NDEBUG | 68 #ifndef NDEBUG |
| 69 virtual ~InlineFlowBox(); | 69 virtual ~InlineFlowBox(); |
| 70 | 70 |
| 71 virtual void showLineTreeAndMark(const InlineBox* = 0, const char* = 0, cons
t InlineBox* = 0, const char* = 0, const RenderObject* = 0, int = 0) const OVERR
IDE; | 71 virtual void showLineTreeAndMark(const InlineBox* = 0, const char* = 0, cons
t InlineBox* = 0, const char* = 0, const RenderObject* = 0, int = 0) const OVERR
IDE; |
| 72 virtual const char* boxName() const OVERRIDE; | 72 virtual const char* boxName() const OVERRIDE; |
| 73 #endif | 73 #endif |
| 74 | 74 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 LayoutUnit marginLogicalRight() const | 133 LayoutUnit marginLogicalRight() const |
| 134 { | 134 { |
| 135 if (!includeLogicalRightEdge()) | 135 if (!includeLogicalRightEdge()) |
| 136 return 0; | 136 return 0; |
| 137 return isHorizontal() ? boxModelObject()->marginRight() : boxModelObject
()->marginBottom(); | 137 return isHorizontal() ? boxModelObject()->marginRight() : boxModelObject
()->marginBottom(); |
| 138 } | 138 } |
| 139 int borderLogicalLeft() const | 139 int borderLogicalLeft() const |
| 140 { | 140 { |
| 141 if (!includeLogicalLeftEdge()) | 141 if (!includeLogicalLeftEdge()) |
| 142 return 0; | 142 return 0; |
| 143 return isHorizontal() ? renderer()->style(isFirstLineStyle())->borderLef
tWidth() : renderer()->style(isFirstLineStyle())->borderTopWidth(); | 143 return isHorizontal() ? renderer().style(isFirstLineStyle())->borderLeft
Width() : renderer().style(isFirstLineStyle())->borderTopWidth(); |
| 144 } | 144 } |
| 145 int borderLogicalRight() const | 145 int borderLogicalRight() const |
| 146 { | 146 { |
| 147 if (!includeLogicalRightEdge()) | 147 if (!includeLogicalRightEdge()) |
| 148 return 0; | 148 return 0; |
| 149 return isHorizontal() ? renderer()->style(isFirstLineStyle())->borderRig
htWidth() : renderer()->style(isFirstLineStyle())->borderBottomWidth(); | 149 return isHorizontal() ? renderer().style(isFirstLineStyle())->borderRigh
tWidth() : renderer().style(isFirstLineStyle())->borderBottomWidth(); |
| 150 } | 150 } |
| 151 int paddingLogicalLeft() const | 151 int paddingLogicalLeft() const |
| 152 { | 152 { |
| 153 if (!includeLogicalLeftEdge()) | 153 if (!includeLogicalLeftEdge()) |
| 154 return 0; | 154 return 0; |
| 155 return isHorizontal() ? boxModelObject()->paddingLeft() : boxModelObject
()->paddingTop(); | 155 return isHorizontal() ? boxModelObject()->paddingLeft() : boxModelObject
()->paddingTop(); |
| 156 } | 156 } |
| 157 int paddingLogicalRight() const | 157 int paddingLogicalRight() const |
| 158 { | 158 { |
| 159 if (!includeLogicalRightEdge()) | 159 if (!includeLogicalRightEdge()) |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 } | 237 } |
| 238 LayoutUnit logicalBottomLayoutOverflow(LayoutUnit lineBottom) const | 238 LayoutUnit logicalBottomLayoutOverflow(LayoutUnit lineBottom) const |
| 239 { | 239 { |
| 240 if (m_overflow) | 240 if (m_overflow) |
| 241 return isHorizontal() ? m_overflow->layoutOverflowRect().maxY() : m_
overflow->layoutOverflowRect().maxX(); | 241 return isHorizontal() ? m_overflow->layoutOverflowRect().maxY() : m_
overflow->layoutOverflowRect().maxX(); |
| 242 return lineBottom; | 242 return lineBottom; |
| 243 } | 243 } |
| 244 LayoutRect logicalLayoutOverflowRect(LayoutUnit lineTop, LayoutUnit lineBott
om) const | 244 LayoutRect logicalLayoutOverflowRect(LayoutUnit lineTop, LayoutUnit lineBott
om) const |
| 245 { | 245 { |
| 246 LayoutRect result = layoutOverflowRect(lineTop, lineBottom); | 246 LayoutRect result = layoutOverflowRect(lineTop, lineBottom); |
| 247 if (!renderer()->isHorizontalWritingMode()) | 247 if (!renderer().isHorizontalWritingMode()) |
| 248 result = result.transposedRect(); | 248 result = result.transposedRect(); |
| 249 return result; | 249 return result; |
| 250 } | 250 } |
| 251 | 251 |
| 252 LayoutRect visualOverflowRect(LayoutUnit lineTop, LayoutUnit lineBottom) con
st | 252 LayoutRect visualOverflowRect(LayoutUnit lineTop, LayoutUnit lineBottom) con
st |
| 253 { | 253 { |
| 254 return m_overflow ? m_overflow->visualOverflowRect() : enclosingLayoutRe
ct(frameRectIncludingLineHeight(lineTop, lineBottom)); | 254 return m_overflow ? m_overflow->visualOverflowRect() : enclosingLayoutRe
ct(frameRectIncludingLineHeight(lineTop, lineBottom)); |
| 255 } | 255 } |
| 256 LayoutUnit logicalLeftVisualOverflow() const { return m_overflow ? (isHorizo
ntal() ? m_overflow->visualOverflowRect().x() : m_overflow->visualOverflowRect()
.y()) : static_cast<LayoutUnit>(logicalLeft()); } | 256 LayoutUnit logicalLeftVisualOverflow() const { return m_overflow ? (isHorizo
ntal() ? m_overflow->visualOverflowRect().x() : m_overflow->visualOverflowRect()
.y()) : static_cast<LayoutUnit>(logicalLeft()); } |
| 257 LayoutUnit logicalRightVisualOverflow() const { return m_overflow ? (isHoriz
ontal() ? m_overflow->visualOverflowRect().maxX() : m_overflow->visualOverflowRe
ct().maxY()) : static_cast<LayoutUnit>(ceilf(logicalRight())); } | 257 LayoutUnit logicalRightVisualOverflow() const { return m_overflow ? (isHoriz
ontal() ? m_overflow->visualOverflowRect().maxX() : m_overflow->visualOverflowRe
ct().maxY()) : static_cast<LayoutUnit>(ceilf(logicalRight())); } |
| 258 LayoutUnit logicalTopVisualOverflow(LayoutUnit lineTop) const | 258 LayoutUnit logicalTopVisualOverflow(LayoutUnit lineTop) const |
| 259 { | 259 { |
| 260 if (m_overflow) | 260 if (m_overflow) |
| 261 return isHorizontal() ? m_overflow->visualOverflowRect().y() : m_ove
rflow->visualOverflowRect().x(); | 261 return isHorizontal() ? m_overflow->visualOverflowRect().y() : m_ove
rflow->visualOverflowRect().x(); |
| 262 return lineTop; | 262 return lineTop; |
| 263 } | 263 } |
| 264 LayoutUnit logicalBottomVisualOverflow(LayoutUnit lineBottom) const | 264 LayoutUnit logicalBottomVisualOverflow(LayoutUnit lineBottom) const |
| 265 { | 265 { |
| 266 if (m_overflow) | 266 if (m_overflow) |
| 267 return isHorizontal() ? m_overflow->visualOverflowRect().maxY() : m_
overflow->visualOverflowRect().maxX(); | 267 return isHorizontal() ? m_overflow->visualOverflowRect().maxY() : m_
overflow->visualOverflowRect().maxX(); |
| 268 return lineBottom; | 268 return lineBottom; |
| 269 } | 269 } |
| 270 LayoutRect logicalVisualOverflowRect(LayoutUnit lineTop, LayoutUnit lineBott
om) const | 270 LayoutRect logicalVisualOverflowRect(LayoutUnit lineTop, LayoutUnit lineBott
om) const |
| 271 { | 271 { |
| 272 LayoutRect result = visualOverflowRect(lineTop, lineBottom); | 272 LayoutRect result = visualOverflowRect(lineTop, lineBottom); |
| 273 if (!renderer()->isHorizontalWritingMode()) | 273 if (!renderer().isHorizontalWritingMode()) |
| 274 result = result.transposedRect(); | 274 result = result.transposedRect(); |
| 275 return result; | 275 return result; |
| 276 } | 276 } |
| 277 | 277 |
| 278 void setOverflowFromLogicalRects(const LayoutRect& logicalLayoutOverflow, co
nst LayoutRect& logicalVisualOverflow, LayoutUnit lineTop, LayoutUnit lineBottom
); | 278 void setOverflowFromLogicalRects(const LayoutRect& logicalLayoutOverflow, co
nst LayoutRect& logicalVisualOverflow, LayoutUnit lineTop, LayoutUnit lineBottom
); |
| 279 void setLayoutOverflow(const LayoutRect&, LayoutUnit lineTop, LayoutUnit lin
eBottom); | 279 void setLayoutOverflow(const LayoutRect&, LayoutUnit lineTop, LayoutUnit lin
eBottom); |
| 280 void setVisualOverflow(const LayoutRect&, LayoutUnit lineTop, LayoutUnit lin
eBottom); | 280 void setVisualOverflow(const LayoutRect&, LayoutUnit lineTop, LayoutUnit lin
eBottom); |
| 281 | 281 |
| 282 FloatRect frameRectIncludingLineHeight(LayoutUnit lineTop, LayoutUnit lineBo
ttom) const | 282 FloatRect frameRectIncludingLineHeight(LayoutUnit lineTop, LayoutUnit lineBo
ttom) const |
| 283 { | 283 { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 } | 366 } |
| 367 | 367 |
| 368 } // namespace WebCore | 368 } // namespace WebCore |
| 369 | 369 |
| 370 #ifndef NDEBUG | 370 #ifndef NDEBUG |
| 371 // Outside the WebCore namespace for ease of invocation from gdb. | 371 // Outside the WebCore namespace for ease of invocation from gdb. |
| 372 void showTree(const WebCore::InlineFlowBox*); | 372 void showTree(const WebCore::InlineFlowBox*); |
| 373 #endif | 373 #endif |
| 374 | 374 |
| 375 #endif // InlineFlowBox_h | 375 #endif // InlineFlowBox_h |
| OLD | NEW |