26 #include "../../SDL_internal.h"
28 #if SDL_VIDEO_DRIVER_MIR
44 #define MIR_DRIVER_NAME "mir"
46 static const Uint32 mir_pixel_format_to_sdl_format[] = {
62 return mir_pixel_format_to_sdl_format[
format];
109 if (!MIR_mir_connection_is_valid(connection)) {
111 MIR_mir_connection_get_error_message(connection));
116 MIR_mir_connection_release(connection);
133 MIR_PumpEvents(
_THIS)
138 MIR_CreateDevice(
int device_index)
170 device->
free = MIR_DeleteDevice;
248 MIR_DRIVER_NAME,
"SDL Mir video driver",
249 MIR_Available, MIR_CreateDevice
253 MIR_ConvertModeToSDLMode(MirOutputMode
const*
mode, MirPixelFormat
format)
257 .w = MIR_mir_output_mode_get_width(mode),
258 .h = MIR_mir_output_mode_get_height(mode),
259 .refresh_rate = MIR_mir_output_mode_get_refresh_rate(mode),
274 MIR_InitDisplayFromOutput(
_THIS, MirOutput*
output)
279 MirPixelFormat
format = MIR_mir_output_get_current_pixel_format(output);
280 int num_modes = MIR_mir_output_get_num_modes(output);
281 SDL_DisplayMode current_mode = MIR_ConvertModeToSDLMode(MIR_mir_output_get_current_mode(output), format);
286 display.
name = (
char*)MIR_mir_output_type_name(MIR_mir_output_get_type(output));
288 for (m = 0; m < num_modes; m++) {
289 MirOutputMode
const*
mode = MIR_mir_output_get_mode(output, m);
290 MIR_AddModeToDisplay(&display, mode, format);
301 MIR_InitDisplays(
_THIS)
304 int num_outputs = MIR_mir_display_config_get_num_outputs(mir_data->
display_config);
307 for (d = 0; d < num_outputs; d++) {
308 MirOutput* output = MIR_mir_display_config_get_mutable_output(mir_data->
display_config, d);
310 MirOutputConnectionState
state = MIR_mir_output_get_connection_state(output);
312 if (enabled && state == mir_output_connection_state_connected) {
313 MIR_InitDisplayFromOutput(
_this, output);
328 if (!MIR_mir_connection_is_valid(mir_data->
connection)) {
329 return SDL_SetError(
"Failed to connect to the mir server: %s",
330 MIR_mir_connection_get_error_message(mir_data->
connection));
335 MIR_InitDisplays(
_this);
342 MIR_CleanUpDisplayConfig(
_THIS)
360 MIR_CleanUpDisplayConfig(
_this);
367 MIR_mir_connection_release(mir_data->
connection);
376 MirOutput
const* output = display->
driverdata;
378 rect->
x = MIR_mir_output_get_position_x(output);
379 rect->
y = MIR_mir_output_get_position_y(output);
396 int num_modes = MIR_mir_output_get_num_modes(output);
398 MIR_mir_output_get_current_pixel_format(output));
400 for (m = 0; m < num_modes; m++) {
401 MirOutputMode
const* mir_mode = MIR_mir_output_get_mode(output, m);
402 int width = MIR_mir_output_mode_get_width(mir_mode);
403 int height = MIR_mir_output_mode_get_height(mir_mode);
404 double refresh_rate = MIR_mir_output_mode_get_refresh_rate(mir_mode);
406 if (mode->
format == sdl_format &&
412 MIR_mir_output_set_current_mode(output, mir_mode);