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

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

Issue 339333002: Removing using declarations that import names in the C++ Standard library. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixing mac error Created 6 years, 6 months 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
OLDNEW
1 /* 1 /*
2 * (C) 1999 Lars Knoll (knoll@kde.org) 2 * (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2000 Dirk Mueller (mueller@kde.org) 3 * (C) 2000 Dirk Mueller (mueller@kde.org)
4 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 4 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net)
6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) 6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "platform/fonts/Character.h" 42 #include "platform/fonts/Character.h"
43 #include "platform/fonts/FontCache.h" 43 #include "platform/fonts/FontCache.h"
44 #include "platform/geometry/FloatQuad.h" 44 #include "platform/geometry/FloatQuad.h"
45 #include "platform/text/BidiResolver.h" 45 #include "platform/text/BidiResolver.h"
46 #include "platform/text/TextBreakIterator.h" 46 #include "platform/text/TextBreakIterator.h"
47 #include "platform/text/TextRunIterator.h" 47 #include "platform/text/TextRunIterator.h"
48 #include "wtf/text/StringBuffer.h" 48 #include "wtf/text/StringBuffer.h"
49 #include "wtf/text/StringBuilder.h" 49 #include "wtf/text/StringBuilder.h"
50 #include "wtf/unicode/CharacterNames.h" 50 #include "wtf/unicode/CharacterNames.h"
51 51
52 using namespace std;
53 using namespace WTF; 52 using namespace WTF;
54 using namespace Unicode; 53 using namespace Unicode;
55 54
56 namespace WebCore { 55 namespace WebCore {
57 56
58 struct SameSizeAsRenderText : public RenderObject { 57 struct SameSizeAsRenderText : public RenderObject {
59 uint32_t bitfields : 16; 58 uint32_t bitfields : 16;
60 float widths[4]; 59 float widths[4];
61 String text; 60 String text;
62 void* pointers[2]; 61 void* pointers[2];
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 }; 96 };
98 97
99 static void makeCapitalized(String* string, UChar previous) 98 static void makeCapitalized(String* string, UChar previous)
100 { 99 {
101 if (string->isNull()) 100 if (string->isNull())
102 return; 101 return;
103 102
104 unsigned length = string->length(); 103 unsigned length = string->length();
105 const StringImpl& input = *string->impl(); 104 const StringImpl& input = *string->impl();
106 105
107 if (length >= numeric_limits<unsigned>::max()) 106 if (length >= std::numeric_limits<unsigned>::max())
108 CRASH(); 107 CRASH();
109 108
110 StringBuffer<UChar> stringWithPrevious(length + 1); 109 StringBuffer<UChar> stringWithPrevious(length + 1);
111 stringWithPrevious[0] = previous == noBreakSpace ? ' ' : previous; 110 stringWithPrevious[0] = previous == noBreakSpace ? ' ' : previous;
112 for (unsigned i = 1; i < length + 1; i++) { 111 for (unsigned i = 1; i < length + 1; i++) {
113 // Replace &nbsp with a real space since ICU no longer treats &nbsp as a word separator. 112 // Replace &nbsp with a real space since ICU no longer treats &nbsp as a word separator.
114 if (input[i - 1] == noBreakSpace) 113 if (input[i - 1] == noBreakSpace)
115 stringWithPrevious[i] = ' '; 114 stringWithPrevious[i] = ' ';
116 else 115 else
117 stringWithPrevious[i] = input[i - 1]; 116 stringWithPrevious[i] = input[i - 1];
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 } 323 }
325 324
326 void RenderText::absoluteRects(Vector<IntRect>& rects, const LayoutPoint& accumu latedOffset) const 325 void RenderText::absoluteRects(Vector<IntRect>& rects, const LayoutPoint& accumu latedOffset) const
327 { 326 {
328 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) 327 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox())
329 rects.append(enclosingIntRect(FloatRect(accumulatedOffset + box->topLeft (), box->size()))); 328 rects.append(enclosingIntRect(FloatRect(accumulatedOffset + box->topLeft (), box->size())));
330 } 329 }
331 330
332 static FloatRect localQuadForTextBox(InlineTextBox* box, unsigned start, unsigne d end, bool useSelectionHeight) 331 static FloatRect localQuadForTextBox(InlineTextBox* box, unsigned start, unsigne d end, bool useSelectionHeight)
333 { 332 {
334 unsigned realEnd = min(box->end() + 1, end); 333 unsigned realEnd = std::min(box->end() + 1, end);
335 LayoutRect r = box->localSelectionRect(start, realEnd); 334 LayoutRect r = box->localSelectionRect(start, realEnd);
336 if (r.height()) { 335 if (r.height()) {
337 if (!useSelectionHeight) { 336 if (!useSelectionHeight) {
338 // Change the height and y position (or width and x for vertical tex t) 337 // Change the height and y position (or width and x for vertical tex t)
339 // because selectionRect uses selection-specific values. 338 // because selectionRect uses selection-specific values.
340 if (box->isHorizontal()) { 339 if (box->isHorizontal()) {
341 r.setHeight(box->height()); 340 r.setHeight(box->height());
342 r.setY(box->y()); 341 r.setY(box->y());
343 } else { 342 } else {
344 r.setWidth(box->width()); 343 r.setWidth(box->width());
345 r.setX(box->x()); 344 r.setX(box->x());
346 } 345 }
347 } 346 }
348 return FloatRect(r); 347 return FloatRect(r);
349 } 348 }
350 return FloatRect(); 349 return FloatRect();
351 } 350 }
352 351
353 void RenderText::absoluteRectsForRange(Vector<IntRect>& rects, unsigned start, u nsigned end, bool useSelectionHeight, bool* wasFixed) 352 void RenderText::absoluteRectsForRange(Vector<IntRect>& rects, unsigned start, u nsigned end, bool useSelectionHeight, bool* wasFixed)
354 { 353 {
355 // Work around signed/unsigned issues. This function takes unsigneds, and is often passed UINT_MAX 354 // Work around signed/unsigned issues. This function takes unsigneds, and is often passed UINT_MAX
356 // to mean "all the way to the end". InlineTextBox coordinates are unsigneds , so changing this 355 // to mean "all the way to the end". InlineTextBox coordinates are unsigneds , so changing this
357 // function to take ints causes various internal mismatches. But selectionRe ct takes ints, and 356 // function to take ints causes various internal mismatches. But selectionRe ct takes ints, and
358 // passing UINT_MAX to it causes trouble. Ideally we'd change selectionRect to take unsigneds, but 357 // passing UINT_MAX to it causes trouble. Ideally we'd change selectionRect to take unsigneds, but
359 // that would cause many ripple effects, so for now we'll just clamp our uns igned parameters to INT_MAX. 358 // that would cause many ripple effects, so for now we'll just clamp our uns igned parameters to INT_MAX.
360 ASSERT(end == UINT_MAX || end <= INT_MAX); 359 ASSERT(end == UINT_MAX || end <= INT_MAX);
361 ASSERT(start <= INT_MAX); 360 ASSERT(start <= INT_MAX);
362 start = min(start, static_cast<unsigned>(INT_MAX)); 361 start = std::min(start, static_cast<unsigned>(INT_MAX));
363 end = min(end, static_cast<unsigned>(INT_MAX)); 362 end = std::min(end, static_cast<unsigned>(INT_MAX));
364 363
365 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) { 364 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) {
366 // Note: box->end() returns the index of the last character, not the ind ex past it 365 // Note: box->end() returns the index of the last character, not the ind ex past it
367 if (start <= box->start() && box->end() < end) { 366 if (start <= box->start() && box->end() < end) {
368 FloatRect r = box->calculateBoundaries(); 367 FloatRect r = box->calculateBoundaries();
369 if (useSelectionHeight) { 368 if (useSelectionHeight) {
370 LayoutRect selectionRect = box->localSelectionRect(start, end); 369 LayoutRect selectionRect = box->localSelectionRect(start, end);
371 if (box->isHorizontal()) { 370 if (box->isHorizontal()) {
372 r.setHeight(selectionRect.height().toFloat()); 371 r.setHeight(selectionRect.height().toFloat());
373 r.setY(selectionRect.y().toFloat()); 372 r.setY(selectionRect.y().toFloat());
(...skipping 16 matching lines...) Expand all
390 { 389 {
391 if (!box) 390 if (!box)
392 return IntRect(); 391 return IntRect();
393 392
394 unsigned short truncation = box->truncation(); 393 unsigned short truncation = box->truncation();
395 if (truncation == cNoTruncation) 394 if (truncation == cNoTruncation)
396 return IntRect(); 395 return IntRect();
397 396
398 IntRect rect; 397 IntRect rect;
399 if (EllipsisBox* ellipsis = box->root().ellipsisBox()) { 398 if (EllipsisBox* ellipsis = box->root().ellipsisBox()) {
400 int ellipsisStartPosition = max<int>(startPos - box->start(), 0); 399 int ellipsisStartPosition = std::max<int>(startPos - box->start(), 0);
401 int ellipsisEndPosition = min<int>(endPos - box->start(), box->len()); 400 int ellipsisEndPosition = std::min<int>(endPos - box->start(), box->len( ));
402 401
403 // The ellipsis should be considered to be selected if the end of 402 // The ellipsis should be considered to be selected if the end of
404 // the selection is past the beginning of the truncation and the 403 // the selection is past the beginning of the truncation and the
405 // beginning of the selection is before or at the beginning of the trunc ation. 404 // beginning of the selection is before or at the beginning of the trunc ation.
406 if (ellipsisEndPosition >= truncation && ellipsisStartPosition <= trunca tion) 405 if (ellipsisEndPosition >= truncation && ellipsisStartPosition <= trunca tion)
407 return ellipsis->selectionRect(); 406 return ellipsis->selectionRect();
408 } 407 }
409 408
410 return IntRect(); 409 return IntRect();
411 } 410 }
(...skipping 23 matching lines...) Expand all
435 434
436 void RenderText::absoluteQuadsForRange(Vector<FloatQuad>& quads, unsigned start, unsigned end, bool useSelectionHeight, bool* wasFixed) 435 void RenderText::absoluteQuadsForRange(Vector<FloatQuad>& quads, unsigned start, unsigned end, bool useSelectionHeight, bool* wasFixed)
437 { 436 {
438 // Work around signed/unsigned issues. This function takes unsigneds, and is often passed UINT_MAX 437 // Work around signed/unsigned issues. This function takes unsigneds, and is often passed UINT_MAX
439 // to mean "all the way to the end". InlineTextBox coordinates are unsigneds , so changing this 438 // to mean "all the way to the end". InlineTextBox coordinates are unsigneds , so changing this
440 // function to take ints causes various internal mismatches. But selectionRe ct takes ints, and 439 // function to take ints causes various internal mismatches. But selectionRe ct takes ints, and
441 // passing UINT_MAX to it causes trouble. Ideally we'd change selectionRect to take unsigneds, but 440 // passing UINT_MAX to it causes trouble. Ideally we'd change selectionRect to take unsigneds, but
442 // that would cause many ripple effects, so for now we'll just clamp our uns igned parameters to INT_MAX. 441 // that would cause many ripple effects, so for now we'll just clamp our uns igned parameters to INT_MAX.
443 ASSERT(end == UINT_MAX || end <= INT_MAX); 442 ASSERT(end == UINT_MAX || end <= INT_MAX);
444 ASSERT(start <= INT_MAX); 443 ASSERT(start <= INT_MAX);
445 start = min(start, static_cast<unsigned>(INT_MAX)); 444 start = std::min(start, static_cast<unsigned>(INT_MAX));
446 end = min(end, static_cast<unsigned>(INT_MAX)); 445 end = std::min(end, static_cast<unsigned>(INT_MAX));
447 446
448 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) { 447 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) {
449 // Note: box->end() returns the index of the last character, not the ind ex past it 448 // Note: box->end() returns the index of the last character, not the ind ex past it
450 if (start <= box->start() && box->end() < end) { 449 if (start <= box->start() && box->end() < end) {
451 FloatRect r = box->calculateBoundaries(); 450 FloatRect r = box->calculateBoundaries();
452 if (useSelectionHeight) { 451 if (useSelectionHeight) {
453 LayoutRect selectionRect = box->localSelectionRect(start, end); 452 LayoutRect selectionRect = box->localSelectionRect(start, end);
454 if (box->isHorizontal()) { 453 if (box->isHorizontal()) {
455 r.setHeight(selectionRect.height().toFloat()); 454 r.setHeight(selectionRect.height().toFloat());
456 r.setY(selectionRect.y().toFloat()); 455 r.setY(selectionRect.y().toFloat());
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 LayoutUnit pointLineDirection = firstTextBox()->isHorizontal() ? point.x() : point.y(); 603 LayoutUnit pointLineDirection = firstTextBox()->isHorizontal() ? point.x() : point.y();
605 LayoutUnit pointBlockDirection = firstTextBox()->isHorizontal() ? point.y() : point.x(); 604 LayoutUnit pointBlockDirection = firstTextBox()->isHorizontal() ? point.y() : point.x();
606 bool blocksAreFlipped = style()->isFlippedBlocksWritingMode(); 605 bool blocksAreFlipped = style()->isFlippedBlocksWritingMode();
607 606
608 InlineTextBox* lastBox = 0; 607 InlineTextBox* lastBox = 0;
609 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) { 608 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) {
610 if (box->isLineBreak() && !box->prevLeafChild() && box->nextLeafChild() && !box->nextLeafChild()->isLineBreak()) 609 if (box->isLineBreak() && !box->prevLeafChild() && box->nextLeafChild() && !box->nextLeafChild()->isLineBreak())
611 box = box->nextTextBox(); 610 box = box->nextTextBox();
612 611
613 RootInlineBox& rootBox = box->root(); 612 RootInlineBox& rootBox = box->root();
614 LayoutUnit top = min(rootBox.selectionTop(), rootBox.lineTop()); 613 LayoutUnit top = std::min(rootBox.selectionTop(), rootBox.lineTop());
615 if (pointBlockDirection > top || (!blocksAreFlipped && pointBlockDirecti on == top)) { 614 if (pointBlockDirection > top || (!blocksAreFlipped && pointBlockDirecti on == top)) {
616 LayoutUnit bottom = rootBox.selectionBottom(); 615 LayoutUnit bottom = rootBox.selectionBottom();
617 if (rootBox.nextRootBox()) 616 if (rootBox.nextRootBox())
618 bottom = min(bottom, rootBox.nextRootBox()->lineTop()); 617 bottom = std::min(bottom, rootBox.nextRootBox()->lineTop());
619 618
620 if (pointBlockDirection < bottom || (blocksAreFlipped && pointBlockD irection == bottom)) { 619 if (pointBlockDirection < bottom || (blocksAreFlipped && pointBlockD irection == bottom)) {
621 ShouldAffinityBeDownstream shouldAffinityBeDownstream; 620 ShouldAffinityBeDownstream shouldAffinityBeDownstream;
622 if (lineDirectionPointFitsInBox(pointLineDirection, box, shouldA ffinityBeDownstream)) 621 if (lineDirectionPointFitsInBox(pointLineDirection, box, shouldA ffinityBeDownstream))
623 return createPositionWithAffinityForBoxAfterAdjustingOffsetF orBiDi(box, box->offsetForPosition(pointLineDirection.toFloat()), shouldAffinity BeDownstream); 622 return createPositionWithAffinityForBoxAfterAdjustingOffsetF orBiDi(box, box->offsetForPosition(pointLineDirection.toFloat()), shouldAffinity BeDownstream);
624 } 623 }
625 } 624 }
626 lastBox = box; 625 lastBox = box;
627 } 626 }
628 627
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 // FIXME: should we use the width of the root inline box or the 663 // FIXME: should we use the width of the root inline box or the
665 // width of the containing block for this? 664 // width of the containing block for this?
666 if (extraWidthToEndOfLine) 665 if (extraWidthToEndOfLine)
667 *extraWidthToEndOfLine = (box->root().logicalWidth() + rootLeft) - (left + 1); 666 *extraWidthToEndOfLine = (box->root().logicalWidth() + rootLeft) - (left + 1);
668 667
669 RenderBlock* cb = containingBlock(); 668 RenderBlock* cb = containingBlock();
670 RenderStyle* cbStyle = cb->style(); 669 RenderStyle* cbStyle = cb->style();
671 670
672 float leftEdge; 671 float leftEdge;
673 float rightEdge; 672 float rightEdge;
674 leftEdge = min<float>(0, rootLeft); 673 leftEdge = std::min<float>(0, rootLeft);
675 rightEdge = max<float>(cb->logicalWidth().toFloat(), rootRight); 674 rightEdge = std::max<float>(cb->logicalWidth().toFloat(), rootRight);
676 675
677 bool rightAligned = false; 676 bool rightAligned = false;
678 switch (cbStyle->textAlign()) { 677 switch (cbStyle->textAlign()) {
679 case RIGHT: 678 case RIGHT:
680 case WEBKIT_RIGHT: 679 case WEBKIT_RIGHT:
681 rightAligned = true; 680 rightAligned = true;
682 break; 681 break;
683 case LEFT: 682 case LEFT:
684 case WEBKIT_LEFT: 683 case WEBKIT_LEFT:
685 case CENTER: 684 case CENTER:
686 case WEBKIT_CENTER: 685 case WEBKIT_CENTER:
687 break; 686 break;
688 case JUSTIFY: 687 case JUSTIFY:
689 case TASTART: 688 case TASTART:
690 rightAligned = !cbStyle->isLeftToRightDirection(); 689 rightAligned = !cbStyle->isLeftToRightDirection();
691 break; 690 break;
692 case TAEND: 691 case TAEND:
693 rightAligned = cbStyle->isLeftToRightDirection(); 692 rightAligned = cbStyle->isLeftToRightDirection();
694 break; 693 break;
695 } 694 }
696 695
697 if (rightAligned) { 696 if (rightAligned) {
698 left = max(left, leftEdge); 697 left = std::max(left, leftEdge);
699 left = min(left, rootRight - caretWidth); 698 left = std::min(left, rootRight - caretWidth);
700 } else { 699 } else {
701 left = min(left, rightEdge - caretWidthRightOfOffset); 700 left = std::min(left, rightEdge - caretWidthRightOfOffset);
702 left = max(left, rootLeft); 701 left = std::max(left, rootLeft);
703 } 702 }
704 703
705 return style()->isHorizontalWritingMode() ? IntRect(left, top, caretWidth, h eight) : IntRect(top, left, height, caretWidth); 704 return style()->isHorizontalWritingMode() ? IntRect(left, top, caretWidth, h eight) : IntRect(top, left, height, caretWidth);
706 } 705 }
707 706
708 ALWAYS_INLINE float RenderText::widthFromCache(const Font& f, int start, int len , float xPos, TextDirection textDirection, HashSet<const SimpleFontData*>* fallb ackFonts, GlyphOverflow* glyphOverflow) const 707 ALWAYS_INLINE float RenderText::widthFromCache(const Font& f, int start, int len , float xPos, TextDirection textDirection, HashSet<const SimpleFontData*>* fallb ackFonts, GlyphOverflow* glyphOverflow) const
709 { 708 {
710 if (style()->hasTextCombine() && isCombineText()) { 709 if (style()->hasTextCombine() && isCombineText()) {
711 const RenderCombineText* combineText = toRenderCombineText(this); 710 const RenderCombineText* combineText = toRenderCombineText(this);
712 if (combineText->isCombined()) 711 if (combineText->isCombined())
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 if (isBreakable(breakIterator, j, nextBreakable) && characterAt(j - 1) != softHyphen) 1007 if (isBreakable(breakIterator, j, nextBreakable) && characterAt(j - 1) != softHyphen)
1009 break; 1008 break;
1010 if (breakAll) { 1009 if (breakAll) {
1011 betweenWords = false; 1010 betweenWords = false;
1012 break; 1011 break;
1013 } 1012 }
1014 } 1013 }
1015 1014
1016 // Terminate word boundary at bidi run boundary. 1015 // Terminate word boundary at bidi run boundary.
1017 if (run) 1016 if (run)
1018 j = min(j, run->stop() + 1); 1017 j = std::min(j, run->stop() + 1);
1019 int wordLen = j - i; 1018 int wordLen = j - i;
1020 if (wordLen) { 1019 if (wordLen) {
1021 bool isSpace = (j < len) && c == ' '; 1020 bool isSpace = (j < len) && c == ' ';
1022 1021
1023 // Non-zero only when kerning is enabled, in which case we measure w ords with their trailing 1022 // Non-zero only when kerning is enabled, in which case we measure w ords with their trailing
1024 // space, then subtract its width. 1023 // space, then subtract its width.
1025 float wordTrailingSpaceWidth = 0; 1024 float wordTrailingSpaceWidth = 0;
1026 if (isSpace && (f.fontDescription().typesettingFeatures() & Kerning) ) { 1025 if (isSpace && (f.fontDescription().typesettingFeatures() & Kerning) ) {
1027 ASSERT(textDirection >=0 && textDirection <= 1); 1026 ASSERT(textDirection >=0 && textDirection <= 1);
1028 if (!cachedWordTrailingSpaceWidth[textDirection]) 1027 if (!cachedWordTrailingSpaceWidth[textDirection])
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1113 } 1112 }
1114 if (run) 1113 if (run)
1115 bidiResolver.runs().deleteRuns(); 1114 bidiResolver.runs().deleteRuns();
1116 1115
1117 if (firstGlyphLeftOverflow > 0) 1116 if (firstGlyphLeftOverflow > 0)
1118 glyphOverflow.left = firstGlyphLeftOverflow; 1117 glyphOverflow.left = firstGlyphLeftOverflow;
1119 1118
1120 if ((needsWordSpacing && len > 1) || (ignoringSpaces && !firstWord)) 1119 if ((needsWordSpacing && len > 1) || (ignoringSpaces && !firstWord))
1121 currMaxWidth += wordSpacing; 1120 currMaxWidth += wordSpacing;
1122 1121
1123 m_minWidth = max(currMinWidth, m_minWidth); 1122 m_minWidth = std::max(currMinWidth, m_minWidth);
1124 m_maxWidth = max(currMaxWidth, m_maxWidth); 1123 m_maxWidth = std::max(currMaxWidth, m_maxWidth);
1125 1124
1126 if (!styleToUse->autoWrap()) 1125 if (!styleToUse->autoWrap())
1127 m_minWidth = m_maxWidth; 1126 m_minWidth = m_maxWidth;
1128 1127
1129 if (styleToUse->whiteSpace() == PRE) { 1128 if (styleToUse->whiteSpace() == PRE) {
1130 if (firstLine) 1129 if (firstLine)
1131 m_firstLineMinWidth = m_maxWidth; 1130 m_firstLineMinWidth = m_maxWidth;
1132 m_lastLineLineMinWidth = currMaxWidth; 1131 m_lastLineLineMinWidth = currMaxWidth;
1133 } 1132 }
1134 1133
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
1549 LayoutRect RenderText::linesVisualOverflowBoundingBox() const 1548 LayoutRect RenderText::linesVisualOverflowBoundingBox() const
1550 { 1549 {
1551 if (!firstTextBox()) 1550 if (!firstTextBox())
1552 return LayoutRect(); 1551 return LayoutRect();
1553 1552
1554 // Return the width of the minimal left side and the maximal right side. 1553 // Return the width of the minimal left side and the maximal right side.
1555 LayoutUnit logicalLeftSide = LayoutUnit::max(); 1554 LayoutUnit logicalLeftSide = LayoutUnit::max();
1556 LayoutUnit logicalRightSide = LayoutUnit::min(); 1555 LayoutUnit logicalRightSide = LayoutUnit::min();
1557 for (InlineTextBox* curr = firstTextBox(); curr; curr = curr->nextTextBox()) { 1556 for (InlineTextBox* curr = firstTextBox(); curr; curr = curr->nextTextBox()) {
1558 LayoutRect logicalVisualOverflow = curr->logicalOverflowRect(); 1557 LayoutRect logicalVisualOverflow = curr->logicalOverflowRect();
1559 logicalLeftSide = min(logicalLeftSide, logicalVisualOverflow.x()); 1558 logicalLeftSide = std::min(logicalLeftSide, logicalVisualOverflow.x());
1560 logicalRightSide = max(logicalRightSide, logicalVisualOverflow.maxX()); 1559 logicalRightSide = std::max(logicalRightSide, logicalVisualOverflow.maxX ());
1561 } 1560 }
1562 1561
1563 LayoutUnit logicalTop = firstTextBox()->logicalTopVisualOverflow(); 1562 LayoutUnit logicalTop = firstTextBox()->logicalTopVisualOverflow();
1564 LayoutUnit logicalWidth = logicalRightSide - logicalLeftSide; 1563 LayoutUnit logicalWidth = logicalRightSide - logicalLeftSide;
1565 LayoutUnit logicalHeight = lastTextBox()->logicalBottomVisualOverflow() - lo gicalTop; 1564 LayoutUnit logicalHeight = lastTextBox()->logicalBottomVisualOverflow() - lo gicalTop;
1566 1565
1567 LayoutRect rect(logicalLeftSide, logicalTop, logicalWidth, logicalHeight); 1566 LayoutRect rect(logicalLeftSide, logicalTop, logicalWidth, logicalHeight);
1568 if (!style()->isHorizontalWritingMode()) 1567 if (!style()->isHorizontalWritingMode())
1569 rect = rect.transposedRect(); 1568 rect = rect.transposedRect();
1570 return rect; 1569 return rect;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 return rect; 1631 return rect;
1633 } 1632 }
1634 1633
1635 int RenderText::caretMinOffset() const 1634 int RenderText::caretMinOffset() const
1636 { 1635 {
1637 InlineTextBox* box = firstTextBox(); 1636 InlineTextBox* box = firstTextBox();
1638 if (!box) 1637 if (!box)
1639 return 0; 1638 return 0;
1640 int minOffset = box->start(); 1639 int minOffset = box->start();
1641 for (box = box->nextTextBox(); box; box = box->nextTextBox()) 1640 for (box = box->nextTextBox(); box; box = box->nextTextBox())
1642 minOffset = min<int>(minOffset, box->start()); 1641 minOffset = std::min<int>(minOffset, box->start());
1643 return minOffset; 1642 return minOffset;
1644 } 1643 }
1645 1644
1646 int RenderText::caretMaxOffset() const 1645 int RenderText::caretMaxOffset() const
1647 { 1646 {
1648 InlineTextBox* box = lastTextBox(); 1647 InlineTextBox* box = lastTextBox();
1649 if (!lastTextBox()) 1648 if (!lastTextBox())
1650 return textLength(); 1649 return textLength();
1651 1650
1652 int maxOffset = box->start() + box->len(); 1651 int maxOffset = box->start() + box->len();
1653 for (box = box->prevTextBox(); box; box = box->prevTextBox()) 1652 for (box = box->prevTextBox(); box; box = box->prevTextBox())
1654 maxOffset = max<int>(maxOffset, box->start() + box->len()); 1653 maxOffset = std::max<int>(maxOffset, box->start() + box->len());
1655 return maxOffset; 1654 return maxOffset;
1656 } 1655 }
1657 1656
1658 unsigned RenderText::renderedTextLength() const 1657 unsigned RenderText::renderedTextLength() const
1659 { 1658 {
1660 int l = 0; 1659 int l = 0;
1661 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) 1660 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox())
1662 l += box->len(); 1661 l += box->len();
1663 return l; 1662 return l;
1664 } 1663 }
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
1869 } 1868 }
1870 secureTextTimer->restartWithNewText(lastTypedCharacterOffset); 1869 secureTextTimer->restartWithNewText(lastTypedCharacterOffset);
1871 } 1870 }
1872 1871
1873 PassRefPtr<AbstractInlineTextBox> RenderText::firstAbstractInlineTextBox() 1872 PassRefPtr<AbstractInlineTextBox> RenderText::firstAbstractInlineTextBox()
1874 { 1873 {
1875 return AbstractInlineTextBox::getOrCreate(this, m_firstTextBox); 1874 return AbstractInlineTextBox::getOrCreate(this, m_firstTextBox);
1876 } 1875 }
1877 1876
1878 } // namespace WebCore 1877 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderTableSection.cpp ('k') | Source/core/rendering/RenderTextControl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698