blob: 8a078d1253e6ceca386dfc1510d28313b5fe7b9f [file] [edit]
// 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"
namespace ui {
// 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};
friend bool operator==(const WindowTiledEdges&,
const WindowTiledEdges&) = default;
};
// 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,
};
// 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/40237029): 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,
};
// 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,
};
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.ui.base
// GENERATED_JAVA_CLASS_NAME_OVERRIDE: WindowResizePrecheckResult
// GENERATED_JAVA_PREFIX_TO_STRIP: kAndroid
enum class WindowResizePrecheckResult {
// The window can be successfully resized.
kOk = 0,
#if !BUILDFLAG(IS_ANDROID)
// Window has size controls preventing resize. See
// ui/views/widget/widget_delegate.h for more detail.
kHasWindowSizeControls = 1,
// Resizing for Web API is disallowed for this window. See
// ui/views/widget/widget_delegate.h for more detail.
kNotResizableFromWebApi = 2,
// Window has a hit-test mask. See ui/views/widget/widget_delegate.h for more
// detail.
kWindowHasHitTestMask = 3,
#else
// The app must hold the browser role to change window bounds.
kAndroidBrowserRoleNotHeld = 4,
// The Android API to change window bounds is available on BAKLAVA+. Also
// returned if calling R+ methods like maximize/restore on earlier versions.
kAndroidSdkTooLow = 5,
// Only free-form windows can change bounds (the app must be in desktop
// windowing mode).
kAndroidNotAFreeformWindow = 6,
// The Android API to change window bounds is accessed via AppTask, which can
// be null when ChromeAndroidTask is for a Custom Tab (CCT) window.
kAndroidNullAppTask = 7,
// The Android API to change window bounds is accessed via the top
// Activity of an Android Task, but it's possible for a Task to
// contain no Activity.
kAndroidNoActivity = 8,
// Chrome wraps the Android window resizing API in AconfigFlaggedApiDelegate,
// so it must be non-null.
kAndroidNullAconfigFlaggedApiDelegate = 9,
#endif
};
// Distinguishes browser from non-browser windows for frame decoration styling.
enum class FrameType {
kBrowser,
kDefault,
};
} // namespace ui
#endif // UI_BASE_UI_BASE_TYPES_H_