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

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

Issue 99553008: Fix regression where the active window header was not used for apps on CrOS (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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 | « no previous file | ui/views/widget/desktop_aura/desktop_native_widget_aura.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/custom_frame_view_ash.h" 5 #include "ash/wm/custom_frame_view_ash.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/wm/caption_buttons/frame_caption_button_container_view.h" 8 #include "ash/wm/caption_buttons/frame_caption_button_container_view.h"
9 #include "ash/wm/caption_buttons/frame_maximize_button.h" 9 #include "ash/wm/caption_buttons/frame_maximize_button.h"
10 #include "ash/wm/caption_buttons/frame_maximize_button_observer.h" 10 #include "ash/wm/caption_buttons/frame_maximize_button_observer.h"
11 #include "ash/wm/frame_border_hit_test_controller.h" 11 #include "ash/wm/frame_border_hit_test_controller.h"
12 #include "ash/wm/header_painter.h" 12 #include "ash/wm/header_painter.h"
13 #include "ash/wm/immersive_fullscreen_controller.h" 13 #include "ash/wm/immersive_fullscreen_controller.h"
14 #include "ash/wm/window_state.h" 14 #include "ash/wm/window_state.h"
15 #include "ash/wm/window_state_delegate.h" 15 #include "ash/wm/window_state_delegate.h"
16 #include "base/command_line.h" 16 #include "base/command_line.h"
17 #include "grit/ash_resources.h" 17 #include "grit/ash_resources.h"
18 #include "ui/aura/client/aura_constants.h" 18 #include "ui/aura/client/aura_constants.h"
19 #include "ui/aura/window.h" 19 #include "ui/aura/window.h"
20 #include "ui/aura/window_observer.h" 20 #include "ui/aura/window_observer.h"
21 #include "ui/gfx/canvas.h" 21 #include "ui/gfx/canvas.h"
22 #include "ui/gfx/font.h" 22 #include "ui/gfx/font.h"
23 #include "ui/gfx/rect.h" 23 #include "ui/gfx/rect.h"
24 #include "ui/gfx/rect_conversions.h"
24 #include "ui/gfx/size.h" 25 #include "ui/gfx/size.h"
25 #include "ui/views/view.h" 26 #include "ui/views/view.h"
26 #include "ui/views/widget/native_widget_aura.h" 27 #include "ui/views/widget/native_widget_aura.h"
27 #include "ui/views/widget/widget.h" 28 #include "ui/views/widget/widget.h"
28 #include "ui/views/widget/widget_delegate.h" 29 #include "ui/views/widget/widget_delegate.h"
29 #include "ui/views/widget/widget_deletion_observer.h" 30 #include "ui/views/widget/widget_deletion_observer.h"
30 31
31 namespace { 32 namespace {
32 33
33 const gfx::Font& GetTitleFont() { 34 const gfx::Font& GetTitleFont() {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 // Returns the view's preferred height. 154 // Returns the view's preferred height.
154 int GetPreferredHeight() const; 155 int GetPreferredHeight() const;
155 156
156 // Returns the view's minimum width. 157 // Returns the view's minimum width.
157 int GetMinimumWidth() const; 158 int GetMinimumWidth() const;
158 159
159 // views::View overrides: 160 // views::View overrides:
160 virtual void Layout() OVERRIDE; 161 virtual void Layout() OVERRIDE;
161 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 162 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
162 163
163 // Sets whether the header should be painted as active.
164 void set_paint_as_active(bool paint_as_active) {
165 paint_as_active_ = paint_as_active;
166 }
167
168 HeaderPainter* header_painter() { 164 HeaderPainter* header_painter() {
169 return header_painter_.get(); 165 return header_painter_.get();
170 } 166 }
171 167
172 private: 168 private:
173 // ImmersiveFullscreenController::Delegate overrides: 169 // ImmersiveFullscreenController::Delegate overrides:
174 virtual void OnImmersiveRevealStarted() OVERRIDE; 170 virtual void OnImmersiveRevealStarted() OVERRIDE;
175 virtual void OnImmersiveRevealEnded() OVERRIDE; 171 virtual void OnImmersiveRevealEnded() OVERRIDE;
176 virtual void OnImmersiveFullscreenExited() OVERRIDE; 172 virtual void OnImmersiveFullscreenExited() OVERRIDE;
177 virtual void SetVisibleFraction(double visible_fraction) OVERRIDE; 173 virtual void SetVisibleFraction(double visible_fraction) OVERRIDE;
(...skipping 11 matching lines...) Expand all
189 // View which contains the window caption buttons. 185 // View which contains the window caption buttons.
190 FrameCaptionButtonContainerView* caption_button_container_; 186 FrameCaptionButtonContainerView* caption_button_container_;
191 187
192 // The maximize bubble widget. |maximize_bubble_| may be non-NULL but have 188 // The maximize bubble widget. |maximize_bubble_| may be non-NULL but have
193 // been already destroyed. 189 // been already destroyed.
194 views::Widget* maximize_bubble_; 190 views::Widget* maximize_bubble_;
195 191
196 // Keeps track of whether |maximize_bubble_| is still alive. 192 // Keeps track of whether |maximize_bubble_| is still alive.
197 scoped_ptr<views::WidgetDeletionObserver> maximize_bubble_lifetime_observer_; 193 scoped_ptr<views::WidgetDeletionObserver> maximize_bubble_lifetime_observer_;
198 194
199 // Whether the header should be painted as active.
200 bool paint_as_active_;
201
202 // The fraction of the header's height which is visible while in fullscreen. 195 // The fraction of the header's height which is visible while in fullscreen.
203 // This value is meaningless when not in fullscreen. 196 // This value is meaningless when not in fullscreen.
204 double fullscreen_visible_fraction_; 197 double fullscreen_visible_fraction_;
205 198
206 DISALLOW_COPY_AND_ASSIGN(HeaderView); 199 DISALLOW_COPY_AND_ASSIGN(HeaderView);
207 }; 200 };
208 201
209 CustomFrameViewAsh::HeaderView::HeaderView(views::Widget* frame) 202 CustomFrameViewAsh::HeaderView::HeaderView(views::Widget* frame)
210 : frame_(frame), 203 : frame_(frame),
211 header_painter_(new ash::HeaderPainter), 204 header_painter_(new ash::HeaderPainter),
212 caption_button_container_(NULL), 205 caption_button_container_(NULL),
213 maximize_bubble_(NULL), 206 maximize_bubble_(NULL),
214 paint_as_active_(false),
215 fullscreen_visible_fraction_(0) { 207 fullscreen_visible_fraction_(0) {
216 // Unfortunately, there is no views::WidgetDelegate::CanMinimize(). Assume 208 // Unfortunately, there is no views::WidgetDelegate::CanMinimize(). Assume
217 // that the window frame can be minimized if it can be maximized. 209 // that the window frame can be minimized if it can be maximized.
218 FrameCaptionButtonContainerView::MinimizeAllowed minimize_allowed = 210 FrameCaptionButtonContainerView::MinimizeAllowed minimize_allowed =
219 frame_->widget_delegate()->CanMaximize() ? 211 frame_->widget_delegate()->CanMaximize() ?
220 FrameCaptionButtonContainerView::MINIMIZE_ALLOWED : 212 FrameCaptionButtonContainerView::MINIMIZE_ALLOWED :
221 FrameCaptionButtonContainerView::MINIMIZE_DISALLOWED; 213 FrameCaptionButtonContainerView::MINIMIZE_DISALLOWED;
222 caption_button_container_ = new FrameCaptionButtonContainerView(frame_, 214 caption_button_container_ = new FrameCaptionButtonContainerView(frame_,
223 minimize_allowed); 215 minimize_allowed);
224 AddChildView(caption_button_container_); 216 AddChildView(caption_button_container_);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 257
266 void CustomFrameViewAsh::HeaderView::Layout() { 258 void CustomFrameViewAsh::HeaderView::Layout() {
267 header_painter_->LayoutHeader(true); 259 header_painter_->LayoutHeader(true);
268 header_painter_->set_header_height(GetPreferredHeight()); 260 header_painter_->set_header_height(GetPreferredHeight());
269 } 261 }
270 262
271 void CustomFrameViewAsh::HeaderView::OnPaint(gfx::Canvas* canvas) { 263 void CustomFrameViewAsh::HeaderView::OnPaint(gfx::Canvas* canvas) {
272 int theme_image_id = 0; 264 int theme_image_id = 0;
273 if (frame_->IsMaximized() || frame_->IsFullscreen()) 265 if (frame_->IsMaximized() || frame_->IsFullscreen())
274 theme_image_id = IDR_AURA_WINDOW_HEADER_BASE_MINIMAL; 266 theme_image_id = IDR_AURA_WINDOW_HEADER_BASE_MINIMAL;
275 else if (paint_as_active_) 267 else if (frame_->non_client_view()->frame_view()->ShouldPaintAsActive())
276 theme_image_id = IDR_AURA_WINDOW_HEADER_BASE_ACTIVE; 268 theme_image_id = IDR_AURA_WINDOW_HEADER_BASE_ACTIVE;
277 else 269 else
278 theme_image_id = IDR_AURA_WINDOW_HEADER_BASE_INACTIVE; 270 theme_image_id = IDR_AURA_WINDOW_HEADER_BASE_INACTIVE;
279 271
280 header_painter_->PaintHeader( 272 header_painter_->PaintHeader(
281 canvas, 273 canvas,
282 theme_image_id, 274 theme_image_id,
283 0); 275 0);
284 header_painter_->PaintTitleBar(canvas, GetTitleFont()); 276 header_painter_->PaintTitleBar(canvas, GetTitleFont());
285 header_painter_->PaintHeaderContentSeparator(canvas); 277 header_painter_->PaintHeaderContentSeparator(canvas);
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 NonClientTopBorderHeight() + min_client_view_size.height()); 462 NonClientTopBorderHeight() + min_client_view_size.height());
471 } 463 }
472 464
473 gfx::Size CustomFrameViewAsh::GetMaximumSize() { 465 gfx::Size CustomFrameViewAsh::GetMaximumSize() {
474 return frame_->client_view()->GetMaximumSize(); 466 return frame_->client_view()->GetMaximumSize();
475 } 467 }
476 468
477 void CustomFrameViewAsh::SchedulePaintInRect(const gfx::Rect& r) { 469 void CustomFrameViewAsh::SchedulePaintInRect(const gfx::Rect& r) {
478 // The HeaderView is not a child of CustomFrameViewAsh. Redirect the paint to 470 // The HeaderView is not a child of CustomFrameViewAsh. Redirect the paint to
479 // HeaderView instead. 471 // HeaderView instead.
480 header_view_->set_paint_as_active(ShouldPaintAsActive()); 472 gfx::RectF to_paint(r);
481 header_view_->SchedulePaint(); 473 views::View::ConvertRectToTarget(this, header_view_, &to_paint);
474 header_view_->SchedulePaintInRect(gfx::ToEnclosingRect(to_paint));
482 } 475 }
483 476
484 bool CustomFrameViewAsh::HitTestRect(const gfx::Rect& rect) const { 477 bool CustomFrameViewAsh::HitTestRect(const gfx::Rect& rect) const {
485 // NonClientView hit tests the NonClientFrameView first instead of going in 478 // NonClientView hit tests the NonClientFrameView first instead of going in
486 // z-order. Return false so that events get to the OverlayView. 479 // z-order. Return false so that events get to the OverlayView.
487 return false; 480 return false;
488 } 481 }
489 482
490 views::View* CustomFrameViewAsh::GetHeaderView() { 483 views::View* CustomFrameViewAsh::GetHeaderView() {
491 return header_view_; 484 return header_view_;
492 } 485 }
493 486
494 //////////////////////////////////////////////////////////////////////////////// 487 ////////////////////////////////////////////////////////////////////////////////
495 // CustomFrameViewAsh, private: 488 // CustomFrameViewAsh, private:
496 489
497 int CustomFrameViewAsh::NonClientTopBorderHeight() const { 490 int CustomFrameViewAsh::NonClientTopBorderHeight() const {
498 return frame_->IsFullscreen() ? 0 : header_view_->GetPreferredHeight(); 491 return frame_->IsFullscreen() ? 0 : header_view_->GetPreferredHeight();
499 } 492 }
500 493
501 } // namespace ash 494 } // namespace ash
OLDNEW
« no previous file with comments | « no previous file | ui/views/widget/desktop_aura/desktop_native_widget_aura.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698