О том, как второкурсники свое окружение рабочего стола писали

в 9:11, , рубрики: linux, велосипедостроение, Программирование, учеба, метки: , ,

image Все началось на втором курсе, во времена, когда человеческие планшеты только начали появляться, а Android был еще во второй ветке. Я тогда был большим поклонником гибкости и настраиваемости linux-систем, потому и неудивительно, что появилась мысль написать свое окружение рабочего стола, позволяющее запускать несколько приложений одновременно, но при этом адаптированное для небольших сенсорных экранов. Эту идею разделял один мой одногруппник(Кирилл), имевший уже к тому моменту некоторый опыт в разработке на OpenGL.

Планирование — самая захватывающая часть в разработке ПО, а в такой масштабной задаче оно приятно затянулось аж на целый месяц. Хотя стоит признать, что выбор названия занял приличную часть времени. Было принято решение написать сначала свой 2.5D движок, а после доработать его до полноценного композитного менеджера окон. Тащить какой-нибудь тулкит нам показалось излишеством, потому подразумевалось, что панели и меню будут использовать тот же движок для отрисовки( как это сделано в Unity, насколько я понимаю ). Велосипедить свои файловый менеджер и плеер было бы неразумно, да и, раз уж мы независимы от тулкитов, пусть каждый использует то, что ему ближе. Программ, адаптированных для сенсорных экранов практически не было, потому планировалось после релиза начать работу по адаптации GUI некоторых популярных проектов, поддерживать соответствующий репозиторий.

Разработка

Пришла пора оживить тетрадные наброски интерфейса, и я, собрав в кучу все свои, прямо скажем, небогатые знания Web-технологий, налабал немного интерактивный прототип (трафик!):

image

Как нам казалось, важнее всего минимизировать необходимость лезть в центр экрана, потому органы управления расположились под большими пальцами (если держать планшет двумя руками). На левой панели сверху-вниз: угол перехода в полноэкранный режим, панель быстрого запуска, панель запущенных приложений. Справа трей, стрелки для переключения рабочих столов, некоторые служебные функции. Фокус между окнами должен был перемещаться по касанию. Вместо декораций окон планировалось использовать управляющую сферу, расположенную сверху на правой панели: при нажатии на нее, она перемещается к центру активного окна, рядом всплывают надписи «закрыть», «свернуть», возможно что-нибудь еще. Конечно, сейчас уже общепринято делать такие вещи по долгому нажатию, и наше решение смотрится несколько странным. Разрешение получилось примерно как на моем ноутбуке, и в полноэкранном режиме безумно мне понравилось. Ну а раз так, в план добавилась desktop-версия, избавленная от гигантизма, и получившая поддержку мыши. Дальше — больше. Чего бы еще добавить в идеальное DE мечты?) Мы захотели некрасноглазый менеджер окон(WM) с продвинутыми возможностями тайлинга. Предполагалось два режима, переключающихся по хоткею/активному углу:

  • Режим работы — можно свободно перемещать привычные floating-окна, tiled-окна закреплены.
  • Режим настройки — подсвечивается сетка окон, каждую грань которой можно перемещать мышкой.

Перемещая крайнюю грань — добавляем ячейку, перемещая среднюю — меняем размеры ячеек. Есть возможность перетягивать floating-окна в ячейки и обратно, причем если в одну и ту же ячейку можно поместить несколько окон, их заголовки выводятся во вкладках. Конечно, звучит несколько сумбурно, надеюсь на примере будет понятнее:

image

Хватило ли нам воображения добавить еще чего-нибудь? :) Конечно хватило, кто бы сомневался. Я вот всегда мечтал о трансформации окружения под задачу — так появилась концепция комнат. Такая концепция позволяла для каждого вида деятельности настраивать буквально все, начиная от тем оформления, и заканчивая привязкой конкретного окна к определенной ячейке рабочего стола. Таким образом, появлялась возможность в один клик создать атмосферу для работы, или минимальное окружение для игр. Фуух… тем временем, семестр начался уже всерьез, и развернувшаяся было работа шла крайне медленно и урывками. В итоге к лету у нас уже были некоторые демки движка, прототип меню приложений, инит-системы, я просмотрел кучи концептов окружений рабочего стола, появилось примерное понимание как все это, в целом, должно работать. За лето движок был практически дописан, была написана библиотека для работы с ini-подбными конфигурационными файлами(по стандарту free desktop).

Осень

Настал самый драматический момент в нашей истории: наконец-то взялись писать WM! Кирилл начал работу в области композитинга, а я — с головой погрузился в увлекательный мир спецификации NETWM, описывающей все, что обязан уметь уважающий себя менеджер окон. Писал обвязку для работы с хинтами, скачивал и препарировал исходники небольших панелей задач и WMов, начал backend для собственного. Опыта было мало, документации и примеров еще меньше, зато подводных камней — сколько угодно. Ничего удивительного, что работа шла медленно, и постепенно заглохла, в очередной раз уступив место учебе. А тут еще и Wayland многозначительно показался на горизонте, обещая скорое вытеснение XOrg'a, и обесценивание наших усилий по борьбе с ним. Стал закрадываться соблазн писать тогда уж сразу под него, став первым чисто Wayland окружением… Кто знает, чем закончилась бы эта история, если бы 100% разработчиков не позвали бы работать уже весной, а на работе не было бы OS X? Менеджер окон, там, конечно, весьма посредственный, зато все остальное более чем достойное.
Осознавали ли мы масштаб, пытаясь сдвинуть гору? Пожалуй нет, мы были полны оптимизма, вдохновлены примером Линуса, и некоторых других личностей. Конечно, сегодня, начиная такой проект, однозначно остановились бы на Qt, что сэкономило бы минимум год разработки, начинали бы с рабочего прототипа. Но с другой стороны, нисколько не жалеем о потраченном времени, ведь как еще можно приобрести столько опыта и вдохновения, не пытаясь объять необъятное?

Автор: Zifix

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js