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

Side by Side Diff: ui/views/view.cc

Issue 10081037: views: Fix painting views with layers in RTL locale. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: test Created 8 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | ui/views/view_unittest.cc » ('j') | ui/views/view_unittest.cc » ('J')
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/views/view.h" 5 #include "ui/views/view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 1161 matching lines...) Expand 10 before | Expand all | Expand 10 after
1172 void View::CalculateOffsetToAncestorWithLayer(gfx::Point* offset, 1172 void View::CalculateOffsetToAncestorWithLayer(gfx::Point* offset,
1173 ui::Layer** layer_parent) { 1173 ui::Layer** layer_parent) {
1174 if (layer()) { 1174 if (layer()) {
1175 if (layer_parent) 1175 if (layer_parent)
1176 *layer_parent = layer(); 1176 *layer_parent = layer();
1177 return; 1177 return;
1178 } 1178 }
1179 if (!parent_) 1179 if (!parent_)
1180 return; 1180 return;
1181 1181
1182 offset->Offset(x(), y()); 1182 offset->Offset(GetMirroredX(), y());
1183 parent_->CalculateOffsetToAncestorWithLayer(offset, layer_parent); 1183 parent_->CalculateOffsetToAncestorWithLayer(offset, layer_parent);
1184 } 1184 }
1185 1185
1186 void View::MoveLayerToParent(ui::Layer* parent_layer, 1186 void View::MoveLayerToParent(ui::Layer* parent_layer,
1187 const gfx::Point& point) { 1187 const gfx::Point& point) {
1188 gfx::Point local_point(point); 1188 gfx::Point local_point(point);
1189 if (parent_layer != layer()) 1189 if (parent_layer != layer())
1190 local_point.Offset(x(), y()); 1190 local_point.Offset(GetMirroredX(), y());
1191 if (layer() && parent_layer != layer()) { 1191 if (layer() && parent_layer != layer()) {
1192 parent_layer->Add(layer()); 1192 parent_layer->Add(layer());
1193 layer()->SetBounds(gfx::Rect(local_point.x(), local_point.y(), 1193 layer()->SetBounds(gfx::Rect(local_point.x(), local_point.y(),
1194 width(), height())); 1194 width(), height()));
1195 } else { 1195 } else {
1196 for (int i = 0, count = child_count(); i < count; ++i) 1196 for (int i = 0, count = child_count(); i < count; ++i)
1197 child_at(i)->MoveLayerToParent(parent_layer, local_point); 1197 child_at(i)->MoveLayerToParent(parent_layer, local_point);
1198 } 1198 }
1199 } 1199 }
1200 1200
(...skipping 14 matching lines...) Expand all
1215 for (int i = 0, count = child_count(); i < count; ++i) 1215 for (int i = 0, count = child_count(); i < count; ++i)
1216 child_at(i)->UpdateChildLayerVisibility(ancestor_visible && visible_); 1216 child_at(i)->UpdateChildLayerVisibility(ancestor_visible && visible_);
1217 } 1217 }
1218 } 1218 }
1219 1219
1220 void View::UpdateChildLayerBounds(const gfx::Point& offset) { 1220 void View::UpdateChildLayerBounds(const gfx::Point& offset) {
1221 if (layer()) { 1221 if (layer()) {
1222 layer()->SetBounds(gfx::Rect(offset.x(), offset.y(), width(), height())); 1222 layer()->SetBounds(gfx::Rect(offset.x(), offset.y(), width(), height()));
1223 } else { 1223 } else {
1224 for (int i = 0, count = child_count(); i < count; ++i) { 1224 for (int i = 0, count = child_count(); i < count; ++i) {
1225 gfx::Point new_offset(offset.x() + child_at(i)->x(), 1225 gfx::Point new_offset(offset.x() + child_at(i)->GetMirroredX(),
1226 offset.y() + child_at(i)->y()); 1226 offset.y() + child_at(i)->y());
1227 child_at(i)->UpdateChildLayerBounds(new_offset); 1227 child_at(i)->UpdateChildLayerBounds(new_offset);
1228 } 1228 }
1229 } 1229 }
1230 } 1230 }
1231 1231
1232 void View::OnPaintLayer(gfx::Canvas* canvas) { 1232 void View::OnPaintLayer(gfx::Canvas* canvas) {
1233 if (!layer() || !layer()->fills_bounds_opaquely()) 1233 if (!layer() || !layer()->fills_bounds_opaquely())
1234 canvas->DrawColor(SK_ColorBLACK, SkXfermode::kClear_Mode); 1234 canvas->DrawColor(SK_ColorBLACK, SkXfermode::kClear_Mode);
1235 PaintCommon(canvas); 1235 PaintCommon(canvas);
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
1630 SchedulePaintBoundsChanged( 1630 SchedulePaintBoundsChanged(
1631 bounds_.size() == previous_bounds.size() ? SCHEDULE_PAINT_SIZE_SAME : 1631 bounds_.size() == previous_bounds.size() ? SCHEDULE_PAINT_SIZE_SAME :
1632 SCHEDULE_PAINT_SIZE_CHANGED); 1632 SCHEDULE_PAINT_SIZE_CHANGED);
1633 } 1633 }
1634 1634
1635 if (use_acceleration_when_possible) { 1635 if (use_acceleration_when_possible) {
1636 if (layer()) { 1636 if (layer()) {
1637 if (parent_) { 1637 if (parent_) {
1638 gfx::Point offset; 1638 gfx::Point offset;
1639 parent_->CalculateOffsetToAncestorWithLayer(&offset, NULL); 1639 parent_->CalculateOffsetToAncestorWithLayer(&offset, NULL);
1640 offset.Offset(x(), y()); 1640 offset.Offset(GetMirroredX(), y());
1641 layer()->SetBounds(gfx::Rect(offset, size())); 1641 layer()->SetBounds(gfx::Rect(offset, size()));
1642 } else { 1642 } else {
1643 layer()->SetBounds(bounds_); 1643 layer()->SetBounds(bounds_);
1644 } 1644 }
1645 // TODO(beng): this seems redundant with the SchedulePaint at the top of 1645 // TODO(beng): this seems redundant with the SchedulePaint at the top of
1646 // this function. explore collapsing. 1646 // this function. explore collapsing.
1647 if (previous_bounds.size() != bounds_.size() && 1647 if (previous_bounds.size() != bounds_.size() &&
1648 !layer()->layer_updated_externally()) { 1648 !layer()->layer_updated_externally()) {
1649 // If our bounds have changed then we need to update the complete 1649 // If our bounds have changed then we need to update the complete
1650 // texture. 1650 // texture.
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1802 for (int i = 0, count = child_count(); i < count; ++i) 1802 for (int i = 0, count = child_count(); i < count; ++i)
1803 child_at(i)->UpdateParentLayers(); 1803 child_at(i)->UpdateParentLayers();
1804 } 1804 }
1805 } 1805 }
1806 1806
1807 void View::UpdateParentLayer() { 1807 void View::UpdateParentLayer() {
1808 if (!layer()) 1808 if (!layer())
1809 return; 1809 return;
1810 1810
1811 ui::Layer* parent_layer = NULL; 1811 ui::Layer* parent_layer = NULL;
1812 gfx::Point offset(x(), y()); 1812 gfx::Point offset(GetMirroredX(), y());
1813 1813
1814 // TODO(sad): The NULL check here for parent_ essentially is to check if this 1814 // TODO(sad): The NULL check here for parent_ essentially is to check if this
1815 // is the RootView. Instead of doing this, this function should be made 1815 // is the RootView. Instead of doing this, this function should be made
1816 // virtual and overridden from the RootView. 1816 // virtual and overridden from the RootView.
1817 if (parent_) 1817 if (parent_)
1818 parent_->CalculateOffsetToAncestorWithLayer(&offset, &parent_layer); 1818 parent_->CalculateOffsetToAncestorWithLayer(&offset, &parent_layer);
1819 else if (!parent_ && GetWidget()) 1819 else if (!parent_ && GetWidget())
1820 GetWidget()->CalculateOffsetToAncestorWithLayer(&offset, &parent_layer); 1820 GetWidget()->CalculateOffsetToAncestorWithLayer(&offset, &parent_layer);
1821 1821
1822 ReparentLayer(offset, parent_layer); 1822 ReparentLayer(offset, parent_layer);
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
2063 2063
2064 // Message the RootView to do the drag and drop. That way if we're removed 2064 // Message the RootView to do the drag and drop. That way if we're removed
2065 // the RootView can detect it and avoid calling us back. 2065 // the RootView can detect it and avoid calling us back.
2066 gfx::Point widget_location(event.location()); 2066 gfx::Point widget_location(event.location());
2067 ConvertPointToWidget(this, &widget_location); 2067 ConvertPointToWidget(this, &widget_location);
2068 GetWidget()->RunShellDrag(this, data, widget_location, drag_operations); 2068 GetWidget()->RunShellDrag(this, data, widget_location, drag_operations);
2069 #endif // !defined(OS_MACOSX) 2069 #endif // !defined(OS_MACOSX)
2070 } 2070 }
2071 2071
2072 } // namespace views 2072 } // namespace views
OLDNEW
« no previous file with comments | « no previous file | ui/views/view_unittest.cc » ('j') | ui/views/view_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698