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

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

Issue 126513004: Rename RootWindowHost to WindowTreeHost (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
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/browser_desktop_root_window_host_win.h" 5 #include "chrome/browser/ui/views/frame/browser_desktop_root_window_host_win.h"
6 6
7 #include <dwmapi.h> 7 #include <dwmapi.h>
8 8
9 #include "chrome/browser/lifetime/application_lifetime.h" 9 #include "chrome/browser/lifetime/application_lifetime.h"
10 #include "chrome/browser/themes/theme_service.h" 10 #include "chrome/browser/themes/theme_service.h"
(...skipping 13 matching lines...) Expand all
24 #pragma comment(lib, "dwmapi.lib") 24 #pragma comment(lib, "dwmapi.lib")
25 25
26 namespace { 26 namespace {
27 27
28 const int kClientEdgeThickness = 3; 28 const int kClientEdgeThickness = 3;
29 // We need to offset the DWMFrame into the toolbar so that the blackness 29 // We need to offset the DWMFrame into the toolbar so that the blackness
30 // doesn't show up on our rounded corners. 30 // doesn't show up on our rounded corners.
31 const int kDWMFrameTopOffset = 3; 31 const int kDWMFrameTopOffset = 3;
32 32
33 // DesktopThemeProvider maps resource ids using MapThemeImage(). This is 33 // DesktopThemeProvider maps resource ids using MapThemeImage(). This is
34 // necessary for BrowserDesktopRootWindowHostWin so that it uses the windows 34 // necessary for BrowserDesktopWindowTreeHostWin so that it uses the windows
35 // theme images rather than the ash theme images. 35 // theme images rather than the ash theme images.
36 class DesktopThemeProvider : public ui::ThemeProvider { 36 class DesktopThemeProvider : public ui::ThemeProvider {
37 public: 37 public:
38 explicit DesktopThemeProvider(ui::ThemeProvider* delegate) 38 explicit DesktopThemeProvider(ui::ThemeProvider* delegate)
39 : delegate_(delegate) { 39 : delegate_(delegate) {
40 } 40 }
41 41
42 virtual gfx::ImageSkia* GetImageSkiaNamed(int id) const OVERRIDE { 42 virtual gfx::ImageSkia* GetImageSkiaNamed(int id) const OVERRIDE {
43 return delegate_->GetImageSkiaNamed( 43 return delegate_->GetImageSkiaNamed(
44 chrome::MapThemeImage(chrome::HOST_DESKTOP_TYPE_NATIVE, id)); 44 chrome::MapThemeImage(chrome::HOST_DESKTOP_TYPE_NATIVE, id));
(...skipping 20 matching lines...) Expand all
65 65
66 private: 66 private:
67 ui::ThemeProvider* delegate_; 67 ui::ThemeProvider* delegate_;
68 68
69 DISALLOW_COPY_AND_ASSIGN(DesktopThemeProvider); 69 DISALLOW_COPY_AND_ASSIGN(DesktopThemeProvider);
70 }; 70 };
71 71
72 } // namespace 72 } // namespace
73 73
74 //////////////////////////////////////////////////////////////////////////////// 74 ////////////////////////////////////////////////////////////////////////////////
75 // BrowserDesktopRootWindowHostWin, public: 75 // BrowserDesktopWindowTreeHostWin, public:
76 76
77 BrowserDesktopRootWindowHostWin::BrowserDesktopRootWindowHostWin( 77 BrowserDesktopWindowTreeHostWin::BrowserDesktopWindowTreeHostWin(
78 views::internal::NativeWidgetDelegate* native_widget_delegate, 78 views::internal::NativeWidgetDelegate* native_widget_delegate,
79 views::DesktopNativeWidgetAura* desktop_native_widget_aura, 79 views::DesktopNativeWidgetAura* desktop_native_widget_aura,
80 BrowserView* browser_view, 80 BrowserView* browser_view,
81 BrowserFrame* browser_frame) 81 BrowserFrame* browser_frame)
82 : DesktopRootWindowHostWin(native_widget_delegate, 82 : DesktopWindowTreeHostWin(native_widget_delegate,
83 desktop_native_widget_aura), 83 desktop_native_widget_aura),
84 browser_view_(browser_view), 84 browser_view_(browser_view),
85 browser_frame_(browser_frame), 85 browser_frame_(browser_frame),
86 did_gdi_clear_(false) { 86 did_gdi_clear_(false) {
87 scoped_ptr<ui::ThemeProvider> theme_provider( 87 scoped_ptr<ui::ThemeProvider> theme_provider(
88 new DesktopThemeProvider(ThemeServiceFactory::GetForProfile( 88 new DesktopThemeProvider(ThemeServiceFactory::GetForProfile(
89 browser_view->browser()->profile()))); 89 browser_view->browser()->profile())));
90 browser_frame->SetThemeProvider(theme_provider.Pass()); 90 browser_frame->SetThemeProvider(theme_provider.Pass());
91 } 91 }
92 92
93 BrowserDesktopRootWindowHostWin::~BrowserDesktopRootWindowHostWin() { 93 BrowserDesktopWindowTreeHostWin::~BrowserDesktopWindowTreeHostWin() {
94 } 94 }
95 95
96 views::NativeMenuWin* BrowserDesktopRootWindowHostWin::GetSystemMenu() { 96 views::NativeMenuWin* BrowserDesktopWindowTreeHostWin::GetSystemMenu() {
97 if (!system_menu_.get()) { 97 if (!system_menu_.get()) {
98 SystemMenuInsertionDelegateWin insertion_delegate; 98 SystemMenuInsertionDelegateWin insertion_delegate;
99 system_menu_.reset( 99 system_menu_.reset(
100 new views::NativeMenuWin(browser_frame_->GetSystemMenuModel(), 100 new views::NativeMenuWin(browser_frame_->GetSystemMenuModel(),
101 GetHWND())); 101 GetHWND()));
102 system_menu_->Rebuild(&insertion_delegate); 102 system_menu_->Rebuild(&insertion_delegate);
103 } 103 }
104 return system_menu_.get(); 104 return system_menu_.get();
105 } 105 }
106 106
107 //////////////////////////////////////////////////////////////////////////////// 107 ////////////////////////////////////////////////////////////////////////////////
108 // BrowserDesktopRootWindowHostWin, BrowserDesktopRootWindowHost implementation: 108 // BrowserDesktopWindowTreeHostWin, BrowserDesktopWindowTreeHost implementation:
109 109
110 views::DesktopRootWindowHost* 110 views::DesktopWindowTreeHost*
111 BrowserDesktopRootWindowHostWin::AsDesktopRootWindowHost() { 111 BrowserDesktopWindowTreeHostWin::AsDesktopWindowTreeHost() {
112 return this; 112 return this;
113 } 113 }
114 114
115 int BrowserDesktopRootWindowHostWin::GetMinimizeButtonOffset() const { 115 int BrowserDesktopWindowTreeHostWin::GetMinimizeButtonOffset() const {
116 return minimize_button_metrics_.GetMinimizeButtonOffsetX(); 116 return minimize_button_metrics_.GetMinimizeButtonOffsetX();
117 } 117 }
118 118
119 bool BrowserDesktopRootWindowHostWin::UsesNativeSystemMenu() const { 119 bool BrowserDesktopWindowTreeHostWin::UsesNativeSystemMenu() const {
120 return true; 120 return true;
121 } 121 }
122 122
123 //////////////////////////////////////////////////////////////////////////////// 123 ////////////////////////////////////////////////////////////////////////////////
124 // BrowserDesktopRootWindowHostWin, views::DesktopRootWindowHostWin overrides: 124 // BrowserDesktopWindowTreeHostWin, views::DesktopWindowTreeHostWin overrides:
125 125
126 int BrowserDesktopRootWindowHostWin::GetInitialShowState() const { 126 int BrowserDesktopWindowTreeHostWin::GetInitialShowState() const {
127 STARTUPINFO si = {0}; 127 STARTUPINFO si = {0};
128 si.cb = sizeof(si); 128 si.cb = sizeof(si);
129 si.dwFlags = STARTF_USESHOWWINDOW; 129 si.dwFlags = STARTF_USESHOWWINDOW;
130 GetStartupInfo(&si); 130 GetStartupInfo(&si);
131 return si.wShowWindow; 131 return si.wShowWindow;
132 } 132 }
133 133
134 bool BrowserDesktopRootWindowHostWin::GetClientAreaInsets( 134 bool BrowserDesktopWindowTreeHostWin::GetClientAreaInsets(
135 gfx::Insets* insets) const { 135 gfx::Insets* insets) const {
136 // Use the default client insets for an opaque frame or a glass popup/app 136 // Use the default client insets for an opaque frame or a glass popup/app
137 // frame. 137 // frame.
138 if (!GetWidget()->ShouldUseNativeFrame() || 138 if (!GetWidget()->ShouldUseNativeFrame() ||
139 !browser_view_->IsBrowserTypeNormal()) { 139 !browser_view_->IsBrowserTypeNormal()) {
140 return false; 140 return false;
141 } 141 }
142 142
143 int border_thickness = GetSystemMetrics(SM_CXSIZEFRAME); 143 int border_thickness = GetSystemMetrics(SM_CXSIZEFRAME);
144 // In fullscreen mode, we have no frame. In restored mode, we draw our own 144 // In fullscreen mode, we have no frame. In restored mode, we draw our own
145 // client edge over part of the default frame. 145 // client edge over part of the default frame.
146 if (GetWidget()->IsFullscreen()) 146 if (GetWidget()->IsFullscreen())
147 border_thickness = 0; 147 border_thickness = 0;
148 else if (!IsMaximized()) 148 else if (!IsMaximized())
149 border_thickness -= kClientEdgeThickness; 149 border_thickness -= kClientEdgeThickness;
150 insets->Set(0, border_thickness, border_thickness, border_thickness); 150 insets->Set(0, border_thickness, border_thickness, border_thickness);
151 return true; 151 return true;
152 } 152 }
153 153
154 void BrowserDesktopRootWindowHostWin::HandleCreate() { 154 void BrowserDesktopWindowTreeHostWin::HandleCreate() {
155 DesktopRootWindowHostWin::HandleCreate(); 155 DesktopWindowTreeHostWin::HandleCreate();
156 browser_window_property_manager_ = 156 browser_window_property_manager_ =
157 BrowserWindowPropertyManager::CreateBrowserWindowPropertyManager( 157 BrowserWindowPropertyManager::CreateBrowserWindowPropertyManager(
158 browser_view_); 158 browser_view_);
159 if (browser_window_property_manager_) 159 if (browser_window_property_manager_)
160 browser_window_property_manager_->UpdateWindowProperties(GetHWND()); 160 browser_window_property_manager_->UpdateWindowProperties(GetHWND());
161 } 161 }
162 162
163 void BrowserDesktopRootWindowHostWin::HandleFrameChanged() { 163 void BrowserDesktopWindowTreeHostWin::HandleFrameChanged() {
164 // Reinitialize the status bubble, since it needs to be initialized 164 // Reinitialize the status bubble, since it needs to be initialized
165 // differently depending on whether or not DWM composition is enabled 165 // differently depending on whether or not DWM composition is enabled
166 browser_view_->InitStatusBubble(); 166 browser_view_->InitStatusBubble();
167 167
168 // We need to update the glass region on or off before the base class adjusts 168 // We need to update the glass region on or off before the base class adjusts
169 // the window region. 169 // the window region.
170 UpdateDWMFrame(); 170 UpdateDWMFrame();
171 DesktopRootWindowHostWin::HandleFrameChanged(); 171 DesktopWindowTreeHostWin::HandleFrameChanged();
172 } 172 }
173 173
174 bool BrowserDesktopRootWindowHostWin::PreHandleMSG(UINT message, 174 bool BrowserDesktopWindowTreeHostWin::PreHandleMSG(UINT message,
175 WPARAM w_param, 175 WPARAM w_param,
176 LPARAM l_param, 176 LPARAM l_param,
177 LRESULT* result) { 177 LRESULT* result) {
178 switch (message) { 178 switch (message) {
179 case WM_ACTIVATE: 179 case WM_ACTIVATE:
180 if (LOWORD(w_param) != WA_INACTIVE) 180 if (LOWORD(w_param) != WA_INACTIVE)
181 minimize_button_metrics_.OnHWNDActivated(); 181 minimize_button_metrics_.OnHWNDActivated();
182 return false; 182 return false;
183 case WM_ENDSESSION: 183 case WM_ENDSESSION:
184 chrome::SessionEnding(); 184 chrome::SessionEnding();
185 return true; 185 return true;
186 case WM_INITMENUPOPUP: 186 case WM_INITMENUPOPUP:
187 GetSystemMenu()->UpdateStates(); 187 GetSystemMenu()->UpdateStates();
188 return true; 188 return true;
189 } 189 }
190 return DesktopRootWindowHostWin::PreHandleMSG( 190 return DesktopWindowTreeHostWin::PreHandleMSG(
191 message, w_param, l_param, result); 191 message, w_param, l_param, result);
192 } 192 }
193 193
194 void BrowserDesktopRootWindowHostWin::PostHandleMSG(UINT message, 194 void BrowserDesktopWindowTreeHostWin::PostHandleMSG(UINT message,
195 WPARAM w_param, 195 WPARAM w_param,
196 LPARAM l_param) { 196 LPARAM l_param) {
197 switch (message) { 197 switch (message) {
198 case WM_CREATE: 198 case WM_CREATE:
199 minimize_button_metrics_.Init(GetHWND()); 199 minimize_button_metrics_.Init(GetHWND());
200 break; 200 break;
201 case WM_WINDOWPOSCHANGED: { 201 case WM_WINDOWPOSCHANGED: {
202 UpdateDWMFrame(); 202 UpdateDWMFrame();
203 203
204 // Windows lies to us about the position of the minimize button before a 204 // Windows lies to us about the position of the minimize button before a
205 // window is visible. We use this position to place the OTR avatar in RTL 205 // window is visible. We use this position to place the OTR avatar in RTL
206 // mode, so when the window is shown, we need to re-layout and schedule a 206 // mode, so when the window is shown, we need to re-layout and schedule a
207 // paint for the non-client frame view so that the icon top has the correct 207 // paint for the non-client frame view so that the icon top has the correct
208 // position when the window becomes visible. This fixes bugs where the icon 208 // position when the window becomes visible. This fixes bugs where the icon
209 // appears to overlay the minimize button. 209 // appears to overlay the minimize button.
210 // Note that we will call Layout every time SetWindowPos is called with 210 // Note that we will call Layout every time SetWindowPos is called with
211 // SWP_SHOWWINDOW, however callers typically are careful about not 211 // SWP_SHOWWINDOW, however callers typically are careful about not
212 // specifying this flag unless necessary to avoid flicker. 212 // specifying this flag unless necessary to avoid flicker.
213 // This may be invoked during creation on XP and before the non_client_view 213 // This may be invoked during creation on XP and before the non_client_view
214 // has been created. 214 // has been created.
215 WINDOWPOS* window_pos = reinterpret_cast<WINDOWPOS*>(l_param); 215 WINDOWPOS* window_pos = reinterpret_cast<WINDOWPOS*>(l_param);
216 if (window_pos->flags & SWP_SHOWWINDOW && GetWidget()->non_client_view()) { 216 if (window_pos->flags & SWP_SHOWWINDOW && GetWidget()->non_client_view()) {
217 GetWidget()->non_client_view()->Layout(); 217 GetWidget()->non_client_view()->Layout();
218 GetWidget()->non_client_view()->SchedulePaint(); 218 GetWidget()->non_client_view()->SchedulePaint();
219 } 219 }
220 break; 220 break;
221 } 221 }
222 case WM_ERASEBKGND: 222 case WM_ERASEBKGND:
223 if (!did_gdi_clear_ && DesktopRootWindowHostWin::ShouldUseNativeFrame()) { 223 if (!did_gdi_clear_ && DesktopWindowTreeHostWin::ShouldUseNativeFrame()) {
224 // This is necessary to avoid white flashing in the titlebar area around 224 // This is necessary to avoid white flashing in the titlebar area around
225 // the minimize/maximize/close buttons. 225 // the minimize/maximize/close buttons.
226 HDC dc = GetDC(GetHWND()); 226 HDC dc = GetDC(GetHWND());
227 MARGINS margins = GetDWMFrameMargins(); 227 MARGINS margins = GetDWMFrameMargins();
228 RECT client_rect; 228 RECT client_rect;
229 GetClientRect(GetHWND(), &client_rect); 229 GetClientRect(GetHWND(), &client_rect);
230 HBRUSH brush = CreateSolidBrush(0); 230 HBRUSH brush = CreateSolidBrush(0);
231 RECT rect = { 0, 0, client_rect.right, margins.cyTopHeight }; 231 RECT rect = { 0, 0, client_rect.right, margins.cyTopHeight };
232 FillRect(dc, &rect, brush); 232 FillRect(dc, &rect, brush);
233 DeleteObject(brush); 233 DeleteObject(brush);
234 ReleaseDC(GetHWND(), dc); 234 ReleaseDC(GetHWND(), dc);
235 did_gdi_clear_ = true; 235 did_gdi_clear_ = true;
236 } 236 }
237 break; 237 break;
238 } 238 }
239 } 239 }
240 240
241 241
242 bool BrowserDesktopRootWindowHostWin::IsUsingCustomFrame() const { 242 bool BrowserDesktopWindowTreeHostWin::IsUsingCustomFrame() const {
243 // We don't theme popup or app windows, so regardless of whether or not a 243 // We don't theme popup or app windows, so regardless of whether or not a
244 // theme is active for normal browser windows, we don't want to use the custom 244 // theme is active for normal browser windows, we don't want to use the custom
245 // frame for popups/apps. 245 // frame for popups/apps.
246 if (!browser_view_->IsBrowserTypeNormal() && 246 if (!browser_view_->IsBrowserTypeNormal() &&
247 !DesktopRootWindowHostWin::IsUsingCustomFrame()) { 247 !DesktopWindowTreeHostWin::IsUsingCustomFrame()) {
248 return false; 248 return false;
249 } 249 }
250 250
251 // Otherwise, we use the native frame when we're told we should by the theme 251 // Otherwise, we use the native frame when we're told we should by the theme
252 // provider (e.g. no custom theme is active). 252 // provider (e.g. no custom theme is active).
253 return !GetWidget()->GetThemeProvider()->ShouldUseNativeFrame(); 253 return !GetWidget()->GetThemeProvider()->ShouldUseNativeFrame();
254 } 254 }
255 255
256 bool BrowserDesktopRootWindowHostWin::ShouldUseNativeFrame() { 256 bool BrowserDesktopWindowTreeHostWin::ShouldUseNativeFrame() {
257 if (!views::DesktopRootWindowHostWin::ShouldUseNativeFrame()) 257 if (!views::DesktopWindowTreeHostWin::ShouldUseNativeFrame())
258 return false; 258 return false;
259 // This function can get called when the Browser window is closed i.e. in the 259 // This function can get called when the Browser window is closed i.e. in the
260 // context of the BrowserView destructor. 260 // context of the BrowserView destructor.
261 if (!browser_view_->browser()) 261 if (!browser_view_->browser())
262 return false; 262 return false;
263 return chrome::ShouldUseNativeFrame(browser_view_, 263 return chrome::ShouldUseNativeFrame(browser_view_,
264 GetWidget()->GetThemeProvider()); 264 GetWidget()->GetThemeProvider());
265 } 265 }
266 266
267 void BrowserDesktopRootWindowHostWin::FrameTypeChanged() { 267 void BrowserDesktopWindowTreeHostWin::FrameTypeChanged() {
268 views::DesktopRootWindowHostWin::FrameTypeChanged(); 268 views::DesktopWindowTreeHostWin::FrameTypeChanged();
269 did_gdi_clear_ = false; 269 did_gdi_clear_ = false;
270 } 270 }
271 271
272 //////////////////////////////////////////////////////////////////////////////// 272 ////////////////////////////////////////////////////////////////////////////////
273 // BrowserDesktopRootWindowHostWin, private: 273 // BrowserDesktopWindowTreeHostWin, private:
274 274
275 void BrowserDesktopRootWindowHostWin::UpdateDWMFrame() { 275 void BrowserDesktopWindowTreeHostWin::UpdateDWMFrame() {
276 // For "normal" windows on Aero, we always need to reset the glass area 276 // For "normal" windows on Aero, we always need to reset the glass area
277 // correctly, even if we're not currently showing the native frame (e.g. 277 // correctly, even if we're not currently showing the native frame (e.g.
278 // because a theme is showing), so we explicitly check for that case rather 278 // because a theme is showing), so we explicitly check for that case rather
279 // than checking browser_frame_->ShouldUseNativeFrame() here. Using that here 279 // than checking browser_frame_->ShouldUseNativeFrame() here. Using that here
280 // would mean we wouldn't reset the glass area to zero when moving from the 280 // would mean we wouldn't reset the glass area to zero when moving from the
281 // native frame to an opaque frame, leading to graphical glitches behind the 281 // native frame to an opaque frame, leading to graphical glitches behind the
282 // opaque frame. Instead, we use that function below to tell us whether the 282 // opaque frame. Instead, we use that function below to tell us whether the
283 // frame is currently native or opaque. 283 // frame is currently native or opaque.
284 if (!GetWidget()->client_view() || !browser_view_->IsBrowserTypeNormal() || 284 if (!GetWidget()->client_view() || !browser_view_->IsBrowserTypeNormal() ||
285 !DesktopRootWindowHostWin::ShouldUseNativeFrame()) 285 !DesktopWindowTreeHostWin::ShouldUseNativeFrame())
286 return; 286 return;
287 287
288 MARGINS margins = GetDWMFrameMargins(); 288 MARGINS margins = GetDWMFrameMargins();
289 289
290 DwmExtendFrameIntoClientArea(GetHWND(), &margins); 290 DwmExtendFrameIntoClientArea(GetHWND(), &margins);
291 } 291 }
292 292
293 MARGINS BrowserDesktopRootWindowHostWin::GetDWMFrameMargins() const { 293 MARGINS BrowserDesktopWindowTreeHostWin::GetDWMFrameMargins() const {
294 MARGINS margins = { 0 }; 294 MARGINS margins = { 0 };
295 295
296 // If the opaque frame is visible, we use the default (zero) margins. 296 // If the opaque frame is visible, we use the default (zero) margins.
297 // Otherwise, we need to figure out how to extend the glass in. 297 // Otherwise, we need to figure out how to extend the glass in.
298 if (GetWidget()->ShouldUseNativeFrame()) { 298 if (GetWidget()->ShouldUseNativeFrame()) {
299 // In fullscreen mode, we don't extend glass into the client area at all, 299 // In fullscreen mode, we don't extend glass into the client area at all,
300 // because the GDI-drawn text in the web content composited over it will 300 // because the GDI-drawn text in the web content composited over it will
301 // become semi-transparent over any glass area. 301 // become semi-transparent over any glass area.
302 if (!IsMaximized() && !GetWidget()->IsFullscreen()) { 302 if (!IsMaximized() && !GetWidget()->IsFullscreen()) {
303 margins.cxLeftWidth = kClientEdgeThickness + 1; 303 margins.cxLeftWidth = kClientEdgeThickness + 1;
304 margins.cxRightWidth = kClientEdgeThickness + 1; 304 margins.cxRightWidth = kClientEdgeThickness + 1;
305 margins.cyBottomHeight = kClientEdgeThickness + 1; 305 margins.cyBottomHeight = kClientEdgeThickness + 1;
306 margins.cyTopHeight = kClientEdgeThickness + 1; 306 margins.cyTopHeight = kClientEdgeThickness + 1;
307 } 307 }
308 // In maximized mode, we only have a titlebar strip of glass, no side/bottom 308 // In maximized mode, we only have a titlebar strip of glass, no side/bottom
309 // borders. 309 // borders.
310 if (!browser_view_->IsFullscreen()) { 310 if (!browser_view_->IsFullscreen()) {
311 gfx::Rect tabstrip_bounds( 311 gfx::Rect tabstrip_bounds(
312 browser_frame_->GetBoundsForTabStrip(browser_view_->tabstrip())); 312 browser_frame_->GetBoundsForTabStrip(browser_view_->tabstrip()));
313 tabstrip_bounds = gfx::win::DIPToScreenRect(tabstrip_bounds); 313 tabstrip_bounds = gfx::win::DIPToScreenRect(tabstrip_bounds);
314 margins.cyTopHeight = tabstrip_bounds.bottom() + kDWMFrameTopOffset; 314 margins.cyTopHeight = tabstrip_bounds.bottom() + kDWMFrameTopOffset;
315 } 315 }
316 } 316 }
317 return margins; 317 return margins;
318 } 318 }
319 319
320 //////////////////////////////////////////////////////////////////////////////// 320 ////////////////////////////////////////////////////////////////////////////////
321 // BrowserDesktopRootWindowHost, public: 321 // BrowserDesktopWindowTreeHost, public:
322 322
323 // static 323 // static
324 BrowserDesktopRootWindowHost* 324 BrowserDesktopWindowTreeHost*
325 BrowserDesktopRootWindowHost::CreateBrowserDesktopRootWindowHost( 325 BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost(
326 views::internal::NativeWidgetDelegate* native_widget_delegate, 326 views::internal::NativeWidgetDelegate* native_widget_delegate,
327 views::DesktopNativeWidgetAura* desktop_native_widget_aura, 327 views::DesktopNativeWidgetAura* desktop_native_widget_aura,
328 BrowserView* browser_view, 328 BrowserView* browser_view,
329 BrowserFrame* browser_frame) { 329 BrowserFrame* browser_frame) {
330 return new BrowserDesktopRootWindowHostWin(native_widget_delegate, 330 return new BrowserDesktopWindowTreeHostWin(native_widget_delegate,
331 desktop_native_widget_aura, 331 desktop_native_widget_aura,
332 browser_view, 332 browser_view,
333 browser_frame); 333 browser_frame);
334 } 334 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698