blob: fbe186a0c8c4c3dc70d79b5a774715d077afb3b8 [file] [log] [blame]
// 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.
#ifndef FLUTTER_LIB_WEB_UI_SKWASM_HELPERS_H_
#define FLUTTER_LIB_WEB_UI_SKWASM_HELPERS_H_
#include "third_party/skia/include/core/SkMatrix.h"
#include "third_party/skia/include/core/SkRRect.h"
#include "third_party/skia/include/core/SkSamplingOptions.h"
namespace Skwasm {
inline SkMatrix createMatrix(const SkScalar* f) {
return SkMatrix::MakeAll(f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7],
f[8]);
}
inline SkRRect createRRect(const SkScalar* f) {
const SkRect* rect = reinterpret_cast<const SkRect*>(f);
const SkVector* radiiValues = reinterpret_cast<const SkVector*>(f + 4);
SkRRect rr;
rr.setRectRadii(*rect, radiiValues);
return rr;
}
// This needs to be kept in sync with the "FilterQuality" enum in dart:ui
enum class FilterQuality {
none,
low,
medium,
high,
};
inline SkFilterMode filterModeForQuality(FilterQuality quality) {
switch (quality) {
case FilterQuality::none:
case FilterQuality::low:
return SkFilterMode::kNearest;
case FilterQuality::medium:
case FilterQuality::high:
return SkFilterMode::kLinear;
}
}
inline SkSamplingOptions samplingOptionsForQuality(FilterQuality quality) {
switch (quality) {
case FilterQuality::none:
return SkSamplingOptions(SkFilterMode::kNearest, SkMipmapMode::kNone);
case FilterQuality::low:
return SkSamplingOptions(SkFilterMode::kNearest, SkMipmapMode::kNearest);
case FilterQuality::medium:
return SkSamplingOptions(SkFilterMode::kLinear, SkMipmapMode::kLinear);
case FilterQuality::high:
// Cubic equation coefficients recommended by Mitchell & Netravali
// in their paper on cubic interpolation.
return SkSamplingOptions(SkCubicResampler::Mitchell());
}
}
} // namespace Skwasm
#endif // FLUTTER_LIB_WEB_UI_SKWASM_HELPERS_H_