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
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_BASE_UI_BASE_TYPES_H_
#define UI_BASE_UI_BASE_TYPES_H_
#include <cstdint>
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
namespace ui {
// This enum must be version-skew tolerant. It is persisted to disk by ChromeOS
// full restore, and read from disk by a possibly newer version of chrome. This
// means that it's ok to add new values, but existing values should never be
// changed or removed.
//
// Window "show" state.
// TODO: Add snapped window state to immersive fullscreen state to
// WindowShowState. Those are ChromeOS specific window states but we should make
// it available here as well as Lacros also needs to know those states.
enum WindowShowState {
// A default un-set state.
SHOW_STATE_DEFAULT = 0,
SHOW_STATE_NORMAL = 1,
SHOW_STATE_MINIMIZED = 2,
SHOW_STATE_MAXIMIZED = 3,
SHOW_STATE_INACTIVE = 4, // Views only, not persisted.
SHOW_STATE_FULLSCREEN = 5,
SHOW_STATE_END = 6 // The end of show state enum.
};
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
// Specifies which edges of the window are tiled.
//
// Wayland can notify the application if certain edge of the window is
// "tiled": https://wayland.app/protocols/xdg-shell#xdg_toplevel:enum:state.
// Chromium should not draw frame decorations for the tiled edges.
struct WindowTiledEdges {
bool left{false};
bool right{false};
bool top{false};
bool bottom{false};
bool operator==(const WindowTiledEdges& other) const {
return left == other.left && right == other.right && top == other.top &&
bottom == other.bottom;
}
bool operator!=(const WindowTiledEdges& other) const {
return left != other.left || right != other.right || top != other.top ||
bottom != other.bottom;
}
};
#endif // IS_LINUX || IS_CHROMEOS_LACROS
// Dialog button identifiers used to specify which buttons to show the user.
enum DialogButton {
DIALOG_BUTTON_NONE = 0,
DIALOG_BUTTON_OK = 1,
DIALOG_BUTTON_CANCEL = 2,
DIALOG_BUTTON_LAST = DIALOG_BUTTON_CANCEL,
};
// MdTextButtons have various button styles that can change the button's
// relative prominence/priority. The relative priority (least to greatest) is
// as follows:
// kText -> kDefault -> kTonal -> kProminent
// The default styles are described as below.
// kDefault: White background with blue text and a solid outline.
// kProminent: Blue background with white text.
// kTonal: Cyan background with black text.
// kText: White background with blue text but no outline.
enum class ButtonStyle {
kText,
kDefault,
kTonal,
kProminent,
};
// Specifies the type of modality applied to a window. Different modal
// treatments may be handled differently by the window manager.
enum ModalType {
MODAL_TYPE_NONE = 0, // Window is not modal.
MODAL_TYPE_WINDOW = 1, // Window is modal to its transient parent.
MODAL_TYPE_CHILD = 2, // Window is modal to a child of its transient parent.
MODAL_TYPE_SYSTEM = 3 // Window is modal to all other windows.
};
// The class of window and its overall z-order. Only the Mac provides this
// level of z-order granularity. For other platforms, which only provide a
// distinction between "normal" and "always on top" windows, any of the values
// here that aren't `kNormal` are treated equally as "always on top".
// TODO(crbug.com/1358586): For non-desktop widgets on Linux and Windows,
// this z-order currently does not have any effect.
enum class ZOrderLevel {
// The default level for windows.
kNormal = 0,
// A "floating" window z-ordered above other normal windows.
//
// Note this is the traditional _desktop_ concept of a "floating window".
// Android has a concept of "freeform window mode" in which apps are presented
// in separate "floating" windows that can be moved and resized by the user.
// That's not what this is.
kFloatingWindow,
// UI elements are used to annotate positions on the screen, and thus must
// appear above floating windows.
kFloatingUIElement,
// There have been horrific security decisions that have been made on the web
// platform that are now expected behavior and cannot easily be changed. The
// only way to mitigate problems with these decisions is to inform the user by
// presenting them with a message that they are in a state that they might not
// expect, and this message must be presented in a UI that cannot be
// interfered with or covered up. Thus this level for Security UI that must be
// Z-ordered in front of everything else. Note that this is useful in
// situations where window modality (as in ModalType) cannot or should not be
// used.
kSecuritySurface,
};
// TODO(varunjain): Remove MENU_SOURCE_NONE (crbug.com/250964)
// A Java counterpart will be generated for this enum.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.ui.base
// These are used in histograms, do not remove/renumber entries. Only add at the
// end just before MENU_SOURCE_TYPE_LAST. Also remember to update the
// MenuSourceType enum listing in tools/metrics/histograms/enums.xml.
// Lastly, any new type here needs to be synced with ui_base_types.mojom.
enum MenuSourceType {
MENU_SOURCE_NONE = 0,
MENU_SOURCE_MOUSE = 1,
MENU_SOURCE_KEYBOARD = 2,
MENU_SOURCE_TOUCH = 3,
MENU_SOURCE_TOUCH_EDIT_MENU = 4,
MENU_SOURCE_LONG_PRESS = 5,
MENU_SOURCE_LONG_TAP = 6,
MENU_SOURCE_TOUCH_HANDLE = 7,
MENU_SOURCE_STYLUS = 8,
MENU_SOURCE_ADJUST_SELECTION = 9,
MENU_SOURCE_ADJUST_SELECTION_RESET = 10,
MENU_SOURCE_TYPE_LAST = MENU_SOURCE_ADJUST_SELECTION_RESET
};
// Menu types that are used to position menu windows correctly.
enum class MenuType {
// A context menu opened either via a right click or a long tap.
kRootContextMenu = 0,
// A root non-context menu. Example: The three dot menu.
kRootMenu,
// A child menu opened by clicking on a nested menu entry of either
// |kRootContextMenu| or |kRootParentMenu|.
kChildMenu,
};
// Where an owned anchored window should be anchored to. Used by such backends
// as Wayland, which doesn't provide clients with on screen coordinates, but
// rather forces them to position children windows relative to toplevel windows.
// They use anchor bounds, anchor position, gravity and constraints to
// reposition such windows if the originally intended position caused the
// surface to be constrained.
enum class OwnedWindowAnchorPosition {
kNone,
kTop,
kBottom,
kLeft,
kRight,
kTopLeft,
kBottomLeft,
kTopRight,
kBottomRight,
};
// What direction an owned window should be positioned relatively to its anchor.
enum class OwnedWindowAnchorGravity {
kNone,
kTop,
kBottom,
kLeft,
kRight,
kTopLeft,
kBottomLeft,
kTopRight,
kBottomRight,
};
// How an owned window can be resized/repositioned by a system compositor.
enum class OwnedWindowConstraintAdjustment : uint32_t {
kAdjustmentNone = 0,
kAdjustmentSlideX = 1 << 0,
kAdjustmentSlideY = 1 << 1,
kAdjustmentFlipX = 1 << 2,
kAdjustmentFlipY = 1 << 3,
kAdjustmentResizeX = 1 << 4,
kAdjustmentRezizeY = 1 << 5,
};
} // namespace ui
#endif // UI_BASE_UI_BASE_TYPES_H_
|