19#include "gmock/gmock.h"
24#include "third_party/imgui/imgui.h"
40 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
42 std::vector<float> sigmas = {0.0, 0.01, 1.0};
45 for (uint32_t
i = 0;
i < sigmas.size(); ++
i) {
59 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
66 builder.
Scale(content_Scale.
x, content_Scale.
y);
69 background_paint.
setColor(
DlColor(1, 0.1, 0.1, 0.1, DlColorSpace::kSRGB));
73 std::vector<Scalar> stops = {0.0, 1.0};
78 {0, 0}, {200, 200}, 2, colors.data(), stops.data(), DlTileMode::kClamp);
99 return builder.
Build();
105 GetContentScale(), 10, DlBlurStyle::kNormal)));
110 GetContentScale(), 0, DlBlurStyle::kNormal)));
115 GetContentScale(), 10, DlBlurStyle::kOuter)));
120 GetContentScale(), 10, DlBlurStyle::kInner)));
125 GetContentScale(), 10, DlBlurStyle::kSolid)));
130 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
132 std::vector<float> sigmas = {0.0, 0.01, 1.0};
135 for (uint32_t
i = 0;
i < sigmas.size(); ++
i) {
149 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
161 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
180 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
191 DlColor::RGBA(128.0f / 255.0f, 128.0f / 255.0f, 128.0f / 255.0f, 1.0f));
201 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
205 auto callback = [&]() -> sk_sp<DisplayList> {
232 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get());
235 return builder.
Build();
238 ASSERT_TRUE(OpenPlaygroundHere(
callback));
264 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get());
267 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
277 DlImageSampling::kNearestNeighbor, &paint);
287 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get(),
292 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
302 DlImageSampling::kNearestNeighbor, &paint);
304 for (
int i = 0;
i < 6;
i++) {
313 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get(),
319 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
323 CanRenderMultipleBackdropBlurWithSingleBackdropIdAndDistinctFilters) {
330 DlImageSampling::kNearestNeighbor, &paint);
332 for (
int i = 0;
i < 6;
i++) {
340 auto backdrop_filter =
342 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get(),
348 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
361 auto backdrop_filter =
363 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get());
366 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
379 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
397 std::shared_ptr<DlImageFilter> color_filter =
399 std::shared_ptr<DlImageFilter> blur =
404 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
422 std::shared_ptr<DlImageFilter> color_filter =
424 std::shared_ptr<DlImageFilter> blur =
429 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
433 auto callback = [&]() -> sk_sp<DisplayList> {
439 auto location = point -
Point(400, 400);
440 builder.
Translate(location.x, location.y);
451 return builder.
Build();
453 ASSERT_TRUE(OpenPlaygroundHere(
callback));
470 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
485 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
490 auto callback = [&]() -> sk_sp<DisplayList> {
492 ImGuiWindowFlags_AlwaysAutoResize)) {
493 ImGui::SliderFloat(
"Sigma", &sigma, 0, 50);
497 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
505 return builder.
Build();
508 ASSERT_TRUE(OpenPlaygroundHere(
callback));
521 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
526 EXPECT_EQ(GetContext()->GetCapabilities()->GetDefaultColorFormat(),
543 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
561 builder.
Scale(0.8f, 0.8f);
577 const Scalar radius = 20.0f;
578 const Scalar y_spacing = 100.0f;
584 radius, 60.0f - radius),
594 radius, 60.0f - radius),
618 path_builder.
Close();
633 return builder.
Build();
638 {
"NormalTranslucentZeroSigma",
639 {.style = DlBlurStyle::kNormal, .sigma = 0.0f, .alpha = 0.5f}},
641 {
"NormalTranslucent",
642 {.style = DlBlurStyle::kNormal, .sigma = 8.0f, .alpha = 0.5f}},
645 {.style = DlBlurStyle::kSolid, .sigma = 8.0f, .alpha = 0.5f}},
647 {
"SolidOpaque", {.style = DlBlurStyle::kSolid, .sigma = 8.0f}},
649 {
"SolidTranslucentWithFilters",
650 {.style = DlBlurStyle::kSolid,
654 .invert_colors =
true}},
656 {
"SolidTranslucentExclusionBlend",
657 {.style = DlBlurStyle::kSolid,
660 .blend_mode = DlBlendMode::kExclusion}},
663 {.style = DlBlurStyle::kInner, .sigma = 8.0f, .alpha = 0.5f}},
665 {
"InnerTranslucentWithBlurImageFilter",
666 {.style = DlBlurStyle::kInner,
672 {.style = DlBlurStyle::kOuter, .sigma = 8.0f, .alpha = 0.5f}},
674 {
"OuterOpaqueWithBlurImageFilter",
675 {.style = DlBlurStyle::kOuter,
679#define MASK_BLUR_VARIANT_TEST(config) \
680 TEST_P(AiksTest, MaskBlurVariantTest##config) { \
681 ASSERT_TRUE(OpenPlaygroundHere( \
682 MaskBlurVariantTest(*this, kPaintVariations.at(#config)))); \
696#undef MASK_BLUR_VARIANT_TEST
700 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
713 path_builder.
Close();
722 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
727 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
740 path_builder.
Close();
749 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
754 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
767 path_builder.
Close();
776 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
781 auto callback = [&]() -> sk_sp<DisplayList> {
783 ImGuiWindowFlags_AlwaysAutoResize)) {
784 ImGui::SliderFloat(
"Sigma", &sigma, 0, 500);
789 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
797 DlPoint(200, 200), DlImageSampling::kNearestNeighbor, &paint);
803 return builder.
Build();
805 ASSERT_TRUE(OpenPlaygroundHere(
callback));
810 auto callback = [&]() -> sk_sp<DisplayList> {
812 ImGuiWindowFlags_AlwaysAutoResize)) {
813 ImGui::SliderFloat(
"Sigma", &sigma, 0, 500);
818 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
824 std::shared_ptr<Texture> boston = CreateTextureForFixture(
"boston.jpg");
831 DlImageSampling::kMipmapLinear));
835 boston->GetSize().height),
838 return builder.
Build();
840 ASSERT_TRUE(OpenPlaygroundHere(
callback));
847 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
865 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get());
868 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
874 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
875 std::shared_ptr<Texture> boston = CreateTextureForFixture(
"boston.jpg");
880 DlImageSampling::kNearestNeighbor);
894 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get());
897 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
906 CreateTextureForFixture(
"boston.jpg",
true);
912 auto callback = [&]() -> sk_sp<DisplayList> {
914 ImGuiWindowFlags_AlwaysAutoResize)) {
915 ImGui::SliderFloat(
"Sigma", &sigma, 0, 200);
916 ImGui::SliderFloat(
"Frequency", &freq, 0.01, 2.0);
917 ImGui::SliderFloat(
"Amplitude", &, 1, 100);
922 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
923 Scalar y = amp * sin(freq * 2.0 * M_PI * count / 60);
925 DlPoint(1024 / 2 - boston->GetSize().width / 2,
926 (768 / 2 - boston->GetSize().height / 2) +
y),
927 DlImageSampling::kMipmapLinear);
939 auto backdrop_filter =
941 builder.
SaveLayer(std::nullopt, &paint, backdrop_filter.get());
943 return builder.
Build();
945 ASSERT_TRUE(OpenPlaygroundHere(
callback));
951 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
957 std::vector<DlColor> colors = {
DlColor::RGBA(0.9568, 0.2627, 0.2118, 1.0),
959 std::vector<Scalar> stops = {0.0, 1.0};
968 DlTileMode::kMirror));
975 path_builder.
Close();
983 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
988 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
994 std::vector<DlColor> colors = {
DlColor::RGBA(0.9568, 0.2627, 0.2118, 1.0),
996 std::vector<Scalar> stops = {0.0, 1.0};
1005 DlTileMode::kMirror));
1012 path_builder.
Close();
1019 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
1024 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
1030 std::vector<DlColor> colors = {
DlColor::RGBA(0.9568, 0.2627, 0.2118, 1.0),
1032 std::vector<Scalar> stops = {0.0, 1.0};
1041 DlTileMode::kMirror));
1048 path_builder.
Close();
1055 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
1060 std::shared_ptr<Texture> boston = CreateTextureForFixture(
"boston.jpg");
1062 Rect::MakeXYWH(0, 0, boston->GetSize().width, boston->GetSize().height);
1068 Vector2 clip_size = {150, 75};
1070 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
1075 rect.GetRight(), rect.GetBottom()));
1077 builder.
Scale(0.6, 0.6);
1080 bounds.GetRight(), bounds.GetBottom());
1081 Rect dest = bounds.Shift(-image_center);
1083 dest.GetRight(), dest.GetBottom());
1085 sk_dst, DlImageSampling::kNearestNeighbor,
1088 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
1092 std::shared_ptr<Texture> boston = CreateTextureForFixture(
"boston.jpg");
1094 auto callback = [&]() -> sk_sp<DisplayList> {
1095 const char* tile_mode_names[] = {
"Clamp",
"Repeat",
"Mirror",
"Decal"};
1096 const DlTileMode tile_modes[] = {DlTileMode::kClamp, DlTileMode::kRepeat,
1097 DlTileMode::kMirror, DlTileMode::kDecal};
1099 static float rotation = 0;
1100 static float scale = 0.6;
1101 static int selected_tile_mode = 3;
1104 ImGuiWindowFlags_AlwaysAutoResize)) {
1105 ImGui::SliderFloat(
"Rotation (degrees)", &rotation, -180, 180);
1106 ImGui::SliderFloat(
"Scale", &scale, 0, 2.0);
1107 ImGui::Combo(
"Tile mode", &selected_tile_mode, tile_mode_names,
1108 sizeof(tile_mode_names) /
sizeof(
char*));
1114 Rect::MakeXYWH(0, 0, boston->GetSize().width, boston->GetSize().height);
1125 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
1129 builder.
Scale(scale, scale);
1130 builder.
Rotate(rotation);
1133 bounds.GetRight(), bounds.GetBottom());
1134 Rect dest = bounds.Shift(-image_center);
1136 dest.GetRight(), dest.GetBottom());
1138 sk_dst, DlImageSampling::kNearestNeighbor,
1140 return builder.
Build();
1143 ASSERT_TRUE(OpenPlaygroundHere(
callback));
1149 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
1150 builder.
Scale(0.5, 0.5);
1152 std::shared_ptr<Texture> boston = CreateTextureForFixture(
"boston.jpg");
1159 builder.
SaveLayer(std::nullopt, &paint, backdrop_filter.get());
1161 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
1171 std::shared_ptr<Texture> boston = CreateTextureForFixture(
"boston.jpg");
1173 Rect::MakeXYWH(0, 0, boston->GetSize().width, boston->GetSize().height);
1179 Vector2 clip_size = {150, 75};
1181 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
1186 clip_bounds.GetRight(),
1187 clip_bounds.GetBottom()));
1189 builder.
Scale(0.6, 0.6);
1192 auto dst_rect = bounds.Shift(-image_center);
1196 bounds.GetBottom()),
1199 dst_rect.GetRight(), dst_rect.GetBottom()),
1200 DlImageSampling::kMipmapLinear, &paint);
1202 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
1206 auto callback = [&]() -> sk_sp<DisplayList> {
1207 const char* tile_mode_names[] = {
"Clamp",
"Repeat",
"Mirror",
"Decal"};
1208 const DlTileMode tile_modes[] = {DlTileMode::kClamp, DlTileMode::kRepeat,
1209 DlTileMode::kMirror, DlTileMode::kDecal};
1211 static float rotation = 45;
1212 static float scale = 0.6;
1213 static int selected_tile_mode = 3;
1216 ImGuiWindowFlags_AlwaysAutoResize)) {
1217 ImGui::SliderFloat(
"Rotation (degrees)", &rotation, -180, 180);
1218 ImGui::SliderFloat(
"Scale", &scale, 0, 2.0);
1219 ImGui::Combo(
"Tile mode", &selected_tile_mode, tile_mode_names,
1220 sizeof(tile_mode_names) /
sizeof(
char*));
1232 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
1234 builder.
Scale(scale, scale);
1235 builder.
Rotate(rotation);
1240 return builder.
Build();
1243 ASSERT_TRUE(OpenPlaygroundHere(
callback));
1248 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
1255 paint.setStrokeWidth(5);
1256 paint.setDrawStyle(DlDrawStyle::kStroke);
1257 draw_line(
DlPoint(dx + 100, dy + 100),
DlPoint(dx + 200, dy + 200));
1258 draw_line(
DlPoint(dx + 100, dy + 200),
DlPoint(dx + 200, dy + 100));
1259 draw_line(
DlPoint(dx + 150, dy + 100),
DlPoint(dx + 200, dy + 150));
1260 draw_line(
DlPoint(dx + 100, dy + 150),
DlPoint(dx + 150, dy + 200));
1265 for (
int x = 0;
x < 5; ++
x) {
1266 for (
int y = 0;
y < 5; ++
y) {
1272 recorder_builder.
DrawRect(rect, paint);
1298 paint_lines(0, 300, paint);
1301 paint_lines(300, 300, paint);
1303 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
1312 for (int32_t
i = 1;
i < 5; ++
i) {
1327 EXPECT_TRUE(
image) <<
" length " <<
i;
1336 for (int32_t
i = 1;
i < 5; ++
i) {
1353 EXPECT_TRUE(
image) <<
" length " <<
i;
1358 CanRenderMultipleBackdropBlurWithSingleBackdropIdDifferentLayers) {
1365 DlImageSampling::kNearestNeighbor, &paint);
1367 for (
int i = 0;
i < 6;
i++) {
1371 builder.
SaveLayer(std::nullopt, &paint);
1381 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get(),
1390 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
1395 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
1397 std::vector<DlColor> colors = {
DlColor(0xFFFF0000),
DlColor(0xFF00FF00)};
1398 std::vector<Scalar> stops = {0.0, 1.0};
1401 {0, 0}, {400, 400}, 2, colors.data(), stops.data(), DlTileMode::kClamp);
1405 builder.
SaveLayer(std::nullopt, &save_paint);
1414 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
1423 auto callback = [&]() -> sk_sp<DisplayList> {
1428 Scalar offset = amp * sin(freq * 2.0 * M_PI * count / 60.0);
1443 builder.
SaveLayer(std::nullopt,
nullptr, backdrop_filter1.get());
1452 auto backdrop_filter2 =
1456 builder.
SaveLayer(std::nullopt,
nullptr, backdrop_filter2.get());
1464 return builder.
Build();
1466 ASSERT_TRUE(OpenPlaygroundHere(
callback));
#define MASK_BLUR_VARIANT_TEST(config)
void DrawOval(const DlRect &bounds, const DlPaint &paint) override
void ClipRect(const DlRect &rect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
void DrawImageRect(const sk_sp< DlImage > &image, const DlRect &src, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast) override
void DrawRoundRect(const DlRoundRect &rrect, const DlPaint &paint) override
void DrawImage(const sk_sp< DlImage > &image, const DlPoint &point, DlImageSampling sampling, const DlPaint *paint=nullptr) override
void DrawColor(DlColor color, DlBlendMode mode) override
void DrawCircle(const DlPoint ¢er, DlScalar radius, const DlPaint &paint) override
void SaveLayer(const std::optional< DlRect > &bounds, const DlPaint *paint=nullptr, const DlImageFilter *backdrop=nullptr, std::optional< int64_t > backdrop_id=std::nullopt) override
void DrawLine(const DlPoint &p0, const DlPoint &p1, const DlPaint &paint) override
void ClipRoundRect(const DlRoundRect &rrect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
void Rotate(DlScalar degrees) override
void Scale(DlScalar sx, DlScalar sy) override
void Translate(DlScalar tx, DlScalar ty) override
void DrawPaint(const DlPaint &paint) override
sk_sp< DisplayList > Build()
void DrawPath(const DlPath &path, const DlPaint &paint) override
void Transform(const DlMatrix &matrix) override
void DrawRect(const DlRect &rect, const DlPaint &paint) override
static std::shared_ptr< DlMaskFilter > Make(DlBlurStyle style, SkScalar sigma, bool respect_ctm=true)
static std::shared_ptr< const DlColorFilter > MakeBlend(DlColor color, DlBlendMode mode)
static std::shared_ptr< const DlColorFilter > MakeMatrix(const float matrix[20])
static std::shared_ptr< DlColorSource > MakeImage(const sk_sp< const DlImage > &image, DlTileMode horizontal_tile_mode, DlTileMode vertical_tile_mode, DlImageSampling sampling=DlImageSampling::kLinear, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlColorSource > MakeLinear(const DlPoint start_point, const DlPoint end_point, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlImageFilter > MakeBlur(DlScalar sigma_x, DlScalar sigma_y, DlTileMode tile_mode)
static std::shared_ptr< DlImageFilter > MakeColorFilter(const std::shared_ptr< const DlColorFilter > &filter)
static std::shared_ptr< DlImageFilter > MakeCompose(const std::shared_ptr< DlImageFilter > &outer, const std::shared_ptr< DlImageFilter > &inner)
DlPaint & setColor(DlColor color)
DlPaint & setInvertColors(bool isInvertColors)
DlPaint & setStrokeWidth(float width)
DlPaint & setBlendMode(DlBlendMode mode)
DlPaint & setImageFilter(std::nullptr_t filter)
DlPaint & setMaskFilter(std::nullptr_t filter)
DlPaint & setDrawStyle(DlDrawStyle style)
DlPaint & setOpacity(DlScalar opacity)
DlPaint & setColorFilter(std::nullptr_t filter)
DlPaint & setColorSource(std::nullptr_t source)
DlPathBuilder & LineTo(DlPoint p2)
Draw a line from the current point to the indicated point p2.
DlPathBuilder & MoveTo(DlPoint p2)
Start a new contour that will originate at the indicated point p2.
const DlPath TakePath()
Returns the path constructed by this path builder and resets its internal state to the default state ...
DlPathBuilder & Close()
The path is closed back to the location of the most recent MoveTo call. Contours that are filled are ...
static DlPath MakeLine(const DlPoint a, const DlPoint b)
static DlPath MakeCircle(const DlPoint center, DlScalar radius)
static DlPath MakeArc(const DlRect &bounds, DlDegrees start, DlDegrees sweep, bool use_center)
static DlPath MakeRect(const DlRect &rect)
static bool ImGuiBegin(const char *name, bool *p_open, ImGuiWindowFlags flags)
static sk_sp< DlImageImpeller > Make(std::shared_ptr< Texture > texture, OwningContext owning_context=OwningContext::kIO)
Point GetContentScale() const
FlutterVulkanImage * image
FlutterDesktopBinaryReply callback
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
TEST_P(AiksTest, DrawAtlasNoColor)
static const std::map< std::string, MaskBlurTestConfig > kPaintVariations
sk_sp< flutter::DisplayList > DoGradientOvalStrokeMaskBlur(Vector2 content_Scale, Scalar sigma, DlBlurStyle style)
static sk_sp< DisplayList > MaskBlurVariantTest(const AiksTest &test_context, const MaskBlurTestConfig &config)
std::shared_ptr< Texture > DisplayListToTexture(const sk_sp< flutter::DisplayList > &display_list, ISize size, AiksContext &context, bool reset_host_buffer, bool generate_mips)
Render the provided display list to a texture with the given size.
Point DrawPlaygroundPoint(PlaygroundPoint &point)
std::tuple< Point, Point > DrawPlaygroundLine(PlaygroundPoint &point_a, PlaygroundPoint &point_b)
static constexpr DlColor kMagenta()
static constexpr DlColor kWhite()
static constexpr DlColor kBlue()
static constexpr DlColor kDarkMagenta()
static constexpr DlColor RGBA(DlScalar r, DlScalar g, DlScalar b, DlScalar a)
Construct a 32 bit color from floating point R, G, B, and A color channels.
static constexpr DlColor kCrimson()
static constexpr DlColor kMaroon()
static constexpr DlColor kYellow()
static constexpr DlColor kPurple()
static constexpr DlColor kChartreuse()
static constexpr DlColor kCornflowerBlue()
static constexpr DlColor kDarkGreen()
static constexpr DlColor kRed()
static constexpr DlColor kGreen()
static constexpr DlColor kOrange()
static constexpr DlColor kLimeGreen()
static constexpr DlColor kOrangeRed()
static constexpr DlColor kGreenYellow()
static constexpr Color White()
static constexpr Color Red()
static constexpr Color AntiqueWhite()
static constexpr Color Green()
static constexpr Matrix MakeTranslation(const Vector3 &t)
static constexpr Matrix MakeScale(const Vector3 &s)
For convolution filters, the "radius" is the size of the convolution kernel to use on the local space...
static RoundRect MakeRectXY(const Rect &rect, Scalar x_radius, Scalar y_radius)
In filters that use Gaussian distributions, "sigma" is a size of one standard deviation in terms of t...
static constexpr TRect MakeXYWH(Type x, Type y, Type width, Type height)
constexpr TRect< T > Expand(T left, T top, T right, T bottom) const
Returns a rectangle with expanded edges. Negative expansion results in shrinking.
static constexpr TRect MakeLTRB(Type left, Type top, Type right, Type bottom)
std::shared_ptr< DlImageFilter > image_filter