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_
|