Use VariationPosition instead of Axis.
Skia's SkFontArguments started out with an 'Axis' type to provide variation position. This is an unfortunate name as the values are actually positions on the axis (do not describe the axis itself) and the collection of them is commonly known as the variation. Skia would like to remove this long deprecated type, so move to the new interface. Change-Id: I460ca8cb938f078d25f41b4cd1dfc4db3a4e824f
This commit is contained in:
@@ -125,22 +125,22 @@ const std::vector<minikin::FontVariation>& MinikinFontSkia::GetAxes() const {
|
||||
|
||||
std::shared_ptr<minikin::MinikinFont> MinikinFontSkia::createFontWithVariation(
|
||||
const std::vector<minikin::FontVariation>& variations) const {
|
||||
SkFontArguments params;
|
||||
SkFontArguments args;
|
||||
|
||||
int ttcIndex;
|
||||
std::unique_ptr<SkStreamAsset> stream(mTypeface->openStream(&ttcIndex));
|
||||
LOG_ALWAYS_FATAL_IF(stream == nullptr, "openStream failed");
|
||||
|
||||
params.setCollectionIndex(ttcIndex);
|
||||
std::vector<SkFontArguments::Axis> skAxes;
|
||||
skAxes.resize(variations.size());
|
||||
args.setCollectionIndex(ttcIndex);
|
||||
std::vector<SkFontArguments::VariationPosition::Coordinate> skVariation;
|
||||
skVariation.resize(variations.size());
|
||||
for (size_t i = 0; i < variations.size(); i++) {
|
||||
skAxes[i].fTag = variations[i].axisTag;
|
||||
skAxes[i].fStyleValue = SkFloatToScalar(variations[i].value);
|
||||
skVariation[i].axis = variations[i].axisTag;
|
||||
skVariation[i].value = SkFloatToScalar(variations[i].value);
|
||||
}
|
||||
params.setAxes(skAxes.data(), skAxes.size());
|
||||
args.setVariationDesignPosition({skVariation.data(), static_cast<int>(skVariation.size())});
|
||||
sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
|
||||
sk_sp<SkTypeface> face(fm->makeFromStream(std::move(stream), params));
|
||||
sk_sp<SkTypeface> face(fm->makeFromStream(std::move(stream), args));
|
||||
|
||||
return std::make_shared<MinikinFontSkia>(std::move(face), mFontData, mFontSize, mFilePath,
|
||||
ttcIndex, variations);
|
||||
|
||||
@@ -104,21 +104,21 @@ static jlong FontFamily_getFamilyReleaseFunc(CRITICAL_JNI_PARAMS) {
|
||||
|
||||
static bool addSkTypeface(NativeFamilyBuilder* builder, sk_sp<SkData>&& data, int ttcIndex,
|
||||
jint weight, jint italic) {
|
||||
FatVector<SkFontArguments::Axis, 2> skiaAxes;
|
||||
FatVector<SkFontArguments::VariationPosition::Coordinate, 2> skVariation;
|
||||
for (const auto& axis : builder->axes) {
|
||||
skiaAxes.emplace_back(SkFontArguments::Axis{axis.axisTag, axis.value});
|
||||
skVariation.push_back({axis.axisTag, axis.value});
|
||||
}
|
||||
|
||||
const size_t fontSize = data->size();
|
||||
const void* fontPtr = data->data();
|
||||
std::unique_ptr<SkStreamAsset> fontData(new SkMemoryStream(std::move(data)));
|
||||
|
||||
SkFontArguments params;
|
||||
params.setCollectionIndex(ttcIndex);
|
||||
params.setAxes(skiaAxes.data(), skiaAxes.size());
|
||||
SkFontArguments args;
|
||||
args.setCollectionIndex(ttcIndex);
|
||||
args.setVariationDesignPosition({skVariation.data(), static_cast<int>(skVariation.size())});
|
||||
|
||||
sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
|
||||
sk_sp<SkTypeface> face(fm->makeFromStream(std::move(fontData), params));
|
||||
sk_sp<SkTypeface> face(fm->makeFromStream(std::move(fontData), args));
|
||||
if (face == NULL) {
|
||||
ALOGE("addFont failed to create font, invalid request");
|
||||
builder->axes.clear();
|
||||
|
||||
@@ -93,19 +93,19 @@ static jlong Font_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr, jo
|
||||
sk_sp<SkData> data(SkData::MakeWithProc(fontPtr, fontSize,
|
||||
release_global_ref, reinterpret_cast<void*>(fontRef)));
|
||||
|
||||
FatVector<SkFontArguments::Axis, 2> skiaAxes;
|
||||
FatVector<SkFontArguments::VariationPosition::Coordinate, 2> skVariation;
|
||||
for (const auto& axis : builder->axes) {
|
||||
skiaAxes.emplace_back(SkFontArguments::Axis{axis.axisTag, axis.value});
|
||||
skVariation.push_back({axis.axisTag, axis.value});
|
||||
}
|
||||
|
||||
std::unique_ptr<SkStreamAsset> fontData(new SkMemoryStream(std::move(data)));
|
||||
|
||||
SkFontArguments params;
|
||||
params.setCollectionIndex(ttcIndex);
|
||||
params.setAxes(skiaAxes.data(), skiaAxes.size());
|
||||
SkFontArguments args;
|
||||
args.setCollectionIndex(ttcIndex);
|
||||
args.setVariationDesignPosition({skVariation.data(), static_cast<int>(skVariation.size())});
|
||||
|
||||
sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
|
||||
sk_sp<SkTypeface> face(fm->makeFromStream(std::move(fontData), params));
|
||||
sk_sp<SkTypeface> face(fm->makeFromStream(std::move(fontData), args));
|
||||
if (face == nullptr) {
|
||||
jniThrowException(env, "java/lang/IllegalArgumentException",
|
||||
"Failed to create internal object. maybe invalid font data.");
|
||||
|
||||
Reference in New Issue
Block a user