Skip to content

Commit

Permalink
add hyprctl decorations
Browse files Browse the repository at this point in the history
modified:   hyprctl/main.cpp
modified:   src/debug/HyprCtl.cpp
modified:   src/render/decorations/CHyprBorderDecoration.cpp
modified:   src/render/decorations/CHyprBorderDecoration.hpp
modified:   src/render/decorations/CHyprDropShadowDecoration.cpp
modified:   src/render/decorations/CHyprDropShadowDecoration.hpp
modified:   src/render/decorations/CHyprGroupBarDecoration.cpp
modified:   src/render/decorations/CHyprGroupBarDecoration.hpp
modified:   src/render/decorations/IHyprWindowDecoration.cpp
modified:   src/render/decorations/IHyprWindowDecoration.hpp
  • Loading branch information
MightyPlaza committed Dec 28, 2023
1 parent e5eb11a commit 78e18bd
Show file tree
Hide file tree
Showing 10 changed files with 59 additions and 4 deletions.
3 changes: 3 additions & 0 deletions hyprctl/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ const std::string USAGE = R"#(usage: hyprctl [(opt)flags] [command] [(opt)args]
binds
clients
cursorpos
decorations
devices
dispatch
getoption
Expand Down Expand Up @@ -423,6 +424,8 @@ int main(int argc, char** argv) {
request(fullRequest, 1);
else if (fullRequest.contains("/keyword"))
request(fullRequest, 2);
else if (fullRequest.contains("/decoration"))
request(fullRequest, 1);
else if (fullRequest.contains("/hyprpaper"))
requestHyprpaper(fullRequest);
else if (fullRequest.contains("/layouts"))
Expand Down
28 changes: 28 additions & 0 deletions src/debug/HyprCtl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1174,6 +1174,32 @@ std::string dispatchGetOption(std::string request, HyprCtl::eHyprCtlOutputFormat
}
}

std::string decorationRequest(std::string request, HyprCtl::eHyprCtlOutputFormat format) {
CVarList vars(request, 0, ' ');
const auto PWINDOW = g_pCompositor->getWindowByRegex(vars[1]);

if (!PWINDOW)
return "none";

std::string result = "";
if (format == HyprCtl::FORMAT_JSON) {
result += "[";
for (auto& wd : PWINDOW->m_dWindowDecorations) {
result += "{\n\"decorationName\": \"" + wd->getDisplayName() + "\",\n\"priority\": " + std::to_string(wd->getPositioningInfo().priority) + "\n},";
}

trimTrailingComma(result);
result += "]";
} else {
result = +"Decoration\tPriority\n";
for (auto& wd : PWINDOW->m_dWindowDecorations) {
result += wd->getDisplayName() + "\t" + std::to_string(wd->getPositioningInfo().priority) + "\n";
}
}

return result;
}

void createOutputIter(wlr_backend* backend, void* data) {
const auto DATA = (std::pair<std::string, bool>*)data;

Expand Down Expand Up @@ -1415,6 +1441,8 @@ std::string getReply(std::string request) {
return dispatchSetCursor(request);
else if (request.starts_with("getoption"))
return dispatchGetOption(request, format);
else if (request.starts_with("decorations"))
return decorationRequest(request, format);
else if (request.starts_with("[[BATCH]]"))
return dispatchBatch(request);

Expand Down
6 changes: 5 additions & 1 deletion src/render/decorations/CHyprBorderDecoration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@ uint64_t CHyprBorderDecoration::getDecorationFlags() {
return *PPARTOFWINDOW && !doesntWantBorders() ? DECORATION_PART_OF_MAIN_WINDOW : 0;
}

std::string CHyprBorderDecoration::getDisplayName() {
return "Border";
}

bool CHyprBorderDecoration::doesntWantBorders() {
return !m_pWindow->m_sSpecialRenderData.border || m_pWindow->m_bX11DoesntWantBorders;
}
}
4 changes: 3 additions & 1 deletion src/render/decorations/CHyprBorderDecoration.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ class CHyprBorderDecoration : public IHyprWindowDecoration {

virtual uint64_t getDecorationFlags();

virtual std::string getDisplayName();

private:
SWindowDecorationExtents m_seExtents;
SWindowDecorationExtents m_seReportedExtents;
Expand All @@ -36,4 +38,4 @@ class CHyprBorderDecoration : public IHyprWindowDecoration {

CBox assignedBoxGlobal();
bool doesntWantBorders();
};
};
4 changes: 4 additions & 0 deletions src/render/decorations/CHyprDropShadowDecoration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ uint64_t CHyprDropShadowDecoration::getDecorationFlags() {
return DECORATION_NON_SOLID;
}

std::string CHyprDropShadowDecoration::getDisplayName() {
return "Drop Shadow";
}

void CHyprDropShadowDecoration::damageEntire() {
static auto* const PSHADOWS = &g_pConfigManager->getConfigValuePtr("decoration:drop_shadow")->intValue;

Expand Down
4 changes: 3 additions & 1 deletion src/render/decorations/CHyprDropShadowDecoration.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ class CHyprDropShadowDecoration : public IHyprWindowDecoration {

virtual uint64_t getDecorationFlags();

virtual std::string getDisplayName();

private:
SWindowDecorationExtents m_seExtents;
SWindowDecorationExtents m_seReportedExtents;
Expand All @@ -34,4 +36,4 @@ class CHyprDropShadowDecoration : public IHyprWindowDecoration {

CBox m_bLastWindowBox = {0};
CBox m_bLastWindowBoxWithDecos = {0};
};
};
4 changes: 4 additions & 0 deletions src/render/decorations/CHyprGroupBarDecoration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,10 @@ uint64_t CHyprGroupBarDecoration::getDecorationFlags() {
return DECORATION_ALLOWS_MOUSE_INPUT;
}

std::string CHyprGroupBarDecoration::getDisplayName() {
return "GroupBar";
}

CBox CHyprGroupBarDecoration::assignedBoxGlobal() {
CBox box = m_bAssignedBox;
box.translate(g_pDecorationPositioner->getEdgeDefinedPoint(DECORATION_EDGE_TOP, m_pWindow));
Expand Down
2 changes: 2 additions & 0 deletions src/render/decorations/CHyprGroupBarDecoration.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ class CHyprGroupBarDecoration : public IHyprWindowDecoration {

virtual uint64_t getDecorationFlags();

virtual std::string getDisplayName();

private:
SWindowDecorationExtents m_seExtents;

Expand Down
6 changes: 5 additions & 1 deletion src/render/decorations/IHyprWindowDecoration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,8 @@ eDecorationLayer IHyprWindowDecoration::getDecorationLayer() {

uint64_t IHyprWindowDecoration::getDecorationFlags() {
return 0;
}
}

std::string IHyprWindowDecoration::getDisplayName() {
return std::string("Generic Decoration");
}
2 changes: 2 additions & 0 deletions src/render/decorations/IHyprWindowDecoration.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ class IHyprWindowDecoration {

virtual uint64_t getDecorationFlags();

virtual std::string getDisplayName();

private:
CWindow* m_pWindow = nullptr;

Expand Down

0 comments on commit 78e18bd

Please sign in to comment.