mirror of
https://github.com/hyprwm/hyprlock.git
synced 2024-12-22 05:19:48 +01:00
renderer: add missing widget.cpp
This commit is contained in:
parent
9074ff702d
commit
13124c6a96
1 changed files with 57 additions and 0 deletions
57
src/renderer/widgets/IWidget.cpp
Normal file
57
src/renderer/widgets/IWidget.cpp
Normal file
|
@ -0,0 +1,57 @@
|
|||
#include "IWidget.hpp"
|
||||
#include "../../helpers/Log.hpp"
|
||||
#include <chrono>
|
||||
|
||||
Vector2D IWidget::posFromHVAlign(const Vector2D& viewport, const Vector2D& size, const Vector2D& offset, const std::string& halign, const std::string& valign) {
|
||||
Vector2D pos = offset;
|
||||
if (halign == "center")
|
||||
pos.x += viewport.x / 2.0 - size.x / 2.0;
|
||||
else if (halign == "left")
|
||||
pos.x += 0;
|
||||
else if (halign == "right")
|
||||
pos.x += viewport.x - size.x;
|
||||
else if (halign != "none")
|
||||
Debug::log(ERR, "IWidget: invalid halign {}", halign);
|
||||
|
||||
if (valign == "center")
|
||||
pos.y += viewport.y / 2.0 - size.y / 2.0;
|
||||
else if (valign == "top")
|
||||
pos.y += viewport.y - size.y;
|
||||
else if (valign == "bottom")
|
||||
pos.y += size.y;
|
||||
else if (valign != "none")
|
||||
Debug::log(ERR, "IWidget: invalid halign {}", halign);
|
||||
|
||||
return pos;
|
||||
}
|
||||
|
||||
static void replaceAll(std::string& str, const std::string& from, const std::string& to) {
|
||||
if (from.empty())
|
||||
return;
|
||||
size_t pos = 0;
|
||||
while ((pos = str.find(from, pos)) != std::string::npos) {
|
||||
str.replace(pos, from.length(), to);
|
||||
pos += to.length();
|
||||
}
|
||||
}
|
||||
|
||||
static std::string getTime() {
|
||||
const auto HHMMSS = std::chrono::hh_mm_ss{std::chrono::system_clock::now() - std::chrono::floor<std::chrono::days>(std::chrono::system_clock::now())};
|
||||
const auto HRS = HHMMSS.hours().count();
|
||||
const auto MINS = HHMMSS.minutes().count();
|
||||
return (HRS < 10 ? "0" : "") + std::to_string(HRS) + ":" + (MINS < 10 ? "0" : "") + std::to_string(MINS);
|
||||
}
|
||||
|
||||
IWidget::SFormatResult IWidget::formatString(std::string in) {
|
||||
|
||||
IWidget::SFormatResult result;
|
||||
replaceAll(in, "$USER", std::string{getlogin()});
|
||||
|
||||
if (in.contains("$TIME")) {
|
||||
replaceAll(in, "$TIME", getTime());
|
||||
result.updateEveryMs = result.updateEveryMs != 0 && result.updateEveryMs < 1000 ? result.updateEveryMs : 1000;
|
||||
}
|
||||
|
||||
result.formatted = in;
|
||||
return result;
|
||||
}
|
Loading…
Reference in a new issue