diff --git a/lime/system/Display.hx b/lime/system/Display.hx index 8637fa93a..4a97108e0 100644 --- a/lime/system/Display.hx +++ b/lime/system/Display.hx @@ -95,7 +95,8 @@ class Display { name = lime_display_get_name(id); - mode = lime_display_get_current_display_mode(id); + var obj = lime_display_get_current_display_mode(id); + mode = new DisplayMode(obj.width, obj.height, obj.refreshRate, obj.format); resolution = new ConstVector2(mode.width, mode.height); @@ -104,7 +105,8 @@ class Display { for (i in 0...numModes) { - modes.push(lime_display_get_display_mode(id, i)); + obj = lime_display_get_display_mode(id, i); + modes.push(new DisplayMode(obj.width, obj.height, obj.refreshRate, obj.format)); } } @@ -133,8 +135,6 @@ class Display { private static var lime_display_get_name = function(i:Int) { return "fake"; }; - */ - private static var lime_display_get_num_display_modes = function(i:Int) { return 1; }; @@ -144,18 +144,16 @@ class Display { private static var lime_display_get_current_display_mode = function(display:Int):DisplayMode { return new DisplayMode(1024, 768, 60, 0); }; + */ #end #if (cpp || neko || nodejs) private static var lime_display_get_num_devices = System.load("lime", "lime_display_get_num_devices", 0); private static var lime_display_get_name = System.load ("lime", "lime_display_get_name", 1); - - /* private static var lime_display_get_num_display_modes = System.load ("lime", "lime_display_get_num_display_modes", 1); private static var lime_display_get_display_mode = System.load ("lime", "lime_display_get_display_mode", 2); private static var lime_display_get_current_display_mode = System.load ("lime", "lime_display_get_current_display_mode", 1); - */ #end } diff --git a/project/include/system/Display.h b/project/include/system/Display.h index 65d81ecf5..3d7255877 100644 --- a/project/include/system/Display.h +++ b/project/include/system/Display.h @@ -2,6 +2,7 @@ #define LIME_SYSTEM_DISPLAY_H #include +#include namespace lime { @@ -10,10 +11,11 @@ namespace lime { public: + value Display::GetCurrentDisplayMode (int displayIndex); + value Display::GetDisplayMode (int displayIndex, int modeIndex); static int GetNumDevices (); static const char* GetDisplayName (int displayIndex); - - }; + static int GetNumDisplayModes (int displayIndex); } diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index f9fd0d1e2..d9101fefc 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -391,6 +391,18 @@ namespace lime { } + value lime_display_get_current_display_mode (value displayIndex) { + + return Display::GetCurrentDisplayMode(displayIndex); + + } + + value lime_display_get_display_mode (value displayIndex, value modeIndex) { + + return Display::GetCurrentDisplayMode(displayIndex, modeIndex); + + } + value lime_display_get_name (value displayIndex) { return alloc_string (Display::GetDisplayName (val_int (displayIndex))); @@ -403,6 +415,12 @@ namespace lime { } + value lime_display_get_num_display_modes (value displayIndex) { + + return alloc_int (Display::GetNumDisplayModes(val_int (displayIndex)); + + } + value lime_gamepad_add_mappings (value mappings) { int length = val_array_size (mappings); @@ -1184,8 +1202,11 @@ namespace lime { DEFINE_PRIM (lime_font_render_glyph, 3); DEFINE_PRIM (lime_font_render_glyphs, 3); DEFINE_PRIM (lime_font_set_size, 2); + DEFINE_PRIM (lime_display_get_current_display_mode, 1); + DEFINE_PRIM (lime_display_get_display_mode, 2); DEFINE_PRIM (lime_display_get_name, 1); DEFINE_PRIM (lime_display_get_num_devices, 0); + DEFINE_PRIM (lime_display_get_num_display_modes, 1); DEFINE_PRIM (lime_gamepad_add_mappings, 1); DEFINE_PRIM (lime_gamepad_event_manager_register, 2); DEFINE_PRIM (lime_gamepad_get_device_guid, 1); diff --git a/project/src/backend/sdl/SDLDisplay.cpp b/project/src/backend/sdl/SDLDisplay.cpp index 1618e3290..39e1964a3 100644 --- a/project/src/backend/sdl/SDLDisplay.cpp +++ b/project/src/backend/sdl/SDLDisplay.cpp @@ -4,6 +4,33 @@ namespace lime { + value Display::GetCurrentDisplayMode (int displayIndex) { + + SDL_DisplayMode mode = { SDL_PIXELFORMAT_UNKNOWN, 0, 0, 0, 0 }; + SDL_GetCurrentDisplayMode(displayIndex, mode); + + value mValue = alloc_empty_object (); + alloc_field (mValue, val_id("w"), alloc_int(mode.w)); + alloc_field (mValue, val_id("h"), alloc_int(mode.h)); + alloc_field (mValue, val_id("refresh_rate"), alloc_int(mode.refresh_rate)); + alloc_field (mValue, val_id("format"), alloc_int(mode.format)); + return mValue; + } + + value Display::GetDisplayMode (int displayIndex, int modeIndex) { + + SDL_DisplayMode mode = { SDL_PIXELFORMAT_UNKNOWN, 0, 0, 0, 0 }; + SDL_GetDisplayMode(displayIndex, modeIndex, mode); + + value mValue = alloc_empty_object (); + alloc_field (mValue, val_id("w"), alloc_int(mode.w)); + alloc_field (mValue, val_id("h"), alloc_int(mode.h)); + alloc_field (mValue, val_id("refresh_rate"), alloc_int(mode.refresh_rate)); + alloc_field (mValue, val_id("format"), alloc_int(mode.format)); + return mValue; + + } + int Display::GetNumDevices() { return SDL_GetNumVideoDisplays(); @@ -16,4 +43,10 @@ namespace lime { } + int Display::GetNumDisplayModes (int displayIndex) { + + return SDL_GetNumDisplayModes(displayIndex); + + } + } \ No newline at end of file