You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
[HTML5] Detect screen scale and DPI.
`OS.get_screen_scale` will now return the `window.devicePixelRatio` value, `OS.get_screen_dpi` uses CSS media queries to find approximate DPI value for the current display. `OS.get_screen_size` also return the actual screen size (not the CSS pixel size).
This commit is contained in:
@@ -405,6 +405,27 @@ const GodotDisplay = {
|
||||
$GodotDisplay__deps: ['$GodotConfig', '$GodotRuntime', '$GodotDisplayCursor', '$GodotDisplayListeners', '$GodotDisplayDragDrop', '$GodotDisplayGamepads'],
|
||||
$GodotDisplay: {
|
||||
window_icon: '',
|
||||
findDPI: function () {
|
||||
function testDPI(dpi) {
|
||||
return window.matchMedia(`(max-resolution: ${dpi}dpi)`).matches;
|
||||
}
|
||||
function bisect(low, high, func) {
|
||||
const mid = parseInt(((high - low) / 2) + low, 10);
|
||||
if (high - low <= 1) {
|
||||
return func(high) ? high : low;
|
||||
}
|
||||
if (func(mid)) {
|
||||
return bisect(low, mid, func);
|
||||
}
|
||||
return bisect(mid, high, func);
|
||||
}
|
||||
try {
|
||||
const dpi = bisect(0, 800, testDPI);
|
||||
return dpi >= 96 ? dpi : 96;
|
||||
} catch (e) {
|
||||
return 96;
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
godot_js_display_is_swap_ok_cancel__sig: 'i',
|
||||
@@ -422,6 +443,11 @@ const GodotDisplay = {
|
||||
window.alert(GodotRuntime.parseString(p_text)); // eslint-disable-line no-alert
|
||||
},
|
||||
|
||||
godot_js_display_screen_dpi_get__sig: 'i',
|
||||
godot_js_display_screen_dpi_get: function () {
|
||||
return GodotDisplay.findDPI();
|
||||
},
|
||||
|
||||
godot_js_display_pixel_ratio_get__sig: 'f',
|
||||
godot_js_display_pixel_ratio_get: function () {
|
||||
return window.devicePixelRatio || 1;
|
||||
|
||||
Reference in New Issue
Block a user