mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2025-08-31 19:04:55 +00:00
102 lines
3.4 KiB
Haxe
102 lines
3.4 KiB
Haxe
package funkin.mobile.util;
|
|
|
|
#if ios
|
|
import funkin.external.ios.ScreenUtil as NativeScreenUtil;
|
|
#elseif android
|
|
import funkin.external.android.ScreenUtil as NativeScreenUtil;
|
|
#end
|
|
import lime.math.Rectangle;
|
|
import lime.system.System;
|
|
|
|
/**
|
|
* A Utility class to get mobile screen related informations.
|
|
*/
|
|
class ScreenUtil
|
|
{
|
|
/**
|
|
* Get `Rectangle` Object that contains the dimensions of the screen's Notch.
|
|
* Scales the dimensions to return coords in pixels, not points
|
|
* @return Rectangle
|
|
*/
|
|
public static function getNotchRect():Rectangle
|
|
{
|
|
final notchRect:Rectangle = new Rectangle();
|
|
|
|
#if android
|
|
final rectDimensions:Array<Array<Float>> = [[], [], [], []];
|
|
|
|
// Push all the dimensions of the cutouts into an array
|
|
for (rect in NativeScreenUtil.getCutoutDimensions())
|
|
{
|
|
rectDimensions[0].push(rect.x);
|
|
rectDimensions[1].push(rect.y);
|
|
rectDimensions[2].push(rect.width);
|
|
rectDimensions[3].push(rect.height);
|
|
}
|
|
|
|
// Put all the dimensions into the rectangle
|
|
for (i => dimensions in rectDimensions)
|
|
{
|
|
for (dimension in dimensions)
|
|
{
|
|
switch (i)
|
|
{
|
|
case 0:
|
|
notchRect.x += dimension;
|
|
case 1:
|
|
notchRect.y += dimension;
|
|
case 2:
|
|
notchRect.width += dimension;
|
|
case 3:
|
|
notchRect.height += dimension;
|
|
}
|
|
}
|
|
}
|
|
#elseif ios
|
|
var topInset:Float = -1;
|
|
var leftInset:Float = -1;
|
|
var rightInset:Float = -1;
|
|
var bottomInset:Float = -1;
|
|
var deviceWidth:Float = -1;
|
|
var deviceHeight:Float = -1;
|
|
var displayOrientation:DisplayOrientation = System.getDisplayOrientation(0);
|
|
|
|
NativeScreenUtil.getSafeAreaInsets(cpp.RawPointer.addressOf(topInset), cpp.RawPointer.addressOf(bottomInset), cpp.RawPointer.addressOf(leftInset),
|
|
cpp.RawPointer.addressOf(rightInset));
|
|
|
|
NativeScreenUtil.getScreenSize(cpp.RawPointer.addressOf(deviceWidth), cpp.RawPointer.addressOf(deviceHeight));
|
|
|
|
notchRect.x = 0;
|
|
notchRect.y = 0.0;
|
|
|
|
// Calculate the rectangle dimensions for the notch
|
|
// Note: iOS only spits out *insets* for "safe areas", so we can only get a broad position for the notch
|
|
// left + right insets are the same, so we can use either
|
|
// Note: *inset* is the distance from the edge of the screen where a safe area gets defined
|
|
// see: https://developer.apple.com/documentation/uikit/uiview/safeareainsets
|
|
switch (displayOrientation)
|
|
{
|
|
case DISPLAY_ORIENTATION_LANDSCAPE: // landscape
|
|
notchRect.width = leftInset + rightInset;
|
|
notchRect.height = bottomInset - topInset;
|
|
notchRect.y = topInset;
|
|
case DISPLAY_ORIENTATION_LANDSCAPE_FLIPPED: // landscape
|
|
notchRect.width = leftInset + rightInset;
|
|
notchRect.height = bottomInset - topInset;
|
|
notchRect.y = topInset;
|
|
notchRect.x = deviceWidth - notchRect.width; // move notchRect if we are flipped, notch is at the right of screen
|
|
case DISPLAY_ORIENTATION_PORTRAIT: // portrait
|
|
notchRect.width = deviceWidth;
|
|
notchRect.height = topInset;
|
|
case DISPLAY_ORIENTATION_PORTRAIT_FLIPPED: // portrait
|
|
notchRect.width = deviceWidth;
|
|
notchRect.height = bottomInset;
|
|
notchRect.y = deviceHeight - notchRect.height; // move notchRect if we are flipped, the notch is at the bottom of screen
|
|
default: // display orientation unknown? perhaps this occurs on desktop
|
|
}
|
|
#end
|
|
|
|
return notchRect;
|
|
}
|
|
}
|