Обсуждение статьи "Создание графической библиотеки для MetaTrader 5 по образцу Cairo (Часть 1): Зачем терминалу собственный 2D-рендерер"

Опубликована статья Создание графической библиотеки для MetaTrader 5 по образцу Cairo (Часть 1): Зачем терминалу собственный 2D-рендерер:

В этой статье мы начинаем пошаговую разработку графического 2D-движка для MetaTrader. Мы введем единый стандарт представления цветов ARGB и реализуем поверхность с возможностью повторного использования — буфер пикселей типа uint, который загружается как динамический ресурс и отображается с помощью одного объекта OBJ_BITMAP_LABEL. Вы нарисуете прямоугольники и вертикальный градиент, убедитесь, что прозрачность здесь действительно работает, и освоите эффективный способ обновления с одним вызовом Flush.

Современным торговым интерфейсам нужно больше, чем просто сетка прямоугольников: карточки со скругленными углами, кольца и кольцевые диаграммы, полупрозрачные слои, плавные градиенты и произвольные многоугольники — все это стандартные элементы пользовательского интерфейса. Возможностей нативных графических объектов языка MQL5 и даже стандартного класса CCanvas недостаточно: углы остаются прямыми, границы заливок не сглаживаются, цвета фона объектов не поддерживают альфа-прозрачность, геометрия поддерживает только целые значения, а рост числа объектов может быстро снизить отзывчивость интерфейса. При этом мы хотим обойтись средствами самого терминала — без DLL и внешних инструментов — и вывести результат в виде одного графического объекта.

В этой серии мы пойдем другим путем. Вместо того чтобы придумывать новую архитектуру, мы заимствуем компактную, проверенную на практике архитектуру Cairo. Основная идея этой архитектуры — разделить геометрию (пути) и источники цвета, затем применить к источнику попиксельную маску покрытия и выполнить композицию с целевой поверхностью. Такой подход дает общую основу для качественного, масштабируемого рендеринга разных фигур. В следующих частях мы реализуем эту модель полностью на языке MQL5, продвигаясь небольшими шагами и проверяя результат каждого из них.

В первой части закладывается основа рендеринга: единое представление цвета в формате ARGB и пиксельная поверхность с возможностью повторного использования, привязанная к одному объекту OBJ_BITMAP_LABEL. В последующих частях будет меняться способ выбора и окрашивания пикселей, а механизм их вывода на график останется прежним.


Автор: Sandro Begashvili