1 /**************************************************************************/
2 /*                                                                        */
3 /*       Copyright (c) Microsoft Corporation. All rights reserved.        */
4 /*                                                                        */
5 /*       This software is licensed under the Microsoft Software License   */
6 /*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
7 /*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
8 /*       and in the root directory of this software.                      */
9 /*                                                                        */
10 /**************************************************************************/
11 
12 
13 /**************************************************************************/
14 /**************************************************************************/
15 /**                                                                       */
16 /** GUIX Component                                                        */
17 /**                                                                       */
18 /**   Drop List Management (List)                                         */
19 /**                                                                       */
20 /**************************************************************************/
21 
22 #define GX_SOURCE_CODE
23 
24 
25 /* Include necessary system files.  */
26 
27 #include "gx_api.h"
28 #include "gx_system.h"
29 #include "gx_display.h"
30 #include "gx_context.h"
31 #include "gx_widget.h"
32 #include "gx_window.h"
33 #include "gx_utility.h"
34 #include "gx_drop_list.h"
35 
36 
37 /**************************************************************************/
38 /*                                                                        */
39 /*  FUNCTION                                               RELEASE        */
40 /*                                                                        */
41 /*    _gx_drop_list_draw                                  PORTABLE C      */
42 /*                                                           6.1          */
43 /*  AUTHOR                                                                */
44 /*                                                                        */
45 /*    Kenneth Maxwell, Microsoft Corporation                              */
46 /*                                                                        */
47 /*  DESCRIPTION                                                           */
48 /*                                                                        */
49 /*    This function draws the specified widget.                           */
50 /*                                                                        */
51 /*  INPUT                                                                 */
52 /*                                                                        */
53 /*    drop_list                             Pointer to drop list widget   */
54 /*                                                                        */
55 /*  OUTPUT                                                                */
56 /*                                                                        */
57 /*    None                                                                */
58 /*                                                                        */
59 /*  CALLS                                                                 */
60 /*                                                                        */
61 /*    _gx_drop_list_background_draw         Draw the widget background    */
62 /*    _gx_widget_children_draw              Draw children widgets         */
63 /*    _gx_vertical_list_selected_widget_get Get selected child item of    */
64 /*                                            popup list                  */
65 /*    _gx_widget_client_get                 Find the client area of a     */
66 /*                                            widget                      */
67 /*                                                                        */
68 /*  CALLED BY                                                             */
69 /*                                                                        */
70 /*    Application Code                                                    */
71 /*    GUIX Internal Code                                                  */
72 /*                                                                        */
73 /*  RELEASE HISTORY                                                       */
74 /*                                                                        */
75 /*    DATE              NAME                      DESCRIPTION             */
76 /*                                                                        */
77 /*  05-19-2020     Kenneth Maxwell          Initial Version 6.0           */
78 /*  09-30-2020     Kenneth Maxwell          Modified comment(s),          */
79 /*                                            resulting in version 6.1    */
80 /*                                                                        */
81 /**************************************************************************/
_gx_drop_list_draw(GX_DROP_LIST * drop_list)82 VOID _gx_drop_list_draw(GX_DROP_LIST *drop_list)
83 {
84 GX_RECTANGLE      client;
85 GX_WIDGET        *selected;
86 GX_WIDGET        *widget;
87 GX_VERTICAL_LIST *list;
88 GX_RECTANGLE      selected_size;
89 GX_RECTANGLE      selected_clip;
90 ULONG             selected_style;
91 
92     widget = (GX_WIDGET *)drop_list;
93     _gx_drop_list_background_draw(drop_list);
94 
95     list = (GX_VERTICAL_LIST *)&drop_list -> gx_drop_list_popup.gx_popup_list_list;
96     _gx_vertical_list_selected_widget_get(list, &selected);
97 
98     if (selected)
99     {
100         /* draw the selected widget into my client area: */
101         _gx_widget_client_get(widget, -1, &client);
102         selected_size = selected -> gx_widget_size;
103         selected_clip = selected -> gx_widget_clip;
104         selected_style = selected -> gx_widget_style;
105 
106         if (drop_list -> gx_widget_status & GX_STATUS_HAS_FOCUS)
107         {
108             selected -> gx_widget_style |= ~GX_STYLE_DRAW_SELECTED;
109         }
110         else
111         {
112             selected -> gx_widget_style &= ~GX_STYLE_DRAW_SELECTED;
113         }
114         selected -> gx_widget_size = client;
115         selected -> gx_widget_clip = client;
116         selected -> gx_widget_draw_function(selected);
117         selected -> gx_widget_size = selected_size;
118         selected -> gx_widget_clip = selected_clip;
119         selected -> gx_widget_style = selected_style;
120     }
121 
122     _gx_widget_children_draw(widget);
123 }
124 
125