Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

55 changes: 41 additions & 14 deletions utils/dialog/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <hyprutils/string/String.hpp>

#include <print>
#include <algorithm>

using namespace Hyprutils::Memory;
using namespace Hyprutils::Math;
Expand All @@ -25,6 +26,7 @@ using namespace Hyprtoolkit;
#define UP CUniquePointer

static SP<IBackend> backend;
static SP<IWindow> window;

//
int main(int argc, char** argv, char** envp) {
Expand Down Expand Up @@ -97,25 +99,22 @@ int main(int argc, char** argv, char** envp) {
replaceInString(textStr, "<br/>", "\n");
replaceInString(textStr, "\\n", "\n");

//
auto window =
CWindowBuilder::begin()->preferredSize({480, 180})->minSize({480, 180})->maxSize({480, 180})->appTitle(std::move(appTitle))->appClass("hyprland-dialog")->commence();

window->m_rootElement->addChild(CRectangleBuilder::begin()->color([] { return backend->getPalette()->m_colors.background; })->commence());
const auto FONT_SIZE = CFontSize{CFontSize::HT_FONT_TEXT}.ptSize();
const float WINDOW_X = FONT_SIZE * 50.F;

auto layout = CColumnLayoutBuilder::begin()->size({CDynamicSize::HT_SIZE_PERCENT, CDynamicSize::HT_SIZE_PERCENT, {1.F, 1.F}})->commence();
// for now do auto to estimate size
auto layout = CColumnLayoutBuilder::begin()->size({CDynamicSize::HT_SIZE_ABSOLUTE, CDynamicSize::HT_SIZE_AUTO, {WINDOW_X, 1.F}})->commence();
layout->setMargin(3);

auto layoutInner = CColumnLayoutBuilder::begin()->size({CDynamicSize::HT_SIZE_PERCENT, CDynamicSize::HT_SIZE_AUTO, {0.85F, 1.F}})->commence();

window->m_rootElement->addChild(layout);

layout->addChild(layoutInner);
layoutInner->setGrow(true);
layoutInner->setPositionMode(Hyprtoolkit::IElement::HT_POSITION_ABSOLUTE);
layoutInner->setPositionFlag(Hyprtoolkit::IElement::HT_POSITION_FLAG_HCENTER, true);

auto title = CTextBuilder::begin()->text(std::move(titleStr))->fontSize({CFontSize::HT_FONT_H2})->color([] { return backend->getPalette()->m_colors.text; })->commence();
auto title =
CTextBuilder::begin()->text(std::move(titleStr))->fontSize({CFontSize::HT_FONT_H2})->async(false)->color([] { return backend->getPalette()->m_colors.text; })->commence();

auto hr = CRectangleBuilder::begin() //
->color([] { return CHyprColor{backend->getPalette()->m_colors.text.darken(0.65)}; })
Expand All @@ -124,18 +123,22 @@ int main(int argc, char** argv, char** envp) {

hr->setMargin(4);

auto content =
CTextBuilder::begin()->text(std::move(textStr))->fontSize(CFontSize{CFontSize::HT_FONT_TEXT})->color([] { return backend->getPalette()->m_colors.text; })->commence();
auto content = CTextBuilder::begin()
->text(std::move(textStr))
->fontSize(CFontSize{CFontSize::HT_FONT_TEXT})
->async(false)
->color([] { return backend->getPalette()->m_colors.text; })
->commence();

std::vector<SP<CButtonElement>> buttons;

for (const auto& bstr : buttonsStrs) {
buttons.emplace_back(CButtonBuilder::begin()
->label(std::string{bstr})
->onMainClick([w = WP<IWindow>{window}, str = bstr](auto) {
->onMainClick([str = bstr](auto) {
std::println("{}", str);
if (w)
w->close();
if (window)
window->close();
backend->destroy();
})
->size({CDynamicSize::HT_SIZE_AUTO, CDynamicSize::HT_SIZE_AUTO, {1, 1}})
Expand All @@ -159,6 +162,30 @@ int main(int argc, char** argv, char** envp) {

layout->addChild(layout2);

{
// calculate the layout size before we open the window to size it properly
SP<CNullElement> null = CNullBuilder::begin()->size({CDynamicSize::HT_SIZE_ABSOLUTE, CDynamicSize::HT_SIZE_ABSOLUTE, {WINDOW_X, 99999999.F}})->commence();

null->addChild(layout);
layout->forceReposition();
}

const float WINDOW_Y = layout->size().y + 50 /* pad */;

layout->rebuild()->size({CDynamicSize::HT_SIZE_PERCENT, CDynamicSize::HT_SIZE_PERCENT, {1.F, 1.F}})->commence();

//
window = CWindowBuilder::begin()
->preferredSize({WINDOW_X, WINDOW_Y})
->minSize({WINDOW_X, WINDOW_Y})
->maxSize({WINDOW_X, WINDOW_Y})
->appTitle(std::move(appTitle))
->appClass("hyprland-dialog")
->commence();

window->m_rootElement->addChild(CRectangleBuilder::begin()->color([] { return backend->getPalette()->m_colors.background; })->commence());
window->m_rootElement->addChild(layout);

window->m_events.closeRequest.listenStatic([w = WP<IWindow>{window}] {
w->close();
backend->destroy();
Expand Down