1 /* 2 * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED. 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 #ifndef HI_GO_TEXT_H 16 #define HI_GO_TEXT_H 17 18 #include "hi_go_comm.h" 19 20 #ifdef __cplusplus 21 #if __cplusplus 22 extern "C" { 23 #endif 24 #endif 25 26 #define LAYOUT_LEFT HIGO_LAYOUT_LEFT /* Horizontally left */ 27 #define LAYOUT_RIGHT HIGO_LAYOUT_RIGHT /* Horizontally right */ 28 #define LAYOUT_HCENTER HIGO_LAYOUT_HCENTER /* Horizontally center */ 29 #define LAYOUT_TOP HIGO_LAYOUT_TOP /* Vertically top */ 30 #define LAYOUT_BOTTOM HIGO_LAYOUT_BOTTOM /* Vertically bottom */ 31 #define LAYOUT_VCENTER HIGO_LAYOUT_VCENTER /* Vertically center */ 32 #define LAYOUT_WRAP HIGO_LAYOUT_WRAP /* Wrap */ 33 #define LAYOUT_WORDELLIPSIS HIGO_LAYOUT_WORDELLIPSIS /* Ellipsis format */ 34 #define LAYOUT_FORCE_LEFT HIGO_LAYOUT_FORCE_LEFT /* Force Horizontally left */ 35 #define LAYOUT_FORCE_RIGHT HIGO_LAYOUT_FORCE_RIGHT /* Force Horizontally right */ 36 37 typedef enum { 38 HIGO_LAYOUT_LEFT = 0x0001, 39 HIGO_LAYOUT_RIGHT = 0x0002, 40 HIGO_LAYOUT_HCENTER = 0x0004, 41 HIGO_LAYOUT_WRAP = 0x0008, 42 HIGO_LAYOUT_WORDELLIPSIS = 0x0010, 43 HIGO_LAYOUT_TOP = 0x0100, 44 HIGO_LAYOUT_BOTTOM = 0x0200, 45 HIGO_LAYOUT_VCENTER = 0x0400, 46 HIGO_LAYOUT_FORCE_LEFT = 0x8000, 47 HIGO_LAYOUT_FORCE_RIGHT = 0x10000, 48 HIGO_LAYOUT_VERTICAL = 0x20000, 49 HIGO_LAYOUT_BUTT = 0x40000, 50 } HIGO_LAYOUT_E; 51 52 /* *< Definition of a character set */ 53 typedef enum { 54 HIGO_CHARSET_UNKOWN, 55 HIGO_CHARSET_ASCI, 56 HIGO_CHARSET_GB2312, 57 HIGO_CHARSET_UTF8, 58 HIGO_CHARSET_UTF16, 59 HIGO_CHARSET_UCS2 = HIGO_CHARSET_UTF16, 60 HIGO_CHARSET_UTF32, 61 HIGO_CHARSET_BUTT, 62 } HIGO_CHARSET_E; 63 64 /* Definition of a text base direction */ 65 typedef enum { 66 HIGO_TEXT_DIR_NEUTRAL = 0, /* neutral deirction */ 67 HIGO_TEXT_DIR_LTR, /* Left to right */ 68 HIGO_TEXT_DIR_RTL, /* Right to left */ 69 HIGO_TEXT_DIR_SYSTEM, 70 HIGO_TEXT_DIR_BUTT 71 } HIGO_TEXT_DIR_E; 72 73 74 typedef struct { 75 HIGO_CHARSET_E Charset; /* Character set name */ 76 HI_U8 Height; /* Font Height */ 77 HI_U8 MaxWidth; /* Maximum font width */ 78 } HIGO_FONTATTR_S; 79 80 /* Attributes of a text output object */ 81 typedef struct { 82 HI_COLOR BgColor; /* Background color */ 83 HI_COLOR FgColor; /* Foreground color */ 84 HIGO_FONTATTR_S SbFontAttr; /* Font attributes of the SBC */ 85 HIGO_FONTATTR_S MbFontAttr; /* Font attributes of the MBC */ 86 } HIGO_TEXTOUTATTR_S; 87 88 typedef enum { 89 HIGO_TEXT_STYLE_NORMAL = 0x00, /* Normal font */ 90 HIGO_TEXT_STYLE_ITALIC = 0x01, /* Italic font */ 91 HIGO_TEXT_STYLE_BOLD = 0x02, /* Bold font */ 92 HIGO_TEXT_STYLE_HALF_HEIGHT = 0x04, /* Half-height font */ 93 HIGO_TEXT_STYLE_HALF_WIDTH = 0x08, /* Half-width font */ 94 HIGO_TEXT_STYLE_DOUBLE_HEIGHT = 0x10, /* Double-height font */ 95 HIGO_TEXT_STYLE_DOUBLE_WIDTH = 0x20, /* Double-width font */ 96 HIGO_TEXT_STYLE_BUTT = 0x40 97 } HIGO_TEXT_STYLE_E; 98 99 typedef struct { 100 HI_HANDLE hFont; /* Handle of font file */ 101 HI_U32 Style; /* Layout Style */ 102 HI_S32 s32Width; /* Width of display arear */ 103 HI_S32 s32Height; /* Height of display arear */ 104 HI_S32 horz_dist; /* Character horizontal spacing */ 105 HI_S32 vert_dist; /* Raw vertical spacing */ 106 HI_BOOL single_para_flg; /* Whether it is a single paragraph */ 107 HI_BOOL auto_dir; /* Whether it is automatic direction */ 108 HIGO_TEXT_DIR_E base_dir; /* Base direction */ 109 HI_U32 max_char; /* Max character */ 110 HI_COLOR select_bg; /* Selected background color */ 111 HI_COLOR select_fg; /* Selected frontground color */ 112 } HIGO_LAYOUT_INFO_S; 113 114 typedef struct { 115 const HI_CHAR *pSbcFontFile; /* Single-byte character font file. */ 116 const HI_CHAR *pMbcFontFile; /* Multi-byte character font file. */ 117 HI_U32 u32Size; /* This value is ignored for the dot-matrix font. */ 118 } HIGO_TEXT_INFO_S; 119 120 typedef enum { 121 HIGO_LAYOUT_MOVECURSOR_UP, /* move cursor to up position */ 122 HIGO_LAYOUT_MOVECURSOR_DOWN, /* move cursor to down position */ 123 HIGO_LAYOUT_MOVECURSOR_PREV, /* move cursor to previous position */ 124 HIGO_LAYOUT_MOVECURSOR_NEXT, /* move cursor to next position */ 125 HIGO_LAYOUT_MOVECURSOR_LEFT, /* move cursor to left position */ 126 HIGO_LAYOUT_MOVECURSOR_RIGHT, /* move cursor to right position */ 127 HIGO_LAYOUT_MOVECURSOR_SOT, /* move cursor to start position of text */ 128 HIGO_LAYOUT_MOVECURSOR_EOT, /* move curosr to end position of text */ 129 HIGO_LAYOUT_MOVECURSOR_SOL, /* move cursor to start of current line */ 130 HIGO_LAYOUT_MOVECURSOR_EOL, /* move cursor to end of current line */ 131 HIGO_LAYOUT_MOVECURSOR_SOP, /* move cursor to start of current paragraph */ 132 HIGO_LAYOUT_MOVECURSOR_EOP, /* move cursor to end of current paragraph */ 133 HIGO_LAYOUT_MOVECURSOR_BUTT, 134 } HIGO_TEXT_CURSOR_DIR_E; 135 136 HI_S32 HI_GO_CreateText(const HI_CHAR *pSbFontFile, const HI_CHAR *pMbFontFile, HI_HANDLE *pTextOut); 137 138 HI_S32 HI_GO_DestroyText(HI_HANDLE TextOut); 139 140 HI_S32 HI_GO_SetInputCharSet(HI_HANDLE TextOut, HIGO_CHARSET_E CharSet); 141 142 HI_S32 HI_GO_GetTextAttr(HI_HANDLE TextOut, HIGO_TEXTOUTATTR_S *pTextOutAttr); 143 144 HI_S32 HI_GO_GetTextExtent(HI_HANDLE TextOut, const HI_CHAR *pText, HI_S32 *pWidth, HI_S32 *pHeight); 145 146 HI_S32 HI_GO_GetVerticalTextExtent(HI_HANDLE hFont, const HI_CHAR *pText, HI_S32 *pTextWidth, HI_S32 *pHeight, 147 HI_S32 *pLayoutAreaWidth); 148 149 HI_S32 HI_GO_SetTextBGTransparent(HI_HANDLE TextOut, HI_BOOL bTransparent); 150 151 HI_S32 HI_GO_SetTextBGColor(HI_HANDLE TextOut, HI_COLOR Color); 152 153 hi_s32 HI_GO_SetTextSize(HI_HANDLE font_handle, hi_u32 size); 154 155 hi_s32 HI_GO_GetTextSize(HI_HANDLE font_handle, hi_u32 *size); 156 157 HI_S32 HI_GO_SetTextColor(HI_HANDLE TextOut, HI_COLOR Color); 158 159 HI_S32 HI_GO_TextOut(HI_HANDLE TextOut, HI_HANDLE Surface, const HI_CHAR *pText, const HI_RECT *pRect); 160 161 HI_S32 HI_GO_TextOutEx(HI_HANDLE hTextOut, HI_HANDLE hSurface, const HI_CHAR *pText, const HI_RECT *pRect, 162 HIGO_LAYOUT_E Style); 163 164 HI_S32 HI_GO_GetTextExtentEx(HI_HANDLE TextOut, const HI_CHAR *pText, const HI_RECT *pRect, HI_U32 *pLen); 165 166 HI_S32 HI_GO_CreateTextEx(const HIGO_TEXT_INFO_S *pInfo, HI_HANDLE *phText); 167 168 HI_S32 HI_GO_SetTextStyle(HI_HANDLE hTextOut, HIGO_TEXT_STYLE_E eStyle); 169 170 HI_S32 HI_GO_SetBaseDir(HI_HANDLE TextOut, HIGO_TEXT_DIR_E eBaseDir); 171 172 HI_S32 HI_GO_SetCharExtra(HI_HANDLE hTextOut, HI_U32 u32Distance); 173 174 HI_S32 HI_GO_SetLineExtra(HI_HANDLE hText, HI_U32 u32Distance); 175 176 HI_S32 HI_GO_InitText(void); 177 178 HI_S32 HI_GO_DeinitText(void); 179 180 HI_S32 HI_GO_MoveCursor2Point(HI_HANDLE hlayout, const HI_POINT *pPoint); 181 182 HI_S32 HI_GO_LayoutInsertText(HI_HANDLE hlayout, const HI_CHAR *pText, HI_U32 text_len); 183 184 HI_S32 HI_GO_LayoutGetLineHeight(HI_HANDLE hlayout, HI_S32 line_no); 185 186 /* 187 * param[in] hLayout Text layout handle. 188 * param[in] hFont Text output handle. 189 * param[in] hSurface Surface handle. 190 * param[in] pText Text contents ending with /0. 191 * param[in] pRect Text output region. 192 * param[in] eLayout Styles and formatting including LAYOUT_LEFT, LAYOUT_RIGHT, 193 * and LAYOUT_HCENTER. 194 * retval ::HI_SUCCESS 195 * retval ::HIGO_ERR_INVPARAM 196 * retval ::HIGO_ERR_INVHANDLE 197 * retval ::HIGO_ERR_NULLPTR 198 */ 199 HI_S32 HI_GO_TextLayoutTextOut(HI_HANDLE hTextLayout, HI_HANDLE hFont, HI_HANDLE hSurface, const HI_CHAR *pText, 200 const HI_RECT *pRect, HIGO_LAYOUT_E eLayout); 201 202 HI_BOOL HI_GO_NeedDrawCursor(HI_HANDLE hlayout); 203 204 HI_S32 HI_GO_GetCursorLinearPos(HI_HANDLE hLayout); 205 206 /* 207 * param[in] hFont Handle of a text output object. 208 * param[in] pText Text contents. 209 * param[in] pRect Text output region. 210 * param[in] eLayout Styles and formatting including LAYOUT_LEFT, LAYOUT_RIGHT, and LAYOUT_HCENTER. 211 * param[out] pRcText Actual rectangle of text contents. It cannot be empty. 212 * param[out] pLen Pointer to the string length. 213 * retval ::HI_SUCCESS 214 * retval ::HIGO_ERR_INVPARAM 215 * retval ::HIGO_ERR_INVHANDLE 216 */ 217 HI_S32 HI_GO_GetTextExtentEx2(HI_HANDLE hFont, const HI_CHAR *pText, const HI_RECT *pRect, HIGO_LAYOUT_E eLayout, 218 HI_RECT *pRcText, HI_U32 *pLen); 219 220 HI_S32 HI_GO_CursorMove(HI_HANDLE hlayout, HIGO_TEXT_CURSOR_DIR_E Dir); 221 222 HI_S32 HI_GO_CursorGetScreenPos(HI_HANDLE hlayout, HI_RECT *pRect); 223 224 HI_S32 HI_GO_CreateLayout(HIGO_LAYOUT_INFO_S *pLayoutInfo, HI_HANDLE *hlayout); 225 226 HI_S32 HI_GO_LayoutGetText(HI_HANDLE hlayout, HI_S32 *length, HI_CHAR **str); 227 228 HI_S32 HI_GO_LayoutClearText(HI_HANDLE hlayout); 229 230 HI_S32 HI_GO_LayoutDeleteText(HI_HANDLE hlayout, HI_S32 sCount); 231 232 HI_S32 HI_GO_LayoutGetRect(HI_HANDLE hlayout, HI_RECT *pRect); 233 234 HI_S32 HI_GO_SetViewPort(HI_HANDLE hlayout, const HI_POINT *pPos); 235 236 HI_S32 HI_GO_SetViewPortSize(HI_HANDLE hlayout, HI_S32 w, HI_S32 h); 237 238 HI_S32 HI_GO_GetViewPort(HI_HANDLE hlayout, HI_POINT *pPos); 239 240 HI_S32 HI_GO_SetViewPortEx(HI_HANDLE hlayout, const HI_RECT *pPos); 241 242 HI_S32 HI_GO_LayoutTextOut(HI_HANDLE hlayout, HI_HANDLE hSurface, const HI_RECT *pRect); 243 244 HI_S32 HI_GO_DestroyLayout(HI_HANDLE hlayout); 245 246 HI_S32 HI_GO_SetSelecting(HI_HANDLE hlayout, const HI_POINT *pos); 247 248 HI_S32 HI_GO_SetSelected(HI_HANDLE hlayout, const HI_POINT *pos); 249 250 HI_S32 HI_GO_SelectFinish(HI_HANDLE hlayout); 251 252 HI_S32 HI_GO_GetSelectString(HI_HANDLE hlayout, HI_CHAR **str, HI_U32 *len); 253 254 HI_S32 HI_GO_SetSelectColor(HI_HANDLE hlayout, HI_COLOR fg, HI_COLOR bg); 255 256 HI_S32 HI_GO_DeleteSelectString(HI_HANDLE hlayout); 257 258 HI_S32 HI_GO_LayoutGetLineNum(HI_HANDLE hlayout); 259 260 HI_S32 HI_GO_LayoutSetFont(HI_HANDLE hlayout, HI_HANDLE hFont); 261 262 HI_S32 HI_GO_LayoutAddText(HI_HANDLE hlayout, const HI_CHAR *pText); 263 264 HI_BOOL HI_GO_CursorInSot(HI_HANDLE hLayout); 265 266 HI_BOOL HI_GO_CursorInEot(HI_HANDLE hLayout); 267 268 #ifdef __cplusplus 269 #if __cplusplus 270 } 271 #endif 272 #endif 273 274 #endif /* HI_GO_TEXT_H */ 275