1 /***************************************************************************
2  * Copyright (c) 2024 Microsoft Corporation
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the MIT License which is available at
6  * https://opensource.org/licenses/MIT.
7  *
8  * SPDX-License-Identifier: MIT
9  **************************************************************************/
10 
11 
12 /**************************************************************************/
13 /**************************************************************************/
14 /**                                                                       */
15 /** GUIX Component                                                        */
16 /**                                                                       */
17 /**   Display Management (Display)                                        */
18 /**                                                                       */
19 /**************************************************************************/
20 
21 #define GX_SOURCE_CODE
22 
23 
24 /* Include necessary system files.  */
25 
26 #include "gx_api.h"
27 #include "gx_system.h"
28 #include "gx_display.h"
29 #include "gx_utility.h"
30 
31 
32 /**************************************************************************/
33 /*                                                                        */
34 /*  FUNCTION                                               RELEASE        */
35 /*                                                                        */
36 /*    _gx_display_language_table_set                      PORTABLE C      */
37 /*                                                           6.1          */
38 /*  AUTHOR                                                                */
39 /*                                                                        */
40 /*    Kenneth Maxwell, Microsoft Corporation                              */
41 /*                                                                        */
42 /*  DESCRIPTION  (Deprecated)                                             */
43 /*                                                                        */
44 /*    This service sets the language table.                               */
45 /*                                                                        */
46 /*  INPUT                                                                 */
47 /*                                                                        */
48 /*    language_table                        The language table to be set  */
49 /*    num_languages                         Number of languages in the    */
50 /*                                            table                       */
51 /*    number_of_strings                     Number of strings in each     */
52 /*                                            language                    */
53 /*                                                                        */
54 /*  OUTPUT                                                                */
55 /*                                                                        */
56 /*    status                                Completion status             */
57 /*                                                                        */
58 /*  CALLS                                                                 */
59 /*                                                                        */
60 /*    _gx_system_all_canvas_dirty           Mark canvas dirty             */
61 /*                                                                        */
62 /*  CALLED BY                                                             */
63 /*                                                                        */
64 /*    Application Code                                                    */
65 /*                                                                        */
66 /*  RELEASE HISTORY                                                       */
67 /*                                                                        */
68 /*    DATE              NAME                      DESCRIPTION             */
69 /*                                                                        */
70 /*  05-19-2020     Kenneth Maxwell          Initial Version 6.0           */
71 /*  09-30-2020     Kenneth Maxwell          Modified comment(s),          */
72 /*                                            resulting in version 6.1    */
73 /*                                                                        */
74 /**************************************************************************/
75 #if defined(GX_ENABLE_DEPRECATED_STRING_API)
_gx_display_language_table_set(GX_DISPLAY * display,GX_CHAR *** language_table,GX_UBYTE num_languages,UINT number_of_strings)76 UINT  _gx_display_language_table_set(GX_DISPLAY *display, GX_CHAR ***language_table,
77                                     GX_UBYTE num_languages, UINT number_of_strings)
78 {
79 GX_EVENT            language_event;
80 GX_WINDOW_ROOT     *root;
81 GX_CONST GX_CHAR ***old_table = display -> gx_display_language_table_deprecated;
82 
83      /* Setup the system string table information.  */
84     display -> gx_display_language_table_deprecated = (GX_CONST GX_CHAR ***)language_table;
85     display -> gx_display_language_table = GX_NULL;
86 
87     display -> gx_display_language_table_size = num_languages;
88     display -> gx_display_string_table_size = number_of_strings;
89 
90     if (old_table)
91     {
92         memset(&language_event, 0, sizeof(GX_EVENT));
93         language_event.gx_event_type = GX_EVENT_LANGUAGE_CHANGE;
94 
95         root = (GX_WINDOW_ROOT *)_gx_system_root_window_created_list;
96 
97         while (root)
98         {
99             if (root -> gx_window_root_canvas)
100             {
101                 if (root -> gx_window_root_canvas -> gx_canvas_display == display)
102                 {
103                     language_event.gx_event_target = (GX_WIDGET *) root;
104                     _gx_system_event_send(&language_event);
105                 }
106             }
107 
108             root = (GX_WINDOW_ROOT *)root -> gx_widget_next;
109         }
110 
111         /* mark all visible canvases as dirty when there is a resource change */
112         _gx_system_all_canvas_dirty();
113     }
114 
115     /* Return success.  */
116     return(GX_SUCCESS);
117 }
118 #endif
119 
120 /**************************************************************************/
121 /*                                                                        */
122 /*  FUNCTION                                               RELEASE        */
123 /*                                                                        */
124 /*    _gx_display_language_table_set_ext                  PORTABLE C      */
125 /*                                                           6.1          */
126 /*  AUTHOR                                                                */
127 /*                                                                        */
128 /*    Kenneth Maxwell, Microsoft Corporation                              */
129 /*                                                                        */
130 /*  DESCRIPTION                                                           */
131 /*                                                                        */
132 /*    This service sets the language table.                               */
133 /*                                                                        */
134 /*  INPUT                                                                 */
135 /*                                                                        */
136 /*    language_table                        The language table to be set  */
137 /*    num_languages                         Number of languages in the    */
138 /*                                            table                       */
139 /*    number_of_strings                     Number of strings in each     */
140 /*                                            language                    */
141 /*                                                                        */
142 /*  OUTPUT                                                                */
143 /*                                                                        */
144 /*    status                                Completion status             */
145 /*                                                                        */
146 /*  CALLS                                                                 */
147 /*                                                                        */
148 /*    _gx_system_all_canvas_dirty           Mark canvas dirty             */
149 /*                                                                        */
150 /*  CALLED BY                                                             */
151 /*                                                                        */
152 /*    Application Code                                                    */
153 /*                                                                        */
154 /*  RELEASE HISTORY                                                       */
155 /*                                                                        */
156 /*    DATE              NAME                      DESCRIPTION             */
157 /*                                                                        */
158 /*  05-19-2020     Kenneth Maxwell          Initial Version 6.0           */
159 /*  09-30-2020     Kenneth Maxwell          Modified comment(s),          */
160 /*                                            resulting in version 6.1    */
161 /*                                                                        */
162 /**************************************************************************/
_gx_display_language_table_set_ext(GX_DISPLAY * display,GX_CONST GX_STRING ** language_table,GX_UBYTE num_languages,UINT number_of_strings)163 UINT  _gx_display_language_table_set_ext(GX_DISPLAY *display, GX_CONST GX_STRING **language_table,
164                                     GX_UBYTE num_languages, UINT number_of_strings)
165 {
166 GX_EVENT   language_event;
167 GX_WINDOW_ROOT *root;
168 GX_CONST GX_STRING **old_table = display -> gx_display_language_table;
169 
170     /* Setup the system string table information.  */
171     display -> gx_display_language_table = language_table;
172 
173 #if defined(GX_ENABLE_DEPRECATED_STRING_API)
174     display -> gx_display_language_table_deprecated = GX_NULL;
175 #endif
176 
177     display -> gx_display_language_table_size = num_languages;
178     display -> gx_display_string_table_size = number_of_strings;
179 
180     if (old_table)
181     {
182         memset(&language_event, 0, sizeof(GX_EVENT));
183         language_event.gx_event_type = GX_EVENT_LANGUAGE_CHANGE;
184 
185         root = (GX_WINDOW_ROOT *)_gx_system_root_window_created_list;
186 
187         while (root)
188         {
189             if (root -> gx_window_root_canvas)
190             {
191                 if (root -> gx_window_root_canvas -> gx_canvas_display == display)
192                 {
193                     language_event.gx_event_target = (GX_WIDGET *) root;
194                     _gx_system_event_send(&language_event);
195                 }
196             }
197 
198             root = (GX_WINDOW_ROOT *)root -> gx_widget_next;
199         }
200 
201         /* mark all visible canvases as dirty when there is a resource change */
202         _gx_system_all_canvas_dirty();
203     }
204 
205     /* Return success.  */
206     return(GX_SUCCESS);
207 }
208 
209 /**************************************************************************/
210 /*                                                                        */
211 /*  FUNCTION                                               RELEASE        */
212 /*                                                                        */
213 /*    _gx_display_language_direction_table_set_ext        PORTABLE C      */
214 /*                                                           6.3.0        */
215 /*  AUTHOR                                                                */
216 /*                                                                        */
217 /*    Ting Zhu, Microsoft Corporation                                     */
218 /*                                                                        */
219 /*  DESCRIPTION                                                           */
220 /*                                                                        */
221 /*    This service sets the language direction table.                     */
222 /*                                                                        */
223 /*  INPUT                                                                 */
224 /*                                                                        */
225 /*    display                               Pointer to display            */
226 /*    language_direction_table              The language direction table  */
227 /*                                            to be set                   */
228 /*    num_languages                         Number of languages in the    */
229 /*                                            table                       */
230 /*                                                                        */
231 /*  OUTPUT                                                                */
232 /*                                                                        */
233 /*    status                                Completion status             */
234 /*                                                                        */
235 /*  CALLS                                                                 */
236 /*                                                                        */
237 /*    None                                                                */
238 /*                                                                        */
239 /*  CALLED BY                                                             */
240 /*                                                                        */
241 /*    Application Code                                                    */
242 /*                                                                        */
243 /*  RELEASE HISTORY                                                       */
244 /*                                                                        */
245 /*    DATE              NAME                      DESCRIPTION             */
246 /*                                                                        */
247 /*  01-31-2022     Ting Zhu                 Initial Version 6.1.10        */
248 /*  10-31-2023     Ting Zhu                 Modified comment(s),          */
249 /*                                            resulting in version 6.3.0  */
250 /*                                                                        */
251 /**************************************************************************/
252 #if defined(GX_DYNAMIC_BIDI_TEXT_SUPPORT)
_gx_display_language_direction_table_set(GX_DISPLAY * display,GX_CONST GX_UBYTE * language_direction_table,GX_UBYTE num_languages)253 UINT  _gx_display_language_direction_table_set(GX_DISPLAY *display, GX_CONST GX_UBYTE *language_direction_table, GX_UBYTE num_languages)
254 {
255 
256     if (num_languages != display->gx_display_language_table_size)
257     {
258         return(GX_INVALID_VALUE);
259     }
260 
261     /* Setup the system string table information.  */
262     display -> gx_display_language_direction_table = language_direction_table;
263 
264     /* Return success.  */
265     return(GX_SUCCESS);
266 }
267 #endif
268