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

Side by Side Diff: chrome/browser/ui/views/ash/browser_non_client_frame_view_ash.cc

Issue 10816027: alternate ntp: toolbar background and separator animation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update comments Created 8 years, 4 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/ash/browser_non_client_frame_view_ash.h" 5 #include "chrome/browser/ui/views/ash/browser_non_client_frame_view_ash.h"
6 6
7 #include "ash/wm/frame_painter.h" 7 #include "ash/wm/frame_painter.h"
8 #include "ash/wm/workspace/frame_maximize_button.h" 8 #include "ash/wm/workspace/frame_maximize_button.h"
9 #include "chrome/browser/themes/theme_service.h" 9 #include "chrome/browser/themes/theme_service.h"
10 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser.h"
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 ShouldPaintAsActive() ? 271 ShouldPaintAsActive() ?
272 ash::FramePainter::ACTIVE : ash::FramePainter::INACTIVE, 272 ash::FramePainter::ACTIVE : ash::FramePainter::INACTIVE,
273 GetThemeFrameImageId(), 273 GetThemeFrameImageId(),
274 GetThemeFrameOverlayImage()); 274 GetThemeFrameOverlayImage());
275 if (browser_view()->ShouldShowWindowTitle()) 275 if (browser_view()->ShouldShowWindowTitle())
276 frame_painter_->PaintTitleBar(this, canvas, BrowserFrame::GetTitleFont()); 276 frame_painter_->PaintTitleBar(this, canvas, BrowserFrame::GetTitleFont());
277 if (browser_view()->IsToolbarVisible()) { 277 if (browser_view()->IsToolbarVisible()) {
278 chrome::search::Mode mode = 278 chrome::search::Mode mode =
279 browser_view()->browser()->search_model()->mode(); 279 browser_view()->browser()->search_model()->mode();
280 bool fading_in = false; 280 bool fading_in = false;
281 // For |MODE_SEARCH|, get current state of background animation to figure 281 // Get current opacity of gradient background animation to figure out if
282 // out if we're waiting to fade in or in the process of fading in new 282 // we need to paint both flat and gradient backgrounds or just one:
283 // background for |MODE_SEARCH|. 283 // - if |gradient_opacity| < 1f, paint flat background at full opacity, and
284 // In the former case, just paint the previous background for |MODE_NTP|. 284 // only paint gradient background if |gradient_opacity| is not 0f;
285 // In the latter case, paint the previous background for |MODE_NTP| and then 285 // - if |gradient_opacity| is 1f, paint the background for the current mode
286 // the new background at specified opacity value. 286 // at full opacity.
287 if (mode.is_search()) { 287 double gradient_opacity = browser_view()->browser()->search_delegate()->
288 chrome::search::ToolbarSearchAnimator::BackgroundState background_state = 288 toolbar_search_animator().GetGradientOpacity();
289 chrome::search::ToolbarSearchAnimator::BACKGROUND_STATE_DEFAULT; 289 if (gradient_opacity < 1.0f) {
290 double search_background_opacity = -1.0f; 290 // Paint flat background of |MODE_NTP|.
291 browser_view()->browser()->search_delegate()->toolbar_search_animator(). 291 PaintToolbarBackground(canvas, chrome::search::Mode::MODE_NTP);
292 GetCurrentBackgroundState(&background_state, 292 // We're done if we're not showing gradient background.
293 &search_background_opacity); 293 if (gradient_opacity == 0.0f)
294 if (background_state & 294 return;
295 chrome::search::ToolbarSearchAnimator::BACKGROUND_STATE_NTP) { 295 // Otherwise, we're fading in gradient background at |gradient_opacity|.
296 // Paint background for |MODE_NTP|. 296 fading_in = true;
297 PaintToolbarBackground(canvas, chrome::search::Mode::MODE_NTP); 297 canvas->SaveLayerAlpha(static_cast<uint8>(gradient_opacity * 0xFF));
298 // We're done if we're not showing background for SEARCH mode.
299 if (!(background_state & chrome::search::ToolbarSearchAnimator::
300 BACKGROUND_STATE_SEARCH)) {
301 return;
302 }
303 // Otherwise, we're fading in the new background at
304 // |search_background_opacity|.
305 fading_in = true;
306 canvas->SaveLayerAlpha(static_cast<uint8>(
307 search_background_opacity * 0xFF));
308 }
309 } 298 }
310 // Paint the background for the current mode. 299 // Paint the background for the current mode.
311 PaintToolbarBackground(canvas, mode.mode); 300 PaintToolbarBackground(canvas, mode.mode);
312 // If we're fading in and have saved canvas, restore it now. 301 // If we're fading in and have saved canvas, restore it now.
313 if (fading_in) 302 if (fading_in)
314 canvas->Restore(); 303 canvas->Restore();
315 } else { 304 } else {
316 PaintContentEdge(canvas); 305 PaintContentEdge(canvas);
317 } 306 }
318 } 307 }
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 browser_view()->toolbar()->SchedulePaint(); 404 browser_view()->toolbar()->SchedulePaint();
416 } 405 }
417 406
418 void BrowserNonClientFrameViewAsh::OnToolbarBackgroundAnimatorCanceled( 407 void BrowserNonClientFrameViewAsh::OnToolbarBackgroundAnimatorCanceled(
419 TabContents* tab_contents) { 408 TabContents* tab_contents) {
420 // Fade in of toolbar background has been canceled, repaint the toolbar 409 // Fade in of toolbar background has been canceled, repaint the toolbar
421 // background. 410 // background.
422 browser_view()->toolbar()->SchedulePaint(); 411 browser_view()->toolbar()->SchedulePaint();
423 } 412 }
424 413
414 void BrowserNonClientFrameViewAsh::OnToolbarSeparatorAnimatorProgressed() {
415 // We're fading the toolbar separator, repaint the toolbar separator.
416 browser_view()->toolbar()->SchedulePaint();
417 }
418
419 void BrowserNonClientFrameViewAsh::OnToolbarSeparatorAnimatorCanceled() {
420 // Fade in of toolbar background has been canceled, repaint the toolbar
421 // separator.
422 browser_view()->toolbar()->SchedulePaint();
423 }
424
425 /////////////////////////////////////////////////////////////////////////////// 425 ///////////////////////////////////////////////////////////////////////////////
426 // BrowserNonClientFrameViewAsh, private: 426 // BrowserNonClientFrameViewAsh, private:
427 427
428 428
429 int BrowserNonClientFrameViewAsh::NonClientTopBorderHeight( 429 int BrowserNonClientFrameViewAsh::NonClientTopBorderHeight(
430 bool force_restored) const { 430 bool force_restored) const {
431 if (force_restored) 431 if (force_restored)
432 return tabstrip_top_spacing_tall(); 432 return tabstrip_top_spacing_tall();
433 if (frame()->IsFullscreen()) 433 if (frame()->IsFullscreen())
434 return 0; 434 return 0;
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 y + kClientEdgeThickness + kContentShadowHeight, 545 y + kClientEdgeThickness + kContentShadowHeight,
546 toolbar_left->width(), theme_toolbar->height()); 546 toolbar_left->width(), theme_toolbar->height());
547 gfx::ImageSkia* toolbar_right = 547 gfx::ImageSkia* toolbar_right =
548 tp->GetImageSkiaNamed(IDR_TOOLBAR_SHADE_RIGHT); 548 tp->GetImageSkiaNamed(IDR_TOOLBAR_SHADE_RIGHT);
549 canvas->TileImageInt(*toolbar_right, 549 canvas->TileImageInt(*toolbar_right,
550 0, 0, 550 0, 0,
551 w - toolbar_right->width() - 2 * kClientEdgeThickness, 551 w - toolbar_right->width() - 2 * kClientEdgeThickness,
552 y + kClientEdgeThickness + kContentShadowHeight, 552 y + kClientEdgeThickness + kContentShadowHeight,
553 toolbar_right->width(), theme_toolbar->height()); 553 toolbar_right->width(), theme_toolbar->height());
554 554
555 // Only draw the content/toolbar separator if Instant Extended API is disabled 555 // If Instant Extended API is disabled, draw the content/toolbar separator as
556 // or mode is DEFAULT. 556 // is. Otherwise, draw or fade it per ToolbarSearchAnimator.
557 bool extended_instant_enabled = chrome::search::IsInstantExtendedAPIEnabled( 557 bool extended_instant_enabled = chrome::search::IsInstantExtendedAPIEnabled(
558 browser_view()->browser()->profile()); 558 browser_view()->browser()->profile());
559 if (!extended_instant_enabled || mode == chrome::search::Mode::MODE_DEFAULT) { 559 double separator_opacity = !extended_instant_enabled ? 1.0f :
560 canvas->FillRect( 560 browser_view()->browser()->search_delegate()->toolbar_search_animator().
561 gfx::Rect(x + kClientEdgeThickness, 561 GetSeparatorOpacity();
562 toolbar_bounds.bottom() - kClientEdgeThickness, 562 if (separator_opacity == 0.0f)
563 w - (2 * kClientEdgeThickness), kClientEdgeThickness), 563 return;
564 ThemeService::GetDefaultColor(extended_instant_enabled ? 564 bool fading = separator_opacity < 1.0f;
565 ThemeService::COLOR_SEARCH_SEPARATOR_LINE : 565 gfx::Rect separator_rect(x + kClientEdgeThickness,
566 ThemeService::COLOR_TOOLBAR_SEPARATOR)); 566 toolbar_bounds.bottom() - kClientEdgeThickness,
567 w - (2 * kClientEdgeThickness),
568 kClientEdgeThickness);
569 if (fading) {
570 canvas->SaveLayerAlpha(static_cast<uint8>(separator_opacity * 0xFF),
571 separator_rect);
567 } 572 }
573 canvas->FillRect(separator_rect,
574 ThemeService::GetDefaultColor(extended_instant_enabled ?
575 ThemeService::COLOR_SEARCH_SEPARATOR_LINE :
576 ThemeService::COLOR_TOOLBAR_SEPARATOR));
577 if (fading)
578 canvas->Restore();
568 } 579 }
569 580
570 void BrowserNonClientFrameViewAsh::PaintContentEdge(gfx::Canvas* canvas) { 581 void BrowserNonClientFrameViewAsh::PaintContentEdge(gfx::Canvas* canvas) {
571 canvas->FillRect(gfx::Rect(0, close_button_->bounds().bottom(), 582 canvas->FillRect(gfx::Rect(0, close_button_->bounds().bottom(),
572 width(), kClientEdgeThickness), 583 width(), kClientEdgeThickness),
573 ThemeService::GetDefaultColor(ThemeService::COLOR_TOOLBAR_SEPARATOR)); 584 ThemeService::GetDefaultColor(ThemeService::COLOR_TOOLBAR_SEPARATOR));
574 } 585 }
575 586
576 int BrowserNonClientFrameViewAsh::GetThemeFrameImageId() const { 587 int BrowserNonClientFrameViewAsh::GetThemeFrameImageId() const {
577 bool is_incognito = browser_view()->IsOffTheRecord(); 588 bool is_incognito = browser_view()->IsOffTheRecord();
(...skipping 21 matching lines...) Expand all
599 BrowserNonClientFrameViewAsh::GetThemeFrameOverlayImage() const { 610 BrowserNonClientFrameViewAsh::GetThemeFrameOverlayImage() const {
600 ui::ThemeProvider* tp = GetThemeProvider(); 611 ui::ThemeProvider* tp = GetThemeProvider();
601 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && 612 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) &&
602 browser_view()->IsBrowserTypeNormal() && 613 browser_view()->IsBrowserTypeNormal() &&
603 !browser_view()->IsOffTheRecord()) { 614 !browser_view()->IsOffTheRecord()) {
604 return tp->GetImageSkiaNamed(ShouldPaintAsActive() ? 615 return tp->GetImageSkiaNamed(ShouldPaintAsActive() ?
605 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE); 616 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE);
606 } 617 }
607 return NULL; 618 return NULL;
608 } 619 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698