Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: Source/core/rendering/RootInlineBox.cpp

Issue 699683002: Continue with InlineBox float->LayoutUnit migration. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2006, 2008 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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 // First sanity-check the unoverflowed width of the whole line to see if the re is sufficient room. 106 // First sanity-check the unoverflowed width of the whole line to see if the re is sufficient room.
107 int delta = ltr ? lineBoxEdge - blockEdge : blockEdge - lineBoxEdge; 107 int delta = ltr ? lineBoxEdge - blockEdge : blockEdge - lineBoxEdge;
108 if (logicalWidth() - delta < ellipsisWidth) 108 if (logicalWidth() - delta < ellipsisWidth)
109 return false; 109 return false;
110 110
111 // Next iterate over all the line boxes on the line. If we find a replaced element that intersects 111 // Next iterate over all the line boxes on the line. If we find a replaced element that intersects
112 // then we refuse to accommodate the ellipsis. Otherwise we're ok. 112 // then we refuse to accommodate the ellipsis. Otherwise we're ok.
113 return InlineFlowBox::canAccommodateEllipsis(ltr, blockEdge, ellipsisWidth); 113 return InlineFlowBox::canAccommodateEllipsis(ltr, blockEdge, ellipsisWidth);
114 } 114 }
115 115
116 float RootInlineBox::placeEllipsis(const AtomicString& ellipsisStr, bool ltr, f loat blockLeftEdge, float blockRightEdge, float ellipsisWidth, 116 FloatWillBeLayoutUnit RootInlineBox::placeEllipsis(const AtomicString& ellipsisS tr, bool ltr, FloatWillBeLayoutUnit blockLeftEdge, FloatWillBeLayoutUnit blockR ightEdge, FloatWillBeLayoutUnit ellipsisWidth,
117 InlineBox* markupBox) 117 InlineBox* markupBox)
118 { 118 {
119 // Create an ellipsis box. 119 // Create an ellipsis box.
120 EllipsisBox* ellipsisBox = new EllipsisBox(renderer(), ellipsisStr, this, 120 EllipsisBox* ellipsisBox = new EllipsisBox(renderer(), ellipsisStr, this,
121 ellipsisWidth - (markupBox ? markupBox->logicalWidth() : 0), logicalHeig ht(), 121 ellipsisWidth - (markupBox ? markupBox->logicalWidth() : 0), logicalHeig ht(),
122 x(), y(), !prevRootBox(), isHorizontal(), markupBox); 122 x(), y(), !prevRootBox(), isHorizontal(), markupBox);
123 123
124 if (!gEllipsisBoxMap) 124 if (!gEllipsisBoxMap)
125 gEllipsisBoxMap = new EllipsisBoxMap(); 125 gEllipsisBoxMap = new EllipsisBoxMap();
126 gEllipsisBoxMap->add(this, ellipsisBox); 126 gEllipsisBoxMap->add(this, ellipsisBox);
127 setHasEllipsisBox(true); 127 setHasEllipsisBox(true);
128 128
129 // FIXME: Do we need an RTL version of this? 129 // FIXME: Do we need an RTL version of this?
130 if (ltr && (logicalLeft() + logicalWidth() + ellipsisWidth) <= blockRightEdg e) { 130 if (ltr && (logicalLeft() + logicalWidth() + ellipsisWidth) <= blockRightEdg e) {
131 ellipsisBox->setLogicalLeft(logicalLeft() + logicalWidth()); 131 ellipsisBox->setLogicalLeft(logicalLeft() + logicalWidth());
132 return logicalWidth() + ellipsisWidth; 132 return logicalWidth() + ellipsisWidth;
133 } 133 }
134 134
135 // Now attempt to find the nearest glyph horizontally and place just to the right (or left in RTL) 135 // Now attempt to find the nearest glyph horizontally and place just to the right (or left in RTL)
136 // of that glyph. Mark all of the objects that intersect the ellipsis box a s not painting (as being 136 // of that glyph. Mark all of the objects that intersect the ellipsis box a s not painting (as being
137 // truncated). 137 // truncated).
138 bool foundBox = false; 138 bool foundBox = false;
139 float truncatedWidth = 0; 139 FloatWillBeLayoutUnit truncatedWidth = 0;
140 float position = placeEllipsisBox(ltr, blockLeftEdge, blockRightEdge, ellips isWidth, truncatedWidth, foundBox); 140 FloatWillBeLayoutUnit position = placeEllipsisBox(ltr, blockLeftEdge, blockR ightEdge, ellipsisWidth, truncatedWidth, foundBox);
141 ellipsisBox->setLogicalLeft(position); 141 ellipsisBox->setLogicalLeft(position);
142 return truncatedWidth; 142 return truncatedWidth;
143 } 143 }
144 144
145 float RootInlineBox::placeEllipsisBox(bool ltr, float blockLeftEdge, float block RightEdge, float ellipsisWidth, float &truncatedWidth, bool& foundBox) 145 FloatWillBeLayoutUnit RootInlineBox::placeEllipsisBox(bool ltr, FloatWillBeLayou tUnit blockLeftEdge, FloatWillBeLayoutUnit blockRightEdge, FloatWillBeLayoutUnit ellipsisWidth, FloatWillBeLayoutUnit &truncatedWidth, bool& foundBox)
146 { 146 {
147 float result = InlineFlowBox::placeEllipsisBox(ltr, blockLeftEdge, blockRigh tEdge, ellipsisWidth, truncatedWidth, foundBox); 147 FloatWillBeLayoutUnit result = InlineFlowBox::placeEllipsisBox(ltr, blockLef tEdge, blockRightEdge, ellipsisWidth, truncatedWidth, foundBox);
148 if (result == -1) { 148 if (result == -1) {
149 result = ltr ? blockRightEdge - ellipsisWidth : blockLeftEdge; 149 result = ltr ? blockRightEdge - ellipsisWidth : blockLeftEdge;
150 truncatedWidth = blockRightEdge - blockLeftEdge; 150 truncatedWidth = blockRightEdge - blockLeftEdge;
151 } 151 }
152 return result; 152 return result;
153 } 153 }
154 154
155 void RootInlineBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset, LayoutUnit lineTop, LayoutUnit lineBottom) 155 void RootInlineBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset, LayoutUnit lineTop, LayoutUnit lineBottom)
156 { 156 {
157 RootInlineBoxPainter(*this).paint(paintInfo, paintOffset, lineTop, lineBotto m); 157 RootInlineBoxPainter(*this).paint(paintInfo, paintOffset, lineTop, lineBotto m);
158 } 158 }
159 159
160 bool RootInlineBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re sult, const HitTestLocation& locationInContainer, const LayoutPoint& accumulated Offset, LayoutUnit lineTop, LayoutUnit lineBottom) 160 bool RootInlineBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re sult, const HitTestLocation& locationInContainer, const LayoutPoint& accumulated Offset, LayoutUnit lineTop, LayoutUnit lineBottom)
161 { 161 {
162 if (hasEllipsisBox() && visibleToHitTestRequest(request)) { 162 if (hasEllipsisBox() && visibleToHitTestRequest(request)) {
163 if (ellipsisBox()->nodeAtPoint(request, result, locationInContainer, acc umulatedOffset, lineTop, lineBottom)) { 163 if (ellipsisBox()->nodeAtPoint(request, result, locationInContainer, acc umulatedOffset, lineTop, lineBottom)) {
164 renderer().updateHitTestResult(result, locationInContainer.point() - toLayoutSize(accumulatedOffset)); 164 renderer().updateHitTestResult(result, locationInContainer.point() - toLayoutSize(accumulatedOffset));
165 return true; 165 return true;
166 } 166 }
167 } 167 }
168 return InlineFlowBox::nodeAtPoint(request, result, locationInContainer, accu mulatedOffset, lineTop, lineBottom); 168 return InlineFlowBox::nodeAtPoint(request, result, locationInContainer, accu mulatedOffset, lineTop, lineBottom);
169 } 169 }
170 170
171 void RootInlineBox::adjustPosition(float dx, float dy) 171 void RootInlineBox::adjustPosition(FloatWillBeLayoutUnit dx, FloatWillBeLayoutUn it dy)
172 { 172 {
173 InlineFlowBox::adjustPosition(dx, dy); 173 InlineFlowBox::adjustPosition(dx, dy);
174 LayoutUnit blockDirectionDelta = isHorizontal() ? dy : dx; // The block dire ction delta is a LayoutUnit. 174 LayoutUnit blockDirectionDelta = isHorizontal() ? dy : dx; // The block dire ction delta is a LayoutUnit.
175 m_lineTop += blockDirectionDelta; 175 m_lineTop += blockDirectionDelta;
176 m_lineBottom += blockDirectionDelta; 176 m_lineBottom += blockDirectionDelta;
177 m_lineTopWithLeading += blockDirectionDelta; 177 m_lineTopWithLeading += blockDirectionDelta;
178 m_lineBottomWithLeading += blockDirectionDelta; 178 m_lineBottomWithLeading += blockDirectionDelta;
179 m_selectionBottom += blockDirectionDelta; 179 m_selectionBottom += blockDirectionDelta;
180 if (hasEllipsisBox()) 180 if (hasEllipsisBox())
181 ellipsisBox()->adjustPosition(dx, dy); 181 ellipsisBox()->adjustPosition(dx, dy);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 if (annotationsAdjustment) { 240 if (annotationsAdjustment) {
241 // FIXME: Need to handle pagination here. We might have to move to the n ext page/column as a result of the 241 // FIXME: Need to handle pagination here. We might have to move to the n ext page/column as a result of the
242 // ruby expansion. 242 // ruby expansion.
243 adjustBlockDirectionPosition(annotationsAdjustment.toFloat()); 243 adjustBlockDirectionPosition(annotationsAdjustment.toFloat());
244 heightOfBlock += annotationsAdjustment; 244 heightOfBlock += annotationsAdjustment;
245 } 245 }
246 246
247 return heightOfBlock + maxHeight; 247 return heightOfBlock + maxHeight;
248 } 248 }
249 249
250 float RootInlineBox::maxLogicalTop() const 250 FloatWillBeLayoutUnit RootInlineBox::maxLogicalTop() const
251 { 251 {
252 float maxLogicalTop = 0; 252 FloatWillBeLayoutUnit maxLogicalTop = 0;
253 computeMaxLogicalTop(maxLogicalTop); 253 computeMaxLogicalTop(maxLogicalTop);
254 return maxLogicalTop; 254 return maxLogicalTop;
255 } 255 }
256 256
257 LayoutUnit RootInlineBox::beforeAnnotationsAdjustment() const 257 LayoutUnit RootInlineBox::beforeAnnotationsAdjustment() const
258 { 258 {
259 LayoutUnit result = 0; 259 LayoutUnit result = 0;
260 260
261 if (!renderer().style()->isFlippedLinesWritingMode()) { 261 if (!renderer().style()->isFlippedLinesWritingMode()) {
262 // Annotations under the previous line may push us down. 262 // Annotations under the previous line may push us down.
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 } 858 }
859 859
860 #ifndef NDEBUG 860 #ifndef NDEBUG
861 const char* RootInlineBox::boxName() const 861 const char* RootInlineBox::boxName() const
862 { 862 {
863 return "RootInlineBox"; 863 return "RootInlineBox";
864 } 864 }
865 #endif 865 #endif
866 866
867 } // namespace blink 867 } // namespace blink
OLDNEW
« Source/core/rendering/FloatToLayoutUnit.h ('K') | « Source/core/rendering/RootInlineBox.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698