add getUnitsPerEm() to SkTypeface
git-svn-id: http://skia.googlecode.com/svn/trunk@4863 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
777e789093
commit
4b2af9c91d
@ -176,7 +176,13 @@ public:
|
||||
*/
|
||||
size_t getTableData(SkFontTableTag tag, size_t offset, size_t length,
|
||||
void* data) const;
|
||||
|
||||
|
||||
/**
|
||||
* Return the units-per-em value for this typeface, or zero if there is an
|
||||
* error.
|
||||
*/
|
||||
int getUnitsPerEm() const;
|
||||
|
||||
protected:
|
||||
/** uniqueID must be unique (please!) and non-zero
|
||||
*/
|
||||
|
@ -117,3 +117,21 @@ size_t SkTypeface::getTableData(SkFontTableTag tag, size_t offset, size_t length
|
||||
return SkFontHost::GetTableData(fUniqueID, tag, offset, length, data);
|
||||
}
|
||||
|
||||
int SkTypeface::getUnitsPerEm() const {
|
||||
int upem = 0;
|
||||
|
||||
#ifdef SK_BUILD_FOR_ANDROID
|
||||
upem = SkFontHost::GetUnitsPerEm(fUniqueID);
|
||||
#else
|
||||
SkAdvancedTypefaceMetrics* metrics;
|
||||
metrics = SkFontHost::GetAdvancedTypefaceMetrics(fUniqueID,
|
||||
SkAdvancedTypefaceMetrics::kNo_PerGlyphInfo,
|
||||
NULL, 0);
|
||||
if (metrics) {
|
||||
upem = metrics->fEmSize;
|
||||
metrics->unref();
|
||||
}
|
||||
#endif
|
||||
return upem;
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "Test.h"
|
||||
#include "SkPaint.h"
|
||||
#include "SkTypeface.h"
|
||||
#include "SkEndian.h"
|
||||
|
||||
//#define DUMP_TABLES
|
||||
|
||||
@ -24,6 +25,21 @@ static const struct TagSize {
|
||||
{ kFontTableTag_maxp, 32 },
|
||||
};
|
||||
|
||||
static void test_unitsPerEm(skiatest::Reporter* reporter, SkTypeface* face) {
|
||||
int upem = face->getUnitsPerEm();
|
||||
REPORTER_ASSERT(reporter, upem > 0);
|
||||
|
||||
size_t size = face->getTableSize(kFontTableTag_head);
|
||||
if (size) {
|
||||
SkAutoMalloc storage(size);
|
||||
char* ptr = (char*)storage.get();
|
||||
face->getTableData(kFontTableTag_head, 0, size, ptr);
|
||||
// unitsPerEm is at offset 18 into the 'head' table.
|
||||
int upem2 = SkEndian_SwapBE16(*(uint16_t*)&ptr[18]);
|
||||
REPORTER_ASSERT(reporter, upem2 == upem);
|
||||
}
|
||||
}
|
||||
|
||||
static void test_tables(skiatest::Reporter* reporter, SkTypeface* face) {
|
||||
SkFontID fontID = face->uniqueID();
|
||||
if (false) { // avoid bit rot, suppress warning
|
||||
@ -82,6 +98,7 @@ static void test_tables(skiatest::Reporter* reporter) {
|
||||
SkDebugf("%s\n", gNames[i]);
|
||||
#endif
|
||||
test_tables(reporter, face);
|
||||
test_unitsPerEm(reporter, face);
|
||||
face->unref();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user