| Index: chrome/browser/gtk/infobar_arrow_model.cc
|
| ===================================================================
|
| --- chrome/browser/gtk/infobar_arrow_model.cc (revision 71352)
|
| +++ chrome/browser/gtk/infobar_arrow_model.cc (working copy)
|
| @@ -1,124 +0,0 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/gtk/infobar_arrow_model.h"
|
| -
|
| -#include "chrome/browser/gtk/infobar_gtk.h"
|
| -#include "gfx/canvas_skia_paint.h"
|
| -#include "gfx/color_utils.h"
|
| -#include "gfx/point.h"
|
| -#include "gfx/skia_utils_gtk.h"
|
| -#include "third_party/skia/include/effects/SkGradientShader.h"
|
| -
|
| -InfoBarArrowModel::InfoBarArrowModel(Observer* observer)
|
| - : observer_(observer),
|
| - animation_(this) {
|
| - animation_.SetTweenType(ui::Tween::LINEAR);
|
| - animation_.Reset(1.0);
|
| - target_colors_.top = target_colors_.bottom = SkColorSetARGB(0, 0, 0, 0);
|
| - previous_colors_ = target_colors_;
|
| -}
|
| -
|
| -InfoBarArrowModel::~InfoBarArrowModel() {
|
| -}
|
| -
|
| -InfoBarArrowModel::InfoBarColors InfoBarArrowModel::CurrentInfoBarColors() {
|
| - double alpha = animation_.GetCurrentValue();
|
| - InfoBarColors colors = {
|
| - color_utils::AlphaBlend(target_colors_.top,
|
| - previous_colors_.top,
|
| - alpha * 0xff),
|
| - color_utils::AlphaBlend(target_colors_.bottom,
|
| - previous_colors_.bottom,
|
| - alpha * 0xff)};
|
| - return colors;
|
| -}
|
| -
|
| -bool InfoBarArrowModel::NeedToDrawInfoBarArrow() {
|
| - return SkColorGetA(CurrentInfoBarColors().top) != 0;
|
| -}
|
| -
|
| -void InfoBarArrowModel::ShowArrowFor(InfoBar* bar, bool animate) {
|
| - scoped_ptr<std::pair<SkColor, SkColor> > colors;
|
| -
|
| - previous_colors_ = CurrentInfoBarColors();
|
| -
|
| - if (bar) {
|
| - double r, g, b;
|
| - bar->GetTopColor(bar->delegate()->GetInfoBarType(), &r, &g, &b);
|
| - target_colors_.top = SkColorSetRGB(r * 0xff, g * 0xff, b * 0xff);
|
| - bar->GetBottomColor(bar->delegate()->GetInfoBarType(), &r, &g, &b);
|
| - target_colors_.bottom = SkColorSetRGB(r * 0xff, g * 0xff, b * 0xff);
|
| - } else {
|
| - target_colors_.bottom = target_colors_.top = SkColorSetARGB(0, 0, 0, 0);
|
| - }
|
| -
|
| - if (animate) {
|
| - // Fade from the current color to the target color.
|
| - animation_.Reset();
|
| - animation_.Show();
|
| - } else {
|
| - // Skip straight to showing the target color.
|
| - animation_.Reset(1.0);
|
| - }
|
| -
|
| - observer_->PaintStateChanged();
|
| -}
|
| -
|
| -void InfoBarArrowModel::Paint(GtkWidget* widget,
|
| - GdkEventExpose* expose,
|
| - const gfx::Point& origin,
|
| - const GdkColor& border_color) {
|
| - if (!NeedToDrawInfoBarArrow())
|
| - return;
|
| -
|
| - // The size of the arrow (its height; also half its width).
|
| - const int kArrowSize = 10;
|
| -
|
| - SkPath path;
|
| - path.moveTo(SkPoint::Make(origin.x() - kArrowSize, origin.y()));
|
| - path.rLineTo(kArrowSize, -kArrowSize);
|
| - path.rLineTo(kArrowSize, kArrowSize);
|
| - path.close();
|
| -
|
| - SkPaint paint;
|
| - paint.setStrokeWidth(1);
|
| - paint.setStyle(SkPaint::kFill_Style);
|
| -
|
| - SkPoint grad_points[2];
|
| - grad_points[0].set(SkIntToScalar(0), SkIntToScalar(origin.y()));
|
| - grad_points[1].set(SkIntToScalar(0),
|
| - SkIntToScalar(origin.y() + InfoBar::kInfoBarHeight));
|
| -
|
| - InfoBarColors colors = CurrentInfoBarColors();
|
| - SkColor grad_colors[2];
|
| - grad_colors[0] = colors.top;
|
| - grad_colors[1] = colors.bottom;
|
| -
|
| - SkShader* gradient_shader = SkGradientShader::CreateLinear(
|
| - grad_points, grad_colors, NULL, 2, SkShader::kMirror_TileMode);
|
| - paint.setShader(gradient_shader);
|
| - gradient_shader->unref();
|
| -
|
| - gfx::CanvasSkiaPaint canvas(expose, false);
|
| - canvas.drawPath(path, paint);
|
| -
|
| - paint.setShader(NULL);
|
| - paint.setColor(SkColorSetA(gfx::GdkColorToSkColor(border_color),
|
| - SkColorGetA(colors.top)));
|
| - paint.setStyle(SkPaint::kStroke_Style);
|
| - canvas.drawPath(path, paint);
|
| -}
|
| -
|
| -void InfoBarArrowModel::AnimationEnded(const ui::Animation* animation) {
|
| - observer_->PaintStateChanged();
|
| -}
|
| -
|
| -void InfoBarArrowModel::AnimationProgressed(const ui::Animation* animation) {
|
| - observer_->PaintStateChanged();
|
| -}
|
| -
|
| -void InfoBarArrowModel::AnimationCanceled(const ui::Animation* animation) {
|
| - observer_->PaintStateChanged();
|
| -}
|
|
|