123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /*
- * Copyright 2012 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SkFontDescriptor_DEFINED
- #define SkFontDescriptor_DEFINED
- #include "include/core/SkStream.h"
- #include "include/core/SkString.h"
- #include "include/core/SkTypeface.h"
- #include "include/private/SkFixed.h"
- #include "include/private/SkNoncopyable.h"
- class SkFontData {
- public:
- /** Makes a copy of the data in 'axis'. */
- SkFontData(std::unique_ptr<SkStreamAsset> stream, int index, const SkFixed axis[],int axisCount)
- : fStream(std::move(stream)), fIndex(index), fAxisCount(axisCount), fAxis(axisCount)
- {
- for (int i = 0; i < axisCount; ++i) {
- fAxis[i] = axis[i];
- }
- }
- SkFontData(const SkFontData& that)
- : fStream(that.fStream->duplicate())
- , fIndex(that.fIndex)
- , fAxisCount(that.fAxisCount)
- , fAxis(fAxisCount)
- {
- for (int i = 0; i < fAxisCount; ++i) {
- fAxis[i] = that.fAxis[i];
- }
- }
- bool hasStream() const { return fStream.get() != nullptr; }
- std::unique_ptr<SkStreamAsset> detachStream() { return std::move(fStream); }
- SkStreamAsset* getStream() { return fStream.get(); }
- SkStreamAsset const* getStream() const { return fStream.get(); }
- int getIndex() const { return fIndex; }
- int getAxisCount() const { return fAxisCount; }
- const SkFixed* getAxis() const { return fAxis.get(); }
- private:
- std::unique_ptr<SkStreamAsset> fStream;
- int fIndex;
- int fAxisCount;
- SkAutoSTMalloc<4, SkFixed> fAxis;
- };
- class SkFontDescriptor : SkNoncopyable {
- public:
- SkFontDescriptor();
- // Does not affect ownership of SkStream.
- static bool Deserialize(SkStream*, SkFontDescriptor* result);
- void serialize(SkWStream*) const;
- SkFontStyle getStyle() const { return fStyle; }
- void setStyle(SkFontStyle style) { fStyle = style; }
- const char* getFamilyName() const { return fFamilyName.c_str(); }
- const char* getFullName() const { return fFullName.c_str(); }
- const char* getPostscriptName() const { return fPostscriptName.c_str(); }
- bool hasFontData() const { return fFontData.get() != nullptr; }
- std::unique_ptr<SkFontData> detachFontData() { return std::move(fFontData); }
- void setFamilyName(const char* name) { fFamilyName.set(name); }
- void setFullName(const char* name) { fFullName.set(name); }
- void setPostscriptName(const char* name) { fPostscriptName.set(name); }
- /** Set the font data only if it is necessary for serialization. */
- void setFontData(std::unique_ptr<SkFontData> data) { fFontData = std::move(data); }
- private:
- SkString fFamilyName;
- SkString fFullName;
- SkString fPostscriptName;
- std::unique_ptr<SkFontData> fFontData;
- SkFontStyle fStyle;
- };
- #endif // SkFontDescriptor_DEFINED
|