11 #include "Connection.h" 14 #include "ShellSurface.h" 16 #include "WindowDecorationHandler.h" 17 #include "threads/CriticalSection.h" 18 #include "utils/Geometry.h" 20 #include "platform/posix/utils/SharedMemory.h" 26 #include <wayland-client-protocol.hpp> 27 #include <wayland-cursor.hpp> 93 return m_mainSurfaceSize;
110 bool IsDecorationActive()
const;
112 void AddSeat(
CSeat* seat);
113 void RemoveSeat(
CSeat* seat);
118 std::size_t dataSize{};
120 wayland::buffer_t wlBuffer;
124 Buffer(
void* data, std::size_t dataSize,
CSizeInt size, wayland::buffer_t&& buffer)
125 : data{data}, dataSize{dataSize}, size{size}, wlBuffer{std::move(buffer)}
128 std::uint32_t* RgbaBuffer()
130 return static_cast<std::uint32_t*
> (data);
136 wayland::surface_t wlSurface;
147 void OnTouchDown(
CSeat* seat,
148 std::uint32_t serial,
150 const wayland::surface_t& surface,
155 void OnPointerEnter(
CSeat* seat,
156 std::uint32_t serial,
157 const wayland::surface_t& surface,
159 double surfaceY)
override;
160 void OnPointerLeave(
CSeat* seat,
161 std::uint32_t serial,
162 const wayland::surface_t& surface)
override;
163 void OnPointerMotion(
CSeat* seat, std::uint32_t time,
double surfaceX,
double surfaceY)
override;
164 void OnPointerButton(
CSeat* seat, std::uint32_t serial, std::uint32_t time, std::uint32_t button, wayland::pointer_button_state state)
override;
166 void Reset(
bool reallocate);
172 void ResetSurfaces();
174 void ReattachSubsurfaces();
175 void PositionButtons();
176 void AllocateBuffers();
178 void CommitAllBuffers();
180 bool StateHasWindowDecorations(IShellSurface::StateBitset state)
const;
188 IShellSurface::StateBitset m_windowState;
191 wayland::shm_t m_shm;
192 wayland::shm_pool_t m_shmPool;
193 wayland::compositor_t m_compositor;
194 wayland::subcompositor_t m_subcompositor;
195 wayland::surface_t m_mainSurface;
197 std::unique_ptr<KODI::UTILS::POSIX::CSharedMemory> m_memory;
198 std::size_t m_memoryAllocatedSize{};
203 wayland::subsurface_t subsurface;
208 BorderSurface MakeBorderSurface();
218 CCriticalSection m_mutex;
220 std::array<BorderSurface, 4> m_borderSurfaces;
222 std::set<wayland::buffer_t, WaylandCPtrCompare> m_pendingBuffers;
223 CCriticalSection m_pendingBuffersMutex;
228 SurfaceIndex currentSurface{SURFACE_COUNT};
231 std::uint32_t pointerEnterSerial{};
232 std::string cursorName;
233 wayland::surface_t cursor;
235 explicit SeatState(
CSeat* seat)
239 std::map<std::uint32_t, SeatState> m_seats;
246 std::function<void()> onClick;
248 std::vector<Button> m_buttons;
250 wayland::cursor_theme_t m_cursorTheme;
251 std::uint32_t m_buttonColor;
253 void LoadCursorTheme();
255 void UpdateSeatCursor(SeatState& seatState);
256 void UpdateButtonHoverState();
257 void HandleSeatClick(SeatState
const& seatState, SurfaceIndex surface, std::uint32_t serial, std::uint32_t button,
CPoint position);
Paint decorations around windows with subcompositing.
Definition: WindowDecorator.h:63
void SetState(CSizeInt size, int scale, IShellSurface::StateBitset state)
Set decoration state and size by providing full surface size including decorations.
Definition: WindowDecorator.cpp:718
Handle Wayland globals.
Definition: Registry.h:35
CRectInt GetWindowGeometry() const
Get full geometry of the window, including decorations if active.
Definition: WindowDecorator.cpp:870
Connection to Wayland compositor.
Definition: Connection.h:25
Definition: AudioDecoder.h:18
CSizeInt GetMainSurfaceSize() const
Get calculated size of main surface.
Definition: WindowDecorator.h:91
Definition: WindowDecorator.h:134
CSizeInt CalculateMainSurfaceSize(CSizeInt size, IShellSurface::StateBitset state) const
Calculate size of main surface given the size of the full area including decorations and a state...
Definition: WindowDecorator.cpp:690
CWindowDecorator(IWindowDecorationHandler &handler, CConnection &connection, wayland::surface_t const &mainSurface)
Construct window decorator.
Definition: WindowDecorator.cpp:416
Handle all events and requests related to one seat (including input and selection) ...
Definition: Seat.h:114
CSizeInt CalculateFullSurfaceSize(CSizeInt mainSurfaceSize, IShellSurface::StateBitset state) const
Calculate size of full surface including decorations given the size of the main surface and a state...
Definition: WindowDecorator.cpp:704
Handler for reacting to events originating in window decorations, such as moving the window by clicki...
Definition: WindowDecorationHandler.h:26
Definition: WindowDecorator.h:115