1 /**
2  * @file win32drv.h
3  *
4  */
5 
6 #ifndef LV_WIN32DRV_H
7 #define LV_WIN32DRV_H
8 
9 /*********************
10  *      INCLUDES
11  *********************/
12 
13 #include <lvgl.h>
14 
15 #if USE_WIN32DRV
16 
17 #if LV_USE_USER_DATA == 0
18 #error "Support for user data is required by new Win32 driver. Set LV_USE_USER_DATA to 1 in lv_conf.h"
19 #endif
20 
21 #include <windows.h>
22 
23 #if _MSC_VER >= 1200
24  // Disable compilation warnings.
25 #pragma warning(push)
26 // nonstandard extension used : bit field types other than int
27 #pragma warning(disable:4214)
28 // 'conversion' conversion from 'type1' to 'type2', possible loss of data
29 #pragma warning(disable:4244)
30 #endif
31 
32 #if _MSC_VER >= 1200
33 // Restore compilation warnings.
34 #pragma warning(pop)
35 #endif
36 
37 /*********************
38  *      DEFINES
39  *********************/
40 
41 #define LVGL_SIMULATOR_WINDOW_CLASS L"LVGL.SimulatorWindow"
42 
43 /**********************
44  *      TYPEDEFS
45  **********************/
46 
47 typedef struct _lv_win32_keyboard_queue_item_t
48 {
49     SLIST_ENTRY ItemEntry;
50     uint32_t key;
51     lv_indev_state_t state;
52 } lv_win32_keyboard_queue_item_t;
53 
54 typedef struct _lv_win32_window_context_t
55 {
56     lv_disp_t* display_device_object;
57     lv_indev_t* mouse_device_object;
58     lv_indev_t* mousewheel_device_object;
59     lv_indev_t* keyboard_device_object;
60 
61     lv_coord_t display_hor_res;
62     lv_coord_t display_ver_res;
63     uint32_t display_dpi;
64     HDC display_framebuffer_context_handle;
65     uint32_t* display_framebuffer_base;
66     size_t display_framebuffer_size;
67     lv_disp_draw_buf_t display_buffer;
68     lv_disp_drv_t display_driver;
69 
70     lv_indev_state_t mouse_state;
71     lv_point_t mouse_point;
72     lv_indev_drv_t mouse_driver;
73 
74     lv_indev_state_t mousewheel_state;
75     int16_t mousewheel_enc_diff;
76     lv_indev_drv_t mousewheel_driver;
77 
78     CRITICAL_SECTION keyboard_mutex;
79     PSLIST_HEADER keyboard_queue;
80     uint16_t keyboard_utf16_high_surrogate;
81     uint16_t keyboard_utf16_low_surrogate;
82     lv_indev_drv_t keyboard_driver;
83 } lv_win32_window_context_t;
84 
85 /**********************
86  * GLOBAL PROTOTYPES
87  **********************/
88 
89 EXTERN_C bool lv_win32_quit_signal;
90 
91 EXTERN_C lv_indev_t* lv_win32_pointer_device_object;
92 EXTERN_C lv_indev_t* lv_win32_keypad_device_object;
93 EXTERN_C lv_indev_t* lv_win32_encoder_device_object;
94 
95 EXTERN_C void lv_win32_add_all_input_devices_to_group(
96     lv_group_t* group);
97 
98 EXTERN_C lv_win32_window_context_t* lv_win32_get_window_context(
99     HWND window_handle);
100 
101 EXTERN_C bool lv_win32_init_window_class();
102 
103 EXTERN_C HWND lv_win32_create_display_window(
104     const wchar_t* window_title,
105     lv_coord_t hor_res,
106     lv_coord_t ver_res,
107     HINSTANCE instance_handle,
108     HICON icon_handle,
109     int show_window_mode);
110 
111 EXTERN_C bool lv_win32_init(
112     HINSTANCE instance_handle,
113     int show_window_mode,
114     lv_coord_t hor_res,
115     lv_coord_t ver_res,
116     HICON icon_handle);
117 
118 /**********************
119  *      MACROS
120  **********************/
121 
122 #endif /*USE_WIN32DRV*/
123 
124 #endif /*LV_WIN32DRV_H*/
125