| /* |
| * Copyright 2022 Rive |
| */ |
| |
| #ifndef _RIVE_TO_SKIA_HPP_ |
| #define _RIVE_TO_SKIA_HPP_ |
| |
| #include "include/core/SkMatrix.h" |
| #include "include/core/SkPaint.h" |
| #include "include/core/SkPathTypes.h" |
| #include "include/core/SkTileMode.h" |
| |
| #include "rive/math/mat2d.hpp" |
| #include "rive/math/vec2d.hpp" |
| #include "rive/renderer.hpp" |
| #include "rive/shapes/paint/stroke_cap.hpp" |
| #include "rive/shapes/paint/stroke_join.hpp" |
| #include "rive/shapes/paint/blend_mode.hpp" |
| |
| namespace rive { |
| class ToSkia { |
| public: |
| static SkMatrix convert(const rive::Mat2D& m) { |
| return SkMatrix::MakeAll(m[0], m[2], m[4], m[1], m[3], m[5], 0, 0, 1); |
| } |
| |
| static SkPoint convert(const rive::Vec2D& point) { |
| return SkPoint::Make(point[0], point[1]); |
| } |
| |
| // clang-format off |
| static SkTileMode convert(RenderTileMode rtm) { |
| switch (rtm) { |
| case RenderTileMode::clamp: return SkTileMode::kClamp; |
| case RenderTileMode::repeat: return SkTileMode::kRepeat; |
| case RenderTileMode::mirror: return SkTileMode::kMirror; |
| case RenderTileMode::decal: return SkTileMode::kDecal; |
| } |
| assert(false); |
| return SkTileMode::kClamp; |
| } |
| |
| static SkPathFillType convert(FillRule value) { |
| switch (value) { |
| case FillRule::evenOdd: return SkPathFillType::kEvenOdd; |
| case FillRule::nonZero: return SkPathFillType::kWinding; |
| } |
| assert(false); |
| return SkPathFillType::kWinding; |
| } |
| |
| static SkPaint::Cap convert(rive::StrokeCap cap) { |
| switch (cap) { |
| case StrokeCap::butt: return SkPaint::Cap::kButt_Cap; |
| case StrokeCap::round: return SkPaint::Cap::kRound_Cap; |
| case StrokeCap::square: return SkPaint::Cap::kSquare_Cap; |
| } |
| assert(false); |
| return SkPaint::Cap::kButt_Cap; |
| } |
| |
| static SkPaint::Join convert(StrokeJoin join) { |
| switch (join) { |
| case StrokeJoin::bevel: return SkPaint::Join::kBevel_Join; |
| case StrokeJoin::round: return SkPaint::Join::kRound_Join; |
| case StrokeJoin::miter: return SkPaint::Join::kMiter_Join; |
| } |
| assert(false); |
| return SkPaint::Join::kMiter_Join; |
| } |
| |
| static SkBlendMode convert(BlendMode blendMode) { |
| switch (blendMode) { |
| case BlendMode::srcOver: return SkBlendMode::kSrcOver; |
| case BlendMode::screen: return SkBlendMode::kScreen; |
| case BlendMode::overlay: return SkBlendMode::kOverlay; |
| case BlendMode::darken: return SkBlendMode::kDarken; |
| case BlendMode::lighten: return SkBlendMode::kLighten; |
| case BlendMode::colorDodge: return SkBlendMode::kColorDodge; |
| case BlendMode::colorBurn: return SkBlendMode::kColorBurn; |
| case BlendMode::hardLight: return SkBlendMode::kHardLight; |
| case BlendMode::softLight: return SkBlendMode::kSoftLight; |
| case BlendMode::difference: return SkBlendMode::kDifference; |
| case BlendMode::exclusion: return SkBlendMode::kExclusion; |
| case BlendMode::multiply: return SkBlendMode::kMultiply; |
| case BlendMode::hue: return SkBlendMode::kHue; |
| case BlendMode::saturation: return SkBlendMode::kSaturation; |
| case BlendMode::color: return SkBlendMode::kColor; |
| case BlendMode::luminosity: return SkBlendMode::kLuminosity; |
| } |
| assert(false); |
| return SkBlendMode::kSrcOver; |
| } |
| // clang-format off |
| }; |
| } // namespace rive |
| #endif |