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

Side by Side Diff: chrome/browser/ui/views/frame/app_non_client_frame_view_ash.cc

Issue 13934007: Adding experimental maximize mode (behind a flag) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed flag usage again Created 7 years, 7 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
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 "chrome/browser/ui/views/frame/app_non_client_frame_view_ash.h" 5 #include "chrome/browser/ui/views/frame/app_non_client_frame_view_ash.h"
6 6
7 #include "ash/shell_delegate.h" 7 #include "ash/shell_delegate.h"
8 #include "ash/wm/workspace/frame_maximize_button.h" 8 #include "ash/wm/workspace/frame_maximize_button.h"
9 #include "base/debug/stack_trace.h" 9 #include "base/debug/stack_trace.h"
10 #include "base/i18n/rtl.h" 10 #include "base/i18n/rtl.h"
(...skipping 24 matching lines...) Expand all
35 const int kButtonOverlap = 1; 35 const int kButtonOverlap = 1;
36 36
37 // TODO(pkotwicz): Remove these constants once the IDR_AURA_FULLSCREEN_SHADOW 37 // TODO(pkotwicz): Remove these constants once the IDR_AURA_FULLSCREEN_SHADOW
38 // resource is updated. 38 // resource is updated.
39 const int kShadowHeightStretch = -1; 39 const int kShadowHeightStretch = -1;
40 } 40 }
41 41
42 class AppNonClientFrameViewAsh::ControlView 42 class AppNonClientFrameViewAsh::ControlView
43 : public views::View, public views::ButtonListener { 43 : public views::View, public views::ButtonListener {
44 public: 44 public:
45 // TODO(skuhne): If we keep the "always maximized" experiment we might want to
46 // make this function be able to work with a |restore_button_| which is NULL.
45 explicit ControlView(AppNonClientFrameViewAsh* owner) : 47 explicit ControlView(AppNonClientFrameViewAsh* owner) :
46 owner_(owner), 48 owner_(owner),
47 close_button_(new views::ImageButton(this)), 49 close_button_(new views::ImageButton(this)),
48 restore_button_(new ash::FrameMaximizeButton(this, owner_)) 50 restore_button_(new ash::FrameMaximizeButton(this, owner_)),
51 original_maximize_button_width_(0)
49 { 52 {
50 close_button_->SetAccessibleName( 53 close_button_->SetAccessibleName(
51 l10n_util::GetStringUTF16(IDS_ACCNAME_CLOSE)); 54 l10n_util::GetStringUTF16(IDS_ACCNAME_CLOSE));
52 restore_button_->SetAccessibleName( 55 restore_button_->SetAccessibleName(
53 l10n_util::GetStringUTF16(IDS_ACCNAME_MAXIMIZE)); 56 l10n_util::GetStringUTF16(IDS_ACCNAME_MAXIMIZE));
54 57
55 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 58 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
56 59
57 int control_base_resource_id = owner->browser_view()->IsOffTheRecord() ? 60 int control_base_resource_id = owner->browser_view()->IsOffTheRecord() ?
58 IDR_AURA_WINDOW_HEADER_BASE_INCOGNITO_ACTIVE : 61 IDR_AURA_WINDOW_HEADER_BASE_INCOGNITO_ACTIVE :
59 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE; 62 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE;
60 control_base_ = rb.GetImageNamed(control_base_resource_id).ToImageSkia(); 63 control_base_ = rb.GetImageNamed(control_base_resource_id).ToImageSkia();
61 shadow_ = rb.GetImageNamed( 64 shadow_ = rb.GetImageNamed(
62 base::i18n::IsRTL() ? IDR_AURA_WINDOW_FULLSCREEN_SHADOW_RTL : 65 base::i18n::IsRTL() ? IDR_AURA_WINDOW_FULLSCREEN_SHADOW_RTL :
63 IDR_AURA_WINDOW_FULLSCREEN_SHADOW).ToImageSkia(); 66 IDR_AURA_WINDOW_FULLSCREEN_SHADOW).ToImageSkia();
64 67
65 AddChildView(close_button_); 68 AddChildView(close_button_);
66 AddChildView(restore_button_); 69 AddChildView(restore_button_);
67 } 70 }
68 71
69 virtual ~ControlView() {} 72 virtual ~ControlView() {}
70 73
71 virtual void Layout() OVERRIDE { 74 virtual void Layout() OVERRIDE {
75 if (ash::Shell::IsForcedMaximizeMode()) {
76 // TODO(skuhne): If this experiment would get persued, it would be better
77 // to check here the |restore_button_|'s visibility. Furthermore we
78 // should change |shadow_| to a new bitmap which can host only a single
79 // button.
80 gfx::Size size = restore_button_->bounds().size();
81 if (size.width()) {
82 original_maximize_button_width_ = size.width();
83 size.set_width(0);
84 restore_button_->SetSize(size);
85 }
86 }
72 restore_button_->SetPosition(gfx::Point(kShadowStart, 0)); 87 restore_button_->SetPosition(gfx::Point(kShadowStart, 0));
73 close_button_->SetPosition(gfx::Point(kShadowStart + 88 close_button_->SetPosition(gfx::Point(kShadowStart +
74 restore_button_->width() - kButtonOverlap, 0)); 89 restore_button_->width() - kButtonOverlap, 0));
75 } 90 }
76 91
77 virtual void ViewHierarchyChanged(bool is_add, View* parent, 92 virtual void ViewHierarchyChanged(bool is_add, View* parent,
78 View* child) OVERRIDE { 93 View* child) OVERRIDE {
79 if (is_add && child == this) { 94 if (is_add && child == this) {
80 SetButtonImages(restore_button_, 95 SetButtonImages(restore_button_,
81 IDR_AURA_WINDOW_FULLSCREEN_RESTORE, 96 IDR_AURA_WINDOW_FULLSCREEN_RESTORE,
82 IDR_AURA_WINDOW_FULLSCREEN_RESTORE_H, 97 IDR_AURA_WINDOW_FULLSCREEN_RESTORE_H,
83 IDR_AURA_WINDOW_FULLSCREEN_RESTORE_P); 98 IDR_AURA_WINDOW_FULLSCREEN_RESTORE_P);
84 restore_button_->SizeToPreferredSize(); 99 restore_button_->SizeToPreferredSize();
85 100
86 SetButtonImages(close_button_, 101 SetButtonImages(close_button_,
87 IDR_AURA_WINDOW_FULLSCREEN_CLOSE, 102 IDR_AURA_WINDOW_FULLSCREEN_CLOSE,
88 IDR_AURA_WINDOW_FULLSCREEN_CLOSE_H, 103 IDR_AURA_WINDOW_FULLSCREEN_CLOSE_H,
89 IDR_AURA_WINDOW_FULLSCREEN_CLOSE_P); 104 IDR_AURA_WINDOW_FULLSCREEN_CLOSE_P);
90 close_button_->SizeToPreferredSize(); 105 close_button_->SizeToPreferredSize();
91 } 106 }
92 } 107 }
93 108
94 virtual gfx::Size GetPreferredSize() OVERRIDE { 109 virtual gfx::Size GetPreferredSize() OVERRIDE {
95 return gfx::Size(shadow_->width(), 110 return gfx::Size(shadow_->width() - original_maximize_button_width_,
sky 2013/05/01 21:01:56 Can you use restore_button_->GetPreferredSize().wi
Mr4D (OOO till 08-26) 2013/05/01 22:48:49 Yepp - it works. Done.
96 shadow_->height() + kShadowHeightStretch); 111 shadow_->height() + kShadowHeightStretch);
97 } 112 }
98 113
99 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { 114 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
100 canvas->TileImageInt(*control_base_, 115 canvas->TileImageInt(*control_base_,
101 base::i18n::IsRTL() ? 0 : restore_button_->x(), 116 base::i18n::IsRTL() ? 0 : restore_button_->x(),
102 restore_button_->y(), 117 restore_button_->y(),
103 restore_button_->width() - kButtonOverlap + close_button_->width(), 118 restore_button_->width() - kButtonOverlap + close_button_->width(),
104 restore_button_->height()); 119 restore_button_->height());
105 120
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 button->SetImage(views::CustomButton::STATE_PRESSED, 161 button->SetImage(views::CustomButton::STATE_PRESSED,
147 theme_provider->GetImageSkiaNamed(pushed_image_id)); 162 theme_provider->GetImageSkiaNamed(pushed_image_id));
148 } 163 }
149 164
150 AppNonClientFrameViewAsh* owner_; 165 AppNonClientFrameViewAsh* owner_;
151 views::ImageButton* close_button_; 166 views::ImageButton* close_button_;
152 views::ImageButton* restore_button_; 167 views::ImageButton* restore_button_;
153 const gfx::ImageSkia* control_base_; 168 const gfx::ImageSkia* control_base_;
154 const gfx::ImageSkia* shadow_; 169 const gfx::ImageSkia* shadow_;
155 170
171 // The original size of the maximize button.
172 int original_maximize_button_width_;
173
156 DISALLOW_COPY_AND_ASSIGN(ControlView); 174 DISALLOW_COPY_AND_ASSIGN(ControlView);
157 }; 175 };
158 176
159 // Observer to detect when the browser frame widget closes so we can clean 177 // Observer to detect when the browser frame widget closes so we can clean
160 // up our ControlView. Because we can be closed via a keyboard shortcut we 178 // up our ControlView. Because we can be closed via a keyboard shortcut we
161 // are not guaranteed to run AppNonClientFrameView's Close() or Restore(). 179 // are not guaranteed to run AppNonClientFrameView's Close() or Restore().
162 class AppNonClientFrameViewAsh::FrameObserver : public views::WidgetObserver { 180 class AppNonClientFrameViewAsh::FrameObserver : public views::WidgetObserver {
163 public: 181 public:
164 explicit FrameObserver(AppNonClientFrameViewAsh* owner) : owner_(owner) {} 182 explicit FrameObserver(AppNonClientFrameViewAsh* owner) : owner_(owner) {}
165 virtual ~FrameObserver() {} 183 virtual ~FrameObserver() {}
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 base::i18n::IsRTL() ? 0 : (width() - preferred.width()), 0, 297 base::i18n::IsRTL() ? 0 : (width() - preferred.width()), 0,
280 preferred.width(), preferred.height()); 298 preferred.width(), preferred.height());
281 } 299 }
282 300
283 void AppNonClientFrameViewAsh::CloseControlWidget() { 301 void AppNonClientFrameViewAsh::CloseControlWidget() {
284 if (control_widget_) { 302 if (control_widget_) {
285 control_widget_->Close(); 303 control_widget_->Close();
286 control_widget_ = NULL; 304 control_widget_ = NULL;
287 } 305 }
288 } 306 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698