26 #include "../../SDL_internal.h" 28 #if SDL_VIDEO_DRIVER_MIR 30 #include "../SDL_egl_c.h" 31 #include "../SDL_sysvideo.h" 32 #include "../../events/SDL_keyboard_c.h" 42 if (!MIR_mir_surface_is_valid(mir_window->
surface)) {
43 const char* error = MIR_mir_surface_get_error_message(mir_window->
surface);
44 return SDL_SetError(
"Failed to created a mir surface: %s", error);
53 unsigned int pf_size = 32;
54 unsigned int valid_formats;
57 MirPixelFormat
formats[pf_size];
58 MIR_mir_connection_get_available_surface_formats(mir_data->
connection, formats,
59 pf_size, &valid_formats);
61 for (f = 0; f < valid_formats; f++) {
62 MirPixelFormat cur_pf = formats[
f];
64 if (cur_pf == mir_pixel_format_abgr_8888 ||
65 cur_pf == mir_pixel_format_xbgr_8888 ||
66 cur_pf == mir_pixel_format_argb_8888 ||
67 cur_pf == mir_pixel_format_xrgb_8888) {
73 return mir_pixel_format_invalid;
82 MirBufferUsage buffer_usage;
103 pixel_format = MIR_mir_connection_get_egl_pixel_format(mir_data->
connection,
104 _this->egl_data->egl_display,
105 _this->egl_data->egl_config);
108 pixel_format = FindValidPixelFormat(mir_data);
112 if (pixel_format == mir_pixel_format_invalid) {
113 return SDL_SetError(
"Failed to find a valid pixel format.");
116 buffer_usage = mir_buffer_usage_hardware;
118 buffer_usage = mir_buffer_usage_software;
120 spec = MIR_mir_connection_create_spec_for_normal_surface(mir_data->
connection,
125 MIR_mir_surface_spec_set_buffer_usage(spec, buffer_usage);
126 MIR_mir_surface_spec_set_name(spec,
"Mir surface");
131 mir_window->
surface = MIR_mir_surface_create_sync(spec);
134 MIR_mir_surface_spec_release(spec);
136 if (!MIR_mir_surface_is_valid(mir_window->
surface)) {
137 return SDL_SetError(
"Failed to created a mir surface: %s",
138 MIR_mir_surface_get_error_message(mir_window->
surface));
142 EGLNativeWindowType egl_native_window =
143 (EGLNativeWindowType)MIR_mir_buffer_stream_get_egl_native_window(
144 MIR_mir_surface_get_buffer_stream(mir_window->
surface));
149 return SDL_SetError(
"Failed to created a window surface %p",
150 _this->egl_data->egl_display);
170 MIR_mir_surface_release_sync(mir_window->
surface);
203 MirSurfaceSpec*
spec;
204 MirSurfaceState
state;
206 if (IsSurfaceValid(mir_window) < 0)
210 state = mir_surface_state_fullscreen;
212 state = mir_surface_state_restored;
215 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
216 MIR_mir_surface_spec_set_state(spec, state);
218 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
219 MIR_mir_surface_spec_release(spec);
227 MirSurfaceSpec*
spec;
229 if (IsSurfaceValid(mir_window) < 0)
232 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
233 MIR_mir_surface_spec_set_state(spec, mir_surface_state_maximized);
235 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
236 MIR_mir_surface_spec_release(spec);
244 MirSurfaceSpec*
spec;
246 if (IsSurfaceValid(mir_window) < 0)
249 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
250 MIR_mir_surface_spec_set_state(spec, mir_surface_state_minimized);
252 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
253 MIR_mir_surface_spec_release(spec);
261 MirSurfaceSpec*
spec;
263 if (IsSurfaceValid(mir_window) < 0)
266 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
267 MIR_mir_surface_spec_set_state(spec, mir_surface_state_restored);
269 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
270 MIR_mir_surface_spec_release(spec);
278 MirSurfaceSpec*
spec;
280 if (IsSurfaceValid(mir_window) < 0)
283 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
284 MIR_mir_surface_spec_set_state(spec, mir_surface_state_hidden);
286 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
287 MIR_mir_surface_spec_release(spec);
295 MirSurfaceSpec*
spec;
297 if (IsSurfaceValid(mir_window) < 0)
301 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
302 MIR_mir_surface_spec_set_width (spec, window->
w);
303 MIR_mir_surface_spec_set_height(spec, window->
h);
305 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
306 MIR_mir_surface_spec_release(spec);
314 MirSurfaceSpec*
spec;
316 if (IsSurfaceValid(mir_window) < 0)
319 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
320 MIR_mir_surface_spec_set_min_width (spec, window->
min_w);
321 MIR_mir_surface_spec_set_min_height(spec, window->
min_h);
323 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
324 MIR_mir_surface_spec_release(spec);
332 MirSurfaceSpec*
spec;
334 if (IsSurfaceValid(mir_window) < 0)
337 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
338 MIR_mir_surface_spec_set_max_width (spec, window->
max_w);
339 MIR_mir_surface_spec_set_max_height(spec, window->
max_h);
341 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
342 MIR_mir_surface_spec_release(spec);
350 char const* title = window->
title ? window->
title :
"";
351 MirSurfaceSpec*
spec;
353 if (IsSurfaceValid(mir_window) < 0)
356 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
357 MIR_mir_surface_spec_set_name(spec, title);
359 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
360 MIR_mir_surface_spec_release(spec);
368 MirPointerConfinementState confined = mir_pointer_unconfined;
369 MirSurfaceSpec*
spec;
372 confined = mir_pointer_confined_to_surface;
374 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
375 MIR_mir_surface_spec_set_pointer_confinement(spec, confined);
377 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
378 MIR_mir_surface_spec_release(spec);
388 if (MIR_mir_output_is_gamma_supported(output) == mir_output_gamma_supported) {
389 MIR_mir_output_set_gamma(output,
390 ramp + ramp_size * 0,
391 ramp + ramp_size * 1,
392 ramp + ramp_size * 2,
406 if (MIR_mir_output_is_gamma_supported(output) == mir_output_gamma_supported) {
407 if (MIR_mir_output_get_gamma_size(output) == ramp_size) {
408 MIR_mir_output_get_gamma(output,
409 ramp + ramp_size * 0,
410 ramp + ramp_size * 1,
411 ramp + ramp_size * 2,
#define SDL_MINOR_VERSION
void MIR_MinimizeWindow(_THIS, SDL_Window *window)
void SDL_SetKeyboardFocus(SDL_Window *window)
void MIR_HideWindow(_THIS, SDL_Window *window)
struct wl_surface * surface
static SDL_PixelFormat * formats
int MIR_GetWindowGammaRamp(_THIS, SDL_Window *window, Uint16 *ramp)
#define SDL_MAJOR_VERSION
int MIR_CreateWindow(_THIS, SDL_Window *window)
static SDL_Window * window
MirPixelFormat pixel_format
void MIR_DestroyWindow(_THIS, SDL_Window *window)
#define SDL_WINDOWPOS_UNDEFINED
uint32_t Uint32
An unsigned 32-bit integer type.
void MIR_SetWindowGrab(_THIS, SDL_Window *window, SDL_bool grabbed)
static SDL_VideoDevice * _this
MirConnection * connection
void * SDL_calloc(size_t nmemb, size_t size)
MIR_Window * current_window
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)
int MIR_SetWindowGammaRamp(_THIS, SDL_Window *window, Uint16 const *ramp)
void MIR_SetWindowTitle(_THIS, SDL_Window *window)
#define SDL_OutOfMemory()
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
The type used to identify a window.
uint16_t Uint16
An unsigned 16-bit integer type.
union SDL_SysWMinfo::@18 info
SDL_bool MIR_GetWindowWMInfo(_THIS, SDL_Window *window, SDL_SysWMinfo *info)
void MIR_SetWindowMaximumSize(_THIS, SDL_Window *window)
void MIR_HandleEvent(MirSurface *surface, MirEvent const *ev, void *context)
void MIR_SetWindowMinimumSize(_THIS, SDL_Window *window)
void MIR_SetWindowSize(_THIS, SDL_Window *window)