1 #ifndef DALI_TEXT_ABSTRACTION_INTERNAL_FONT_CLIENT_UTILS_H
2 #define DALI_TEXT_ABSTRACTION_INTERNAL_FONT_CLIENT_UTILS_H
5 * Copyright (c) 2022 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
21 #include <dali/devel-api/text-abstraction/font-client.h>
24 #include <fontconfig/fontconfig.h>
27 #include FT_FREETYPE_H
31 #include FT_SYNTHESIS_H
33 namespace Dali::TextAbstraction::Internal
35 void ConvertBitmap(TextAbstraction::FontClient::GlyphBufferData& data,
36 unsigned int srcWidth,
37 unsigned int srcHeight,
38 const unsigned char* const srcBuffer,
39 const Pixel::Format srcFormat);
41 void ConvertBitmap(TextAbstraction::FontClient::GlyphBufferData& data,
44 bool moveBuffer = false);
47 * @brief Creates a font family pattern used to match fonts.
49 * @note Need to call FcPatternDestroy to free the resources.
51 * @param[in] fontDescription The font to cache.
53 * @return The pattern.
55 FcPattern* CreateFontFamilyPattern(const FontDescription& fontDescription);
58 * @brief Creates a character set from a given font's @p description.
60 * @note Need to call FcCharSetDestroy to free the resources.
62 * @param[in] description The font's description.
64 * @return A character set.
66 FcCharSet* CreateCharacterSetFromDescription(const FontDescription& description);
69 * @brief Gets the FontDescription which matches the given pattern.
71 * @note The reference counter of the @p characterSet has been increased. Call FcCharSetDestroy to decrease it.
73 * @param[in] pattern pattern to match against.
74 * @param[out] fontDescription the resultant fontDescription that matched.
75 * @param[out] characterSet The character set for that pattern.
76 * @return true if match found.
78 bool MatchFontDescriptionToPattern(FcPattern* pattern, Dali::TextAbstraction::FontDescription& fontDescription, FcCharSet** characterSet);
81 * @brief Retrieves a font config object's value from a pattern.
83 * @param[in] pattern The font config pattern.
84 * @param[in] n The object.
85 * @param[out] string The object's value.
87 * @return @e true if the operation is successful.
89 bool GetFcString(const FcPattern* const pattern, const char* const n, std::string& string);
92 * @brief Retrieves a font config object's value from a pattern.
94 * @param[in] pattern The font config pattern.
95 * @param[in] n The object.
96 * @param[out] intVal The object's value.
98 * @return @e true if the operation is successful.
100 bool GetFcInt(const _FcPattern* const pattern, const char* const n, int& intVal);
102 constexpr int ValueToIndex(int value, const int* const table, unsigned int maxIndex)
106 // Return an invalid index if there is no table.
110 if(value <= table[0])
115 if(value >= table[maxIndex])
120 for(unsigned int index = 0u; index < maxIndex; ++index)
122 const int v1 = table[index];
123 const unsigned int indexPlus = index + 1u;
124 const int v2 = table[indexPlus];
125 if((v1 < value) && (value <= v2))
127 const int result = ((v1 > 0) && ((value - v1) < (v2 - value))) ? index : indexPlus;
135 * @brief Returns the FontWidth's enum index for the given width value.
137 * @param[in] width The width value.
139 * @return The FontWidth's enum index.
141 const FontWidth::Type IntToWidthType(int width);
144 * @brief Returns the FontWeight's enum index for the given weight value.
146 * @param[in] weight The weight value.
148 * @return The FontWeight's enum index.
150 const FontWeight::Type IntToWeightType(int weight);
153 * @brief Returns the FontSlant's enum index for the given slant value.
155 * @param[in] slant The slant value.
157 * @return The FontSlant's enum index.
159 const FontSlant::Type IntToSlantType(int slant);
161 const std::string_view DefaultFontFamily();
162 const FontWidth::Type DefaultFontWidth();
163 const FontWeight::Type DefaultFontWeight();
164 const FontSlant::Type DefaultFontSlant();
166 } // namespace Dali::TextAbstraction::Internal
168 #endif // DALI_TEXT_ABSTRACTION_INTERNAL_FONT_CLIENT_UTILS_H