Я использую cairomm вместе с gtkmm для проекта с графическим интерфейсом. Я определил абстрактный виджет GeometricShape
(который наследуется от Gtk::DrawingArea
) для наследования, если нужно нарисовать квадрат, круг и т. д. Этот класс определяет три области:
- заливка (или область тела);
- граница;
- фоновая область.
Область заливки используется для заливки фигуры определенным цветом тела. Граница (обычно черная) определяет форму, а область фона используется для заполнения оставшегося пространства (всего, кроме границы и связанной с ней области заливки) цветом. Вот пример того, как он выглядит для круга:
В этом случае цвет фона — зеленый, цвет границы — синий, а область заливки — красная (просто для ясности). Теперь один из моих инвариантов класса должен заключаться в том, что путь, представленный границей, представляет собой простую замкнутую кривую а>. Как я могу применить этот инвариант?
Я думал о добавлении некоторой базовой логики, отличной от каира, чтобы проверить это, например, предоставив какой-то объект SimpleClosedPath
для передачи в cairo (который сам проверит инвариант), но я не уверен, как это было бы возможно, поскольку Я хочу разрешить как многоугольники, так и изогнутые формы, такие как круг.
Я думал об использовании cairo для проверки, но методы проверки путей кажутся довольно ограниченными. Я чувствую, что cairo не предназначен для решения такой проблемы.
У вас есть идеи, как я могу обеспечить соблюдение этого инварианта?
На самом деле я не ищу код, а скорее идею, что-то попробовать.