LINUX.ORG.RU

Часы на кривых Безье для рабочего стола KDE Plasma 5

 , , ,


2

1

Всем привет.

В плане изучения технологии Qt Quick и языка программирования QML захотелось мне реализовать какую-нибудь забавную вещицу для рабочего стола KDE Plasma 5. Это мой первый pet-проект на этом стеке технологий.

Два года назад на Хабрахабре я увидел интересный пост про часы на кривых Безье. Jack Frigaard, разработчик этого забавного скетча, использовал реализацию языка программирования Processing на JavaScript — Processing.js и поделился с общественностью своим кодом.

Я решил сделать из этого скетча анимированую «живую» обоину для KDE Plasma 5 и в итоге вот что получилось:

GIF-анимация
Демонстрация на YouTube (записывал на слабом ноутбуке с i3 первого поколения, так что во время записи были подлагивания и проседания FPS).

Репозиторий с исходным кодом:
https://github.com/EXL/BezierClock

Я немного увеличил функциональность, добавил возможность регулировки множества опций и параметров:

Скриншот настройки в KDE Plasma 5

Вышло довольно занимательно. Для тех, кто хочет попробовать поиграться с кривыми Безье сам, я приготовил пакеты:

[Пакет для Arch Linux] | [Зеркало]

Ставить командой pacman -U bezier-clock-v1.0-1-any.pkg.tar.xz или yaourt -U bezier-clock-v1.0-1-any.pkg.tar.xz, если кто не знает.

[Общий пакет для остальных дистрибутивов GNU/Linux] | [Зеркало]

Устанавливается он в пользовательскую директорию ~/.local/share/plasma/wallpapers/ выполнением скрипта package.sh. Удалить пакет можно либо ручками, либо выполнив ./package.sh -u.

После установки в настройках рабочего стола появляется новый тип обоев: Bezier Clock, выбираете его и активируете обоину.
Чтобы экономнее расходовать ресурсы CPU, я советую выставить FPS Limit в район 25, а Animation Duration примерно на 30.
В общем, колдовство с этими параметрами поможет добиться плавной анимации и на низких FPS.

Спасибо за внимание! Чуть не забыл:
На скриншоте Arch Linux со старой KDE Plasma 5.5.3, всё дефолтное
Шрифты: Nokia Standard, Ubuntu Condensed, Consolas; сглажены Infinality
Везде использую замечательную тему Breeze
В плане приложений KDE-стека активно использую Dolphin, Okular, Kate и Yakuake, в качестве плеера Clementine, видео смотрю vlc или mpv.
Браузер — Chrome, почтовик — Thunderbid.
Повседневная IDE — Qt Creator, но имеется и тяжёлая артиллерия на подхвате: Eclipse и Android Studio.

Скриншот с Qt Creator в процессе создания Bezier Clock.

Ещё варианты оформлений: [1], [2], [3].

>>> Просмотр (1366x768, 48 Kb)

★★★★★

Проверено: JB ()
Последнее исправление: cetjs2 (всего исправлений: 2)

Смена секунд напряжно выглядит. Да и часы на рабочем столе особого смысла не имеют.

sudopacman ★★★★★
()
Ответ на: комментарий от DeadEye

