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

Side by Side Diff: views/window/window.cc

Issue 7054052: Move more from Window onto Widget. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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 | « views/window/window.h ('k') | no next file » | 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "views/window/window.h" 5 #include "views/window/window.h"
6 6
7 #include "base/string_util.h" 7 #include "base/string_util.h"
8 #include "base/utf_string_conversions.h"
9 #include "third_party/skia/include/core/SkBitmap.h" 8 #include "third_party/skia/include/core/SkBitmap.h"
10 #include "ui/base/l10n/l10n_font_util.h" 9 #include "ui/base/l10n/l10n_font_util.h"
11 #include "ui/base/resource/resource_bundle.h" 10 #include "ui/base/resource/resource_bundle.h"
12 #include "ui/gfx/font.h" 11 #include "ui/gfx/font.h"
13 #include "ui/gfx/rect.h" 12 #include "ui/gfx/rect.h"
14 #include "ui/gfx/size.h" 13 #include "ui/gfx/size.h"
15 #include "views/widget/widget.h" 14 #include "views/widget/widget.h"
16 #include "views/widget/native_widget.h" 15 #include "views/widget/native_widget.h"
17 #include "views/window/native_window.h" 16 #include "views/window/native_window.h"
18 #include "views/window/window_delegate.h" 17 #include "views/window/window_delegate.h"
19 18
20 namespace views { 19 namespace views {
21 20
22 //////////////////////////////////////////////////////////////////////////////// 21 ////////////////////////////////////////////////////////////////////////////////
23 // Window, public: 22 // Window, public:
24 23
25 Window::InitParams::InitParams(WindowDelegate* window_delegate) 24 Window::InitParams::InitParams(WindowDelegate* window_delegate)
26 : window_delegate(window_delegate), 25 : window_delegate(window_delegate),
27 parent_window(NULL), 26 parent_window(NULL),
28 native_window(NULL), 27 native_window(NULL),
29 widget_init_params(Widget::InitParams::TYPE_WINDOW) { 28 widget_init_params(Widget::InitParams::TYPE_WINDOW) {
30 } 29 }
31 30
32 Window::Window() 31 Window::Window()
33 : native_window_(NULL), 32 : native_window_(NULL),
34 saved_maximized_state_(false), 33 saved_maximized_state_(false),
35 minimum_size_(100, 100), 34 minimum_size_(100, 100) {
36 disable_inactive_rendering_(false),
37 window_closed_(false) {
38 } 35 }
39 36
40 Window::~Window() { 37 Window::~Window() {
41 } 38 }
42 39
43 // static 40 // static
44 Window* Window::CreateChromeWindow(gfx::NativeWindow parent, 41 Window* Window::CreateChromeWindow(gfx::NativeWindow parent,
45 const gfx::Rect& bounds, 42 const gfx::Rect& bounds,
46 WindowDelegate* window_delegate) { 43 WindowDelegate* window_delegate) {
47 Window* window = new Window; 44 Window* window = new Window;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 InitParams modified_params = params; 78 InitParams modified_params = params;
82 modified_params.widget_init_params.delegate = params.window_delegate; 79 modified_params.widget_init_params.delegate = params.window_delegate;
83 DCHECK(!modified_params.widget_init_params.delegate->window_); 80 DCHECK(!modified_params.widget_init_params.delegate->window_);
84 modified_params.widget_init_params.delegate->window_ = this; 81 modified_params.widget_init_params.delegate->window_ = this;
85 modified_params.widget_init_params.native_widget = 82 modified_params.widget_init_params.native_widget =
86 native_window_->AsNativeWidget(); 83 native_window_->AsNativeWidget();
87 Init(modified_params.widget_init_params); 84 Init(modified_params.widget_init_params);
88 OnNativeWindowCreated(modified_params.widget_init_params.bounds); 85 OnNativeWindowCreated(modified_params.widget_init_params.bounds);
89 } 86 }
90 87
91 gfx::Rect Window::GetBounds() const {
92 return GetWindowScreenBounds();
93 }
94
95 gfx::Rect Window::GetNormalBounds() const {
96 return native_window_->GetRestoredBounds();
97 }
98
99 void Window::ShowInactive() {
100 native_window_->ShowNativeWindow(NativeWindow::SHOW_INACTIVE);
101 }
102
103 void Window::DisableInactiveRendering() {
104 disable_inactive_rendering_ = true;
105 non_client_view()->DisableInactiveRendering(disable_inactive_rendering_);
106 }
107
108 void Window::EnableClose(bool enable) {
109 non_client_view()->EnableClose(enable);
110 native_window_->EnableClose(enable);
111 }
112
113 void Window::UpdateWindowTitle() {
114 // If the non-client view is rendering its own title, it'll need to relayout
115 // now.
116 non_client_view()->Layout();
117
118 // Update the native frame's text. We do this regardless of whether or not
119 // the native frame is being used, since this also updates the taskbar, etc.
120 string16 window_title;
121 if (native_window_->AsNativeWidget()->IsScreenReaderActive()) {
122 window_title = WideToUTF16(widget_delegate()->GetAccessibleWindowTitle());
123 } else {
124 window_title = WideToUTF16(widget_delegate()->GetWindowTitle());
125 }
126 base::i18n::AdjustStringForLocaleDirection(&window_title);
127 native_window_->AsNativeWidget()->SetWindowTitle(UTF16ToWide(window_title));
128 }
129
130 void Window::UpdateWindowIcon() {
131 non_client_view()->UpdateWindowIcon();
132 native_window_->AsNativeWidget()->SetWindowIcons(
133 widget_delegate()->GetWindowIcon(),
134 widget_delegate()->GetWindowAppIcon());
135 }
136
137 //////////////////////////////////////////////////////////////////////////////// 88 ////////////////////////////////////////////////////////////////////////////////
138 // Window, Widget overrides: 89 // Window, Widget overrides:
139 90
140 void Window::Show() { 91 void Window::Show() {
141 native_window_->ShowNativeWindow( 92 native_window_->AsNativeWidget()->ShowNativeWidget(
142 saved_maximized_state_ ? NativeWindow::SHOW_MAXIMIZED 93 saved_maximized_state_ ? NativeWidget::SHOW_MAXIMIZED
143 : NativeWindow::SHOW_RESTORED); 94 : NativeWidget::SHOW_RESTORED);
144 // |saved_maximized_state_| only applies the first time the window is shown. 95 // |saved_maximized_state_| only applies the first time the window is shown.
145 // If we don't reset the value the window will be shown maximized every time 96 // If we don't reset the value the window will be shown maximized every time
146 // it is subsequently shown after being hidden. 97 // it is subsequently shown after being hidden.
147 saved_maximized_state_ = false; 98 saved_maximized_state_ = false;
148 } 99 }
149 100
150 void Window::Close() { 101 Window* Window::AsWindow() {
151 if (window_closed_) { 102 return this;
152 // It appears we can hit this code path if you close a modal dialog then 103 }
153 // close the last browser before the destructor is hit, which triggers
154 // invoking Close again.
155 return;
156 }
157 104
158 if (non_client_view()->CanClose()) { 105 const Window* Window::AsWindow() const {
159 SaveWindowPosition(); 106 return this;
160 Widget::Close();
161 window_closed_ = true;
162 }
163 } 107 }
164 108
165 //////////////////////////////////////////////////////////////////////////////// 109 ////////////////////////////////////////////////////////////////////////////////
166 // Window, internal::NativeWindowDelegate implementation: 110 // Window, internal::NativeWindowDelegate implementation:
167 111
168 bool Window::CanActivate() const {
169 return widget_delegate()->CanActivate();
170 }
171
172 bool Window::IsInactiveRenderingDisabled() const {
173 return disable_inactive_rendering_;
174 }
175
176 void Window::EnableInactiveRendering() {
177 disable_inactive_rendering_ = false;
178 non_client_view()->DisableInactiveRendering(false);
179 }
180
181 bool Window::IsModal() const { 112 bool Window::IsModal() const {
182 return widget_delegate()->IsModal(); 113 return widget_delegate()->IsModal();
183 } 114 }
184 115
185 bool Window::IsDialogBox() const { 116 bool Window::IsDialogBox() const {
186 return !!widget_delegate()->AsDialogDelegate(); 117 return !!widget_delegate()->AsDialogDelegate();
187 } 118 }
188 119
189 gfx::Size Window::GetMinimumSize() {
190 return non_client_view()->GetMinimumSize();
191 }
192
193 int Window::GetNonClientComponent(const gfx::Point& point) {
194 return non_client_view()->NonClientHitTest(point);
195 }
196
197 bool Window::ExecuteCommand(int command_id) {
198 return widget_delegate()->ExecuteWindowsCommand(command_id);
199 }
200
201 void Window::OnNativeWindowCreated(const gfx::Rect& bounds) { 120 void Window::OnNativeWindowCreated(const gfx::Rect& bounds) {
202 if (widget_delegate()->IsModal()) 121 if (widget_delegate()->IsModal())
203 native_window_->BecomeModal(); 122 native_window_->BecomeModal();
204 123
205 // Create the ClientView, add it to the NonClientView and add the
206 // NonClientView to the RootView. This will cause everything to be parented.
207 non_client_view()->set_client_view(
208 widget_delegate()->CreateClientView(this));
209 SetContentsView(non_client_view());
210
211 UpdateWindowTitle(); 124 UpdateWindowTitle();
212 native_window_->AsNativeWidget()->SetAccessibleRole(
213 widget_delegate()->GetAccessibleWindowRole());
214 native_window_->AsNativeWidget()->SetAccessibleState(
215 widget_delegate()->GetAccessibleWindowState());
216
217 SetInitialBounds(bounds); 125 SetInitialBounds(bounds);
218 } 126 }
219 127
220 void Window::OnNativeWindowActivationChanged(bool active) {
221 if (!active)
222 SaveWindowPosition();
223 widget_delegate()->OnWindowActivationChanged(active);
224 }
225
226 void Window::OnNativeWindowBeginUserBoundsChange() {
227 widget_delegate()->OnWindowBeginUserBoundsChange();
228 }
229
230 void Window::OnNativeWindowEndUserBoundsChange() {
231 widget_delegate()->OnWindowEndUserBoundsChange();
232 }
233
234 void Window::OnNativeWindowDestroying() {
235 non_client_view()->WindowClosing();
236 widget_delegate()->WindowClosing();
237 }
238
239 void Window::OnNativeWindowBoundsChanged() {
240 SaveWindowPosition();
241 }
242
243 Window* Window::AsWindow() {
244 return this;
245 }
246
247 internal::NativeWidgetDelegate* Window::AsNativeWidgetDelegate() { 128 internal::NativeWidgetDelegate* Window::AsNativeWidgetDelegate() {
248 return this; 129 return this;
249 } 130 }
250 131
251 //////////////////////////////////////////////////////////////////////////////// 132 ////////////////////////////////////////////////////////////////////////////////
252 // Window, private: 133 // Window, private:
253 134
254 void Window::SetInitialBounds(const gfx::Rect& bounds) { 135 void Window::SetInitialBounds(const gfx::Rect& bounds) {
255 // First we obtain the window's saved show-style and store it. We need to do 136 // First we obtain the window's saved show-style and store it. We need to do
256 // this here, rather than in Show() because by the time Show() is called, 137 // this here, rather than in Show() because by the time Show() is called,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 // center over its parent. 173 // center over its parent.
293 native_window_->AsNativeWidget()->CenterWindow( 174 native_window_->AsNativeWidget()->CenterWindow(
294 non_client_view()->GetPreferredSize()); 175 non_client_view()->GetPreferredSize());
295 } else { 176 } else {
296 // Use the supplied initial bounds. 177 // Use the supplied initial bounds.
297 SetBoundsConstrained(bounds, NULL); 178 SetBoundsConstrained(bounds, NULL);
298 } 179 }
299 } 180 }
300 } 181 }
301 182
302 void Window::SaveWindowPosition() {
303 // The window delegate does the actual saving for us. It seems like (judging
304 // by go/crash) that in some circumstances we can end up here after
305 // WM_DESTROY, at which point the window delegate is likely gone. So just
306 // bail.
307 if (!widget_delegate())
308 return;
309
310 bool maximized;
311 gfx::Rect bounds;
312 native_window_->AsNativeWidget()->GetWindowBoundsAndMaximizedState(
313 &bounds,
314 &maximized);
315 widget_delegate()->SaveWindowPlacement(bounds, maximized);
316 }
317
318 } // namespace views 183 } // namespace views
OLDNEW
« no previous file with comments | « views/window/window.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698