mirror of
https://git.allpurposem.at/mat/WiggleWobble.git
synced 2025-12-23 13:01:28 +01:00
feat: it does something to the windows! but it's wrong :)
This commit is contained in:
parent
54dd465e60
commit
29b5bd78e4
111
src/main.cpp
111
src/main.cpp
@ -1,16 +1,15 @@
|
|||||||
#include "src/helpers/math/Math.hpp"
|
|
||||||
#include <hyprgraphics/color/Color.hpp>
|
|
||||||
#define WLR_USE_UNSTABLE
|
|
||||||
|
|
||||||
#include "globals.hpp"
|
#include "globals.hpp"
|
||||||
|
#include "src/helpers/math/Math.hpp"
|
||||||
|
|
||||||
|
#include <hyprgraphics/color/Color.hpp>
|
||||||
// version.hpp will be generated by meson
|
// version.hpp will be generated by meson
|
||||||
|
#include "src/render/Shader.hpp"
|
||||||
#include "version.hpp"
|
#include "version.hpp"
|
||||||
|
|
||||||
#include <hyprland/src/Compositor.hpp>
|
#include <hyprland/src/Compositor.hpp>
|
||||||
|
#include <hyprland/src/desktop/Window.hpp>
|
||||||
#include <hyprland/src/render/Renderer.hpp>
|
#include <hyprland/src/render/Renderer.hpp>
|
||||||
#include <hyprland/src/render/Transformer.hpp>
|
#include <hyprland/src/render/Transformer.hpp>
|
||||||
#include <hyprland/src/desktop/Window.hpp>
|
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
// Do NOT change this function.
|
// Do NOT change this function.
|
||||||
@ -18,25 +17,30 @@ APICALL EXPORT std::string PLUGIN_API_VERSION() {
|
|||||||
return HYPRLAND_API_VERSION;
|
return HYPRLAND_API_VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
class CWindowTransformer : public IWindowTransformer {
|
class CWindowTransformer: public IWindowTransformer {
|
||||||
public:
|
public:
|
||||||
virtual CFramebuffer* transform(CFramebuffer* in);
|
virtual CFramebuffer* transform(CFramebuffer* in);
|
||||||
virtual void preWindowRender(CSurfacePassElement::SRenderData* pRenderData);
|
virtual void preWindowRender(CSurfacePassElement::SRenderData* pRenderData);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
float rot = 0;
|
float rot = 0;
|
||||||
|
Vector2D m_prevPos;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::vector<CWindowTransformer*> ptrs;
|
std::vector<CWindowTransformer*> ptrs;
|
||||||
Vector2D oldPos, newPos;
|
|
||||||
|
|
||||||
void renderTex(CBox monbox, CTexture& tex, float rot) {
|
void renderTex(CBox monbox, CTexture& tex, float rot) {
|
||||||
if (g_pHyprOpenGL->m_renderData.damage.empty()) return;
|
if (g_pHyprOpenGL->m_renderData.damage.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
CBox newBox = monbox.scale(g_pHyprOpenGL->m_renderData.renderModif.combinedScale());
|
CBox newBox = monbox.scale(g_pHyprOpenGL->m_renderData.renderModif.combinedScale());
|
||||||
g_pHyprOpenGL->m_renderData.renderModif.applyToBox(newBox);
|
g_pHyprOpenGL->m_renderData.renderModif.applyToBox(newBox);
|
||||||
|
|
||||||
Mat3x3 matrix = g_pHyprOpenGL->m_renderData.monitorProjection.projectBox(monbox, wlTransformToHyprutils(invertTransform(WL_OUTPUT_TRANSFORM_NORMAL)), monbox.rot);
|
Mat3x3 matrix = g_pHyprOpenGL->m_renderData.monitorProjection.projectBox(
|
||||||
|
monbox,
|
||||||
|
wlTransformToHyprutils(invertTransform(WL_OUTPUT_TRANSFORM_NORMAL)),
|
||||||
|
rot
|
||||||
|
);
|
||||||
Mat3x3 glMatrix = g_pHyprOpenGL->m_renderData.projection.copy().multiply(matrix);
|
Mat3x3 glMatrix = g_pHyprOpenGL->m_renderData.projection.copy().multiply(matrix);
|
||||||
|
|
||||||
SShader* shader = &g_pHyprOpenGL->m_shaders->m_shPASSTHRURGBA;
|
SShader* shader = &g_pHyprOpenGL->m_shaders->m_shPASSTHRURGBA;
|
||||||
@ -47,30 +51,49 @@ void renderTex(CBox monbox, CTexture& tex, float rot) {
|
|||||||
glUseProgram(shader->program);
|
glUseProgram(shader->program);
|
||||||
|
|
||||||
#ifndef GLES2
|
#ifndef GLES2
|
||||||
glUniformMatrix3fv(shader->proj, 1, GL_TRUE, glMatrix.getMatrix().data());
|
glUniformMatrix3fv(
|
||||||
|
shader->uniformLocations[SHADER_PROJ],
|
||||||
|
1,
|
||||||
|
GL_TRUE,
|
||||||
|
glMatrix.getMatrix().data()
|
||||||
|
);
|
||||||
#else
|
#else
|
||||||
glMatrix.transpose();
|
glMatrix.transpose();
|
||||||
glUniformMatrix3fv(shader->proj, 1, GL_FALSE, glMatrix.getMatrix().data());
|
glUniformMatrix3fv(shader->proj, 1, GL_FALSE, glMatrix.getMatrix().data());
|
||||||
#endif
|
#endif
|
||||||
glUniform1i(shader->tex, 0);
|
glUniform1i(shader->uniformLocations[SHADER_TEX], 0);
|
||||||
|
|
||||||
const auto TOPLEFT = Vector2D(newBox.x, newBox.y);
|
const auto TOPLEFT = Vector2D(newBox.x, newBox.y);
|
||||||
const auto FULLSIZE = Vector2D(newBox.width, newBox.height);
|
const auto FULLSIZE = Vector2D(newBox.width, newBox.height);
|
||||||
|
|
||||||
glUniform2f(shader->topLeft, TOPLEFT.x, TOPLEFT.y);
|
glUniform2f(shader->uniformLocations[SHADER_TOP_LEFT], TOPLEFT.x, TOPLEFT.y);
|
||||||
glUniform2f(shader->fullSize, FULLSIZE.x, FULLSIZE.y);
|
glUniform2f(shader->uniformLocations[SHADER_FULL_SIZE], FULLSIZE.x, FULLSIZE.y);
|
||||||
glUniform1f(shader->radius, 0);
|
glUniform1f(shader->uniformLocations[SHADER_RADIUS], 0);
|
||||||
|
|
||||||
glUniform1i(shader->discardOpaque, 0);
|
glUniform1i(shader->uniformLocations[SHADER_DISCARD_OPAQUE], 0);
|
||||||
glUniform1i(shader->discardAlpha, 0);
|
glUniform1i(shader->uniformLocations[SHADER_DISCARD_ALPHA], 0);
|
||||||
|
|
||||||
glUniform1f(shader->alpha, 1);
|
glUniform1f(shader->uniformLocations[SHADER_ALPHA], 1);
|
||||||
|
|
||||||
glVertexAttribPointer(shader->posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts);
|
glVertexAttribPointer(
|
||||||
glVertexAttribPointer(shader->texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts);
|
shader->uniformLocations[SHADER_POS_ATTRIB],
|
||||||
|
2,
|
||||||
|
GL_FLOAT,
|
||||||
|
GL_FALSE,
|
||||||
|
0,
|
||||||
|
fullVerts
|
||||||
|
);
|
||||||
|
glVertexAttribPointer(
|
||||||
|
shader->uniformLocations[SHADER_TEX_ATTRIB],
|
||||||
|
2,
|
||||||
|
GL_FLOAT,
|
||||||
|
GL_FALSE,
|
||||||
|
0,
|
||||||
|
fullVerts
|
||||||
|
);
|
||||||
|
|
||||||
glEnableVertexAttribArray(shader->posAttrib);
|
glEnableVertexAttribArray(shader->uniformLocations[SHADER_POS_ATTRIB]);
|
||||||
glEnableVertexAttribArray(shader->texAttrib);
|
glEnableVertexAttribArray(shader->uniformLocations[SHADER_TEX_ATTRIB]);
|
||||||
|
|
||||||
for (auto& RECT : g_pHyprOpenGL->m_renderData.damage.getRects()) {
|
for (auto& RECT : g_pHyprOpenGL->m_renderData.damage.getRects()) {
|
||||||
g_pHyprOpenGL->scissor(&RECT);
|
g_pHyprOpenGL->scissor(&RECT);
|
||||||
@ -79,19 +102,26 @@ void renderTex(CBox monbox, CTexture& tex, float rot) {
|
|||||||
|
|
||||||
g_pHyprOpenGL->scissor(nullptr);
|
g_pHyprOpenGL->scissor(nullptr);
|
||||||
|
|
||||||
glDisableVertexAttribArray(shader->posAttrib);
|
glDisableVertexAttribArray(shader->uniformLocations[SHADER_POS_ATTRIB]);
|
||||||
glDisableVertexAttribArray(shader->texAttrib);
|
glDisableVertexAttribArray(shader->uniformLocations[SHADER_TEX_ATTRIB]);
|
||||||
|
|
||||||
glBindTexture(tex.m_target, 0);
|
glBindTexture(tex.m_target, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWindowTransformer::preWindowRender(CSurfacePassElement::SRenderData* pRenderData) {
|
void CWindowTransformer::preWindowRender(CSurfacePassElement::SRenderData* pRenderData) {
|
||||||
oldPos = pRenderData->pos;
|
auto&& newPos = pRenderData->pos;
|
||||||
|
|
||||||
pRenderData->pos.x = pRenderData->pMonitor->m_size.x / 2.f - pRenderData->w / 2.f;
|
auto delta = newPos - m_prevPos;
|
||||||
pRenderData->pos.y = pRenderData->pMonitor->m_size.y / 2.f - pRenderData->h / 2.f;
|
|
||||||
|
|
||||||
newPos = {(double)pRenderData->pos.x, (double)pRenderData->pos.y};
|
rot = delta.x * 9999;
|
||||||
|
rot = 30;
|
||||||
|
std::println("{}", rot);
|
||||||
|
|
||||||
|
pRenderData->pos.x += 50;
|
||||||
|
pRenderData->rounding = 5;
|
||||||
|
pRenderData->alpha = 0.9;
|
||||||
|
|
||||||
|
m_prevPos = newPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
CFramebuffer* CWindowTransformer::transform(CFramebuffer* in) {
|
CFramebuffer* CWindowTransformer::transform(CFramebuffer* in) {
|
||||||
@ -103,10 +133,14 @@ CFramebuffer* CWindowTransformer::transform(CFramebuffer* in) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
off.bind();
|
off.bind();
|
||||||
g_pHyprOpenGL->clear(CHyprColor{0,0,0,0});
|
g_pHyprOpenGL->clear(CHyprColor {0, 0, 0, 0});
|
||||||
|
|
||||||
CBox monbox = {oldPos.x - newPos.x, oldPos.y - newPos.y, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x,
|
CBox monbox = {
|
||||||
g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y};
|
m_prevPos.x,
|
||||||
|
m_prevPos.y,
|
||||||
|
g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x,
|
||||||
|
g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y
|
||||||
|
};
|
||||||
|
|
||||||
renderTex(monbox, *in->getTexture(), rot);
|
renderTex(monbox, *in->getTexture(), rot);
|
||||||
|
|
||||||
@ -118,11 +152,13 @@ CFramebuffer* CWindowTransformer::transform(CFramebuffer* in) {
|
|||||||
void onNewWindow(std::any data) {
|
void onNewWindow(std::any data) {
|
||||||
// data is guaranteed
|
// data is guaranteed
|
||||||
auto PWINDOW = std::any_cast<PHLWINDOW>(data);
|
auto PWINDOW = std::any_cast<PHLWINDOW>(data);
|
||||||
ptrs.push_back(static_cast<CWindowTransformer*>(PWINDOW->m_transformers.emplace_back(new CWindowTransformer{}).get()));
|
ptrs.push_back(static_cast<CWindowTransformer*>(
|
||||||
|
PWINDOW->m_transformers.emplace_back(new CWindowTransformer {}).get()
|
||||||
HyprlandAPI::addNotification(PHANDLE, "onnewwindow", CHyprColor{0.f, 1.f, 1.f, 1.f}, 5000);
|
));
|
||||||
|
|
||||||
|
HyprlandAPI::addNotification(PHANDLE, "onnewwindow", CHyprColor {0.f, 1.f, 1.f, 1.f}, 5000);
|
||||||
std::println("onnewwindow");
|
std::println("onnewwindow");
|
||||||
Debug::log(ERR,"Hit the function.");
|
Debug::log(ERR, "Hit the function.");
|
||||||
}
|
}
|
||||||
|
|
||||||
static SP<HOOK_CALLBACK_FN> g_p = nullptr;
|
static SP<HOOK_CALLBACK_FN> g_p = nullptr;
|
||||||
@ -165,4 +201,3 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
|||||||
APICALL EXPORT void PLUGIN_EXIT() {
|
APICALL EXPORT void PLUGIN_EXIT() {
|
||||||
g_p = nullptr;
|
g_p = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user