19714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com/* 29714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com * Copyright 2012 Google Inc. 39714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com * 49714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com * Use of this source code is governed by a BSD-style license that can be 59714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com * found in the LICENSE file. 69714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com */ 79714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com 89714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com#ifndef SkFontDescriptor_DEFINED 99714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com#define SkFontDescriptor_DEFINED 109714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com 116c71e0a065c2eb32139682bb1ca1cbbeb02ebcb9benjaminwagner#include "SkFixed.h" 12d71b75757335393d9643a5b7a0f2769b6ba52fb6bungeman#include "SkStream.h" 139714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com#include "SkString.h" 149714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com#include "SkTypeface.h" 159714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com 1641868fe5625fc3bd70daa3f461c881b5db6a9265bungemanclass SkFontData { 1741868fe5625fc3bd70daa3f461c881b5db6a9265bungemanpublic: 18f93d71122e4fcfcdc674a0163455990b13855f2fbungeman /** Makes a copy of the data in 'axis'. */ 19f93d71122e4fcfcdc674a0163455990b13855f2fbungeman SkFontData(std::unique_ptr<SkStreamAsset> stream, int index, const SkFixed axis[],int axisCount) 20f93d71122e4fcfcdc674a0163455990b13855f2fbungeman : fStream(std::move(stream)), fIndex(index), fAxisCount(axisCount), fAxis(axisCount) 2141868fe5625fc3bd70daa3f461c881b5db6a9265bungeman { 2241868fe5625fc3bd70daa3f461c881b5db6a9265bungeman for (int i = 0; i < axisCount; ++i) { 2341868fe5625fc3bd70daa3f461c881b5db6a9265bungeman fAxis[i] = axis[i]; 2441868fe5625fc3bd70daa3f461c881b5db6a9265bungeman } 2541868fe5625fc3bd70daa3f461c881b5db6a9265bungeman } 2641868fe5625fc3bd70daa3f461c881b5db6a9265bungeman SkFontData(const SkFontData& that) 2741868fe5625fc3bd70daa3f461c881b5db6a9265bungeman : fStream(that.fStream->duplicate()) 2841868fe5625fc3bd70daa3f461c881b5db6a9265bungeman , fIndex(that.fIndex) 2941868fe5625fc3bd70daa3f461c881b5db6a9265bungeman , fAxisCount(that.fAxisCount) 3041868fe5625fc3bd70daa3f461c881b5db6a9265bungeman , fAxis(fAxisCount) 3141868fe5625fc3bd70daa3f461c881b5db6a9265bungeman { 3241868fe5625fc3bd70daa3f461c881b5db6a9265bungeman for (int i = 0; i < fAxisCount; ++i) { 3341868fe5625fc3bd70daa3f461c881b5db6a9265bungeman fAxis[i] = that.fAxis[i]; 3441868fe5625fc3bd70daa3f461c881b5db6a9265bungeman } 3541868fe5625fc3bd70daa3f461c881b5db6a9265bungeman } 3696fcdcc219d2a0d3579719b84b28bede76efba64halcanary bool hasStream() const { return fStream.get() != nullptr; } 37f93d71122e4fcfcdc674a0163455990b13855f2fbungeman std::unique_ptr<SkStreamAsset> detachStream() { return std::move(fStream); } 3841868fe5625fc3bd70daa3f461c881b5db6a9265bungeman SkStreamAsset* getStream() { return fStream.get(); } 39f93d71122e4fcfcdc674a0163455990b13855f2fbungeman SkStreamAsset const* getStream() const { return fStream.get(); } 4041868fe5625fc3bd70daa3f461c881b5db6a9265bungeman int getIndex() const { return fIndex; } 4141868fe5625fc3bd70daa3f461c881b5db6a9265bungeman int getAxisCount() const { return fAxisCount; } 4241868fe5625fc3bd70daa3f461c881b5db6a9265bungeman const SkFixed* getAxis() const { return fAxis.get(); } 4341868fe5625fc3bd70daa3f461c881b5db6a9265bungeman 4441868fe5625fc3bd70daa3f461c881b5db6a9265bungemanprivate: 45f93d71122e4fcfcdc674a0163455990b13855f2fbungeman std::unique_ptr<SkStreamAsset> fStream; 4641868fe5625fc3bd70daa3f461c881b5db6a9265bungeman int fIndex; 4741868fe5625fc3bd70daa3f461c881b5db6a9265bungeman int fAxisCount; 4841868fe5625fc3bd70daa3f461c881b5db6a9265bungeman SkAutoSTMalloc<4, SkFixed> fAxis; 4941868fe5625fc3bd70daa3f461c881b5db6a9265bungeman}; 5041868fe5625fc3bd70daa3f461c881b5db6a9265bungeman 5141868fe5625fc3bd70daa3f461c881b5db6a9265bungemanclass SkFontDescriptor : SkNoncopyable { 529714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.compublic: 53b8113780c3cfed640016b263194b7f1531d43312bungeman SkFontDescriptor(); 54a1193e4b0e34a7e4e1bd33e9708d7341679f8321scroggo // Does not affect ownership of SkStream. 553552ba18ee41e135d6fc52228adae37794fc15ffrobertphillips static bool Deserialize(SkStream*, SkFontDescriptor* result); 569714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com 579714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com void serialize(SkWStream*); 589714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com 59b8113780c3cfed640016b263194b7f1531d43312bungeman SkFontStyle getStyle() { return fStyle; } 60b8113780c3cfed640016b263194b7f1531d43312bungeman void setStyle(SkFontStyle style) { fStyle = style; } 619714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com 62d71b75757335393d9643a5b7a0f2769b6ba52fb6bungeman const char* getFamilyName() const { return fFamilyName.c_str(); } 63d71b75757335393d9643a5b7a0f2769b6ba52fb6bungeman const char* getFullName() const { return fFullName.c_str(); } 64d71b75757335393d9643a5b7a0f2769b6ba52fb6bungeman const char* getPostscriptName() const { return fPostscriptName.c_str(); } 6596fcdcc219d2a0d3579719b84b28bede76efba64halcanary bool hasFontData() const { return fFontData.get() != nullptr; } 66f93d71122e4fcfcdc674a0163455990b13855f2fbungeman std::unique_ptr<SkFontData> detachFontData() { return std::move(fFontData); } 67d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 683b700f6929e093cb14cc0e4ef569e6f697c5a816reed@google.com void setFamilyName(const char* name) { fFamilyName.set(name); } 693b700f6929e093cb14cc0e4ef569e6f697c5a816reed@google.com void setFullName(const char* name) { fFullName.set(name); } 703b700f6929e093cb14cc0e4ef569e6f697c5a816reed@google.com void setPostscriptName(const char* name) { fPostscriptName.set(name); } 71f93d71122e4fcfcdc674a0163455990b13855f2fbungeman /** Set the font data only if it is necessary for serialization. */ 72f93d71122e4fcfcdc674a0163455990b13855f2fbungeman void setFontData(std::unique_ptr<SkFontData> data) { fFontData = std::move(data); } 733b700f6929e093cb14cc0e4ef569e6f697c5a816reed@google.com 749714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.comprivate: 753b700f6929e093cb14cc0e4ef569e6f697c5a816reed@google.com SkString fFamilyName; 763b700f6929e093cb14cc0e4ef569e6f697c5a816reed@google.com SkString fFullName; 773b700f6929e093cb14cc0e4ef569e6f697c5a816reed@google.com SkString fPostscriptName; 78f93d71122e4fcfcdc674a0163455990b13855f2fbungeman std::unique_ptr<SkFontData> fFontData; 793b700f6929e093cb14cc0e4ef569e6f697c5a816reed@google.com 80b8113780c3cfed640016b263194b7f1531d43312bungeman SkFontStyle fStyle; 819714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com}; 829714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com 839714516a0db56fe1c59d5e831cb0c6d820102c30djsollen@google.com#endif // SkFontDescriptor_DEFINED 84