Keep file path used to create SkTypeface in MinikinFontSkia
This is a ground work for the itemize API. The file path will be the output of the itemize API. Bug: 114479228 Test: minikin_tests Test: hwui_unit_tests (only tested on 32bit. couldn't test 64bit) Change-Id: I70252594889175bf5fa0013bbaa95c6c87ca5680
This commit is contained in:
parent
f5231c8c02
commit
54c6a2722b
@ -129,7 +129,7 @@ static bool addSkTypeface(NativeFamilyBuilder* builder, sk_sp<SkData>&& data, in
|
||||
return false;
|
||||
}
|
||||
std::shared_ptr<minikin::MinikinFont> minikinFont =
|
||||
std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize, ttcIndex,
|
||||
std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize, "", ttcIndex,
|
||||
builder->axes);
|
||||
minikin::Font::Builder fontBuilder(minikinFont);
|
||||
|
||||
|
@ -134,7 +134,7 @@ static void Font_Builder_addAxis(jlong builderPtr, jint tag, jfloat value) {
|
||||
|
||||
// Regular JNI
|
||||
static jlong Font_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr, jobject buffer,
|
||||
jint weight, jboolean italic, jint ttcIndex) {
|
||||
jstring filePath, jint weight, jboolean italic, jint ttcIndex) {
|
||||
NPE_CHECK_RETURN_ZERO(env, buffer);
|
||||
std::unique_ptr<NativeFontBuilder> builder(toBuilder(builderPtr));
|
||||
const void* fontPtr = env->GetDirectBufferAddress(buffer);
|
||||
@ -148,6 +148,7 @@ static jlong Font_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr, jo
|
||||
"buffer size must not be zero or negative");
|
||||
return 0;
|
||||
}
|
||||
ScopedUtfChars fontPath(env, filePath);
|
||||
jobject fontRef = MakeGlobalRefOrDie(env, buffer);
|
||||
sk_sp<SkData> data(SkData::MakeWithProc(fontPtr, fontSize,
|
||||
release_global_ref, reinterpret_cast<void*>(fontRef)));
|
||||
@ -171,8 +172,9 @@ static jlong Font_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr, jo
|
||||
return 0;
|
||||
}
|
||||
std::shared_ptr<minikin::MinikinFont> minikinFont =
|
||||
std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize, ttcIndex,
|
||||
builder->axes);
|
||||
std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize,
|
||||
std::string_view(fontPath.c_str(), fontPath.size()),
|
||||
ttcIndex, builder->axes);
|
||||
minikin::Font font = minikin::Font::Builder(minikinFont).setWeight(weight)
|
||||
.setSlant(static_cast<minikin::FontStyle::Slant>(italic)).build();
|
||||
return reinterpret_cast<jlong>(new FontWrapper(std::move(font)));
|
||||
@ -188,7 +190,7 @@ static jlong Font_Builder_getReleaseNativeFont() {
|
||||
static const JNINativeMethod gFontBuilderMethods[] = {
|
||||
{ "nInitBuilder", "()J", (void*) Font_Builder_initBuilder },
|
||||
{ "nAddAxis", "(JIF)V", (void*) Font_Builder_addAxis },
|
||||
{ "nBuild", "(JLjava/nio/ByteBuffer;IZI)J", (void*) Font_Builder_build },
|
||||
{ "nBuild", "(JLjava/nio/ByteBuffer;Ljava/lang/String;IZI)J", (void*) Font_Builder_build },
|
||||
{ "nGetReleaseNativeFont", "()J", (void*) Font_Builder_getReleaseNativeFont },
|
||||
|
||||
{ "nGetNativeAsset", "(Landroid/content/res/AssetManager;Ljava/lang/String;ZI)J",
|
||||
|
@ -372,7 +372,9 @@ public final class Font {
|
||||
}
|
||||
}
|
||||
final ByteBuffer readonlyBuffer = mBuffer.asReadOnlyBuffer();
|
||||
final long ptr = nBuild(builderPtr, readonlyBuffer, mWeight, italic, mTtcIndex);
|
||||
final String filePath = mFile == null ? "" : mFile.getAbsolutePath();
|
||||
final long ptr = nBuild(builderPtr, readonlyBuffer, filePath, mWeight, italic,
|
||||
mTtcIndex);
|
||||
final Font font = new Font(ptr, readonlyBuffer, mFile,
|
||||
new FontStyle(mWeight, slant), mTtcIndex, mAxes, mLocaleList);
|
||||
sFontRegistory.registerNativeAllocation(font, ptr);
|
||||
@ -395,7 +397,8 @@ public final class Font {
|
||||
@CriticalNative
|
||||
private static native void nAddAxis(long builderPtr, int tag, float value);
|
||||
private static native long nBuild(
|
||||
long builderPtr, ByteBuffer buffer, int weight, boolean italic, int ttcIndex);
|
||||
long builderPtr, @NonNull ByteBuffer buffer, @NonNull String filePath, int weight,
|
||||
boolean italic, int ttcIndex);
|
||||
@CriticalNative
|
||||
private static native long nGetReleaseNativeFont();
|
||||
}
|
||||
|
@ -30,13 +30,15 @@
|
||||
namespace android {
|
||||
|
||||
MinikinFontSkia::MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize,
|
||||
int ttcIndex, const std::vector<minikin::FontVariation>& axes)
|
||||
std::string_view filePath, int ttcIndex,
|
||||
const std::vector<minikin::FontVariation>& axes)
|
||||
: minikin::MinikinFont(typeface->uniqueID())
|
||||
, mTypeface(std::move(typeface))
|
||||
, mFontData(fontData)
|
||||
, mFontSize(fontSize)
|
||||
, mTtcIndex(ttcIndex)
|
||||
, mAxes(axes) {}
|
||||
, mAxes(axes)
|
||||
, mFilePath(filePath) {}
|
||||
|
||||
static void MinikinFontSkia_SetSkiaPaint(const minikin::MinikinFont* font, SkPaint* skPaint,
|
||||
const minikin::MinikinPaint& paint,
|
||||
@ -131,8 +133,8 @@ std::shared_ptr<minikin::MinikinFont> MinikinFontSkia::createFontWithVariation(
|
||||
sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
|
||||
sk_sp<SkTypeface> face(fm->makeFromStream(std::move(stream), params));
|
||||
|
||||
return std::make_shared<MinikinFontSkia>(std::move(face), mFontData, mFontSize, ttcIndex,
|
||||
variations);
|
||||
return std::make_shared<MinikinFontSkia>(std::move(face), mFontData, mFontSize, mFilePath,
|
||||
ttcIndex, variations);
|
||||
}
|
||||
|
||||
uint32_t MinikinFontSkia::packPaintFlags(const SkPaint* paint) {
|
||||
|
@ -28,8 +28,9 @@ namespace android {
|
||||
|
||||
class ANDROID_API MinikinFontSkia : public minikin::MinikinFont {
|
||||
public:
|
||||
explicit MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize,
|
||||
int ttcIndex, const std::vector<minikin::FontVariation>& axes);
|
||||
MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize,
|
||||
std::string_view filePath, int ttcIndex,
|
||||
const std::vector<minikin::FontVariation>& axes);
|
||||
|
||||
float GetHorizontalAdvance(uint32_t glyph_id, const minikin::MinikinPaint& paint,
|
||||
const minikin::FontFakery& fakery) const override;
|
||||
@ -48,6 +49,7 @@ public:
|
||||
const void* GetFontData() const;
|
||||
size_t GetFontSize() const;
|
||||
int GetFontIndex() const;
|
||||
const std::string& getFilePath() const { return mFilePath; }
|
||||
const std::vector<minikin::FontVariation>& GetAxes() const;
|
||||
std::shared_ptr<minikin::MinikinFont> createFontWithVariation(
|
||||
const std::vector<minikin::FontVariation>&) const;
|
||||
@ -68,6 +70,7 @@ private:
|
||||
size_t mFontSize;
|
||||
int mTtcIndex;
|
||||
std::vector<minikin::FontVariation> mAxes;
|
||||
std::string mFilePath;
|
||||
};
|
||||
|
||||
} // namespace android
|
||||
|
@ -183,7 +183,8 @@ void Typeface::setRobotoTypefaceForTest() {
|
||||
LOG_ALWAYS_FATAL_IF(typeface == nullptr, "Failed to make typeface from %s", kRobotoFont);
|
||||
|
||||
std::shared_ptr<minikin::MinikinFont> font = std::make_shared<MinikinFontSkia>(
|
||||
std::move(typeface), data, st.st_size, 0, std::vector<minikin::FontVariation>());
|
||||
std::move(typeface), data, st.st_size, kRobotoFont, 0,
|
||||
std::vector<minikin::FontVariation>());
|
||||
std::vector<minikin::Font> fonts;
|
||||
fonts.push_back(minikin::Font::Builder(font).build());
|
||||
|
||||
|
@ -55,7 +55,8 @@ std::shared_ptr<minikin::FontFamily> buildFamily(const char* fileName) {
|
||||
sk_sp<SkTypeface> typeface(fm->makeFromStream(std::move(fontData)));
|
||||
LOG_ALWAYS_FATAL_IF(typeface == nullptr, "Failed to make typeface from %s", fileName);
|
||||
std::shared_ptr<minikin::MinikinFont> font = std::make_shared<MinikinFontSkia>(
|
||||
std::move(typeface), data, st.st_size, 0, std::vector<minikin::FontVariation>());
|
||||
std::move(typeface), data, st.st_size, fileName, 0,
|
||||
std::vector<minikin::FontVariation>());
|
||||
std::vector<minikin::Font> fonts;
|
||||
fonts.push_back(minikin::Font::Builder(font).build());
|
||||
return std::make_shared<minikin::FontFamily>(std::move(fonts));
|
||||
|
Loading…
x
Reference in New Issue
Block a user