summaryrefslogtreecommitdiff
path: root/src/helpers/Monitor.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-05-10 02:27:54 +0100
committerVaxry <vaxry@vaxry.net>2024-05-10 02:38:54 +0100
commita7e23d2f1e27c241c2a72262d14d5dde9ea2e860 (patch)
tree72e9a6b77208f14788cd1387eb147a9475bb3229 /src/helpers/Monitor.cpp
parent1753059b07be52cf78fa2676c4c71d2edb560199 (diff)
presentation-time: move to new impl
Diffstat (limited to 'src/helpers/Monitor.cpp')
-rw-r--r--src/helpers/Monitor.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp
index 2814bc84..d13acf0c 100644
--- a/src/helpers/Monitor.cpp
+++ b/src/helpers/Monitor.cpp
@@ -5,6 +5,7 @@
#include "../protocols/GammaControl.hpp"
#include "../devices/ITouch.hpp"
#include "../protocols/LayerShell.hpp"
+#include "../protocols/PresentationTime.hpp"
int ratHandler(void* data) {
g_pHyprRenderer->renderMonitor((CMonitor*)data);
@@ -30,6 +31,13 @@ CMonitor::~CMonitor() {
events.destroy.emit();
}
+static void onPresented(void* owner, void* data) {
+ const auto PMONITOR = (CMonitor*)owner;
+ auto E = (wlr_output_event_present*)data;
+
+ PROTO::presentation->onPresented(PMONITOR, E->when, E->refresh, E->seq, E->flags);
+}
+
void CMonitor::onConnect(bool noRule) {
hyprListener_monitorDestroy.removeCallback();
hyprListener_monitorFrame.removeCallback();
@@ -38,13 +46,15 @@ void CMonitor::onConnect(bool noRule) {
hyprListener_monitorNeedsFrame.removeCallback();
hyprListener_monitorCommit.removeCallback();
hyprListener_monitorBind.removeCallback();
- hyprListener_monitorFrame.initCallback(&output->events.frame, &Events::listener_monitorFrame, this);
- hyprListener_monitorDestroy.initCallback(&output->events.destroy, &Events::listener_monitorDestroy, this);
- hyprListener_monitorStateRequest.initCallback(&output->events.request_state, &Events::listener_monitorStateRequest, this);
- hyprListener_monitorDamage.initCallback(&output->events.damage, &Events::listener_monitorDamage, this);
- hyprListener_monitorNeedsFrame.initCallback(&output->events.needs_frame, &Events::listener_monitorNeedsFrame, this);
- hyprListener_monitorCommit.initCallback(&output->events.commit, &Events::listener_monitorCommit, this);
- hyprListener_monitorBind.initCallback(&output->events.bind, &Events::listener_monitorBind, this);
+ hyprListener_monitorPresented.removeCallback();
+ hyprListener_monitorFrame.initCallback(&output->events.frame, &Events::listener_monitorFrame, this, "CMonitor");
+ hyprListener_monitorDestroy.initCallback(&output->events.destroy, &Events::listener_monitorDestroy, this, "CMonitor");
+ hyprListener_monitorStateRequest.initCallback(&output->events.request_state, &Events::listener_monitorStateRequest, this, "CMonitor");
+ hyprListener_monitorDamage.initCallback(&output->events.damage, &Events::listener_monitorDamage, this, "CMonitor");
+ hyprListener_monitorNeedsFrame.initCallback(&output->events.needs_frame, &Events::listener_monitorNeedsFrame, this, "CMonitor");
+ hyprListener_monitorCommit.initCallback(&output->events.commit, &Events::listener_monitorCommit, this, "CMonitor");
+ hyprListener_monitorBind.initCallback(&output->events.bind, &Events::listener_monitorBind, this, "CMonitor");
+ hyprListener_monitorPresented.initCallback(&output->events.present, ::onPresented, this, "CMonitor");
tearingState.canTear = wlr_backend_is_drm(output->backend); // tearing only works on drm
@@ -247,6 +257,7 @@ void CMonitor::onDisconnect(bool destroy) {
}
hyprListener_monitorFrame.removeCallback();
+ hyprListener_monitorPresented.removeCallback();
hyprListener_monitorDamage.removeCallback();
hyprListener_monitorNeedsFrame.removeCallback();
hyprListener_monitorCommit.removeCallback();