Обсуждение статьи "Создание графической библиотеки для MetaTrader 5 по образцу Cairo (Часть 5): Правила заливки, отверстия и рамки"
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Опубликована статья Создание графической библиотеки для MetaTrader 5 по образцу Cairo (Часть 5): Правила заливки, отверстия и рамки:
После четвертой части движок уже хорошо справляется с отрисовкой. Рендерер уже умеет многое: выполняет заливку произвольных контуров, сглаживает их края и корректно выполняет альфа-композицию — и все это через единый метод Fill(). Но он не справляется, когда интерфейсу нужна по-настоящему пустая область внутри фигуры. Это не просто косметический недостаток — он мешает правильно отображать распространенные элементы интерфейса: рамки, кольца и кольцевые шкалы, внутренние просветы букв вроде "A" или "O", кнопки с контуром и дорожки полос прогресса. На практике это хуже, чем просто отсутствие нужной возможности: в вызывающем коде приходится задавать поведение рендерера через порядок вершин или прибегать к обходным приемам с непрозрачной заливкой, которая закрашивает все под ней.
Нам нужен небольшой управляемый механизм, который отвечает на один четкий вопрос: что считать внутренней областью фигуры при данной заливке? Если этот выбор доступен в месте вызова, одна и та же геометрия позволяет получить либо сплошное объединение фигур, либо гарантированно сформировать отверстия. При этом обводки можно строить с помощью заливки без швов и артефактов повторного смешивания. В этой статье показано, как добавить такую возможность с минимальным изменением API и почему именно выбор правила заливки позволяет и создавать отверстия, и строить обводки с помощью заливки.
Автор: Sandro Begashvili