File: chrome_layout_provider.h

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (221 lines) | stat: -rw-r--r-- 10,697 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_UI_VIEWS_CHROME_LAYOUT_PROVIDER_H_
#define CHROME_BROWSER_UI_VIEWS_CHROME_LAYOUT_PROVIDER_H_

#include <memory>

#include "chrome/browser/ui/views/chrome_typography_provider.h"
#include "ui/gfx/geometry/insets.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/layout/layout_provider.h"

enum ChromeInsetsMetric {
  // Padding around buttons on the bookmarks bar.
  INSETS_BOOKMARKS_BAR_BUTTON = views::VIEWS_INSETS_END,
  // Margins used by toasts.
  INSETS_TOAST,
  // Padding used in an omnibox pill button.
  INSETS_OMNIBOX_PILL_BUTTON,
  // Padding used in an page info hover button.
  INSETS_PAGE_INFO_HOVER_BUTTON,
  // Margins for the avatars in the Recent Activity dialog.
  INSETS_RECENT_ACTIVITY_IMAGE_MARGIN,
  // Margins for the contents inside in the Task Manager.
  INSETS_TASK_MANAGER,
  // Padding used in the page info footer button.
  INSETS_PAGE_INFO_FOOTER_BUTTON,
};

enum ChromeDistanceMetric {
  // Default minimum width of a button.
  DISTANCE_BUTTON_MINIMUM_WIDTH = views::VIEWS_DISTANCE_END,
  // Size of the Collaboration Messaging fallback icon padding.
  DISTANCE_COLLABORATION_MESSAGING_AVATAR_FALLBACK_ICON_PADDING,
  // Size of the Collaboration Messaging fallback icon border.
  DISTANCE_COLLABORATION_MESSAGING_AVATAR_FALLBACK_ICON_BORDER_SIZE,
  // Vertical spacing at the beginning and end of a content list (a vertical
  // stack of composite views that behaves like a menu) containing one item.
  DISTANCE_CONTENT_LIST_VERTICAL_SINGLE,
  // Same as |DISTANCE_CONTENT_LIST_VERTICAL_SINGLE|, but used at the beginning
  // and end of a multi-item content list.
  DISTANCE_CONTENT_LIST_VERTICAL_MULTI,
  // Width of the extensions menu.
  DISTANCE_EXTENSIONS_MENU_WIDTH,
  // Width and height of a button's icon in the extensions menu.
  DISTANCE_EXTENSIONS_MENU_BUTTON_ICON_SIZE,
  // Width and height of a small button's icon in the extensions menu.
  DISTANCE_EXTENSIONS_MENU_BUTTON_ICON_SMALL_SIZE,
  // Width and height of an extension's icon in the extensions menu. This are
  // larger than menu button's icons because it contains internal padding to
  // provide space for badging.
  DISTANCE_EXTENSIONS_MENU_EXTENSION_ICON_SIZE,
  // Size difference between the two types of icons in the menu. This is used as
  // horizontal and vertical margins to align extensions menu rows.
  DISTANCE_EXTENSIONS_MENU_ICON_SPACING,
  // Vertical and horizontal margin for menu buttons.
  DISTANCE_EXTENSIONS_MENU_BUTTON_MARGIN,
  // Horizontal spacing between a label and an icon in the extension's menu
  // entry.
  DISTANCE_EXTENSIONS_MENU_LABEL_ICON_SPACING,
  // Smaller horizontal spacing between other controls that are logically
  // related.
  DISTANCE_RELATED_CONTROL_HORIZONTAL_SMALL,
  // Smaller vertical spacing between controls that are logically related.
  DISTANCE_RELATED_CONTROL_VERTICAL_SMALL,
  // Horizontal spacing between an item and the related label, in the context of
  // a row of such items. E.g. the bookmarks bar.
  DISTANCE_RELATED_LABEL_HORIZONTAL_LIST,
  // Horizontal indent of a subsection relative to related items above, e.g.
  // checkboxes below explanatory text/headings.
  DISTANCE_SUBSECTION_HORIZONTAL_INDENT,
  // Vertical margin for controls in a toast.
  DISTANCE_TOAST_CONTROL_VERTICAL,
  // Vertical margin for labels in a toast.
  DISTANCE_TOAST_LABEL_VERTICAL,
  // Larger horizontal spacing between unrelated controls.
  DISTANCE_UNRELATED_CONTROL_HORIZONTAL_LARGE,
  // Larger vertical spacing between unrelated controls.
  DISTANCE_UNRELATED_CONTROL_VERTICAL_LARGE,
  // Width of a bubble that appears mid-screen (like a standalone dialog)
  // instead of being anchored.
  DISTANCE_STANDALONE_BUBBLE_PREFERRED_WIDTH,
  // Horizontal spacing between value and description in the row.
  DISTANCE_BETWEEN_PRIMARY_AND_SECONDARY_LABELS_HORIZONTAL,
  // Vertical padding at the top and bottom of the an omnibox match row.
  DISTANCE_OMNIBOX_CELL_VERTICAL_PADDING,
  // Vertical padding at the top and bottom of the an omnibox match row for two
  // line layout.
  DISTANCE_OMNIBOX_TWO_LINE_CELL_VERTICAL_PADDING,
  // Width and Height of a vector icon in the side panel header.
  DISTANCE_SIDE_PANEL_HEADER_VECTOR_ICON_SIZE,
  // Minimum size of the header vector icon buttons to get the proper ripple.
  DISTANCE_SIDE_PANEL_HEADER_BUTTON_MINIMUM_SIZE,
  // Horizontal spacing for separating side panel header border from controls.
  DISTANCE_SIDE_PANEL_HEADER_INTERIOR_MARGIN_HORIZONTAL,
  // Horizontal padding between separator in the page info view.
  DISTANCE_HORIZONTAL_SEPARATOR_PADDING_PAGE_INFO_VIEW,
  // Horizontal padding applied between the icon and label in the infobar.
  DISTANCE_INFOBAR_HORIZONTAL_ICON_LABEL_PADDING,
  // Height of info bars.
  DISTANCE_INFOBAR_HEIGHT,
  // Horizontal padding applied between the icon and label in the permission
  // prompt.
  DISTANCE_PERMISSION_PROMPT_HORIZONTAL_ICON_LABEL_PADDING,
  // Horizontal spacing between icon and label in the rich hover button.
  DISTANCE_RICH_HOVER_BUTTON_ICON_HORIZONTAL,
  // Horizontal spacing for the search bar's magnifying glass icon and x button.
  DISTANCE_TASK_MANAGER_SEARCH_BAR_ICON_AND_BUTTON_HORIZONTAL_SPACING,
  // Width and height of the vector icons shown in the search bar of the task
  // manager.
  DISTANCE_TASK_MANAGER_SEARCH_ICON_SIZE,
  // The minimum width for the search bar found in Task Manager.
  DISTANCE_TASK_MANAGER_SEARCH_BAR_MIN_WIDTH,
  // The minimum height for the search bar found in Task Manager.
  DISTANCE_TASK_MANAGER_SEARCH_BAR_MIN_HEIGHT,
  // Height of Task Manager tabs.
  DISTANCE_TASK_MANAGER_TAB_HEIGHT,
  // Distance between most child elements inside the toast.
  DISTANCE_TOAST_BUBBLE_BETWEEN_CHILD_SPACING,
  // Distance between the toast label and action button.
  DISTANCE_TOAST_BUBBLE_BETWEEN_LABEL_ACTION_BUTTON_SPACING,
  // Distance between the toast label and the menu button.
  DISTANCE_TOAST_BUBBLE_BETWEEN_LABEL_MENU_BUTTON_SPACING,
  // Height of the toast.
  DISTANCE_TOAST_BUBBLE_HEIGHT,
  // Height of toast action buttons.
  DISTANCE_TOAST_BUBBLE_HEIGHT_ACTION_BUTTON,
  // Height of the toast text and close button icon.
  DISTANCE_TOAST_BUBBLE_HEIGHT_CONTENT,
  // Width and height of the vector icons shown in the toast bubble.
  DISTANCE_TOAST_BUBBLE_ICON_SIZE,
  // Width and height of the icon that shows the "further options" menu.
  DISTANCE_TOAST_BUBBLE_MENU_ICON_SIZE,
  // Left and right margins of the leading vector icon shown in the toast
  // bubble.
  DISTANCE_TOAST_BUBBLE_LEADING_ICON_SIDE_MARGINS,
  // Distance between left border of the toast and the icon.
  DISTANCE_TOAST_BUBBLE_MARGIN_LEFT,
  // Distance between the right border of the toast and the action button, if
  // the action button is the rightmost element.
  DISTANCE_TOAST_BUBBLE_MARGIN_RIGHT_ACTION_BUTTON,
  // Distance between the right border of the toast and the close button, if the
  // close button is the rightmost element.
  DISTANCE_TOAST_BUBBLE_MARGIN_RIGHT_CLOSE_BUTTON,
  // Distance between the right border of the toast and the menu button, if the
  // menu button is the rightmost element.
  DISTANCE_TOAST_BUBBLE_MARGIN_RIGHT_MENU_BUTTON,
  // Distance between the right border of the toast and the label, if the label
  // is the rightmost element.
  DISTANCE_TOAST_BUBBLE_MARGIN_RIGHT_LABEL,
  // Minimum distance between the horizontal edges of the toast and the browser
  // window. Relevant if the toast is wide relative to the browser.
  DISTANCE_TOAST_BUBBLE_BROWSER_WINDOW_MARGIN,
  // Size to resize avatars to in the Recent Activity dialog.
  DISTANCE_RECENT_ACTIVITY_AVATAR_SIZE,
  // Size to use for avatar fallback icon in the Recent Activity dialog.
  DISTANCE_RECENT_ACTIVITY_AVATAR_FALLBACK_SIZE,
  // Size to use for the radius of activity containers in the Recent
  // Activity dialog.
  DISTANCE_RECENT_ACTIVITY_CONTAINER_RADIUS,
  // Size to use for the margin between Recent Activity containers.
  DISTANCE_RECENT_ACTIVITY_CONTAINER_VERTICAL_MARGIN,
  // Additional margin for leading and trailing rows within the Recent
  // Activity dialog.
  DISTANCE_RECENT_ACTIVITY_CONTAINER_VERTICAL_PADDING,
  // Width of the empty border around favicon containers in the Recent Activity
  // dialog.
  DISTANCE_RECENT_ACTIVITY_FAVICON_CONTAINER_BORDER_WIDTH,
  // Distance to offset favicon containers from the avatar in the Recent
  // Activity dialog.
  DISTANCE_RECENT_ACTIVITY_FAVICON_CONTAINER_OFFSET_FROM_AVATAR,
  // Width of the padding inside favicon containers in the Recent Activity
  // dialog.
  DISTANCE_RECENT_ACTIVITY_FAVICON_CONTAINER_PADDING,
  // Size to use for favicon containers in the Recent Activity dialog.
  DISTANCE_RECENT_ACTIVITY_FAVICON_CONTAINER_RADIUS,
  // Vertical padding for rows within the Recent Activity dialog.
  DISTANCE_RECENT_ACTIVITY_ROW_VERTICAL_PADDING,
  // Distance between the avatar icon and the email in the account info row.
  DISTANCE_ACCOUNT_INFO_ROW_AVATAR_EMAIL,
  // Vertical spacing between a textfield and an account card, usually
  // consisting of an avatar icon, name and email address.
  DISTANCE_TEXTFIELD_ACCOUNT_CARD_VERTICAL,
  // Width and height of the vector icon shown in infoboxes in the FFR dialog.
  DISTANCE_FEATURE_FIRST_RUN_INFO_BOX_ICON_SIZE,
  // Vertical and horizontal padding of the infoboxes in the FFR dialog.
  DISTANCE_FEATURE_FIRST_RUN_INFO_BOX_PADDING,
  // Rounded corner radius for infoboxes in the FFR dialog.
  DISTANCE_FEATURE_FIRST_RUN_INFO_BOX_ROUNDED_BORDER_RADIUS,
  // Vertical spacing between infoboxes in the FFR dialog.
  DISTANCE_FEATURE_FIRST_RUN_INFO_BOX_VERTICAL,
};

class ChromeLayoutProvider : public views::LayoutProvider {
 public:
  ChromeLayoutProvider();

  ChromeLayoutProvider(const ChromeLayoutProvider&) = delete;
  ChromeLayoutProvider& operator=(const ChromeLayoutProvider&) = delete;

  ~ChromeLayoutProvider() override;

  static ChromeLayoutProvider* Get();
  static std::unique_ptr<views::LayoutProvider> CreateLayoutProvider();

  // views::LayoutProvider:
  gfx::Insets GetInsetsMetric(int metric) const override;
  int GetDistanceMetric(int metric) const override;
  int GetSnappedDialogWidth(int min_width) const override;
  const views::TypographyProvider& GetTypographyProvider() const override;

  // Returns whether to show the icon next to the title text on a dialog.
  virtual bool ShouldShowWindowIcon() const;

 private:
  const ChromeTypographyProvider typography_provider_;
};

#endif  // CHROME_BROWSER_UI_VIEWS_CHROME_LAYOUT_PROVIDER_H_