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

Side by Side Diff: chrome/browser/ui/touch/tabs/touch_tab_strip.h

Issue 6750007: Scrolling Tabs (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Addressing Scott's review comments Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_UI_TOUCH_TABS_TOUCH_TAB_STRIP_H_ 5 #ifndef CHROME_BROWSER_UI_TOUCH_TABS_TOUCH_TAB_STRIP_H_
6 #define CHROME_BROWSER_UI_TOUCH_TABS_TOUCH_TAB_STRIP_H_ 6 #define CHROME_BROWSER_UI_TOUCH_TABS_TOUCH_TAB_STRIP_H_
7 #pragma once 7 #pragma once
8 8
9 #include "chrome/browser/ui/views/tabs/base_tab_strip.h" 9 #include "chrome/browser/ui/views/tabs/base_tab_strip.h"
10 10
11 class TouchTab; 11 class TouchTab;
12 12
13 /////////////////////////////////////////////////////////////////////////////// 13 ///////////////////////////////////////////////////////////////////////////////
14 // 14 //
15 // TouchTabStrip 15 // TouchTabStrip
16 // 16 //
17 // A View that represents the TabStripModel. The TouchTabStrip has the 17 // A View that represents the TabStripModel. The TouchTabStrip has the
18 // following responsibilities: 18 // following responsibilities:
19 // - It implements the TabStripModelObserver interface, and acts as a 19 // - It implements the TabStripModelObserver interface, and acts as a
20 // container for Tabs, and is also responsible for creating them. 20 // container for Tabs, and is also responsible for creating them.
21 // 21 //
22 // TODO(wyck): Use transformable views for scrolling.
22 /////////////////////////////////////////////////////////////////////////////// 23 ///////////////////////////////////////////////////////////////////////////////
23 class TouchTabStrip : public BaseTabStrip { 24 class TouchTabStrip : public BaseTabStrip {
24 public: 25 public:
25 explicit TouchTabStrip(TabStripController* controller); 26 explicit TouchTabStrip(TabStripController* controller);
26 virtual ~TouchTabStrip(); 27 virtual ~TouchTabStrip();
27 28
28 // AbstractTabStripView implementation: 29 // AbstractTabStripView implementation:
29 virtual bool IsPositionInWindowCaption(const gfx::Point& point); 30 virtual bool IsPositionInWindowCaption(const gfx::Point& point);
30 virtual void SetBackgroundOffset(const gfx::Point& offset); 31 virtual void SetBackgroundOffset(const gfx::Point& offset);
31 32
32 // BaseTabStrip implementation: 33 // BaseTabStrip implementation:
33 virtual void PrepareForCloseAt(int model_index); 34 virtual void PrepareForCloseAt(int model_index);
34 virtual void StartHighlight(int model_index); 35 virtual void StartHighlight(int model_index);
35 virtual void StopAllHighlighting(); 36 virtual void StopAllHighlighting();
36 virtual BaseTab* CreateTabForDragging(); 37 virtual BaseTab* CreateTabForDragging();
37 virtual void RemoveTabAt(int model_index); 38 virtual void RemoveTabAt(int model_index);
38 virtual void SelectTabAt(int old_model_index, int new_model_index); 39 virtual void SelectTabAt(int old_model_index, int new_model_index);
39 virtual void TabTitleChangedNotLoading(int model_index); 40 virtual void TabTitleChangedNotLoading(int model_index);
40 virtual BaseTab* CreateTab(); 41 virtual BaseTab* CreateTab();
41 virtual void StartInsertTabAnimation(int model_index); 42 virtual void StartInsertTabAnimation(int model_index);
42 virtual void AnimateToIdealBounds(); 43 virtual void AnimateToIdealBounds();
43 virtual bool ShouldHighlightCloseButtonAfterRemove(); 44 virtual bool ShouldHighlightCloseButtonAfterRemove();
44 virtual void GenerateIdealBounds(); 45 virtual void GenerateIdealBounds();
45 virtual void LayoutDraggedTabsAt(const std::vector<BaseTab*>& tabs, 46 virtual void LayoutDraggedTabsAt(const std::vector<BaseTab*>& tabs,
46 BaseTab* active_tab, 47 BaseTab* active_tab,
47 const gfx::Point& location, 48 const gfx::Point& location,
48 bool initial_drag); 49 bool initial_drag);
49 virtual int GetSizeNeededForTabs(const std::vector<BaseTab*>& tabs); 50 virtual int GetSizeNeededForTabs(const std::vector<BaseTab*>& tabs);
50 51
52 // views::View overrides:
53 virtual bool OnMousePressed(const views::MouseEvent& event) OVERRIDE;
54 virtual bool OnMouseDragged(const views::MouseEvent& event) OVERRIDE;
55 virtual void OnMouseReleased(const views::MouseEvent& event) OVERRIDE;
56 virtual void OnMouseCaptureLost() OVERRIDE;
57
51 // Retrieves the Tab at the specified index. Remember, the specified index 58 // Retrieves the Tab at the specified index. Remember, the specified index
52 // is in terms of tab_data, *not* the model. 59 // is in terms of tab_data, *not* the model.
53 TouchTab* GetTabAtTabDataIndex(int tab_data_index) const; 60 TouchTab* GetTabAtTabDataIndex(int tab_data_index) const;
54 61
55 private: 62 private:
56 void Init(); 63 void Init();
57 64
58 // Overridden from views::View. 65 // Overridden from views::View.
59 virtual gfx::Size GetPreferredSize() OVERRIDE; 66 virtual gfx::Size GetPreferredSize() OVERRIDE;
60 virtual void PaintChildren(gfx::Canvas* canvas) OVERRIDE; 67 virtual void PaintChildren(gfx::Canvas* canvas) OVERRIDE;
61 virtual views::View::TouchStatus OnTouchEvent( 68 virtual views::View::TouchStatus OnTouchEvent(
62 const views::TouchEvent& event) OVERRIDE; 69 const views::TouchEvent& event) OVERRIDE;
63 virtual void ViewHierarchyChanged(bool is_add, 70 virtual void ViewHierarchyChanged(bool is_add,
64 View* parent, 71 View* parent,
65 View* child) OVERRIDE; 72 View* child) OVERRIDE;
66 73
74 // Adjusts the state of scroll interaction when a mouse press occurs at the
75 // given point. Sets an appropriate |initial_scroll_offset_|.
76 void BeginScroll(const gfx::Point& point);
77
78 // Adjusts the state of scroll interaction when the mouse is dragged to the
79 // given point. If the scroll is not beyond the minimum threshold, the tabs
80 // will not actually scroll.
81 void ContinueScroll(const gfx::Point& point);
82
83 // Adjusts the state of scroll interaction when the mouse is released. Either
84 // scrolls to the final mouse release point or selects the current tab
85 // depending on whether the mouse was dragged beyone the minimum threshold.
86 void EndScroll(const gfx::Point& point);
87
88 // Adjust the state of scroll interaction when the mouse capture is lost. It
89 // scrolls back to the original position before the scroll began.
90 void CancelScroll();
91
92 // Adjust the positions of the tabs to perform a scroll of |delta_x| relative
93 // to the |initial_scroll_offset_|.
94 void ScrollTo(int delta_x);
95
67 // True if PrepareForCloseAt has been invoked. When true remove animations 96 // True if PrepareForCloseAt has been invoked. When true remove animations
68 // preserve current tab bounds. 97 // preserve current tab bounds.
69 bool in_tab_close_; 98 bool in_tab_close_;
70 99
71 // Last time the tabstrip was tapped. 100 // Last time the tabstrip was tapped.
72 base::Time last_tap_time_; 101 base::Time last_tap_time_;
73 102
74 // The view that was tapped last. 103 // The view that was tapped last.
75 View* last_tapped_view_; 104 View* last_tapped_view_;
76 105
106 // Records the mouse x coordinate at the start of a drag operation.
107 int initial_mouse_x_;
108
109 // Records the scroll offset at the time of the start of a drag operation.
110 int initial_scroll_offset_;
111
112 // The current offset of the view. Positive scroll offsets move the icons to
113 // the left. Negative scroll offsets move the icons to the right.
114 int scroll_offset_;
115
116 // State of the scrolling interaction. Will be true once the drag has been
117 // displaced beyond the minimum dragging threshold.
118 bool scrolling_;
119
120 // Records the tab that was under the initial mouse press. Must match the
121 // tab that was under the final mouse release in order for the tab to
122 // be selected.
123 TouchTab* initial_tab_;
124
125 // The minimum value that |scroll_offset_| can have. Based on the total
126 // width of all the content to be scrolled, less the viewport size.
127 int min_scroll_offset_;
128
77 DISALLOW_COPY_AND_ASSIGN(TouchTabStrip); 129 DISALLOW_COPY_AND_ASSIGN(TouchTabStrip);
78 }; 130 };
79 131
80 #endif // CHROME_BROWSER_UI_TOUCH_TABS_TOUCH_TAB_STRIP_H_ 132 #endif // CHROME_BROWSER_UI_TOUCH_TABS_TOUCH_TAB_STRIP_H_
OLDNEW
« no previous file with comments | « chrome/browser/ui/touch/tabs/touch_tab.cc ('k') | chrome/browser/ui/touch/tabs/touch_tab_strip.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698