Fix screen_get_usable_rect returning display safe area
This commit is contained in:
parent
bc7ccc909b
commit
97e87a2daf
10 changed files with 55 additions and 40 deletions
|
|
@ -134,6 +134,8 @@ public:
|
|||
virtual void tts_resume() override;
|
||||
virtual void tts_stop() override;
|
||||
|
||||
virtual Rect2i get_display_safe_area() const override;
|
||||
|
||||
virtual int get_screen_count() const override;
|
||||
virtual Point2i screen_get_position(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||
virtual Size2i screen_get_size(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
|
||||
|
|
|
|||
|
|
@ -360,6 +360,22 @@ void DisplayServerIPhone::tts_stop() {
|
|||
[tts stopSpeaking];
|
||||
}
|
||||
|
||||
Rect2i DisplayServerIPhone::get_display_safe_area() const {
|
||||
if (@available(iOS 11, *)) {
|
||||
UIEdgeInsets insets = UIEdgeInsetsZero;
|
||||
UIView *view = AppDelegate.viewController.godotView;
|
||||
if ([view respondsToSelector:@selector(safeAreaInsets)]) {
|
||||
insets = [view safeAreaInsets];
|
||||
}
|
||||
float scale = screen_get_scale();
|
||||
Size2i insets_position = Size2i(insets.left, insets.top) * scale;
|
||||
Size2i insets_size = Size2i(insets.left + insets.right, insets.top + insets.bottom) * scale;
|
||||
return Rect2i(screen_get_position() + insets_position, screen_get_size() - insets_size);
|
||||
} else {
|
||||
return Rect2i(screen_get_position(), screen_get_size());
|
||||
}
|
||||
}
|
||||
|
||||
int DisplayServerIPhone::get_screen_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -379,22 +395,7 @@ Size2i DisplayServerIPhone::screen_get_size(int p_screen) const {
|
|||
}
|
||||
|
||||
Rect2i DisplayServerIPhone::screen_get_usable_rect(int p_screen) const {
|
||||
if (@available(iOS 11, *)) {
|
||||
UIEdgeInsets insets = UIEdgeInsetsZero;
|
||||
UIView *view = AppDelegate.viewController.godotView;
|
||||
|
||||
if ([view respondsToSelector:@selector(safeAreaInsets)]) {
|
||||
insets = [view safeAreaInsets];
|
||||
}
|
||||
|
||||
float scale = screen_get_scale(p_screen);
|
||||
Size2i insets_position = Size2i(insets.left, insets.top) * scale;
|
||||
Size2i insets_size = Size2i(insets.left + insets.right, insets.top + insets.bottom) * scale;
|
||||
|
||||
return Rect2i(screen_get_position(p_screen) + insets_position, screen_get_size(p_screen) - insets_size);
|
||||
} else {
|
||||
return Rect2i(screen_get_position(p_screen), screen_get_size(p_screen));
|
||||
}
|
||||
return Rect2i(screen_get_position(p_screen), screen_get_size(p_screen));
|
||||
}
|
||||
|
||||
int DisplayServerIPhone::screen_get_dpi(int p_screen) const {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue