Возможно, вы создали сотни настольных приложений. Вы когда-нибудь задумывались о внутреннем устройстве?

В настоящее время разработка настольных приложений проста. Ранее мы написали множество кодов для создания каждого стандартного элемента графического интерфейса, такого как кнопки, флажки, переключатели, списки и т. Д. После этого мы смогли сделать графическую часть настольных приложений без написания единой строки кода с помощью средств разработки графического интерфейса. Теперь мы можем создавать более стильные настольные приложения с помощью гибридных сред разработки приложений, используя навыки веб-разработки.

Предположим, вы разрабатываете настольное приложение в современной среде IDE, такой как Visual Studio или Netbeans. Конечно, мы просто знаем, что используем некоторые библиотеки графического интерфейса, написанные на определенном языке. Например, если вы используете Visual Studio, вы уже знаете, что в основе лежат модули библиотеки графического интерфейса пользователя на основе .NET. Давайте проверим, что будет дальше, в порядке сверху вниз, независимо от типа операционной системы.

Набор инструментов для виджетов

Это самый верхний API, доступный разработчикам приложений с графическим интерфейсом. Общий набор инструментов графического интерфейса пользователя предлагает различные виды стандартных элементов пользовательского интерфейса, таких как кнопки, списки, флажки, переключатели и т. Д. Каждый стандартный компонент графического интерфейса имеет настраиваемые свойства для настройки видимых функций, а также событий для обработки взаимодействия с пользователем. API виджетов может предлагать набор макетов для управления позиционированием каждого графического элемента. Например, в наборе инструментов виджетов GTK есть такие контейнеры, как Box, Grid, Stack, Fixed и т. Д.

Большинство современных наборов инструментов с графическим пользовательским интерфейсом расширены в виде кроссплатформенных библиотек: GTK, Tk, Qt и т. Д. Однако существуют также реализации наборов инструментов для конкретных платформ: Windows API, Windows Forms и Cocoa. Некоторые наборы инструментов графического интерфейса пользователя поставляются с инструментами проектирования для автоматической генерации исходного кода, относящегося к пользовательскому интерфейсу. Например, программное обеспечение Qt Designer автоматически сгенерирует исходный код для инструментария Qt UI.

Библиотека чертежей и помощники

Каждый стандартный элемент графического интерфейса пользователя имеет свой вид и поведение. Поэтому и реализация у них разная. Однако каждый компонент, наконец, отображает на экране какие-то формы и текст. Каждый элемент состоит из разных форм, например, из молекул состоят химические соединения. Библиотека чертежей используется внутри наборами инструментов графического интерфейса пользователя для создания стандартных элементов графического интерфейса.

Эти библиотеки для рисования могут рисовать различные формы и текст на экране. Стандартная библиотека рисования в операционной системе обычно рисует элементы внутри оконных структур. Таким образом, целевой объект вывода устанавливается как сервер отображения по умолчанию в текущей операционной системе. Например, сервер X.org на платформе Linux. Эти выходные данные будут отправлены с использованием экземпляра клиентской библиотеки сервера отображения, такого как Xlib. Кроме того, могут быть несколько вспомогательных модулей для интернационализации, загрузки ресурсов и доступности.



Сервер отображения и наборщик

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

Список серверов отображения для каждой популярной операционной системы:

  • Linux - сервер X.org в оконной системе X11.
  • macOS - Кварцевый композитор
  • Windows - Диспетчер окон рабочего стола (DWM)

Почти все операционные системы могут запускать несколько приложений одновременно. Таким образом, каждый модуль приложения разделен на независимую секцию, называемую окном. Сервер отображения тесно взаимодействует с оконным менеджером, который управляет окнами каждого приложения. Кроме того, некоторые операционные системы, такие как macOS и Windows, объединили композитор и сервер отображения в одну оконную систему. Но Unix и Unix-подобные системы имеют два отдельных модуля для сервера отображения и композитора.

Физическое оборудование

Сервер отображения будет взаимодействовать с ядром, а ядро ​​напрямую работает с физическим оборудованием с помощью драйверов устройств. Например, сервер X.org будет использовать модули ядра DRM и KMS для отправки отображаемых данных на фактическое оборудование. С другой стороны, модуль ядра evdev (устройство событий) будет отправлять события с устройств ввода на сервер X.org.

Резюме

Компьютеры подобны луку. Если мы снимем один раз, отклеится еще один слой. Точно так же, начиная с настольного приложения и заканчивая физическим оборудованием и наоборот, существует несколько уровней абстракции. Весь поток вызовов можно изобразить на следующей диаграмме.

Получите доступ к экспертному обзору - Подпишитесь на DDI Intel