| @@ -0,0 +1,810 @@ | |||
| /* ---- | |||
| * ---- file : lglw_linux.c (**stub**) | |||
| * ---- author : bsp | |||
| * ---- legal : Distributed under terms of the MIT LICENSE (MIT). | |||
| * ---- | |||
| * ---- Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| * ---- of this software and associated documentation files (the "Software"), to deal | |||
| * ---- in the Software without restriction, including without limitation the rights | |||
| * ---- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| * ---- copies of the Software, and to permit persons to whom the Software is | |||
| * ---- furnished to do so, subject to the following conditions: | |||
| * ---- | |||
| * ---- The above copyright notice and this permission notice shall be included in | |||
| * ---- all copies or substantial portions of the Software. | |||
| * ---- | |||
| * ---- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| * ---- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| * ---- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| * ---- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| * ---- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| * ---- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
| * ---- THE SOFTWARE. | |||
| * ---- | |||
| * ---- info : This is part of the "lglw" package. | |||
| * ---- | |||
| * ---- created: 04Aug2018 | |||
| * ---- changed: 05Aug2018, 06Aug2018, 07Aug2018, 08Aug2018, 09Aug2018, 18Aug2018, 10Oct2018 | |||
| * ---- | |||
| * ---- | |||
| */ | |||
| #include "lglw.h" | |||
| #include <stdlib.h> | |||
| #include <stdio.h> | |||
| #include <string.h> | |||
| #define Dprintf if(0);else printf | |||
| // #define Dprintf if(1);else printf | |||
| // ---------------------------------------------------------------------------- macros and defines | |||
| #define LGLW(a) lglw_int_t *lglw = ((lglw_int_t*)(a)) | |||
| #define LGLW_DEFAULT_HIDDEN_W (800) | |||
| #define LGLW_DEFAULT_HIDDEN_H (600) | |||
| #define LGLW_MOUSE_TOUCH_LMB_TIMEOUT (250u) | |||
| #define LGLW_MOUSE_TOUCH_RMB_TIMEOUT (500u) | |||
| #define LGLW_MOUSE_TOUCH_RMB_STATE_IDLE (0u) | |||
| #define LGLW_MOUSE_TOUCH_RMB_STATE_LMB (1u) | |||
| #define LGLW_MOUSE_TOUCH_RMB_STATE_WAIT (2u) | |||
| #define LGLW_MOUSE_TOUCH_RMB_STATE_RMB (3u) | |||
| #define LGLW_MOUSE_TOUCH_RMB_MOVE_THRESHOLD (7u) | |||
| #define sABS(x) (((x)>0)?(x):-(x)) | |||
| // ---------------------------------------------------------------------------- structs and typedefs | |||
| typedef struct lglw_int_s { | |||
| void *user_data; // arbitrary user data | |||
| struct { | |||
| lglw_vec2i_t size; | |||
| } hidden; | |||
| struct { | |||
| lglw_vec2i_t size; | |||
| int32_t swap_interval; | |||
| } win; | |||
| struct { | |||
| } prev; | |||
| struct { | |||
| uint32_t kmod_state; // See LGLW_KMOD_xxx | |||
| lglw_keyboard_fxn_t cbk; | |||
| } keyboard; | |||
| struct { | |||
| lglw_vec2i_t p; // last seen mouse position | |||
| uint32_t button_state; | |||
| lglw_mouse_fxn_t cbk; | |||
| struct { | |||
| uint32_t mode; | |||
| lglw_vec2i_t p; // grab-start mouse position | |||
| lglw_bool_t b_queue_warp; | |||
| lglw_vec2i_t last_p; | |||
| } grab; | |||
| struct { | |||
| lglw_bool_t b_enable; | |||
| lglw_bool_t b_update_queued; | |||
| lglw_bool_t b_syn_rmb; | |||
| uint32_t syn_rmb_hold_state; // see LGLW_MOUSE_TOUCH_RMB_STATE_xxx | |||
| uint32_t hold_start_ms; | |||
| lglw_vec2i_t hold_start_p; | |||
| } touch; | |||
| } mouse; | |||
| struct { | |||
| uint32_t state; | |||
| lglw_focus_fxn_t cbk; | |||
| } focus; | |||
| struct { | |||
| lglw_bool_t b_running; | |||
| lglw_timer_fxn_t cbk; | |||
| } timer; | |||
| struct { | |||
| lglw_dropfiles_fxn_t cbk; | |||
| } dropfiles; | |||
| struct { | |||
| lglw_redraw_fxn_t cbk; | |||
| } redraw; | |||
| } lglw_int_t; | |||
| // ---------------------------------------------------------------------------- module fxn fwd decls | |||
| static lglw_bool_t loc_create_hidden_window (lglw_int_t *lglw, int32_t _w, int32_t _h); | |||
| static void loc_destroy_hidden_window(lglw_int_t *lglw); | |||
| static void loc_key_hook(lglw_int_t *lglw); | |||
| static void loc_key_unhook(lglw_int_t *lglw); | |||
| static lglw_bool_t loc_handle_key (lglw_int_t *lglw, lglw_bool_t _bPressed, uint32_t _vkey); | |||
| // static lglw_bool_t loc_touchkeyboard_get_rect (RECT *rect); | |||
| // static lglw_bool_t loc_touchkeyboard_is_visible (void); | |||
| extern lglw_bool_t lglw_int_touchkeyboard_toggle (void); | |||
| static void loc_handle_mouseleave (lglw_int_t *lglw); | |||
| static void loc_handle_mouseenter (lglw_int_t *lglw); | |||
| static void loc_handle_mousebutton (lglw_int_t *lglw, lglw_bool_t _bPressed, uint32_t _button); | |||
| static void loc_handle_mousemotion (lglw_int_t *lglw); | |||
| static void loc_handle_queued_mouse_warp (lglw_int_t *lglw); | |||
| static void loc_touchinput_update (lglw_int_t *lglw); | |||
| static void loc_enable_dropfiles (lglw_int_t *lglw, lglw_bool_t _bEnable); | |||
| // ---------------------------------------------------------------------------- module vars | |||
| static lglw_int_t *khook_lglw = NULL; // currently key-hooked lglw instance (one at a time) | |||
| // ---------------------------------------------------------------------------- lglw_init | |||
| lglw_t lglw_init(int32_t _w, int32_t _h) { | |||
| lglw_int_t *lglw = malloc(sizeof(lglw_int_t)); | |||
| if(NULL != lglw) | |||
| { | |||
| memset(lglw, 0, sizeof(lglw_int_t)); | |||
| if(_w <= 16) | |||
| _w = LGLW_DEFAULT_HIDDEN_W; | |||
| if(_h <= 16) | |||
| _h = LGLW_DEFAULT_HIDDEN_H; | |||
| if(!loc_create_hidden_window(lglw, _w, _h)) | |||
| { | |||
| free(lglw); | |||
| lglw = NULL; | |||
| } | |||
| } | |||
| return lglw; | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_exit | |||
| void lglw_exit(lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| loc_destroy_hidden_window(lglw); | |||
| free(lglw); | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_userdata_set | |||
| void lglw_userdata_set(lglw_t _lglw, void *_userData) { | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| lglw->user_data = _userData; | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_userdata_get | |||
| void *lglw_userdata_get(lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| return lglw->user_data; | |||
| } | |||
| return NULL; | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_create_hidden_window | |||
| static lglw_bool_t loc_create_hidden_window(lglw_int_t *lglw, int32_t _w, int32_t _h) { | |||
| // (todo) implement me | |||
| lglw->hidden.size.x = _w; | |||
| lglw->hidden.size.y = _h; | |||
| return LGLW_FALSE; | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_destroy_hidden_window | |||
| static void loc_destroy_hidden_window(lglw_int_t *lglw) { | |||
| // (todo) implement me | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_window_open | |||
| lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x, int32_t _y, int32_t _w, int32_t _h) { | |||
| lglw_bool_t r = LGLW_FALSE; | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| if(_w <= 16) | |||
| _w = lglw->hidden.size.x; | |||
| if(_h <= 16) | |||
| _h = lglw->hidden.size.y; | |||
| lglw->win.size.x = _w; | |||
| lglw->win.size.y = _h; | |||
| loc_enable_dropfiles(lglw, (NULL != lglw->dropfiles.cbk)); | |||
| } | |||
| return r; | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_window_resize | |||
| lglw_bool_t lglw_window_resize (lglw_t _lglw, int32_t _w, int32_t _h) { | |||
| lglw_bool_t r = LGLW_FALSE; | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| return r; | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_window_close | |||
| void lglw_window_close (lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| // if(NULL != lglw->win.hwnd) | |||
| { | |||
| lglw_timer_stop(_lglw); | |||
| loc_key_unhook(lglw); | |||
| } | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_window_show | |||
| void lglw_window_show(lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_window_hide | |||
| void lglw_window_hide(lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_window_is_visible | |||
| lglw_bool_t lglw_window_is_visible(lglw_t _lglw) { | |||
| lglw_bool_t r = LGLW_FALSE; | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| return r; | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_window_size_get | |||
| void lglw_window_size_get(lglw_t _lglw, int32_t *_retX, int32_t *_retY) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_redraw | |||
| void lglw_redraw(lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_redraw_callback_set | |||
| void lglw_redraw_callback_set(lglw_t _lglw, lglw_redraw_fxn_t _cbk) { | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| lglw->redraw.cbk = _cbk; | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_glcontext_push | |||
| void lglw_glcontext_push(lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_glcontext_pop | |||
| void lglw_glcontext_pop(lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_swap_buffers | |||
| void lglw_swap_buffers(lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_swap_interval_set | |||
| void lglw_swap_interval_set(lglw_t _lglw, int32_t _ival) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_swap_interval_get | |||
| int32_t lglw_swap_interval_get(lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| int32_t r = 0; | |||
| if(NULL != lglw) | |||
| { | |||
| r = lglw->win.swap_interval; | |||
| } | |||
| return r; | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_key_hook | |||
| static void loc_key_hook(lglw_int_t *lglw) { | |||
| loc_key_unhook(lglw); | |||
| // (todo) implement me | |||
| khook_lglw = lglw; | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_key_unhook | |||
| static void loc_key_unhook(lglw_int_t *lglw) { | |||
| // (todo) implement me | |||
| if(khook_lglw == lglw) | |||
| khook_lglw = NULL; | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_handle_mouseleave | |||
| static void loc_handle_mouseleave(lglw_int_t *lglw) { | |||
| loc_key_unhook(lglw); | |||
| lglw->focus.state &= ~LGLW_FOCUS_MOUSE; | |||
| if(NULL != lglw->focus.cbk) | |||
| { | |||
| lglw->focus.cbk(lglw, lglw->focus.state, LGLW_FOCUS_MOUSE); | |||
| } | |||
| Dprintf("xxx lglw:loc_handle_mouseleave: LEAVE\n"); | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_handle_mouseenter | |||
| static void loc_handle_mouseenter(lglw_int_t *lglw) { | |||
| loc_key_hook(lglw); | |||
| lglw->focus.state |= LGLW_FOCUS_MOUSE; | |||
| if(NULL != lglw->focus.cbk) | |||
| { | |||
| lglw->focus.cbk(lglw, lglw->focus.state, LGLW_FOCUS_MOUSE); | |||
| } | |||
| Dprintf("xxx lglw:loc_handle_mouseenter: LEAVE\n"); | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_handle_mousebutton | |||
| static void loc_handle_mousebutton(lglw_int_t *lglw, lglw_bool_t _bPressed, uint32_t _button) { | |||
| if(_bPressed) | |||
| lglw->mouse.button_state |= _button; | |||
| else | |||
| lglw->mouse.button_state &= ~_button; | |||
| if(NULL != lglw->mouse.cbk) | |||
| { | |||
| lglw->mouse.cbk(lglw, lglw->mouse.p.x, lglw->mouse.p.y, lglw->mouse.button_state, _button); | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_handle_mousemotion | |||
| static void loc_handle_mousemotion(lglw_int_t *lglw) { | |||
| if(NULL != lglw->mouse.cbk) | |||
| { | |||
| lglw->mouse.cbk(lglw, lglw->mouse.p.x, lglw->mouse.p.y, lglw->mouse.button_state, 0u/*changedbuttonstate*/); | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_mouse_callback_set | |||
| void lglw_mouse_callback_set(lglw_t _lglw, lglw_mouse_fxn_t _cbk) { | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| lglw->mouse.cbk = _cbk; | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_mouse_callback_set | |||
| void lglw_focus_callback_set(lglw_t _lglw, lglw_focus_fxn_t _cbk) { | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| lglw->focus.cbk = _cbk; | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_handle_key | |||
| static lglw_bool_t loc_handle_key(lglw_int_t *lglw, lglw_bool_t _bPressed, uint32_t _vkey) { | |||
| lglw_bool_t r = LGLW_FALSE; | |||
| if(NULL != lglw->keyboard.cbk) | |||
| { | |||
| r = lglw->keyboard.cbk(lglw, _vkey, lglw->keyboard.kmod_state, _bPressed); | |||
| } | |||
| return r; | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_keyboard_callback_set | |||
| void lglw_keyboard_callback_set(lglw_t _lglw, lglw_keyboard_fxn_t _cbk) { | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| lglw->keyboard.cbk = _cbk; | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_keyboard_get_modifiers | |||
| uint32_t lglw_keyboard_get_modifiers(lglw_t _lglw) { | |||
| uint32_t r = 0u; | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| r = lglw->keyboard.kmod_state; | |||
| } | |||
| return r; | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_touchkeyboard_show | |||
| void lglw_touchkeyboard_show(lglw_t _lglw, lglw_bool_t _bEnable) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_mouse_get_buttons | |||
| uint32_t lglw_mouse_get_buttons(lglw_t _lglw) { | |||
| uint32_t r = 0u; | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| r = lglw->mouse.button_state; | |||
| } | |||
| return r; | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_mouse_grab | |||
| void lglw_mouse_grab(lglw_t _lglw, uint32_t _grabMode) { | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| // (todo) implement me | |||
| // if(NULL != lglw->win.hwnd) | |||
| { | |||
| if(!lglw->mouse.touch.b_enable) | |||
| { | |||
| if(lglw->mouse.grab.mode != _grabMode) | |||
| { | |||
| lglw_mouse_ungrab(_lglw); | |||
| } | |||
| switch(_grabMode) | |||
| { | |||
| default: | |||
| case LGLW_MOUSE_GRAB_NONE: | |||
| break; | |||
| case LGLW_MOUSE_GRAB_CAPTURE: | |||
| // (todo) implement me | |||
| // (void)SetCapture(lglw->win.hwnd); | |||
| lglw->mouse.grab.mode = _grabMode; | |||
| break; | |||
| case LGLW_MOUSE_GRAB_WARP: | |||
| // (todo) implement me | |||
| // (void)SetCapture(lglw->win.hwnd); | |||
| lglw_mouse_cursor_show(_lglw, LGLW_FALSE); | |||
| lglw->mouse.grab.p = lglw->mouse.p; | |||
| lglw->mouse.grab.last_p = lglw->mouse.p; | |||
| lglw->mouse.grab.mode = _grabMode; | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_mouse_ungrab | |||
| void lglw_mouse_ungrab(lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| // (todo) implement me | |||
| // if(NULL != lglw->win.hwnd) | |||
| { | |||
| if(!lglw->mouse.touch.b_enable) | |||
| { | |||
| switch(lglw->mouse.grab.mode) | |||
| { | |||
| default: | |||
| case LGLW_MOUSE_GRAB_NONE: | |||
| break; | |||
| case LGLW_MOUSE_GRAB_CAPTURE: | |||
| // (todo) implement me | |||
| // (void)ReleaseCapture(); | |||
| lglw->mouse.grab.mode = LGLW_MOUSE_GRAB_NONE; | |||
| break; | |||
| case LGLW_MOUSE_GRAB_WARP: | |||
| // (todo) implement me | |||
| // (void)ReleaseCapture(); | |||
| lglw->mouse.grab.mode = LGLW_MOUSE_GRAB_NONE; | |||
| lglw->mouse.grab.b_queue_warp = LGLW_TRUE; | |||
| lglw_mouse_cursor_show(_lglw, LGLW_TRUE); | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_mouse_warp | |||
| void lglw_mouse_warp(lglw_t _lglw, int32_t _x, int32_t _y) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_handle_queued_mouse_warp | |||
| static void loc_handle_queued_mouse_warp(lglw_int_t *lglw) { | |||
| if(lglw->mouse.grab.b_queue_warp) | |||
| { | |||
| lglw->mouse.grab.b_queue_warp = LGLW_FALSE; | |||
| lglw_mouse_warp(lglw, lglw->mouse.grab.p.x, lglw->mouse.grab.p.y); | |||
| lglw->mouse.grab.last_p = lglw->mouse.grab.p; | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_mouse_cursor_show | |||
| void lglw_mouse_cursor_show (lglw_t _lglw, lglw_bool_t _bShow) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_timer_start | |||
| void lglw_timer_start(lglw_t _lglw, uint32_t _millisec) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_timer_stop | |||
| void lglw_timer_stop(lglw_t _lglw) { | |||
| LGLW(_lglw); | |||
| // (todo) implement me | |||
| if(NULL != lglw) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_timer_callback_set | |||
| void lglw_timer_callback_set(lglw_t _lglw, lglw_timer_fxn_t _cbk) { | |||
| LGLW(_lglw); | |||
| if(NULL != lglw) | |||
| { | |||
| lglw->timer.cbk = _cbk; | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_enable_dropfiles | |||
| static void loc_enable_dropfiles(lglw_int_t *lglw, lglw_bool_t _bEnable) { | |||
| // (todo) implement me | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_dropfiles_callback_set | |||
| void lglw_dropfiles_callback_set(lglw_t _lglw, lglw_dropfiles_fxn_t _cbk) { | |||
| LGLW(_lglw); | |||
| if(NULL != _lglw) | |||
| { | |||
| lglw->dropfiles.cbk = _cbk; | |||
| loc_enable_dropfiles(lglw, (NULL != _cbk)); | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- loc_touchinput_update | |||
| static void loc_touchinput_update(lglw_int_t *lglw) { | |||
| // (todo) implement me | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_touchinput_set | |||
| void lglw_touchinput_set(lglw_t _lglw, lglw_bool_t _bEnable) { | |||
| LGLW(_lglw); | |||
| if(NULL != _lglw) | |||
| { | |||
| lglw->mouse.touch.b_enable = _bEnable; | |||
| lglw->mouse.touch.b_update_queued = LGLW_TRUE; | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_touchinput_get | |||
| lglw_bool_t lglw_touchinput_get(lglw_t _lglw) { | |||
| lglw_bool_t r = LGLW_FALSE; | |||
| LGLW(_lglw); | |||
| if(NULL != _lglw) | |||
| { | |||
| r = lglw->mouse.touch.b_enable; | |||
| } | |||
| return r; | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_clipboard_text_set | |||
| void lglw_clipboard_text_set(lglw_t _lglw, const uint32_t _numChars, const char *_text) { | |||
| LGLW(_lglw); | |||
| (void)_numChars; | |||
| // (todo) implement me | |||
| if(NULL != _text) | |||
| { | |||
| } | |||
| } | |||
| // ---------------------------------------------------------------------------- lglw_clipboard_text_get | |||
| void lglw_clipboard_text_get(lglw_t _lglw, uint32_t _maxChars, uint32_t *_retNumChars, char *_retText) { | |||
| LGLW(_lglw); | |||
| if(NULL != _retNumChars) | |||
| *_retNumChars = 0u; | |||
| if(NULL != _retText) | |||
| *_retText = 0; | |||
| if(_maxChars > 0u) | |||
| { | |||
| if(NULL != _lglw) | |||
| { | |||
| // (todo) implement me | |||
| } | |||
| } | |||
| } | |||