添加creeper-qt最新依赖
This commit is contained in:
99
creeper-qt/utility/painter/common.hh
Normal file
99
creeper-qt/utility/painter/common.hh
Normal file
@@ -0,0 +1,99 @@
|
||||
#pragma once
|
||||
#include "creeper-qt/utility/wrapper/property.hh"
|
||||
|
||||
#include <qpainter.h>
|
||||
|
||||
namespace creeper::qt {
|
||||
using painter = QPainter;
|
||||
using point = QPointF;
|
||||
using size = QSizeF;
|
||||
using rect = QRectF;
|
||||
using color = QColor;
|
||||
using real = qreal;
|
||||
using align = Qt::Alignment;
|
||||
using string = QString;
|
||||
using font = QFont;
|
||||
using text_option = QTextOption;
|
||||
using icon = QIcon;
|
||||
}
|
||||
|
||||
namespace creeper::painter {
|
||||
|
||||
template <class T>
|
||||
concept common_trait = requires(T t) {
|
||||
{ auto { t.origin } } -> std::same_as<qt::point>;
|
||||
{ auto { t.size } } -> std::same_as<qt::size>;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
concept container_trait = requires(T t) {
|
||||
{ auto { t.align } } -> std::same_as<qt::align>;
|
||||
} && common_trait<T>;
|
||||
|
||||
template <class T>
|
||||
concept shape_trait = requires(T t) {
|
||||
{ auto { t.color_container } } -> std::same_as<qt::color>;
|
||||
{ auto { t.color_outline } } -> std::same_as<qt::color>;
|
||||
{ auto { t.thickness_outline } } -> std::same_as<qt::real>;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
concept drawable_trait = common_trait<T> && std::invocable<T, qt::painter&>;
|
||||
|
||||
struct CommonProps {
|
||||
qt::point origin = qt::point { 0, 0 };
|
||||
qt::size size = qt::size { 0, 0 };
|
||||
auto rect() const { return qt::rect { origin, size }; }
|
||||
};
|
||||
|
||||
struct ContainerProps {
|
||||
qt::size size = qt::size { 0, 0 };
|
||||
qt::align align = qt::align {};
|
||||
qt::point origin = qt::point { 0, 0 };
|
||||
auto rect() const { return qt::rect { origin, size }; }
|
||||
};
|
||||
|
||||
struct ShapeProps {
|
||||
qt::color container_color = Qt::transparent;
|
||||
qt::color outline_color = Qt::transparent;
|
||||
qt::real outline_width = 0;
|
||||
};
|
||||
|
||||
}
|
||||
namespace creeper::painter::common::pro {
|
||||
|
||||
struct Token { };
|
||||
|
||||
using Size = DerivedProp<Token, qt::size, [](auto& self, auto const& v) { self.size = v; }>;
|
||||
using Origin = DerivedProp<Token, qt::point, [](auto& self, auto const& v) { self.origin = v; }>;
|
||||
|
||||
using ContainerColor =
|
||||
SetterProp<Token, qt::color, [](auto& self, auto const& v) { self.container_color = v; }>;
|
||||
using OutlineColor =
|
||||
SetterProp<Token, qt::color, [](auto& self, auto const& v) { self.outline_color = v; }>;
|
||||
using OutlineWidth =
|
||||
SetterProp<Token, qt::real, [](auto& self, auto const& v) { self.outline_width = v; }>;
|
||||
|
||||
struct Outline : Token {
|
||||
qt::color color;
|
||||
qt::real width;
|
||||
Outline(const qt::color& color, qt::real width)
|
||||
: color { color }
|
||||
, width { width } { }
|
||||
auto apply(auto& self) {
|
||||
self.outline_color = color;
|
||||
self.outline_width = width;
|
||||
}
|
||||
};
|
||||
|
||||
/// Alias
|
||||
|
||||
using Fill = ContainerColor;
|
||||
|
||||
/// Export
|
||||
|
||||
template <class T>
|
||||
concept trait = std::derived_from<T, Token>;
|
||||
|
||||
CREEPER_DEFINE_CHECKER(trait);
|
||||
}
|
||||
Reference in New Issue
Block a user