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