From 5780a7bddb932d0ab77ac887f2743e4dc30a4820 Mon Sep 17 00:00:00 2001 From: roosslan Date: Tue, 13 Oct 2026 00:06:05 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BB=D0=B8=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BA=D0=BD=D0=B0=20=D0=BA=20=D0=BA?= =?UTF-8?q?=D1=80=D0=B0=D1=8F=D0=BC=20=D1=8D=D0=BA=D1=80=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fuzzy_clock.pro | 2 ++ fuzzy_clock_window.cpp | 52 ++++++++++++++++++++++++++++++++++++++---- fuzzy_clock_window.h | 5 ++++ fuzzy_dock.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++ fuzzy_dock.h | 23 +++++++++++++++++++ 5 files changed, 130 insertions(+), 4 deletions(-) create mode 100644 fuzzy_dock.cpp create mode 100644 fuzzy_dock.h diff --git a/fuzzy_clock.pro b/fuzzy_clock.pro index aa0f092..981a3ba 100644 --- a/fuzzy_clock.pro +++ b/fuzzy_clock.pro @@ -16,11 +16,13 @@ win32: RC_FILE = resource.rc HEADERS += \ fuzzy_clock.h \ + fuzzy_dock.h \ fuzzy_helper.h \ fuzzy_clock_window.h SOURCES += \ fuzzy_clock.cpp \ + fuzzy_dock.cpp \ fuzzy_helper.cpp \ fuzzy_clock_window.cpp \ main.cpp diff --git a/fuzzy_clock_window.cpp b/fuzzy_clock_window.cpp index 1842e1d..eb0d381 100644 --- a/fuzzy_clock_window.cpp +++ b/fuzzy_clock_window.cpp @@ -5,6 +5,7 @@ #include #include "fuzzy_clock_window.h" +#include "fuzzy_dock.h" #include "fuzzy_helper.h" namespace { @@ -42,6 +43,9 @@ const Opacity Opacities[] = { { "10%", 0.1 }, { "50%", 0.5 }, { "100%", 1.0 } }; const char *const FuzzinessNames[] = { "Четверть пятого", "Вечер", "Середина недели" }; +// на каком расстоянии от края экрана окно к нему притягивается +constexpr int SnapDistance = 15; + QString autostartCommand() { return "\"" + QDir::toNativeSeparators(QCoreApplication::applicationFilePath()) + "\""; @@ -104,6 +108,15 @@ fuzzyClockWindow::fuzzyClockWindow() restorePosition(); setWindowOpacity(m_Settings.value("Opacity", 1.0).toDouble()); + // панель задач переместилась, сменилось разрешение - окно остаётся у своих краёв + const auto watchScreen = [this](QScreen *screen) { + connect(screen, &QScreen::availableGeometryChanged, this, &fuzzyClockWindow::applyDock); + }; + for (QScreen *screen : QGuiApplication::screens()) + watchScreen(screen); + connect(qApp, &QGuiApplication::screenAdded, this, watchScreen); + connect(qApp, &QGuiApplication::screenRemoved, this, &fuzzyClockWindow::applyDock, Qt::QueuedConnection); + /* Context menu */ createMenu(); @@ -133,6 +146,7 @@ void fuzzyClockWindow::updateTime() setToolTip(QLocale(QLocale::Russian).toString(now, "HH:mm, dddd, d MMMM")); m_label->adjustSize(); // учитывает шрифт из CSS (вызывает ensurePolished) setFixedSize(m_label->size() + QSize(10, 10)); + applyDock(); // при прилипании справа или снизу окно растёт внутрь экрана // следующее обновление - в начале следующей минуты m_timer.start(60000 - now.time().msecsSinceStartOfDay() % 60000); @@ -190,17 +204,45 @@ void fuzzyClockWindow::mousePressEvent(QMouseEvent *event) mpos = event->pos(); } -// Drag window without title +// Drag window without title; Shift отключает прилипание к краям void fuzzyClockWindow::mouseMoveEvent(QMouseEvent *event) { - if (event->buttons() & Qt::LeftButton) - move(pos() + event->pos() - mpos); + if (!(event->buttons() & Qt::LeftButton)) + return; + const QPoint p = pos() + event->pos() - mpos; + if (event->modifiers() & Qt::ShiftModifier) + move(p); + else + move(fuzzyDock::snapped(QRect(p, size()), dockArea(p), SnapDistance)); } void fuzzyClockWindow::mouseReleaseEvent(QMouseEvent *event) { - if (event->button() == Qt::LeftButton) + if (event->button() == Qt::LeftButton) { + m_dock = fuzzyDock::edges(geometry(), dockArea(pos())); savePosition(); // перетаскивание закончено + } +} + +QRect fuzzyClockWindow::dockArea(const QPoint &topLeft) const +{ + const QScreen *screen = QGuiApplication::screenAt(QRect(topLeft, size()).center()); + if (!screen) + screen = QGuiApplication::screenAt(pos()); + if (!screen) + screen = QGuiApplication::primaryScreen(); + return screen->availableGeometry(); // без панели задач +} + +void fuzzyClockWindow::applyDock() +{ + if (!m_dock) + return; + const QPoint p = fuzzyDock::docked(geometry(), dockArea(pos()), m_dock); + if (p != pos()) { + move(p); + savePosition(); + } } void fuzzyClockWindow::closeEvent(QCloseEvent *event) @@ -226,6 +268,7 @@ void fuzzyClockWindow::savePosition() m_Settings.setValue("currentPath", QDir::currentPath()); m_Settings.setValue("Top", pos().y()); m_Settings.setValue("Left", pos().x()); + m_Settings.setValue("Dock", m_dock); } void fuzzyClockWindow::restorePosition() @@ -235,6 +278,7 @@ void fuzzyClockWindow::restorePosition() if (!QGuiApplication::screenAt(p)) p = QGuiApplication::primaryScreen()->availableGeometry().center(); move(p); + m_dock = m_Settings.value("Dock", 0).toInt(); // применяется после первого расчёта размера в updateTime() } void fuzzyClockWindow::createMenu() diff --git a/fuzzy_clock_window.h b/fuzzy_clock_window.h index 3e5589c..79a1f49 100644 --- a/fuzzy_clock_window.h +++ b/fuzzy_clock_window.h @@ -48,6 +48,10 @@ private slots: void restorePosition(); void savePosition(); + // Прилипание к краям экрана (расчёты - в fuzzy_dock.h) + QRect dockArea(const QPoint &topLeft) const; // рабочая область экрана, на котором окажется окно + void applyDock(); // удержать прижатые края при смене размера окна или экрана + fuzzyClock::Fuzziness fuzziness() const; fuzzyClock m_clock; @@ -55,6 +59,7 @@ private slots: QTimer m_timer; QSettings m_Settings; QPoint mpos; + int m_dock = 0; // сочетание fuzzyDock::Edge QMenu *m_menu; QAction *m_autostartAct; diff --git a/fuzzy_dock.cpp b/fuzzy_dock.cpp new file mode 100644 index 0000000..7c94494 --- /dev/null +++ b/fuzzy_dock.cpp @@ -0,0 +1,52 @@ +#include + +#include "fuzzy_dock.h" + +namespace fuzzyDock { + +QPoint snapped(const QRect &window, const QRect &area, int distance) +{ + QPoint p = window.topLeft(); + + if (qAbs(window.left() - area.left()) <= distance) + p.setX(area.left()); + else if (qAbs(window.right() - area.right()) <= distance) + p.setX(area.right() - window.width() + 1); + + if (qAbs(window.top() - area.top()) <= distance) + p.setY(area.top()); + else if (qAbs(window.bottom() - area.bottom()) <= distance) + p.setY(area.bottom() - window.height() + 1); + + return p; +} + +int edges(const QRect &window, const QRect &area) +{ + int result = 0; + if (window.left() == area.left()) + result |= Left; + else if (window.right() == area.right()) + result |= Right; + if (window.top() == area.top()) + result |= Top; + else if (window.bottom() == area.bottom()) + result |= Bottom; + return result; +} + +QPoint docked(const QRect &window, const QRect &area, int edges) +{ + QPoint p = window.topLeft(); + if (edges & Left) + p.setX(area.left()); + else if (edges & Right) + p.setX(area.right() - window.width() + 1); + if (edges & Top) + p.setY(area.top()); + else if (edges & Bottom) + p.setY(area.bottom() - window.height() + 1); + return p; +} + +} diff --git a/fuzzy_dock.h b/fuzzy_dock.h new file mode 100644 index 0000000..053a48a --- /dev/null +++ b/fuzzy_dock.h @@ -0,0 +1,23 @@ +#ifndef FUZZY_DOCK_H +#define FUZZY_DOCK_H + +#include +#include + +// Прилипание окна к краям рабочей области экрана +namespace fuzzyDock { + +enum Edge { Left = 1, Right = 2, Top = 4, Bottom = 8 }; + +// позиция окна с притяжением к краям area, если до края не больше distance пикселей +QPoint snapped(const QRect &window, const QRect &area, int distance); + +// края area, к которым окно прижато (сочетание Edge) +int edges(const QRect &window, const QRect &area); + +// позиция, при которой окно остаётся прижатым к краям edges +QPoint docked(const QRect &window, const QRect &area, int edges); + +} + +#endif // FUZZY_DOCK_H From 3e64cb3ccb21a8b3cdb864c037f44552d30b659a Mon Sep 17 00:00:00 2001 From: roosslan Date: Tue, 13 Oct 2026 00:06:06 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B8=D0=BA=D0=B8=20=D1=87=D0=B0=D1=81=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B8=20=D0=BF=D1=80=D0=B8=D0=BB=D0=B8=D0=BF=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F,=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20=D0=B2=20CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 9 ++ tests/tests.pro | 18 ++++ tests/tst_fuzzy_clock.cpp | 192 ++++++++++++++++++++++++++++++++++++ 3 files changed, 219 insertions(+) create mode 100644 tests/tests.pro create mode 100644 tests/tst_fuzzy_clock.cpp diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2c3c424..afb2053 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,6 +27,15 @@ jobs: qmake fuzzy_clock.pro "CONFIG+=release" nmake release + - name: Тесты + run: | + New-Item -ItemType Directory tests-build | Out-Null + Set-Location tests-build + qmake ..\tests\tests.pro "CONFIG+=release" + nmake release + .\release\fuzzy_clock_tests.exe + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + - name: Развёртывание run: | New-Item -ItemType Directory deploy | Out-Null diff --git a/tests/tests.pro b/tests/tests.pro new file mode 100644 index 0000000..28f4861 --- /dev/null +++ b/tests/tests.pro @@ -0,0 +1,18 @@ +# Тесты логики часов: фразы из fuzzy.conf и прилипание к краям экрана +QT = core testlib +CONFIG += console testcase +TARGET = fuzzy_clock_tests + +INCLUDEPATH += .. +DEFINES += SOURCE_DIR=\\\"$$PWD/..\\\" + +HEADERS += \ + ../fuzzy_clock.h \ + ../fuzzy_dock.h \ + ../fuzzy_helper.h + +SOURCES += \ + tst_fuzzy_clock.cpp \ + ../fuzzy_clock.cpp \ + ../fuzzy_dock.cpp \ + ../fuzzy_helper.cpp diff --git a/tests/tst_fuzzy_clock.cpp b/tests/tst_fuzzy_clock.cpp new file mode 100644 index 0000000..91aa920 --- /dev/null +++ b/tests/tst_fuzzy_clock.cpp @@ -0,0 +1,192 @@ +#include +#include +#include + +#include "fuzzy_clock.h" +#include "fuzzy_dock.h" +#include "fuzzy_helper.h" + +using Fuzziness = fuzzyClock::Fuzziness; + +class tst_fuzzyClock : public QObject +{ + Q_OBJECT + + fuzzyClock m_clock; + + static fuzzyClock load(const QString &dir) + { + const QString current = QDir::currentPath(); + QDir::setCurrent(dir); // fuzzy.conf читается из текущей директории + fuzzyClock clock; + fuzzyHelper::instance()->readArrays(clock); + QDir::setCurrent(current); + return clock; + } + +private slots: + void initTestCase() + { + m_clock = load(SOURCE_DIR); + QVERIFY(m_clock.isValid(Fuzziness::Minutes)); + QVERIFY(m_clock.isValid(Fuzziness::DayPart)); + QVERIFY(m_clock.isValid(Fuzziness::WeekPart)); + } + + // "Четверть пятого" + void minutes_data() + { + QTest::addColumn("time"); + QTest::addColumn("text"); + + QTest::newRow("полночь") << QTime(0, 0) << "Ровно двенадцать"; + QTest::newRow("час ночи") << QTime(1, 0) << "Ровно час"; + QTest::newRow("01:02") << QTime(1, 2) << "Ровно час"; + QTest::newRow("полдень") << QTime(12, 0) << "Ровно двенадцать"; + QTest::newRow("час дня") << QTime(13, 0) << "Ровно час"; + QTest::newRow("13:03") << QTime(13, 3) << "Пять минут второго"; + QTest::newRow("00:05") << QTime(0, 5) << "Пять минут первого"; + QTest::newRow("16:15") << QTime(16, 15) << "Четверть пятого"; + QTest::newRow("12:30") << QTime(12, 30) << "Половина первого"; + QTest::newRow("12:40") << QTime(12, 40) << "Без двадцати час"; + QTest::newRow("13:45") << QTime(13, 45) << "Без четверти два"; + QTest::newRow("11:57") << QTime(11, 57) << "Без пяти двенадцать"; + QTest::newRow("23:58") << QTime(23, 58) << "Почти двенадцать"; + } + + void minutes() + { + QFETCH(QTime, time); + QFETCH(QString, text); + QCOMPARE(m_clock.text(QDateTime(QDate(2026, 10, 12), time), Fuzziness::Minutes), text); + } + + // в каждую минуту суток - готовая фраза без незаменённых %0 и %1 + void minutesWholeDay() + { + for (int minute = 0; minute < 24 * 60; ++minute) { + const QTime time = QTime(0, 0).addSecs(minute * 60); + const QString text = m_clock.text(QDateTime(QDate(2026, 10, 12), time), Fuzziness::Minutes); + QVERIFY2(!text.isEmpty() && !text.contains('%'), qPrintable(time.toString("HH:mm") + " " + text)); + } + } + + // "Вечер" + void dayParts_data() + { + QTest::addColumn("hour"); + QTest::addColumn("text"); + + QTest::newRow("0") << 0 << "Ночь"; + QTest::newRow("4") << 4 << "Ночь"; + QTest::newRow("5") << 5 << "Раннее утро"; + QTest::newRow("8") << 8 << "Утро"; + QTest::newRow("11") << 11 << "Почти полдень"; + QTest::newRow("12") << 12 << "Полдень"; + QTest::newRow("13") << 13 << "День"; + QTest::newRow("18") << 18 << "Вечер"; + QTest::newRow("22") << 22 << "Поздний вечер"; + QTest::newRow("23") << 23 << "Поздний вечер"; + } + + void dayParts() + { + QFETCH(int, hour); + QFETCH(QString, text); + QCOMPARE(m_clock.text(QDateTime(QDate(2026, 10, 12), QTime(hour, 30)), Fuzziness::DayPart), text); + } + + // "Середина недели"; 12.10.2026 - понедельник + void weekParts_data() + { + QTest::addColumn("day"); + QTest::addColumn("text"); + + QTest::newRow("пн") << 0 << "Начало недели"; + QTest::newRow("вт") << 1 << "Середина недели"; + QTest::newRow("ср") << 2 << "Середина недели"; + QTest::newRow("чт") << 3 << "Середина недели"; + QTest::newRow("пт") << 4 << "Конец недели"; + QTest::newRow("сб") << 5 << "Выходные"; + QTest::newRow("вс") << 6 << "Выходные"; + } + + void weekParts() + { + QFETCH(int, day); + QFETCH(QString, text); + QCOMPARE(m_clock.text(QDateTime(QDate(2026, 10, 12).addDays(day), QTime(12, 0)), Fuzziness::WeekPart), text); + } + + void missingConfig() + { + QTemporaryDir empty; + const fuzzyClock clock = load(empty.path()); + QVERIFY(!clock.isValid(Fuzziness::Minutes)); + QCOMPARE(clock.text(QDateTime::currentDateTime(), Fuzziness::Minutes), QString("Ошибка в fuzzy.conf")); + } + + void brokenReference() + { + fuzzyClock clock = m_clock; + clock.vectMinuteRefer[5] = int(clock.vectMinutes.size()); // ссылка за пределы списка фраз + QVERIFY(!clock.isValid(Fuzziness::Minutes)); + + clock = m_clock; + clock.vectHourRefer.pop_back(); // 23 часа вместо 24 + QVERIFY(!clock.isValid(Fuzziness::DayPart)); + QVERIFY(clock.isValid(Fuzziness::Minutes)); + } + + // Прилипание к краям: рабочая область 0,0 - 1919,1039, окно 200x30 + void snapped_data() + { + QTest::addColumn("topLeft"); + QTest::addColumn("expected"); + + QTest::newRow("далеко от краёв") << QPoint(500, 500) << QPoint(500, 500); + QTest::newRow("к левому") << QPoint(10, 500) << QPoint(0, 500); + QTest::newRow("к левому снаружи") << QPoint(-12, 500) << QPoint(0, 500); + QTest::newRow("к правому") << QPoint(1705, 500) << QPoint(1720, 500); + QTest::newRow("к верхнему") << QPoint(500, 15) << QPoint(500, 0); + QTest::newRow("к нижнему") << QPoint(500, 1000) << QPoint(500, 1010); + QTest::newRow("в угол") << QPoint(1710, 1005) << QPoint(1720, 1010); + QTest::newRow("16 пикселей - мимо") << QPoint(16, 500) << QPoint(16, 500); + } + + void snapped() + { + QFETCH(QPoint, topLeft); + QFETCH(QPoint, expected); + const QRect area(0, 0, 1920, 1040); + QCOMPARE(fuzzyDock::snapped(QRect(topLeft, QSize(200, 30)), area, 15), expected); + } + + void edges() + { + const QRect area(0, 0, 1920, 1040); + QCOMPARE(fuzzyDock::edges(QRect(500, 500, 200, 30), area), 0); + QCOMPARE(fuzzyDock::edges(QRect(0, 500, 200, 30), area), int(fuzzyDock::Left)); + QCOMPARE(fuzzyDock::edges(QRect(1720, 1010, 200, 30), area), fuzzyDock::Right | fuzzyDock::Bottom); + QCOMPARE(fuzzyDock::edges(QRect(0, 0, 200, 30), area), fuzzyDock::Left | fuzzyDock::Top); + } + + // окно у правого края стало шире - правый край остаётся у края экрана + void dockedKeepsRightEdge() + { + const QRect area(0, 0, 1920, 1040); + const QRect wider(1720, 1010, 260, 30); + QCOMPARE(fuzzyDock::docked(wider, area, fuzzyDock::Right | fuzzyDock::Bottom), QPoint(1660, 1010)); + QCOMPARE(fuzzyDock::docked(wider, area, 0), wider.topLeft()); + } + + // панель задач слева: рабочая область начинается не с нуля + void dockedShiftedArea() + { + const QRect area(60, 0, 1860, 1080); + QCOMPARE(fuzzyDock::docked(QRect(0, 300, 200, 30), area, fuzzyDock::Left), QPoint(60, 300)); + } +}; + +QTEST_GUILESS_MAIN(tst_fuzzyClock) +#include "tst_fuzzy_clock.moc" From d301d88239a29b2aefe32e8b1ad23bef82e6c2c3 Mon Sep 17 00:00:00 2001 From: roosslan Date: Tue, 13 Oct 2026 00:06:07 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=98=D1=81=D1=85=D0=BE=D0=B4=D0=BD=D0=B8?= =?UTF-8?q?=D0=BA=D0=B8=20FuzzyClock=20=D0=B8=D0=B7=20KDE=203.1=20(=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=B3=D0=B8=D0=BD=D0=B0=D0=BB=20=D0=BD=D0=B0=20C++?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FuzzyClock_from KDE (original C source).cab | Bin 0 -> 28301 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 FuzzyClock_from KDE (original C source).cab diff --git a/FuzzyClock_from KDE (original C source).cab b/FuzzyClock_from KDE (original C source).cab new file mode 100644 index 0000000000000000000000000000000000000000..ab114dc77ac4171c4816c742b255c8302f778c80 GIT binary patch literal 28301 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

SC$IoC_D1V=%~4 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 CyJ+eF literal 0 HcmV?d00001