// license:BSD-3-Clause // copyright-holders:Olivier Galibert, R. Belmont //============================================================ // // window.h - SDL window handling // // SDLMAME by Olivier Galibert and R. Belmont // //============================================================ #ifndef MAME_OSD_SDL_WINDOW_H #define MAME_OSD_SDL_WINDOW_H #include "modules/osdwindow.h" #include "osdsync.h" #include #include #include #include #include //============================================================ // TYPE DEFINITIONS //============================================================ class render_target; typedef uintptr_t HashT; #define OSDWORK_CALLBACK(name) void *name(void *param, int threadid) class sdl_window_info : public osd_window_t { public: sdl_window_info( running_machine &a_machine, render_module &renderprovider, int index, const std::shared_ptr &a_monitor, const osd_window_config *config); ~sdl_window_info(); int window_init(); void update() override; void toggle_full_screen(); void modify_prescale(int dir); void resize(int32_t width, int32_t height); void complete_destroy() override; void capture_pointer() override; void release_pointer() override; void show_pointer() override; void hide_pointer() override; void notify_changed(); osd_dim get_size() override; int xy_to_render_target(int x, int y, int *xt, int *yt); 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: struct sdl_pointer_info : public pointer_info { static constexpr bool compare(sdl_pointer_info const &info, SDL_FingerID finger) { return info.finger < finger; } 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; sdl_pointer_info(SDL_FingerID, unsigned i, unsigned d); SDL_FingerID finger; }; // returns 0 on success, else 1 int complete_create(); int wnd_extra_width(); int wnd_extra_height(); 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); void update_cursor_state(); osd_dim pick_best_mode(); void set_fullscreen(int afullscreen) { m_fullscreen = afullscreen; } void measure_fps(int update); std::vector::iterator map_pointer(SDL_FingerID finger, unsigned device); // window handle and info int m_startmaximized; // dimensions osd_dim m_minimum_dim; osd_dim m_windowed_dim; // rendering info osd_event m_rendered_event; // Original display_mode SDL_DisplayMode m_original_mode; int m_extra_flags; // 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 m_ptrdev_info; std::vector m_active_pointers; }; #endif // MAME_OSD_SDL_WINDOW_H