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

Side by Side Diff: ash/wm/frame_painter.cc

Issue 24108003: [Cleanup] Rename WindowSettings to WindowState (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase fix Created 7 years, 3 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 | « ash/wm/frame_painter.h ('k') | ash/wm/frame_painter_unittest.cc » ('j') | no next file with comments »
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 "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/root_window_settings.h"
12 #include "ash/shell.h" 12 #include "ash/shell.h"
13 #include "ash/shell_window_ids.h" 13 #include "ash/shell_window_ids.h"
14 #include "ash/wm/caption_buttons/frame_caption_button_container_view.h" 14 #include "ash/wm/caption_buttons/frame_caption_button_container_view.h"
15 #include "ash/wm/property_util.h" 15 #include "ash/wm/window_state.h"
16 #include "ash/wm/window_settings.h"
17 #include "ash/wm/window_util.h" 16 #include "ash/wm/window_util.h"
18 #include "base/logging.h" // DCHECK 17 #include "base/logging.h" // DCHECK
19 #include "grit/ash_resources.h" 18 #include "grit/ash_resources.h"
20 #include "third_party/skia/include/core/SkCanvas.h" 19 #include "third_party/skia/include/core/SkCanvas.h"
21 #include "third_party/skia/include/core/SkColor.h" 20 #include "third_party/skia/include/core/SkColor.h"
22 #include "third_party/skia/include/core/SkPaint.h" 21 #include "third_party/skia/include/core/SkPaint.h"
23 #include "third_party/skia/include/core/SkPath.h" 22 #include "third_party/skia/include/core/SkPath.h"
24 #include "ui/aura/client/aura_constants.h" 23 #include "ui/aura/client/aura_constants.h"
25 #include "ui/aura/env.h" 24 #include "ui/aura/env.h"
26 #include "ui/aura/root_window.h" 25 #include "ui/aura/root_window.h"
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 previous_theme_frame_overlay_id_(0), 222 previous_theme_frame_overlay_id_(0),
224 previous_opacity_(0), 223 previous_opacity_(0),
225 crossfade_theme_frame_id_(0), 224 crossfade_theme_frame_id_(0),
226 crossfade_theme_frame_overlay_id_(0), 225 crossfade_theme_frame_overlay_id_(0),
227 crossfade_opacity_(0) {} 226 crossfade_opacity_(0) {}
228 227
229 FramePainter::~FramePainter() { 228 FramePainter::~FramePainter() {
230 // Sometimes we are destroyed before the window closes, so ensure we clean up. 229 // Sometimes we are destroyed before the window closes, so ensure we clean up.
231 if (window_) { 230 if (window_) {
232 window_->RemoveObserver(this); 231 window_->RemoveObserver(this);
233 wm::GetWindowSettings(window_)->RemoveObserver(this); 232 wm::GetWindowState(window_)->RemoveObserver(this);
234 } 233 }
235 } 234 }
236 235
237 void FramePainter::Init( 236 void FramePainter::Init(
238 views::Widget* frame, 237 views::Widget* frame,
239 views::View* window_icon, 238 views::View* window_icon,
240 FrameCaptionButtonContainerView* caption_button_container) { 239 FrameCaptionButtonContainerView* caption_button_container) {
241 DCHECK(frame); 240 DCHECK(frame);
242 // window_icon may be NULL. 241 // window_icon may be NULL.
243 DCHECK(caption_button_container); 242 DCHECK(caption_button_container);
(...skipping 23 matching lines...) Expand all
267 kResizeOutsideBoundsScaleForTouch); 266 kResizeOutsideBoundsScaleForTouch);
268 // Ensure we get resize cursors for a few pixels outside our bounds. 267 // Ensure we get resize cursors for a few pixels outside our bounds.
269 window_->SetHitTestBoundsOverrideOuter(mouse_insets, touch_insets); 268 window_->SetHitTestBoundsOverrideOuter(mouse_insets, touch_insets);
270 // Ensure we get resize cursors just inside our bounds as well. 269 // Ensure we get resize cursors just inside our bounds as well.
271 window_->set_hit_test_bounds_override_inner(mouse_insets); 270 window_->set_hit_test_bounds_override_inner(mouse_insets);
272 271
273 // Watch for maximize/restore/fullscreen state changes. Observer removes 272 // Watch for maximize/restore/fullscreen state changes. Observer removes
274 // itself in OnWindowDestroying() below, or in the destructor if we go away 273 // itself in OnWindowDestroying() below, or in the destructor if we go away
275 // before the window. 274 // before the window.
276 window_->AddObserver(this); 275 window_->AddObserver(this);
277 wm::GetWindowSettings(window_)->AddObserver(this); 276 wm::GetWindowState(window_)->AddObserver(this);
278 277
279 // Solo-window header updates are handled by the workspace controller when 278 // Solo-window header updates are handled by the workspace controller when
280 // this window is added to the desktop. 279 // this window is added to the desktop.
281 } 280 }
282 281
283 // static 282 // static
284 void FramePainter::SetSoloWindowHeadersEnabled(bool enabled) { 283 void FramePainter::SetSoloWindowHeadersEnabled(bool enabled) {
285 solo_window_header_enabled = enabled; 284 solo_window_header_enabled = enabled;
286 } 285 }
287 286
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 } 386 }
388 387
389 bool FramePainter::ShouldUseMinimalHeaderStyle(Themed header_themed) const { 388 bool FramePainter::ShouldUseMinimalHeaderStyle(Themed header_themed) const {
390 // Use the minimalistic header style whenever |frame_| is maximized or 389 // Use the minimalistic header style whenever |frame_| is maximized or
391 // fullscreen EXCEPT: 390 // fullscreen EXCEPT:
392 // - If the user has installed a theme with custom images for the header. 391 // - If the user has installed a theme with custom images for the header.
393 // - For windows which are not tracked by the workspace code (which are used 392 // - For windows which are not tracked by the workspace code (which are used
394 // for tab dragging). 393 // for tab dragging).
395 return (frame_->IsMaximized() || frame_->IsFullscreen()) && 394 return (frame_->IsMaximized() || frame_->IsFullscreen()) &&
396 header_themed == THEMED_NO && 395 header_themed == THEMED_NO &&
397 wm::GetWindowSettings(frame_->GetNativeWindow())->tracked_by_workspace(); 396 wm::GetWindowState(frame_->GetNativeWindow())->tracked_by_workspace();
398 } 397 }
399 398
400 void FramePainter::PaintHeader(views::NonClientFrameView* view, 399 void FramePainter::PaintHeader(views::NonClientFrameView* view,
401 gfx::Canvas* canvas, 400 gfx::Canvas* canvas,
402 HeaderMode header_mode, 401 HeaderMode header_mode,
403 int theme_frame_id, 402 int theme_frame_id,
404 int theme_frame_overlay_id) { 403 int theme_frame_overlay_id) {
405 bool initial_paint = (previous_theme_frame_id_ == 0); 404 bool initial_paint = (previous_theme_frame_id_ == 0);
406 if (!initial_paint && 405 if (!initial_paint &&
407 (previous_theme_frame_id_ != theme_frame_id || 406 (previous_theme_frame_id_ != theme_frame_id ||
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 previous_theme_frame_id_ = 0; 611 previous_theme_frame_id_ = 0;
613 previous_theme_frame_overlay_id_ = 0; 612 previous_theme_frame_overlay_id_ = 0;
614 613
615 if (crossfade_animation_.get() && crossfade_animation_->is_animating()) { 614 if (crossfade_animation_.get() && crossfade_animation_->is_animating()) {
616 crossfade_animation_.reset(); 615 crossfade_animation_.reset();
617 frame_->non_client_view()->SchedulePaintInRect(header_frame_bounds_); 616 frame_->non_client_view()->SchedulePaintInRect(header_frame_bounds_);
618 } 617 }
619 } 618 }
620 619
621 /////////////////////////////////////////////////////////////////////////////// 620 ///////////////////////////////////////////////////////////////////////////////
622 // WindowSettings::jObserver overrides: 621 // WindowState::Observer overrides:
623 void FramePainter::OnTrackedByWorkspaceChanged(aura::Window* window, 622 void FramePainter::OnTrackedByWorkspaceChanged(aura::Window* window,
624 bool old) { 623 bool old) {
625 // When 'TrackedByWorkspace' changes, we are going to paint the header 624 // When 'TrackedByWorkspace' changes, we are going to paint the header
626 // differently. Schedule a paint to ensure everything is updated correctly. 625 // differently. Schedule a paint to ensure everything is updated correctly.
627 if (wm::GetWindowSettings(window)->tracked_by_workspace()) 626 if (wm::GetWindowState(window)->tracked_by_workspace())
628 frame_->non_client_view()->SchedulePaint(); 627 frame_->non_client_view()->SchedulePaint();
629 } 628 }
630 629
631 /////////////////////////////////////////////////////////////////////////////// 630 ///////////////////////////////////////////////////////////////////////////////
632 // aura::WindowObserver overrides: 631 // aura::WindowObserver overrides:
633 632
634 void FramePainter::OnWindowPropertyChanged(aura::Window* window, 633 void FramePainter::OnWindowPropertyChanged(aura::Window* window,
635 const void* key, 634 const void* key,
636 intptr_t old) { 635 intptr_t old) {
637 if (key != aura::client::kShowStateKey) 636 if (key != aura::client::kShowStateKey)
638 return; 637 return;
639 638
640 // Maximized and fullscreen windows don't want resize handles overlapping the 639 // Maximized and fullscreen windows don't want resize handles overlapping the
641 // content area, because when the user moves the cursor to the right screen 640 // content area, because when the user moves the cursor to the right screen
642 // edge we want them to be able to hit the scroll bar. 641 // edge we want them to be able to hit the scroll bar.
643 if (ash::wm::IsWindowMaximized(window) || 642 wm::WindowState* window_state = wm::GetWindowState(window);
644 ash::wm::IsWindowFullscreen(window)) { 643 if (window_state->IsMaximizedOrFullscreen()) {
645 window->set_hit_test_bounds_override_inner(gfx::Insets()); 644 window->set_hit_test_bounds_override_inner(gfx::Insets());
646 } else { 645 } else {
647 window->set_hit_test_bounds_override_inner( 646 window->set_hit_test_bounds_override_inner(
648 gfx::Insets(kResizeInsideBoundsSize, kResizeInsideBoundsSize, 647 gfx::Insets(kResizeInsideBoundsSize, kResizeInsideBoundsSize,
649 kResizeInsideBoundsSize, kResizeInsideBoundsSize)); 648 kResizeInsideBoundsSize, kResizeInsideBoundsSize));
650 } 649 }
651 } 650 }
652 651
653 void FramePainter::OnWindowVisibilityChanged(aura::Window* window, 652 void FramePainter::OnWindowVisibilityChanged(aura::Window* window,
654 bool visible) { 653 bool visible) {
655 // OnWindowVisibilityChanged can be called for the child windows of |window_|. 654 // OnWindowVisibilityChanged can be called for the child windows of |window_|.
656 if (window != window_) 655 if (window != window_)
657 return; 656 return;
658 657
659 // Window visibility change may trigger the change of window solo-ness in a 658 // Window visibility change may trigger the change of window solo-ness in a
660 // different window. 659 // different window.
661 UpdateSoloWindowInRoot(window_->GetRootWindow(), visible ? NULL : window_); 660 UpdateSoloWindowInRoot(window_->GetRootWindow(), visible ? NULL : window_);
662 } 661 }
663 662
664 void FramePainter::OnWindowDestroying(aura::Window* destroying) { 663 void FramePainter::OnWindowDestroying(aura::Window* destroying) {
665 DCHECK_EQ(window_, destroying); 664 DCHECK_EQ(window_, destroying);
666 665
667 // Must be removed here and not in the destructor, as the aura::Window is 666 // Must be removed here and not in the destructor, as the aura::Window is
668 // already destroyed when our destructor runs. 667 // already destroyed when our destructor runs.
669 window_->RemoveObserver(this); 668 window_->RemoveObserver(this);
670 wm::GetWindowSettings(window_)->RemoveObserver(this); 669 wm::GetWindowState(window_)->RemoveObserver(this);
671 670
672 // If we have two or more windows open and we close this one, we might trigger 671 // If we have two or more windows open and we close this one, we might trigger
673 // the solo window appearance for another window. 672 // the solo window appearance for another window.
674 UpdateSoloWindowInRoot(window_->GetRootWindow(), window_); 673 UpdateSoloWindowInRoot(window_->GetRootWindow(), window_);
675 674
676 window_ = NULL; 675 window_ = NULL;
677 } 676 }
678 677
679 void FramePainter::OnWindowBoundsChanged(aura::Window* window, 678 void FramePainter::OnWindowBoundsChanged(aura::Window* window,
680 const gfx::Rect& old_bounds, 679 const gfx::Rect& old_bounds,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 int FramePainter::GetCaptionButtonContainerCenterY() const { 719 int FramePainter::GetCaptionButtonContainerCenterY() const {
721 return caption_button_container_->y() + 720 return caption_button_container_->y() +
722 caption_button_container_->height() / 2; 721 caption_button_container_->height() / 2;
723 } 722 }
724 723
725 int FramePainter::GetHeaderCornerRadius() const { 724 int FramePainter::GetHeaderCornerRadius() const {
726 // Use square corners for maximized and fullscreen windows when they are 725 // Use square corners for maximized and fullscreen windows when they are
727 // tracked by the workspace code. (Windows which are not tracked by the 726 // tracked by the workspace code. (Windows which are not tracked by the
728 // workspace code are used for tab dragging.) 727 // workspace code are used for tab dragging.)
729 bool square_corners = ((frame_->IsMaximized() || frame_->IsFullscreen())) && 728 bool square_corners = ((frame_->IsMaximized() || frame_->IsFullscreen())) &&
730 wm::GetWindowSettings(frame_->GetNativeWindow())->tracked_by_workspace(); 729 wm::GetWindowState(frame_->GetNativeWindow())->tracked_by_workspace();
731 const int kCornerRadius = 2; 730 const int kCornerRadius = 2;
732 return square_corners ? 0 : kCornerRadius; 731 return square_corners ? 0 : kCornerRadius;
733 } 732 }
734 733
735 int FramePainter::GetHeaderOpacity( 734 int FramePainter::GetHeaderOpacity(
736 HeaderMode header_mode, 735 HeaderMode header_mode,
737 int theme_frame_id, 736 int theme_frame_id,
738 int theme_frame_overlay_id) const { 737 int theme_frame_overlay_id) const {
739 // User-provided themes are painted fully opaque. 738 // User-provided themes are painted fully opaque.
740 ui::ThemeProvider* theme_provider = frame_->GetThemeProvider(); 739 ui::ThemeProvider* theme_provider = frame_->GetThemeProvider();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 std::vector<Window*> windows = GetWindowsForSoloHeaderUpdate(root_window); 776 std::vector<Window*> windows = GetWindowsForSoloHeaderUpdate(root_window);
778 for (std::vector<Window*>::const_iterator it = windows.begin(); 777 for (std::vector<Window*>::const_iterator it = windows.begin();
779 it != windows.end(); 778 it != windows.end();
780 ++it) { 779 ++it) {
781 Window* window = *it; 780 Window* window = *it;
782 // Various sorts of windows "don't count" for this computation. 781 // Various sorts of windows "don't count" for this computation.
783 if (ignore_window == window || 782 if (ignore_window == window ||
784 !IsSoloWindowHeaderCandidate(window) || 783 !IsSoloWindowHeaderCandidate(window) ||
785 !IsVisibleToRoot(window)) 784 !IsVisibleToRoot(window))
786 continue; 785 continue;
787 if (wm::IsWindowMaximized(window)) 786 if (wm::GetWindowState(window)->IsMaximized())
788 return false; 787 return false;
789 ++visible_window_count; 788 ++visible_window_count;
790 if (visible_window_count > 1) 789 if (visible_window_count > 1)
791 return false; 790 return false;
792 } 791 }
793 // Count must be tested because all windows might be "don't count" windows 792 // Count must be tested because all windows might be "don't count" windows
794 // in the loop above. 793 // in the loop above.
795 return visible_window_count == 1; 794 return visible_window_count == 1;
796 } 795 }
797 796
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 // icon. Don't use |window_icon_| for this computation as it may be NULL. 840 // icon. Don't use |window_icon_| for this computation as it may be NULL.
842 int title_y = GetCaptionButtonContainerCenterY() - title_font.GetHeight() / 2; 841 int title_y = GetCaptionButtonContainerCenterY() - title_font.GetHeight() / 2;
843 return gfx::Rect( 842 return gfx::Rect(
844 title_x, 843 title_x,
845 std::max(0, title_y), 844 std::max(0, title_y),
846 std::max(0, caption_button_container_->x() - kTitleLogoSpacing - title_x), 845 std::max(0, caption_button_container_->x() - kTitleLogoSpacing - title_x),
847 title_font.GetHeight()); 846 title_font.GetHeight());
848 } 847 }
849 848
850 } // namespace ash 849 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/frame_painter.h ('k') | ash/wm/frame_painter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698