Pull to refresh

Оконные индикаторы в Убунту

Reading time 4 min
Views 3.1K
Original author: Mark Shuttleworth
Перевод поста из блога Марка Шаттлворта.

Работа над проектом индикаторов «Аятана» (Ayatana Indicators) дала нам чёткое понимание и основания для реализации индикаторов, раположенных в панели. Мы решили, как именно они будут выглядеть и каким будет их поведение. Мы также решили, что они будут расположены в правой части панели.

Но зачем ограничиваться панелью? Давайте лучше предоставим их в распоряжение приложений — для тех задач, где индикаторы могут быть особенно полезны:
  • Уведомление о каком-либо состоянии, например, установлено ли программой подключение,
  • Предоставление доступа к меню индикатора, позволяющему это состояние изменить.


Мы начали работу над оконными индикаторами, «виндикаторами» (так смешнее). Виндикаторы — это индикаторы, отображаемые в заголовке окна и ведущие себя в точности так же, как индикаторы в панели: у них есть значок, показывающий состояние, а клик на значке отображает меню. Приложения могут создавать, обновлять и удалять оконные индикаторы, используя соответствующий API, примерно так, как это делается во фреймворке AppIndicator, впервые появившемся в 10.04 LTS.

Оконные индикаторы выполнены по правилам стандартных индикаторов Ayatana, но относятся только к конкретному окну.
Оконные индикаторы, они же «виндикаторы» на примере окна приложения.

Мы заботливо разместили все индикаторы панели в правой её части. Мы столь же заботливо подвинули влево элементы управления окном и его заголовок. Теперь у нас в распоряжении есть свободное место справа. Стандартом будет помещать туда оконные индикаторы.

В Canonical технологию отрисовки заголовка и границ окна развивает Коуди Рассел (Cody Russell). Эти элементы формируют так называемое «клиентское оформление окна» («client side window decorations»). Мы переносим отрисовку оформления окна в само приложение, поэтому эти части больше не отрисовываются оконным менеджером и приложением по отдельности. Это, в свою очередь, кое-что упрощает (но кое-что и усложняет, конечно).

Одним из полезных эффектов от введения клиентского оформления окна является то, что приложению будет проще выполнять отрисовку чего-либо в заголовке (потому что само приложение его и рисует). И в этом случае тем более естественно приложению контролировать происходящее в правой части заголовка.

Меньше хрома, больше пользы: изгнать строку состояния


В нашем подходе к дизайну я руководствуюсь принципом «чем меньше, тем больше», и я, в частности, хочу избавиться от разбазаривания пространства по вертикали. Это особенно актуально для нетбуков. В то же время, многие приложения имеют в нижней части строку состояния (status bar), хотя единственная причина этого в том, что так было заведено ещё в Windows 3.1.

Типичная строка состояния приложения содержит:
  • Значки состояния («Подключено»)
  • Некоторые инструменты («Yslow»)
  • Кратковременное статусное сообщение («Сохранение файла»)


Мы можем заменить вышеперечисленное комбинацией виндикаторов и всплывающих статусных строк-сообщений. Мне очень нравится то, как браузер Chrome отображает статусные сообщения, так что хвала им и благодарность за отличную идею. Выигрыш от использования этих двух механизмов составит примерно 5% места по вертикали для чего-то действительно полезного.

Очерёдность реализации


Если вам нравится наша идея, пожалуйста, подпишитесь на список рассылки Ayatana и участвуйте в обсуждении нюансов реализации. Мы хотим разработать базовые принципы, которые позволят использовать одинаковые значки и, по возможности, одинаковые пункты меню индикаторов для одинаковых задач в различных приложениях. Само собой, приложения смогут использовать эти механизмы и для своих специфических надобностей.

Намеченное к 10.10


Будет просто волшебно увидеть реализацию некоторых оконных индикаторов в Ubuntu 10.10. Пожалуйста, помогите нам выбрать наиболее полезное! На данный момент в нашем списке следующее:
  • Индикатор состояния «онлайн / оффлайн» и опция подключения для почтовой программы, чата или Gwibber (приложения для рассылки сообщений в различные сервисы).
  • Индикатор «файл не сохранён», сообщающий о том, что текущий файл изменён, и дающий возможность сохранить его и/или изменить опции автосохранения.
  • Индикатор прогресса, который показывает, что выполняется некая операция, и, возможно, позволяющий узнать её прогресс. Меню индикатора может позволять приостановить или отменить операцию, а также задать, что произойдёт после её завершения.
  • Индикатор «корзина», показывающий, отобрано ли что-то для покупки.
  • Индикаторы совместного доступа, показывающие, доступен ли документ другим людям, а также позволяющие этот доступ настроить.
  • Индикаторы громкости, отображающие уромень громкости аудиопотоков приложения и позволяющие её для данного приложения изменить.


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

Точь-в-точь как индикаторы панели…


С точки зрения визуального дизайна, целью использования индикаторов является всё та же символичность. Они должны быть реализованы в том же стиле, что и индикаторы Аятаны:
  • По умолчанию монохромные, форма указывает на функцию индикатора.
  • Семантическая раскраска: красный цвет означает критические проблемы, оранжевый — предупреждения, зелёный — положительные изменения статуса, синий — информативные состояния, отличающиеся от состояний по умолчанию или обычных состояний.


Интеграция с Netbook Edition Smart Panel


На прошлой неделе я писал о нашем решении ввести единое глобальное меню для всех приложений, расположенное в панели (речь идёт только об Ubuntu Netbook Remix — прим. перев.). Я также говорил, что мы изучим возможность помещения заголовка окна и его меню в панель, если окно развёрнуто на весь экран. Разумеется, это означает, что и оконные индикаторы должны будут располагаться там же. Они появятся в правой части панели, и будут при этом раположены левее индикаторов самой панели. Например, вот развёрнутое окно приложения (обратите внимание на кнопку-логотип Ubuntu в левом верхнем углу: это панель, а не заголовок окна):

Макет развёрнутого окна с умной панелью и оконными индикаторами.

В такой конфигурации достигается «служение единой цели»: весь экран предоставлен одному приложению, и в тоже время элементы Аятаны продолжают выполнять свои функции, как системные (индикатор аккумулятора), так и специфичные для приложения.

Обновл.: подходим, предлагаем свои идеи, не стесняемся! Я уже начал :)

Обновл. 2: Марк ответил на критический комментарий (спасибо braintorch):
Michael Hall:
Как насчёт того, чтобы вместо интеграции виндикаторов в клиентское оформление окна предоставлять информацию DBus так, как это делают другие индикаторы? В таком случае Metacity/Compiz смогут определять, как их использовать: как виндикаторы, в панели задач Gnome, в cairo-dock, awn или даже как в Windows7 “Jump List”.

Mark Shuttleworth:
Да, вы правы, это верный подход. Я не очень понятно выразился, CSD дало нам *идею*, что это свободное место можно предоставить в пользование приложения, но стандартные темы и оконные менеджеры, разумеется, должны всё это поддерживать.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+61
Comments 57
Comments Comments 57

Articles