Add support for PiP mode

This commit is contained in:
Fredia Huya-Kouadio
2025-12-31 02:14:23 -08:00
parent 220b0b2f74
commit ef0163ba9f
27 changed files with 405 additions and 52 deletions
@@ -72,6 +72,12 @@ bool DisplayServerAndroid::has_feature(DisplayServerEnums::Feature p_feature) co
return (native_menu && native_menu->has_feature(NativeMenu::FEATURE_GLOBAL_MENU));
} break;
#endif
case DisplayServerEnums::FEATURE_PIP_MODE: {
GodotJavaWrapper *godot_java = OS_Android::get_singleton()->get_godot_java();
ERR_FAIL_NULL_V(godot_java, false);
return godot_java->is_pip_mode_supported();
} break;
case DisplayServerEnums::FEATURE_CURSOR_SHAPE:
//case DisplayServerEnums::FEATURE_CUSTOM_CURSOR_SHAPE:
//case DisplayServerEnums::FEATURE_HIDPI:
@@ -1003,3 +1009,31 @@ void DisplayServerAndroid::set_icon(const Ref<Image> &p_icon) {
bool DisplayServerAndroid::is_window_transparency_available() const {
return GLOBAL_GET_CACHED(bool, "display/window/per_pixel_transparency/allowed");
}
bool DisplayServerAndroid::is_in_pip_mode(DisplayServerEnums::WindowID p_window) {
ERR_FAIL_COND_V(p_window != DisplayServerEnums::MAIN_WINDOW_ID, false);
GodotJavaWrapper *godot_java = OS_Android::get_singleton()->get_godot_java();
ERR_FAIL_NULL_V(godot_java, false);
return godot_java->is_in_pip_mode();
}
void DisplayServerAndroid::pip_mode_enter(DisplayServerEnums::WindowID p_window) {
ERR_FAIL_COND(p_window != DisplayServerEnums::MAIN_WINDOW_ID);
GodotJavaWrapper *godot_java = OS_Android::get_singleton()->get_godot_java();
ERR_FAIL_NULL(godot_java);
godot_java->enter_pip_mode();
}
void DisplayServerAndroid::pip_mode_set_aspect_ratio(int p_numerator, int p_denominator, DisplayServerEnums::WindowID p_window) {
ERR_FAIL_COND(p_window != DisplayServerEnums::MAIN_WINDOW_ID);
GodotJavaWrapper *godot_java = OS_Android::get_singleton()->get_godot_java();
ERR_FAIL_NULL(godot_java);
godot_java->set_pip_mode_aspect_ratio(p_numerator, p_denominator);
}
void DisplayServerAndroid::pip_mode_set_auto_enter_on_background(bool p_auto_enter_on_background, DisplayServerEnums::WindowID p_window) {
ERR_FAIL_COND(p_window != DisplayServerEnums::MAIN_WINDOW_ID);
GodotJavaWrapper *godot_java = OS_Android::get_singleton()->get_godot_java();
ERR_FAIL_NULL(godot_java);
godot_java->set_auto_enter_pip_mode_on_background(p_auto_enter_on_background);
}