/* * Copyright (c) 2020-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef UI_FONT_H #define UI_FONT_H #include "font/base_font.h" namespace OHOS { class UIFont : public HeapBase { public: UIFont(const UIFont &) = delete; UIFont& operator=(const UIFont &) = delete; /** * @brief judge whether you need shaping for text * * @param text means input text * @param ttfId font index * @param script shaping script * @param fontId font index * @param size font size * @return int8_t Shaping mode */ uint16_t GetShapingFontId(char* text, uint8_t& ttfId, uint32_t& script, uint16_t fontId, uint8_t size) const { return instance_->GetShapingFontId(text, ttfId, script, fontId, size); } /** * @brief Get width of the letter * * @param unicode: [in] unicode or glyph index according to isGlyph param * @param fontId: [in] font id * @param fontSize: [in] font size * @param shapingId: [in] font shaping id * @return uint16_t: the letter width */ uint16_t GetWidth(uint32_t unicode, uint16_t fontId, uint8_t fontSize, uint8_t shapingId); /** * @brief Get height for specific font * * @param fontId: font id * @param fontSize: font size * * @return uint16_t */ uint16_t GetHeight(uint16_t fontId, uint8_t fontSize) { return instance_->GetHeight(fontId, fontSize); } /** * @brief Get the font weight * @param fontId * @return uint8_t: fontWeight */ uint8_t GetFontWeight(uint16_t fontId) { return instance_->GetFontWeight(fontId); } /** * @brief Get font header * * @param fontHeader * @return int8_t */ int8_t GetFontHeader(FontHeader& fontHeader, uint16_t fontId, uint8_t fontSize) { return instance_->GetFontHeader(fontHeader, fontId, fontSize); } /** * @brief Get font id * * @param name * @param size * @return uint16_t */ uint16_t GetFontId(const char* name, uint8_t size = 0) { return instance_->GetFontId(name, size); } /** * @brief Set the cache start address * * @param psramAddr * @param psramLen */ void SetPsramMemory(uintptr_t psramAddr, uint32_t psramLen) { instance_->SetPsramMemory(psramAddr, psramLen); } /** * @brief Get bitmap for specific unicode * * @param unicode * @return uint8_t* */ uint8_t* GetBitmap(uint32_t unicode, GlyphNode& glyphNode, uint16_t fontId, uint8_t fontSize, uint8_t shapingFont); int8_t GetGlyphNode(uint32_t unicode, GlyphNode& glyphNode, uint16_t fontId, uint8_t fontSize); /** * @brief Indicates whether the current font library is a vector font library. * @return uint8_t: 0 BitmapFont 1 VectorFont */ bool IsVectorFont() { return instance_->IsVectorFont(); } int8_t SetCurrentLangId(uint8_t langId); uint8_t GetCurrentLangId() const; int8_t GetDefaultParamByLangId(uint8_t langId, LangTextParam** pParam) const { return instance_->GetDefaultParamByLangId(langId, pParam); } int8_t GetTextUtf8(uint16_t textId, uint8_t** utf8Addr, uint16_t& utf8Len) const; uint8_t GetFontTtfId(uint16_t fontId, uint8_t size) const { return instance_->GetFontTtfId(fontId, size); } int32_t OpenVectorFont(uint8_t ttfId) { return instance_->OpenVectorFont(ttfId); } bool GetTtfInfo(uint8_t ttfId, uint8_t* ttfBuffer, uint32_t bufferSize, TtfHeader& ttfHeader) { return instance_->GetTtfInfo(ttfId, ttfBuffer, bufferSize, ttfHeader); } const UITextLanguageFontParam* GetFontInfo(uint16_t fontId) const { return instance_->GetFontInfo(fontId); } int8_t SetFontPath(const char* path, BaseFont::FontType type); int8_t GetFontVersion(BaseFont::FontType type, const char* path, char* version, uint8_t len) const { return instance_->GetFontVersion(type, path, version, len); } uint8_t RegisterFontInfo(const char* ttfName, uint8_t shaping = 0) { return instance_->RegisterFontInfo(ttfName, shaping); } uint8_t RegisterFontInfo(const UITextLanguageFontParam* fontsTable, uint8_t num) { return instance_->RegisterFontInfo(fontsTable, num); } uint8_t RegisterTtcFontInfo(const char* ttcName, const TtfInfo* ttfInfo, uint8_t count) { return instance_->RegisterTtcFontInfo(ttcName, ttfInfo, count); } uint8_t UnregisterTtcFontInfo(const char* ttcName, const TtfInfo* ttfInfo, uint8_t count) { return instance_->UnregisterTtcFontInfo(ttcName, ttfInfo, count); } uint8_t UnregisterFontInfo(const char* ttfName) { return instance_->UnregisterFontInfo(ttfName); } uint8_t UnregisterFontInfo(const UITextLanguageFontParam* fontsTable, uint8_t num) { return instance_->UnregisterFontInfo(fontsTable, num); } int8_t GetTextParam(uint16_t textId, UITextLanguageTextParam& param) const; int8_t GetWildCardStaticStr(uint16_t textId, UITextWildcardStaticType type, uint8_t** strAddr, uint16_t& strLen) const; int8_t GetCodePoints(uint16_t textId, uint32_t** codePoints, uint16_t& codePointsNum) const; ColorMode GetColorType(uint16_t fontId) { switch (instance_->GetFontWeight(fontId)) { case FONT_WEIGHT_1: return A1; case FONT_WEIGHT_2: return A2; case FONT_WEIGHT_4: return A4; case FONT_WEIGHT_8: return A8; case FONT_WEIGHT_32: return ARGB8888; default: return UNKNOWN; } } static UIFont* GetInstance(); void SetFont(BaseFont* font); BaseFont* GetFont(); void SetFontFileOffset(uint32_t offset); virtual uint16_t GetOffsetPosY(const char* text, uint16_t lineLength, bool& isAllEmoji, uint16_t fontId, uint8_t fontSize) { return instance_->GetOffsetPosY(text, lineLength, isAllEmoji, fontId, fontSize); } virtual uint16_t GetLineMaxHeight(const char* text, uint16_t lineLength, uint16_t fontId, uint8_t fontSize, uint16_t letterIndex, SpannableString* spannableString); bool IsEmojiFont(uint16_t fontid) { return instance_->IsEmojiFont(fontid); } #if (defined(ENABLE_MIX_FONT) && (ENABLE_MIX_FONT == 1)) /** * @brief Set bitmap font, only needed when using both vector font and bitmap font * * @param font bitmap font */ void SetBitmapFont(BaseFont* font); /** * @brief Get bitmap font, only needed when using both vector font and bitmap font * * @return UIFont bitmap font instance */ static UIFont* GetBitmapInstance(); #endif private: UIFont(); /** * @brief Destroy the UIFontFactor object * */ ~UIFont(); BaseFont* instance_; BaseFont* defaultInstance_; static bool setFontAllocFlag_; }; } // namespace OHOS #endif