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_window_is_valid(mir_window->
window)) {
43 const char* error = MIR_mir_window_get_error_message(mir_window->
window);
44 return SDL_SetError(
"Failed to create a mir surface: %s", error);
53 unsigned int pf_size = 32;
54 unsigned int valid_formats;
57 MirPixelFormat
formats[pf_size];
59 pf_size, &valid_formats);
61 for (
f = 0;
f < valid_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;
81 MirPixelFormat pixel_format;
82 MirBufferUsage buffer_usage;
91 window->driverdata = mir_window;
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;
124 MIR_mir_window_spec_set_buffer_usage(
spec, buffer_usage);
125 MIR_mir_window_spec_set_name(
spec,
"Mir surface");
126 MIR_mir_window_spec_set_pixel_format(
spec, pixel_format);
131 mir_window->
window = MIR_mir_create_window_sync(
spec);
134 MIR_mir_window_spec_release(
spec);
136 if (!MIR_mir_window_is_valid(mir_window->
window)) {
137 return SDL_SetError(
"Failed to create a mir surface: %s",
138 MIR_mir_window_get_error_message(mir_window->
window));
144 MIR_mir_window_get_buffer_stream(mir_window->
window));
149 return SDL_SetError(
"Failed to create a window surface %p",
150 _this->egl_data->egl_display);
170 MIR_mir_window_release_sync(mir_window->
window);
200 if (IsMirWindowValid(mir_window)) {
202 MIR_mir_window_spec_set_state(
spec, window_state);
204 MIR_mir_window_apply_spec(mir_window->
window,
spec);
205 MIR_mir_window_spec_release(
spec);
214 if (IsMirWindowValid(
window->driverdata)) {
215 MirWindowState
state;
218 state = mir_window_state_fullscreen;
221 state = mir_window_state_restored;
258 if (IsMirWindowValid(mir_window)) {
260 MIR_mir_window_spec_set_width (
spec,
window->w);
261 MIR_mir_window_spec_set_height(
spec,
window->h);
263 MIR_mir_window_apply_spec(mir_window->
window,
spec);
273 if (IsMirWindowValid(mir_window)) {
275 MIR_mir_window_spec_set_min_width (
spec,
window->min_w);
276 MIR_mir_window_spec_set_min_height(
spec,
window->min_h);
278 MIR_mir_window_apply_spec(mir_window->
window,
spec);
288 if (IsMirWindowValid(mir_window)) {
290 MIR_mir_window_spec_set_max_width (
spec,
window->max_w);
291 MIR_mir_window_spec_set_max_height(
spec,
window->max_h);
293 MIR_mir_window_apply_spec(mir_window->
window,
spec);
305 if (IsMirWindowValid(mir_window) < 0)
309 MIR_mir_window_spec_set_name(
spec, title);
311 MIR_mir_window_apply_spec(mir_window->
window,
spec);
312 MIR_mir_window_spec_release(
spec);
320 MirPointerConfinementState confined = mir_pointer_unconfined;
324 confined = mir_pointer_confined_to_window;
327 MIR_mir_window_spec_set_pointer_confinement(
spec, confined);
329 MIR_mir_window_apply_spec(mir_window->
window,
spec);
330 MIR_mir_window_spec_release(
spec);
340 if (MIR_mir_output_is_gamma_supported(
output) == mir_output_gamma_supported) {
341 MIR_mir_output_set_gamma(
output,
342 ramp + ramp_size * 0,
343 ramp + ramp_size * 1,
344 ramp + ramp_size * 2,
358 if (MIR_mir_output_is_gamma_supported(
output) == mir_output_gamma_supported) {
359 if (MIR_mir_output_get_gamma_size(
output) == ramp_size) {
360 MIR_mir_output_get_gamma(
output,
361 ramp + ramp_size * 0,
362 ramp + ramp_size * 1,
363 ramp + ramp_size * 2,