| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights |
| 3 * reserved. | 3 * reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 1415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1426 } | 1426 } |
| 1427 | 1427 |
| 1428 if (CanBeBackwardCaretPosition(text_layout_object, | 1428 if (CanBeBackwardCaretPosition(text_layout_object, |
| 1429 current_pos.OffsetInLeafNode())) { | 1429 current_pos.OffsetInLeafNode())) { |
| 1430 return current_pos.ComputePosition(); | 1430 return current_pos.ComputePosition(); |
| 1431 } | 1431 } |
| 1432 } | 1432 } |
| 1433 return last_visible.DeprecatedComputePosition(); | 1433 return last_visible.DeprecatedComputePosition(); |
| 1434 } | 1434 } |
| 1435 | 1435 |
| 1436 // Returns true if |box| at |text_offset| can not continue on next line. |
| 1437 static bool CanNotContinueOnNextLine(const LayoutText& text_layout_object, |
| 1438 InlineBox* box, |
| 1439 unsigned text_offset) { |
| 1440 InlineTextBox* const last_text_box = text_layout_object.LastTextBox(); |
| 1441 if (box == last_text_box) |
| 1442 return true; |
| 1443 return LineLayoutAPIShim::LayoutObjectFrom(box->GetLineLayoutItem()) == |
| 1444 text_layout_object && |
| 1445 ToInlineTextBox(box)->Start() >= text_offset; |
| 1446 } |
| 1447 |
| 1436 // The text continues on the next line only if the last text box is not on this | 1448 // The text continues on the next line only if the last text box is not on this |
| 1437 // line and none of the boxes on this line have a larger start offset. | 1449 // line and none of the boxes on this line have a larger start offset. |
| 1438 static bool DoesContinueOnNextLine(const LayoutText& text_layout_object, | 1450 static bool DoesContinueOnNextLine(const LayoutText& text_layout_object, |
| 1439 InlineBox* box, | 1451 InlineBox* box, |
| 1440 unsigned text_offset) { | 1452 unsigned text_offset) { |
| 1441 InlineTextBox* const last_text_box = text_layout_object.LastTextBox(); | 1453 InlineTextBox* const last_text_box = text_layout_object.LastTextBox(); |
| 1442 DCHECK_NE(box, last_text_box); | 1454 DCHECK_NE(box, last_text_box); |
| 1443 for (InlineBox* runner = box->NextLeafChild(); runner; | 1455 for (InlineBox* runner = box->NextLeafChild(); runner; |
| 1444 runner = runner->NextLeafChild()) { | 1456 runner = runner->NextLeafChild()) { |
| 1445 if (runner == last_text_box) | 1457 if (CanNotContinueOnNextLine(text_layout_object, runner, text_offset)) |
| 1446 return false; | |
| 1447 if (LineLayoutAPIShim::LayoutObjectFrom(runner->GetLineLayoutItem()) == | |
| 1448 text_layout_object && | |
| 1449 ToInlineTextBox(runner)->Start() >= text_offset) | |
| 1450 return false; | 1458 return false; |
| 1451 } | 1459 } |
| 1452 | 1460 |
| 1453 for (InlineBox* runner = box->PrevLeafChild(); runner; | 1461 for (InlineBox* runner = box->PrevLeafChild(); runner; |
| 1454 runner = runner->PrevLeafChild()) { | 1462 runner = runner->PrevLeafChild()) { |
| 1455 if (runner == last_text_box) | 1463 if (CanNotContinueOnNextLine(text_layout_object, runner, text_offset)) |
| 1456 return false; | |
| 1457 if (LineLayoutAPIShim::LayoutObjectFrom(runner->GetLineLayoutItem()) == | |
| 1458 text_layout_object && | |
| 1459 ToInlineTextBox(runner)->Start() >= text_offset) | |
| 1460 return false; | 1464 return false; |
| 1461 } | 1465 } |
| 1462 | 1466 |
| 1463 return true; | 1467 return true; |
| 1464 } | 1468 } |
| 1465 | 1469 |
| 1466 // TODO(editing-dev): This function is just moved out from | 1470 // TODO(editing-dev): This function is just moved out from |
| 1467 // |MostBackwardCaretPosition()|. We should study this function more and | 1471 // |MostBackwardCaretPosition()|. We should study this function more and |
| 1468 // name it appropriately. See https://trac.webkit.org/changeset/32438/ | 1472 // name it appropriately. See https://trac.webkit.org/changeset/32438/ |
| 1469 // which introduce this. | 1473 // which introduce this. |
| (...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2081 | 2085 |
| 2082 IntRect ComputeTextRect(const EphemeralRangeInFlatTree& range) { | 2086 IntRect ComputeTextRect(const EphemeralRangeInFlatTree& range) { |
| 2083 return EnclosingIntRect(ComputeTextRectTemplate(range)); | 2087 return EnclosingIntRect(ComputeTextRectTemplate(range)); |
| 2084 } | 2088 } |
| 2085 | 2089 |
| 2086 FloatRect ComputeTextFloatRect(const EphemeralRange& range) { | 2090 FloatRect ComputeTextFloatRect(const EphemeralRange& range) { |
| 2087 return ComputeTextRectTemplate(range); | 2091 return ComputeTextRectTemplate(range); |
| 2088 } | 2092 } |
| 2089 | 2093 |
| 2090 } // namespace blink | 2094 } // namespace blink |
| OLD | NEW |