diff --git a/protocols/net-tapesoftware-dwl-wm-unstable-v1.xml b/protocols/net-tapesoftware-dwl-wm-unstable-v1.xml index 2c43631..ff53fbf 100644 --- a/protocols/net-tapesoftware-dwl-wm-unstable-v1.xml +++ b/protocols/net-tapesoftware-dwl-wm-unstable-v1.xml @@ -49,6 +49,12 @@ + + + + + + @@ -66,8 +72,14 @@ + + + + + + - + @@ -75,6 +87,18 @@ + + + + + + + + + + + + diff --git a/src/bar.cpp b/src/bar.cpp index 6f13a0a..896b3bd 100644 --- a/src/bar.cpp +++ b/src/bar.cpp @@ -55,9 +55,6 @@ void Bar::create(wl_output *output) zwlr_layer_surface_v1_set_size(_layerSurface.get(), 0, barSize); zwlr_layer_surface_v1_set_exclusive_zone(_layerSurface.get(), barSize); wl_surface_commit(_surface.get()); - - _windowTitle = "Window title"; - _status = "Status"; } void Bar::click(int x, int) @@ -87,10 +84,10 @@ void Bar::setTag(int tag, znet_tapesoftware_dwl_wm_monitor_v1_tag_state state, i t.focusedClient = focusedClient; } -void Bar::setStatus(const QString &status) -{ - _status = status; -} +void Bar::setSelected(bool selected) { _selected = selected; } +void Bar::setLayout(int layout) { _layout = layout; } +void Bar::setTitle(const char *title) { _title = title; } +void Bar::setStatus(const QString &status) { _status = status; } void Bar::layerSurfaceConfigure(uint32_t serial, uint32_t width, uint32_t height) { @@ -114,8 +111,9 @@ void Bar::render() painter.setFont(font); renderTags(); - setColorScheme(colorActive); - renderText(_windowTitle); + setColorScheme(_selected ? colorActive : colorInactive); + renderText(layoutNames[_layout]); + renderText(_title); renderStatus(); _painter = nullptr; @@ -161,7 +159,7 @@ void Bar::renderText(const QString &text) void Bar::renderStatus() { _painter->fillRect(_x, 0, _bufs->width-_x, _bufs->height, _painter->brush()); - auto size = textWidth(_status) + paddingX*2; + auto size = textWidth(_status) + paddingX; _x = _bufs->width - size; _painter->drawText(paddingX+_x, _textY, _status); _x = _bufs->width; diff --git a/src/bar.hpp b/src/bar.hpp index ad766de..00d156d 100644 --- a/src/bar.hpp +++ b/src/bar.hpp @@ -32,7 +32,9 @@ class Bar { bool _invalid {false}; std::vector _tags; - QString _windowTitle; + int _layout; + bool _selected; + QString _title; QString _status; void layerSurfaceConfigure(uint32_t serial, uint32_t width, uint32_t height); @@ -46,7 +48,10 @@ public: Bar(); const wl_surface* surface() const; void create(wl_output *output); + void setSelected(bool selected); void setTag(int tag, znet_tapesoftware_dwl_wm_monitor_v1_tag_state state, int numClients, int focusedClient); + void setLayout(int layout); + void setTitle(const char *title); void setStatus(const QString &status); void invalidate(); void click(int x, int y); diff --git a/src/common.hpp b/src/common.hpp index a45bd5f..1b3c72c 100644 --- a/src/common.hpp +++ b/src/common.hpp @@ -15,6 +15,7 @@ extern wl_compositor *compositor; extern wl_shm *shm; extern zwlr_layer_shell_v1 *wlrLayerShell; extern std::vector tagNames; +extern std::vector layoutNames; struct ColorScheme { QColor fg, bg; diff --git a/src/config.hpp b/src/config.hpp index c9b5799..fc8ed32 100644 --- a/src/config.hpp +++ b/src/config.hpp @@ -11,8 +11,8 @@ constexpr int paddingY = 3; constexpr const char *fontFamily = "Source Sans Pro"; constexpr int fontSizePt = 12; -constexpr bool fontBold = true; +constexpr bool fontBold = false; -constexpr ColorScheme colorInactive = {QColor(255, 255, 255), QColor(0, 0, 0)}; -constexpr ColorScheme colorActive = {QColor(255, 255, 255), QColor(0, 0, 255)}; +constexpr ColorScheme colorInactive = {QColor(0xbb, 0xbb, 0xbb), QColor(0x22, 0x22, 0x22)}; +constexpr ColorScheme colorActive = {QColor(0xee, 0xee, 0xee), QColor(0x00, 0x55, 0x77)}; constexpr ColorScheme colorUrgent = {colorActive.bg, colorActive.fg}; diff --git a/src/main.cpp b/src/main.cpp index 8814903..471ac70 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -43,6 +43,7 @@ wl_shm *shm; zwlr_layer_shell_v1 *wlrLayerShell; znet_tapesoftware_dwl_wm_v1 *dwlWm; std::vector tagNames; +std::vector layoutNames; static bool ready; static std::vector monitors; static QString lastStatus; @@ -131,13 +132,28 @@ static const struct znet_tapesoftware_dwl_wm_v1_listener dwlWmListener = { .tag = [](void*, znet_tapesoftware_dwl_wm_v1*, const char *name) { tagNames.push_back(name); }, + .layout = [](void*, znet_tapesoftware_dwl_wm_v1*, const char *name) { + layoutNames.push_back(name); + }, }; static const struct znet_tapesoftware_dwl_wm_monitor_v1_listener dwlWmMonitorListener { + .selected = [](void *mv, znet_tapesoftware_dwl_wm_monitor_v1*, int32_t selected) { + auto mon = static_cast(mv); + mon->bar->setSelected(selected); + }, .tag = [](void *mv, znet_tapesoftware_dwl_wm_monitor_v1*, int32_t tag, uint32_t state, int32_t numClients, int32_t focusedClient) { auto mon = static_cast(mv); mon->bar->setTag(tag, static_cast(state), numClients, focusedClient); }, + .layout = [](void *mv, znet_tapesoftware_dwl_wm_monitor_v1*, int32_t layout) { + auto mon = static_cast(mv); + mon->bar->setLayout(layout); + }, + .title = [](void *mv, znet_tapesoftware_dwl_wm_monitor_v1*, const char *title) { + auto mon = static_cast(mv); + mon->bar->setTitle(title); + }, .frame = [](void *mv, znet_tapesoftware_dwl_wm_monitor_v1*) { auto mon = static_cast(mv); if (mon->created) {