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];
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;
81 MirPixelFormat pixel_format;
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_create_normal_window_spec(mir_data->
connection,
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);
198 UpdateMirWindowState(
MIR_Data* mir_data,
MIR_Window* mir_window, MirWindowState window_state)
200 if (IsMirWindowValid(mir_window)) {
201 MirWindowSpec* spec = MIR_mir_create_window_spec(mir_data->
connection);
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);
215 MirWindowState
state;
218 state = mir_window_state_fullscreen;
221 state = mir_window_state_restored;
258 if (IsMirWindowValid(mir_window)) {
259 MirWindowSpec* spec = MIR_mir_create_window_spec(mir_data->
connection);
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)) {
274 MirWindowSpec* spec = MIR_mir_create_window_spec(mir_data->
connection);
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)) {
289 MirWindowSpec* spec = MIR_mir_create_window_spec(mir_data->
connection);
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);
302 char const* title = window->
title ? window->
title :
"";
305 if (IsMirWindowValid(mir_window) < 0)
308 spec = MIR_mir_create_window_spec(mir_data->
connection);
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;
326 spec = MIR_mir_create_window_spec(mir_data->
connection);
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,
struct SDL_SysWMinfo::@18::@21 mir
#define SDL_MINOR_VERSION
void MIR_MinimizeWindow(_THIS, SDL_Window *window)
void SDL_SetKeyboardFocus(SDL_Window *window)
void MIR_HideWindow(_THIS, SDL_Window *window)
int MIR_GetWindowGammaRamp(_THIS, SDL_Window *window, Uint16 *ramp)
#define SDL_MAJOR_VERSION
int MIR_CreateWindow(_THIS, SDL_Window *window)
MirPixelFormat pixel_format
void MIR_DestroyWindow(_THIS, SDL_Window *window)
#define SDL_WINDOWPOS_UNDEFINED
void MIR_SetWindowGrab(_THIS, SDL_Window *window, SDL_bool grabbed)
void MIR_HandleEvent(MirWindow *, MirEvent const *ev, void *context)
static SDL_VideoDevice * _this
MirConnection * connection
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)
EGLSurface EGLNativeWindowType * window
The type used to identify a window.
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_SetWindowMinimumSize(_THIS, SDL_Window *window)
void MIR_SetWindowSize(_THIS, SDL_Window *window)