Я не думаю, что вам нужен специальный учебник здесь.Ядро самого основного графического интерфейса пользователя состоит из управления списком прямоугольных объектов, представляющих окна, кнопки, рисунки, текстовые поля и т. Д.
Каждый подобный прямоугольный объект имеет свои x- и y-координаты и размеры (ширинаи высота).Он также имеет координату az (глубины), которая сообщает, какие объекты находятся ниже него (их z меньше) и какие объекты находятся выше него (их z больше).
Каждый прямоугольный объект также имеет указатель на своего родителяи своим детям.Это позволяет легко составлять произвольно сложные окна меньшего и более простого прямоугольника.объекты.Например, когда вы захватываете окно и перемещаете его, используя эти указатели parent / children, вы можете перемещать все объекты.Или, если внешний объект получает событие, он может переслать его своим внутренним дочерним элементам для обработки и наоборот.
Когда дело доходит до рендеринга всех этих прямоугольных объектов, некоторые из которых могут быть частично или полностью скрытыдругие, самое главное, чтобы выяснить, какие из всех объектов видимы, невидимы и частично видимы, потому что вы не хотите делать много ненужной работы.Чтобы эффективно рисовать объекты, вы хотите нарисовать каждый пиксель не более одного раза (всегда или большую часть времени).В дополнение к необходимому коду для пересечения / разделения прямоугольника это также означает, что каждый объект знает, как эффективно нарисовать любую произвольную прямоугольную часть себя.Это наиболее тривиально для однотонных объектов.Для изображений это более или менее просто (если только вы не хотите иметь масштабирование изображения и уменьшение / преобразование цвета на месте).Для текстовых и векторных объектов это сложнее всего.
Вы можете даже составить объект указателя мыши из маленьких прямоугольных объектов и нарисовать и перерисовать его с помощью того же кода, что и для всех других объектов.Просто убедитесь, что координата z (глубина) указателя такова, что указатель всегда находится поверх всех других объектов.
Это общая идея.