26 #include "../../SDL_internal.h" 28 #if SDL_VIDEO_DRIVER_MIR 30 #include "../SDL_egl_c.h" 31 #include "../SDL_sysvideo.h" 41 if (!MIR_mir_surface_is_valid(mir_window->
surface)) {
42 const char* error = MIR_mir_surface_get_error_message(mir_window->
surface);
43 return SDL_SetError(
"Failed to created a mir surface: %s", error);
50 FindValidPixelFormat(
MIR_Data* mir_data)
52 unsigned int pf_size = 32;
53 unsigned int valid_formats;
56 MirPixelFormat
formats[pf_size];
57 MIR_mir_connection_get_available_surface_formats(mir_data->
connection, formats,
58 pf_size, &valid_formats);
60 for (f = 0; f < valid_formats; f++) {
61 MirPixelFormat cur_pf = formats[
f];
63 if (cur_pf == mir_pixel_format_abgr_8888 ||
64 cur_pf == mir_pixel_format_xbgr_8888 ||
65 cur_pf == mir_pixel_format_argb_8888 ||
66 cur_pf == mir_pixel_format_xrgb_8888) {
72 return mir_pixel_format_invalid;
81 MirSurfaceParameters surfaceparm =
86 .pixel_format = mir_pixel_format_invalid,
87 .buffer_usage = mir_buffer_usage_hardware,
88 .output_id = mir_display_output_id_invalid
91 MirEventDelegate delegate = {
101 window->driverdata = mir_window;
104 surfaceparm.buffer_usage = mir_buffer_usage_software;
115 surfaceparm.pixel_format = FindValidPixelFormat(mir_data);
116 if (surfaceparm.pixel_format == mir_pixel_format_invalid) {
117 return SDL_SetError(
"Failed to find a valid pixel format.");
120 mir_window->
surface = MIR_mir_connection_create_surface_sync(mir_data->
connection, &surfaceparm);
121 if (!MIR_mir_surface_is_valid(mir_window->
surface)) {
122 const char* error = MIR_mir_surface_get_error_message(mir_window->
surface);
123 return SDL_SetError(
"Failed to created a mir surface: %s", error);
127 EGLNativeWindowType egl_native_window =
128 (EGLNativeWindowType)MIR_mir_surface_get_egl_native_window(mir_window->
surface);
133 return SDL_SetError(
"Failed to created a window surface %p",
134 _this->egl_data->egl_display);
141 MIR_mir_surface_set_event_handler(mir_window->
surface, &delegate);
154 MIR_mir_surface_release_sync(mir_window->
surface);
185 if (IsSurfaceValid(mir_window) < 0)
189 MIR_mir_surface_set_state(mir_window->
surface, mir_surface_state_fullscreen);
191 MIR_mir_surface_set_state(mir_window->
surface, mir_surface_state_restored);
200 if (IsSurfaceValid(mir_window) < 0)
203 MIR_mir_surface_set_state(mir_window->
surface, mir_surface_state_maximized);
211 if (IsSurfaceValid(mir_window) < 0)
214 MIR_mir_surface_set_state(mir_window->
surface, mir_surface_state_minimized);
222 if (IsSurfaceValid(mir_window) < 0)
225 MIR_mir_surface_set_state(mir_window->
surface, mir_surface_state_restored);
#define SDL_MINOR_VERSION
void MIR_MinimizeWindow(_THIS, SDL_Window *window)
struct wl_surface * surface
static SDL_PixelFormat * formats
#define SDL_MAJOR_VERSION
int MIR_CreateWindow(_THIS, SDL_Window *window)
void MIR_DestroyWindow(_THIS, SDL_Window *window)
#define SDL_WINDOWPOS_UNDEFINED
static SDL_VideoDevice * _this
MirConnection * connection
void * SDL_calloc(size_t nmemb, size_t size)
void MIR_RestoreWindow(_THIS, SDL_Window *window)
void MIR_SetWindowFullscreen(_THIS, SDL_Window *window, SDL_VideoDisplay *display, SDL_bool fullscreen)
void MIR_MaximizeWindow(_THIS, SDL_Window *window)
void MIR_HandleInput(MirSurface *surface, MirEvent const *ev, void *context)
#define SDL_OutOfMemory()
The type used to identify a window.
union SDL_SysWMinfo::@18 info
SDL_bool MIR_GetWindowWMInfo(_THIS, SDL_Window *window, SDL_SysWMinfo *info)