mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-24 01:06:00 +01:00
touch up the clang format and format all files
This commit is contained in:
parent
3e2785b970
commit
4fd90144d1
15 changed files with 337 additions and 328 deletions
|
@ -60,6 +60,6 @@ AllowShortEnumsOnASingleLine: false
|
||||||
BraceWrapping:
|
BraceWrapping:
|
||||||
AfterEnum: false
|
AfterEnum: false
|
||||||
|
|
||||||
AlignConsecutiveDeclarations: AcrossEmptyLinesAndComments
|
AlignConsecutiveDeclarations: AcrossEmptyLines
|
||||||
|
|
||||||
NamespaceIndentation: All
|
NamespaceIndentation: All
|
||||||
|
|
|
@ -44,7 +44,7 @@ flags:
|
||||||
--batch -> execute a batch of commands, separated by ';'
|
--batch -> execute a batch of commands, separated by ';'
|
||||||
)#";
|
)#";
|
||||||
|
|
||||||
void request(std::string arg, int minArgs = 0) {
|
void request(std::string arg, int minArgs = 0) {
|
||||||
const auto SERVERSOCKET = socket(AF_UNIX, SOCK_STREAM, 0);
|
const auto SERVERSOCKET = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
|
|
||||||
const auto ARGS = std::count(arg.begin(), arg.end(), ' ');
|
const auto ARGS = std::count(arg.begin(), arg.end(), ' ');
|
||||||
|
@ -59,7 +59,6 @@ void request(std::string arg, int minArgs = 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// get the instance signature
|
// get the instance signature
|
||||||
auto instanceSig = getenv("HYPRLAND_INSTANCE_SIGNATURE");
|
auto instanceSig = getenv("HYPRLAND_INSTANCE_SIGNATURE");
|
||||||
|
|
||||||
|
@ -71,7 +70,7 @@ void request(std::string arg, int minArgs = 0) {
|
||||||
std::string instanceSigStr = std::string(instanceSig);
|
std::string instanceSigStr = std::string(instanceSig);
|
||||||
|
|
||||||
sockaddr_un serverAddress = {0};
|
sockaddr_un serverAddress = {0};
|
||||||
serverAddress.sun_family = AF_UNIX;
|
serverAddress.sun_family = AF_UNIX;
|
||||||
|
|
||||||
std::string socketPath = "/tmp/hypr/" + instanceSigStr + "/.socket.sock";
|
std::string socketPath = "/tmp/hypr/" + instanceSigStr + "/.socket.sock";
|
||||||
|
|
||||||
|
@ -89,8 +88,8 @@ void request(std::string arg, int minArgs = 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string reply = "";
|
std::string reply = "";
|
||||||
char buffer[8192] = {0};
|
char buffer[8192] = {0};
|
||||||
|
|
||||||
sizeWritten = read(SERVERSOCKET, buffer, 8192);
|
sizeWritten = read(SERVERSOCKET, buffer, 8192);
|
||||||
|
|
||||||
|
@ -134,7 +133,7 @@ void requestHyprpaper(std::string arg) {
|
||||||
std::string instanceSigStr = std::string(instanceSig);
|
std::string instanceSigStr = std::string(instanceSig);
|
||||||
|
|
||||||
sockaddr_un serverAddress = {0};
|
sockaddr_un serverAddress = {0};
|
||||||
serverAddress.sun_family = AF_UNIX;
|
serverAddress.sun_family = AF_UNIX;
|
||||||
|
|
||||||
std::string socketPath = "/tmp/hypr/" + instanceSigStr + "/.hyprpaper.sock";
|
std::string socketPath = "/tmp/hypr/" + instanceSigStr + "/.hyprpaper.sock";
|
||||||
|
|
||||||
|
@ -176,7 +175,7 @@ int dispatchRequest(int argc, char** argv) {
|
||||||
|
|
||||||
std::string rq = "/dispatch";
|
std::string rq = "/dispatch";
|
||||||
|
|
||||||
for(int i = 2; i < argc; i++) {
|
for (int i = 2; i < argc; i++) {
|
||||||
if (!strcmp(argv[i], "--"))
|
if (!strcmp(argv[i], "--"))
|
||||||
continue;
|
continue;
|
||||||
rq += " " + std::string(argv[i]);
|
rq += " " + std::string(argv[i]);
|
||||||
|
@ -195,7 +194,7 @@ int keywordRequest(int argc, char** argv) {
|
||||||
|
|
||||||
std::string rq = "/keyword";
|
std::string rq = "/keyword";
|
||||||
|
|
||||||
for(int i = 2; i < argc; i++)
|
for (int i = 2; i < argc; i++)
|
||||||
rq += " " + std::string(argv[i]);
|
rq += " " + std::string(argv[i]);
|
||||||
|
|
||||||
request(rq);
|
request(rq);
|
||||||
|
@ -265,7 +264,7 @@ bool isNumber(const std::string& str, bool allowfloat) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
int bflag = 0, sflag = 0, index, c;
|
int bflag = 0, sflag = 0, index, c;
|
||||||
bool parseArgs = true;
|
bool parseArgs = true;
|
||||||
|
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
|
@ -274,8 +273,8 @@ int main(int argc, char** argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string fullRequest = "";
|
std::string fullRequest = "";
|
||||||
std::string fullArgs = "";
|
std::string fullArgs = "";
|
||||||
const auto ARGS = splitArgs(argc, argv);
|
const auto ARGS = splitArgs(argc, argv);
|
||||||
|
|
||||||
for (auto i = 0; i < ARGS.size(); ++i) {
|
for (auto i = 0; i < ARGS.size(); ++i) {
|
||||||
if (ARGS[i] == "--") {
|
if (ARGS[i] == "--") {
|
||||||
|
@ -308,29 +307,49 @@ int main(int argc, char** argv) {
|
||||||
fullRequest.pop_back(); // remove trailing space
|
fullRequest.pop_back(); // remove trailing space
|
||||||
|
|
||||||
fullRequest = fullArgs + "/" + fullRequest;
|
fullRequest = fullArgs + "/" + fullRequest;
|
||||||
|
|
||||||
int exitStatus = 0;
|
int exitStatus = 0;
|
||||||
|
|
||||||
if (fullRequest.contains("/--batch")) batchRequest(fullRequest);
|
if (fullRequest.contains("/--batch"))
|
||||||
else if (fullRequest.contains("/monitors")) request(fullRequest);
|
batchRequest(fullRequest);
|
||||||
else if (fullRequest.contains("/clients")) request(fullRequest);
|
else if (fullRequest.contains("/monitors"))
|
||||||
else if (fullRequest.contains("/workspaces")) request(fullRequest);
|
request(fullRequest);
|
||||||
else if (fullRequest.contains("/activewindow")) request(fullRequest);
|
else if (fullRequest.contains("/clients"))
|
||||||
else if (fullRequest.contains("/layers")) request(fullRequest);
|
request(fullRequest);
|
||||||
else if (fullRequest.contains("/version")) request(fullRequest);
|
else if (fullRequest.contains("/workspaces"))
|
||||||
else if (fullRequest.contains("/kill")) request(fullRequest);
|
request(fullRequest);
|
||||||
else if (fullRequest.contains("/splash")) request(fullRequest);
|
else if (fullRequest.contains("/activewindow"))
|
||||||
else if (fullRequest.contains("/devices")) request(fullRequest);
|
request(fullRequest);
|
||||||
else if (fullRequest.contains("/reload")) request(fullRequest);
|
else if (fullRequest.contains("/layers"))
|
||||||
else if (fullRequest.contains("/getoption")) request(fullRequest);
|
request(fullRequest);
|
||||||
else if (fullRequest.contains("/cursorpos")) request(fullRequest);
|
else if (fullRequest.contains("/version"))
|
||||||
else if (fullRequest.contains("/switchxkblayout")) request(fullRequest, 2);
|
request(fullRequest);
|
||||||
else if (fullRequest.contains("/output")) exitStatus = outputRequest(argc, argv);
|
else if (fullRequest.contains("/kill"))
|
||||||
else if (fullRequest.contains("/setcursor")) exitStatus = setcursorRequest(argc, argv);
|
request(fullRequest);
|
||||||
else if (fullRequest.contains("/dispatch")) exitStatus = dispatchRequest(argc, argv);
|
else if (fullRequest.contains("/splash"))
|
||||||
else if (fullRequest.contains("/keyword")) exitStatus = keywordRequest(argc, argv);
|
request(fullRequest);
|
||||||
else if (fullRequest.contains("/hyprpaper")) exitStatus = hyprpaperRequest(argc, argv);
|
else if (fullRequest.contains("/devices"))
|
||||||
else if (fullRequest.contains("/--help")) printf("%s", USAGE.c_str());
|
request(fullRequest);
|
||||||
|
else if (fullRequest.contains("/reload"))
|
||||||
|
request(fullRequest);
|
||||||
|
else if (fullRequest.contains("/getoption"))
|
||||||
|
request(fullRequest);
|
||||||
|
else if (fullRequest.contains("/cursorpos"))
|
||||||
|
request(fullRequest);
|
||||||
|
else if (fullRequest.contains("/switchxkblayout"))
|
||||||
|
request(fullRequest, 2);
|
||||||
|
else if (fullRequest.contains("/output"))
|
||||||
|
exitStatus = outputRequest(argc, argv);
|
||||||
|
else if (fullRequest.contains("/setcursor"))
|
||||||
|
exitStatus = setcursorRequest(argc, argv);
|
||||||
|
else if (fullRequest.contains("/dispatch"))
|
||||||
|
exitStatus = dispatchRequest(argc, argv);
|
||||||
|
else if (fullRequest.contains("/keyword"))
|
||||||
|
exitStatus = keywordRequest(argc, argv);
|
||||||
|
else if (fullRequest.contains("/hyprpaper"))
|
||||||
|
exitStatus = hyprpaperRequest(argc, argv);
|
||||||
|
else if (fullRequest.contains("/--help"))
|
||||||
|
printf("%s", USAGE.c_str());
|
||||||
else {
|
else {
|
||||||
printf("%s\n", USAGE.c_str());
|
printf("%s\n", USAGE.c_str());
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -704,7 +704,7 @@ wlr_surface* CCompositor::vectorWindowToSurface(const Vector2D& pos, CWindow* pW
|
||||||
double subx, suby;
|
double subx, suby;
|
||||||
|
|
||||||
// calc for oversized windows... fucking bullshit, again.
|
// calc for oversized windows... fucking bullshit, again.
|
||||||
wlr_box geom;
|
wlr_box geom;
|
||||||
wlr_xdg_surface_get_geometry(pWindow->m_uSurface.xdg, &geom);
|
wlr_xdg_surface_get_geometry(pWindow->m_uSurface.xdg, &geom);
|
||||||
|
|
||||||
const auto PFOUND = wlr_xdg_surface_surface_at(PSURFACE, pos.x - pWindow->m_vRealPosition.vec().x + geom.x, pos.y - pWindow->m_vRealPosition.vec().y + geom.y, &subx, &suby);
|
const auto PFOUND = wlr_xdg_surface_surface_at(PSURFACE, pos.x - pWindow->m_vRealPosition.vec().x + geom.x, pos.y - pWindow->m_vRealPosition.vec().y + geom.y, &subx, &suby);
|
||||||
|
@ -1690,7 +1690,7 @@ void CCompositor::moveWorkspaceToMonitor(CWorkspace* pWorkspace, CMonitor* pMoni
|
||||||
const bool SWITCHINGISACTIVE = POLDMON->activeWorkspace == pWorkspace->m_iID;
|
const bool SWITCHINGISACTIVE = POLDMON->activeWorkspace == pWorkspace->m_iID;
|
||||||
|
|
||||||
// fix old mon
|
// fix old mon
|
||||||
int nextWorkspaceOnMonitorID = -1;
|
int nextWorkspaceOnMonitorID = -1;
|
||||||
for (auto& w : m_vWorkspaces) {
|
for (auto& w : m_vWorkspaces) {
|
||||||
if (w->m_iMonitorID == POLDMON->ID && w->m_iID != pWorkspace->m_iID) {
|
if (w->m_iMonitorID == POLDMON->ID && w->m_iID != pWorkspace->m_iID) {
|
||||||
nextWorkspaceOnMonitorID = w->m_iID;
|
nextWorkspaceOnMonitorID = w->m_iID;
|
||||||
|
|
|
@ -134,11 +134,7 @@ void CWindow::createToplevelHandle() {
|
||||||
|
|
||||||
// handle events
|
// handle events
|
||||||
hyprListener_toplevelActivate.initCallback(
|
hyprListener_toplevelActivate.initCallback(
|
||||||
&m_phForeignToplevel->events.request_activate,
|
&m_phForeignToplevel->events.request_activate, [&](void* owner, void* data) { g_pCompositor->focusWindow(this); }, this, "Toplevel");
|
||||||
[&](void* owner, void* data) {
|
|
||||||
g_pCompositor->focusWindow(this);
|
|
||||||
},
|
|
||||||
this, "Toplevel");
|
|
||||||
|
|
||||||
hyprListener_toplevelFullscreen.initCallback(
|
hyprListener_toplevelFullscreen.initCallback(
|
||||||
&m_phForeignToplevel->events.request_fullscreen,
|
&m_phForeignToplevel->events.request_fullscreen,
|
||||||
|
@ -150,11 +146,7 @@ void CWindow::createToplevelHandle() {
|
||||||
this, "Toplevel");
|
this, "Toplevel");
|
||||||
|
|
||||||
hyprListener_toplevelClose.initCallback(
|
hyprListener_toplevelClose.initCallback(
|
||||||
&m_phForeignToplevel->events.request_close,
|
&m_phForeignToplevel->events.request_close, [&](void* owner, void* data) { g_pCompositor->closeWindow(this); }, this, "Toplevel");
|
||||||
[&](void* owner, void* data) {
|
|
||||||
g_pCompositor->closeWindow(this);
|
|
||||||
},
|
|
||||||
this, "Toplevel");
|
|
||||||
|
|
||||||
m_iLastToplevelMonitorID = m_iMonitorID;
|
m_iLastToplevelMonitorID = m_iMonitorID;
|
||||||
}
|
}
|
||||||
|
|
112
src/Window.hpp
112
src/Window.hpp
|
@ -26,9 +26,9 @@ struct SWindowSpecialRenderData {
|
||||||
int64_t inactiveBorderColor = -1; // -1 means unset
|
int64_t inactiveBorderColor = -1; // -1 means unset
|
||||||
|
|
||||||
// set by the layout
|
// set by the layout
|
||||||
bool rounding = true;
|
bool rounding = true;
|
||||||
bool border = true;
|
bool border = true;
|
||||||
bool decorate = true;
|
bool decorate = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SWindowAdditionalConfigData {
|
struct SWindowAdditionalConfigData {
|
||||||
|
@ -88,110 +88,110 @@ class CWindow {
|
||||||
} m_uSurface;
|
} m_uSurface;
|
||||||
|
|
||||||
// this is the position and size of the "bounding box"
|
// this is the position and size of the "bounding box"
|
||||||
Vector2D m_vPosition = Vector2D(0, 0);
|
Vector2D m_vPosition = Vector2D(0, 0);
|
||||||
Vector2D m_vSize = Vector2D(0, 0);
|
Vector2D m_vSize = Vector2D(0, 0);
|
||||||
|
|
||||||
// this is the real position and size used to draw the thing
|
// this is the real position and size used to draw the thing
|
||||||
CAnimatedVariable m_vRealPosition;
|
CAnimatedVariable m_vRealPosition;
|
||||||
CAnimatedVariable m_vRealSize;
|
CAnimatedVariable m_vRealSize;
|
||||||
|
|
||||||
// for not spamming the protocols
|
// for not spamming the protocols
|
||||||
Vector2D m_vReportedPosition;
|
Vector2D m_vReportedPosition;
|
||||||
Vector2D m_vReportedSize;
|
Vector2D m_vReportedSize;
|
||||||
|
|
||||||
// for restoring floating statuses
|
// for restoring floating statuses
|
||||||
Vector2D m_vLastFloatingSize;
|
Vector2D m_vLastFloatingSize;
|
||||||
Vector2D m_vLastFloatingPosition;
|
Vector2D m_vLastFloatingPosition;
|
||||||
|
|
||||||
// this is used for pseudotiling
|
// this is used for pseudotiling
|
||||||
bool m_bIsPseudotiled = false;
|
bool m_bIsPseudotiled = false;
|
||||||
Vector2D m_vPseudoSize = Vector2D(0, 0);
|
Vector2D m_vPseudoSize = Vector2D(0, 0);
|
||||||
|
|
||||||
uint64_t m_iTags = 0;
|
uint64_t m_iTags = 0;
|
||||||
bool m_bIsFloating = false;
|
bool m_bIsFloating = false;
|
||||||
bool m_bDraggingTiled = false; // for dragging around tiled windows
|
bool m_bDraggingTiled = false; // for dragging around tiled windows
|
||||||
bool m_bIsFullscreen = false;
|
bool m_bIsFullscreen = false;
|
||||||
uint64_t m_iMonitorID = -1;
|
uint64_t m_iMonitorID = -1;
|
||||||
std::string m_szTitle = "";
|
std::string m_szTitle = "";
|
||||||
int m_iWorkspaceID = -1;
|
int m_iWorkspaceID = -1;
|
||||||
|
|
||||||
bool m_bIsMapped = false;
|
bool m_bIsMapped = false;
|
||||||
|
|
||||||
bool m_bRequestsFloat = false;
|
bool m_bRequestsFloat = false;
|
||||||
|
|
||||||
// This is for fullscreen apps
|
// This is for fullscreen apps
|
||||||
bool m_bCreatedOverFullscreen = false;
|
bool m_bCreatedOverFullscreen = false;
|
||||||
|
|
||||||
// XWayland stuff
|
// XWayland stuff
|
||||||
bool m_bIsX11 = false;
|
bool m_bIsX11 = false;
|
||||||
bool m_bMappedX11 = false;
|
bool m_bMappedX11 = false;
|
||||||
CWindow* m_pX11Parent = nullptr;
|
CWindow* m_pX11Parent = nullptr;
|
||||||
uint64_t m_iX11Type = 0;
|
uint64_t m_iX11Type = 0;
|
||||||
bool m_bIsModal = false;
|
bool m_bIsModal = false;
|
||||||
bool m_bX11DoesntWantBorders = false;
|
bool m_bX11DoesntWantBorders = false;
|
||||||
bool m_bX11ShouldntFocus = false;
|
bool m_bX11ShouldntFocus = false;
|
||||||
//
|
//
|
||||||
|
|
||||||
// For nofocus
|
// For nofocus
|
||||||
bool m_bNoFocus = false;
|
bool m_bNoFocus = false;
|
||||||
bool m_bNoInitialFocus = false;
|
bool m_bNoInitialFocus = false;
|
||||||
|
|
||||||
// initial fullscreen and fullscreen disabled
|
// initial fullscreen and fullscreen disabled
|
||||||
bool m_bWantsInitialFullscreen = false;
|
bool m_bWantsInitialFullscreen = false;
|
||||||
bool m_bNoFullscreenRequest = false;
|
bool m_bNoFullscreenRequest = false;
|
||||||
|
|
||||||
SSurfaceTreeNode* m_pSurfaceTree = nullptr;
|
SSurfaceTreeNode* m_pSurfaceTree = nullptr;
|
||||||
|
|
||||||
// Animated border
|
// Animated border
|
||||||
CGradientValueData m_cRealBorderColor = {0};
|
CGradientValueData m_cRealBorderColor = {0};
|
||||||
CGradientValueData m_cRealBorderColorPrevious = {0};
|
CGradientValueData m_cRealBorderColorPrevious = {0};
|
||||||
CAnimatedVariable m_fBorderAnimationProgress;
|
CAnimatedVariable m_fBorderAnimationProgress;
|
||||||
|
|
||||||
// Fade in-out
|
// Fade in-out
|
||||||
CAnimatedVariable m_fAlpha;
|
CAnimatedVariable m_fAlpha;
|
||||||
bool m_bFadingOut = false;
|
bool m_bFadingOut = false;
|
||||||
bool m_bReadyToDelete = false;
|
bool m_bReadyToDelete = false;
|
||||||
Vector2D m_vOriginalClosedPos; // these will be used for calculations later on in
|
Vector2D m_vOriginalClosedPos; // these will be used for calculations later on in
|
||||||
Vector2D m_vOriginalClosedSize; // drawing the closing animations
|
Vector2D m_vOriginalClosedSize; // drawing the closing animations
|
||||||
|
|
||||||
// For pinned (sticky) windows
|
// For pinned (sticky) windows
|
||||||
bool m_bPinned = false;
|
bool m_bPinned = false;
|
||||||
|
|
||||||
// for proper cycling. While cycling we can't just move the pointers, so we need to keep track of the last cycled window.
|
// for proper cycling. While cycling we can't just move the pointers, so we need to keep track of the last cycled window.
|
||||||
CWindow* m_pLastCycledWindow = nullptr;
|
CWindow* m_pLastCycledWindow = nullptr;
|
||||||
|
|
||||||
// Foreign Toplevel proto
|
// Foreign Toplevel proto
|
||||||
wlr_foreign_toplevel_handle_v1* m_phForeignToplevel = nullptr;
|
wlr_foreign_toplevel_handle_v1* m_phForeignToplevel = nullptr;
|
||||||
|
|
||||||
// Window decorations
|
// Window decorations
|
||||||
std::deque<std::unique_ptr<IHyprWindowDecoration>> m_dWindowDecorations;
|
std::deque<std::unique_ptr<IHyprWindowDecoration>> m_dWindowDecorations;
|
||||||
std::vector<IHyprWindowDecoration*> m_vDecosToRemove;
|
std::vector<IHyprWindowDecoration*> m_vDecosToRemove;
|
||||||
|
|
||||||
// Special render data, rules, etc
|
// Special render data, rules, etc
|
||||||
SWindowSpecialRenderData m_sSpecialRenderData;
|
SWindowSpecialRenderData m_sSpecialRenderData;
|
||||||
SWindowAdditionalConfigData m_sAdditionalConfigData;
|
SWindowAdditionalConfigData m_sAdditionalConfigData;
|
||||||
|
|
||||||
// for alpha
|
// for alpha
|
||||||
CAnimatedVariable m_fActiveInactiveAlpha;
|
CAnimatedVariable m_fActiveInactiveAlpha;
|
||||||
|
|
||||||
// animated shadow color
|
// animated shadow color
|
||||||
CAnimatedVariable m_cRealShadowColor;
|
CAnimatedVariable m_cRealShadowColor;
|
||||||
|
|
||||||
// animated tint
|
// animated tint
|
||||||
CAnimatedVariable m_fDimPercent;
|
CAnimatedVariable m_fDimPercent;
|
||||||
|
|
||||||
// swallowing
|
// swallowing
|
||||||
CWindow* m_pSwallowed = nullptr;
|
CWindow* m_pSwallowed = nullptr;
|
||||||
|
|
||||||
// for toplevel monitor events
|
// for toplevel monitor events
|
||||||
uint64_t m_iLastToplevelMonitorID = -1;
|
uint64_t m_iLastToplevelMonitorID = -1;
|
||||||
uint64_t m_iLastSurfaceMonitorID = -1;
|
uint64_t m_iLastSurfaceMonitorID = -1;
|
||||||
|
|
||||||
// for idle inhibiting windows
|
// for idle inhibiting windows
|
||||||
eIdleInhibitMode m_eIdleInhibitMode = IDLEINHIBIT_NONE;
|
eIdleInhibitMode m_eIdleInhibitMode = IDLEINHIBIT_NONE;
|
||||||
|
|
||||||
// For the list lookup
|
// For the list lookup
|
||||||
bool operator==(const CWindow& rhs) {
|
bool operator==(const CWindow& rhs) {
|
||||||
return m_uSurface.xdg == rhs.m_uSurface.xdg && m_uSurface.xwayland == rhs.m_uSurface.xwayland && m_vPosition == rhs.m_vPosition && m_vSize == rhs.m_vSize &&
|
return m_uSurface.xdg == rhs.m_uSurface.xdg && m_uSurface.xwayland == rhs.m_uSurface.xwayland && m_vPosition == rhs.m_vPosition && m_vSize == rhs.m_vSize &&
|
||||||
m_bFadingOut == rhs.m_bFadingOut;
|
m_bFadingOut == rhs.m_bFadingOut;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ class CGradientValueData : public ICustomConfigValueData {
|
||||||
/* Float corresponding to the angle (rad) */
|
/* Float corresponding to the angle (rad) */
|
||||||
float m_fAngle = 0;
|
float m_fAngle = 0;
|
||||||
|
|
||||||
bool operator==(const CGradientValueData& other) {
|
bool operator==(const CGradientValueData& other) {
|
||||||
if (other.m_vColors.size() != m_vColors.size() || m_fAngle != other.m_fAngle)
|
if (other.m_vColors.size() != m_vColors.size() || m_fAngle != other.m_fAngle)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -8,21 +8,21 @@ typedef struct {
|
||||||
/** User specified flags */
|
/** User specified flags */
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
/** User-specified position */
|
/** User-specified position */
|
||||||
int32_t x, y;
|
int32_t x, y;
|
||||||
/** User-specified size */
|
/** User-specified size */
|
||||||
int32_t width, height;
|
int32_t width, height;
|
||||||
/** Program-specified minimum size */
|
/** Program-specified minimum size */
|
||||||
int32_t min_width, min_height;
|
int32_t min_width, min_height;
|
||||||
/** Program-specified maximum size */
|
/** Program-specified maximum size */
|
||||||
int32_t max_width, max_height;
|
int32_t max_width, max_height;
|
||||||
/** Program-specified resize increments */
|
/** Program-specified resize increments */
|
||||||
int32_t width_inc, height_inc;
|
int32_t width_inc, height_inc;
|
||||||
/** Program-specified minimum aspect ratios */
|
/** Program-specified minimum aspect ratios */
|
||||||
int32_t min_aspect_num, min_aspect_den;
|
int32_t min_aspect_num, min_aspect_den;
|
||||||
/** Program-specified maximum aspect ratios */
|
/** Program-specified maximum aspect ratios */
|
||||||
int32_t max_aspect_num, max_aspect_den;
|
int32_t max_aspect_num, max_aspect_den;
|
||||||
/** Program-specified base size */
|
/** Program-specified base size */
|
||||||
int32_t base_width, base_height;
|
int32_t base_width, base_height;
|
||||||
/** Program-specified window gravity */
|
/** Program-specified window gravity */
|
||||||
uint32_t win_gravity;
|
uint32_t win_gravity;
|
||||||
} xcb_size_hints_t;
|
} xcb_size_hints_t;
|
||||||
|
@ -93,12 +93,12 @@ struct wlr_xwayland_surface {
|
||||||
struct wl_event_source* ping_timer;
|
struct wl_event_source* ping_timer;
|
||||||
|
|
||||||
// _NET_WM_STATE
|
// _NET_WM_STATE
|
||||||
bool modal;
|
bool modal;
|
||||||
bool fullscreen;
|
bool fullscreen;
|
||||||
bool maximized_vert, maximized_horz;
|
bool maximized_vert, maximized_horz;
|
||||||
bool minimized;
|
bool minimized;
|
||||||
|
|
||||||
bool has_alpha;
|
bool has_alpha;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
struct wl_signal destroy;
|
struct wl_signal destroy;
|
||||||
|
|
|
@ -431,8 +431,8 @@ bool CKeybindManager::handleVT(xkb_keysym_t keysym) {
|
||||||
const unsigned int TTY = keysym - XKB_KEY_XF86Switch_VT_1 + 1;
|
const unsigned int TTY = keysym - XKB_KEY_XF86Switch_VT_1 + 1;
|
||||||
|
|
||||||
// vtnr is bugged for some reason.
|
// vtnr is bugged for some reason.
|
||||||
const std::string TTYSTR = execAndGet("head -n 1 /sys/devices/virtual/tty/tty0/active").substr(3);
|
const std::string TTYSTR = execAndGet("head -n 1 /sys/devices/virtual/tty/tty0/active").substr(3);
|
||||||
unsigned int ttynum = 0;
|
unsigned int ttynum = 0;
|
||||||
try {
|
try {
|
||||||
ttynum = std::stoll(TTYSTR);
|
ttynum = std::stoll(TTYSTR);
|
||||||
} catch (std::exception& e) {
|
} catch (std::exception& e) {
|
||||||
|
@ -633,9 +633,9 @@ void CKeybindManager::changeworkspace(std::string args) {
|
||||||
|
|
||||||
// Flag needed so that the previous workspace is not recorded when switching
|
// Flag needed so that the previous workspace is not recorded when switching
|
||||||
// to a previous workspace.
|
// to a previous workspace.
|
||||||
bool isSwitchingToPrevious = false;
|
bool isSwitchingToPrevious = false;
|
||||||
|
|
||||||
bool internal = false;
|
bool internal = false;
|
||||||
|
|
||||||
if (args.find("[internal]") == 0) {
|
if (args.find("[internal]") == 0) {
|
||||||
workspaceToChangeTo = std::stoi(args.substr(10));
|
workspaceToChangeTo = std::stoi(args.substr(10));
|
||||||
|
@ -885,7 +885,7 @@ void CKeybindManager::moveActiveToWorkspace(std::string args) {
|
||||||
if (!PWINDOW)
|
if (!PWINDOW)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto OLDWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID);
|
const auto OLDWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID);
|
||||||
|
|
||||||
// hack
|
// hack
|
||||||
std::string workspaceName;
|
std::string workspaceName;
|
||||||
|
|
|
@ -84,46 +84,46 @@ class CKeybindManager {
|
||||||
bool ensureMouseBindState();
|
bool ensureMouseBindState();
|
||||||
|
|
||||||
// -------------- Dispatchers -------------- //
|
// -------------- Dispatchers -------------- //
|
||||||
static void killActive(std::string);
|
static void killActive(std::string);
|
||||||
static void kill(std::string);
|
static void kill(std::string);
|
||||||
static void spawn(std::string);
|
static void spawn(std::string);
|
||||||
static void toggleActiveFloating(std::string);
|
static void toggleActiveFloating(std::string);
|
||||||
static void toggleActivePseudo(std::string);
|
static void toggleActivePseudo(std::string);
|
||||||
static void changeworkspace(std::string);
|
static void changeworkspace(std::string);
|
||||||
static void fullscreenActive(std::string);
|
static void fullscreenActive(std::string);
|
||||||
static void moveActiveToWorkspace(std::string);
|
static void moveActiveToWorkspace(std::string);
|
||||||
static void moveActiveToWorkspaceSilent(std::string);
|
static void moveActiveToWorkspaceSilent(std::string);
|
||||||
static void moveFocusTo(std::string);
|
static void moveFocusTo(std::string);
|
||||||
static void centerWindow(std::string);
|
static void centerWindow(std::string);
|
||||||
static void moveActiveTo(std::string);
|
static void moveActiveTo(std::string);
|
||||||
static void toggleGroup(std::string);
|
static void toggleGroup(std::string);
|
||||||
static void changeGroupActive(std::string);
|
static void changeGroupActive(std::string);
|
||||||
static void alterSplitRatio(std::string);
|
static void alterSplitRatio(std::string);
|
||||||
static void focusMonitor(std::string);
|
static void focusMonitor(std::string);
|
||||||
static void toggleSplit(std::string);
|
static void toggleSplit(std::string);
|
||||||
static void moveCursorToCorner(std::string);
|
static void moveCursorToCorner(std::string);
|
||||||
static void workspaceOpt(std::string);
|
static void workspaceOpt(std::string);
|
||||||
static void exitHyprland(std::string);
|
static void exitHyprland(std::string);
|
||||||
static void moveCurrentWorkspaceToMonitor(std::string);
|
static void moveCurrentWorkspaceToMonitor(std::string);
|
||||||
static void moveWorkspaceToMonitor(std::string);
|
static void moveWorkspaceToMonitor(std::string);
|
||||||
static void toggleSpecialWorkspace(std::string);
|
static void toggleSpecialWorkspace(std::string);
|
||||||
static void forceRendererReload(std::string);
|
static void forceRendererReload(std::string);
|
||||||
static void resizeActive(std::string);
|
static void resizeActive(std::string);
|
||||||
static void moveActive(std::string);
|
static void moveActive(std::string);
|
||||||
static void moveWindow(std::string);
|
static void moveWindow(std::string);
|
||||||
static void resizeWindow(std::string);
|
static void resizeWindow(std::string);
|
||||||
static void circleNext(std::string);
|
static void circleNext(std::string);
|
||||||
static void focusWindow(std::string);
|
static void focusWindow(std::string);
|
||||||
static void setSubmap(std::string);
|
static void setSubmap(std::string);
|
||||||
static void pass(std::string);
|
static void pass(std::string);
|
||||||
static void layoutmsg(std::string);
|
static void layoutmsg(std::string);
|
||||||
static void toggleOpaque(std::string);
|
static void toggleOpaque(std::string);
|
||||||
static void dpms(std::string);
|
static void dpms(std::string);
|
||||||
static void swapnext(std::string);
|
static void swapnext(std::string);
|
||||||
static void swapActiveWorkspaces(std::string);
|
static void swapActiveWorkspaces(std::string);
|
||||||
static void pinActive(std::string);
|
static void pinActive(std::string);
|
||||||
static void mouse(std::string);
|
static void mouse(std::string);
|
||||||
static void bringActiveToTop(std::string);
|
static void bringActiveToTop(std::string);
|
||||||
|
|
||||||
friend class CCompositor;
|
friend class CCompositor;
|
||||||
friend class CInputManager;
|
friend class CInputManager;
|
||||||
|
|
|
@ -555,7 +555,7 @@ void CInputManager::applyConfigToKeyboard(SKeyboard* pKeyboard) {
|
||||||
const auto VARIANT = HASCONFIG ? g_pConfigManager->getDeviceString(devname, "kb_variant") : g_pConfigManager->getString("input:kb_variant");
|
const auto VARIANT = HASCONFIG ? g_pConfigManager->getDeviceString(devname, "kb_variant") : g_pConfigManager->getString("input:kb_variant");
|
||||||
const auto OPTIONS = HASCONFIG ? g_pConfigManager->getDeviceString(devname, "kb_options") : g_pConfigManager->getString("input:kb_options");
|
const auto OPTIONS = HASCONFIG ? g_pConfigManager->getDeviceString(devname, "kb_options") : g_pConfigManager->getString("input:kb_options");
|
||||||
|
|
||||||
const auto ENABLED = HASCONFIG ? g_pConfigManager->getDeviceInt(devname, "enabled") : true;
|
const auto ENABLED = HASCONFIG ? g_pConfigManager->getDeviceInt(devname, "enabled") : true;
|
||||||
|
|
||||||
pKeyboard->enabled = ENABLED;
|
pKeyboard->enabled = ENABLED;
|
||||||
|
|
||||||
|
|
|
@ -45,11 +45,11 @@ class CToplevelExportProtocolManager {
|
||||||
public:
|
public:
|
||||||
CToplevelExportProtocolManager();
|
CToplevelExportProtocolManager();
|
||||||
|
|
||||||
void bindManager(wl_client* client, void* data, uint32_t version, uint32_t id);
|
void bindManager(wl_client* client, void* data, uint32_t version, uint32_t id);
|
||||||
void captureToplevel(wl_client* client, wl_resource* resource, uint32_t frame, int32_t overlay_cursor, CWindow* handle);
|
void captureToplevel(wl_client* client, wl_resource* resource, uint32_t frame, int32_t overlay_cursor, CWindow* handle);
|
||||||
void removeClient(SToplevelClient* client, bool force = false);
|
void removeClient(SToplevelClient* client, bool force = false);
|
||||||
void removeFrame(SToplevelFrame* frame, bool force = false);
|
void removeFrame(SToplevelFrame* frame, bool force = false);
|
||||||
void copyFrame(wl_client* client, wl_resource* resource, wl_resource* buffer, int32_t ignore_damage);
|
void copyFrame(wl_client* client, wl_resource* resource, wl_resource* buffer, int32_t ignore_damage);
|
||||||
|
|
||||||
void onMonitorRender(CMonitor* pMonitor);
|
void onMonitorRender(CMonitor* pMonitor);
|
||||||
void displayDestroy();
|
void displayDestroy();
|
||||||
|
|
|
@ -17,147 +17,146 @@ struct wlr_pixel_format_info {
|
||||||
|
|
||||||
static const struct wlr_pixel_format_info pixel_format_info[] = {
|
static const struct wlr_pixel_format_info pixel_format_info[] = {
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_XRGB8888,
|
.drm_format = DRM_FORMAT_XRGB8888,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_ARGB8888,
|
.drm_format = DRM_FORMAT_ARGB8888,
|
||||||
.opaque_substitute = DRM_FORMAT_XRGB8888,
|
.opaque_substitute = DRM_FORMAT_XRGB8888,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_XBGR8888,
|
.drm_format = DRM_FORMAT_XBGR8888,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_ABGR8888,
|
.drm_format = DRM_FORMAT_ABGR8888,
|
||||||
.opaque_substitute = DRM_FORMAT_XBGR8888,
|
.opaque_substitute = DRM_FORMAT_XBGR8888,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGBX8888,
|
.drm_format = DRM_FORMAT_RGBX8888,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGBA8888,
|
.drm_format = DRM_FORMAT_RGBA8888,
|
||||||
.opaque_substitute = DRM_FORMAT_RGBX8888,
|
.opaque_substitute = DRM_FORMAT_RGBX8888,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_BGRX8888,
|
.drm_format = DRM_FORMAT_BGRX8888,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_BGRA8888,
|
.drm_format = DRM_FORMAT_BGRA8888,
|
||||||
.opaque_substitute = DRM_FORMAT_BGRX8888,
|
.opaque_substitute = DRM_FORMAT_BGRX8888,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_BGR888,
|
.drm_format = DRM_FORMAT_BGR888,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 24,
|
.bpp = 24,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGBX4444,
|
.drm_format = DRM_FORMAT_RGBX4444,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 16,
|
.bpp = 16,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGBA4444,
|
.drm_format = DRM_FORMAT_RGBA4444,
|
||||||
.opaque_substitute = DRM_FORMAT_RGBX4444,
|
.opaque_substitute = DRM_FORMAT_RGBX4444,
|
||||||
.bpp = 16,
|
.bpp = 16,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGBX5551,
|
.drm_format = DRM_FORMAT_RGBX5551,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 16,
|
.bpp = 16,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGBA5551,
|
.drm_format = DRM_FORMAT_RGBA5551,
|
||||||
.opaque_substitute = DRM_FORMAT_RGBX5551,
|
.opaque_substitute = DRM_FORMAT_RGBX5551,
|
||||||
.bpp = 16,
|
.bpp = 16,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGB565,
|
.drm_format = DRM_FORMAT_RGB565,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 16,
|
.bpp = 16,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_BGR565,
|
.drm_format = DRM_FORMAT_BGR565,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 16,
|
.bpp = 16,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_XRGB2101010,
|
.drm_format = DRM_FORMAT_XRGB2101010,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_ARGB2101010,
|
.drm_format = DRM_FORMAT_ARGB2101010,
|
||||||
.opaque_substitute = DRM_FORMAT_XRGB2101010,
|
.opaque_substitute = DRM_FORMAT_XRGB2101010,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_XBGR2101010,
|
.drm_format = DRM_FORMAT_XBGR2101010,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_ABGR2101010,
|
.drm_format = DRM_FORMAT_ABGR2101010,
|
||||||
.opaque_substitute = DRM_FORMAT_XBGR2101010,
|
.opaque_substitute = DRM_FORMAT_XBGR2101010,
|
||||||
.bpp = 32,
|
.bpp = 32,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_XBGR16161616F,
|
.drm_format = DRM_FORMAT_XBGR16161616F,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 64,
|
.bpp = 64,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_ABGR16161616F,
|
.drm_format = DRM_FORMAT_ABGR16161616F,
|
||||||
.opaque_substitute = DRM_FORMAT_XBGR16161616F,
|
.opaque_substitute = DRM_FORMAT_XBGR16161616F,
|
||||||
.bpp = 64,
|
.bpp = 64,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_XBGR16161616,
|
.drm_format = DRM_FORMAT_XBGR16161616,
|
||||||
.opaque_substitute = DRM_FORMAT_INVALID,
|
.opaque_substitute = DRM_FORMAT_INVALID,
|
||||||
.bpp = 64,
|
.bpp = 64,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_ABGR16161616,
|
.drm_format = DRM_FORMAT_ABGR16161616,
|
||||||
.opaque_substitute = DRM_FORMAT_XBGR16161616,
|
.opaque_substitute = DRM_FORMAT_XBGR16161616,
|
||||||
.bpp = 64,
|
.bpp = 64,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const size_t pixel_format_info_size =
|
static const size_t pixel_format_info_size = sizeof(pixel_format_info) / sizeof(pixel_format_info[0]);
|
||||||
sizeof(pixel_format_info) / sizeof(pixel_format_info[0]);
|
|
||||||
|
|
||||||
const struct wlr_pixel_format_info* drm_get_pixel_format_info(uint32_t fmt) {
|
const struct wlr_pixel_format_info* drm_get_pixel_format_info(uint32_t fmt) {
|
||||||
for (size_t i = 0; i < pixel_format_info_size; ++i) {
|
for (size_t i = 0; i < pixel_format_info_size; ++i) {
|
||||||
|
@ -171,23 +170,17 @@ const struct wlr_pixel_format_info* drm_get_pixel_format_info(uint32_t fmt) {
|
||||||
|
|
||||||
uint32_t convert_wl_shm_format_to_drm(enum wl_shm_format fmt) {
|
uint32_t convert_wl_shm_format_to_drm(enum wl_shm_format fmt) {
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case WL_SHM_FORMAT_XRGB8888:
|
case WL_SHM_FORMAT_XRGB8888: return DRM_FORMAT_XRGB8888;
|
||||||
return DRM_FORMAT_XRGB8888;
|
case WL_SHM_FORMAT_ARGB8888: return DRM_FORMAT_ARGB8888;
|
||||||
case WL_SHM_FORMAT_ARGB8888:
|
default: return (uint32_t)fmt;
|
||||||
return DRM_FORMAT_ARGB8888;
|
|
||||||
default:
|
|
||||||
return (uint32_t)fmt;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum wl_shm_format convert_drm_format_to_wl_shm(uint32_t fmt) {
|
enum wl_shm_format convert_drm_format_to_wl_shm(uint32_t fmt) {
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
case DRM_FORMAT_XRGB8888:
|
case DRM_FORMAT_XRGB8888: return WL_SHM_FORMAT_XRGB8888;
|
||||||
return WL_SHM_FORMAT_XRGB8888;
|
case DRM_FORMAT_ARGB8888: return WL_SHM_FORMAT_ARGB8888;
|
||||||
case DRM_FORMAT_ARGB8888:
|
default: return (enum wl_shm_format)fmt;
|
||||||
return WL_SHM_FORMAT_ARGB8888;
|
|
||||||
default:
|
|
||||||
return (enum wl_shm_format)fmt;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,108 +189,108 @@ struct wlr_gles2_pixel_format {
|
||||||
// optional field, if empty then internalformat = format
|
// optional field, if empty then internalformat = format
|
||||||
GLint gl_internalformat;
|
GLint gl_internalformat;
|
||||||
GLint gl_format, gl_type;
|
GLint gl_format, gl_type;
|
||||||
bool has_alpha;
|
bool has_alpha;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct wlr_gles2_pixel_format formats[] = {
|
static const struct wlr_gles2_pixel_format formats[] = {
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_ARGB8888,
|
.drm_format = DRM_FORMAT_ARGB8888,
|
||||||
.gl_format = GL_BGRA_EXT,
|
.gl_format = GL_BGRA_EXT,
|
||||||
.gl_type = GL_UNSIGNED_BYTE,
|
.gl_type = GL_UNSIGNED_BYTE,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_XRGB8888,
|
.drm_format = DRM_FORMAT_XRGB8888,
|
||||||
.gl_format = GL_BGRA_EXT,
|
.gl_format = GL_BGRA_EXT,
|
||||||
.gl_type = GL_UNSIGNED_BYTE,
|
.gl_type = GL_UNSIGNED_BYTE,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_XBGR8888,
|
.drm_format = DRM_FORMAT_XBGR8888,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_UNSIGNED_BYTE,
|
.gl_type = GL_UNSIGNED_BYTE,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_ABGR8888,
|
.drm_format = DRM_FORMAT_ABGR8888,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_UNSIGNED_BYTE,
|
.gl_type = GL_UNSIGNED_BYTE,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_BGR888,
|
.drm_format = DRM_FORMAT_BGR888,
|
||||||
.gl_format = GL_RGB,
|
.gl_format = GL_RGB,
|
||||||
.gl_type = GL_UNSIGNED_BYTE,
|
.gl_type = GL_UNSIGNED_BYTE,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
#if WLR_LITTLE_ENDIAN
|
#if WLR_LITTLE_ENDIAN
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGBX4444,
|
.drm_format = DRM_FORMAT_RGBX4444,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_UNSIGNED_SHORT_4_4_4_4,
|
.gl_type = GL_UNSIGNED_SHORT_4_4_4_4,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGBA4444,
|
.drm_format = DRM_FORMAT_RGBA4444,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_UNSIGNED_SHORT_4_4_4_4,
|
.gl_type = GL_UNSIGNED_SHORT_4_4_4_4,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGBX5551,
|
.drm_format = DRM_FORMAT_RGBX5551,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_UNSIGNED_SHORT_5_5_5_1,
|
.gl_type = GL_UNSIGNED_SHORT_5_5_5_1,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGBA5551,
|
.drm_format = DRM_FORMAT_RGBA5551,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_UNSIGNED_SHORT_5_5_5_1,
|
.gl_type = GL_UNSIGNED_SHORT_5_5_5_1,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_RGB565,
|
.drm_format = DRM_FORMAT_RGB565,
|
||||||
.gl_format = GL_RGB,
|
.gl_format = GL_RGB,
|
||||||
.gl_type = GL_UNSIGNED_SHORT_5_6_5,
|
.gl_type = GL_UNSIGNED_SHORT_5_6_5,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_XBGR2101010,
|
.drm_format = DRM_FORMAT_XBGR2101010,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_UNSIGNED_INT_2_10_10_10_REV_EXT,
|
.gl_type = GL_UNSIGNED_INT_2_10_10_10_REV_EXT,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_ABGR2101010,
|
.drm_format = DRM_FORMAT_ABGR2101010,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_UNSIGNED_INT_2_10_10_10_REV_EXT,
|
.gl_type = GL_UNSIGNED_INT_2_10_10_10_REV_EXT,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_XBGR16161616F,
|
.drm_format = DRM_FORMAT_XBGR16161616F,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_HALF_FLOAT_OES,
|
.gl_type = GL_HALF_FLOAT_OES,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_ABGR16161616F,
|
.drm_format = DRM_FORMAT_ABGR16161616F,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_HALF_FLOAT_OES,
|
.gl_type = GL_HALF_FLOAT_OES,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_XBGR16161616,
|
.drm_format = DRM_FORMAT_XBGR16161616,
|
||||||
.gl_internalformat = GL_RGBA16_EXT,
|
.gl_internalformat = GL_RGBA16_EXT,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_UNSIGNED_SHORT,
|
.gl_type = GL_UNSIGNED_SHORT,
|
||||||
.has_alpha = false,
|
.has_alpha = false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.drm_format = DRM_FORMAT_ABGR16161616,
|
.drm_format = DRM_FORMAT_ABGR16161616,
|
||||||
.gl_internalformat = GL_RGBA16_EXT,
|
.gl_internalformat = GL_RGBA16_EXT,
|
||||||
.gl_format = GL_RGBA,
|
.gl_format = GL_RGBA,
|
||||||
.gl_type = GL_UNSIGNED_SHORT,
|
.gl_type = GL_UNSIGNED_SHORT,
|
||||||
.has_alpha = true,
|
.has_alpha = true,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
|
@ -467,8 +467,8 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(const CTexture& tex, wlr_b
|
||||||
static auto* const PDIMINACTIVE = &g_pConfigManager->getConfigValuePtr("decoration:dim_inactive")->intValue;
|
static auto* const PDIMINACTIVE = &g_pConfigManager->getConfigValuePtr("decoration:dim_inactive")->intValue;
|
||||||
|
|
||||||
// get transform
|
// get transform
|
||||||
const auto TRANSFORM = wlr_output_transform_invert(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->transform);
|
const auto TRANSFORM = wlr_output_transform_invert(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->transform);
|
||||||
float matrix[9];
|
float matrix[9];
|
||||||
wlr_matrix_project_box(matrix, pBox, TRANSFORM, 0, m_RenderData.pMonitor->output->transform_matrix);
|
wlr_matrix_project_box(matrix, pBox, TRANSFORM, 0, m_RenderData.pMonitor->output->transform_matrix);
|
||||||
|
|
||||||
float glMatrix[9];
|
float glMatrix[9];
|
||||||
|
@ -605,7 +605,7 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, wlr_box* p
|
||||||
static auto* const PBLURPASSES = &g_pConfigManager->getConfigValuePtr("decoration:blur_passes")->intValue;
|
static auto* const PBLURPASSES = &g_pConfigManager->getConfigValuePtr("decoration:blur_passes")->intValue;
|
||||||
|
|
||||||
// prep damage
|
// prep damage
|
||||||
pixman_region32_t damage;
|
pixman_region32_t damage;
|
||||||
pixman_region32_init(&damage);
|
pixman_region32_init(&damage);
|
||||||
pixman_region32_copy(&damage, originalDamage);
|
pixman_region32_copy(&damage, originalDamage);
|
||||||
wlr_region_transform(&damage, &damage, wlr_output_transform_invert(m_RenderData.pMonitor->transform), m_RenderData.pMonitor->vecTransformedSize.x,
|
wlr_region_transform(&damage, &damage, wlr_output_transform_invert(m_RenderData.pMonitor->transform), m_RenderData.pMonitor->vecTransformedSize.x,
|
||||||
|
@ -619,7 +619,7 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, wlr_box* p
|
||||||
CFramebuffer* currentRenderToFB = &m_RenderData.pCurrentMonData->primaryFB;
|
CFramebuffer* currentRenderToFB = &m_RenderData.pCurrentMonData->primaryFB;
|
||||||
|
|
||||||
// declare the draw func
|
// declare the draw func
|
||||||
auto drawPass = [&](CShader* pShader, pixman_region32_t* pDamage) {
|
auto drawPass = [&](CShader* pShader, pixman_region32_t* pDamage) {
|
||||||
if (currentRenderToFB == PMIRRORFB)
|
if (currentRenderToFB == PMIRRORFB)
|
||||||
PMIRRORSWAPFB->bind();
|
PMIRRORSWAPFB->bind();
|
||||||
else
|
else
|
||||||
|
@ -823,7 +823,7 @@ void CHyprOpenGLImpl::renderTextureWithBlur(const CTexture& tex, wlr_box* pBox,
|
||||||
static auto* const PBLURXRAY = &g_pConfigManager->getConfigValuePtr("decoration:blur_xray")->intValue;
|
static auto* const PBLURXRAY = &g_pConfigManager->getConfigValuePtr("decoration:blur_xray")->intValue;
|
||||||
|
|
||||||
// make a damage region for this window
|
// make a damage region for this window
|
||||||
pixman_region32_t damage;
|
pixman_region32_t damage;
|
||||||
pixman_region32_init(&damage);
|
pixman_region32_init(&damage);
|
||||||
pixman_region32_intersect_rect(&damage, m_RenderData.pDamage, pBox->x, pBox->y, pBox->width, pBox->height); // clip it to the box
|
pixman_region32_intersect_rect(&damage, m_RenderData.pDamage, pBox->x, pBox->y, pBox->width, pBox->height); // clip it to the box
|
||||||
|
|
||||||
|
@ -902,7 +902,7 @@ void CHyprOpenGLImpl::renderTextureWithBlur(const CTexture& tex, wlr_box* pBox,
|
||||||
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
|
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
|
||||||
|
|
||||||
// stencil done. Render everything.
|
// stencil done. Render everything.
|
||||||
wlr_box MONITORBOX = {0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y};
|
wlr_box MONITORBOX = {0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y};
|
||||||
// render our great blurred FB
|
// render our great blurred FB
|
||||||
static auto* const PBLURIGNOREOPACITY = &g_pConfigManager->getConfigValuePtr("decoration:blur_ignore_opacity")->intValue;
|
static auto* const PBLURIGNOREOPACITY = &g_pConfigManager->getConfigValuePtr("decoration:blur_ignore_opacity")->intValue;
|
||||||
m_bEndFrame = true; // fix transformed
|
m_bEndFrame = true; // fix transformed
|
||||||
|
@ -1219,7 +1219,7 @@ void CHyprOpenGLImpl::renderSnapshot(CWindow** pWindow) {
|
||||||
wlr_box windowBox;
|
wlr_box windowBox;
|
||||||
// some mafs to figure out the correct box
|
// some mafs to figure out the correct box
|
||||||
// the originalClosedPos is relative to the monitor's pos
|
// the originalClosedPos is relative to the monitor's pos
|
||||||
Vector2D scaleXY = Vector2D((PMONITOR->scale * PWINDOW->m_vRealSize.vec().x / (PWINDOW->m_vOriginalClosedSize.x * PMONITOR->scale)),
|
Vector2D scaleXY = Vector2D((PMONITOR->scale * PWINDOW->m_vRealSize.vec().x / (PWINDOW->m_vOriginalClosedSize.x * PMONITOR->scale)),
|
||||||
(PMONITOR->scale * PWINDOW->m_vRealSize.vec().y / (PWINDOW->m_vOriginalClosedSize.y * PMONITOR->scale)));
|
(PMONITOR->scale * PWINDOW->m_vRealSize.vec().y / (PWINDOW->m_vOriginalClosedSize.y * PMONITOR->scale)));
|
||||||
|
|
||||||
windowBox.width = PMONITOR->vecTransformedSize.x * scaleXY.x;
|
windowBox.width = PMONITOR->vecTransformedSize.x * scaleXY.x;
|
||||||
|
@ -1394,7 +1394,7 @@ void CHyprOpenGLImpl::createBGTextureForMonitor(CMonitor* pMonitor) {
|
||||||
static auto* const PNOSPLASH = &g_pConfigManager->getConfigValuePtr("misc:disable_splash_rendering")->intValue;
|
static auto* const PNOSPLASH = &g_pConfigManager->getConfigValuePtr("misc:disable_splash_rendering")->intValue;
|
||||||
|
|
||||||
// release the last tex if exists
|
// release the last tex if exists
|
||||||
const auto PTEX = &m_mMonitorBGTextures[pMonitor];
|
const auto PTEX = &m_mMonitorBGTextures[pMonitor];
|
||||||
PTEX->destroyTexture();
|
PTEX->destroyTexture();
|
||||||
|
|
||||||
PTEX->allocate();
|
PTEX->allocate();
|
||||||
|
|
|
@ -38,15 +38,15 @@ struct SMonitorRenderData {
|
||||||
wlr_box backgroundTexBox;
|
wlr_box backgroundTexBox;
|
||||||
|
|
||||||
// Shaders
|
// Shaders
|
||||||
bool m_bShadersInitialized = false;
|
bool m_bShadersInitialized = false;
|
||||||
CShader m_shQUAD;
|
CShader m_shQUAD;
|
||||||
CShader m_shRGBA;
|
CShader m_shRGBA;
|
||||||
CShader m_shRGBX;
|
CShader m_shRGBX;
|
||||||
CShader m_shEXT;
|
CShader m_shEXT;
|
||||||
CShader m_shBLUR1;
|
CShader m_shBLUR1;
|
||||||
CShader m_shBLUR2;
|
CShader m_shBLUR2;
|
||||||
CShader m_shSHADOW;
|
CShader m_shSHADOW;
|
||||||
CShader m_shBORDER1;
|
CShader m_shBORDER1;
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -143,13 +143,13 @@ class CHyprOpenGLImpl {
|
||||||
void initShaders();
|
void initShaders();
|
||||||
|
|
||||||
// returns the out FB, can be either Mirror or MirrorSwap
|
// returns the out FB, can be either Mirror or MirrorSwap
|
||||||
CFramebuffer* blurMainFramebufferWithDamage(float a, wlr_box* pBox, pixman_region32_t* damage);
|
CFramebuffer* blurMainFramebufferWithDamage(float a, wlr_box* pBox, pixman_region32_t* damage);
|
||||||
|
|
||||||
void renderTextureInternalWithDamage(const CTexture&, wlr_box* pBox, float a, pixman_region32_t* damage, int round = 0, bool discardOpaque = false, bool noAA = false,
|
void renderTextureInternalWithDamage(const CTexture&, wlr_box* pBox, float a, pixman_region32_t* damage, int round = 0, bool discardOpaque = false, bool noAA = false,
|
||||||
bool allowCustomUV = false, bool allowDim = false);
|
bool allowCustomUV = false, bool allowDim = false);
|
||||||
void renderSplash(cairo_t* const, cairo_surface_t* const, double);
|
void renderSplash(cairo_t* const, cairo_surface_t* const, double);
|
||||||
|
|
||||||
void preBlurForCurrentMonitor();
|
void preBlurForCurrentMonitor();
|
||||||
|
|
||||||
friend class CHyprRenderer;
|
friend class CHyprRenderer;
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
inline static constexpr auto ROUNDED_SHADER_FUNC = [](const std::string colorVarName) -> std::string {
|
inline static constexpr auto ROUNDED_SHADER_FUNC = [](const std::string colorVarName) -> std::string {
|
||||||
return R"#(
|
return R"#(
|
||||||
|
|
||||||
// branchless baby!
|
// branchless baby!
|
||||||
highp vec2 pixCoord = vec2(gl_FragCoord);
|
highp vec2 pixCoord = vec2(gl_FragCoord);
|
||||||
|
@ -30,7 +30,8 @@ inline static constexpr auto ROUNDED_SHADER_FUNC = [](const std::string colorVar
|
||||||
|
|
||||||
distances /= 4.0;
|
distances /= 4.0;
|
||||||
|
|
||||||
)#" + colorVarName + R"#( = )#" + colorVarName + R"#( * distances;
|
)#" +
|
||||||
|
colorVarName + R"#( = )#" + colorVarName + R"#( * distances;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -66,7 +67,8 @@ void main() {
|
||||||
vec4 pixColor = v_color;
|
vec4 pixColor = v_color;
|
||||||
|
|
||||||
if (radius > 0.0) {
|
if (radius > 0.0) {
|
||||||
)#" + ROUNDED_SHADER_FUNC("pixColor") + R"#(
|
)#" +
|
||||||
|
ROUNDED_SHADER_FUNC("pixColor") + R"#(
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_FragColor = pixColor;
|
gl_FragColor = pixColor;
|
||||||
|
@ -114,7 +116,8 @@ void main() {
|
||||||
pixColor[2] = pixColor[2] * tint[2];
|
pixColor[2] = pixColor[2] * tint[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
)#" + ROUNDED_SHADER_FUNC("pixColor") + R"#(
|
)#" +
|
||||||
|
ROUNDED_SHADER_FUNC("pixColor") + R"#(
|
||||||
|
|
||||||
gl_FragColor = pixColor * alpha;
|
gl_FragColor = pixColor * alpha;
|
||||||
})#";
|
})#";
|
||||||
|
@ -149,7 +152,8 @@ void main() {
|
||||||
pixColor[2] = pixColor[2] * tint[2];
|
pixColor[2] = pixColor[2] * tint[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
)#" + ROUNDED_SHADER_FUNC("pixColor") + R"#(
|
)#" +
|
||||||
|
ROUNDED_SHADER_FUNC("pixColor") + R"#(
|
||||||
|
|
||||||
gl_FragColor = pixColor * alpha;
|
gl_FragColor = pixColor * alpha;
|
||||||
})#";
|
})#";
|
||||||
|
@ -234,7 +238,8 @@ void main() {
|
||||||
pixColor[2] = pixColor[2] * tint[2];
|
pixColor[2] = pixColor[2] * tint[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
)#" + ROUNDED_SHADER_FUNC("pixColor") + R"#(
|
)#" +
|
||||||
|
ROUNDED_SHADER_FUNC("pixColor") + R"#(
|
||||||
|
|
||||||
gl_FragColor = pixColor * alpha;
|
gl_FragColor = pixColor * alpha;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue