mirror of
https://github.com/hyprwm/hyprlock.git
synced 2026-05-24 21:58:10 +02:00
* widget: add click handling and point containment methods to IWidget interface * core: add onClick method to handle mouse click events - renderer: move getOrCreateWidgetsFor method declaration to public section * core: update mouse event handling to track mouse location and button clicks * widget: add onclick command handling and point containment to CLabel - config: add onclick special config value to label * assets: add label configuration for keyboard layout switching * config: add onclick configuration for label widgets - add CLICKABLE macro for onclick configuration - replace direct onclick assignment with CLICKABLE macro * core: fix cursor shape initialization and pointer handling - ensure pointer is available before setting cursor shape - initialize cursor shape device if not already done * core: add hover handling and cursor shape updates - implement onHover method to manage widget hover states - update cursor shape based on hover status - ensure all outputs are redrawn after state changes * widgets: add hover state management and bounding box calculations - add setHover and isHovered methods to manage hover state - implement containsPoint method for hit testing - override getBoundingBox in CLabel for accurate positioning - add onHover method in CLabel to change cursor shape * core: add hover handling in pointer motion - invoke onHover method with current mouse location * widgets: add hover handling and bounding box for password input field - add getBoundingBox method to calculate the widget's bounding box - implement onHover method to update cursor shape on hover * widgets: update hover behavior for label widget - modify cursor shape setting to only apply when onclickCommand is not empty * core: optimize hover handling and rendering for lock surfaces - Improve hover state tracking for widgets - reduce unnecessary redraw calls by tracking hover changes - remove redundant renderAllOutputs() call * widgets: add onclick and hover to shape and image * core: trigger hover and onclick only for the currently focused surface * core: handle fractionalScale in onclick and hover * core: don't trigger onclick or hover when hide_cursor is set * misc: remove braces * core: run onclick commands asnychronously --------- Co-authored-by: Memoraike <memoraike@gmail.com>
56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include "../defines.hpp"
|
|
#include "wayland.hpp"
|
|
#include "ext-session-lock-v1.hpp"
|
|
#include "viewporter.hpp"
|
|
#include "fractional-scale-v1.hpp"
|
|
#include "../helpers/Math.hpp"
|
|
#include <wayland-egl.h>
|
|
#include <EGL/egl.h>
|
|
|
|
class COutput;
|
|
class CRenderer;
|
|
|
|
class CSessionLockSurface {
|
|
public:
|
|
CSessionLockSurface(const SP<COutput>& pOutput);
|
|
~CSessionLockSurface();
|
|
|
|
void configure(const Vector2D& size, uint32_t serial);
|
|
|
|
bool readyForFrame = false;
|
|
|
|
float fractionalScale = 1.0;
|
|
|
|
void render();
|
|
void onCallback();
|
|
void onScaleUpdate();
|
|
SP<CCWlSurface> getWlSurface();
|
|
|
|
private:
|
|
WP<COutput> m_outputRef;
|
|
OUTPUTID m_outputID = OUTPUT_INVALID;
|
|
|
|
SP<CCWlSurface> surface = nullptr;
|
|
SP<CCExtSessionLockSurfaceV1> lockSurface = nullptr;
|
|
uint32_t serial = 0;
|
|
wl_egl_window* eglWindow = nullptr;
|
|
Vector2D size;
|
|
Vector2D logicalSize;
|
|
float appliedScale;
|
|
EGLSurface eglSurface = nullptr;
|
|
SP<CCWpFractionalScaleV1> fractional = nullptr;
|
|
SP<CCWpViewport> viewport = nullptr;
|
|
|
|
bool needsFrame = false;
|
|
|
|
uint32_t m_lastFrameTime = 0;
|
|
uint32_t m_frames = 0;
|
|
|
|
// wayland callbacks
|
|
SP<CCWlCallback> frameCallback = nullptr;
|
|
|
|
friend class CRenderer;
|
|
friend class COutput;
|
|
};
|