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

Unified Diff: chrome/browser/ui/gtk/tabs/tab_strip_gtk.h

Issue 231733005: Delete the GTK+ port of Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remerge to ToT 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
Index: chrome/browser/ui/gtk/tabs/tab_strip_gtk.h
diff --git a/chrome/browser/ui/gtk/tabs/tab_strip_gtk.h b/chrome/browser/ui/gtk/tabs/tab_strip_gtk.h
deleted file mode 100644
index eb3f2551ee49d47a2e273d975f3bf16cc65d5307..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/gtk/tabs/tab_strip_gtk.h
+++ /dev/null
@@ -1,503 +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_STRIP_GTK_H_
-#define CHROME_BROWSER_UI_GTK_TABS_TAB_STRIP_GTK_H_
-
-#include <gtk/gtk.h>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "chrome/browser/ui/gtk/tabs/tab_gtk.h"
-#include "chrome/browser/ui/gtk/tabstrip_origin_provider.h"
-#include "chrome/browser/ui/gtk/view_id_util.h"
-#include "chrome/browser/ui/tabs/hover_tab_selector.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-#include "ui/base/gtk/gtk_signal.h"
-#include "ui/base/gtk/owned_widget_gtk.h"
-#include "ui/gfx/rect.h"
-
-class BrowserWindowGtk;
-class CustomDrawButton;
-class DraggedTabControllerGtk;
-class GtkThemeService;
-
-namespace gfx {
-class Image;
-}
-
-class TabStripGtk : public TabStripModelObserver,
- public TabGtk::TabDelegate,
- public base::MessageLoopForUI::Observer,
- public content::NotificationObserver,
- public TabstripOriginProvider,
- public ViewIDUtil::Delegate {
- public:
- class TabAnimation;
-
- TabStripGtk(TabStripModel* model, BrowserWindowGtk* window);
- virtual ~TabStripGtk();
-
- // Initialize and load the TabStrip into a container.
- // TODO(tc): Pass in theme provider so we can properly theme the tabs.
- void Init();
-
- void Show();
- void Hide();
-
- TabStripModel* model() const { return model_; }
-
- BrowserWindowGtk* window() const { return window_; }
-
- GtkWidget* widget() const { return tabstrip_.get(); }
-
- // Returns true if there is an active drag session.
- bool IsDragSessionActive() const { return drag_controller_.get() != NULL; }
-
- // Returns true if a tab is being dragged into this tabstrip.
- bool IsActiveDropTarget() const;
-
- // Sets the bounds of the tabs.
- void Layout();
-
- // Queues a draw for the tabstrip widget.
- void SchedulePaint();
-
- // Sets the bounds of the tabstrip.
- void SetBounds(const gfx::Rect& bounds);
-
- // Returns the bounds of the tabstrip.
- const gfx::Rect& bounds() const { return bounds_; }
-
- // Updates loading animations for the TabStrip.
- void UpdateLoadingAnimations();
-
- // Return true if this tab strip is compatible with the provided tab strip.
- // Compatible tab strips can transfer tabs during drag and drop.
- bool IsCompatibleWith(TabStripGtk* other);
-
- // Returns true if Tabs in this TabStrip are currently changing size or
- // position.
- bool IsAnimating() const;
-
- // Destroys the active drag controller.
- void DestroyDragController();
-
- // Removes |dragged_tab| from this tabstrip, and deletes it.
- void DestroyDraggedTab(TabGtk* dragged_tab);
-
- // Retrieve the ideal bounds for the Tab at the specified index.
- gfx::Rect GetIdealBounds(int index);
-
- // Sets the vertical offset that each tab will use to offset against the
- // background image. Passed in from the titlebar and based on the size of the
- // alignment that sits above the tabstrip.
- void SetVerticalOffset(int offset);
-
- // TabstripOriginProvider implementation -------------------------------------
- virtual gfx::Point GetTabStripOriginForWidget(GtkWidget* widget) OVERRIDE;
-
- // ViewIDUtil::Delegate implementation ---------------------------------------
- virtual GtkWidget* GetWidgetForViewID(ViewID id) OVERRIDE;
-
- protected:
- // TabStripModelObserver implementation:
- virtual void TabInsertedAt(content::WebContents* contents,
- int index,
- bool foreground) OVERRIDE;
- virtual void TabDetachedAt(content::WebContents* contents,
- int index) OVERRIDE;
- virtual void TabMoved(content::WebContents* contents,
- int from_index,
- int to_index) OVERRIDE;
- virtual void ActiveTabChanged(content::WebContents* old_contents,
- content::WebContents* new_contents,
- int index,
- int reason) OVERRIDE;
- virtual void TabSelectionChanged(
- TabStripModel* tab_strip_model,
- const ui::ListSelectionModel& old_model) OVERRIDE;
- virtual void TabChangedAt(content::WebContents* contents,
- int index,
- TabChangeType change_type) OVERRIDE;
- virtual void TabReplacedAt(TabStripModel* tab_strip_model,
- content::WebContents* old_contents,
- content::WebContents* new_contents,
- int index) OVERRIDE;
- virtual void TabMiniStateChanged(content::WebContents* contents,
- int index) OVERRIDE;
- virtual void TabBlockedStateChanged(content::WebContents* contents,
- int index) OVERRIDE;
-
- // TabGtk::TabDelegate implementation:
- virtual bool IsTabActive(const TabGtk* tab) const OVERRIDE;
- virtual bool IsTabSelected(const TabGtk* tab) const OVERRIDE;
- virtual bool IsTabPinned(const TabGtk* tab) const OVERRIDE;
- virtual bool IsTabDetached(const TabGtk* tab) const OVERRIDE;
- virtual void ActivateTab(TabGtk* tab) OVERRIDE;
- virtual void ToggleTabSelection(TabGtk* tab) OVERRIDE;
- virtual void ExtendTabSelection(TabGtk* tab) OVERRIDE;
- virtual void CloseTab(TabGtk* tab) OVERRIDE;
- virtual bool IsCommandEnabledForTab(
- TabStripModel::ContextMenuCommand command_id,
- const TabGtk* tab) const OVERRIDE;
- virtual void ExecuteCommandForTab(
- TabStripModel::ContextMenuCommand command_id, TabGtk* tab) OVERRIDE;
- virtual void StartHighlightTabsForCommand(
- TabStripModel::ContextMenuCommand command_id, TabGtk* tab) OVERRIDE;
- virtual void StopHighlightTabsForCommand(
- TabStripModel::ContextMenuCommand command_id, TabGtk* tab) OVERRIDE;
- virtual void StopAllHighlighting() OVERRIDE;
- virtual void MaybeStartDrag(TabGtk* tab, const gfx::Point& point) OVERRIDE;
- virtual void ContinueDrag(GdkDragContext* context) OVERRIDE;
- virtual bool EndDrag(bool canceled) OVERRIDE;
- virtual bool HasAvailableDragActions() const OVERRIDE;
- virtual GtkThemeService* GetThemeProvider() OVERRIDE;
- virtual TabStripMenuController* GetTabStripMenuControllerForTab(
- TabGtk* tab) OVERRIDE;
-
- // MessageLoop::Observer implementation:
- virtual void WillProcessEvent(GdkEvent* event) OVERRIDE;
- virtual void DidProcessEvent(GdkEvent* event) OVERRIDE;
-
- // Overridden from content::NotificationObserver:
- virtual void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) OVERRIDE;
-
- // Horizontal gap between mini-tabs and normal tabs.
- static const int mini_to_non_mini_gap_;
-
- private:
- friend class BrowserWindowGtk;
- friend class DraggedTabControllerGtk;
- friend class InsertTabAnimation;
- friend class MiniMoveAnimation;
- friend class MiniTabAnimation;
- friend class MoveTabAnimation;
- friend class RemoveTabAnimation;
- friend class ResizeLayoutAnimation;
- friend class TabAnimation;
-
- struct TabData {
- TabGtk* tab;
- gfx::Rect ideal_bounds;
- };
-
- // Used during a drop session of a url. Tracks the position of the drop as
- // well as a window used to highlight where the drop occurs.
- class DropInfo {
- public:
- DropInfo(int index, bool drop_before, bool point_down);
- virtual ~DropInfo();
-
- // TODO(jhawkins): Factor out this code into a TransparentContainer class.
-
- // expose-event handler that redraws the drop indicator.
- CHROMEGTK_CALLBACK_1(DropInfo, gboolean, OnExposeEvent, GdkEventExpose*);
-
- // Sets the color map of the container window to allow the window to be
- // transparent.
- void SetContainerColorMap();
-
- // Sets full transparency for the container window. This is used if
- // compositing is available for the screen.
- void SetContainerTransparency();
-
- // Sets the shape mask for the container window to emulate a transparent
- // container window. This is used if compositing is not available for the
- // screen.
- void SetContainerShapeMask();
-
- // Creates the container widget.
- void CreateContainer();
-
- // Destroys the container widget.
- void DestroyContainer();
-
- // Index of the tab to drop on. If drop_before is true, the drop should
- // occur between the tab at drop_index - 1 and drop_index.
- // WARNING: if drop_before is true it is possible this will == tab_count,
- // which indicates the drop should create a new tab at the end of the tabs.
- int drop_index;
- bool drop_before;
-
- // Direction the arrow should point in. If true, the arrow is displayed
- // above the tab and points down. If false, the arrow is displayed beneath
- // the tab and points up.
- bool point_down;
-
- // Transparent container window used to render the drop indicator over the
- // tabstrip and toolbar.
- GtkWidget* container;
-
- // The drop indicator image.
- gfx::Image* drop_arrow;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DropInfo);
- };
-
- // Map signal handler that sets initial z-ordering. The widgets need to be
- // realized before we can set the stacking. We use the "map" signal since the
- // "realize" signal is called before the child widgets get realized.
- CHROMEGTK_CALLBACK_0(TabStripGtk, void, OnMap);
-
- // expose-event handler that redraws the tabstrip
- CHROMEGTK_CALLBACK_1(TabStripGtk, gboolean, OnExpose, GdkEventExpose*);
-
- // size-allocate handler that gets the new bounds of the tabstrip.
- CHROMEGTK_CALLBACK_1(TabStripGtk, void, OnSizeAllocate, GtkAllocation*);
-
- // drag-motion handler that is signaled when the user performs a drag in the
- // tabstrip bounds.
- CHROMEGTK_CALLBACK_4(TabStripGtk, gboolean, OnDragMotion, GdkDragContext*,
- gint, gint, guint);
-
- // drag-drop handler that is notified when the user finishes a drag.
- CHROMEGTK_CALLBACK_4(TabStripGtk, gboolean, OnDragDrop, GdkDragContext*,
- gint, gint, guint);
-
- // drag-leave handler that is signaled when the mouse leaves the tabstrip
- // during a drag.
- CHROMEGTK_CALLBACK_2(TabStripGtk, gboolean, OnDragLeave, GdkDragContext*,
- guint);
-
- // drag-data-received handler that receives the data associated with the drag.
- CHROMEGTK_CALLBACK_6(TabStripGtk, gboolean, OnDragDataReceived,
- GdkDragContext*, gint, gint, GtkSelectionData*,
- guint, guint);
-
- // Handles the clicked signal from the new tab button.
- CHROMEGTK_CALLBACK_0(TabStripGtk, void, OnNewTabClicked);
-
- // Sets the bounds of the tab and moves the tab widget to those bounds.
- void SetTabBounds(TabGtk* tab, const gfx::Rect& bounds);
-
- // Returns true if |rects| are all areas that match up with tab favicons.
- // |rects| must be sorted from left to right. |tabs_to_paint| are the tab
- // positions that match the rects.
- bool CanPaintOnlyFavicons(const GdkRectangle* rects,
- int num_rects,
- std::vector<int>* tabs_to_paint);
-
- // Paints the tab favicon areas for tabs in |tabs_to_paint|.
- void PaintOnlyFavicons(GdkEventExpose* event,
- const std::vector<int>& tabs_to_paint);
-
- // Initializes the new tab button.
- CustomDrawButton* MakeNewTabButton();
-
- // Sets the theme specific background on the new tab button.
- void SetNewTabButtonBackground();
-
- // Gets the number of Tabs in the collection.
- int GetTabCount() const;
-
- // Returns the number of mini-tabs.
- int GetMiniTabCount() const;
-
- // Retrieves the Tab at the specified index. Take care in using this, you may
- // need to use GetTabAtAdjustForAnimation.
- TabGtk* GetTabAt(int index) const;
-
- // Returns the tab at the specified index. If a remove animation is on going
- // and the index is >= the index of the tab being removed, the index is
- // incremented. While a remove operation is on going the indices of the model
- // do not line up with the indices of the view. This method adjusts the index
- // accordingly.
- //
- // Use this instead of GetTabAt if the index comes from the model.
- TabGtk* GetTabAtAdjustForAnimation(int index) const;
-
- // Returns the exact (unrounded) current width of each tab.
- void GetCurrentTabWidths(double* unselected_width,
- double* selected_width) const;
-
- // Returns the exact (unrounded) desired width of each tab, based on the
- // desired strip width and number of tabs. If
- // |width_of_tabs_for_mouse_close_| is nonnegative we use that value in
- // calculating the desired strip width; otherwise we use the current width.
- // |mini_tab_count| gives the number of mini-tabs, and |tab_count| the
- // number of mini and non-mini-tabs.
- void GetDesiredTabWidths(int tab_count,
- int mini_tab_count,
- double* unselected_width,
- double* selected_width) const;
-
- // Returns the horizontal offset before the tab at |tab_index|.
- int GetTabHOffset(int tab_index);
-
- // Returns the x-coordinate tabs start from.
- int tab_start_x() const;
-
- // Perform an animated resize-relayout of the TabStrip immediately.
- void ResizeLayoutTabs();
-
- // Returns whether or not the cursor is currently in the "tab strip zone"
- // which is defined as the region above the TabStrip and a bit below it.
- bool IsCursorInTabStripZone() const;
-
- // Reset the Z-ordering of tabs.
- void ReStack();
-
- // Ensure that the message loop observer used for event spying is added and
- // removed appropriately so we can tell when to resize layout the tab strip.
- void AddMessageLoopObserver();
- void RemoveMessageLoopObserver();
-
- // Calculates the available width for tabs, assuming a Tab is to be closed.
- int GetAvailableWidthForTabs(TabGtk* last_tab) const;
-
- // Finds the index of the WebContents corresponding to |tab| in our
- // associated TabStripModel, or -1 if there is none (e.g. the specified |tab|
- // is being animated closed).
- int GetIndexOfTab(const TabGtk* tab) const;
-
- // Cleans up the tab from the TabStrip at the specified |index|.
- void RemoveTabAt(int index);
-
- // Called from the message loop observer when a mouse movement has occurred
- // anywhere over our containing window.
- void HandleGlobalMouseMoveEvent();
-
- // Generates the ideal bounds of the TabStrip when all Tabs have finished
- // animating to their desired position/bounds. This is used by the standard
- // Layout method and other callers like the DraggedTabController that need
- // stable representations of Tab positions.
- void GenerateIdealBounds();
-
- // Lays out the New Tab button, assuming the right edge of the last Tab on
- // the TabStrip at |last_tab_right|. |unselected_width| is the width of
- // unselected tabs at the moment this function is called. The value changes
- // during animations, so we can't use current_unselected_width_.
- void LayoutNewTabButton(double last_tab_right, double unselected_width);
-
- // -- Link Drag & Drop ------------------------------------------------------
-
- // Returns the bounds to render the drop at, in screen coordinates. Sets
- // |is_beneath| to indicate whether the arrow is beneath the tab, or above
- // it.
- gfx::Rect GetDropBounds(int drop_index, bool drop_before, bool* is_beneath);
-
- // Updates the location of the drop based on the event.
- void UpdateDropIndex(GdkDragContext* context, gint x, gint y);
-
- // Sets the location of the drop, repainting as necessary.
- void SetDropIndex(int index, bool drop_before);
-
- // Determines whether the data is acceptable by the tabstrip and opens a new
- // tab with the data as URL if it is. Returns true if the drop was
- // successful.
- bool CompleteDrop(const guchar* data, bool is_plain_text);
-
- // Returns the image to use for indicating a drop on a tab. If is_down is
- // true, this returns an arrow pointing down.
- static gfx::Image* GetDropArrowImage(bool is_down);
-
- // -- Animations -------------------------------------------------------------
-
- // Stops the current animation.
- void StopAnimation();
-
- // A generic Layout method for various classes of TabStrip animations,
- // including Insert, Remove and Resize Layout cases.
- void AnimationLayout(double unselected_width);
-
- // Starts various types of TabStrip animations.
- void StartInsertTabAnimation(int index);
- void StartRemoveTabAnimation(int index, content::WebContents* contents);
- void StartMoveTabAnimation(int from_index, int to_index);
- void StartMiniTabAnimation(int index);
- void StartMiniMoveTabAnimation(int from_index,
- int to_index,
- const gfx::Rect& start_bounds);
- void StartResizeLayoutAnimation();
-
- // Notifies the TabStrip that the specified TabAnimation has completed.
- // Optionally a full Layout will be performed, specified by |layout|.
- void FinishAnimation(TabAnimation* animation, bool layout);
-
- // The Tabs we contain, and their last generated "good" bounds.
- std::vector<TabData> tab_data_;
-
- // The current widths of various types of tabs. We save these so that, as
- // users close tabs while we're holding them at the same size, we can lay out
- // tabs exactly and eliminate the "pixel jitter" we'd get from just leaving
- // them all at their existing, rounded widths.
- double current_unselected_width_;
- double current_selected_width_;
-
- // If this value is nonnegative, it is used in GetDesiredTabWidths() to
- // calculate how much space in the tab strip to use for tabs. Most of the
- // time this will be -1, but while we're handling closing a tab via the mouse,
- // we'll set this to the edge of the last tab before closing, so that if we
- // are closing the last tab and need to resize immediately, we'll resize only
- // back to this width, thus once again placing the last tab under the mouse
- // cursor.
- int available_width_for_tabs_;
-
- // True if a resize layout animation should be run a short delay after the
- // mouse exits the TabStrip.
- bool needs_resize_layout_;
-
- // The GtkFixed widget.
- ui::OwnedWidgetGtk tabstrip_;
-
- // The bounds of the tabstrip.
- gfx::Rect bounds_;
-
- // The amount to offset tab backgrounds when we are using an autogenerated
- // tab background image.
- int tab_vertical_offset_;
-
- // Our model.
- TabStripModel* model_;
-
- // The BrowserWindowGtk containing this tab strip.
- BrowserWindowGtk* window_;
-
- // Theme resources.
- GtkThemeService* theme_service_;
-
- // The currently running animation.
- scoped_ptr<TabAnimation> active_animation_;
-
- // The New Tab button.
- scoped_ptr<CustomDrawButton> newtab_button_;
-
- // The bounds of the bitmap surface used to paint the New Tab button.
- gfx::Rect newtab_surface_bounds_;
-
- // Valid for the lifetime of a drag over us.
- scoped_ptr<DropInfo> drop_info_;
-
- // The controller for a drag initiated from a Tab. Valid for the lifetime of
- // the drag session.
- scoped_ptr<DraggedTabControllerGtk> drag_controller_;
-
- // True if the tabstrip has already been added as a MessageLoop observer.
- bool added_as_message_loop_observer_;
-
- // Helper for performing tab selection as a result of dragging over a tab.
- HoverTabSelector hover_tab_selector_;
-
- content::NotificationRegistrar registrar_;
-
- // A factory that is used to construct a delayed callback to the
- // ResizeLayoutTabsNow method.
- base::WeakPtrFactory<TabStripGtk> weak_factory_;
-
- // A different factory for calls to Layout().
- base::WeakPtrFactory<TabStripGtk> layout_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(TabStripGtk);
-};
-
-#endif // CHROME_BROWSER_UI_GTK_TABS_TAB_STRIP_GTK_H_

Powered by Google App Engine
This is Rietveld 408576698