Added Display.hx stub to lime.system
This commit is contained in:
190
lime/system/Display.hx
Normal file
190
lime/system/Display.hx
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
package lime.system;
|
||||||
|
import lime.math.Vector2;
|
||||||
|
import lime.system.Display;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ...
|
||||||
|
* @author larsiusprime
|
||||||
|
*/
|
||||||
|
class Display {
|
||||||
|
|
||||||
|
/********STATIC*********/
|
||||||
|
|
||||||
|
public static var devices = new Map<Int, Display> ();
|
||||||
|
public static var numDisplays(get, null):Int;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sync with the OS to get the current display device information
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static function init():Void {
|
||||||
|
|
||||||
|
for (i in 0...numDisplays) {
|
||||||
|
|
||||||
|
var d = new Display(i);
|
||||||
|
d.sync();
|
||||||
|
devices.set(i, d);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the total number of connected displays
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static function get_numDisplays():Int {
|
||||||
|
|
||||||
|
return lime_display_get_num_video_displays();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the display device with the given id
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static function get(id:Int):Display {
|
||||||
|
|
||||||
|
if (devices.exists(id)) {
|
||||||
|
|
||||||
|
return devices.get(id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********INSTANCE**********/
|
||||||
|
|
||||||
|
|
||||||
|
/**Which number is assigned to the display device by the OS**/
|
||||||
|
public var id (default, null):Int;
|
||||||
|
|
||||||
|
/**The name of the device, such as "Samsung SyncMaster P2350", "iPhone 6", "Occulus Rift DK2", etc.**/
|
||||||
|
public var name (default, null):String;
|
||||||
|
|
||||||
|
/**Number of horizontal and vertical pixels currently being displayed**/
|
||||||
|
public var resolution(default, null):ConstVector2;
|
||||||
|
|
||||||
|
/**Horizontal resolution / Vertical resolution**/
|
||||||
|
public var aspectRatio(get, null):Float;
|
||||||
|
|
||||||
|
/**The current display mode**/
|
||||||
|
public var mode(default, null):DisplayMode;
|
||||||
|
|
||||||
|
public var modes(default, null):Array<DisplayMode>;
|
||||||
|
|
||||||
|
private function new(id:Int) {
|
||||||
|
|
||||||
|
this.id = id;
|
||||||
|
sync();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates this object's data with the latest information from the OS about the device
|
||||||
|
*/
|
||||||
|
public function sync():Void {
|
||||||
|
|
||||||
|
name = lime_display_get_name(id);
|
||||||
|
|
||||||
|
mode = lime_display_get_current_display_mode(id);
|
||||||
|
|
||||||
|
resolution = new ConstVector2(mode.width, mode.height);
|
||||||
|
|
||||||
|
modes = [];
|
||||||
|
var numModes = lime_display_get_num_display_modes(id);
|
||||||
|
|
||||||
|
for (i in 0...numModes) {
|
||||||
|
|
||||||
|
modes.push(lime_display_get_display_mode(id, i));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**GET / SET**/
|
||||||
|
|
||||||
|
private function get_aspectRatio():Float {
|
||||||
|
|
||||||
|
if (resolution.y != 0) {
|
||||||
|
|
||||||
|
return resolution.x / resolution.y;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Native Methods (stubs)
|
||||||
|
|
||||||
|
#if (cpp || neko || nodejs)
|
||||||
|
private static var lime_display_get_num_video_displays = function():Int {
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
private static var lime_display_get_display_mode = function(display:Int, mode:Int):DisplayMode {
|
||||||
|
return new DisplayMode(1024, 768, 60, 0);
|
||||||
|
};
|
||||||
|
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_video_displays = System.load("lime", "lime_display_get_num_video_displays", 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
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
class DisplayMode {
|
||||||
|
|
||||||
|
/**horizontal resolution**/
|
||||||
|
public var width(default, null):Int;
|
||||||
|
|
||||||
|
/**vertical resolution**/
|
||||||
|
public var height(default, null):Int;
|
||||||
|
|
||||||
|
/**refresh rate in Hz**/
|
||||||
|
public var refreshRate(default, null):Int;
|
||||||
|
|
||||||
|
/**pixel color format**/
|
||||||
|
public var format(default, null):Int;
|
||||||
|
|
||||||
|
public function new(width:Int, height:Int, refreshRate:Int, format:Int) {
|
||||||
|
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
this.refreshRate = refreshRate;
|
||||||
|
this.format = format;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract ConstVector2 (Vector2) from Vector2 {
|
||||||
|
|
||||||
|
public inline function new (x:Float = 0, y:Float = 0) this = new Vector2(x, y);
|
||||||
|
|
||||||
|
public var x(get, never):Float;
|
||||||
|
public var y(get, never):Float;
|
||||||
|
|
||||||
|
inline function get_x ():Float return this.x;
|
||||||
|
inline function get_y ():Float return this.y;
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user