| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 466 } | 466 } |
| 467 | 467 |
| 468 // TODO(yosin) This function breaks the invariant of this class. | 468 // TODO(yosin) This function breaks the invariant of this class. |
| 469 // But because we use VisibleSelection to store values in editing commands for | 469 // But because we use VisibleSelection to store values in editing commands for |
| 470 // use when undoing the command, we need to be able to create a selection that | 470 // use when undoing the command, we need to be able to create a selection that |
| 471 // while currently invalid, will be valid once the changes are undone. This is a | 471 // while currently invalid, will be valid once the changes are undone. This is a |
| 472 // design problem. To fix it we either need to change the invariants of | 472 // design problem. To fix it we either need to change the invariants of |
| 473 // |VisibleSelection| or create a new class for editing to use that can | 473 // |VisibleSelection| or create a new class for editing to use that can |
| 474 // manipulate selections that are not currently valid. | 474 // manipulate selections that are not currently valid. |
| 475 template <typename Strategy> | 475 template <typename Strategy> |
| 476 void VisibleSelectionTemplate<Strategy>::SetWithoutValidation( | 476 VisibleSelectionTemplate<Strategy> |
| 477 VisibleSelectionTemplate<Strategy>::CreateWithoutValidationDeprecated( |
| 477 const PositionTemplate<Strategy>& base, | 478 const PositionTemplate<Strategy>& base, |
| 478 const PositionTemplate<Strategy>& extent) { | 479 const PositionTemplate<Strategy>& extent, |
| 479 if (base.IsNull() || extent.IsNull()) { | 480 TextAffinity affinity) { |
| 480 base_ = extent_ = start_ = end_ = PositionTemplate<Strategy>(); | 481 DCHECK(base.IsNotNull()); |
| 481 UpdateSelectionType(); | 482 DCHECK(extent.IsNotNull()); |
| 482 return; | 483 |
| 484 VisibleSelectionTemplate<Strategy> visible_selection; |
| 485 visible_selection.base_ = base; |
| 486 visible_selection.extent_ = extent; |
| 487 visible_selection.base_is_first_ = base.CompareTo(extent) <= 0; |
| 488 if (visible_selection.base_is_first_) { |
| 489 visible_selection.start_ = base; |
| 490 visible_selection.end_ = extent; |
| 491 } else { |
| 492 visible_selection.start_ = extent; |
| 493 visible_selection.end_ = base; |
| 483 } | 494 } |
| 484 | 495 if (base == extent) { |
| 485 base_ = base; | 496 visible_selection.selection_type_ = kCaretSelection; |
| 486 extent_ = extent; | 497 visible_selection.affinity_ = affinity; |
| 487 base_is_first_ = base.CompareTo(extent) <= 0; | 498 return visible_selection; |
| 488 if (base_is_first_) { | |
| 489 start_ = base; | |
| 490 end_ = extent; | |
| 491 } else { | |
| 492 start_ = extent; | |
| 493 end_ = base; | |
| 494 } | 499 } |
| 495 selection_type_ = base == extent ? kCaretSelection : kRangeSelection; | 500 // Since |affinity_| for non-|CaretSelection| is always |kDownstream|, |
| 496 if (selection_type_ != kCaretSelection) { | 501 // we should keep this invariant. Note: This function can be called with |
| 497 // Since |m_affinity| for non-|CaretSelection| is always |Downstream|, | 502 // |affinity_| is |kUpstream|. |
| 498 // we should keep this invariant. Note: This function can be called with | 503 visible_selection.selection_type_ = kRangeSelection; |
| 499 // |m_affinity| is |TextAffinity::Upstream|. | 504 visible_selection.affinity_ = TextAffinity::kDownstream; |
| 500 affinity_ = TextAffinity::kDownstream; | 505 return visible_selection; |
| 501 } | |
| 502 } | 506 } |
| 503 | 507 |
| 504 template <typename Strategy> | 508 template <typename Strategy> |
| 505 void VisibleSelectionTemplate< | 509 void VisibleSelectionTemplate< |
| 506 Strategy>::AdjustSelectionToAvoidCrossingShadowBoundaries() { | 510 Strategy>::AdjustSelectionToAvoidCrossingShadowBoundaries() { |
| 507 if (base_.IsNull() || start_.IsNull() || base_.IsNull()) | 511 if (base_.IsNull() || start_.IsNull() || base_.IsNull()) |
| 508 return; | 512 return; |
| 509 SelectionAdjuster::AdjustSelectionToAvoidCrossingShadowBoundaries(this); | 513 SelectionAdjuster::AdjustSelectionToAvoidCrossingShadowBoundaries(this); |
| 510 } | 514 } |
| 511 | 515 |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 772 | 776 |
| 773 void showTree(const blink::VisibleSelectionInFlatTree& sel) { | 777 void showTree(const blink::VisibleSelectionInFlatTree& sel) { |
| 774 sel.ShowTreeForThis(); | 778 sel.ShowTreeForThis(); |
| 775 } | 779 } |
| 776 | 780 |
| 777 void showTree(const blink::VisibleSelectionInFlatTree* sel) { | 781 void showTree(const blink::VisibleSelectionInFlatTree* sel) { |
| 778 if (sel) | 782 if (sel) |
| 779 sel->ShowTreeForThis(); | 783 sel->ShowTreeForThis(); |
| 780 } | 784 } |
| 781 #endif | 785 #endif |
| OLD | NEW |