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 <vector> | 7 #include <vector> |
8 | 8 |
9 #include "ash/ash_constants.h" | 9 #include "ash/ash_constants.h" |
10 #include "ash/root_window_controller.h" | 10 #include "ash/root_window_controller.h" |
| 11 #include "ash/root_window_settings.h" |
11 #include "ash/shell.h" | 12 #include "ash/shell.h" |
12 #include "ash/shell_window_ids.h" | 13 #include "ash/shell_window_ids.h" |
13 #include "ash/wm/property_util.h" | 14 #include "ash/wm/property_util.h" |
14 #include "ash/wm/window_properties.h" | 15 #include "ash/wm/window_properties.h" |
15 #include "ash/wm/window_util.h" | 16 #include "ash/wm/window_util.h" |
16 #include "ash/wm/workspace/frame_caption_button_container_view.h" | 17 #include "ash/wm/workspace/frame_caption_button_container_view.h" |
17 #include "base/logging.h" // DCHECK | 18 #include "base/logging.h" // DCHECK |
18 #include "grit/ash_resources.h" | 19 #include "grit/ash_resources.h" |
19 #include "third_party/skia/include/core/SkCanvas.h" | 20 #include "third_party/skia/include/core/SkCanvas.h" |
20 #include "third_party/skia/include/core/SkColor.h" | 21 #include "third_party/skia/include/core/SkColor.h" |
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
748 | 749 |
749 bool FramePainter::UseSoloWindowHeader() const { | 750 bool FramePainter::UseSoloWindowHeader() const { |
750 // Don't use transparent headers for panels, pop-ups, etc. | 751 // Don't use transparent headers for panels, pop-ups, etc. |
751 if (!IsSoloWindowHeaderCandidate(window_)) | 752 if (!IsSoloWindowHeaderCandidate(window_)) |
752 return false; | 753 return false; |
753 aura::RootWindow* root = window_->GetRootWindow(); | 754 aura::RootWindow* root = window_->GetRootWindow(); |
754 if (!root || root->GetProperty(internal::kIgnoreSoloWindowFramePainterPolicy)) | 755 if (!root || root->GetProperty(internal::kIgnoreSoloWindowFramePainterPolicy)) |
755 return false; | 756 return false; |
756 // Don't recompute every time, as it would require many window property | 757 // Don't recompute every time, as it would require many window property |
757 // lookups. | 758 // lookups. |
758 return root->GetProperty(internal::kSoloWindowHeaderKey); | 759 return internal::GetRootWindowSettings(root)->solo_window_header; |
759 } | 760 } |
760 | 761 |
761 // static | 762 // static |
762 bool FramePainter::UseSoloWindowHeaderInRoot(RootWindow* root_window, | 763 bool FramePainter::UseSoloWindowHeaderInRoot(RootWindow* root_window, |
763 Window* ignore_window) { | 764 Window* ignore_window) { |
764 int visible_window_count = 0; | 765 int visible_window_count = 0; |
765 std::vector<Window*> windows = GetWindowsForSoloHeaderUpdate(root_window); | 766 std::vector<Window*> windows = GetWindowsForSoloHeaderUpdate(root_window); |
766 for (std::vector<Window*>::const_iterator it = windows.begin(); | 767 for (std::vector<Window*>::const_iterator it = windows.begin(); |
767 it != windows.end(); | 768 it != windows.end(); |
768 ++it) { | 769 ++it) { |
(...skipping 18 matching lines...) Expand all Loading... |
787 void FramePainter::UpdateSoloWindowInRoot(RootWindow* root, | 788 void FramePainter::UpdateSoloWindowInRoot(RootWindow* root, |
788 Window* ignore_window) { | 789 Window* ignore_window) { |
789 #if defined(OS_WIN) | 790 #if defined(OS_WIN) |
790 // Non-Ash Windows doesn't do solo-window counting for transparency effects, | 791 // Non-Ash Windows doesn't do solo-window counting for transparency effects, |
791 // as the desktop background and window frames are managed by the OS. | 792 // as the desktop background and window frames are managed by the OS. |
792 if (!ash::Shell::HasInstance()) | 793 if (!ash::Shell::HasInstance()) |
793 return; | 794 return; |
794 #endif | 795 #endif |
795 if (!root) | 796 if (!root) |
796 return; | 797 return; |
797 bool old_solo_header = root->GetProperty(internal::kSoloWindowHeaderKey); | 798 internal::RootWindowSettings* root_window_settings = |
| 799 internal::GetRootWindowSettings(root); |
| 800 bool old_solo_header = root_window_settings->solo_window_header; |
798 bool new_solo_header = UseSoloWindowHeaderInRoot(root, ignore_window); | 801 bool new_solo_header = UseSoloWindowHeaderInRoot(root, ignore_window); |
799 if (old_solo_header == new_solo_header) | 802 if (old_solo_header == new_solo_header) |
800 return; | 803 return; |
801 root->SetProperty(internal::kSoloWindowHeaderKey, new_solo_header); | 804 root_window_settings->solo_window_header = new_solo_header; |
| 805 |
802 // Invalidate all the window frames in the desktop. There should only be | 806 // Invalidate all the window frames in the desktop. There should only be |
803 // a few. | 807 // a few. |
804 std::vector<Window*> windows = GetWindowsForSoloHeaderUpdate(root); | 808 std::vector<Window*> windows = GetWindowsForSoloHeaderUpdate(root); |
805 for (std::vector<Window*>::const_iterator it = windows.begin(); | 809 for (std::vector<Window*>::const_iterator it = windows.begin(); |
806 it != windows.end(); | 810 it != windows.end(); |
807 ++it) { | 811 ++it) { |
808 Widget* widget = Widget::GetWidgetForNativeWindow(*it); | 812 Widget* widget = Widget::GetWidgetForNativeWindow(*it); |
809 if (widget && widget->non_client_view()) | 813 if (widget && widget->non_client_view()) |
810 widget->non_client_view()->SchedulePaint(); | 814 widget->non_client_view()->SchedulePaint(); |
811 } | 815 } |
(...skipping 14 matching lines...) Expand all Loading... |
826 // icon. Don't use |window_icon_| for this computation as it may be NULL. | 830 // icon. Don't use |window_icon_| for this computation as it may be NULL. |
827 int title_y = GetCaptionButtonContainerCenterY() - title_font.GetHeight() / 2; | 831 int title_y = GetCaptionButtonContainerCenterY() - title_font.GetHeight() / 2; |
828 return gfx::Rect( | 832 return gfx::Rect( |
829 title_x, | 833 title_x, |
830 std::max(0, title_y), | 834 std::max(0, title_y), |
831 std::max(0, caption_button_container_->x() - kTitleLogoSpacing - title_x), | 835 std::max(0, caption_button_container_->x() - kTitleLogoSpacing - title_x), |
832 title_font.GetHeight()); | 836 title_font.GetHeight()); |
833 } | 837 } |
834 | 838 |
835 } // namespace ash | 839 } // namespace ash |
OLD | NEW |