feat: add splash support

This commit is contained in:
vaxerski 2023-04-09 18:47:49 +01:00
parent 756fccfc53
commit e95b8d59f3
5 changed files with 49 additions and 1 deletions

View file

@ -473,6 +473,32 @@ void CHyprpaper::renderWallpaperForMonitor(SMonitor* pMonitor) {
cairo_set_source_surface(PCAIRO, PWALLPAPERTARGET->m_pCairoSurface, origin.x, origin.y); cairo_set_source_surface(PCAIRO, PWALLPAPERTARGET->m_pCairoSurface, origin.x, origin.y);
cairo_paint(PCAIRO); cairo_paint(PCAIRO);
if (g_pHyprpaper->m_bRenderSplash && getenv("HYPRLAND_INSTANCE_SIGNATURE")) {
auto SPLASH = execAndGet("hyprctl splash");
SPLASH.pop_back();
Debug::log(LOG, "Rendering splash: %s", SPLASH.c_str());
cairo_select_font_face(PCAIRO, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
const auto FONTSIZE = (int)(DIMENSIONS.y / 76.0 / scale);
cairo_set_font_size(PCAIRO, FONTSIZE);
cairo_set_source_rgba(PCAIRO, 1.0, 1.0, 1.0, 0.32);
cairo_text_extents_t textExtents;
cairo_text_extents(PCAIRO, SPLASH.c_str(), &textExtents);
cairo_move_to(PCAIRO, ((DIMENSIONS.x - textExtents.width * scale) / 2.0) / scale, (DIMENSIONS.y * 0.99 - textExtents.height * scale) / scale);
Debug::log(LOG, "Splash font size: %d, pos: %.2f, %.2f", FONTSIZE, (DIMENSIONS.x - textExtents.width) / 2.0 / scale, DIMENSIONS.y * 0.95 - textExtents.height / scale);
cairo_show_text(PCAIRO, SPLASH.c_str());
cairo_surface_flush(PWALLPAPERTARGET->m_pCairoSurface);
}
cairo_restore(PCAIRO); cairo_restore(PCAIRO);
if (pMonitor->pCurrentLayerSurface) { if (pMonitor->pCurrentLayerSurface) {

View file

@ -37,6 +37,7 @@ public:
std::vector<std::unique_ptr<SMonitor>> m_vMonitors; std::vector<std::unique_ptr<SMonitor>> m_vMonitors;
bool m_bIPCEnabled = true; bool m_bIPCEnabled = true;
bool m_bRenderSplash = false;
std::string m_szExplicitConfigPath; std::string m_szExplicitConfigPath;
bool m_bNoFractionalScale = false; bool m_bNoFractionalScale = false;

View file

@ -107,6 +107,8 @@ void CConfigManager::parseKeyword(const std::string& COMMAND, const std::string&
handleUnload(COMMAND, VALUE); handleUnload(COMMAND, VALUE);
else if (COMMAND == "ipc") else if (COMMAND == "ipc")
g_pHyprpaper->m_bIPCEnabled = VALUE == "1" || VALUE == "yes" || VALUE == "on" || VALUE == "true"; g_pHyprpaper->m_bIPCEnabled = VALUE == "1" || VALUE == "yes" || VALUE == "on" || VALUE == "true";
else if (COMMAND == "splash")
g_pHyprpaper->m_bRenderSplash = VALUE == "1" || VALUE == "yes" || VALUE == "on" || VALUE == "true";
else else
parseError = "unknown keyword " + COMMAND; parseError = "unknown keyword " + COMMAND;
} }

View file

@ -1,4 +1,7 @@
#include "MiscFunctions.hpp" #include "MiscFunctions.hpp"
#include <array>
#include "../debug/Log.hpp"
#include <memory>
bool vectorDeltaLessThan(const Vector2D& a, const Vector2D& b, const float& delta) { bool vectorDeltaLessThan(const Vector2D& a, const Vector2D& b, const float& delta) {
return std::abs(a.x - b.x) < delta && std::abs(a.y - b.y) < delta; return std::abs(a.x - b.x) < delta && std::abs(a.y - b.y) < delta;
@ -7,3 +10,17 @@ bool vectorDeltaLessThan(const Vector2D& a, const Vector2D& b, const float& delt
bool vectorDeltaLessThan(const Vector2D& a, const Vector2D& b, const Vector2D& delta) { bool vectorDeltaLessThan(const Vector2D& a, const Vector2D& b, const Vector2D& delta) {
return std::abs(a.x - b.x) < delta.x && std::abs(a.y - b.y) < delta.y; return std::abs(a.x - b.x) < delta.x && std::abs(a.y - b.y) < delta.y;
} }
std::string execAndGet(const char* cmd) {
std::array<char, 128> buffer;
std::string result;
const std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose);
if (!pipe) {
Debug::log(ERR, "execAndGet: failed in pipe");
return "";
}
while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
result += buffer.data();
}
return result;
}

View file

@ -1,5 +1,7 @@
#pragma once #pragma once
#include <string>
#include "Vector2D.hpp" #include "Vector2D.hpp"
bool vectorDeltaLessThan(const Vector2D& a, const Vector2D& b, const float& delta); bool vectorDeltaLessThan(const Vector2D& a, const Vector2D& b, const float& delta);
bool vectorDeltaLessThan(const Vector2D& a, const Vector2D& b, const Vector2D& delta); bool vectorDeltaLessThan(const Vector2D& a, const Vector2D& b, const Vector2D& delta);
std::string execAndGet(const char*);