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

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

Powered by Google App Engine
This is Rietveld 408576698