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 /**   Canvas Management (Canvas)                                          */
18 /**                                                                       */
19 /**************************************************************************/
20 /**************************************************************************/
21 
22 
23 /**************************************************************************/
24 /*                                                                        */
25 /*  COMPONENT DEFINITION                                   RELEASE        */
26 /*                                                                        */
27 /*    gx_canvas.h                                         PORTABLE C      */
28 /*                                                           6.1.11       */
29 /*  AUTHOR                                                                */
30 /*                                                                        */
31 /*    Kenneth Maxwell, Microsoft Corporation                              */
32 /*                                                                        */
33 /*  DESCRIPTION                                                           */
34 /*                                                                        */
35 /*    This file defines the GUIX canvas component, including all data     */
36 /*    types and external references.  It is assumed that gx_api.h and     */
37 /*    gx_port.h have already been included.                               */
38 /*                                                                        */
39 /*  RELEASE HISTORY                                                       */
40 /*                                                                        */
41 /*    DATE              NAME                      DESCRIPTION             */
42 /*                                                                        */
43 /*  05-19-2020     Kenneth Maxwell          Initial Version 6.0           */
44 /*  09-30-2020     Kenneth Maxwell          Modified comment(s),          */
45 /*                                            resulting in version 6.1    */
46 /*  04-25-2022     Ting Zhu                 Modified comment(s),          */
47 /*                                            added new declarations,     */
48 /*                                            resulting in version 6.1.11 */
49 /*                                                                        */
50 /**************************************************************************/
51 
52 #ifndef GX_CANVAS_H
53 #define GX_CANVAS_H
54 
55 
56 /* Define canvas management constants.  */
57 
58 #define GX_CANVAS_ID ((ULONG)0x43414E56)
59 
60 
61 /* Define canvas management function prototypes.  */
62 UINT    _gx_canvas_alpha_set(GX_CANVAS *canvas, GX_UBYTE alpha);
63 UINT    _gx_canvas_arc_draw(INT xcenter, INT ycenter, UINT r, INT start_angle, INT end_angle);
64 VOID    _gx_canvas_anti_alias_line_draw(GX_DRAW_CONTEXT *context, INT xs, INT ys, INT xe, INT ye, INT flag);
65 UINT    _gx_canvas_block_move(GX_RECTANGLE *block, GX_VALUE x_shift, GX_VALUE y_shift, GX_RECTANGLE *dirty);
66 
67 UINT    _gx_canvas_circle_draw(INT xcenter, INT ycenter, UINT r);
68 GX_BOOL _gx_canvas_composite_create(GX_CANVAS **return_composite);
69 UINT    _gx_canvas_create(GX_CANVAS *canvas, GX_CONST GX_CHAR *name, GX_DISPLAY *dispaly,
70                           UINT type, UINT width, UINT height, GX_COLOR *memory_area, ULONG memory_size);
71 UINT    _gx_canvas_delete(GX_CANVAS *canvas);
72 
73 VOID    _gx_canvas_dirty_mark(GX_CANVAS *canvas, GX_RECTANGLE *area);
74 
75 UINT    _gx_canvas_drawing_complete(GX_CANVAS *canvas, GX_BOOL Flush);
76 UINT    _gx_canvas_drawing_initiate(GX_CANVAS *canvas, GX_WIDGET *who, GX_RECTANGLE *clip_area);
77 
78 UINT    _gx_canvas_ellipse_draw(INT xcenter, INT ycenter, INT a, INT b);
79 VOID    _gx_canvas_glyphs_draw(GX_DRAW_CONTEXT *context, GX_POINT *draw_position, GX_CONST GX_STRING *string,
80                                GX_RECTANGLE *view,
81                                VOID (*draw_glyph)(GX_DRAW_CONTEXT *, GX_RECTANGLE *, GX_POINT *, GX_CONST GX_GLYPH *));
82 
83 UINT    _gx_canvas_hardware_layer_bind(GX_CANVAS *canvas, INT layer);
84 UINT    _gx_canvas_hide(GX_CANVAS *canvas);
85 
86 UINT _gx_canvas_line_draw(GX_VALUE x_start, GX_VALUE y_start, GX_VALUE x_end, GX_VALUE y_end);
87 UINT _gx_canvas_memory_define(GX_CANVAS *canvas, GX_COLOR *memory, ULONG memsize);
88 
89 #if defined(GX_MOUSE_SUPPORT)
90 UINT _gx_canvas_mouse_define(GX_CANVAS *canvas, GX_MOUSE_CURSOR_INFO *info);
91 UINT _gx_canvas_mouse_show(GX_CANVAS *canvas);
92 UINT _gx_canvas_mouse_hide(GX_CANVAS *canvas);
93 #endif
94 UINT _gx_canvas_offset_set(GX_CANVAS *canvas, GX_VALUE x, GX_VALUE y);
95 UINT _gx_canvas_pixel_draw(GX_POINT position);
96 UINT _gx_canvas_pixelmap_blend(GX_VALUE x_position, GX_VALUE y_position, GX_PIXELMAP *pixelmap, GX_UBYTE alpha);
97 UINT _gx_canvas_pixelmap_draw(GX_VALUE x_position, GX_VALUE y_position, GX_PIXELMAP *pixelmap);
98 UINT _gx_canvas_pixelmap_get(GX_PIXELMAP *pixelmap);
99 UINT _gx_canvas_pixelmap_tile(GX_RECTANGLE *fill, GX_PIXELMAP *pixelmap);
100 UINT _gx_canvas_pixelmap_rotate(GX_VALUE x_position, GX_VALUE y_position, GX_PIXELMAP *pixelmap,
101                                 INT angle, INT rot_cx, INT rot_cy);
102 UINT _gx_canvas_polygon_draw(GX_POINT *point_array, INT number_of_points);
103 UINT _gx_canvas_pie_draw(INT xcenter, INT ycenter, UINT r, INT start_angle, INT end_angle);
104 UINT _gx_canvas_rectangle_draw(GX_RECTANGLE *rectangle);
105 #if defined(GX_ENABLE_DEPRECATED_STRING_API)
106 UINT _gx_canvas_rotated_text_draw(GX_CONST GX_CHAR *text, GX_VALUE xcenter, GX_VALUE ycenter, INT angle);
107 #endif
108 UINT _gx_canvas_rotated_text_draw_ext(GX_CONST GX_STRING *text, GX_VALUE xcenter, GX_VALUE ycenter, INT angle);
109 UINT _gx_canvas_shift(GX_CANVAS *canvas, GX_VALUE x, GX_VALUE y);
110 UINT _gx_canvas_show(GX_CANVAS *canvas);
111 
112 UINT _gx_canvas_aligned_text_draw(GX_CONST GX_STRING *string, GX_RECTANGLE *rectangle, ULONG alignment);
113 #if defined(GX_ENABLE_DEPRECATED_STRING_API)
114 UINT _gx_canvas_text_draw(GX_VALUE x_start, GX_VALUE y_start, GX_CONST GX_CHAR *string, INT length);
115 #endif
116 UINT _gx_canvas_text_draw_ext(GX_VALUE x_start, GX_VALUE y_start, GX_CONST GX_STRING *string);
117 
118 /* Define error checking shells for API services.  These are only referenced by the
119    application.  */
120 
121 UINT _gxe_canvas_alpha_set(GX_CANVAS *canvas, GX_UBYTE alpha);
122 UINT _gxe_canvas_arc_draw(INT xcenter, INT ycenter, UINT r, INT start_angle, INT end_angle);
123 UINT _gxe_canvas_block_move(GX_RECTANGLE *block, GX_VALUE x_shift, GX_VALUE y_shift, GX_RECTANGLE *dirty);
124 UINT _gxe_canvas_circle_draw(INT xcenter, INT ycenter, UINT r);
125 UINT _gxe_canvas_create(GX_CANVAS *canvas, GX_CONST GX_CHAR *name, GX_DISPLAY *display, UINT type, UINT width,
126                         UINT height, GX_COLOR *memory_area, ULONG memory_size,
127                         UINT canvas_control_block_size);
128 UINT _gxe_canvas_delete(GX_CANVAS *canvas);
129 UINT _gxe_canvas_drawing_complete(GX_CANVAS *canvas, GX_BOOL Flush);
130 UINT _gxe_canvas_drawing_initiate(GX_CANVAS *canvas, GX_WIDGET *who, GX_RECTANGLE *dirty_area);
131 UINT _gxe_canvas_ellipse_draw(INT xcenter, INT ycenter, INT a, INT b);
132 
133 UINT _gxe_canvas_hardware_layer_bind(GX_CANVAS *canvas, INT layer);
134 UINT _gxe_canvas_hide(GX_CANVAS *canvas);
135 UINT _gxe_canvas_line_draw(GX_VALUE x_start, GX_VALUE y_start, GX_VALUE x_end, GX_VALUE y_end);
136 UINT _gxe_canvas_memory_define(GX_CANVAS *canvas, GX_COLOR *memory, ULONG memsize);
137 
138 #if defined(GX_MOUSE_SUPPORT)
139 UINT _gxe_canvas_mouse_define(GX_CANVAS *canvas, GX_MOUSE_CURSOR_INFO *info);
140 UINT _gxe_canvas_mouse_show(GX_CANVAS *canvas);
141 UINT _gxe_canvas_mouse_hide(GX_CANVAS *canvas);
142 #endif
143 UINT _gxe_canvas_offset_set(GX_CANVAS *canvas, GX_VALUE x, GX_VALUE y);
144 UINT _gxe_canvas_pie_draw(INT xcenter, INT ycenter, UINT r, INT start_angle, INT end_angle);
145 UINT _gxe_canvas_pixel_draw(GX_POINT position);
146 UINT _gxe_canvas_pixelmap_blend(GX_VALUE x_position, GX_VALUE y_position, GX_PIXELMAP *pixelmap, GX_UBYTE alpha);
147 UINT _gxe_canvas_pixelmap_draw(GX_VALUE x_position, GX_VALUE y_position, GX_PIXELMAP *pixelmap);
148 UINT _gxe_canvas_pixelmap_get(GX_PIXELMAP *pixelmap);
149 UINT _gxe_canvas_pixelmap_tile(GX_RECTANGLE *fill, GX_PIXELMAP *pixelmap);
150 UINT _gxe_canvas_pixelmap_rotate(GX_VALUE x_position, GX_VALUE y_position, GX_PIXELMAP *pixelmap, INT angle, INT rot_cx, INT rot_cy);
151 UINT _gxe_canvas_polygon_draw(GX_POINT *point_array, INT number_of_points);
152 UINT _gxe_canvas_rectangle_draw(GX_RECTANGLE *rectangle);
153 #if defined(GX_ENABLE_DEPRECATED_STRING_API)
154 UINT _gxe_canvas_rotated_text_draw(GX_CONST GX_CHAR *text, GX_VALUE xcenter,  GX_VALUE ycenter, INT angle);
155 #endif
156 UINT _gxe_canvas_rotated_text_draw_ext(GX_CONST GX_STRING *text, GX_VALUE xcenter, GX_VALUE ycenter, INT angle);
157 UINT _gxe_canvas_shift(GX_CANVAS *canvas, GX_VALUE x, GX_VALUE y);
158 UINT _gxe_canvas_show(GX_CANVAS *canvas);
159 UINT _gxe_canvas_aligned_text_draw(GX_CONST GX_STRING *string, GX_RECTANGLE *rectangle, ULONG alignment);
160 #if defined(GX_ENABLE_DEPRECATED_STRING_API)
161 UINT _gxe_canvas_text_draw(GX_VALUE x_start, GX_VALUE y_start, GX_CONST GX_CHAR *string, INT length);
162 #endif
163 UINT _gxe_canvas_text_draw_ext(GX_VALUE x_start, GX_VALUE y_start, GX_CONST GX_STRING *string);
164 
165 #ifdef GX_TARGET_WIN32
166 VOID _win32_compatible_canvas_memory_allocate(GX_CANVAS *canvas);
167 #endif
168 
169 #endif
170 
171