12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // Copyright 2019 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef COMPONENTS_EXO_WAYLAND_WAYLAND_POSITIONER_H_
- #define COMPONENTS_EXO_WAYLAND_WAYLAND_POSITIONER_H_
- #include <xdg-shell-server-protocol.h>
- #include "ui/gfx/geometry/point.h"
- #include "ui/gfx/geometry/rect.h"
- #include "ui/gfx/geometry/size.h"
- #include "ui/gfx/geometry/vector2d.h"
- namespace exo {
- namespace wayland {
- class WaylandPositioner {
- public:
- // Holds the result of window positioning.
- struct Result {
- gfx::Point origin;
- gfx::Size size;
- };
- // Represents the 1-dimensional projection of the gravity/anchor values.
- enum Direction { kNegative = -1, kNeutral = 0, kPositive = 1 };
- // Controls whether anchor and gravity are set using the unstable bitfields or
- // the stable enums.
- enum Version { UNSTABLE, STABLE };
- WaylandPositioner(Version v) : version_(v) {}
- WaylandPositioner(const WaylandPositioner&) = delete;
- WaylandPositioner& operator=(const WaylandPositioner&) = delete;
- // Calculate and return bounds from current state.
- Result CalculateBounds(const gfx::Rect& work_area) const;
- void SetSize(gfx::Size size) { size_ = std::move(size); }
- void SetAnchorRect(gfx::Rect anchor_rect) {
- anchor_rect_ = std::move(anchor_rect);
- }
- void SetAnchor(uint32_t anchor);
- void SetGravity(uint32_t gravity);
- void SetAdjustment(uint32_t adjustment) { adjustment_ = adjustment; }
- void SetOffset(gfx::Vector2d offset) { offset_ = std::move(offset); }
- private:
- Version version_;
- gfx::Size size_;
- gfx::Rect anchor_rect_;
- Direction anchor_x_ = kNeutral;
- Direction anchor_y_ = kNeutral;
- Direction gravity_x_ = kNeutral;
- Direction gravity_y_ = kNeutral;
- // A bitmask that defines the subset of modifications to the position/size
- // that are allowed, see zxdg_positioner.constraint_adjustment() for more
- // details.
- uint32_t adjustment_ = XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_NONE;
- // Defines an absolute translation (i.e. unaffected by flipping, scaling or
- // resizing) for the placement of the window relative to the |anchor_rect_|.
- // See zxdg_positioner.set_offset() for more details.
- gfx::Vector2d offset_;
- };
- } // namespace wayland
- } // namespace exo
- #endif // COMPONENTS_EXO_WAYLAND_WAYLAND_POSITIONER_H_
|