1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef GLYPHS_FILE_H 17 #define GLYPHS_FILE_H 18 19 #include "font/ui_font_header.h" 20 #include "gfx_utils/graphic_buffer.h" 21 22 namespace OHOS { 23 class GlyphsFile { 24 public: 25 GlyphsFile(); 26 27 GlyphsFile(const GlyphsFile&) = delete; 28 29 GlyphsFile& operator=(const GlyphsFile&) = delete; 30 31 GlyphsFile(const GlyphsFile&&) = delete; 32 33 GlyphsFile& operator=(const GlyphsFile&&) = delete; 34 35 ~GlyphsFile(); 36 37 int8_t GetFontVersion(const char* fontName, char* version, uint8_t len); 38 39 int16_t GetFontHeight(uint16_t fontId); 40 41 const FontHeader* GetFontHeader(uint16_t fontId); 42 43 int8_t GetBitmap(GlyphNode& node, BufferInfo& bufInfo); 44 45 int8_t SetFile(const char* fontName, int32_t fp, uint32_t start); 46 47 int8_t GetNodeFromFile(uint32_t unicode, uint16_t fontId, GlyphNode& node); 48 49 bool IsSameFile(const char* fontName); 50 51 private: 52 static constexpr uint8_t FONT_NAME_LEN_MAX = 64; 53 static constexpr uint8_t RADIX_TREE_BITS = 4; 54 static constexpr uint8_t RADIX_SHIFT_START = 32 - RADIX_TREE_BITS; 55 static constexpr uint32_t RADIX_TREE_SLOT_NUM = 1 << RADIX_TREE_BITS; 56 static constexpr uint32_t RADIX_TREE_MASK = RADIX_TREE_SLOT_NUM - 1; 57 58 struct IndexNode { 59 uint16_t stubs[RADIX_TREE_SLOT_NUM]; 60 }; 61 62 struct GlyphInfo { 63 uint16_t fontId; 64 uint32_t glyphNodeSectionStart; 65 uint32_t bitMapSectionStart; 66 uint32_t fontIndexSectionStart; 67 uint8_t* indexCache; 68 FontHeader* fontHeader; 69 }; 70 71 int8_t CacheInit(); 72 int8_t GetGlyphInfo(uint16_t fontId, GlyphInfo& glyphInfo); 73 void SetFontName(const char* fontName); 74 75 BinHeader binHeader_; 76 uint32_t start_; 77 uint32_t fontHeaderSectionStart_; 78 uint32_t fontIndexSectionStart_; 79 uint32_t glyphNodeSectionStart_; 80 uint32_t bitMapSectionStart_; 81 82 FontHeader* fontHeaderCache_; 83 uint8_t* indexCache_; 84 char* fontName_; 85 int32_t fp_; 86 bool isFileSet_; 87 uint8_t fontNum_; 88 }; 89 } // namespace OHOS 90 #endif /* GLYPHS_FILE_H */ 91