implemented language autoselect for new apple builds

This commit is contained in:
Eric 2023-10-31 21:34:59 -07:00
parent 113be18416
commit 586db8bd5e
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
23 changed files with 143 additions and 163 deletions

94
.efrocachemap generated
View File

@ -424,7 +424,7 @@
"build/assets/ba_data/data/langdata.json": "0b15d171ebcc56d324875b48436b58c2",
"build/assets/ba_data/data/languages/arabic.json": "c21378ee214a9dd0cb2971cd46b74374",
"build/assets/ba_data/data/languages/belarussian.json": "4d89ed5f9c615771d4fa2bb1834942d3",
"build/assets/ba_data/data/languages/chinese.json": "0a9d9534e7329d1e886adae6fdc007c4",
"build/assets/ba_data/data/languages/chinese.json": "1ff4350df6d81c3b1b765fddace6b4c8",
"build/assets/ba_data/data/languages/chinesetraditional.json": "f858da49be0a5374157c627857751078",
"build/assets/ba_data/data/languages/croatian.json": "766532c67af5bd0144c2d63cab0516fa",
"build/assets/ba_data/data/languages/czech.json": "93c5fe0d884d95435da6c675f64e30e0",
@ -439,12 +439,12 @@
"build/assets/ba_data/data/languages/greek.json": "287c0ec437b38772284ef9d3e4fb2fc3",
"build/assets/ba_data/data/languages/hindi.json": "8ea0c58a44a24edb131d0e53b074d1f6",
"build/assets/ba_data/data/languages/hungarian.json": "796a290a8c44a1e7635208c2ff5fdc6e",
"build/assets/ba_data/data/languages/indonesian.json": "d7f1cafecad05e0dcd34345e0088c4de",
"build/assets/ba_data/data/languages/indonesian.json": "15a50690e5588d4acd3e07dfdaf755b0",
"build/assets/ba_data/data/languages/italian.json": "e4acd4e58ef8db78f3369bf881f84c55",
"build/assets/ba_data/data/languages/korean.json": "ca1122a9ee551da3f75ae632012bd0e2",
"build/assets/ba_data/data/languages/malay.json": "832562ce997fc70704b9234c95fb2e38",
"build/assets/ba_data/data/languages/persian.json": "4585070bd509600019ec8dc3bb47bfb8",
"build/assets/ba_data/data/languages/polish.json": "6677925c370390f1f53bcb737cb00fa8",
"build/assets/ba_data/data/languages/polish.json": "5e25428554893155a5f81f3eeb418bae",
"build/assets/ba_data/data/languages/portuguese.json": "51e362956f89da3eec980f587c092253",
"build/assets/ba_data/data/languages/romanian.json": "aeebdd54f65939c2facc6ac50c117826",
"build/assets/ba_data/data/languages/russian.json": "6e524210149d95479d6cbfd3506c630b",
@ -4056,50 +4056,50 @@
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "ad6316e04f09de546d25171512f783b2",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "19495e4313121d5574ab69efcbbcedd7",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "d8f215de52d492ce1790d9e1714b4cec",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "b057d6d9627c7400496080c48dd344cd",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "1bd60c4476b7471364be2534d3cb8185",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "011bceb35c7f53b98f2ab79798409679",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "0055dfac758acdeb5a39e436da5d71be",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "2daa69d1df9927e6fc17b0aabd5c62f6",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "2159ce4b648b1172e3d2f349e61f2b1b",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "26163f755e45586da35c1ed6499c0416",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "410c70d8d833458616a0056972e558c4",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "6e4473952a022e30340b6decae9da58a",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "0c63291b5842dafcfae558ef3c36d35a",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "7195da4e4abae862f41c28764b35662b",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "5a6ad8a9f0d5cd964661df32ac4efb47",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "376059ea5f812ace7629ad29a8d77a9a",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "7a0c87d9e673b28157845f71ff957df6",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "3603019e3dbf055c37f5fabbe9538c48",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "14f6e17cc5698341ed5607834107e608",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "679703f9ec7c6f9c0708c9b13c9c6c06",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "e4952c83427611c5a66a864d8bb3bc4f",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "55df380ad6f3b38094bc82f6bb2a34bb",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "e4952c83427611c5a66a864d8bb3bc4f",
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "55df380ad6f3b38094bc82f6bb2a34bb",
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "f37c917e8336be6afe86842fc0cd1586",
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "aaf0413c15988e332d27b7fd6eb1ba1f",
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "f37c917e8336be6afe86842fc0cd1586",
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "aaf0413c15988e332d27b7fd6eb1ba1f",
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "f66008360fc266ada358731656dfa91a",
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "712cd1dda7661826129b8023949ebebe",
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "f66008360fc266ada358731656dfa91a",
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "712cd1dda7661826129b8023949ebebe",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "5488eb05a8c45904243ff5cb1fc483cd",
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "55aef97c30ade6b21e93b7d8a45ae670",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "519d0d2895489e5905e65e53384b96ba",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "55aef97c30ade6b21e93b7d8a45ae670",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "c9e82195e722512599ec7edcb456c78d",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "18b47849e222dd7b1bef9bd1a07473c9",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "6c44557f5392bb3cd2d9a983add52d0b",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "0bd4099b6b594f62b806c9d74a84095a",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "a36752eee64f76c1868937247aaaee32",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "9ac33f02579ee14e4ad6a0b6b5a82a36",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "87bc0ff42442b60c817805ab07c65769",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "cedd1f2c367b84c20377c282453825f2",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "437a7184a3f56da917ec92e0f1d08392",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "c990f7765be45e603eaa1040a11d20f2",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "b891b240768e0c1961d82a05357f36fb",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "7778d9df2d0c4e07d2ea46b3c6b8ca1f",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "eac8b98c72cd8edbf1ed97237052ac05",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "6ee06879d656a68802dc42c483ea5a2b",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "58b8437cc04dbc63587e8c379bcdb316",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "40422d250bc84faf876642f8c6181132",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "0c5d44d847c3df3178e5b890c234bccd",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "8e58ab0f0faa58b6bdc8130062171a1d",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "18e33eab40af6efc10454206249b5b91",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "0465c41b9364c56494768ac41766529b",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "2bb0a2f4402ee90e1c2e03f75dd6e090",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "328d7b3a7ce3564dc7d1b4f315842291",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "079097fc77e50024f6231de94c9e1fbc",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "9bb781a88ecddf84ca84cbdc14ee0a78",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "17ca9956767731b2cce7c12ec15e37f4",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "c0c9a0e54434f54bad8cd057bacab4e2",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "ab77f95bd46cae158aaccd53091c3bfb",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "bd05a3124893ff649a48afc6ff9fdf20",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "d9f919fe87d497529cd8aed24a961ea3",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "56972014971024060e6014c2027debd2",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "d9f919fe87d497529cd8aed24a961ea3",
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "56972014971024060e6014c2027debd2",
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "3b0da9dfd7b2efe967aaafd3e68d4a86",
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "d4889e0f44a762e4bf067af33e8885e1",
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "3b0da9dfd7b2efe967aaafd3e68d4a86",
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "d4889e0f44a762e4bf067af33e8885e1",
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "5d6b77d2280ad8366f1386f7af0d8e6b",
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "0c8ab52403a77eb7a11137afb6946f8b",
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "5d6b77d2280ad8366f1386f7af0d8e6b",
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "0c8ab52403a77eb7a11137afb6946f8b",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "85ab9b2e82eb2ddca6e915b4a3c3589e",
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "39a0f3efabd9d2f62202ef9790e5cecd",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "2609429078b69b48c3cda49abac7065c",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "39a0f3efabd9d2f62202ef9790e5cecd",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "7f3de02f9481408b02ebfd1253452b30",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "a56a0aecab25961be71f364bd29eecaf",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "cbc394d29f300aac67374c586f07e3dd",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "ceba6e421ed2ccd51114bfdd239881d9",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "eaa568b2aee0f4cd4e186cee7ac98a9a",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "e13fdefc582d9c86a3b5f9cb4e5781f5",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "1f1065b864ddd2e6b376835c09bf809b",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "9eab26a8053f011ab0247e67bf59ecf3",
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
"src/assets/ba_data/python/babase/_mgen/enums.py": "28323912b56ec07701eda3d41a6a4101",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "6df0f34207346d89a72924249ddd4706",

