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

Unified Diff: chrome/browser/infobars/infobar.cc

Issue 240193003: Move Infobars core files to the Infobars component (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix nib name on mac Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/infobars/infobar.h ('k') | chrome/browser/infobars/infobar_container.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/infobars/infobar.cc
diff --git a/chrome/browser/infobars/infobar.cc b/chrome/browser/infobars/infobar.cc
deleted file mode 100644
index 15f04c8be5e3438afc11e7c472d3280381b10b6b..0000000000000000000000000000000000000000
--- a/chrome/browser/infobars/infobar.cc
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright (c) 2011 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/infobars/infobar.h"
-
-#include <cmath>
-
-#include "base/logging.h"
-#include "build/build_config.h"
-#include "chrome/browser/infobars/infobar_container.h"
-#include "chrome/browser/infobars/infobar_manager.h"
-#include "ui/gfx/animation/slide_animation.h"
-
-InfoBar::InfoBar(scoped_ptr<InfoBarDelegate> delegate)
- : owner_(NULL),
- delegate_(delegate.Pass()),
- container_(NULL),
- animation_(this),
- arrow_height_(0),
- arrow_target_height_(kDefaultArrowTargetHeight),
- arrow_half_width_(0),
- bar_height_(0),
- bar_target_height_(kDefaultBarTargetHeight) {
- DCHECK(delegate_ != NULL);
- animation_.SetTweenType(gfx::Tween::LINEAR);
- delegate_->set_infobar(this);
-}
-
-InfoBar::~InfoBar() {
- DCHECK(!owner_);
-}
-
-// static
-SkColor InfoBar::GetTopColor(InfoBarDelegate::Type infobar_type) {
- static const SkColor kWarningBackgroundColorTop =
- SkColorSetRGB(255, 242, 183); // Yellow
- static const SkColor kPageActionBackgroundColorTop =
- SkColorSetRGB(237, 237, 237); // Gray
- return (infobar_type == InfoBarDelegate::WARNING_TYPE) ?
- kWarningBackgroundColorTop : kPageActionBackgroundColorTop;
-}
-
-// static
-SkColor InfoBar::GetBottomColor(InfoBarDelegate::Type infobar_type) {
- static const SkColor kWarningBackgroundColorBottom =
- SkColorSetRGB(250, 230, 145); // Yellow
- static const SkColor kPageActionBackgroundColorBottom =
- SkColorSetRGB(217, 217, 217); // Gray
- return (infobar_type == InfoBarDelegate::WARNING_TYPE) ?
- kWarningBackgroundColorBottom : kPageActionBackgroundColorBottom;
-}
-
-void InfoBar::SetOwner(InfoBarManager* owner) {
- DCHECK(!owner_);
- owner_ = owner;
- delegate_->StoreActiveEntryUniqueID();
- PlatformSpecificSetOwner();
-}
-
-void InfoBar::Show(bool animate) {
- PlatformSpecificShow(animate);
- if (animate) {
- animation_.Show();
- } else {
- animation_.Reset(1.0);
- RecalculateHeights(true);
- }
-}
-
-void InfoBar::Hide(bool animate) {
- PlatformSpecificHide(animate);
- if (animate) {
- animation_.Hide();
- } else {
- animation_.Reset(0.0);
- // We want to remove ourselves from the container immediately even if we
- // still have an owner, which MaybeDelete() won't do.
- DCHECK(container_);
- container_->RemoveInfoBar(this);
- MaybeDelete(); // Necessary if the infobar was already closing.
- }
-}
-
-void InfoBar::SetArrowTargetHeight(int height) {
- DCHECK_LE(height, kMaximumArrowTargetHeight);
- // Once the closing animation starts, we ignore further requests to change the
- // target height.
- if ((arrow_target_height_ != height) && !animation_.IsClosing()) {
- arrow_target_height_ = height;
- RecalculateHeights(false);
- }
-}
-
-void InfoBar::CloseSoon() {
- owner_ = NULL;
- PlatformSpecificOnCloseSoon();
- MaybeDelete();
-}
-
-void InfoBar::RemoveSelf() {
- if (owner_)
- owner_->RemoveInfoBar(this);
-}
-
-void InfoBar::SetBarTargetHeight(int height) {
- if (bar_target_height_ != height) {
- bar_target_height_ = height;
- RecalculateHeights(false);
- }
-}
-
-void InfoBar::AnimationProgressed(const gfx::Animation* animation) {
- RecalculateHeights(false);
-}
-
-void InfoBar::AnimationEnded(const gfx::Animation* animation) {
- // When the animation ends, we must ensure the container is notified even if
- // the heights haven't changed, lest it never get an "animation finished"
- // notification. (If the browser doesn't get this notification, it will not
- // bother to re-layout the content area for the new infobar size.)
- RecalculateHeights(true);
- MaybeDelete();
-}
-
-void InfoBar::RecalculateHeights(bool force_notify) {
- int old_arrow_height = arrow_height_;
- int old_bar_height = bar_height_;
-
- // Find the desired arrow height/half-width. The arrow area is
- // |arrow_height_| * |arrow_half_width_|. When the bar is opening or closing,
- // scaling each of these with the square root of the animation value causes a
- // linear animation of the area, which matches the perception of the animation
- // of the bar portion.
- double scale_factor = sqrt(animation_.GetCurrentValue());
- arrow_height_ = static_cast<int>(arrow_target_height_ * scale_factor);
- if (animation_.is_animating()) {
- arrow_half_width_ = static_cast<int>(std::min(arrow_target_height_,
- kMaximumArrowTargetHalfWidth) * scale_factor);
- } else {
- // When the infobar is not animating (i.e. fully open), we set the
- // half-width to be proportionally the same distance between its default and
- // maximum values as the height is between its.
- arrow_half_width_ = kDefaultArrowTargetHalfWidth +
- ((kMaximumArrowTargetHalfWidth - kDefaultArrowTargetHalfWidth) *
- ((arrow_height_ - kDefaultArrowTargetHeight) /
- (kMaximumArrowTargetHeight - kDefaultArrowTargetHeight)));
- }
- // Add pixels for the stroke, if the arrow is to be visible at all. Without
- // this, changing the arrow height from 0 to kSeparatorLineHeight would
- // produce no visible effect, because the stroke would paint atop the divider
- // line above the infobar.
- if (arrow_height_)
- arrow_height_ += kSeparatorLineHeight;
-
- bar_height_ = animation_.CurrentValueBetween(0, bar_target_height_);
-
- // Don't re-layout if nothing has changed, e.g. because the animation step was
- // not large enough to actually change the heights by at least a pixel.
- bool heights_differ =
- (old_arrow_height != arrow_height_) || (old_bar_height != bar_height_);
- if (heights_differ)
- PlatformSpecificOnHeightsRecalculated();
-
- if (container_ && (heights_differ || force_notify))
- container_->OnInfoBarStateChanged(animation_.is_animating());
-}
-
-void InfoBar::MaybeDelete() {
- if (!owner_ && (animation_.GetCurrentValue() == 0.0)) {
- if (container_)
- container_->RemoveInfoBar(this);
- delete this;
- }
-}
« no previous file with comments | « chrome/browser/infobars/infobar.h ('k') | chrome/browser/infobars/infobar_container.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698