From 9ed3fc0eaa7ccca1118426ae7edd761fd017078e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 28 Oct 2025 11:20:54 +0100 Subject: [PATCH] Some work on the credits screen, main screen --- Common/System/System.h | 1 + UI/ControlMappingScreen.cpp | 14 +- UI/ControlMappingScreen.h | 4 +- UI/GameSettingsScreen.cpp | 2 +- UI/MainScreen.cpp | 2 +- UI/MiscScreens.cpp | 168 +- UI/MiscScreens.h | 18 +- UI/UIAtlas.cpp | 6 + android/jni/app-android.cpp | 2 + assets/lang/ar_AE.ini | 1 - assets/lang/az_AZ.ini | 1 - assets/lang/be_BY.ini | 1 - assets/lang/bg_BG.ini | 1 - assets/lang/ca_ES.ini | 1 - assets/lang/cz_CZ.ini | 1 - assets/lang/da_DK.ini | 1 - assets/lang/de_DE.ini | 1 - assets/lang/dr_ID.ini | 1 - assets/lang/en_US.ini | 1 - assets/lang/es_ES.ini | 1 - assets/lang/es_LA.ini | 1 - assets/lang/fa_IR.ini | 1 - assets/lang/fi_FI.ini | 1 - assets/lang/fr_FR.ini | 1 - assets/lang/gl_ES.ini | 1 - assets/lang/gr_EL.ini | 1 - assets/lang/he_IL.ini | 1 - assets/lang/he_IL_invert.ini | 1 - assets/lang/hr_HR.ini | 1 - assets/lang/hu_HU.ini | 1 - assets/lang/id_ID.ini | 1 - assets/lang/it_IT.ini | 1 - assets/lang/ja_JP.ini | 1 - assets/lang/jv_ID.ini | 1 - assets/lang/ko_KR.ini | 1 - assets/lang/ku_SO.ini | 1 - assets/lang/lo_LA.ini | 1 - assets/lang/lt-LT.ini | 1 - assets/lang/ms_MY.ini | 1 - assets/lang/nl_NL.ini | 1 - assets/lang/no_NO.ini | 1 - assets/lang/pl_PL.ini | 1 - assets/lang/pt_BR.ini | 1 - assets/lang/pt_PT.ini | 1 - assets/lang/ro_RO.ini | 1 - assets/lang/ru_RU.ini | 1 - assets/lang/sv_SE.ini | 1 - assets/lang/tg_PH.ini | 1 - assets/lang/th_TH.ini | 1 - assets/lang/tr_TR.ini | 1 - assets/lang/uk_UA.ini | 1 - assets/lang/vi_VN.ini | 1 - assets/lang/zh_CN.ini | 1 - assets/lang/zh_TW.ini | 1 - assets/ui_images/images.svg | 5679 +++++++++++++++++----------------- ios/main.mm | 2 + 56 files changed, 2979 insertions(+), 2964 deletions(-) diff --git a/Common/System/System.h b/Common/System/System.h index ce3a2b779d..073a881583 100644 --- a/Common/System/System.h +++ b/Common/System/System.h @@ -234,6 +234,7 @@ enum SystemProperty { SYSPROP_HAS_TRASH_BIN, SYSPROP_USE_IAP, + SYSPROP_SUPPORTS_SHARE_TEXT, }; enum class SystemNotification { diff --git a/UI/ControlMappingScreen.cpp b/UI/ControlMappingScreen.cpp index 4e4fbcd91e..72b15fd184 100644 --- a/UI/ControlMappingScreen.cpp +++ b/UI/ControlMappingScreen.cpp @@ -504,7 +504,7 @@ void KeyMappingNewMouseKeyDialog::axis(const AxisInput &axis) { } } -AnalogSetupScreen::AnalogSetupScreen(const Path &gamePath) : UIDialogScreenWithGameBackground(gamePath) { +AnalogCalibrationScreen::AnalogCalibrationScreen(const Path &gamePath) : UIDialogScreenWithGameBackground(gamePath) { mapper_.SetCallbacks( [](int vkey, bool down) {}, [](int vkey, float analogValue) {}, @@ -519,7 +519,7 @@ AnalogSetupScreen::AnalogSetupScreen(const Path &gamePath) : UIDialogScreenWithG }); } -void AnalogSetupScreen::update() { +void AnalogCalibrationScreen::update() { mapper_.Update(time_now_d()); // We ignore the secondary stick for now and just use the two views // for raw and psp input. @@ -532,7 +532,7 @@ void AnalogSetupScreen::update() { UIScreen::update(); } -bool AnalogSetupScreen::key(const KeyInput &key) { +bool AnalogCalibrationScreen::key(const KeyInput &key) { bool retval = UIScreen::key(key); // Allow testing auto-rotation. If it collides with UI keys, too bad. @@ -546,7 +546,7 @@ bool AnalogSetupScreen::key(const KeyInput &key) { return retval; } -void AnalogSetupScreen::axis(const AxisInput &axis) { +void AnalogCalibrationScreen::axis(const AxisInput &axis) { // We DON'T call UIScreen::Axis here! Otherwise it'll try to move the UI focus around. // UIScreen::axis(axis); @@ -554,7 +554,7 @@ void AnalogSetupScreen::axis(const AxisInput &axis) { mapper_.Axis(&axis, 1); } -void AnalogSetupScreen::CreateViews() { +void AnalogCalibrationScreen::CreateViews() { using namespace UI; auto di = GetI18NCategory(I18NCat::DIALOG); @@ -580,7 +580,7 @@ void AnalogSetupScreen::CreateViews() { // TODO: This should probably be a slider. scrollContents->Add(new CheckBox(&g_Config.bAnalogIsCircular, co->T("Circular stick input"))); scrollContents->Add(new PopupSliderChoiceFloat(&g_Config.fAnalogAutoRotSpeed, 0.1f, 20.0f, 8.0f, co->T("Auto-rotation speed"), 1.0f, screenManager())); - scrollContents->Add(new Choice(co->T("Reset to defaults")))->OnClick.Handle(this, &AnalogSetupScreen::OnResetToDefaults); + scrollContents->Add(new Choice(co->T("Reset to defaults")))->OnClick.Handle(this, &AnalogCalibrationScreen::OnResetToDefaults); LinearLayout *theTwo = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(1.0f)); @@ -592,7 +592,7 @@ void AnalogSetupScreen::CreateViews() { AddStandardBack(leftColumn); } -void AnalogSetupScreen::OnResetToDefaults(UI::EventParams &e) { +void AnalogCalibrationScreen::OnResetToDefaults(UI::EventParams &e) { g_Config.fAnalogDeadzone = 0.15f; g_Config.fAnalogInverseDeadzone = 0.0f; g_Config.fAnalogSensitivity = 1.1f; diff --git a/UI/ControlMappingScreen.h b/UI/ControlMappingScreen.h index a521ed0fcc..8ceabcfed0 100644 --- a/UI/ControlMappingScreen.h +++ b/UI/ControlMappingScreen.h @@ -120,9 +120,9 @@ private: class JoystickHistoryView; -class AnalogSetupScreen : public UIDialogScreenWithGameBackground { +class AnalogCalibrationScreen : public UIDialogScreenWithGameBackground { public: - AnalogSetupScreen(const Path &gamePath); + AnalogCalibrationScreen(const Path &gamePath); bool key(const KeyInput &key) override; void axis(const AxisInput &axis) override; diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index dc79bd3d4c..8bbea9f13b 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -794,7 +794,7 @@ void GameSettingsScreen::CreateControlsSettings(UI::ViewGroup *controlsSettings) screenManager()->push(new ControlMappingScreen(gamePath_)); }); controlsSettings->Add(new Choice(co->T("Calibrate Analog Stick")))->OnClick.Add([this](UI::EventParams &e) { - screenManager()->push(new AnalogSetupScreen(gamePath_)); + screenManager()->push(new AnalogCalibrationScreen(gamePath_)); }); controlsSettings->Add(new PopupSliderChoiceFloat(&g_Config.fAnalogTriggerThreshold, 0.02f, 0.98f, 0.75f, co->T("Analog trigger threshold"), screenManager())); diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp index 416eb8eca7..96662441cb 100644 --- a/UI/MainScreen.cpp +++ b/UI/MainScreen.cpp @@ -1296,7 +1296,7 @@ void MainScreen::CreateViews() { } if (vertical) { - LinearLayout *header = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)); + LinearLayout *header = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT, Margins(0, 16, 0, 8))); header->SetSpacing(5.0f); header->Add(CreateLogoView(true, new LinearLayoutParams(WRAP_CONTENT, 80.0f, false))); diff --git a/UI/MiscScreens.cpp b/UI/MiscScreens.cpp index 5be43fa1c0..8d3dfc3e44 100644 --- a/UI/MiscScreens.cpp +++ b/UI/MiscScreens.cpp @@ -907,74 +907,95 @@ void LogoScreen::DrawForeground(UIContext &dc) { dc.Flush(); } +class CreditsScroller : public UI::View { +public: + CreditsScroller(UI::LayoutParams *layoutParams) : UI::View(layoutParams) {} + bool Touch(const TouchInput &touch) override { + if (touch.id != 0) + return false; + if (touch.flags & TOUCH_DOWN) { + dragYStart_ = touch.y; + dragYOffsetStart_ = dragOffset_; + } + if (touch.flags & TOUCH_UP) { + dragYStart_ = -1.0f; + } + if (touch.flags & TOUCH_MOVE) { + if (dragYStart_ >= 0.0f) { + dragOffset_ = dragYOffsetStart_ + (touch.y - dragYStart_); + } + } + return true; + } + void Draw(UIContext &dc); +private: + Instant startTime_ = Instant::Now(); + double dragYStart_ = -1.0; + double dragOffset_ = 0.0; + double dragYOffsetStart_ = 0.0; +}; + void CreditsScreen::CreateViews() { using namespace UI; auto di = GetI18NCategory(I18NCat::DIALOG); auto cr = GetI18NCategory(I18NCat::PSPCREDITS); auto mm = GetI18NCategory(I18NCat::MAINMENU); - root_ = new AnchorLayout(new LayoutParams(FILL_PARENT, FILL_PARENT)); - Button *back = root_->Add(new Button(di->T("Back"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, 10, false))); + const bool portrait = UsePortraitLayout(); + + root_ = new LinearLayout(ORIENT_VERTICAL, new LayoutParams(FILL_PARENT, FILL_PARENT)); + + Button *back = root_->Add(new Button(di->T("Back"))); back->OnClick.Handle(this, &UIScreen::OnOK); root_->SetDefaultFocusView(back); const bool gold = System_GetPropertyBool(SYSPROP_APP_GOLD); - // Really need to redo this whole layout with some linear layouts... - - int rightYOffset = 0; - if (!System_GetPropertyBool(SYSPROP_APP_GOLD)) { - ScreenManager *sm = screenManager(); - root_->Add(new Button(mm->T("Buy PPSSPP Gold"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, 84, false)))->OnClick.Add([sm](UI::EventParams) { - LaunchBuyGold(sm); - }); - rightYOffset = 74; - } - root_->Add(new Button(cr->T("PPSSPP Forums"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 158, false)))->OnClick.Handle(this, &CreditsScreen::OnForums); - root_->Add(new Button(cr->T("Discord"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 232, false)))->OnClick.Handle(this, &CreditsScreen::OnDiscord); - root_->Add(new Button("www.ppsspp.org", new AnchorLayoutParams(260, 64, 10, NONE, NONE, 10, false)))->OnClick.Handle(this, &CreditsScreen::OnPPSSPPOrg); - root_->Add(new Button(cr->T("Privacy Policy"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 84, false)))->OnClick.Handle(this, &CreditsScreen::OnPrivacy); - root_->Add(new Button(cr->T("X @PPSSPP_emu"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, rightYOffset + 84, false)))->OnClick.Handle(this, &CreditsScreen::OnX); - -#if PPSSPP_PLATFORM(ANDROID) || PPSSPP_PLATFORM(IOS) - root_->Add(new Button(cr->T("Share PPSSPP"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, rightYOffset + 158, false)))->OnClick.Handle(this, &CreditsScreen::OnShare); -#endif - + /* if (System_GetPropertyBool(SYSPROP_APP_GOLD)) { root_->Add(new ShinyIcon(ImageID("I_ICON_GOLD"), new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, 10, 10, NONE, NONE, false)))->SetScale(1.5f); } else { root_->Add(new ImageView(ImageID("I_ICON"), "", IS_DEFAULT, new AnchorLayoutParams(WRAP_CONTENT, WRAP_CONTENT, 10, 10, NONE, NONE, false)))->SetScale(1.5f); + }*/ + + root_->Add(new CreditsScroller(new LinearLayoutParams(1.0f))); + + LinearLayout *columns = root_->Add(new LinearLayout(ORIENT_HORIZONTAL)); + + LinearLayout *left = columns->Add(new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(250.0f, WRAP_CONTENT))); + LinearLayout *middle = columns->Add(new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(1.0f))); + LinearLayout *right = columns->Add(new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(250.0f, WRAP_CONTENT))); + + int rightYOffset = 0; + if (!System_GetPropertyBool(SYSPROP_APP_GOLD)) { + ScreenManager *sm = screenManager(); + left->Add(new Choice(mm->T("Buy PPSSPP Gold")))->OnClick.Add([sm](UI::EventParams) { + LaunchBuyGold(sm); + }); + rightYOffset = 74; } -} + left->Add(new Choice(cr->T("PPSSPP Forums"), ImageID("I_LINK_OUT")))->OnClick.Add([this](UI::EventParams &e) { + System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://forums.ppsspp.org"); + }); + left->Add(new Choice(cr->T("Discord"), ImageID("I_LOGO_DISCORD")))->OnClick.Add([this](UI::EventParams &e) { + System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://discord.gg/5NJB6dD"); + }); + left->Add(new Choice("www.ppsspp.org", ImageID("I_LINK_OUT")))->OnClick.Add([this](UI::EventParams &e) { + System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org"); + }); + right->Add(new Choice(cr->T("Privacy Policy"), ImageID("I_LINK_OUT")))->OnClick.Add([this](UI::EventParams &e) { + System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org/privacy"); + }); + right->Add(new Choice(cr->T("@PPSSPP_emu"), ImageID("I_LOGO_X")))->OnClick.Add([this](UI::EventParams &e) { + System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://x.com/PPSSPP_emu"); + }); -void CreditsScreen::OnX(UI::EventParams &e) { - // Not sure we should change to x.com here, given various platform URL handlers etc. We can probably change it soon. - System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://twitter.com/PPSSPP_emu"); -} - -void CreditsScreen::OnPPSSPPOrg(UI::EventParams &e) { - System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org"); -} - -void CreditsScreen::OnPrivacy(UI::EventParams &e) { - System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org/privacy"); -} - -void CreditsScreen::OnForums(UI::EventParams &e) { - System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://forums.ppsspp.org"); -} - -void CreditsScreen::OnDiscord(UI::EventParams &e) { - System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://discord.gg/5NJB6dD"); -} - -void CreditsScreen::OnShare(UI::EventParams &e) { - auto cr = GetI18NCategory(I18NCat::PSPCREDITS); - System_ShareText(cr->T("CheckOutPPSSPP", "Check out PPSSPP, the awesome PSP emulator: https://www.ppsspp.org/")); -} - -CreditsScreen::CreditsScreen() { - startTime_ = time_now_d(); + if (System_GetPropertyBool(SYSPROP_SUPPORTS_SHARE_TEXT)) { + right->Add(new Choice(cr->T("Share PPSSPP"), ImageID("I_SHARE")))->OnClick.Add([this](UI::EventParams &e) { + auto cr = GetI18NCategory(I18NCat::PSPCREDITS); + System_ShareText(cr->T("CheckOutPPSSPP", "Check out PPSSPP, the awesome PSP emulator: https://www.ppsspp.org/")); + }); + } } void CreditsScreen::update() { @@ -982,27 +1003,7 @@ void CreditsScreen::update() { UpdateUIState(UISTATE_MENU); } -void CreditsScreen::touch(const TouchInput &touch) { - UIScreen::touch(touch); - if (touch.id != 0) - return; - - if (touch.flags & TOUCH_DOWN) { - dragYStart_ = touch.y; - dragYOffsetStart_ = dragOffset_; - } - if (touch.flags & TOUCH_UP) { - dragYStart_ = -1.0f; - } - if (touch.flags & TOUCH_MOVE) { - if (dragYStart_ >= 0.0f) { - dragOffset_ = dragYOffsetStart_ + (touch.y - dragYStart_); - } - } -} - - -void CreditsScreen::DrawForeground(UIContext &dc) { +void CreditsScroller::Draw(UIContext &dc) { auto cr = GetI18NCategory(I18NCat::PSPCREDITS); std::string specialthanksMaxim = "Maxim "; @@ -1160,25 +1161,32 @@ void CreditsScreen::DrawForeground(UIContext &dc) { credits[0] = (const char *)temp; dc.Begin(); - const Bounds &bounds = dc.GetLayoutBounds(); + const Bounds &bounds = bounds_; + bounds.Inset(10.f, 10.f); const int numItems = ARRAY_SIZE(credits); int itemHeight = 36; - int totalHeight = numItems * itemHeight + bounds.h + 200; + int contentsHeight = numItems * itemHeight + bounds.h + 200; - float t = (float)(time_now_d() - startTime_) * 60.0; + const float t = (float)(startTime_.ElapsedSeconds() * 60.0); - float y = bounds.y2() - fmodf(t - dragOffset_, (float)totalHeight); - for (int i = 0; i < numItems; i++) { - float alpha = linearInOut(y+32, 64, bounds.y2() - 192, 64); + const float yOffset = fmodf(t - dragOffset_, (float)contentsHeight); + + float y = bounds.h - yOffset; + for (int i = 0; i < numItems; i++, y += itemHeight) { + if (y + itemHeight < 0.0f) + continue; + if (y > bounds.h) + continue; + float fadeLength = 64.0f; + float alpha = linearInOut(y, 64, bounds.h - fadeLength * 2.0f, 64); uint32_t textColor = colorAlpha(dc.GetTheme().infoStyle.fgColor, alpha); if (alpha > 0.0f) { dc.SetFontScale(ease(alpha), ease(alpha)); - dc.DrawText(credits[i], bounds.centerX(), y, textColor, ALIGN_HCENTER); + dc.DrawText(credits[i], bounds.centerX(), y + bounds.y, textColor, ALIGN_HCENTER); dc.SetFontScale(1.0f, 1.0f); } - y += itemHeight; } dc.Flush(); diff --git a/UI/MiscScreens.h b/UI/MiscScreens.h index d6c20c1dfa..078323f736 100644 --- a/UI/MiscScreens.h +++ b/UI/MiscScreens.h @@ -158,27 +158,11 @@ private: class CreditsScreen : public UIDialogScreenWithBackground { public: - CreditsScreen(); void update() override; - void DrawForeground(UIContext &ui) override; - void touch(const TouchInput &touch) override; +protected: void CreateViews() override; - const char *tag() const override { return "Credits"; } - -private: - void OnPPSSPPOrg(UI::EventParams &e); - void OnPrivacy(UI::EventParams &e); - void OnForums(UI::EventParams &e); - void OnDiscord(UI::EventParams &e); - void OnShare(UI::EventParams &e); - void OnX(UI::EventParams &e); - - double startTime_ = 0.0; - double dragYStart_ = -1.0; - double dragOffset_ = 0.0; - double dragYOffsetStart_ = 0.0; }; class SettingInfoMessage : public UI::LinearLayout { diff --git a/UI/UIAtlas.cpp b/UI/UIAtlas.cpp index 9a57a20777..68f0b0d761 100644 --- a/UI/UIAtlas.cpp +++ b/UI/UIAtlas.cpp @@ -143,6 +143,12 @@ static const ImageMeta imageIDs[] = { {"I_FILE_COPY", false}, {"I_WEB_BROWSER", false}, {"I_WIFI", false}, + {"I_LOGO_X", false}, + {"I_LOGO_DISCORD", false}, + {"I_LINK_OUT", false}, + {"I_SHARE", false}, + {"I_LOGO_PLAY_STORE", false}, + {"I_LOGO_APP_STORE", false}, }; static std::string PNGNameFromID(std::string_view id) { diff --git a/android/jni/app-android.cpp b/android/jni/app-android.cpp index 70c869e263..8a29c8a002 100644 --- a/android/jni/app-android.cpp +++ b/android/jni/app-android.cpp @@ -474,6 +474,8 @@ bool System_GetPropertyBool(SystemProperty prop) { return (androidVersion >= 21) && (deviceType != DEVICE_TYPE_VR); // when ACTION_OPEN_DOCUMENT_TREE was added case SYSPROP_SUPPORTS_OPEN_FILE_IN_EDITOR: return false; // Update if we add support in FileUtil.cpp: OpenFileInEditor + case SYSPROP_SUPPORTS_SHARE_TEXT: + return true; case SYSPROP_APP_GOLD: #ifdef GOLD return true; diff --git a/assets/lang/ar_AE.ini b/assets/lang/ar_AE.ini index a61c80e46e..ca807c79a4 100644 --- a/assets/lang/ar_AE.ini +++ b/assets/lang/ar_AE.ini @@ -1127,7 +1127,6 @@ translators5 = translators6 = website = ‎الموقع الألكتروني written = ‎مكتوب في لغة C++ من أجل السرعة والمتانة -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = ‎تصفح الألعاب diff --git a/assets/lang/az_AZ.ini b/assets/lang/az_AZ.ini index 77e56211e3..a14d5b1107 100644 --- a/assets/lang/az_AZ.ini +++ b/assets/lang/az_AZ.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Check out the website: written = Written in C++ for speed and portability -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/be_BY.ini b/assets/lang/be_BY.ini index b35bed2e71..da2595f283 100644 --- a/assets/lang/be_BY.ini +++ b/assets/lang/be_BY.ini @@ -1069,7 +1069,6 @@ translators5 = translators6 = website = Азнаёмцеся з вэб-сайтам: written = Напісана на C++ для хуткасці і партатыўнасці -X @PPSSPP_emu = X @PPSSPP_emu [MemStick] Already contains PSP data = Already contains PSP data diff --git a/assets/lang/bg_BG.ini b/assets/lang/bg_BG.ini index 411fc83378..e2d33bd911 100644 --- a/assets/lang/bg_BG.ini +++ b/assets/lang/bg_BG.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Хвърлете едно око на уеб сайта ни: written = Написано в C++ за бързина и съвместимост -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/ca_ES.ini b/assets/lang/ca_ES.ini index 42d391b01f..fd34876a8b 100644 --- a/assets/lang/ca_ES.ini +++ b/assets/lang/ca_ES.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Check out the website: written = Written in C++ for speed and portability -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/cz_CZ.ini b/assets/lang/cz_CZ.ini index 43c15efac4..09f4fadc28 100644 --- a/assets/lang/cz_CZ.ini +++ b/assets/lang/cz_CZ.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Navštivte naši stránku: written = Vytvořeno v jazyce C++ pro rychlost a přenosnost -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/da_DK.ini b/assets/lang/da_DK.ini index c03df4f9aa..dadedb000a 100644 --- a/assets/lang/da_DK.ini +++ b/assets/lang/da_DK.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Mere info på webside: written = Skrevet i C++ for hastighed og portabilitet -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/de_DE.ini b/assets/lang/de_DE.ini index 495ca54e00..276ddc3141 100644 --- a/assets/lang/de_DE.ini +++ b/assets/lang/de_DE.ini @@ -1109,7 +1109,6 @@ translators5 = translators6 = website = Mehr Infos auf der Webseite: written = Programmiert in C++ für Geschwindigkeit und Portabilität -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Spiele durchsuchen diff --git a/assets/lang/dr_ID.ini b/assets/lang/dr_ID.ini index ea82720019..5a8493b018 100644 --- a/assets/lang/dr_ID.ini +++ b/assets/lang/dr_ID.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Ollongngi todai situsna mane: written = Pake C++ digaraka yamo na malassi -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/en_US.ini b/assets/lang/en_US.ini index 5b01601bf6..2b2f63a1e7 100644 --- a/assets/lang/en_US.ini +++ b/assets/lang/en_US.ini @@ -1093,7 +1093,6 @@ translators5 = translators6 = website = Check out the website: written = Written in C++ for speed and portability -X @PPSSPP_emu = X @PPSSPP_emu [MemStick] Already contains PSP data = Already contains PSP data diff --git a/assets/lang/es_ES.ini b/assets/lang/es_ES.ini index 8f42aeae43..004bec0104 100644 --- a/assets/lang/es_ES.ini +++ b/assets/lang/es_ES.ini @@ -1120,7 +1120,6 @@ translators5 = translators6 = website = Visita el sitio web: written = Escrito en C++ para una mejor portabilidad y velocidad -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Buscar juegos diff --git a/assets/lang/es_LA.ini b/assets/lang/es_LA.ini index b09a1f7b2f..cac3a7ede0 100644 --- a/assets/lang/es_LA.ini +++ b/assets/lang/es_LA.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Sitio web oficial written = Escrito en lenguaje C++ para una mejor portabilidad y velocidad -X @PPSSPP_emu = X @PPSSPP_emu [PSPSettings] diff --git a/assets/lang/fa_IR.ini b/assets/lang/fa_IR.ini index 8fbe820a16..c70e00b078 100644 --- a/assets/lang/fa_IR.ini +++ b/assets/lang/fa_IR.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = ‎:سری به وبسایت بزنید written = ‎نوشته شده است C++ برای سریع و پرتابل بودن، نرم افزار با زبان برنامه نویسی -X @PPSSPP_emu = توییتر @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/fi_FI.ini b/assets/lang/fi_FI.ini index d6a83e07ad..b2eff9808d 100644 --- a/assets/lang/fi_FI.ini +++ b/assets/lang/fi_FI.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Tutustu verkkosivustoon: written = Kirjoitettu C++:ssa nopeutta ja siirrettävyyttä varten -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Selaa pelejä diff --git a/assets/lang/fr_FR.ini b/assets/lang/fr_FR.ini index 237519a3ba..d35e30703e 100644 --- a/assets/lang/fr_FR.ini +++ b/assets/lang/fr_FR.ini @@ -1110,7 +1110,6 @@ title = Un émulateur de PSP rapide et portable tools = Outils libres utilisés : website = Visitez notre site : written = Écrit en C++ pour la vitesse et la portabilité -X @PPSSPP_emu = X de PPSSPP [RemoteISO] Browse Games = Parcourir les jeux diff --git a/assets/lang/gl_ES.ini b/assets/lang/gl_ES.ini index 78da604080..05875a2029 100644 --- a/assets/lang/gl_ES.ini +++ b/assets/lang/gl_ES.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Sitio web oficial: written = Escrito en linguaxe C++ para unha mellor portabilidade e velocidade -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/gr_EL.ini b/assets/lang/gr_EL.ini index bed0ecc463..d07c99418d 100644 --- a/assets/lang/gr_EL.ini +++ b/assets/lang/gr_EL.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Επισκεφθείτε την ιστοσελίδα: written = Γραμμένο σε C++ για ταχύτητα και φορητότητα -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Περιήγηση παιχνιδιών diff --git a/assets/lang/he_IL.ini b/assets/lang/he_IL.ini index 80eb460aa8..73336c7015 100644 --- a/assets/lang/he_IL.ini +++ b/assets/lang/he_IL.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = :כנסו אל האתר written = למהירות וניידות C++ נכתב ב -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/he_IL_invert.ini b/assets/lang/he_IL_invert.ini index 77067679bc..7ac9525770 100644 --- a/assets/lang/he_IL_invert.ini +++ b/assets/lang/he_IL_invert.ini @@ -1116,7 +1116,6 @@ translators5 = translators6 = website = רתאה לא וסנכ: written = ב בתכנ ++C תודיינו תוריהמל -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/hr_HR.ini b/assets/lang/hr_HR.ini index 6365cdc094..f4c81de01d 100644 --- a/assets/lang/hr_HR.ini +++ b/assets/lang/hr_HR.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Pogledaj stranicu: written = Napisan u C++ za brzinu i za pokretnost -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Pretraži igre diff --git a/assets/lang/hu_HU.ini b/assets/lang/hu_HU.ini index 414fdf9341..7c8746650c 100644 --- a/assets/lang/hu_HU.ini +++ b/assets/lang/hu_HU.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Nézd meg a honlapot: written = C++ban írva a sebességért és portolhatóságért -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Játékok tallózása diff --git a/assets/lang/id_ID.ini b/assets/lang/id_ID.ini index 67a6d48d38..c483944ff7 100644 --- a/assets/lang/id_ID.ini +++ b/assets/lang/id_ID.ini @@ -1119,7 +1119,6 @@ translators5 = eerdfz translators6 = XForYouX website = Kunjungi situs: written = Ditulis dalam bahasa C++ demi kecepatan dan portabilitas -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Telusuri permainan diff --git a/assets/lang/it_IT.ini b/assets/lang/it_IT.ini index 44fa97c751..75abb394fa 100644 --- a/assets/lang/it_IT.ini +++ b/assets/lang/it_IT.ini @@ -1089,7 +1089,6 @@ translators5 = translators6 = website = Da' un'occhiata al sito web: written = Scritto in C++ per velocità e portabilità -X @PPSSPP_emu = X @PPSSPP_emu [MemStick] Already contains PSP data = Contiene già dati PSP diff --git a/assets/lang/ja_JP.ini b/assets/lang/ja_JP.ini index 1fbba2c237..43028f4706 100644 --- a/assets/lang/ja_JP.ini +++ b/assets/lang/ja_JP.ini @@ -1086,7 +1086,6 @@ translators5 = translators6 = website = ウェブサイトはこちら: written = 速度と移植性を保つためにC++で書かれています -X @PPSSPP_emu = X @PPSSPP_emu [MemStick] Already contains PSP data = 既にPSPデータが存在しています。 diff --git a/assets/lang/jv_ID.ini b/assets/lang/jv_ID.ini index 4064dabb58..8f7dcb17f3 100644 --- a/assets/lang/jv_ID.ini +++ b/assets/lang/jv_ID.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Ngunjungi situs web kita: written = Ditulis dalam C++ Kanggo kacepetan lan portabilitas -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/ko_KR.ini b/assets/lang/ko_KR.ini index e1955cc777..3a0487ad67 100644 --- a/assets/lang/ko_KR.ini +++ b/assets/lang/ko_KR.ini @@ -1069,7 +1069,6 @@ translators5 = translators6 = website = 웹사이트를 확인하세요: written = 속도와 이식성을 위해 C++로 작성되었습니다. -X @PPSSPP_emu = X @PPSSPP_emu [MemStick] Already contains PSP data = 이미 PSP 데이터가 포함되어 있습니다. diff --git a/assets/lang/ku_SO.ini b/assets/lang/ku_SO.ini index e542822427..bf8a14b693 100644 --- a/assets/lang/ku_SO.ini +++ b/assets/lang/ku_SO.ini @@ -1083,7 +1083,6 @@ translators5 = translators6 = website = Check out the website: written = Written in C++ for speed and portability -X @PPSSPP_emu = X @PPSSPP_emu [MemStick] Already contains PSP data = Already contains PSP data diff --git a/assets/lang/lo_LA.ini b/assets/lang/lo_LA.ini index 69843b4b71..2fa7e8e264 100644 --- a/assets/lang/lo_LA.ini +++ b/assets/lang/lo_LA.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = ກວດສອບຂໍ້ມູນທີ່ເວັບໄຊ: written = ຂຽນໂດຍພາສາ C++ ເພື່ອປະສິດທິພາບ, ຄວາມໄວ ແລະຄວາມສະຖຽນ -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/lt-LT.ini b/assets/lang/lt-LT.ini index 9f98475cf2..a4a2e31202 100644 --- a/assets/lang/lt-LT.ini +++ b/assets/lang/lt-LT.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Check out the website: written = Parašyta C++ kalboje dėl greičio ir portabilumo -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/ms_MY.ini b/assets/lang/ms_MY.ini index da0272ab79..c32235b74d 100644 --- a/assets/lang/ms_MY.ini +++ b/assets/lang/ms_MY.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Lihat laman web: written = Ditulis dengan C++ untuk kelajuan dan mudah alih -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/nl_NL.ini b/assets/lang/nl_NL.ini index 8acd608053..33454d1474 100644 --- a/assets/lang/nl_NL.ini +++ b/assets/lang/nl_NL.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Bezoek de website: written = Geschreven in C++ voor snelheid en draagbaarheid -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Games bladeren... diff --git a/assets/lang/no_NO.ini b/assets/lang/no_NO.ini index 49196ba2b9..d49525f80d 100644 --- a/assets/lang/no_NO.ini +++ b/assets/lang/no_NO.ini @@ -1119,7 +1119,6 @@ translators5 = translators6 = website = Check out the website: written = Written in C++ for speed and portability -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/pl_PL.ini b/assets/lang/pl_PL.ini index d94aee36ff..da9460b6f6 100644 --- a/assets/lang/pl_PL.ini +++ b/assets/lang/pl_PL.ini @@ -1116,7 +1116,6 @@ translators5 = translators6 = website = Zajrzyj na stronę: written = Napisano w C++ dla wydajności i mobilności -X @PPSSPP_emu = X: @PPSSPP_emu [RemoteISO] Browse Games = Przeglądaj gry diff --git a/assets/lang/pt_BR.ini b/assets/lang/pt_BR.ini index e972e62422..2faf819f85 100644 --- a/assets/lang/pt_BR.ini +++ b/assets/lang/pt_BR.ini @@ -1092,7 +1092,6 @@ translators5 = translators6 = website = Verifique o site da web: written = Escrito em C++ pela velocidade e portabilidade -X @PPSSPP_emu = X @PPSSPP_emu [MemStick] Already contains PSP data = Já contém dados do PSP diff --git a/assets/lang/pt_PT.ini b/assets/lang/pt_PT.ini index 4f29715dc3..c1745efe49 100644 --- a/assets/lang/pt_PT.ini +++ b/assets/lang/pt_PT.ini @@ -1112,7 +1112,6 @@ translators5 = translators6 = website = Verifica o website: written = PPSSPP foi escrito em C++ pela sua velocidade e portabilidade -X @PPSSPP_emu = X @PPSSPP_emu [MemStick] Already contains PSP data = Já contém dados da PSP diff --git a/assets/lang/ro_RO.ini b/assets/lang/ro_RO.ini index 9fde751ec4..8896b0045f 100644 --- a/assets/lang/ro_RO.ini +++ b/assets/lang/ro_RO.ini @@ -1120,7 +1120,6 @@ translators5 = translators6 = website = Uitați-vă la site: written = Scris in C++ pt. viteză si portabilitate -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Browse games diff --git a/assets/lang/ru_RU.ini b/assets/lang/ru_RU.ini index d8078f91e1..15fdcceb73 100644 --- a/assets/lang/ru_RU.ini +++ b/assets/lang/ru_RU.ini @@ -1086,7 +1086,6 @@ translators5 = translators6 = website = Посетите наш веб-сайт: written = Написан на C++ для скорости и портируемости -X @PPSSPP_emu = X @PPSSPP_emu [MemStick] Already contains PSP data = Уже содержит данные PSP diff --git a/assets/lang/sv_SE.ini b/assets/lang/sv_SE.ini index 4115076fd6..65030fcd5b 100644 --- a/assets/lang/sv_SE.ini +++ b/assets/lang/sv_SE.ini @@ -1070,7 +1070,6 @@ translators5 = translators6 = website = Kolla in webbsidan: written = Skriven i C++ - prestanda och portabilitet -X @PPSSPP_emu = X @PPSSPP_emu [PSPSettings] Auto = Auto diff --git a/assets/lang/tg_PH.ini b/assets/lang/tg_PH.ini index 08e2fc4f20..47279572e6 100644 --- a/assets/lang/tg_PH.ini +++ b/assets/lang/tg_PH.ini @@ -1120,7 +1120,6 @@ translators5 = translators6 = website = Puntahan ang Website: written = Nakasulat sa C++ para sa bilis at portability -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = I-browse ang mga laro diff --git a/assets/lang/th_TH.ini b/assets/lang/th_TH.ini index d51524a129..e76d44a082 100644 --- a/assets/lang/th_TH.ini +++ b/assets/lang/th_TH.ini @@ -1138,7 +1138,6 @@ translators5 = translators6 = website = เพิ่มเติมข้อมูลได้ที่เว็บไซต์: written = เขียนโดยใช้ภาษา C++ เพื่อความรวดเร็ว และความเสถียร -X @PPSSPP_emu = ไปที่ X [RemoteISO] Browse Games = ค้นหาไปยังเกม diff --git a/assets/lang/tr_TR.ini b/assets/lang/tr_TR.ini index b442e19ea0..8147d5e1ce 100644 --- a/assets/lang/tr_TR.ini +++ b/assets/lang/tr_TR.ini @@ -1120,7 +1120,6 @@ translators5 = translators6 = website = PPSSPP.org written = Hız ve Taşınabilirlik için C++ ile Yazıldı -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Oyunlara Gözat diff --git a/assets/lang/uk_UA.ini b/assets/lang/uk_UA.ini index 5634b3282b..914d68af3a 100644 --- a/assets/lang/uk_UA.ini +++ b/assets/lang/uk_UA.ini @@ -1119,7 +1119,6 @@ translators5 = ser.gutsalyuk@gmail.com translators6 = website = Відвідайте наш веб-сайт: written = Написаний на C++ для швидкості \nта підтримці декількох платформ. -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Перегляд ігор diff --git a/assets/lang/vi_VN.ini b/assets/lang/vi_VN.ini index 390c7971b8..4abbfe2f15 100644 --- a/assets/lang/vi_VN.ini +++ b/assets/lang/vi_VN.ini @@ -1119,7 +1119,6 @@ translators5 = Huy Song Tử, translators6 = website = Xem trên website: written = Được viết bằng C++ cho tốc độ và portability -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = Duyệt games diff --git a/assets/lang/zh_CN.ini b/assets/lang/zh_CN.ini index 96dafdb873..aff80f3345 100644 --- a/assets/lang/zh_CN.ini +++ b/assets/lang/zh_CN.ini @@ -1120,7 +1120,6 @@ translators5 = wangdecode translators6 = website = 请查阅官方网站 written = 使用C++编写以保证速度与移植性 -X @PPSSPP_emu = X @PPSSPP_emu [RemoteISO] Browse Games = 浏览游戏 diff --git a/assets/lang/zh_TW.ini b/assets/lang/zh_TW.ini index b89b500e55..a6a9343bed 100644 --- a/assets/lang/zh_TW.ini +++ b/assets/lang/zh_TW.ini @@ -1086,7 +1086,6 @@ translators5 = translators6 = website = 歡迎造訪我們的網站: written = 使用 C++ 編寫,以保證建置速度和相容性 -X @PPSSPP_emu = X @PPSSPP_emu [MemStick] Already contains PSP data = 已包含 PSP 資料 diff --git a/assets/ui_images/images.svg b/assets/ui_images/images.svg index 35e7a2d517..49d30d2912 100644 --- a/assets/ui_images/images.svg +++ b/assets/ui_images/images.svg @@ -24,2804 +24,2807 @@ inkscape:pagecheckerboard="true" inkscape:deskcolor="#d1d1d1" inkscape:document-units="px" - inkscape:zoom="2.0000001" - inkscape:cx="355.74999" - inkscape:cy="544.74999" + inkscape:zoom="11.313709" + inkscape:cx="540.7157" + inkscape:cy="518.79539" inkscape:window-width="3379" inkscape:window-height="1941" inkscape:window-x="-9" inkscape:window-y="0" inkscape:window-maximized="0" - inkscape:current-layer="layer1" + inkscape:current-layer="svg1" showgrid="false" /> + + + + + .st0{fill:#000000;} + diff --git a/ios/main.mm b/ios/main.mm index bfc64a3034..cfd4fc4b31 100644 --- a/ios/main.mm +++ b/ios/main.mm @@ -371,6 +371,8 @@ bool System_GetPropertyBool(SystemProperty prop) { return true; case SYSPROP_HAS_KEYBOARD: return true; + case SYSPROP_SUPPORTS_SHARE_TEXT: + return true; case SYSPROP_KEYBOARD_IS_SOFT: // If a hardware keyboard is connected, and we add support, we could return false here. return true;