summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/tabs/tab_renderer.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/tabs/tab_renderer.h')
-rw-r--r--chrome/browser/views/tabs/tab_renderer.h174
1 files changed, 174 insertions, 0 deletions
diff --git a/chrome/browser/views/tabs/tab_renderer.h b/chrome/browser/views/tabs/tab_renderer.h
new file mode 100644
index 0000000..cb92574
--- /dev/null
+++ b/chrome/browser/views/tabs/tab_renderer.h
@@ -0,0 +1,174 @@
+// Copyright (c) 2006-2008 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.
+
+#ifndef CHROME_BROWSER_VIEWS_TABS_TAB_RENDERER_H__
+#define CHROME_BROWSER_VIEWS_TABS_TAB_RENDERER_H__
+
+#include "base/gfx/point.h"
+#include "chrome/common/animation.h"
+#include "chrome/common/slide_animation.h"
+#include "chrome/common/throb_animation.h"
+#include "chrome/views/button.h"
+#include "chrome/views/menu.h"
+#include "chrome/views/view.h"
+
+class TabContents;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// TabRenderer
+//
+// A View that renders a Tab, either in a TabStrip or in a DraggedTabView.
+//
+///////////////////////////////////////////////////////////////////////////////
+class TabRenderer : public ChromeViews::View,
+ public AnimationDelegate {
+ public:
+ // Possible animation states.
+ enum AnimationState {
+ ANIMATION_NONE,
+ ANIMATION_WAITING,
+ ANIMATION_LOADING
+ };
+
+ TabRenderer();
+ virtual ~TabRenderer();
+
+ // Updates the data the Tab uses to render itself from the specified
+ // TabContents.
+ void UpdateData(TabContents* contents);
+
+ // Updates the display to reflect the contents of this TabRenderer's model.
+ void UpdateFromModel();
+
+ // Returns true if the Tab is selected, false otherwise.
+ virtual bool IsSelected() const;
+
+ // Advance the Loading Animation to the next frame, or hide the animation if
+ // the tab isn't loading.
+ void ValidateLoadingAnimation(AnimationState animation_state);
+
+ // Starts/Stops a pulse animation.
+ void StartPulse();
+ void StopPulse();
+
+ // Returns the minimum possible size of a single unselected Tab.
+ static gfx::Size GetMinimumSize();
+ // Returns the minimum possible size of a selected Tab. Selected tabs must
+ // always show a close button and have a larger minimum size than unselected
+ // tabs.
+ static gfx::Size GetMinimumSelectedSize();
+ // Returns the preferred size of a single Tab, assuming space is
+ // available.
+ static gfx::Size GetStandardSize();
+
+ protected:
+ ChromeViews::Button* close_button() const { return close_button_; }
+ const gfx::Rect& title_bounds() const { return title_bounds_; }
+
+ // Returns the title of the Tab.
+ std::wstring GetTitle() const;
+
+ private:
+ // Overridden from ChromeViews::View:
+ virtual void Paint(ChromeCanvas* canvas);
+ virtual void Layout();
+ virtual void DidChangeBounds(const CRect& previous, const CRect& current);
+ virtual void OnMouseEntered(const ChromeViews::MouseEvent& event);
+ virtual void OnMouseExited(const ChromeViews::MouseEvent& event);
+
+ // Overridden from AnimationDelegate:
+ virtual void AnimationProgressed(const Animation* animation);
+ virtual void AnimationCanceled(const Animation* animation);
+ virtual void AnimationEnded(const Animation* animation);
+
+ // Starts/Stops the crash animation.
+ void StartCrashAnimation();
+ void StopCrashAnimation();
+
+ // Return true if the crash animation is currently running.
+ bool IsPerformingCrashAnimation() const;
+
+ // Set the temporary offset for the favicon. This is used during animation.
+ void SetFavIconHidingOffset(int offset);
+
+ void DisplayCrashedFavIcon();
+ void ResetCrashedFavIcon();
+
+ // Paint various portions of the Tab
+ void PaintTabBackground(ChromeCanvas* canvas);
+ void PaintInactiveTabBackground(ChromeCanvas* canvas);
+ void PaintActiveTabBackground(ChromeCanvas* canvas);
+ void PaintHoverTabBackground(ChromeCanvas* canvas, double opacity);
+ void PaintLoadingAnimation(ChromeCanvas* canvas);
+
+ // Returns the number of favicon-size elements that can fit in the tab's
+ // current size.
+ int IconCapacity() const;
+
+ // Returns whether the Tab should display a favicon.
+ bool ShouldShowIcon() const;
+
+ // Returns whether the Tab should display a close button.
+ bool ShouldShowCloseBox() const;
+
+ // The bounds of various sections of the display.
+ gfx::Rect favicon_bounds_;
+ gfx::Rect download_icon_bounds_;
+ gfx::Rect title_bounds_;
+
+ // Current state of the animation.
+ AnimationState animation_state_;
+
+ // The current index into the Animation image strip.
+ int animation_frame_;
+
+ // Close Button.
+ ChromeViews::Button* close_button_;
+
+ // Hover animation.
+ scoped_ptr<SlideAnimation> hover_animation_;
+
+ // Pulse animation.
+ scoped_ptr<ThrobAnimation> pulse_animation_;
+
+ // Model data. We store this here so that we don't need to ask the underlying
+ // model, which is tricky since instances of this object can outlive the
+ // corresponding objects in the underlying model.
+ struct TabData {
+ SkBitmap favicon;
+ std::wstring title;
+ bool loading;
+ bool crashed;
+ bool off_the_record;
+ bool show_icon;
+ bool show_download_icon;
+ };
+ TabData data_;
+
+ // Whether we're showing the icon. It is cached so that we can detect when it
+ // changes and layout appropriately.
+ bool showing_icon_;
+
+ // Whether we are showing the download icon. Comes from the model.
+ bool showing_download_icon_;
+
+ // Whether we are showing the close button. It is cached so that we can
+ // detect when it changes and layout appropriately.
+ bool showing_close_button_;
+
+ // The offset used to animate the favicon location.
+ int fav_icon_hiding_offset_;
+
+ // The animation object used to swap the favicon with the sad tab icon.
+ class FavIconCrashAnimation;
+ FavIconCrashAnimation* crash_animation_;
+
+ bool should_display_crashed_favicon_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(TabRenderer);
+};
+
+#endif // CHROME_BROWSER_VIEWS_TABS_TAB_RENDERER_H__
+