Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcaee13d authored by Ben Wagner's avatar Ben Wagner Committed by Android (Google) Code Review
Browse files

Merge "Move SkTypeface::CreateXXX to SkTypeface::MakeXXX."

parents 20ea6a37 81be3a96
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -53,9 +53,10 @@ static void FontFamily_unref(JNIEnv* env, jobject clazz, jlong familyPtr) {
    fontFamily->Unref();
}

static jboolean addSkTypeface(minikin::FontFamily* family, SkTypeface* face, const void* fontData,
        size_t fontSize, int ttcIndex) {
    minikin::MinikinFont* minikinFont = new MinikinFontSkia(face, fontData, fontSize, ttcIndex);
static jboolean addSkTypeface(minikin::FontFamily* family, sk_sp<SkTypeface> face,
        const void* fontData, size_t fontSize, int ttcIndex) {
    minikin::MinikinFont* minikinFont =
            new MinikinFontSkia(std::move(face), fontData, fontSize, ttcIndex);
    bool result = family->addFont(minikinFont);
    minikinFont->Unref();
    return result;
@@ -106,13 +107,13 @@ static jboolean FontFamily_addFont(JNIEnv* env, jobject clazz, jlong familyPtr,
    params.setCollectionIndex(ttcIndex);

    SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
    SkTypeface* face = fm->createFromStream(fontData.release(), params);
    sk_sp<SkTypeface> face(fm->createFromStream(fontData.release(), params));
    if (face == NULL) {
        ALOGE("addFont failed to create font");
        return false;
    }
    minikin::FontFamily* fontFamily = reinterpret_cast<minikin::FontFamily*>(familyPtr);
    return addSkTypeface(fontFamily, face, fontPtr, (size_t)fontSize, ttcIndex);
    return addSkTypeface(fontFamily, std::move(face), fontPtr, (size_t)fontSize, ttcIndex);
}

static struct {
@@ -172,14 +173,14 @@ static jboolean FontFamily_addFontWeightStyle(JNIEnv* env, jobject clazz, jlong
    params.setAxes(skiaAxes.get(), skiaAxesLength);

    SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
    SkTypeface* face = fm->createFromStream(fontData.release(), params);
    sk_sp<SkTypeface> face(fm->createFromStream(fontData.release(), params));
    if (face == NULL) {
        ALOGE("addFont failed to create font, invalid request");
        return false;
    }
    minikin::FontFamily* fontFamily = reinterpret_cast<minikin::FontFamily*>(familyPtr);
    minikin::MinikinFont* minikinFont =
            new MinikinFontSkia(face, fontPtr, (size_t)fontSize, ttcIndex);
            new MinikinFontSkia(std::move(face), fontPtr, (size_t)fontSize, ttcIndex);
    fontFamily->addFont(minikinFont, minikin::FontStyle(weight / 100, isItalic));
    minikinFont->Unref();
    return true;
@@ -216,13 +217,13 @@ static jboolean FontFamily_addFontFromAsset(JNIEnv* env, jobject, jlong familyPt
    std::unique_ptr<SkStreamAsset> fontData(new SkMemoryStream(std::move(data)));

    SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
    SkTypeface* face = fm->createFromStream(fontData.release(), SkFontMgr::FontParameters());
    sk_sp<SkTypeface> face(fm->createFromStream(fontData.release(), SkFontMgr::FontParameters()));
    if (face == NULL) {
        ALOGE("addFontFromAsset failed to create font %s", str.c_str());
        return false;
    }
    minikin::FontFamily* fontFamily = reinterpret_cast<minikin::FontFamily*>(familyPtr);
    return addSkTypeface(fontFamily, face, buf, bufSize, /* ttcIndex */ 0);
    return addSkTypeface(fontFamily, std::move(face), buf, bufSize, /* ttcIndex */ 0);
}

///////////////////////////////////////////////////////////////////////////////
+0 −1
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@
#include "SkPath.h"
#include "SkRasterizer.h"
#include "SkShader.h"
#include "SkTypeface.h"
#include "SkXfermode.h"
#include "unicode/uloc.h"
#include "unicode/ushape.h"
+7 −7
Original line number Diff line number Diff line
@@ -22,16 +22,12 @@

namespace android {

MinikinFontSkia::MinikinFontSkia(SkTypeface* typeface, const void* fontData, size_t fontSize,
MinikinFontSkia::MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize,
        int ttcIndex) :
    minikin::MinikinFont(typeface->uniqueID()), mTypeface(typeface), mFontData(fontData),
    minikin::MinikinFont(typeface->uniqueID()), mTypeface(std::move(typeface)), mFontData(fontData),
    mFontSize(fontSize), mTtcIndex(ttcIndex) {
}

MinikinFontSkia::~MinikinFontSkia() {
    SkSafeUnref(mTypeface);
}

static void MinikinFontSkia_SetSkiaPaint(const minikin::MinikinFont* font, SkPaint* skPaint,
        const minikin::MinikinPaint& paint) {
    skPaint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
@@ -87,6 +83,10 @@ const void* MinikinFontSkia::GetTable(uint32_t tag, size_t* size,
}

SkTypeface *MinikinFontSkia::GetSkTypeface() const {
    return mTypeface.get();
}

sk_sp<SkTypeface> MinikinFontSkia::RefSkTypeface() const {
    return mTypeface;
}

@@ -121,7 +121,7 @@ void MinikinFontSkia::unpackPaintFlags(SkPaint* paint, uint32_t paintFlags) {

void MinikinFontSkia::populateSkPaint(SkPaint* paint, const MinikinFont* font,
        minikin::FontFakery fakery) {
    paint->setTypeface(reinterpret_cast<const MinikinFontSkia*>(font)->GetSkTypeface());
    paint->setTypeface(reinterpret_cast<const MinikinFontSkia*>(font)->RefSkTypeface());
    paint->setFakeBoldText(paint->isFakeBoldText() || fakery.isFakeBold());
    if (fakery.isFakeItalic()) {
        paint->setTextSkewX(paint->getTextSkewX() - 0.25f);
+4 −5
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@

#include <cutils/compiler.h>
#include <minikin/MinikinFont.h>
#include <SkRefCnt.h>

class SkPaint;
class SkTypeface;
@@ -27,12 +28,9 @@ namespace android {

class ANDROID_API MinikinFontSkia : public minikin::MinikinFont {
public:
    // Note: this takes ownership of the reference (will unref on dtor)
    explicit MinikinFontSkia(SkTypeface *typeface, const void* fontData, size_t fontSize,
    explicit MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize,
        int ttcIndex);

    ~MinikinFontSkia();

    float GetHorizontalAdvance(uint32_t glyph_id,
        const minikin::MinikinPaint &paint) const;

@@ -42,6 +40,7 @@ public:
    const void* GetTable(uint32_t tag, size_t* size, minikin::MinikinDestroyFunc* destroy);

    SkTypeface* GetSkTypeface() const;
    sk_sp<SkTypeface> RefSkTypeface() const;

    // Access to underlying raw font bytes
    const void* GetFontData() const;
@@ -55,7 +54,7 @@ public:
    static void populateSkPaint(SkPaint* paint, const minikin::MinikinFont* font,
            minikin::FontFakery fakery);
private:
    SkTypeface* mTypeface;
    sk_sp<SkTypeface> mTypeface;

    // A raw pointer to the font data - it should be owned by some other object with
    // lifetime at least as long as this object.
+2 −2
Original line number Diff line number Diff line
@@ -64,12 +64,12 @@ static minikin::FontCollection *makeFontCollection() {
    for (size_t i = 0; i < sizeof(fns)/sizeof(fns[0]); i++) {
        const char *fn = fns[i];
        ALOGD("makeFontCollection adding %s", fn);
        SkTypeface *skFace = SkTypeface::CreateFromFile(fn);
        sk_sp<SkTypeface> skFace = SkTypeface::MakeFromFile(fn);
        if (skFace != NULL) {
            // TODO: might be a nice optimization to get access to the underlying font
            // data, but would require us opening the file ourselves and passing that
            // to the appropriate Create method of SkTypeface.
            minikin::MinikinFont *font = new MinikinFontSkia(skFace, NULL, 0, 0);
            minikin::MinikinFont *font = new MinikinFontSkia(std::move(skFace), NULL, 0, 0);
            family->addFont(font);
            font->Unref();
        } else {