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

Side by Side Diff: docs/ui/views/overview.md

Issue 2898703002: Cocoa coordinates start at the bottom left; content ➞ contents to be consistent with Views code. (Closed)
Patch Set: Created 3 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Views Overview 1 # Views Overview
2 2
3 This document is an overview of Views concepts, terminology, and architecture. 3 This document is an overview of Views concepts, terminology, and architecture.
4 The target audience is engineers using or working on Views. 4 The target audience is engineers using or working on Views.
5 5
6 ## General Things 6 ## General Things
7 7
8 Points in this document are written as `(x,y)`, and rectangles are written as 8 Points in this document are written as `(x,y)`, and rectangles are written as
9 `[(x,y) wxh]`. For example, the rectangle `[(100,100) 50x20]` contains the point 9 `[(x,y) wxh]`. For example, the rectangle `[(100,100) 50x20]` contains the point
10 `(130,110)`. 10 `(130,110)`.
11 11
12 Views uses a coordinate system with `(0,0)` at the top-left, with increasing 12 Views uses a coordinate system with `(0,0)` at the top-left, with increasing
13 x-coordinates moving rightwards and increasing y-coordinates moving downwards. 13 x-coordinates moving rightwards and increasing y-coordinates moving downwards.
14 This is the same as the Windows and GTK coordinate systems, but *different from* 14 This is the same as the Windows and GTK coordinate systems, but *different from*
15 the Cocoa coordinate system, which has `(0,0)` at the bottom-right. Coordinates 15 the Cocoa coordinate system, which has `(0,0)` at the bottom-left. Coordinates
Elly Fong-Jones 2017/05/22 14:53:42 ooops! thanks for noticing & fixing :)
16 in this document use the Views coordinate system. 16 in this document use the Views coordinate system.
17 17
18 Views generally *take ownership* of objects passed to them even via raw 18 Views generally *take ownership* of objects passed to them even via raw
19 pointers, although there are some exceptions, such as delegates. 19 pointers, although there are some exceptions, such as delegates.
20 20
21 ## Views 21 ## Views
22 22
23 A **View** is a UI element, similar to an HTML DOM element. Each View occupies a 23 A **View** is a UI element, similar to an HTML DOM element. Each View occupies a
24 rectangle, called its **bounds**, which is expressed in the coordinate system of 24 rectangle, called its **bounds**, which is expressed in the coordinate system of
25 its parent View. Views may have child Views, which are laid out according to the 25 its parent View. Views may have child Views, which are laid out according to the
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 97
98 ## Widgets 98 ## Widgets
99 99
100 Views need an underlying canvas to paint onto. This has to be supplied by the 100 Views need an underlying canvas to paint onto. This has to be supplied by the
101 operating system, usually by creating a native drawing surface of some kind. 101 operating system, usually by creating a native drawing surface of some kind.
102 Views calls these **widgets**. A Widget is the bridge between a tree of Views 102 Views calls these **widgets**. A Widget is the bridge between a tree of Views
103 and a native window of some sort, which Views calls a **native widget**. Each 103 and a native window of some sort, which Views calls a **native widget**. Each
104 Widget has a **root view**, which is a special subclass of View that helps with 104 Widget has a **root view**, which is a special subclass of View that helps with
105 this bridging; the root view in turn has a single child view, called the 105 this bridging; the root view in turn has a single child view, called the
106 Widget's **contents view**, which fills the entire root view. All other Views 106 Widget's **contents view**, which fills the entire root view. All other Views
107 inside a given Widget are children of that Widget's content view. 107 inside a given Widget are children of that Widget's contents view.
108 108
109 Widgets have many responsibilities, including but not limited to: 109 Widgets have many responsibilities, including but not limited to:
110 110
111 1. Keyboard focus management, via [FocusManager] 111 1. Keyboard focus management, via [FocusManager]
112 2. Window resizing/minimization/maximization 112 2. Window resizing/minimization/maximization
113 3. Window shaping, for non-rectangular windows 113 3. Window shaping, for non-rectangular windows
114 4. Input event routing 114 4. Input event routing
115 115
116 For more details, see [widget.h]. 116 For more details, see [widget.h].
117 117
118 ### Client and Non-Client Views 118 ### Client and Non-Client Views
119 119
120 The content view of most Widgets is a **Non-Client View**, which is either a 120 The contents view of most Widgets is a **Non-Client View**, which is either a
121 [NonClientView] or one of its descendants. The Non-Client View has two children, 121 [NonClientView] or one of its descendants. The Non-Client View has two children,
122 which are the **Non-Client Frame View** (a [NonClientFrameView]) and the 122 which are the **Non-Client Frame View** (a [NonClientFrameView]) and the
123 **Client View** (a [ClientView]). The non-client frame view is responsible for 123 **Client View** (a [ClientView]). The non-client frame view is responsible for
124 painting window decorations, the Widget's border, the shadow, and so on; the 124 painting window decorations, the Widget's border, the shadow, and so on; the
125 client view is responsible for painting the Widget's contents. The area the 125 client view is responsible for painting the Widget's contents. The area the
126 client view occupies is sometimes referred to as the Widget's "client area". The 126 client view occupies is sometimes referred to as the Widget's "client area". The
127 non-client frame view may be swapped out as the system theme changes without 127 non-client frame view may be swapped out as the system theme changes without
128 affecting the client view. 128 affecting the client view.
129 129
130 ## Dialogs 130 ## Dialogs
131 131
132 A commonly-used type of client view is a **dialog client view**, which has a 132 A commonly-used type of client view is a **dialog client view**, which has a
133 **content view**, optional buttons on the lower-right, and an optional extra 133 **contents view**, optional buttons on the lower-right, and an optional extra
134 view on the lower-left. Dialogs are usually created by subclassing 134 view on the lower-left. Dialogs are usually created by subclassing
135 [DialogDelegate] or [DialogDelegateView] and then calling 135 [DialogDelegate] or [DialogDelegateView] and then calling
136 `DialogDelegate::CreateDialogWidget`. The dialog's content view fills the entire 136 `DialogDelegate::CreateDialogWidget`. The dialog's contents view fills the
137 top part of the widget's client view, and the bottom part is taken over by the 137 entire top part of the widget's client view, and the bottom part is taken over
138 dialog's buttons and extra view. 138 by the dialog's buttons and extra view.
139 139
140 ## Bubbles 140 ## Bubbles
141 141
142 A common type of dialog is a **bubble**, which is a dialog that is anchored to a 142 A common type of dialog is a **bubble**, which is a dialog that is anchored to a
143 parent View and moves as the parent View moves. Bubbles are usually created by 143 parent View and moves as the parent View moves. Bubbles are usually created by
144 subclassing [BubbleDialogDelegateView] and then calling 144 subclassing [BubbleDialogDelegateView] and then calling
145 `BubbleDialogDelegateView::CreateBubble`. Bubbles can have a title, which is 145 `BubbleDialogDelegateView::CreateBubble`. Bubbles can have a title, which is
146 drawn alongside the window controls as part of the Bubble's Widget's 146 drawn alongside the window controls as part of the Bubble's Widget's
147 NonClientFrameView. 147 NonClientFrameView.
148 148
149 [BoxLayout]: https://cs.chromium.org/chromium/src/ui/views/layout/box_layout.h 149 [BoxLayout]: https://cs.chromium.org/chromium/src/ui/views/layout/box_layout.h
150 [BubbleDialogDelegateView]: https://cs.chromium.org/chromium/src/ui/views/bubble /bubble_dialog_delegate.h 150 [BubbleDialogDelegateView]: https://cs.chromium.org/chromium/src/ui/views/bubble /bubble_dialog_delegate.h
151 [ClientView]: https://cs.chromium.org/chromium/src/ui/views/window/client_view.h 151 [ClientView]: https://cs.chromium.org/chromium/src/ui/views/window/client_view.h
152 [DialogDelegate]: https://cs.chromium.org/chromium/src/ui/views/window/dialog_de legate.h 152 [DialogDelegate]: https://cs.chromium.org/chromium/src/ui/views/window/dialog_de legate.h
153 [DialogDelegateView]: https://cs.chromium.org/chromium/src/ui/views/window/dialo g_delegate.h 153 [DialogDelegateView]: https://cs.chromium.org/chromium/src/ui/views/window/dialo g_delegate.h
154 [FillLayout]: https://cs.chromium.org/chromium/src/ui/views/layout/fill_layout.h 154 [FillLayout]: https://cs.chromium.org/chromium/src/ui/views/layout/fill_layout.h
155 [FocusManager]: https://cs.chromium.org/chromium/src/ui/views/focus/focus_manage r.h 155 [FocusManager]: https://cs.chromium.org/chromium/src/ui/views/focus/focus_manage r.h
156 [GridLayout]: https://cs.chromium.org/chromium/src/ui/views/layout/grid_layout.h 156 [GridLayout]: https://cs.chromium.org/chromium/src/ui/views/layout/grid_layout.h
157 157
158 [NonClientView]: https://cs.chromium.org/chromium/src/ui/views/window/non_client _view.h 158 [NonClientView]: https://cs.chromium.org/chromium/src/ui/views/window/non_client _view.h
159 [NonClientFrameView]: https://cs.chromium.org/chromium/src/ui/views/window/non_c lient_view.h 159 [NonClientFrameView]: https://cs.chromium.org/chromium/src/ui/views/window/non_c lient_view.h
160 [background.h]: https://cs.chromium.org/chromium/src/ui/views/background.h 160 [background.h]: https://cs.chromium.org/chromium/src/ui/views/background.h
161 [border.h]: https://cs.chromium.org/chromium/src/ui/views/border.h 161 [border.h]: https://cs.chromium.org/chromium/src/ui/views/border.h
162 [canvas.h]: https://cs.chromium.org/chromium/src/ui/gfx/canvas.h 162 [canvas.h]: https://cs.chromium.org/chromium/src/ui/gfx/canvas.h
163 [view.h]: https://cs.chromium.org/chromium/src/ui/views/view.h 163 [view.h]: https://cs.chromium.org/chromium/src/ui/views/view.h
164 [widget.h]: https://cs.chromium.org/chromium/src/ui/views/widget/widget.h 164 [widget.h]: https://cs.chromium.org/chromium/src/ui/views/widget/widget.h
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698