 Chromium Code Reviews
 Chromium Code Reviews Issue 12319039:
  Set the window frames to be non transparent while the user is cycling through workspaces  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src
    
  
    Issue 12319039:
  Set the window frames to be non transparent while the user is cycling through workspaces  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src| OLD | NEW | 
|---|---|
| 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 "ash/wm/frame_painter.h" | 5 #include "ash/wm/frame_painter.h" | 
| 6 | 6 | 
| 7 #include "ash/shell.h" | 7 #include "ash/shell.h" | 
| 8 #include "ash/shell_window_ids.h" | 8 #include "ash/shell_window_ids.h" | 
| 9 #include "ash/test/ash_test_base.h" | 9 #include "ash/test/ash_test_base.h" | 
| 10 #include "ash/wm/property_util.h" | 10 #include "ash/wm/property_util.h" | 
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 95 window_ = NULL; | 95 window_ = NULL; | 
| 96 window->RemoveObserver(this); | 96 window->RemoveObserver(this); | 
| 97 } | 97 } | 
| 98 | 98 | 
| 99 aura::Window* window_; | 99 aura::Window* window_; | 
| 100 bool is_paint_scheduled_; | 100 bool is_paint_scheduled_; | 
| 101 | 101 | 
| 102 DISALLOW_COPY_AND_ASSIGN(WindowRepaintChecker); | 102 DISALLOW_COPY_AND_ASSIGN(WindowRepaintChecker); | 
| 103 }; | 103 }; | 
| 104 | 104 | 
| 105 // Modifies the values of kInactiveWindowOpacity, kActiveWindowOpacity, and | |
| 106 // kSoloWindowOpacity for the lifetime of the class. This is useful so that | |
| 107 // the constants each have different values. | |
| 108 class ScopedOpacityConstantModifier { | |
| 109 public: | |
| 110 ScopedOpacityConstantModifier() | |
| 111 : initial_active_window_opacity_( | |
| 112 ash::FramePainter::kActiveWindowOpacity), | |
| 113 initial_inactive_window_opacity_( | |
| 114 ash::FramePainter::kInactiveWindowOpacity), | |
| 115 initial_solo_window_opacity_(ash::FramePainter::kSoloWindowOpacity) { | |
| 116 ash::FramePainter::kActiveWindowOpacity = 100; | |
| 117 ash::FramePainter::kInactiveWindowOpacity = 120; | |
| 118 ash::FramePainter::kSoloWindowOpacity = 140; | |
| 119 } | |
| 120 ~ScopedOpacityConstantModifier() { | |
| 121 ash::FramePainter::kActiveWindowOpacity = initial_active_window_opacity_; | |
| 122 ash::FramePainter::kInactiveWindowOpacity = | |
| 123 initial_inactive_window_opacity_; | |
| 124 ash::FramePainter::kSoloWindowOpacity = initial_solo_window_opacity_; | |
| 125 } | |
| 126 | |
| 127 private: | |
| 128 int initial_active_window_opacity_; | |
| 129 int initial_inactive_window_opacity_; | |
| 130 int initial_solo_window_opacity_; | |
| 131 | |
| 132 DISALLOW_COPY_AND_ASSIGN(ScopedOpacityConstantModifier); | |
| 133 }; | |
| 134 | |
| 105 } // namespace | 135 } // namespace | 
| 106 | 136 | 
| 107 namespace ash { | 137 namespace ash { | 
| 108 | 138 | 
| 109 class FramePainterTest : public ash::test::AshTestBase { | 139 class FramePainterTest : public ash::test::AshTestBase { | 
| 110 public: | 140 public: | 
| 111 // Creates a test widget that owns its native widget. | 141 // Creates a test widget that owns its native widget. | 
| 112 Widget* CreateTestWidget() { | 142 Widget* CreateTestWidget() { | 
| 113 Widget* widget = new Widget; | 143 Widget* widget = new Widget; | 
| 114 Widget::InitParams params; | 144 Widget::InitParams params; | 
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 436 | 466 | 
| 437 TEST_F(FramePainterTest, GetHeaderOpacity) { | 467 TEST_F(FramePainterTest, GetHeaderOpacity) { | 
| 438 // Create a widget and a painter for it. | 468 // Create a widget and a painter for it. | 
| 439 scoped_ptr<Widget> w1(CreateTestWidget()); | 469 scoped_ptr<Widget> w1(CreateTestWidget()); | 
| 440 FramePainter p1; | 470 FramePainter p1; | 
| 441 ImageButton size1(NULL); | 471 ImageButton size1(NULL); | 
| 442 ImageButton close1(NULL); | 472 ImageButton close1(NULL); | 
| 443 p1.Init(w1.get(), NULL, &size1, &close1, FramePainter::SIZE_BUTTON_MAXIMIZES); | 473 p1.Init(w1.get(), NULL, &size1, &close1, FramePainter::SIZE_BUTTON_MAXIMIZES); | 
| 444 w1->Show(); | 474 w1->Show(); | 
| 445 | 475 | 
| 476 // Modify the values of the opacity constants so that they each have a | |
| 477 // different value. | |
| 478 ScopedOpacityConstantModifier opacity_constant_modifier; | |
| 479 | |
| 446 // Solo active window has solo window opacity. | 480 // Solo active window has solo window opacity. | 
| 447 EXPECT_EQ(FramePainter::kSoloWindowOpacity, | 481 EXPECT_EQ(FramePainter::kSoloWindowOpacity, | 
| 448 p1.GetHeaderOpacity(FramePainter::ACTIVE, | 482 p1.GetHeaderOpacity(FramePainter::ACTIVE, | 
| 449 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE, | 483 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE, | 
| 450 NULL)); | 484 NULL)); | 
| 451 | 485 | 
| 452 // Create a second widget and painter. | 486 // Create a second widget and painter. | 
| 453 scoped_ptr<Widget> w2(CreateTestWidget()); | 487 scoped_ptr<Widget> w2(CreateTestWidget()); | 
| 454 FramePainter p2; | 488 FramePainter p2; | 
| 455 ImageButton size2(NULL); | 489 ImageButton size2(NULL); | 
| (...skipping 12 matching lines...) Expand all Loading... | |
| 468 p2.GetHeaderOpacity(FramePainter::INACTIVE, | 502 p2.GetHeaderOpacity(FramePainter::INACTIVE, | 
| 469 IDR_AURA_WINDOW_HEADER_BASE_INACTIVE, | 503 IDR_AURA_WINDOW_HEADER_BASE_INACTIVE, | 
| 470 NULL)); | 504 NULL)); | 
| 471 | 505 | 
| 472 // Custom overlay image is drawn completely opaque. | 506 // Custom overlay image is drawn completely opaque. | 
| 473 gfx::ImageSkia custom_overlay; | 507 gfx::ImageSkia custom_overlay; | 
| 474 EXPECT_EQ(255, | 508 EXPECT_EQ(255, | 
| 475 p1.GetHeaderOpacity(FramePainter::ACTIVE, | 509 p1.GetHeaderOpacity(FramePainter::ACTIVE, | 
| 476 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE, | 510 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE, | 
| 477 &custom_overlay)); | 511 &custom_overlay)); | 
| 512 | |
| 513 // Regular maximized window is fully transparent. | |
| 
James Cook
2013/03/06 23:45:39
Hooray for tests!
 | |
| 514 ash::wm::MaximizeWindow(w1->GetNativeWindow()); | |
| 515 EXPECT_EQ(0, | |
| 516 p1.GetHeaderOpacity(FramePainter::ACTIVE, | |
| 517 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE, | |
| 518 NULL)); | |
| 519 | |
| 520 // Windows with custom overlays are fully opaque when maximized. | |
| 521 EXPECT_EQ(255, | |
| 522 p1.GetHeaderOpacity(FramePainter::ACTIVE, | |
| 523 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE, | |
| 524 &custom_overlay)); | |
| 525 | |
| 526 // The maximized window frame should take on the active/inactive opacity | |
| 527 // while the user is cycling through workspaces. | |
| 528 w1->GetNativeWindow()->GetRootWindow()->SetProperty( | |
| 529 ash::internal::kCyclingThroughWorkspacesKey, true); | |
| 530 EXPECT_EQ(FramePainter::kInactiveWindowOpacity, | |
| 531 p1.GetHeaderOpacity(FramePainter::INACTIVE, | |
| 532 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE, | |
| 533 NULL)); | |
| 478 } | 534 } | 
| 479 | 535 | 
| 480 // Test the hit test function with windows which are "partially maximized". | 536 // Test the hit test function with windows which are "partially maximized". | 
| 481 TEST_F(FramePainterTest, HitTestSpecialMaximizedModes) { | 537 TEST_F(FramePainterTest, HitTestSpecialMaximizedModes) { | 
| 482 // Create a widget and a painter for it. | 538 // Create a widget and a painter for it. | 
| 483 scoped_ptr<Widget> w1(CreateResizableWidget()); | 539 scoped_ptr<Widget> w1(CreateResizableWidget()); | 
| 484 FramePainter p1; | 540 FramePainter p1; | 
| 485 ImageButton size1(NULL); | 541 ImageButton size1(NULL); | 
| 486 ImageButton close1(NULL); | 542 ImageButton close1(NULL); | 
| 487 p1.Init(w1.get(), NULL, &size1, &close1, FramePainter::SIZE_BUTTON_MAXIMIZES); | 543 p1.Init(w1.get(), NULL, &size1, &close1, FramePainter::SIZE_BUTTON_MAXIMIZES); | 
| (...skipping 18 matching lines...) Expand all Loading... | |
| 506 EXPECT_EQ(HTRIGHT, | 562 EXPECT_EQ(HTRIGHT, | 
| 507 p1.NonClientHitTest(frame, gfx::Point(screen.width() / 2, | 563 p1.NonClientHitTest(frame, gfx::Point(screen.width() / 2, | 
| 508 screen.height() / 2))); | 564 screen.height() / 2))); | 
| 509 // A hit into the middle lower area should generate right - not bottom&right. | 565 // A hit into the middle lower area should generate right - not bottom&right. | 
| 510 EXPECT_EQ(HTRIGHT, | 566 EXPECT_EQ(HTRIGHT, | 
| 511 p1.NonClientHitTest(frame, gfx::Point(screen.width() / 2, | 567 p1.NonClientHitTest(frame, gfx::Point(screen.width() / 2, | 
| 512 screen.height() - 1))); | 568 screen.height() - 1))); | 
| 513 } | 569 } | 
| 514 | 570 | 
| 515 } // namespace ash | 571 } // namespace ash | 
| OLD | NEW |