у тебя, по сути, теперь двое часов. (=

Ага, но панелька ведь поверх всех окошек. А скрывать все окна, чтобы посмотреть время — неудобно.

EXL ★★★★★
() автор топика
Ответ на: комментарий от EXL

Так чуть получше. Но всё равно. Если убрать секунды, то раз в минуту такая анимация норм будет. ИМХО.

sudopacman ★★★★★
()
Ответ на: комментарий от sudopacman

А его что, выпилили? Было же раньше у KDE какое-то там глобальное меню. Не пользовался просто. Даже на macOS не могу к нему привыкнуть и считаю архаизмом.

EXL ★★★★★
() автор топика
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от votafak

аналоговые часы

А они есть в стандартных виджетах.

И весьма-весьма симпатичные, в отличие от убожества, которое было в KDE 4.

Кстати, давно хотел тебя спросить, на твоей аватарке кадр из фильма «In Time»?

EXL ★★★★★
() автор топика
Ответ на: комментарий от sudopacman

Да, в пятой плазме глобального меню нет

Есть. Кликаешь правой кнопкой мыши по меню приложений -> взаимозаменяемые виджеты -> Доска приложений

ozzee
()

Такой маленький экранчик и столько места занято мусором. Убрать боковую панель в QtC, отключить заголовок окна и скрыть панель - и получим кучу места. В KDE4 еще и меню можно было скрыть, но в 5-ке сломали.

RazrFalcon ★★★★★
()

До чего техника дошла!

CrossFire ★★★★★
()
Ответ на: комментарий от RazrFalcon

Да мне в принципе, места хватает.

А вот то, что высота менюбара и кнопки огромные — виноват какой KDE-разработчик, который решил добавить в Breeze воздушности.

Может знаешь, как сделать менюбар в Qt Creator'е узким? Только в QSS копаться?

EXL ★★★★★
() автор топика
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от buratino

E17 15 лет назад смотрелся на фоне Motif и Redmond просто космически.
Проблема в том, что он в тех годах и остался.

EXL ★★★★★
() автор топика

Видел подобный вариант оформления часов, где минуты и часы плавно меняли форму заранее нужного момента. Минуты, вроде, меняли форму непрерывно.

aplay ★★★★★
()
Ответ на: комментарий от ozzee

Имеется в виду верхнее меню приложений, где «Файл, Правка, Вид» и т.п., чтобы оно было не для каждого приложения отдельно, а как в маке или убунте - на панели.

LordTermor ★★
()
Ответ на: комментарий от aplay

Тут сделать можно точно так же, ставишь задержку по-больше (примерно 10000) и минуты будут меняться медленно и непрерывно.

EXL ★★★★★
() автор топика
Ответ на: комментарий от kott

Только если моя поделка будет работать у кого-нибудь ещё, кроме меня.

Тут на обновлённом Arch Linux (я пол-года не обновлялся) проблемка нарисовалась: при первом заходе в настройки все параметры сброшены на нули, такое ощущение, что они не прочитались из конфига.

Нажимаешь кнопку Reset to Default и вроде норм.

Пока не знаю, в чём причина, данный баг появляется не только на моей обоине, но и на других, к примеру, Plain Color на Plasma 5.7.3. А у меня на 5.5.3 всё нормально.

Написал KDE-шникам, буду ждать ответа. Возможно плазмобаг, либо я что-то неправильно делаю.

EXL ★★★★★
() автор топика
Ответ на: комментарий от EXL

поискал на лоре - первый скрин с часами в e17 увидел только в 2005 году :)

e17

но где-то в 2000 или 2001 попался скрин с e16, но тоже с неплохими аналоговыми часами :)

buratino ★★★★★
()
Ответ на: комментарий от Deleted

Да, помню его, но повторюсь, тогда он был стремный. А теперь красота, гармонично смотрится.

// у /me возникло дикое желание посмотреть новые кеды :)

garik_keghen ★★★★★
()

Эталонное ненужно, но за стремление к познанию новых технологий заслуживаешь пахлавы.

AlexandrSE
()
Ответ на: комментарий от EXL

при первом заходе в настройки все параметры сброшены на нули, такое ощущение, что они не прочитались из конфига.

тож самое

kott ★★★★★
()

Для кривого DE — и часы на кривых!

CARS ★★★★
()
Ответ на: комментарий от kott

Я сейчас проверил у друга на 5.7.3, другие анимированные обоины тоже не читают настройки. Что-то сломали, надо будет зарепортить баг.

EXL ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

Нет, как-то не подумал об этом. Пропадает вся фишка, которая заключается в интересной анимации кривых.

Но сделать, дополнительную галку конечно можно.

