• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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