hyprland-plugins/hyprexpo/overview.hpp
2025-12-08 15:36:07 +00:00

83 lines
2.2 KiB
C++

#pragma once
#define WLR_USE_UNSTABLE
#include "globals.hpp"
#include <hyprland/src/desktop/DesktopTypes.hpp>
#include <hyprland/src/render/Framebuffer.hpp>
#include <hyprland/src/helpers/AnimatedVariable.hpp>
#include <hyprland/src/managers/HookSystemManager.hpp>
#include <vector>
#include "IOverview.hpp"
// saves on resources, but is a bit broken rn with blur.
// hyprland's fault, but cba to fix.
constexpr bool ENABLE_LOWRES = false;
class CMonitor;
class COverview : public IOverview {
public:
COverview(PHLWORKSPACE startedOn_, bool swipe = false);
virtual ~COverview();
virtual void render();
virtual void damage();
virtual void onDamageReported();
virtual void onPreRender();
virtual void setClosing(bool closing);
virtual void resetSwipe();
virtual void onSwipeUpdate(double delta);
virtual void onSwipeEnd();
// close without a selection
virtual void close();
virtual void selectHoveredWorkspace();
virtual void fullRender();
private:
void redrawID(int id, bool forcelowres = false);
void redrawAll(bool forcelowres = false);
void onWorkspaceChange();
int SIDE_LENGTH = 3;
int GAP_WIDTH = 5;
CHyprColor BG_COLOR = CHyprColor{0.1, 0.1, 0.1, 1.0};
bool damageDirty = false;
struct SWorkspaceImage {
CFramebuffer fb;
int64_t workspaceID = -1;
PHLWORKSPACE pWorkspace;
CBox box;
};
Vector2D lastMousePosLocal = Vector2D{};
int openedID = -1;
int closeOnID = -1;
std::vector<SWorkspaceImage> images;
PHLWORKSPACE startedOn;
PHLANIMVAR<Vector2D> size;
PHLANIMVAR<Vector2D> pos;
bool closing = false;
SP<HOOK_CALLBACK_FN> mouseMoveHook;
SP<HOOK_CALLBACK_FN> mouseButtonHook;
SP<HOOK_CALLBACK_FN> touchMoveHook;
SP<HOOK_CALLBACK_FN> touchDownHook;
bool swipe = false;
bool swipeWasCommenced = false;
friend class COverviewPassElement;
};