Move SkTypeface::CreateXXX to SkTypeface::MakeXXX.
Skia is moving to returning smart pointers from its factory methods.
This updates uses of SkTypeface::CreateXXX to SkTypeface::MakeXXX and
generally updates use of SkTypeface to sk_sp. This will allow for the
removal of the SK_SUPPORT_LEGACY_TYPEFACE_PTR define.
Change-Id: I017ceb681d2c338e6913aa267915d03a7d3a898b
diff --git a/core/jni/android/graphics/FontFamily.cpp b/core/jni/android/graphics/FontFamily.cpp
index 6fa1ca7..2088421 100644
--- a/core/jni/android/graphics/FontFamily.cpp
+++ b/core/jni/android/graphics/FontFamily.cpp
@@ -53,9 +53,10 @@
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 @@
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 @@
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 @@
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);
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 67c94fb..9be659e 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -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"
diff --git a/libs/hwui/hwui/MinikinSkia.cpp b/libs/hwui/hwui/MinikinSkia.cpp
index d16b6441..a52abfc 100644
--- a/libs/hwui/hwui/MinikinSkia.cpp
+++ b/libs/hwui/hwui/MinikinSkia.cpp
@@ -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 @@
}
SkTypeface *MinikinFontSkia::GetSkTypeface() const {
+ return mTypeface.get();
+}
+
+sk_sp<SkTypeface> MinikinFontSkia::RefSkTypeface() const {
return mTypeface;
}
@@ -121,7 +121,7 @@
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);
diff --git a/libs/hwui/hwui/MinikinSkia.h b/libs/hwui/hwui/MinikinSkia.h
index 96b256d..1ea99fd 100644
--- a/libs/hwui/hwui/MinikinSkia.h
+++ b/libs/hwui/hwui/MinikinSkia.h
@@ -19,6 +19,7 @@
#include <cutils/compiler.h>
#include <minikin/MinikinFont.h>
+#include <SkRefCnt.h>
class SkPaint;
class SkTypeface;
@@ -27,12 +28,9 @@
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 @@
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 @@
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.
diff --git a/libs/hwui/hwui/Typeface.cpp b/libs/hwui/hwui/Typeface.cpp
index b5c5ef9..18c35b3 100644
--- a/libs/hwui/hwui/Typeface.cpp
+++ b/libs/hwui/hwui/Typeface.cpp
@@ -64,12 +64,12 @@
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 {