Index: chrome/browser/ui/gtk/tabs/tab_renderer_gtk.h |
diff --git a/chrome/browser/ui/gtk/tabs/tab_renderer_gtk.h b/chrome/browser/ui/gtk/tabs/tab_renderer_gtk.h |
deleted file mode 100644 |
index 744bcd0181e912f64fa9daddd2a06216324b2d0d..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/gtk/tabs/tab_renderer_gtk.h |
+++ /dev/null |
@@ -1,457 +0,0 @@ |
-// Copyright (c) 2012 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_UI_GTK_TABS_TAB_RENDERER_GTK_H_ |
-#define CHROME_BROWSER_UI_GTK_TABS_TAB_RENDERER_GTK_H_ |
- |
-#include <gtk/gtk.h> |
-#include <map> |
- |
-#include "base/basictypes.h" |
-#include "base/compiler_specific.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/strings/string16.h" |
-#include "chrome/browser/ui/tabs/tab_utils.h" |
-#include "content/public/browser/notification_observer.h" |
-#include "content/public/browser/notification_registrar.h" |
-#include "third_party/skia/include/core/SkBitmap.h" |
-#include "ui/base/gtk/gtk_signal.h" |
-#include "ui/base/gtk/owned_widget_gtk.h" |
-#include "ui/gfx/animation/animation_delegate.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/gfx/font.h" |
-#include "ui/gfx/image/cairo_cached_surface.h" |
-#include "ui/gfx/rect.h" |
- |
-namespace gfx { |
-class CairoCachedSurface; |
-class Image; |
-class Size; |
-class SlideAnimation; |
-class ThrobAnimation; |
-} // namespace gfx |
- |
-class CustomDrawButton; |
-class GtkThemeService; |
- |
-namespace content { |
-class WebContents; |
-} |
- |
-class TabRendererGtk : public gfx::AnimationDelegate, |
- public content::NotificationObserver { |
- public: |
- // Possible animation states. |
- enum AnimationState { |
- ANIMATION_NONE, |
- ANIMATION_WAITING, |
- ANIMATION_LOADING |
- }; |
- |
- class LoadingAnimation : public content::NotificationObserver { |
- public: |
- struct Data { |
- explicit Data(GtkThemeService* theme_service); |
- Data(int loading, int waiting, int waiting_to_loading); |
- |
- int loading_animation_frame_count; |
- int waiting_animation_frame_count; |
- int waiting_to_loading_frame_count_ratio; |
- }; |
- |
- explicit LoadingAnimation(GtkThemeService* theme_service); |
- |
- // Used in unit tests to inject specific data. |
- explicit LoadingAnimation(const LoadingAnimation::Data& data); |
- |
- virtual ~LoadingAnimation(); |
- |
- // Advance the loading animation to the next frame, or hide the animation if |
- // the tab isn't loading. Returns |true| if the icon area needs to be |
- // repainted. |
- bool ValidateLoadingAnimation(AnimationState animation_state); |
- |
- AnimationState animation_state() const { return animation_state_; } |
- int animation_frame() const { return animation_frame_; } |
- |
- // Provide content::NotificationObserver implementation. |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE; |
- |
- private: |
- scoped_ptr<Data> data_; |
- |
- // Used to listen for theme change notifications. |
- content::NotificationRegistrar registrar_; |
- |
- // Gives us our throbber images. |
- GtkThemeService* theme_service_; |
- |
- // Current state of the animation. |
- AnimationState animation_state_; |
- |
- // The current index into the Animation image strip. |
- int animation_frame_; |
- |
- DISALLOW_COPY_AND_ASSIGN(LoadingAnimation); |
- }; |
- |
- explicit TabRendererGtk(GtkThemeService* theme_service); |
- virtual ~TabRendererGtk(); |
- |
- // Provide content::NotificationObserver implementation. |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE; |
- |
- // WebContents. If only the loading state was updated, the loading_only flag |
- // should be specified. If other things change, set this flag to false to |
- // update everything. |
- virtual void UpdateData(content::WebContents* contents, |
- bool app, |
- bool loading_only); |
- |
- // Sets the blocked state of the tab. |
- void SetBlocked(bool pinned); |
- bool is_blocked() const; |
- |
- // Sets the mini-state of the tab. |
- void set_mini(bool mini) { data_.mini = mini; } |
- bool mini() const { return data_.mini; } |
- |
- // Sets the app state of the tab. |
- void set_app(bool app) { data_.app = app; } |
- bool app() const { return data_.app; } |
- |
- // Are we in the process of animating a mini tab state change on this tab? |
- void set_animating_mini_change(bool value) { |
- data_.animating_mini_change = value; |
- } |
- |
- // Updates the display to reflect the contents of this TabRenderer's model. |
- void UpdateFromModel(); |
- |
- // Returns true if the Tab is active, false otherwise. |
- virtual bool IsActive() const; |
- |
- // Set |is_active_| property of this tab. |
- void set_is_active(bool is_active) { is_active_ = is_active; } |
- |
- // Returns true if the Tab is selected, false otherwise. |
- virtual bool IsSelected() const; |
- |
- // Returns true if the Tab is visible, false otherwise. |
- virtual bool IsVisible() const; |
- |
- // Sets the visibility of the Tab. |
- virtual void SetVisible(bool visible) const; |
- |
- // Paints the tab using resources from the display that |widget| is on, |
- // drawing into |cr|. |
- void Paint(GtkWidget* widget, cairo_t* cr); |
- |
- // Paints the tab, and keeps the result server-side. The returned surface must |
- // be freed with cairo_surface_destroy(). |
- cairo_surface_t* PaintToSurface(GtkWidget* widget, cairo_t* cr); |
- |
- // There is no PaintNow available, so the fastest we can do is schedule a |
- // paint with the windowing system. |
- void SchedulePaint(); |
- |
- // Notifies the Tab that the close button has been clicked. |
- virtual void CloseButtonClicked(); |
- |
- // Sets the bounds of the tab. |
- virtual void SetBounds(const gfx::Rect& bounds); |
- |
- // Advance the loading animation to the next frame, or hide the animation if |
- // the tab isn't loading. Returns |true| if the icon area needs to be |
- // repainted. |
- bool ValidateLoadingAnimation(AnimationState animation_state); |
- |
- // Repaint only the area of the tab that contains the favicon. |
- void PaintFaviconArea(GtkWidget* widget, cairo_t* cr); |
- |
- // Returns whether the Tab should display a favicon. |
- bool ShouldShowIcon() const; |
- |
- // Invoked from Layout() to adjust the position of the favicon or media |
- // indicator for mini tabs. |
- void MaybeAdjustLeftForMiniTab(gfx::Rect* bounds) const; |
- |
- // Returns the minimum possible size of a single unselected Tab. |
- static gfx::Size GetMinimumUnselectedSize(); |
- // 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(); |
- |
- // Returns the width for mini-tabs. Mini-tabs always have this width. |
- static int GetMiniWidth(); |
- |
- static gfx::Font* title_font() { return title_font_; } |
- |
- // Returns the bounds of the Tab. |
- int x() const { return bounds_.x(); } |
- int y() const { return bounds_.y(); } |
- int width() const { return bounds_.width(); } |
- int height() const { return bounds_.height(); } |
- |
- gfx::Rect bounds() const { return bounds_; } |
- |
- gfx::Rect favicon_bounds() const { return favicon_bounds_; } |
- |
- // Returns the non-mirrored (LTR) bounds of this tab. |
- gfx::Rect GetNonMirroredBounds(GtkWidget* parent) const; |
- |
- // Returns the requested bounds of the tab. |
- gfx::Rect GetRequisition() const; |
- |
- GtkWidget* widget() const { return tab_.get(); } |
- |
- // Start/stop the mini-tab title animation. |
- void StartMiniTabTitleAnimation(); |
- void StopMiniTabTitleAnimation(); |
- |
- void set_vertical_offset(int offset) { background_offset_y_ = offset; } |
- |
- protected: |
- const gfx::Rect& title_bounds() const { return title_bounds_; } |
- const gfx::Rect& close_button_bounds() const { return close_button_bounds_; } |
- |
- // Raise button to top of Z-order. |
- void Raise() const; |
- |
- // Returns the title of the Tab. |
- base::string16 GetTitle() const; |
- |
- // enter-notify-event handler that signals when the mouse enters the tab. |
- CHROMEGTK_CALLBACK_1(TabRendererGtk, gboolean, OnEnterNotifyEvent, |
- GdkEventCrossing*); |
- |
- // leave-notify-event handler that signals when the mouse enters the tab. |
- CHROMEGTK_CALLBACK_1(TabRendererGtk, gboolean, OnLeaveNotifyEvent, |
- GdkEventCrossing*); |
- |
- private: |
- class FaviconCrashAnimation; |
- |
- // 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 { |
- TabData(); |
- ~TabData(); |
- |
- SkBitmap favicon; |
- gfx::CairoCachedSurface cairo_favicon; |
- bool is_default_favicon; |
- base::string16 title; |
- bool loading; |
- bool crashed; |
- bool incognito; |
- bool show_icon; |
- bool mini; |
- bool blocked; |
- bool animating_mini_change; |
- bool app; |
- TabMediaState media_state; |
- TabMediaState previous_media_state; |
- }; |
- |
- // Overridden from gfx::AnimationDelegate: |
- virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE; |
- virtual void AnimationCanceled(const gfx::Animation* animation) OVERRIDE; |
- virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE; |
- |
- // Starts/Stops the crash animation. |
- void StartCrashAnimation(); |
- void StopCrashAnimation(); |
- |
- // Return true if the crash animation is currently running. |
- bool IsPerformingCrashAnimation() const; |
- |
- // Starts the media indicator fade-in/out animation. There's no stop method |
- // because this is not a continuous animation. |
- void StartMediaIndicatorAnimation(); |
- |
- // Set the temporary offset for the favicon. This is used during animation. |
- void SetFaviconHidingOffset(int offset); |
- |
- void DisplayCrashedFavicon(); |
- void ResetCrashedFavicon(); |
- |
- // Generates the bounds for the interior items of the tab. |
- void Layout(); |
- |
- // Returns the local bounds of the tab. This returns the rect |
- // {0, 0, width(), height()} for now, as we don't yet support borders. |
- gfx::Rect GetLocalBounds(); |
- |
- // Moves the close button widget within the GtkFixed container. |
- void MoveCloseButtonWidget(); |
- |
- // Returns the largest of the favicon, title text, and the close button. |
- static int GetContentHeight(); |
- |
- void PaintTab(GtkWidget* widget, GdkEventExpose* event); |
- |
- // Paint various portions of the Tab |
- void PaintTitle(GtkWidget* widget, cairo_t* cr); |
- void PaintIcon(GtkWidget* widget, cairo_t* cr); |
- void PaintMediaIndicator(GtkWidget* widget, cairo_t* cr); |
- void PaintTabBackground(GtkWidget* widget, cairo_t* cr); |
- void PaintInactiveTabBackground(GtkWidget* widget, cairo_t* cr); |
- void PaintActiveTabBackground(GtkWidget* widget, cairo_t* cr); |
- void PaintLoadingAnimation(GtkWidget* widget, cairo_t* cairo); |
- |
- // Draws the given |tab_bg| onto |cr| using the tab shape masks along the |
- // sides for the rounded tab shape. |
- void DrawTabBackground(cairo_t* cr, |
- GtkWidget* widget, |
- const gfx::Image& tab_bg, |
- int offset_x, |
- int offset_y); |
- |
- // Draws the tab shadow using the given idr resources onto |cr|. |
- void DrawTabShadow(cairo_t* cr, |
- GtkWidget* widget, |
- int left_idr, |
- int center_idr, |
- int right_idr); |
- |
- // 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 the media indicator. |
- bool ShouldShowMediaIndicator() const; |
- |
- // Returns whether the Tab should display a close button. |
- bool ShouldShowCloseBox() const; |
- |
- CustomDrawButton* MakeCloseButton(); |
- |
- // Gets the throb value for the tab. When a tab is not selected the |
- // active background is drawn at |GetThrobValue()|%. This is used for hover |
- // and mini-tab title change effects. |
- double GetThrobValue(); |
- |
- // Handles the clicked signal for the close button. |
- CHROMEGTK_CALLBACK_0(TabRendererGtk, void, OnCloseButtonClicked); |
- |
- // Handles middle clicking the close button. |
- CHROMEGTK_CALLBACK_1(TabRendererGtk, gboolean, OnCloseButtonMouseRelease, |
- GdkEventButton*); |
- |
- // expose-event handler that redraws the tab. |
- CHROMEGTK_CALLBACK_1(TabRendererGtk, gboolean, OnExposeEvent, |
- GdkEventExpose*); |
- |
- // size-allocate handler used to update the current bounds of the tab. |
- CHROMEGTK_CALLBACK_1(TabRendererGtk, void, OnSizeAllocate, GtkAllocation*); |
- |
- // TODO(jhawkins): Move to TabResources. |
- static void InitResources(); |
- static bool initialized_; |
- |
- // The bounds of various sections of the display. |
- gfx::Rect favicon_bounds_; |
- gfx::Rect title_bounds_; |
- gfx::Rect media_indicator_bounds_; |
- gfx::Rect close_button_bounds_; |
- |
- TabData data_; |
- |
- static int tab_active_l_width_; |
- static int tab_active_l_height_; |
- static int tab_inactive_l_width_; |
- static int tab_inactive_l_height_; |
- |
- static gfx::Font* title_font_; |
- static int title_font_height_; |
- |
- static int close_button_width_; |
- static int close_button_height_; |
- |
- content::NotificationRegistrar registrar_; |
- |
- // The GtkDrawingArea we draw the tab on. |
- ui::OwnedWidgetGtk tab_; |
- |
- // 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're showing the media indicator. It is cached so that we can |
- // detect when it changes and layout appropriately. |
- bool showing_media_indicator_; |
- |
- // 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 favicon_hiding_offset_; |
- |
- // The animation object used to swap the favicon with the sad tab icon. |
- scoped_ptr<FaviconCrashAnimation> crash_animation_; |
- |
- // Set when the crashed favicon should be displayed. |
- bool should_display_crashed_favicon_; |
- |
- // The bounds of this Tab. |
- gfx::Rect bounds_; |
- |
- // The requested bounds of this tab. These bounds are relative to the |
- // tabstrip. |
- gfx::Rect requisition_; |
- |
- // Hover animation. |
- scoped_ptr<gfx::SlideAnimation> hover_animation_; |
- |
- // Animation used when the title of an inactive mini-tab changes. |
- scoped_ptr<gfx::ThrobAnimation> mini_title_animation_; |
- |
- // Media indicator fade-in/out animation (i.e., only on show/hide, not a |
- // continuous animation). |
- scoped_ptr<gfx::Animation> media_indicator_animation_; |
- TabMediaState animating_media_state_; |
- |
- // Contains the loading animation state. |
- LoadingAnimation loading_animation_; |
- |
- // The offset used to paint the tab theme images. |
- int background_offset_x_; |
- |
- // The vertical offset used to paint the tab theme images. Controlled by the |
- // tabstrip and plumbed here to offset the theme image by the size of the |
- // alignment in the BrowserTitlebar. |
- int background_offset_y_; |
- |
- GtkThemeService* theme_service_; |
- |
- // The close button. |
- scoped_ptr<CustomDrawButton> close_button_; |
- |
- // The current color of the close button. |
- SkColor close_button_color_; |
- |
- // Indicates whether this tab is the active one. |
- bool is_active_; |
- |
- // Color of the title text on the selected tab. |
- SkColor selected_title_color_; |
- |
- // Color of the title text on an unselected tab. |
- SkColor unselected_title_color_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TabRendererGtk); |
-}; |
- |
-#endif // CHROME_BROWSER_UI_GTK_TABS_TAB_RENDERER_GTK_H_ |