diff options
Diffstat (limited to 'src/osd/sdl/window.h')
-rw-r--r-- | src/osd/sdl/window.h | 133 |
1 files changed, 56 insertions, 77 deletions
diff --git a/src/osd/sdl/window.h b/src/osd/sdl/window.h index d6010e91ed2..49fe452192f 100644 --- a/src/osd/sdl/window.h +++ b/src/osd/sdl/window.h @@ -8,17 +8,18 @@ // //============================================================ -#ifndef __SDLWINDOW__ -#define __SDLWINDOW__ - -#include "osdsdl.h" -#include "video.h" +#ifndef MAME_OSD_SDL_WINDOW_H +#define MAME_OSD_SDL_WINDOW_H #include "modules/osdwindow.h" +#include "osdsync.h" + +#include <SDL2/SDL.h> +#include <chrono> #include <cstdint> #include <memory> -#include <list> +#include <vector> //============================================================ @@ -27,18 +28,18 @@ class render_target; -// forward of SDL_DisplayMode not possible (typedef struct) - define wrapper - -class SDL_DM_Wrapper; - typedef uintptr_t HashT; -#define OSDWORK_CALLBACK(name) void *name(void *param, ATTR_UNUSED int threadid) +#define OSDWORK_CALLBACK(name) void *name(void *param, int threadid) class sdl_window_info : public osd_window_t<SDL_Window*> { public: - sdl_window_info(running_machine &a_machine, int index, std::shared_ptr<osd_monitor_info> a_monitor, + sdl_window_info( + running_machine &a_machine, + render_module &renderprovider, + int index, + const std::shared_ptr<osd_monitor_info> &a_monitor, const osd_window_config *config); ~sdl_window_info(); @@ -49,7 +50,7 @@ public: void toggle_full_screen(); void modify_prescale(int dir); void resize(int32_t width, int32_t height); - void destroy() override; + void complete_destroy() override; void capture_pointer() override; void release_pointer() override; @@ -62,43 +63,36 @@ public: int xy_to_render_target(int x, int y, int *xt, int *yt); - running_machine &machine() const override { return m_machine; } - osd_monitor_info *monitor() const override { return m_monitor.get(); } - int fullscreen() const override { return m_fullscreen; } - - render_target *target() override { return m_target; } - - int prescale() const { return m_prescale; } - - // Pointer to next window - sdl_window_info * m_next; + void mouse_entered(unsigned device); + void mouse_left(unsigned device); + void mouse_down(unsigned device, int x, int y, unsigned button); + void mouse_up(unsigned device, int x, int y, unsigned button); + void mouse_moved(unsigned device, int x, int y); + void mouse_wheel(unsigned device, int y); + void finger_down(SDL_FingerID finger, unsigned device, int x, int y); + void finger_up(SDL_FingerID finger, unsigned device, int x, int y); + void finger_moved(SDL_FingerID finger, unsigned device, int x, int y); private: - // window handle and info - char m_title[256]; - int m_startmaximized; + struct sdl_pointer_info : public pointer_info + { + static constexpr bool compare(sdl_pointer_info const &info, SDL_FingerID finger) { return info.finger < finger; } - // dimensions - osd_dim m_minimum_dim; - osd_dim m_windowed_dim; + sdl_pointer_info(sdl_pointer_info const &) = default; + sdl_pointer_info(sdl_pointer_info &&) = default; + sdl_pointer_info &operator=(sdl_pointer_info const &) = default; + sdl_pointer_info &operator=(sdl_pointer_info &&) = default; - // rendering info - osd_event m_rendered_event; - render_target * m_target; - - // Original display_mode - SDL_DM_Wrapper *m_original_mode; + sdl_pointer_info(SDL_FingerID, unsigned i, unsigned d); - int m_extra_flags; + SDL_FingerID finger; + }; // returns 0 on success, else 1 int complete_create(); - void complete_destroy(); -private: int wnd_extra_width(); int wnd_extra_height(); - void set_starting_view(int index, const char *defview, const char *view); osd_rect constrain_to_aspect_ratio(const osd_rect &rect, int adjustment); osd_dim get_min_bounds(int constrain); osd_dim get_max_bounds(int constrain); @@ -106,50 +100,35 @@ private: osd_dim pick_best_mode(); void set_fullscreen(int afullscreen) { m_fullscreen = afullscreen; } - // Pointer to machine - running_machine & m_machine; - - // monitor info - std::shared_ptr<osd_monitor_info> m_monitor; - int m_fullscreen; - bool m_mouse_captured; - bool m_mouse_hidden; - void measure_fps(int update); -}; - -struct osd_draw_callbacks -{ - osd_renderer *(*create)(osd_window *window); -}; + std::vector<sdl_pointer_info>::iterator map_pointer(SDL_FingerID finger, unsigned device); -//============================================================ -// PROTOTYPES -//============================================================ - -//============================================================ -// PROTOTYPES - drawsdl.c -//============================================================ - -int drawsdl_scale_mode(const char *s); - -//============================================================ -// PROTOTYPES - drawogl.c -//============================================================ + // window handle and info + int m_startmaximized; -int drawogl_init(running_machine &machine, osd_draw_callbacks *callbacks); + // dimensions + osd_dim m_minimum_dim; + osd_dim m_windowed_dim; -//============================================================ -// PROTOTYPES - draw13.c -//============================================================ + // rendering info + osd_event m_rendered_event; -int drawsdl2_init(running_machine &machine, osd_draw_callbacks *callbacks); + // Original display_mode + SDL_DisplayMode m_original_mode; -//============================================================ -// PROTOTYPES - drawbgfx.c -//============================================================ + int m_extra_flags; -int drawbgfx_init(running_machine &machine, osd_draw_callbacks *callbacks); + // monitor info + bool m_mouse_captured; + bool m_mouse_hidden; + + // info on currently active pointers - 64 pointers ought to be enough for anyone + uint64_t m_pointer_mask; + unsigned m_next_pointer; + bool m_mouse_inside; + std::vector<pointer_dev_info> m_ptrdev_info; + std::vector<sdl_pointer_info> m_active_pointers; +}; -#endif /* __SDLWINDOW__ */ +#endif // MAME_OSD_SDL_WINDOW_H |