From cc9a739fafa3778719b7dcb1eb809592465a7d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sat, 18 Sep 2021 22:54:38 +0200 Subject: [PATCH] Fix the look of buttons with images. Use one. --- Common/UI/View.cpp | 22 +++++++++++++++++++--- UI/MemStickScreen.cpp | 13 ++++++++----- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/Common/UI/View.cpp b/Common/UI/View.cpp index 435487b3f0..bc9b421fdc 100644 --- a/Common/UI/View.cpp +++ b/Common/UI/View.cpp @@ -730,8 +730,22 @@ void Button::GetContentDimensions(const UIContext &dc, float &w, float &h) const if (imageID_.isValid()) { dc.Draw()->GetAtlas()->measureImage(imageID_, &w, &h); } else { - dc.MeasureText(dc.theme->uiFont, 1.0f, 1.0f, text_.c_str(), &w, &h); + w = 0.0f; + h = 0.0f; } + + if (!text_.empty() && !ignoreText_) { + float width = 0.0f; + float height = 0.0f; + dc.MeasureText(dc.theme->uiFont, 1.0f, 1.0f, text_.c_str(), &width, &height); + + w += width; + if (imageID_.isValid()) { + w += paddingW_; + } + h = std::max(h, height); + } + // Add some internal padding to not look totally ugly w += paddingW_; h += paddingH_; @@ -772,13 +786,15 @@ void Button::Draw(UIContext &dc) { if (imageID_.isValid() && (ignoreText_ || text_.empty())) { dc.Draw()->DrawImage(imageID_, bounds_.centerX(), bounds_.centerY(), scale_, 0xFFFFFFFF, ALIGN_CENTER); } else if (!text_.empty()) { - dc.DrawText(text_.c_str(), bounds_.centerX(), bounds_.centerY(), style.fgColor, ALIGN_CENTER); + float textX = bounds_.centerX(); if (imageID_.isValid()) { const AtlasImage *img = dc.Draw()->GetAtlas()->getImage(imageID_); if (img) { - dc.Draw()->DrawImage(imageID_, bounds_.centerX() - tw / 2 - 5 - img->w / 2, bounds_.centerY(), 1.0f, 0xFFFFFFFF, ALIGN_CENTER); + dc.Draw()->DrawImage(imageID_, bounds_.centerX() - tw / 2 - 5, bounds_.centerY(), 1.0f, 0xFFFFFFFF, ALIGN_CENTER); + textX += img->w / 2.0f; } } + dc.DrawText(text_.c_str(), textX, bounds_.centerY(), style.fgColor, ALIGN_CENTER); } dc.SetFontScale(1.0f, 1.0f); diff --git a/UI/MemStickScreen.cpp b/UI/MemStickScreen.cpp index 2ad4caf80e..c382d17a1b 100644 --- a/UI/MemStickScreen.cpp +++ b/UI/MemStickScreen.cpp @@ -136,29 +136,32 @@ void MemStickScreen::CreateViews() { // TODO: Gonna need a scroll view. #if PPSSPP_PLATFORM(ANDROID) if (!System_GetPropertyBool(SYSPROP_ANDROID_SCOPED_STORAGE)) { - leftColumn->Add(new Choice(iz->T("Use PSP folder at root of storage")))->OnClick.Handle(this, &MemStickScreen::OnUseStorageRoot); + leftColumn->Add(new Button(iz->T("Use PSP folder at root of storage")))->OnClick.Handle(this, &MemStickScreen::OnUseStorageRoot); leftColumn->Add(new TextView(iz->T("DataWillStay", "Data will stay even if you uninstall PPSSPP.")))->SetBullet(true); leftColumn->Add(new TextView(iz->T("DataCanBeShared", "Data can be shared between PPSSPP regular/Gold.")))->SetBullet(true); leftColumn->Add(new TextView(iz->T("EasyUSBAccess", "Easy USB access")))->SetBullet(true); } -#endif // Let's only offer the browse-for-folder choice on Android 10 or later. // Earlier versions often don't really have working folder browsers. bool storageBrowserWorking = System_GetPropertyInt(SYSPROP_SYSTEMVERSION) >= 29; +#else + // For testing UI only + bool storageBrowserWorking = true; +#endif if (storageBrowserWorking) { - leftColumn->Add(new Choice(iz->T("Create or Choose a PSP folder")))->OnClick.Handle(this, &MemStickScreen::OnBrowse); + leftColumn->Add(new Button(iz->T("Create or Choose a PSP folder"), ImageID("I_FOLDER")))->OnClick.Handle(this, &MemStickScreen::OnBrowse); leftColumn->Add(new TextView(iz->T("DataWillStay", "Data will stay even if you uninstall PPSSPP.")))->SetBullet(true); leftColumn->Add(new TextView(iz->T("DataCanBeShared", "Data can be shared between PPSSPP regular/Gold.")))->SetBullet(true); leftColumn->Add(new TextView(iz->T("EasyUSBAccess", "Easy USB access")))->SetBullet(true); } else { - leftColumn->Add(new Choice(iz->T("Manually specify PSP folder")))->OnClick.Handle(this, &MemStickScreen::OnSetFolderManually); + leftColumn->Add(new Button(iz->T("Manually specify PSP folder")))->OnClick.Handle(this, &MemStickScreen::OnSetFolderManually); leftColumn->Add(new TextView(iz->T("DataWillStay", "Data will stay even if you uninstall PPSSPP.")))->SetBullet(true); leftColumn->Add(new TextView(iz->T("DataCanBeShared", "Data can be shared between PPSSPP regular/Gold.")))->SetBullet(true); } - leftColumn->Add(new Choice(iz->T("Use App Private Directory")))->OnClick.Handle(this, &MemStickScreen::OnUseInternalStorage); + leftColumn->Add(new Button(iz->T("Use App Private Directory")))->OnClick.Handle(this, &MemStickScreen::OnUseInternalStorage); // Consider https://www.compart.com/en/unicode/U+26A0 (unicode warning sign?)? or a graphic? leftColumn->Add(new TextView(iz->T("DataWillBeLostOnUninstall", "Warning! Data will be lost when you uninstall PPSSPP!")))->SetBullet(true); leftColumn->Add(new TextView(iz->T("DataCannotBeShared", "Data CANNOT be shared between PPSSPP regular/Gold!")))->SetBullet(true);