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 /** Win32 Display Management (Display) */
18 /** */
19 /**************************************************************************/
20 #ifdef WIN32
21 #include "tx_api.h"
22 #include "gx_api.h"
23 #include "gx_system.h"
24 #include "gx_display.h"
25 #include "windows.h"
26 #include "gx_win32_display_driver.h"
27
28 /**************************************************************************/
29 /* */
30 /* FUNCTION RELEASE */
31 /* */
32 /* win32_display_driver_8bit_palette_set PORTABLE C */
33 /* 6.1.4 */
34 /* AUTHOR */
35 /* */
36 /* Kenneth Maxwell, Microsoft Corporation */
37 /* */
38 /* DESCRIPTION */
39 /* */
40 /* This function set bitmap palette for 8bpp. */
41 /* */
42 /* INPUT */
43 /* */
44 /* display Pointer to GX_DISPLAY */
45 /* palette Pointer to palette table */
46 /* count Palette table count */
47 /* */
48 /* OUTPUT */
49 /* */
50 /* None */
51 /* */
52 /* CALLS */
53 /* */
54 /* None */
55 /* */
56 /* CALLED BY */
57 /* */
58 /* win32_graphics_driver_setup_8bit_palette */
59 /* */
60 /* RELEASE HISTORY */
61 /* */
62 /* DATE NAME DESCRIPTION */
63 /* */
64 /* 12-31-2020 Kenneth Maxwell Initial Version 6.1.3 */
65 /* 02-02-2021 Kenneth Maxwell Modified comment(s), */
66 /* made the function public, */
67 /* resulting in version 6.1.4 */
68 /* */
69 /**************************************************************************/
win32_display_driver_8bit_palette_set(GX_DISPLAY * display,GX_COLOR * palette,INT count)70 VOID win32_display_driver_8bit_palette_set(GX_DISPLAY *display, GX_COLOR *palette, INT count)
71 {
72 GX_COLOR color;
73 int loop;
74 GX_WIN32_DISPLAY_DRIVER_DATA *instance;
75
76 display -> gx_display_palette = palette;
77 display -> gx_display_palette_size = count;
78
79 instance = (GX_WIN32_DISPLAY_DRIVER_DATA *)display -> gx_display_driver_data;
80 instance -> win32_driver_bmpinfo.gx_bmp_header.biClrUsed = count;
81 instance -> win32_driver_bmpinfo.gx_bmp_header.biClrImportant = count;
82
83 for (loop = 0; loop < count; loop++)
84 {
85 color = *palette++;
86 instance -> win32_driver_bmpinfo.gx_bmp_colors[loop] = color;
87 }
88 }
89
90 /**************************************************************************/
91 /* */
92 /* FUNCTION RELEASE */
93 /* */
94 /* win32_8bit_palette_bitmap_header_create PORTABLE C */
95 /* 6.1.3 */
96 /* AUTHOR */
97 /* */
98 /* Kenneth Maxwell, Microsoft Corporation */
99 /* */
100 /* DESCRIPTION */
101 /* */
102 /* This function creates bitmap header for 8bpp driver. */
103 /* */
104 /* INPUT */
105 /* */
106 /* display Pointer to GX_DISPLAY */
107 /* */
108 /* OUTPUT */
109 /* */
110 /* None */
111 /* */
112 /* CALLS */
113 /* */
114 /* None */
115 /* */
116 /* CALLED BY */
117 /* */
118 /* win32_graphics_driver_setup_8bit_palette */
119 /* */
120 /* RELEASE HISTORY */
121 /* */
122 /* DATE NAME DESCRIPTION */
123 /* */
124 /* 12-31-2020 Kenneth Maxwell Initial Version 6.1.3 */
125 /* */
126 /**************************************************************************/
win32_8bit_palette_bitmap_header_create(GX_DISPLAY * display)127 VOID win32_8bit_palette_bitmap_header_create(GX_DISPLAY *display)
128 {
129
130 GX_WIN32_DISPLAY_DRIVER_DATA *instance = (GX_WIN32_DISPLAY_DRIVER_DATA *)display -> gx_display_driver_data;
131
132 instance -> win32_driver_bmpinfo.gx_bmp_header.biSize = sizeof(BITMAPINFOHEADER);
133 instance -> win32_driver_bmpinfo.gx_bmp_header.biWidth = display -> gx_display_width;
134 instance -> win32_driver_bmpinfo.gx_bmp_header.biHeight = display -> gx_display_height;
135
136 instance -> win32_driver_bmpinfo.gx_bmp_header.biPlanes = 1;
137 instance -> win32_driver_bmpinfo.gx_bmp_header.biBitCount = 8;
138 instance -> win32_driver_bmpinfo.gx_bmp_header.biSizeImage = display -> gx_display_width * display -> gx_display_height;
139 instance -> win32_driver_bmpinfo.gx_bmp_header.biClrUsed = 0;
140 instance -> win32_driver_bmpinfo.gx_bmp_header.biClrImportant = 0;
141 instance -> win32_driver_bmpinfo.gx_bmp_header.biCompression = BI_RGB;
142 }
143
144 /**************************************************************************/
145 /* */
146 /* FUNCTION RELEASE */
147 /* */
148 /* win32_graphics_driver_setup_8bit_palette PORTABLE C */
149 /* 6.1.10 */
150 /* AUTHOR */
151 /* */
152 /* Kenneth Maxwell, Microsoft Corporation */
153 /* */
154 /* DESCRIPTION */
155 /* */
156 /* This function creates a Windows specific 8bpp display driver. */
157 /* */
158 /* INPUT */
159 /* */
160 /* display Pointer to GX_DISPLAY */
161 /* */
162 /* OUTPUT */
163 /* */
164 /* status Completion status */
165 /* */
166 /* CALLS */
167 /* */
168 /* _gx_display_driver_8bit_palette_setup guix display setup funciton. */
169 /* win32_8bit_palette_bitmap_header_create */
170 /* Create bitmap header info */
171 /* gx_win32_get_free_data_instance Get display data instance */
172 /* [gx_display_driver_palette_set] Set palette table for 8bpp */
173 /* GX_WIN32_EVENT_THREAD_CREATE Create event thread */
174 /* */
175 /* CALLED BY */
176 /* */
177 /* Application Code */
178 /* */
179 /* RELEASE HISTORY */
180 /* */
181 /* DATE NAME DESCRIPTION */
182 /* */
183 /* 12-31-2020 Kenneth Maxwell Initial Version 6.1.3 */
184 /* 01-31-2022 Ting Zhu Modified comment(s), */
185 /* improved logic, */
186 /* resulting in version 6.1.10 */
187 /* */
188 /**************************************************************************/
win32_graphics_driver_setup_8bit_palette(GX_DISPLAY * display)189 UINT win32_graphics_driver_setup_8bit_palette(GX_DISPLAY *display)
190 {
191 GX_WIN32_DISPLAY_DRIVER_DATA *data;
192
193 /* Initialize the low-level drawing function pointers.
194
195 For windows, these are always just the generic funcions,
196 but for some hardware, these will be customized,
197 optimized functions specific to that hardware. */
198
199 data = gx_win32_get_free_data_instance();
200 if (!data)
201 {
202 /* We don't have any free display data instance. */
203 return(GX_FAILURE);
204 }
205
206 /* Save off the format of display driver. */
207 data -> win32_driver_type = GX_COLOR_FORMAT_8BIT_PALETTE;
208
209 _gx_display_driver_8bit_palette_setup(display, data, gx_win32_display_buffer_toggle);
210 display -> gx_display_driver_palette_set = win32_display_driver_8bit_palette_set;
211
212 /* Create bitmap header for 8bit palette driver. */
213 win32_8bit_palette_bitmap_header_create(display);
214
215 /* Create the GUIX / Windows event thread
216 This thread is a substitute for a touch display
217 or keyboard driver thread that would be running
218 on embedded hardware. */
219 GX_WIN32_EVENT_THREAD_CREATE(data, "GUI-WIN32-8bit-palette");
220
221 return(GX_SUCCESS);
222 }
223 #endif /* WIN32 */
224
225