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

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

Issue 7015051: Re-land: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 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) 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 "chrome/browser/ui/views/frame/glass_browser_frame_view.h" 5 #include "chrome/browser/ui/views/frame/glass_browser_frame_view.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/app/chrome_command_ids.h" 9 #include "chrome/app/chrome_command_ids.h"
10 #include "chrome/app/chrome_dll_resource.h" 10 #include "chrome/app/chrome_dll_resource.h"
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 std::min(frame_->GetMinimizeButtonOffset(), width()); 123 std::min(frame_->GetMinimizeButtonOffset(), width());
124 int tabstrip_x = browser_view_->ShouldShowOffTheRecordAvatar() ? 124 int tabstrip_x = browser_view_->ShouldShowOffTheRecordAvatar() ?
125 (otr_avatar_bounds_.right() + kOTRSideSpacing) : 125 (otr_avatar_bounds_.right() + kOTRSideSpacing) :
126 NonClientBorderThickness(); 126 NonClientBorderThickness();
127 // In RTL languages, we have moved an avatar icon left by the size of window 127 // In RTL languages, we have moved an avatar icon left by the size of window
128 // controls to prevent it from being rendered over them. So, we use its x 128 // controls to prevent it from being rendered over them. So, we use its x
129 // position to move this tab strip left when maximized. Also, we can render 129 // position to move this tab strip left when maximized. Also, we can render
130 // a tab strip until the left end of this window without considering the size 130 // a tab strip until the left end of this window without considering the size
131 // of window controls in RTL languages. 131 // of window controls in RTL languages.
132 if (base::i18n::IsRTL()) { 132 if (base::i18n::IsRTL()) {
133 if (!browser_view_->ShouldShowOffTheRecordAvatar() && 133 if (!browser_view_->ShouldShowOffTheRecordAvatar() && frame_->IsMaximized())
134 frame_->GetWindow()->IsMaximized())
135 tabstrip_x += otr_avatar_bounds_.x(); 134 tabstrip_x += otr_avatar_bounds_.x();
136 minimize_button_offset = width(); 135 minimize_button_offset = width();
137 } 136 }
138 int maximized_spacing = 137 int maximized_spacing =
139 kNewTabCaptionMaximizedSpacing + 138 kNewTabCaptionMaximizedSpacing +
140 (show_profile_button() && profile_button_->IsVisible() ? 139 (show_profile_button() && profile_button_->IsVisible() ?
141 profile_button_->GetPreferredSize().width() + 140 profile_button_->GetPreferredSize().width() +
142 ProfileMenuButton::kProfileTagHorizontalSpacing : 0); 141 ProfileMenuButton::kProfileTagHorizontalSpacing : 0);
143 int tabstrip_width = minimize_button_offset - tabstrip_x - 142 int tabstrip_width = minimize_button_offset - tabstrip_x -
144 (frame_->GetWindow()->IsMaximized() ? 143 (frame_->IsMaximized() ?
145 maximized_spacing : kNewTabCaptionRestoredSpacing); 144 maximized_spacing : kNewTabCaptionRestoredSpacing);
146 return gfx::Rect(tabstrip_x, GetHorizontalTabStripVerticalOffset(false), 145 return gfx::Rect(tabstrip_x, GetHorizontalTabStripVerticalOffset(false),
147 std::max(0, tabstrip_width), 146 std::max(0, tabstrip_width),
148 tabstrip->GetPreferredSize().height()); 147 tabstrip->GetPreferredSize().height());
149 } 148 }
150 149
151 int GlassBrowserFrameView::GetHorizontalTabStripVerticalOffset( 150 int GlassBrowserFrameView::GetHorizontalTabStripVerticalOffset(
152 bool restored) const { 151 bool restored) const {
153 return NonClientTopBorderHeight(restored, true); 152 return NonClientTopBorderHeight(restored, true);
154 } 153 }
(...skipping 16 matching lines...) Expand all
171 gfx::Rect GlassBrowserFrameView::GetBoundsForClientView() const { 170 gfx::Rect GlassBrowserFrameView::GetBoundsForClientView() const {
172 return client_view_bounds_; 171 return client_view_bounds_;
173 } 172 }
174 173
175 bool GlassBrowserFrameView::AlwaysUseNativeFrame() const { 174 bool GlassBrowserFrameView::AlwaysUseNativeFrame() const {
176 return frame_->AlwaysUseNativeFrame(); 175 return frame_->AlwaysUseNativeFrame();
177 } 176 }
178 177
179 gfx::Rect GlassBrowserFrameView::GetWindowBoundsForClientBounds( 178 gfx::Rect GlassBrowserFrameView::GetWindowBoundsForClientBounds(
180 const gfx::Rect& client_bounds) const { 179 const gfx::Rect& client_bounds) const {
181 HWND hwnd = frame_->GetWindow()->GetNativeWindow(); 180 HWND hwnd = frame_->GetNativeWindow();
182 if (!browser_view_->IsTabStripVisible() && hwnd) { 181 if (!browser_view_->IsTabStripVisible() && hwnd) {
183 // If we don't have a tabstrip, we're either a popup or an app window, in 182 // If we don't have a tabstrip, we're either a popup or an app window, in
184 // which case we have a standard size non-client area and can just use 183 // which case we have a standard size non-client area and can just use
185 // AdjustWindowRectEx to obtain it. We check for a non-NULL window handle in 184 // AdjustWindowRectEx to obtain it. We check for a non-NULL window handle in
186 // case this gets called before the window is actually created. 185 // case this gets called before the window is actually created.
187 RECT rect = client_bounds.ToRECT(); 186 RECT rect = client_bounds.ToRECT();
188 AdjustWindowRectEx(&rect, GetWindowLong(hwnd, GWL_STYLE), FALSE, 187 AdjustWindowRectEx(&rect, GetWindowLong(hwnd, GWL_STYLE), FALSE,
189 GetWindowLong(hwnd, GWL_EXSTYLE)); 188 GetWindowLong(hwnd, GWL_EXSTYLE));
190 return gfx::Rect(rect); 189 return gfx::Rect(rect);
191 } 190 }
192 191
193 int top_height = NonClientTopBorderHeight(false, false); 192 int top_height = NonClientTopBorderHeight(false, false);
194 int border_thickness = NonClientBorderThickness(); 193 int border_thickness = NonClientBorderThickness();
195 return gfx::Rect(std::max(0, client_bounds.x() - border_thickness), 194 return gfx::Rect(std::max(0, client_bounds.x() - border_thickness),
196 std::max(0, client_bounds.y() - top_height), 195 std::max(0, client_bounds.y() - top_height),
197 client_bounds.width() + (2 * border_thickness), 196 client_bounds.width() + (2 * border_thickness),
198 client_bounds.height() + top_height + border_thickness); 197 client_bounds.height() + top_height + border_thickness);
199 } 198 }
200 199
201 int GlassBrowserFrameView::NonClientHitTest(const gfx::Point& point) { 200 int GlassBrowserFrameView::NonClientHitTest(const gfx::Point& point) {
202 // If the browser isn't in normal mode, we haven't customized the frame, so 201 // If the browser isn't in normal mode, we haven't customized the frame, so
203 // Windows can figure this out. If the point isn't within our bounds, then 202 // Windows can figure this out. If the point isn't within our bounds, then
204 // it's in the native portion of the frame, so again Windows can figure it 203 // it's in the native portion of the frame, so again Windows can figure it
205 // out. 204 // out.
206 if (!browser_view_->IsBrowserTypeNormal() || !bounds().Contains(point)) 205 if (!browser_view_->IsBrowserTypeNormal() || !bounds().Contains(point))
207 return HTNOWHERE; 206 return HTNOWHERE;
208 207
209 int frame_component = 208 int frame_component = frame_->client_view()->NonClientHitTest(point);
210 frame_->GetWindow()->client_view()->NonClientHitTest(point);
211 209
212 // See if we're in the sysmenu region. We still have to check the tabstrip 210 // See if we're in the sysmenu region. We still have to check the tabstrip
213 // first so that clicks in a tab don't get treated as sysmenu clicks. 211 // first so that clicks in a tab don't get treated as sysmenu clicks.
214 int nonclient_border_thickness = NonClientBorderThickness(); 212 int nonclient_border_thickness = NonClientBorderThickness();
215 if (gfx::Rect(nonclient_border_thickness, GetSystemMetrics(SM_CXSIZEFRAME), 213 if (gfx::Rect(nonclient_border_thickness, GetSystemMetrics(SM_CXSIZEFRAME),
216 GetSystemMetrics(SM_CXSMICON), 214 GetSystemMetrics(SM_CXSMICON),
217 GetSystemMetrics(SM_CYSMICON)).Contains(point)) 215 GetSystemMetrics(SM_CYSMICON)).Contains(point))
218 return (frame_component == HTCLIENT) ? HTCLIENT : HTSYSMENU; 216 return (frame_component == HTCLIENT) ? HTCLIENT : HTSYSMENU;
219 217
220 if (frame_component != HTNOWHERE) 218 if (frame_component != HTNOWHERE)
221 return frame_component; 219 return frame_component;
222 220
223 // See if the point is within the profile menu button. 221 // See if the point is within the profile menu button.
224 if (show_profile_button() && profile_button_->IsVisible() && 222 if (show_profile_button() && profile_button_->IsVisible() &&
225 profile_button_->GetMirroredBounds().Contains(point)) 223 profile_button_->GetMirroredBounds().Contains(point))
226 return HTCLIENT; 224 return HTCLIENT;
227 225
228 int frame_border_thickness = FrameBorderThickness(); 226 int frame_border_thickness = FrameBorderThickness();
229 int window_component = GetHTComponentForFrame(point, frame_border_thickness, 227 int window_component = GetHTComponentForFrame(point, frame_border_thickness,
230 nonclient_border_thickness, frame_border_thickness, 228 nonclient_border_thickness, frame_border_thickness,
231 kResizeAreaCornerSize - frame_border_thickness, 229 kResizeAreaCornerSize - frame_border_thickness,
232 frame_->GetWindow()->window_delegate()->CanResize()); 230 frame_->window_delegate()->CanResize());
233 // Fall back to the caption if no other component matches. 231 // Fall back to the caption if no other component matches.
234 return (window_component == HTNOWHERE) ? HTCAPTION : window_component; 232 return (window_component == HTNOWHERE) ? HTCAPTION : window_component;
235 } 233 }
236 234
237 /////////////////////////////////////////////////////////////////////////////// 235 ///////////////////////////////////////////////////////////////////////////////
238 // GlassBrowserFrameView, views::ViewMenuDelegate implementation: 236 // GlassBrowserFrameView, views::ViewMenuDelegate implementation:
239 void GlassBrowserFrameView::RunMenu(views::View *source, const gfx::Point &pt) { 237 void GlassBrowserFrameView::RunMenu(views::View *source, const gfx::Point &pt) {
240 if (profile_menu_model_ == NULL) 238 if (profile_menu_model_ == NULL)
241 profile_menu_model_.reset(new ProfileMenuModel); 239 profile_menu_model_.reset(new ProfileMenuModel);
242 gfx::Point menu_point(pt.x(), 240 gfx::Point menu_point(pt.x(),
243 pt.y() + kMenuDisplayOffset); 241 pt.y() + kMenuDisplayOffset);
244 profile_menu_model_->RunMenuAt(menu_point); 242 profile_menu_model_->RunMenuAt(menu_point);
245 } 243 }
246 244
247 /////////////////////////////////////////////////////////////////////////////// 245 ///////////////////////////////////////////////////////////////////////////////
248 // GlassBrowserFrameView, views::View overrides: 246 // GlassBrowserFrameView, views::View overrides:
249 247
250 void GlassBrowserFrameView::OnPaint(gfx::Canvas* canvas) { 248 void GlassBrowserFrameView::OnPaint(gfx::Canvas* canvas) {
251 if (!browser_view_->IsTabStripVisible()) 249 if (!browser_view_->IsTabStripVisible())
252 return; // Nothing is visible, so don't bother to paint. 250 return; // Nothing is visible, so don't bother to paint.
253 251
254 PaintToolbarBackground(canvas); 252 PaintToolbarBackground(canvas);
255 if (browser_view_->ShouldShowOffTheRecordAvatar()) 253 if (browser_view_->ShouldShowOffTheRecordAvatar())
256 PaintOTRAvatar(canvas); 254 PaintOTRAvatar(canvas);
257 if (!frame_->GetWindow()->IsMaximized()) 255 if (!frame_->IsMaximized())
258 PaintRestoredClientEdge(canvas); 256 PaintRestoredClientEdge(canvas);
259 } 257 }
260 258
261 void GlassBrowserFrameView::Layout() { 259 void GlassBrowserFrameView::Layout() {
262 LayoutOTRAvatar(); 260 LayoutOTRAvatar();
263 LayoutClientView(); 261 LayoutClientView();
264 LayoutProfileTag(); 262 LayoutProfileTag();
265 } 263 }
266 264
267 bool GlassBrowserFrameView::HitTest(const gfx::Point& l) const { 265 bool GlassBrowserFrameView::HitTest(const gfx::Point& l) const {
268 // The ProfileMenuButton intrudes into the client area when the window is 266 // The ProfileMenuButton intrudes into the client area when the window is
269 // maximized. 267 // maximized.
270 if (frame_->GetWindow()->IsMaximized() && show_profile_button() && 268 if (frame_->IsMaximized() && show_profile_button() &&
271 profile_button_->IsVisible() && 269 profile_button_->IsVisible() &&
272 profile_button_->GetMirroredBounds().Contains(l)) { 270 profile_button_->GetMirroredBounds().Contains(l)) {
273 return true; 271 return true;
274 } else { 272 } else {
275 return !GetWindow()->client_view()->bounds().Contains(l); 273 return !frame_->client_view()->bounds().Contains(l);
276 } 274 }
277 } 275 }
278 276
279 /////////////////////////////////////////////////////////////////////////////// 277 ///////////////////////////////////////////////////////////////////////////////
280 // GlassBrowserFrameView, private: 278 // GlassBrowserFrameView, private:
281 279
282 int GlassBrowserFrameView::FrameBorderThickness() const { 280 int GlassBrowserFrameView::FrameBorderThickness() const {
283 views::Window* window = frame_->GetWindow(); 281 return (frame_->IsMaximized() || frame_->IsFullscreen()) ?
284 return (window->IsMaximized() || window->IsFullscreen()) ?
285 0 : GetSystemMetrics(SM_CXSIZEFRAME); 282 0 : GetSystemMetrics(SM_CXSIZEFRAME);
286 } 283 }
287 284
288 int GlassBrowserFrameView::NonClientBorderThickness() const { 285 int GlassBrowserFrameView::NonClientBorderThickness() const {
289 views::Window* window = frame_->GetWindow(); 286 if (frame_->IsMaximized() || frame_->IsFullscreen())
290 if (window->IsMaximized() || window->IsFullscreen())
291 return 0; 287 return 0;
292 288
293 return browser_view_->UseVerticalTabs() ? 289 return browser_view_->UseVerticalTabs() ?
294 kNonClientVerticalTabStripBorderThickness : 290 kNonClientVerticalTabStripBorderThickness :
295 kNonClientBorderThickness; 291 kNonClientBorderThickness;
296 } 292 }
297 293
298 int GlassBrowserFrameView::NonClientTopBorderHeight( 294 int GlassBrowserFrameView::NonClientTopBorderHeight(
299 bool restored, 295 bool restored,
300 bool ignore_vertical_tabs) const { 296 bool ignore_vertical_tabs) const {
301 if (!restored && frame_->GetWindow()->IsFullscreen()) 297 if (!restored && frame_->IsFullscreen())
302 return 0; 298 return 0;
303 // We'd like to use FrameBorderThickness() here, but the maximized Aero glass 299 // We'd like to use FrameBorderThickness() here, but the maximized Aero glass
304 // frame has a 0 frame border around most edges and a CYSIZEFRAME-thick border 300 // frame has a 0 frame border around most edges and a CYSIZEFRAME-thick border
305 // at the top (see AeroGlassFrame::OnGetMinMaxInfo()). 301 // at the top (see AeroGlassFrame::OnGetMinMaxInfo()).
306 if (browser_view_->IsTabStripVisible() && !ignore_vertical_tabs && 302 if (browser_view_->IsTabStripVisible() && !ignore_vertical_tabs &&
307 browser_view_->UseVerticalTabs()) 303 browser_view_->UseVerticalTabs())
308 return GetSystemMetrics(SM_CYSIZEFRAME) + GetSystemMetrics(SM_CYCAPTION); 304 return GetSystemMetrics(SM_CYSIZEFRAME) + GetSystemMetrics(SM_CYCAPTION);
309 return GetSystemMetrics(SM_CYSIZEFRAME) + 305 return GetSystemMetrics(SM_CYSIZEFRAME) +
310 ((!restored && browser_view_->IsMaximized()) ? 306 ((!restored && browser_view_->IsMaximized()) ?
311 -kTabstripTopShadowThickness : kNonClientRestoredExtraThickness); 307 -kTabstripTopShadowThickness : kNonClientRestoredExtraThickness);
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 } 425 }
430 426
431 void GlassBrowserFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) { 427 void GlassBrowserFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) {
432 ui::ThemeProvider* tp = GetThemeProvider(); 428 ui::ThemeProvider* tp = GetThemeProvider();
433 gfx::Rect client_area_bounds = CalculateClientAreaBounds(width(), height()); 429 gfx::Rect client_area_bounds = CalculateClientAreaBounds(width(), height());
434 430
435 // The client edges start below the toolbar upper corner images regardless 431 // The client edges start below the toolbar upper corner images regardless
436 // of how tall the toolbar itself is. 432 // of how tall the toolbar itself is.
437 int client_area_top = browser_view_->UseVerticalTabs() ? 433 int client_area_top = browser_view_->UseVerticalTabs() ?
438 client_area_bounds.y() : 434 client_area_bounds.y() :
439 (frame_->GetWindow()->client_view()->y() + 435 (frame_->client_view()->y() +
440 browser_view_->GetToolbarBounds().y() + 436 browser_view_->GetToolbarBounds().y() +
441 tp->GetBitmapNamed(IDR_CONTENT_TOP_LEFT_CORNER)->height()); 437 tp->GetBitmapNamed(IDR_CONTENT_TOP_LEFT_CORNER)->height());
442 int client_area_bottom = 438 int client_area_bottom =
443 std::max(client_area_top, height() - NonClientBorderThickness()); 439 std::max(client_area_top, height() - NonClientBorderThickness());
444 int client_area_height = client_area_bottom - client_area_top; 440 int client_area_height = client_area_bottom - client_area_top;
445 441
446 // Draw the client edge images. 442 // Draw the client edge images.
447 SkBitmap* right = tp->GetBitmapNamed(IDR_CONTENT_RIGHT_SIDE); 443 SkBitmap* right = tp->GetBitmapNamed(IDR_CONTENT_RIGHT_SIDE);
448 canvas->TileImageInt(*right, client_area_bounds.right(), client_area_top, 444 canvas->TileImageInt(*right, client_area_bounds.right(), client_area_top,
449 right->width(), client_area_height); 445 right->width(), client_area_height);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 SkBitmap otr_avatar_icon = browser_view_->GetOTRAvatarIcon(); 486 SkBitmap otr_avatar_icon = browser_view_->GetOTRAvatarIcon();
491 int otr_bottom, otr_restored_y; 487 int otr_bottom, otr_restored_y;
492 if (browser_view_->UseVerticalTabs()) { 488 if (browser_view_->UseVerticalTabs()) {
493 otr_bottom = NonClientTopBorderHeight(false, false) - kOTRBottomSpacing; 489 otr_bottom = NonClientTopBorderHeight(false, false) - kOTRBottomSpacing;
494 otr_restored_y = kFrameShadowThickness; 490 otr_restored_y = kFrameShadowThickness;
495 } else { 491 } else {
496 otr_bottom = GetHorizontalTabStripVerticalOffset(false) + 492 otr_bottom = GetHorizontalTabStripVerticalOffset(false) +
497 browser_view_->GetTabStripHeight() - kOTRBottomSpacing; 493 browser_view_->GetTabStripHeight() - kOTRBottomSpacing;
498 otr_restored_y = otr_bottom - otr_avatar_icon.height(); 494 otr_restored_y = otr_bottom - otr_avatar_icon.height();
499 } 495 }
500 int otr_y = frame_->GetWindow()->IsMaximized() ? 496 int otr_y = frame_->IsMaximized() ?
501 (NonClientTopBorderHeight(false, true) + kTabstripTopShadowThickness) : 497 (NonClientTopBorderHeight(false, true) + kTabstripTopShadowThickness) :
502 otr_restored_y; 498 otr_restored_y;
503 otr_avatar_bounds_.SetRect(otr_x, otr_y, otr_avatar_icon.width(), 499 otr_avatar_bounds_.SetRect(otr_x, otr_y, otr_avatar_icon.width(),
504 browser_view_->ShouldShowOffTheRecordAvatar() ? (otr_bottom - otr_y) : 0); 500 browser_view_->ShouldShowOffTheRecordAvatar() ? (otr_bottom - otr_y) : 0);
505 } 501 }
506 502
507 void GlassBrowserFrameView::LayoutClientView() { 503 void GlassBrowserFrameView::LayoutClientView() {
508 client_view_bounds_ = CalculateClientAreaBounds(width(), height()); 504 client_view_bounds_ = CalculateClientAreaBounds(width(), height());
509 } 505 }
510 506
(...skipping 18 matching lines...) Expand all
529 525
530 profile_button_->ClearMaxTextSize(); 526 profile_button_->ClearMaxTextSize();
531 profile_button_->SetVisible(true); 527 profile_button_->SetVisible(true);
532 int x_tag = 528 int x_tag =
533 // The x position of minimize button in the frame 529 // The x position of minimize button in the frame
534 frame_->GetMinimizeButtonOffset() - 530 frame_->GetMinimizeButtonOffset() -
535 // - the space between the minimize button and the profile button 531 // - the space between the minimize button and the profile button
536 ProfileMenuButton::kProfileTagHorizontalSpacing - 532 ProfileMenuButton::kProfileTagHorizontalSpacing -
537 // - the width of the profile button 533 // - the width of the profile button
538 profile_button_->GetPreferredSize().width(); 534 profile_button_->GetPreferredSize().width();
539 int y_maximized_offset = frame_->GetWindow()->IsMaximized() ? 535 int y_maximized_offset = frame_->IsMaximized() ?
540 kProfileElementMaximizedYOffset : 0; 536 kProfileElementMaximizedYOffset : 0;
541 profile_button_->SetBounds( 537 profile_button_->SetBounds(
542 x_tag, 538 x_tag,
543 kProfileButtonYPosition + y_maximized_offset, 539 kProfileButtonYPosition + y_maximized_offset,
544 profile_button_->GetPreferredSize().width(), 540 profile_button_->GetPreferredSize().width(),
545 profile_button_->GetPreferredSize().height()); 541 profile_button_->GetPreferredSize().height());
546 542
547 profile_tag_->SetVisible(true); 543 profile_tag_->SetVisible(true);
548 profile_tag_->set_is_signed_in(!profile_name.empty()); 544 profile_tag_->set_is_signed_in(!profile_name.empty());
549 profile_tag_->SetBounds( 545 profile_tag_->SetBounds(
(...skipping 13 matching lines...) Expand all
563 return gfx::Rect(border_thickness, top_height, 559 return gfx::Rect(border_thickness, top_height,
564 std::max(0, width - (2 * border_thickness)), 560 std::max(0, width - (2 * border_thickness)),
565 std::max(0, height - top_height - border_thickness)); 561 std::max(0, height - top_height - border_thickness));
566 } 562 }
567 563
568 void GlassBrowserFrameView::StartThrobber() { 564 void GlassBrowserFrameView::StartThrobber() {
569 if (!throbber_running_) { 565 if (!throbber_running_) {
570 throbber_running_ = true; 566 throbber_running_ = true;
571 throbber_frame_ = 0; 567 throbber_frame_ = 0;
572 InitThrobberIcons(); 568 InitThrobberIcons();
573 SendMessage(frame_->GetWindow()->GetNativeWindow(), WM_SETICON, 569 SendMessage(frame_->GetNativeWindow(), WM_SETICON,
574 static_cast<WPARAM>(ICON_SMALL), 570 static_cast<WPARAM>(ICON_SMALL),
575 reinterpret_cast<LPARAM>(throbber_icons_[throbber_frame_])); 571 reinterpret_cast<LPARAM>(throbber_icons_[throbber_frame_]));
576 } 572 }
577 } 573 }
578 574
579 void GlassBrowserFrameView::StopThrobber() { 575 void GlassBrowserFrameView::StopThrobber() {
580 if (throbber_running_) { 576 if (throbber_running_) {
581 throbber_running_ = false; 577 throbber_running_ = false;
582 578
583 HICON frame_icon = NULL; 579 HICON frame_icon = NULL;
584 580
585 // Check if hosted BrowserView has a window icon to use. 581 // Check if hosted BrowserView has a window icon to use.
586 if (browser_view_->ShouldShowWindowIcon()) { 582 if (browser_view_->ShouldShowWindowIcon()) {
587 SkBitmap icon = browser_view_->GetWindowIcon(); 583 SkBitmap icon = browser_view_->GetWindowIcon();
588 if (!icon.isNull()) 584 if (!icon.isNull())
589 frame_icon = IconUtil::CreateHICONFromSkBitmap(icon); 585 frame_icon = IconUtil::CreateHICONFromSkBitmap(icon);
590 } 586 }
591 587
592 // Fallback to class icon. 588 // Fallback to class icon.
593 if (!frame_icon) { 589 if (!frame_icon) {
594 frame_icon = reinterpret_cast<HICON>(GetClassLongPtr( 590 frame_icon = reinterpret_cast<HICON>(GetClassLongPtr(
595 frame_->GetWindow()->GetNativeWindow(), GCLP_HICONSM)); 591 frame_->GetNativeWindow(), GCLP_HICONSM));
596 } 592 }
597 593
598 // This will reset the small icon which we set in the throbber code. 594 // This will reset the small icon which we set in the throbber code.
599 // WM_SETICON with NULL icon restores the icon for title bar but not 595 // WM_SETICON with NULL icon restores the icon for title bar but not
600 // for taskbar. See http://crbug.com/29996 596 // for taskbar. See http://crbug.com/29996
601 SendMessage(frame_->GetWindow()->GetNativeWindow(), WM_SETICON, 597 SendMessage(frame_->GetNativeWindow(), WM_SETICON,
602 static_cast<WPARAM>(ICON_SMALL), 598 static_cast<WPARAM>(ICON_SMALL),
603 reinterpret_cast<LPARAM>(frame_icon)); 599 reinterpret_cast<LPARAM>(frame_icon));
604 } 600 }
605 } 601 }
606 602
607 void GlassBrowserFrameView::DisplayNextThrobberFrame() { 603 void GlassBrowserFrameView::DisplayNextThrobberFrame() {
608 throbber_frame_ = (throbber_frame_ + 1) % kThrobberIconCount; 604 throbber_frame_ = (throbber_frame_ + 1) % kThrobberIconCount;
609 SendMessage(frame_->GetWindow()->GetNativeWindow(), WM_SETICON, 605 SendMessage(frame_->GetNativeWindow(), WM_SETICON,
610 static_cast<WPARAM>(ICON_SMALL), 606 static_cast<WPARAM>(ICON_SMALL),
611 reinterpret_cast<LPARAM>(throbber_icons_[throbber_frame_])); 607 reinterpret_cast<LPARAM>(throbber_icons_[throbber_frame_]));
612 } 608 }
613 609
614 void GlassBrowserFrameView::Observe(NotificationType type, 610 void GlassBrowserFrameView::Observe(NotificationType type,
615 const NotificationSource& source, 611 const NotificationSource& source,
616 const NotificationDetails& details) { 612 const NotificationDetails& details) {
617 DCHECK_EQ(NotificationType::PREF_CHANGED, type.value); 613 DCHECK_EQ(NotificationType::PREF_CHANGED, type.value);
618 std::string* name = Details<std::string>(details).ptr(); 614 std::string* name = Details<std::string>(details).ptr();
619 if (prefs::kGoogleServicesUsername == *name) 615 if (prefs::kGoogleServicesUsername == *name)
(...skipping 11 matching lines...) Expand all
631 static bool initialized = false; 627 static bool initialized = false;
632 if (!initialized) { 628 if (!initialized) {
633 ResourceBundle &rb = ResourceBundle::GetSharedInstance(); 629 ResourceBundle &rb = ResourceBundle::GetSharedInstance();
634 for (int i = 0; i < kThrobberIconCount; ++i) { 630 for (int i = 0; i < kThrobberIconCount; ++i) {
635 throbber_icons_[i] = rb.LoadThemeIcon(IDI_THROBBER_01 + i); 631 throbber_icons_[i] = rb.LoadThemeIcon(IDI_THROBBER_01 + i);
636 DCHECK(throbber_icons_[i]); 632 DCHECK(throbber_icons_[i]);
637 } 633 }
638 initialized = true; 634 initialized = true;
639 } 635 }
640 } 636 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/frame/contents_container.cc ('k') | chrome/browser/ui/views/frame/native_browser_frame.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698