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

Side by Side Diff: ui/gfx/render_text.cc

Issue 522103002: RenderText: Always invalidate layout on style changes and never on color changes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/gfx/render_text.h" 5 #include "ui/gfx/render_text.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <climits> 8 #include <climits>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 void RenderText::SetCompositionRange(const Range& composition_range) { 665 void RenderText::SetCompositionRange(const Range& composition_range) {
666 CHECK(!composition_range.IsValid() || 666 CHECK(!composition_range.IsValid() ||
667 Range(0, text_.length()).Contains(composition_range)); 667 Range(0, text_.length()).Contains(composition_range));
668 composition_range_.set_end(composition_range.end()); 668 composition_range_.set_end(composition_range.end());
669 composition_range_.set_start(composition_range.start()); 669 composition_range_.set_start(composition_range.start());
670 ResetLayout(); 670 ResetLayout();
671 } 671 }
672 672
673 void RenderText::SetColor(SkColor value) { 673 void RenderText::SetColor(SkColor value) {
674 colors_.SetValue(value); 674 colors_.SetValue(value);
675
676 #if defined(OS_WIN)
677 // TODO(msw): Windows applies colors and decorations in the layout process.
678 cached_bounds_and_offset_valid_ = false;
679 ResetLayout();
680 #endif
681 } 675 }
682 676
683 void RenderText::ApplyColor(SkColor value, const Range& range) { 677 void RenderText::ApplyColor(SkColor value, const Range& range) {
684 colors_.ApplyValue(value, range); 678 colors_.ApplyValue(value, range);
685
686 #if defined(OS_WIN)
ckocagil 2014/08/30 01:26:15 This one shouldn't be needed after http://crrev.co
msw 2014/09/02 18:02:21 Acknowledged.
687 // TODO(msw): Windows applies colors and decorations in the layout process.
688 cached_bounds_and_offset_valid_ = false;
689 ResetLayout();
690 #endif
691 } 679 }
692 680
693 void RenderText::SetStyle(TextStyle style, bool value) { 681 void RenderText::SetStyle(TextStyle style, bool value) {
694 styles_[style].SetValue(value); 682 styles_[style].SetValue(value);
695 683
696 // Only invalidate the layout on font changes; not for colors or decorations. 684 cached_bounds_and_offset_valid_ = false;
697 bool invalidate = (style == BOLD) || (style == ITALIC); 685 ResetLayout();
698 #if defined(OS_WIN)
699 // TODO(msw): Windows applies colors and decorations in the layout process.
700 invalidate = true;
701 #endif
702 if (invalidate) {
703 cached_bounds_and_offset_valid_ = false;
704 ResetLayout();
705 }
706 } 686 }
707 687
708 void RenderText::ApplyStyle(TextStyle style, bool value, const Range& range) { 688 void RenderText::ApplyStyle(TextStyle style, bool value, const Range& range) {
709 styles_[style].ApplyValue(value, range); 689 styles_[style].ApplyValue(value, range);
710 690
711 // Only invalidate the layout on font changes; not for colors or decorations. 691 cached_bounds_and_offset_valid_ = false;
712 bool invalidate = (style == BOLD) || (style == ITALIC); 692 ResetLayout();
713 #if defined(OS_WIN)
ckocagil 2014/08/30 01:26:15 HarfBuzz always needs invalidation on style change
msw 2014/09/02 18:02:21 Acknowledged.
714 // TODO(msw): Windows applies colors and decorations in the layout process.
715 invalidate = true;
716 #endif
717 if (invalidate) {
718 cached_bounds_and_offset_valid_ = false;
719 ResetLayout();
720 }
721 } 693 }
722 694
723 bool RenderText::GetStyle(TextStyle style) const { 695 bool RenderText::GetStyle(TextStyle style) const {
724 return (styles_[style].breaks().size() == 1) && 696 return (styles_[style].breaks().size() == 1) &&
725 styles_[style].breaks().front().second; 697 styles_[style].breaks().front().second;
726 } 698 }
727 699
728 void RenderText::SetDirectionalityMode(DirectionalityMode mode) { 700 void RenderText::SetDirectionalityMode(DirectionalityMode mode) {
729 if (mode == directionality_mode_) 701 if (mode == directionality_mode_)
730 return; 702 return;
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
1431 SetDisplayOffset(display_offset_.x() + delta_x); 1403 SetDisplayOffset(display_offset_.x() + delta_x);
1432 } 1404 }
1433 1405
1434 void RenderText::DrawSelection(Canvas* canvas) { 1406 void RenderText::DrawSelection(Canvas* canvas) {
1435 const std::vector<Rect> sel = GetSubstringBounds(selection()); 1407 const std::vector<Rect> sel = GetSubstringBounds(selection());
1436 for (std::vector<Rect>::const_iterator i = sel.begin(); i < sel.end(); ++i) 1408 for (std::vector<Rect>::const_iterator i = sel.begin(); i < sel.end(); ++i)
1437 canvas->FillRect(*i, selection_background_focused_color_); 1409 canvas->FillRect(*i, selection_background_focused_color_);
1438 } 1410 }
1439 1411
1440 } // namespace gfx 1412 } // namespace gfx
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698