EXL ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy
diff --git a/qml/BezierCanvas.qml b/qml/BezierCanvas.qml
index 5e68cfa..edf0bf7 100644
--- a/qml/BezierCanvas.qml
+++ b/qml/BezierCanvas.qml
@@ -55,7 +55,7 @@ Canvas {
         var secondsUnit = secondTotal % 10;
         var secondsTen = (secondTotal % 100 - secondTotal % 10) / 10;
         var secondsUnitRatio = millis / 1000.0;
-        var secondsTenRatio = (secondsUnit * 1000 + millis) / 10000.0;
+        var secondsTenRatio = (secondsUnit * 1000 + millis) / 10000.0;/*
         setup.init.secondsUnitsAnimator.animationStartRatio = CoreFunctions.getAnimStartRatio(1.0, setup.animDurationUser);
         setup.init.secondsUnitsAnimator.update(context,
                                           CanvasFunctions.determineDigit(secondsUnit),
@@ -65,7 +65,7 @@ Canvas {
         setup.init.secondsTensAnimator.update(context,
                                          CanvasFunctions.determineDigit(secondsTen),
                                          CanvasFunctions.determineDigit(CoreFunctions.getNextInt(secondsTen, 5)),
-                                         secondsTenRatio);
+                                         secondsTenRatio);*/
 
         // Blink Dots
         if (setup.showDots && setup.blinkDots) {
diff --git a/qml/BezierInit.qml b/qml/BezierInit.qml
index 808e909..dca30cf 100644
--- a/qml/BezierInit.qml
+++ b/qml/BezierInit.qml
@@ -40,14 +40,14 @@ Item {
 
     BezierAnimator { // X0:00:00
         id: _hoursTensAnimator
-        origX: 0.0 * visualScaling
+        origX: 300.0 * visualScaling
         origY: yOff * visualScaling
         animationStartRatio: 35995.0 / (35995.0 + 5.0)
     }
 
     BezierAnimator { // 0X:00:00
         id: _hoursUnitsAnimator
-        origX: 300.0 * visualScaling
+        origX: 600.0 * visualScaling
         origY: yOff * visualScaling
         renderDots: true
         animationStartRatio: 3595.0 / (3595.0 + 5.0)
@@ -55,16 +55,16 @@ Item {
 
     BezierAnimator { // 00:X0:00
         id: _minutesTensAnimator
-        origX: 800.0 * visualScaling
+        origX: 1100.0 * visualScaling
         origY: yOff * visualScaling
         animationStartRatio: 595.0 / (595.0 + 5.0)
     }
 
     BezierAnimator { // 00:0X:00
         id: _minutesUnitsAnimator
-        origX: 1100.0 * visualScaling
+        origX: 1400.0 * visualScaling
         origY: yOff * visualScaling
-        renderDots: true
+        // renderDots: true
         animationStartRatio: 55.0 / (55.0 + 5.0)
     }
 

Ну вот патч, применять его примерно так:

cd ~/.local/share/plasma/wallpapers/ru.exlmoto.bezierclock/contents/ui/
patch -Np2 < ~/Downloads/BezierClockDropSeconds.patch
EXL ★★★★★
() автор топика

во время записи были подлагивания и проседания FPS

Суть десктопного линукса: очередные часы, на этот раз на кривых Безье. А нормальной программки для записи видео рабочего стола нет.

(Да, в свое время я писал скринкасты под вендой на целероне о 417 мегагерцах, так что знаю о чем говорю.)

Igron ★★★★★
()
Ответ на: комментарий от alozovskoy

Если не по центру вышло, сдвинь там, вместо 300 — 400, потом 700, 1200, 1500.

EXL ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon

Икал - не нашел. Только патчить сам QtC.

Ну я могу предложить костыль.

Создаешь файл fix_shitty_menubar.qss с таким содержимым:

QMenuBar::item {
	height: 16px;
	margin-right: 2px;
	margin-left: 2px;
}

И запускаешь:

$ qtcreator-bin -stylesheet=fix_shitty_menubar.qss

Можно и скрипт запуска отредачить

$ sudo vim `which qtcreator`
EXL ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.