mirror of
https://github.com/hyprwm/hyprpicker.git
synced 2025-05-13 05:40:40 +01:00
parent
09101f77a4
commit
6692091d56
3 changed files with 18 additions and 9 deletions
|
@ -66,8 +66,10 @@ CLayerSurface::~CLayerSurface() {
|
||||||
static void onCallbackDone(CLayerSurface* surf, uint32_t when) {
|
static void onCallbackDone(CLayerSurface* surf, uint32_t when) {
|
||||||
surf->frameCallback.reset();
|
surf->frameCallback.reset();
|
||||||
|
|
||||||
if (surf->dirty || !surf->rendered)
|
if (surf->dirty || !surf->rendered || surf->forceRerender)
|
||||||
g_pHyprpicker->renderSurface(g_pHyprpicker->m_pLastSurface);
|
g_pHyprpicker->renderSurface(surf);
|
||||||
|
|
||||||
|
surf->forceRerender = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CLayerSurface::sendFrame() {
|
void CLayerSurface::sendFrame() {
|
||||||
|
|
|
@ -38,4 +38,5 @@ class CLayerSurface {
|
||||||
bool rendered = false;
|
bool rendered = false;
|
||||||
|
|
||||||
SP<CCWlCallback> frameCallback = nullptr;
|
SP<CCWlCallback> frameCallback = nullptr;
|
||||||
|
bool forceRerender = false;
|
||||||
};
|
};
|
|
@ -169,8 +169,10 @@ void CHyprpicker::recheckACK() {
|
||||||
|
|
||||||
void CHyprpicker::markDirty() {
|
void CHyprpicker::markDirty() {
|
||||||
for (auto& ls : m_vLayerSurfaces) {
|
for (auto& ls : m_vLayerSurfaces) {
|
||||||
if (ls->frameCallback)
|
if (ls->frameCallback) {
|
||||||
|
ls->forceRerender = true;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
ls->markDirty();
|
ls->markDirty();
|
||||||
}
|
}
|
||||||
|
@ -341,7 +343,7 @@ void CHyprpicker::renderSurface(CLayerSurface* pSurface, bool forceInactive) {
|
||||||
const auto PBUFFER = getBufferForLS(pSurface);
|
const auto PBUFFER = getBufferForLS(pSurface);
|
||||||
|
|
||||||
if (!PBUFFER || !pSurface->screenBuffer) {
|
if (!PBUFFER || !pSurface->screenBuffer) {
|
||||||
// Debug::log(ERR, PBUFFER ? "renderSurface: pSurface->screenBuffer null" : "renderSurface: PBUFFER null");
|
Debug::log(ERR, PBUFFER ? "renderSurface: pSurface->screenBuffer null" : "renderSurface: PBUFFER null");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -583,8 +585,6 @@ void CHyprpicker::initMouse() {
|
||||||
|
|
||||||
m_vLastCoords = {x, y};
|
m_vLastCoords = {x, y};
|
||||||
|
|
||||||
markDirty();
|
|
||||||
|
|
||||||
for (auto& ls : m_vLayerSurfaces) {
|
for (auto& ls : m_vLayerSurfaces) {
|
||||||
if (ls->pSurface->resource() == surface) {
|
if (ls->pSurface->resource() == surface) {
|
||||||
m_pLastSurface = ls.get();
|
m_pLastSurface = ls.get();
|
||||||
|
@ -593,13 +593,19 @@ void CHyprpicker::initMouse() {
|
||||||
}
|
}
|
||||||
|
|
||||||
m_pCursorShapeDevice->sendSetShape(serial, WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_CROSSHAIR);
|
m_pCursorShapeDevice->sendSetShape(serial, WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_CROSSHAIR);
|
||||||
|
|
||||||
|
markDirty();
|
||||||
});
|
});
|
||||||
m_pPointer->setLeave([this](CCWlPointer* r, uint32_t timeMs, wl_proxy* surf) {
|
m_pPointer->setLeave([this](CCWlPointer* r, uint32_t timeMs, wl_proxy* surface) {
|
||||||
for (auto& ls : m_vLayerSurfaces) {
|
for (auto& ls : m_vLayerSurfaces) {
|
||||||
if (ls->pSurface->resource() == surf) {
|
if (ls->pSurface->resource() == surface) {
|
||||||
renderSurface(ls.get(), true);
|
if (m_pLastSurface == ls.get())
|
||||||
|
m_pLastSurface = nullptr;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
markDirty();
|
||||||
});
|
});
|
||||||
m_pPointer->setMotion([this](CCWlPointer* r, uint32_t timeMs, wl_fixed_t surface_x, wl_fixed_t surface_y) {
|
m_pPointer->setMotion([this](CCWlPointer* r, uint32_t timeMs, wl_fixed_t surface_x, wl_fixed_t surface_y) {
|
||||||
auto x = wl_fixed_to_double(surface_x);
|
auto x = wl_fixed_to_double(surface_x);
|
||||||
|
|
Loading…
Reference in a new issue