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

Unified Diff: ui/views/view_unittest.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/view.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/view_unittest.cc
diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc
index f1c083581130f30d9e069c7c4e071a5404bd730f..ea453642b423fc34dd2e935a76eb2d46a5265f0b 100644
--- a/ui/views/view_unittest.cc
+++ b/ui/views/view_unittest.cc
@@ -12,6 +12,7 @@
#include "ui/base/accelerators/accelerator.h"
#include "ui/base/clipboard/clipboard.h"
#include "ui/base/keycodes/keyboard_codes.h"
+#include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/simple_menu_model.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/compositor/compositor.h"
@@ -2869,6 +2870,65 @@ TEST_F(ViewLayerTest, BoundsChangeWithLayer) {
EXPECT_EQ(gfx::Rect(30, 41, 20, 30), v2->layer()->bounds());
}
+// Make sure layers are positioned correctly in RTL.
+TEST_F(ViewLayerTest, BoundInRTL) {
+ std::string locale = l10n_util::GetApplicationLocale("");
sky 2012/04/16 14:37:41 "" -> std::string()
+ base::i18n::SetICUDefaultLocale("he");
+
+ View* view = new View;
+ widget()->SetContentsView(view);
+
+ int content_width = view->width();
+
+ // |v1| is initially not attached to anything. So its layer will have the same
+ // bounds as the view.
+ View* v1 = new View;
+ v1->SetPaintToLayer(true);
+ v1->SetBounds(10, 10, 20, 10);
+ EXPECT_EQ(gfx::Rect(10, 10, 20, 10),
+ v1->layer()->bounds());
+
+ // Once |v1| is attached to the widget, its layer will get RTL-appropriate
+ // bounds.
+ view->AddChildView(v1);
+ EXPECT_EQ(gfx::Rect(content_width - 30, 10, 20, 10),
+ v1->layer()->bounds());
+ gfx::Rect l1bounds = v1->layer()->bounds();
+
+ // Now attach a View to the widget first, then create a layer for it. Make
+ // sure the bounds are correct.
+ View* v2 = new View;
+ v2->SetBounds(50, 10, 30, 10);
+ EXPECT_FALSE(v2->layer());
+ view->AddChildView(v2);
+ v2->SetPaintToLayer(true);
+ EXPECT_EQ(gfx::Rect(content_width - 80, 10, 30, 10),
+ v2->layer()->bounds());
+ gfx::Rect l2bounds = v2->layer()->bounds();
+
+ view->SetPaintToLayer(true);
+ EXPECT_EQ(l1bounds, v1->layer()->bounds());
+ EXPECT_EQ(l2bounds, v2->layer()->bounds());
+
+ // Move one of the views. Make sure the layer is positioned correctly
+ // afterwards.
+ v1->SetBounds(v1->x() - 5, v1->y(), v1->width(), v1->height());
+ l1bounds.set_x(l1bounds.x() + 5);
+ EXPECT_EQ(l1bounds, v1->layer()->bounds());
+
+ view->SetPaintToLayer(false);
+ EXPECT_EQ(l1bounds, v1->layer()->bounds());
+ EXPECT_EQ(l2bounds, v2->layer()->bounds());
+
+ // Move a view again.
+ v2->SetBounds(v2->x() + 5, v2->y(), v2->width(), v2->height());
+ l2bounds.set_x(l2bounds.x() - 5);
+ EXPECT_EQ(l2bounds, v2->layer()->bounds());
+
+ // Reset locale.
+ base::i18n::SetICUDefaultLocale(locale);
+}
+
// Makes sure a transform persists after toggling the visibility.
TEST_F(ViewLayerTest, ToggleVisibilityWithTransform) {
View* view = new View;
« no previous file with comments | « ui/views/view.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698