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);
55 MirBufferUsage buffer_usage;
75 pixel_format = MIR_mir_connection_get_egl_pixel_format(mir_data->
connection,
76 _this->egl_data->egl_display,
77 _this->egl_data->egl_config);
80 if (pixel_format == mir_pixel_format_invalid) {
81 return SDL_SetError(
"Failed to find a valid pixel format.");
84 buffer_usage = mir_buffer_usage_hardware;
86 buffer_usage = mir_buffer_usage_software;
88 spec = MIR_mir_connection_create_spec_for_normal_surface(mir_data->
connection,
93 MIR_mir_surface_spec_set_buffer_usage(spec, buffer_usage);
94 MIR_mir_surface_spec_set_name(spec,
"Mir surface");
96 mir_window->
surface = MIR_mir_surface_create_sync(spec);
99 MIR_mir_surface_spec_release(spec);
101 if (!MIR_mir_surface_is_valid(mir_window->
surface)) {
102 const char* error = MIR_mir_surface_get_error_message(mir_window->
surface);
103 return SDL_SetError(
"Failed to created a mir surface: %s", error);
107 EGLNativeWindowType egl_native_window =
108 (EGLNativeWindowType)MIR_mir_buffer_stream_get_egl_native_window(
109 MIR_mir_surface_get_buffer_stream(mir_window->
surface));
114 return SDL_SetError(
"Failed to created a window surface %p",
115 _this->egl_data->egl_display);
135 MIR_mir_surface_release_sync(mir_window->
surface);
168 MirSurfaceSpec*
spec;
169 MirSurfaceState
state;
171 if (IsSurfaceValid(mir_window) < 0)
175 state = mir_surface_state_fullscreen;
177 state = mir_surface_state_restored;
180 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
181 MIR_mir_surface_spec_set_state(spec, state);
183 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
184 MIR_mir_surface_spec_release(spec);
192 MirSurfaceSpec*
spec;
194 if (IsSurfaceValid(mir_window) < 0)
197 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
198 MIR_mir_surface_spec_set_state(spec, mir_surface_state_maximized);
200 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
201 MIR_mir_surface_spec_release(spec);
209 MirSurfaceSpec*
spec;
211 if (IsSurfaceValid(mir_window) < 0)
214 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
215 MIR_mir_surface_spec_set_state(spec, mir_surface_state_minimized);
217 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
218 MIR_mir_surface_spec_release(spec);
226 MirSurfaceSpec*
spec;
228 if (IsSurfaceValid(mir_window) < 0)
231 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
232 MIR_mir_surface_spec_set_state(spec, mir_surface_state_restored);
234 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
235 MIR_mir_surface_spec_release(spec);
243 MirSurfaceSpec*
spec;
245 if (IsSurfaceValid(mir_window) < 0)
248 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
249 MIR_mir_surface_spec_set_state(spec, mir_surface_state_hidden);
251 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
252 MIR_mir_surface_spec_release(spec);
260 MirSurfaceSpec*
spec;
262 if (IsSurfaceValid(mir_window) < 0)
266 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
267 MIR_mir_surface_spec_set_width (spec, window->
w);
268 MIR_mir_surface_spec_set_height(spec, window->
h);
270 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
271 MIR_mir_surface_spec_release(spec);
279 MirSurfaceSpec*
spec;
281 if (IsSurfaceValid(mir_window) < 0)
284 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
285 MIR_mir_surface_spec_set_min_width (spec, window->
min_w);
286 MIR_mir_surface_spec_set_min_height(spec, window->
min_h);
288 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
289 MIR_mir_surface_spec_release(spec);
297 MirSurfaceSpec*
spec;
299 if (IsSurfaceValid(mir_window) < 0)
302 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
303 MIR_mir_surface_spec_set_max_width (spec, window->
max_w);
304 MIR_mir_surface_spec_set_max_height(spec, window->
max_h);
306 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
307 MIR_mir_surface_spec_release(spec);
315 char const* title = window->
title ? window->
title :
"";
316 MirSurfaceSpec*
spec;
318 if (IsSurfaceValid(mir_window) < 0)
321 spec = MIR_mir_connection_create_spec_for_changes(mir_data->
connection);
322 MIR_mir_surface_spec_set_name(spec, title);
324 MIR_mir_surface_apply_spec(mir_window->
surface, spec);
325 MIR_mir_surface_spec_release(spec);
struct SDL_SysWMinfo::@18::@21 mir
#define SDL_MINOR_VERSION
void MIR_MinimizeWindow(_THIS, SDL_Window *window)
void MIR_HideWindow(_THIS, SDL_Window *window)
#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
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)
void MIR_SetWindowTitle(_THIS, SDL_Window *window)
#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)
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)