| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "impeller/display_list/conversion_utilities.h" |
| |
| namespace impeller { |
| |
| BlendMode ToBlendMode(flutter::DlBlendMode mode) { |
| switch (mode) { |
| case flutter::DlBlendMode::kClear: |
| return BlendMode::kClear; |
| case flutter::DlBlendMode::kSrc: |
| return BlendMode::kSource; |
| case flutter::DlBlendMode::kDst: |
| return BlendMode::kDestination; |
| case flutter::DlBlendMode::kSrcOver: |
| return BlendMode::kSourceOver; |
| case flutter::DlBlendMode::kDstOver: |
| return BlendMode::kDestinationOver; |
| case flutter::DlBlendMode::kSrcIn: |
| return BlendMode::kSourceIn; |
| case flutter::DlBlendMode::kDstIn: |
| return BlendMode::kDestinationIn; |
| case flutter::DlBlendMode::kSrcOut: |
| return BlendMode::kSourceOut; |
| case flutter::DlBlendMode::kDstOut: |
| return BlendMode::kDestinationOut; |
| case flutter::DlBlendMode::kSrcATop: |
| return BlendMode::kSourceATop; |
| case flutter::DlBlendMode::kDstATop: |
| return BlendMode::kDestinationATop; |
| case flutter::DlBlendMode::kXor: |
| return BlendMode::kXor; |
| case flutter::DlBlendMode::kPlus: |
| return BlendMode::kPlus; |
| case flutter::DlBlendMode::kModulate: |
| return BlendMode::kModulate; |
| case flutter::DlBlendMode::kScreen: |
| return BlendMode::kScreen; |
| case flutter::DlBlendMode::kOverlay: |
| return BlendMode::kOverlay; |
| case flutter::DlBlendMode::kDarken: |
| return BlendMode::kDarken; |
| case flutter::DlBlendMode::kLighten: |
| return BlendMode::kLighten; |
| case flutter::DlBlendMode::kColorDodge: |
| return BlendMode::kColorDodge; |
| case flutter::DlBlendMode::kColorBurn: |
| return BlendMode::kColorBurn; |
| case flutter::DlBlendMode::kHardLight: |
| return BlendMode::kHardLight; |
| case flutter::DlBlendMode::kSoftLight: |
| return BlendMode::kSoftLight; |
| case flutter::DlBlendMode::kDifference: |
| return BlendMode::kDifference; |
| case flutter::DlBlendMode::kExclusion: |
| return BlendMode::kExclusion; |
| case flutter::DlBlendMode::kMultiply: |
| return BlendMode::kMultiply; |
| case flutter::DlBlendMode::kHue: |
| return BlendMode::kHue; |
| case flutter::DlBlendMode::kSaturation: |
| return BlendMode::kSaturation; |
| case flutter::DlBlendMode::kColor: |
| return BlendMode::kColor; |
| case flutter::DlBlendMode::kLuminosity: |
| return BlendMode::kLuminosity; |
| } |
| FML_UNREACHABLE(); |
| } |
| |
| Entity::TileMode ToTileMode(flutter::DlTileMode tile_mode) { |
| switch (tile_mode) { |
| case flutter::DlTileMode::kClamp: |
| return Entity::TileMode::kClamp; |
| case flutter::DlTileMode::kRepeat: |
| return Entity::TileMode::kRepeat; |
| case flutter::DlTileMode::kMirror: |
| return Entity::TileMode::kMirror; |
| case flutter::DlTileMode::kDecal: |
| return Entity::TileMode::kDecal; |
| } |
| } |
| |
| impeller::SamplerDescriptor ToSamplerDescriptor( |
| const flutter::DlImageSampling options) { |
| impeller::SamplerDescriptor desc; |
| switch (options) { |
| case flutter::DlImageSampling::kNearestNeighbor: |
| desc.min_filter = desc.mag_filter = impeller::MinMagFilter::kNearest; |
| desc.label = "Nearest Sampler"; |
| break; |
| case flutter::DlImageSampling::kLinear: |
| desc.min_filter = desc.mag_filter = impeller::MinMagFilter::kLinear; |
| desc.label = "Linear Sampler"; |
| break; |
| case flutter::DlImageSampling::kMipmapLinear: |
| desc.min_filter = desc.mag_filter = impeller::MinMagFilter::kLinear; |
| desc.mip_filter = impeller::MipFilter::kLinear; |
| desc.label = "Mipmap Linear Sampler"; |
| break; |
| default: |
| break; |
| } |
| return desc; |
| } |
| |
| impeller::SamplerDescriptor ToSamplerDescriptor( |
| const flutter::DlFilterMode options) { |
| impeller::SamplerDescriptor desc; |
| switch (options) { |
| case flutter::DlFilterMode::kNearest: |
| desc.min_filter = desc.mag_filter = impeller::MinMagFilter::kNearest; |
| desc.label = "Nearest Sampler"; |
| break; |
| case flutter::DlFilterMode::kLinear: |
| desc.min_filter = desc.mag_filter = impeller::MinMagFilter::kLinear; |
| desc.label = "Linear Sampler"; |
| break; |
| default: |
| break; |
| } |
| return desc; |
| } |
| |
| Matrix ToMatrix(const SkMatrix& m) { |
| return Matrix{ |
| // clang-format off |
| m[0], m[3], 0, m[6], |
| m[1], m[4], 0, m[7], |
| 0, 0, 1, 0, |
| m[2], m[5], 0, m[8], |
| // clang-format on |
| }; |
| } |
| |
| Point ToPoint(const SkPoint& point) { |
| return Point::MakeXY(point.fX, point.fY); |
| } |
| |
| Color ToColor(const SkColor& color) { |
| return { |
| static_cast<Scalar>(SkColorGetR(color) / 255.0), // |
| static_cast<Scalar>(SkColorGetG(color) / 255.0), // |
| static_cast<Scalar>(SkColorGetB(color) / 255.0), // |
| static_cast<Scalar>(SkColorGetA(color) / 255.0) // |
| }; |
| } |
| |
| std::vector<Color> ToColors(const flutter::DlColor colors[], int count) { |
| auto result = std::vector<Color>(); |
| if (colors == nullptr) { |
| return result; |
| } |
| for (int i = 0; i < count; i++) { |
| result.push_back(ToColor(colors[i])); |
| } |
| return result; |
| } |
| |
| std::vector<Matrix> ToRSXForms(const SkRSXform xform[], int count) { |
| auto result = std::vector<Matrix>(); |
| for (int i = 0; i < count; i++) { |
| auto form = xform[i]; |
| // clang-format off |
| auto matrix = Matrix{ |
| form.fSCos, form.fSSin, 0, 0, |
| -form.fSSin, form.fSCos, 0, 0, |
| 0, 0, 1, 0, |
| form.fTx, form.fTy, 0, 1 |
| }; |
| // clang-format on |
| result.push_back(matrix); |
| } |
| return result; |
| } |
| |
| } // namespace impeller |