#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> // 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: COverview(PHLWORKSPACE startedOn_, bool swipe = false); ~COverview(); void render(); void damage(); void onDamageReported(); void onPreRender(); void onSwipeUpdate(double delta); void onSwipeEnd(); // close without a selection void close(); bool blockOverviewRendering = false; bool blockDamageReporting = false; CMonitor* pMonitor = nullptr; private: void redrawID(int id, bool forcelowres = false); void redrawAll(bool forcelowres = false); void onWorkspaceChange(); int SIDE_LENGTH = 3; int GAP_WIDTH = 5; CColor BG_COLOR = CColor{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; CAnimatedVariable<Vector2D> size; CAnimatedVariable<Vector2D> pos; bool closing = false; SP<HOOK_CALLBACK_FN> mouseMoveHook; SP<HOOK_CALLBACK_FN> mouseButtonHook; SP<HOOK_CALLBACK_FN> touchMoveHook; SP<HOOK_CALLBACK_FN> touchUpHook; bool swipe = false; bool swipeWasCommenced = false; }; inline std::unique_ptr<COverview> g_pOverview;