123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- // Copyright 2016 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "ui/native_theme/native_theme_aura.h"
- #include "testing/gtest/include/gtest/gtest.h"
- #include "third_party/skia/include/core/SkPath.h"
- #include "ui/gfx/geometry/rect.h"
- #include "ui/native_theme/native_theme.h"
- namespace ui {
- namespace {
- void VerifyPoint(SkPoint a, SkPoint b) {
- EXPECT_EQ(a.x(), b.x());
- EXPECT_EQ(a.y(), b.y());
- }
- void VerifyTriangle(SkPath actualPath, SkPoint p0, SkPoint p1, SkPoint p2) {
- EXPECT_EQ(3, actualPath.countPoints());
- VerifyPoint(p0, actualPath.getPoint(0));
- VerifyPoint(p1, actualPath.getPoint(1));
- VerifyPoint(p2, actualPath.getPoint(2));
- }
- } // namespace
- class NativeThemeAuraTest : public testing::Test {
- protected:
- NativeThemeAuraTest() = default;
- SkPath PathForArrow(const gfx::Rect& rect,
- NativeTheme::Part direction) const {
- return theme_.PathForArrow(rect, direction);
- }
- gfx::Rect BoundingRectForArrow(const gfx::Rect& rect) const {
- return theme_.BoundingRectForArrow(rect);
- }
- private:
- NativeThemeAura theme_{false, false};
- };
- TEST_F(NativeThemeAuraTest, VerticalArrows) {
- SkPath path;
- // Up arrow, sized for 1x.
- path =
- PathForArrow(gfx::Rect(100, 200, 17, 17), NativeTheme::kScrollbarUpArrow);
- VerifyTriangle(path, SkPoint::Make(105, 211), SkPoint::Make(112, 211),
- SkPoint::Make(108.5, 207));
- // 1.25x, should be larger.
- path =
- PathForArrow(gfx::Rect(50, 70, 21, 21), NativeTheme::kScrollbarUpArrow);
- VerifyTriangle(path, SkPoint::Make(56, 84), SkPoint::Make(65, 84),
- SkPoint::Make(60.5, 79));
- // Down arrow is just a flipped up arrow.
- path =
- PathForArrow(gfx::Rect(20, 80, 17, 17), NativeTheme::kScrollbarDownArrow);
- VerifyTriangle(path, SkPoint::Make(25, 86), SkPoint::Make(32, 86),
- SkPoint::Make(28.5, 90));
- }
- TEST_F(NativeThemeAuraTest, HorizontalArrows) {
- SkPath path;
- // Right arrow, sized for 1x.
- path = PathForArrow(gfx::Rect(100, 200, 17, 17),
- NativeTheme::kScrollbarRightArrow);
- VerifyTriangle(path, SkPoint::Make(107, 205), SkPoint::Make(107, 212),
- SkPoint::Make(111, 208.5));
- // Button size for 1.25x, should be larger.
- path = PathForArrow(gfx::Rect(50, 70, 21, 21),
- NativeTheme::kScrollbarRightArrow);
- VerifyTriangle(path, SkPoint::Make(58, 76), SkPoint::Make(58, 85),
- SkPoint::Make(63, 80.5));
- // Left arrow is just a flipped right arrow.
- path =
- PathForArrow(gfx::Rect(20, 80, 17, 17), NativeTheme::kScrollbarLeftArrow);
- VerifyTriangle(path, SkPoint::Make(30, 85), SkPoint::Make(30, 92),
- SkPoint::Make(26, 88.5));
- }
- TEST_F(NativeThemeAuraTest, ArrowForNonSquareButton) {
- SkPath path =
- PathForArrow(gfx::Rect(90, 80, 42, 37), NativeTheme::kScrollbarLeftArrow);
- VerifyTriangle(path, SkPoint::Make(116, 89), SkPoint::Make(116, 109),
- SkPoint::Make(105, 99));
- }
- TEST_F(NativeThemeAuraTest, BoundingRectSquare) {
- gfx::Rect bounding_rect = BoundingRectForArrow(gfx::Rect(42, 61, 21, 21));
- EXPECT_EQ(48.f, bounding_rect.x());
- EXPECT_EQ(67.f, bounding_rect.y());
- EXPECT_EQ(9.f, bounding_rect.width());
- EXPECT_EQ(bounding_rect.width(), bounding_rect.height());
- }
- TEST_F(NativeThemeAuraTest, BoundingRectSlightlyRectangular) {
- // Stretched horzontally.
- gfx::Rect bounding_rect = BoundingRectForArrow(gfx::Rect(42, 61, 25, 20));
- EXPECT_EQ(49.f, bounding_rect.x());
- EXPECT_EQ(66.f, bounding_rect.y());
- EXPECT_EQ(11.f, bounding_rect.width());
- EXPECT_EQ(bounding_rect.width(), bounding_rect.height());
- // Stretched vertically.
- bounding_rect = BoundingRectForArrow(gfx::Rect(42, 61, 14, 10));
- EXPECT_EQ(46.f, bounding_rect.x());
- EXPECT_EQ(63.f, bounding_rect.y());
- EXPECT_EQ(6.f, bounding_rect.width());
- EXPECT_EQ(bounding_rect.width(), bounding_rect.height());
- }
- TEST_F(NativeThemeAuraTest, BoundingRectVeryRectangular) {
- // Stretched horzontally.
- gfx::Rect bounding_rect = BoundingRectForArrow(gfx::Rect(42, 61, 30, 8));
- EXPECT_EQ(53.f, bounding_rect.x());
- EXPECT_EQ(61.f, bounding_rect.y());
- EXPECT_EQ(8.f, bounding_rect.width());
- EXPECT_EQ(bounding_rect.width(), bounding_rect.height());
- // Stretched vertically.
- bounding_rect = BoundingRectForArrow(gfx::Rect(42, 61, 6, 44));
- EXPECT_EQ(42.f, bounding_rect.x());
- EXPECT_EQ(80.f, bounding_rect.y());
- EXPECT_EQ(6.f, bounding_rect.width());
- EXPECT_EQ(bounding_rect.width(), bounding_rect.height());
- }
- TEST_F(NativeThemeAuraTest, BoundingRectSnappedToWholePixels) {
- gfx::Rect bounding_rect = BoundingRectForArrow(gfx::Rect(0, 0, 9, 10));
- EXPECT_EQ(3.f, bounding_rect.x());
- bounding_rect = BoundingRectForArrow(gfx::Rect(0, 0, 10, 9));
- EXPECT_EQ(3.f, bounding_rect.y());
- }
- } // namespace ui
|