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

Unified Diff: chrome/browser/gtk/tabs/dragged_tab_controller_gtk.h

Issue 113532: Implement DraggedTabGtk, the object that handles rendering either a dragged t... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 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 | « no previous file | chrome/browser/gtk/tabs/dragged_tab_controller_gtk.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/tabs/dragged_tab_controller_gtk.h
===================================================================
--- chrome/browser/gtk/tabs/dragged_tab_controller_gtk.h (revision 16177)
+++ chrome/browser/gtk/tabs/dragged_tab_controller_gtk.h (working copy)
@@ -5,10 +5,14 @@
#ifndef CHROME_BROWSER_GTK_TABS_DRAGGED_TAB_CONTROLLER_GTK_H_
#define CHROME_BROWSER_GTK_TABS_DRAGGED_TAB_CONTROLLER_GTK_H_
+#include <gtk/gtk.h>
+
+#include "base/scoped_ptr.h"
#include "base/timer.h"
#include "chrome/browser/tab_contents/tab_contents_delegate.h"
#include "chrome/common/notification_registrar.h"
+class DraggedTabGtk;
class TabGtk;
class TabStripGtk;
@@ -74,6 +78,10 @@
const NotificationSource& source,
const NotificationDetails& details);
+ // Initialize the offset used to calculate the position to create windows
+ // in |GetWindowCreatePoint|.
+ void InitWindowCreatePoint();
+
// Sets the TabContents being dragged with the specified |new_contents|.
void SetDraggedContents(TabContents* new_contents);
@@ -88,13 +96,27 @@
// coordinates), or NULL if there is none.
TabStripGtk* GetTabStripForPoint(const gfx::Point& screen_point);
+ // Attach the dragged Tab to the specified TabStrip.
+ void Attach(TabStripGtk* attached_tabstrip, const gfx::Point& screen_point);
+
+ // Detach the dragged Tab from the current TabStrip.
+ void Detach();
+
+ // Converts a screen point to a point relative to the tab strip.
+ gfx::Point ConvertScreenPointToTabStripPoint(TabStripGtk* tabstrip,
+ const gfx::Point& screen_point);
+
+ // Retrieve the bounds of the DraggedTabGtk, relative to the attached
+ // TabStrip, given location of the dragged tab in screen coordinates.
+ gfx::Rect GetDraggedTabTabStripBounds(const gfx::Point& screen_point);
+
// Returns the index where the dragged TabContents should be inserted into
// the attached TabStripModel given the DraggedTabView's bounds
// |dragged_bounds| in coordinates relative to the attached TabStrip.
int GetInsertionIndexForDraggedBounds(const gfx::Rect& dragged_bounds) const;
// Get the position of the dragged tab relative to the attached tab strip.
- gfx::Point GetDraggedPoint(const gfx::Point& point);
+ gfx::Point GetDraggedTabPoint(const gfx::Point& screen_point);
// Finds the Tab within the specified TabStrip that corresponds to the
// dragged TabContents.
@@ -111,13 +133,24 @@
// be destroyed immediately, false otherwise.
bool CompleteDrag();
+ // Create the DraggedTabGtk if it does not yet exist.
+ void EnsureDraggedTab();
+
// Utility for getting the mouse position in screen coordinates.
gfx::Point GetCursorScreenPoint() const;
+ // Gets the screen bounds of a tab.
+ static gfx::Rect GetTabScreenBounds(TabGtk* tab);
+
// Utility to convert the specified TabStripModel index to something valid
// for the attached TabStrip.
int NormalizeIndexToAttachedTabStrip(int index) const;
+ // Completes the drag session after the view has animated to its final
+ // position.
+ void OnAnimateToBoundsComplete();
+
+ // Activates whichever window is under the mouse.
void BringWindowUnderMouseToFront();
// Handles registering for notifications.
@@ -145,6 +178,9 @@
// dragged Tab is detached.
TabStripGtk* attached_tabstrip_;
+ // The visual representation of the dragged Tab.
+ scoped_ptr<DraggedTabGtk> dragged_tab_;
+
// The position of the mouse (in screen coordinates) at the start of the drag
// operation. This is used to calculate minimum elasticity before a
// DraggedTabView is constructed.
@@ -156,16 +192,20 @@
// detached window is created at the right location.
gfx::Point mouse_offset_;
+ // A hint to use when positioning new windows created by detaching Tabs. This
+ // is the distance of the mouse from the top left of the dragged tab as if it
+ // were the distance of the mouse from the top left of the first tab in the
+ // attached TabStrip from the top left of the window.
+ gfx::Point window_create_point_;
+
+ // Whether we're in the destructor or not. Makes sure we don't destroy the
+ // drag controller more than once.
+ bool in_destructor_;
+
// The horizontal position of the mouse cursor in screen coordinates at the
// time of the last re-order event.
int last_move_screen_x_;
- // The last good tab bounds of the dragged tab. This is the position the tab
- // will be snapped back to when the drag is released.
- // TODO(jhawkins): We should not be moving the tab itself, but rather a
- // stand-in renderer.
- gfx::Rect snap_bounds_;
-
// Timer used to bring the window under the cursor to front. If the user
// stops moving the mouse for a brief time over a browser window, it is
// brought to front.
« no previous file with comments | « no previous file | chrome/browser/gtk/tabs/dragged_tab_controller_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698