View File

@ -1,4 +1,4 @@
### 1.7.28 (build 21543, api 8, 2023-10-31)
### 1.7.28 (build 21551, api 8, 2023-10-31)
- Massively cleaned up code related to rendering and window systems (OpenGL,
SDL, etc). This code had been growing into a nasty tangle for 15 years

View File

@ -274,6 +274,7 @@ ctx.filter_file_extensions = {
'.frag',
'.vert',
'.xcsettings',
'.xcstrings',
'.filters',
}

View File

@ -64,7 +64,6 @@ from _babase import (
is_running_on_fire_tv,
is_xcode_build,
lock_all_input,
mac_music_app_get_library_source,
mac_music_app_get_playlists,
mac_music_app_get_volume,
mac_music_app_init,
@ -265,7 +264,6 @@ __all__ = [
'lock_all_input',
'LoginAdapter',
'Lstr',
'mac_music_app_get_library_source',
'mac_music_app_get_playlists',
'mac_music_app_get_volume',
'mac_music_app_init',

View File

@ -80,14 +80,13 @@ class _MacMusicAppThread(threading.Thread):
def run(self) -> None:
"""Run the Music.app thread."""
babase.set_thread_name('BA_MacMusicAppThread')
babase.mac_music_app_init()
# Let's mention to the user we're launching Music.app in case
# it causes any funny business (this used to background the app
# sometimes, though I think that is fixed now)
def do_print() -> None:
babase.apptimer(
1.0,
0.5,
babase.Call(
babase.screenmessage,
babase.Lstr(resource='usingItunesText'),
@ -97,9 +96,8 @@ class _MacMusicAppThread(threading.Thread):
babase.pushcall(do_print, from_other_thread=True)
# Here we grab this to force the actual launch.
babase.mac_music_app_get_volume()
babase.mac_music_app_get_library_source()
babase.mac_music_app_init()
done = False
while not done:
self._commands_available.wait()

View File

@ -52,7 +52,7 @@ if TYPE_CHECKING:
# Build number and version of the ballistica binary we expect to be
# using.
TARGET_BALLISTICA_BUILD = 21543
TARGET_BALLISTICA_BUILD = 21551
TARGET_BALLISTICA_VERSION = '1.7.28'

View File

@ -20,31 +20,8 @@ AppAdapter::~AppAdapter() = default;
auto AppAdapter::ManagesMainThreadEventLoop() const -> bool { return true; }
void AppAdapter::OnMainThreadStartApp() {
assert(g_base);
assert(g_core);
assert(g_core->InMainThread());
// Add some common input devices where applicable. More specific ones (SDL
// Joysticks, etc.) get added in subclasses.
// FIXME: This stuff should probably go elsewhere.
if (!g_core->HeadlessMode()) {
// If we've got a nice themed hardware cursor, show it. Otherwise we'll
// render it manually, which is laggier but gets the job done.
// g_base->platform->SetHardwareCursorVisible(g_buildconfig.hardware_cursor());
// On desktop systems we just assume keyboard input exists and add it
// immediately.
if (g_core->platform->IsRunningOnDesktop()) {
g_base->input->PushCreateKeyboardInputDevices();
}
// On non-tv, non-desktop, non-vr systems, create a touchscreen input.
if (!g_core->platform->IsRunningOnTV() && !g_core->IsVRMode()
&& !g_core->platform->IsRunningOnDesktop()) {
g_base->input->CreateTouchInput();
}
}
}
void AppAdapter::OnAppStart() { assert(g_base->InLogicThread()); }

View File

@ -222,9 +222,6 @@ class AppAdapter {
/// clipboard is unsupported or if there's no text on the clipboard.
auto ClipboardGetText() -> std::string;
protected:
virtual ~AppAdapter();
/// Push a raw pointer Runnable to the platform's 'main' thread. The main
/// thread should call its RunAndLogErrors() method and then delete it.
virtual void DoPushMainThreadRunnable(Runnable* runnable) = 0;
@ -233,6 +230,9 @@ class AppAdapter {
/// context. By default this is simply the main thread.
virtual void DoPushGraphicsContextRunnable(Runnable* runnable);
protected:
virtual ~AppAdapter();
virtual auto DoClipboardIsSupported() -> bool;
virtual auto DoClipboardHasText() -> bool;
virtual void DoClipboardSetText(const std::string& text);

View File

@ -51,6 +51,8 @@ AppAdapterSDL::AppAdapterSDL() {
}
void AppAdapterSDL::OnMainThreadStartApp() {
AppAdapter::OnMainThreadStartApp();
// App is starting. Let's fire up the ol' SDL.
uint32_t sdl_flags{SDL_INIT_VIDEO | SDL_INIT_JOYSTICK};
@ -79,9 +81,8 @@ void AppAdapterSDL::OnMainThreadStartApp() {
sdl_runnable_event_id_ = SDL_RegisterEvents(1);
assert(sdl_runnable_event_id_ != (uint32_t)-1);
// Note: parent class can add some input devices so need to bring up sdl
// before we let it run. That code should maybe be relocated/refactored.
AppAdapter::OnMainThreadStartApp();
// SDL builds just assume keyboard input is available.
g_base->input->PushCreateKeyboardInputDevices();
if (g_buildconfig.enable_sdl_joysticks()) {
// We want events from joysticks.

View File

@ -722,4 +722,8 @@ void BaseFeatureSet::QuitApp(bool confirm, QuitType quit_type) {
}
}
void BaseFeatureSet::PushMainThreadRunnable(Runnable* runnable) {
app_adapter->DoPushMainThreadRunnable(runnable);
}
} // namespace ballistica::base

View File

@ -723,6 +723,8 @@ class BaseFeatureSet : public FeatureSetNativeComponent,
/// loading.
void OnAssetsAvailable();
void PushMainThreadRunnable(Runnable* runnable) override;
// Const subsystems.
AppAdapter* const app_adapter;
AppConfig* const app_config;

View File

@ -144,12 +144,9 @@ auto Input::GetNewNumberedIdentifier_(const std::string& name,
return full_id;
}
void Input::CreateTouchInput() {
assert(g_core->InMainThread());
assert(touch_input_ == nullptr);
touch_input_ = Object::NewDeferred<TouchInput>();
PushAddInputDeviceCall(touch_input_, false);
}
// void Input::CreateTouchInput() {
// assert(g_core->InMainThread());
// }
void Input::AnnounceConnects_() {
assert(g_base->InLogicThread());
@ -559,7 +556,14 @@ void Input::UpdateEnabledControllerSubsystems_() {
// }
}
void Input::OnAppStart() { assert(g_base->InLogicThread()); }
void Input::OnAppStart() {
assert(g_base->InLogicThread());
if (g_core->platform->HasTouchScreen()) {
assert(touch_input_ == nullptr);
touch_input_ = Object::NewDeferred<TouchInput>();
PushAddInputDeviceCall(touch_input_, false);
}
}
void Input::OnAppPause() { assert(g_base->InLogicThread()); }

View File

@ -116,7 +116,7 @@ class Input {
auto HaveRemoteAppController() -> bool;
auto keyboard_input() const -> KeyboardInput* { return keyboard_input_; }
auto keyboard_input_2() const -> KeyboardInput* { return keyboard_input_2_; }
void CreateTouchInput();
// void CreateTouchInput();
void PushTextInputEvent(const std::string& text);
void PushKeyPressEventSimple(int keycode);

View File

@ -1088,25 +1088,6 @@ static PyMethodDef PyMacMusicAppSetVolumeDef = {
"(internal)",
};
// ------------------------ mac_music_app_get_library --------------------------
static auto PyMacMusicAppGetLibrarySource(PyObject* self, PyObject* args,
PyObject* keywds) -> PyObject* {
BA_PYTHON_TRY;
g_core->platform->MacMusicAppGetLibrarySource();
Py_RETURN_NONE;
BA_PYTHON_CATCH;
}
static PyMethodDef PyMacMusicAppGetLibrarySourceDef = {
"mac_music_app_get_library_source", // name
(PyCFunction)PyMacMusicAppGetLibrarySource, // method
METH_VARARGS | METH_KEYWORDS, // flags
"mac_music_app_get_library_source() -> None\n"
"\n"
"(internal)"};
// --------------------------- mac_music_app_stop ------------------------------
static auto PyMacMusicAppStop(PyObject* self, PyObject* args, PyObject* keywds)
@ -1695,7 +1676,6 @@ auto PythonMethodsApp::GetMethods() -> std::vector<PyMethodDef> {
PyMacMusicAppInitDef,
PyMacMusicAppGetVolumeDef,
PyMacMusicAppSetVolumeDef,
PyMacMusicAppGetLibrarySourceDef,
PyMacMusicAppStopDef,
PyMacMusicAppPlayPlaylistDef,
PyMacMusicAppGetPlaylistsDef,

View File

@ -1295,7 +1295,10 @@ void DevConsole::Draw(FrameDef* frame_def) {
}
// Carat.
if (!carat_mesh_.Exists()) {
if (!carat_mesh_.Exists() || carat_dirty_) {
// Note: we explicitly update here if carat is dirty because
// that updates last_carat_change_time_ which affects whether
// we draw or not. GetCaratX_() only updates it *if* we draw.
UpdateCarat_();
}
millisecs_t app_time = pass->frame_def()->app_time_millisecs();
@ -1457,6 +1460,7 @@ auto DevConsole::PasteFromClipboard() -> bool {
}
void DevConsole::UpdateCarat_() {
last_carat_x_change_time_ = g_core->GetAppTimeMillisecs();
auto unichars = Utils::UnicodeFromUTF8(input_string_, "fjfwef");
auto unichars_clamped = unichars;
@ -1508,7 +1512,6 @@ void DevConsole::UpdateCarat_() {
auto DevConsole::GetCaratX_() -> float {
if (carat_dirty_) {
last_carat_x_change_time_ = g_core->GetAppTimeMillisecs();
UpdateCarat_();
carat_dirty_ = false;
}

View File

@ -10,7 +10,6 @@
#include <uuid/uuid.h>
#if BA_XCODE_BUILD
#include "ballistica/base/platform/apple/apple_utils.h"
#include "ballistica/base/platform/apple/from_swift.h"
#include "ballistica/shared/math/rect.h"
#endif
@ -358,14 +357,6 @@ void CorePlatformApple::MacMusicAppSetVolume(int volume) {
#endif
}
// KILL THIS.
void CorePlatformApple::MacMusicAppGetLibrarySource() {
#if BA_OSTYPE_MACOS && BA_XCODE_BUILD
// base::AppleUtils::MacMusicAppGetLibrarySource();
#else
CorePlatform::MacMusicAppGetLibrarySource();
#endif
}
void CorePlatformApple::MacMusicAppStop() {
#if BA_OSTYPE_MACOS && BA_XCODE_BUILD
return BallisticaKit::CocoaFromCpp::MacMusicAppStop();
@ -422,6 +413,17 @@ auto CorePlatformApple::GetSubplatformName() -> std::string {
#endif
}
auto CorePlatformApple::GetLocale() -> std::string {
#if BA_XCODE_BUILD
if (!locale_.has_value()) {
locale_ = std::string(BallisticaKit::FromCpp::GetLocaleString());
}
return *locale_;
#else
return CorePlatform::GetLocale();
#endif
}
} // namespace ballistica::core
#endif // BA_OSTYPE_MACOS || BA_OSTYPE_IOS_TVOS

View File

@ -6,6 +6,7 @@
#include <list>
#include <mutex>
#include <optional>
#include <string>
#include <vector>
@ -42,8 +43,6 @@ class CorePlatformApple : public CorePlatform {
-> bool override;
void ShowOnlineScoreUI(const std::string& show, const std::string& game,
const std::string& game_version) override;
// auto NewAutoReleasePool() -> void* override;
// void DrainAutoReleasePool(void* pool) override;
void ResetAchievements() override;
void GameCenterLogin() override;
auto IsOSPlayingMusic() -> bool override;
@ -52,7 +51,6 @@ class CorePlatformApple : public CorePlatform {
void MacMusicAppInit() override;
auto MacMusicAppGetVolume() -> int override;
void MacMusicAppSetVolume(int volume) override;
void MacMusicAppGetLibrarySource() override;
void MacMusicAppStop() override;
auto MacMusicAppPlayPlaylist(const std::string& playlist) -> bool override;
auto MacMusicAppGetPlaylists() -> std::list<std::string> override;
@ -60,9 +58,13 @@ class CorePlatformApple : public CorePlatform {
auto GetSubplatformName() -> std::string override;
auto GetDeviceUUIDInputs() -> std::list<std::string> override;
auto GetLocale() -> std::string override;
protected:
auto DoGetDataDirectoryMonolithicDefault() -> std::string override;
private:
std::optional<std::string> locale_;
};
} // namespace ballistica::core

View File

@ -814,10 +814,6 @@ void CorePlatform::MacMusicAppSetVolume(int volume) {
Log(LogLevel::kError, "MacMusicAppSetVolume() unimplemented");
}
void CorePlatform::MacMusicAppGetLibrarySource() {
Log(LogLevel::kError, "MacMusicAppGetLibrarySource() unimplemented");
}
void CorePlatform::MacMusicAppStop() {
Log(LogLevel::kError, "MacMusicAppStop() unimplemented");
}

View File

@ -211,10 +211,9 @@ class CorePlatform {
virtual void MacMusicAppInit();
virtual auto MacMusicAppGetVolume() -> int;
virtual void MacMusicAppSetVolume(int volume);
virtual void MacMusicAppGetLibrarySource();
virtual void MacMusicAppStop();
virtual auto MacMusicAppPlayPlaylist(const std::string& playlist) -> bool;
virtual auto MacMusicAppGetPlaylists() -> std::list<std::string>;
virtual auto MacMusicAppPlayPlaylist(const std::string& playlist) -> bool;
virtual void MacMusicAppStop();
#pragma mark TEXT RENDERING ----------------------------------------------------

View File

@ -44,6 +44,7 @@ class BaseSoftInterface {
virtual auto IsAppStarted() const -> bool = 0;
virtual auto IsAppBootstrapped() const -> bool = 0;
virtual auto GetReturnValue() const -> int = 0;
virtual void PushMainThreadRunnable(Runnable* runnable) = 0;
};
} // namespace ballistica::core

View File

@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
namespace ballistica {
// These are set automatically via script; don't modify them here.
const int kEngineBuildNumber = 21543;
const int kEngineBuildNumber = 21551;
const char* kEngineVersion = "1.7.28";
const int kEngineApiVersion = 8;

View File

@ -5,6 +5,8 @@
#include "ballistica/core/platform/core_platform.h"
#include "ballistica/core/support/base_soft.h"
#include "ballistica/shared/foundation/logging.h"
#include "ballistica/shared/generic/lambda_runnable.h"
#include "ballistica/shared/python/python.h"
namespace ballistica {
@ -131,32 +133,38 @@ void FatalError::DoBlockingFatalErrorDialog(const std::string& message) {
// done.
if (g_core->InMainThread()) {
g_core->platform->BlockingFatalErrorDialog(message);
} else {
printf("FIXME REIMPLEMENT BLOCKING FATAL ERROR FOR BG THREAD\n");
// bool started{};
// bool finished{};
// bool* startedptr{&started};
// bool* finishedptr{&finished};
// g_core->main_event_loop()->PushCall([message, startedptr, finishedptr] {
// *startedptr = true;
// g_core->platform->BlockingFatalErrorDialog(message);
// *finishedptr = true;
// });
} else if (g_base_soft) {
bool started{};
bool finished{};
bool* startedptr{&started};
bool* finishedptr{&finished};
// // Wait a short amount of time for the main thread to take action.
// // There's a chance that it can't (if threads are paused, if it is
// // blocked on a synchronous call to another thread, etc.) so if we don't
// // see something happening soon, just give up on showing a dialog.
// auto starttime = core::CorePlatform::GetCurrentMillisecs();
// while (!started) {
// if (core::CorePlatform::GetCurrentMillisecs() - starttime > 1000) {
// return;
// }
// core::CorePlatform::SleepMillisecs(10);
// }
// while (!finished) {
// core::CorePlatform::SleepMillisecs(10);
// }
// If our thread is holding the GIL, release it to give the main
// thread a better chance to get to the point of displaying the fatal error.
if (Python::HaveGIL()) {
Python::PermanentlyReleaseGIL();
}
g_base_soft->PushMainThreadRunnable(
NewLambdaRunnableUnmanaged([message, startedptr, finishedptr] {
*startedptr = true;
g_core->platform->BlockingFatalErrorDialog(message);
*finishedptr = true;
}));
// Wait a short amount of time for the main thread to take action.
// There's a chance that it can't (if threads are paused, if it is
// blocked on a synchronous call to another thread, etc.) so if we don't
// see something happening soon, just give up on showing a dialog.
auto starttime = core::CorePlatform::GetCurrentMillisecs();
while (!started) {
if (core::CorePlatform::GetCurrentMillisecs() - starttime > 3000) {
return;
}
core::CorePlatform::SleepMillisecs(10);
}
while (!finished) {
core::CorePlatform::SleepMillisecs(10);
}
}
}

View File

@ -416,11 +416,15 @@ class Updater:
)
def _target_names_for_file(self, filename: str) -> list[str] | None:
# Cocoa stuff only applies to our macOS build.
# Cocoa stuff only applies to our macOS targets.
if filename.startswith('Cocoa') and filename.endswith('.swift'):
return [f'{self.pnameu} macOS']
return [
f'{self.pnameu} macOS TestBuild',
f'{self.pnameu} macOS AppStore',
f'{self.pnameu} macOS Steam',
]
# UIKit stuff applies to our iOS/tvOS builds.
# UIKit stuff applies to our iOS/tvOS targets.
if filename.startswith('UIKit') and filename.endswith('.swift'):
return [f'{self.pnameu} iOS', f'{self.pnameu} tvOS']