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

Side by Side Diff: views/controls/single_split_view.h

Issue 5606012: Streamline the layout of the BrowserView's children TabContents views.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_H_ 5 #ifndef VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_H_
6 #define VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_H_ 6 #define VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_H_
7 #pragma once 7 #pragma once
8 8
9 #include "views/view.h" 9 #include "views/view.h"
10 10
11 namespace views { 11 namespace views {
12 12
13 // SingleSplitView lays out two views horizontally. A splitter exists between 13 // SingleSplitView lays out two views next to each other, either horizontally
14 // the two views that the user can drag around to resize the views. 14 // or vertically. A splitter exists between the two views that the user can
15 // drag around to resize the views. It does not change these views bounds
16 // though, the actual resize is a resonsibility of the entity resizing
17 // the SingleSplitView itself. Observer's SplitHandleMoved notification helps
18 // to handle user initiated layout changes.
sky 2011/01/06 17:55:02 The Observer should be optional, a NULL observer m
Aleksey Shlyapnikov 2011/01/07 19:07:23 Done.
15 class SingleSplitView : public views::View { 19 class SingleSplitView : public views::View {
16 public: 20 public:
17 enum Orientation { 21 enum Orientation {
18 HORIZONTAL_SPLIT, 22 HORIZONTAL_SPLIT,
19 VERTICAL_SPLIT 23 VERTICAL_SPLIT
20 }; 24 };
21 25
22 SingleSplitView(View* leading, View* trailing, Orientation orientation); 26 class Observer {
27 public:
28 // Invoked when split handle is moved by the user.
sky 2011/01/06 17:55:02 This should return a boolean indicating if Layout
Aleksey Shlyapnikov 2011/01/07 19:07:23 In the updated version SingleSplitView does layout
29 virtual void SplitHandleMoved(SingleSplitView* source) = 0;
30 protected:
31 virtual ~Observer() {}
32 };
33
34 SingleSplitView(View* leading, View* trailing, Orientation orientation,
35 Observer* observer);
23 36
24 virtual void DidChangeBounds(const gfx::Rect& previous, 37 virtual void DidChangeBounds(const gfx::Rect& previous,
25 const gfx::Rect& current); 38 const gfx::Rect& current);
26 39
27 virtual void Layout(); 40 virtual void Layout();
28 41
29 virtual AccessibilityTypes::Role GetAccessibleRole(); 42 virtual AccessibilityTypes::Role GetAccessibleRole();
30 43
31 // SingleSplitView's preferred size is the sum of the preferred widths 44 // SingleSplitView's preferred size is the sum of the preferred widths
32 // and the max of the heights. 45 // and the max of the heights.
33 virtual gfx::Size GetPreferredSize(); 46 virtual gfx::Size GetPreferredSize();
34 47
35 // Overriden to return a resize cursor when over the divider. 48 // Overriden to return a resize cursor when over the divider.
36 virtual gfx::NativeCursor GetCursorForPoint(Event::EventType event_type, 49 virtual gfx::NativeCursor GetCursorForPoint(Event::EventType event_type,
37 const gfx::Point& p); 50 const gfx::Point& p);
38 51
39 void set_divider_offset(int divider_offset) { 52 void set_divider_offset(int divider_offset) {
40 divider_offset_ = divider_offset; 53 divider_offset_ = divider_offset;
41 } 54 }
42 int divider_offset() { return divider_offset_; } 55 int divider_offset() { return divider_offset_; }
43 56
44 // Sets whether the leading component is resized when the split views size 57 // Sets whether the leading component is resized when the split views size
45 // changes. The default is true. A value of false results in the trailing 58 // changes. The default is true. A value of false results in the trailing
46 // component resizing on a bounds change. 59 // component resizing on a bounds change.
47 void set_resize_leading_on_bounds_change(bool resize) { 60 void set_resize_leading_on_bounds_change(bool resize) {
48 resize_leading_on_bounds_change_ = resize; 61 resize_leading_on_bounds_change_ = resize;
49 } 62 }
50 63
64 const gfx::Rect& leading_view_rect() const { return leading_view_rect_; }
65 const gfx::Rect& trailing_view_rect() const { return trailing_view_rect_; }
66
67 // Resizes leading and trailing views to the current leading_view_rect_ and
68 // trailing_view_rect_ bounds, accordingly.
69 void ResizeViews();
70
51 protected: 71 protected:
52 virtual bool OnMousePressed(const MouseEvent& event); 72 virtual bool OnMousePressed(const MouseEvent& event);
53 virtual bool OnMouseDragged(const MouseEvent& event); 73 virtual bool OnMouseDragged(const MouseEvent& event);
54 virtual void OnMouseReleased(const MouseEvent& event, bool canceled); 74 virtual void OnMouseReleased(const MouseEvent& event, bool canceled);
55 75
56 private: 76 private:
57 // Returns true if |x| or |y| is over the divider. 77 // Returns true if |x| or |y| is over the divider.
58 bool IsPointInDivider(const gfx::Point& p); 78 bool IsPointInDivider(const gfx::Point& p);
59 79
60 // Returns width in case of horizontal split and height otherwise. 80 // Returns width in case of horizontal split and height otherwise.
(...skipping 16 matching lines...) Expand all
77 DragInfo drag_info_; 97 DragInfo drag_info_;
78 98
79 // Orientation of the split view. 99 // Orientation of the split view.
80 bool is_horizontal_; 100 bool is_horizontal_;
81 101
82 // Position of the divider. 102 // Position of the divider.
83 int divider_offset_; 103 int divider_offset_;
84 104
85 bool resize_leading_on_bounds_change_; 105 bool resize_leading_on_bounds_change_;
86 106
107 // Observer to notify about user initiated handle movements. Not own by us.
108 Observer* observer_;
109 // Leading and trailing views bounds calcualted based on the current
sky 2011/01/06 17:55:02 Newline between 108 and 109.
sky 2011/01/06 17:55:02 calcualted - > calculated
Aleksey Shlyapnikov 2011/01/07 19:07:23 Done.
Aleksey Shlyapnikov 2011/01/07 19:07:23 Done.
110 // |divider_offset_|. Not necessarily equal to the actual views bounds,
111 // ResizeViews() brings them in sync.
112 gfx::Rect leading_view_rect_;
113 gfx::Rect trailing_view_rect_;
114
87 DISALLOW_COPY_AND_ASSIGN(SingleSplitView); 115 DISALLOW_COPY_AND_ASSIGN(SingleSplitView);
88 }; 116 };
89 117
90 } // namespace views 118 } // namespace views
91 119
92 #endif // VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_H_ 120 #endif // VIEWS_CONTROLS_SINGLE_SPLIT_VIEW_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698