From 28e58c3d35934a96ec5d79031106647de56b381e Mon Sep 17 00:00:00 2001 From: Henrik Rydgard Date: Sun, 18 Aug 2013 22:30:34 +0200 Subject: [PATCH] Save grid/list status, fix some drawing glitches --- Core/Config.cpp | 6 ++++++ Core/Config.h | 5 +++++ UI/MainScreen.cpp | 46 ++++++++++++++++++++++++++++------------------ native | 2 +- 4 files changed, 40 insertions(+), 19 deletions(-) diff --git a/Core/Config.cpp b/Core/Config.cpp index 264ef8373e..db900c25b1 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -64,6 +64,9 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) general->Get("MaxRecent", &iMaxRecent, 12); general->Get("ScreenshotsAsPNG", &bScreenshotsAsPNG, false); general->Get("StateSlot", &iCurrentStateSlot, 0); + general->Get("GridView1", &bGridView1, true); + general->Get("GridView2", &bGridView2, true); + general->Get("GridView3", &bGridView3, true); // Fix issue from switching from uint (hex in .ini) to int (dec) if (iMaxRecent == 0) @@ -239,6 +242,9 @@ void Config::Save() general->Set("EnableCheats", bEnableCheats); general->Set("ScreenshotsAsPNG", bScreenshotsAsPNG); general->Set("StateSlot", iCurrentStateSlot); + general->Set("GridView1", bGridView1); + general->Set("GridView2", bGridView2); + general->Set("GridView3", bGridView3); IniFile::Section *cpu = iniFile.GetOrCreateSection("CPU"); cpu->Set("Jit", bJit); diff --git a/Core/Config.h b/Core/Config.h index a82b28dfcf..f0fb38b344 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -111,6 +111,11 @@ public: bool bShowDebugStats; bool bAccelerometerToAnalogHoriz; + // The three tabs. + bool bGridView1; + bool bGridView2; + bool bGridView3; + // Control int iTouchButtonOpacity; float fButtonScale; diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp index 43d12b26d4..d92ad0b83f 100644 --- a/UI/MainScreen.cpp +++ b/UI/MainScreen.cpp @@ -120,7 +120,10 @@ void GameButton::Draw(UIContext &dc) { if (HasFocus()) style = down_ ? dc.theme->itemDownStyle : dc.theme->itemFocusedStyle; + dc.Draw()->Flush(); + dc.RebindTexture(); dc.FillRect(style.background, bounds_); + dc.Draw()->Flush(); } if (texture) { @@ -167,16 +170,24 @@ void GameButton::Draw(UIContext &dc) { } dc.Draw()->DrawTexRect(x, y, x+w, y+h, 0, 0, 1, 1, color); dc.Draw()->Flush(); - dc.RebindTexture(); } + dc.Draw()->Flush(); + dc.RebindTexture(); if (!gridStyle_) { - dc.Draw()->DrawText(0, ginfo->title.c_str(), bounds_.x + 150, bounds_.centerY(), style.fgColor, ALIGN_VCENTER); - } else { + dc.Draw()->Flush(); dc.PushScissor(bounds_); - if (!texture) - dc.Draw()->DrawText(0, ginfo->title.c_str(), bounds_.x + 4, bounds_.centerY(), style.fgColor, ALIGN_VCENTER); + dc.Draw()->DrawText(0, ginfo->title.c_str(), bounds_.x + 150, bounds_.centerY(), style.fgColor, ALIGN_VCENTER); + dc.Draw()->Flush(); dc.PopScissor(); + } else if (!texture) { + dc.Draw()->Flush(); + dc.PushScissor(bounds_); + dc.Draw()->DrawText(0, ginfo->title.c_str(), bounds_.x + 4, bounds_.centerY(), style.fgColor, ALIGN_VCENTER); + dc.Draw()->Flush(); + dc.PopScissor(); + } else { + dc.Draw()->Flush(); } } @@ -279,7 +290,7 @@ void PathBrowser::Navigate(const std::string &path) { class GameBrowser : public UI::LinearLayout { public: - GameBrowser(std::string path, bool allowBrowsing, std::string lastText, std::string lastLink, UI::LayoutParams *layoutParams = 0); + GameBrowser(std::string path, bool allowBrowsing, bool *gridStyle_, std::string lastText, std::string lastLink, UI::LayoutParams *layoutParams = 0); UI::Event OnChoice; UI::Event OnHoldChoice; @@ -296,21 +307,20 @@ private: UI::ViewGroup *gameList_; PathBrowser path_; + bool *gridStyle_; bool allowBrowsing_; - bool gridStyle_; std::string lastText_; std::string lastLink_; }; -GameBrowser::GameBrowser(std::string path, bool allowBrowsing, std::string lastText, std::string lastLink, UI::LayoutParams *layoutParams) - : LinearLayout(UI::ORIENT_VERTICAL, layoutParams), path_(path), allowBrowsing_(allowBrowsing), gameList_(0), lastText_(lastText), lastLink_(lastLink) { +GameBrowser::GameBrowser(std::string path, bool allowBrowsing, bool *gridStyle, std::string lastText, std::string lastLink, UI::LayoutParams *layoutParams) + : LinearLayout(UI::ORIENT_VERTICAL, layoutParams), path_(path), allowBrowsing_(allowBrowsing), gridStyle_(gridStyle), gameList_(0), lastText_(lastText), lastLink_(lastLink) { using namespace UI; - gridStyle_ = true; Refresh(); } UI::EventReturn GameBrowser::LayoutChange(UI::EventParams &e) { - gridStyle_ = e.a == 0 ? true : false; + *gridStyle_ = e.a == 0 ? true : false; Refresh(); return UI::EVENT_DONE; } @@ -340,12 +350,12 @@ void GameBrowser::Refresh() { ChoiceStrip *layoutChoice = topBar->Add(new ChoiceStrip(ORIENT_HORIZONTAL)); layoutChoice->AddChoice("Grid"); layoutChoice->AddChoice("List"); - layoutChoice->SetSelection(gridStyle_ ? 0 : 1); + layoutChoice->SetSelection(*gridStyle_ ? 0 : 1); layoutChoice->OnChoice.Handle(this, &GameBrowser::LayoutChange); Add(topBar); } - if (gridStyle_) { + if (*gridStyle_) { gameList_ = new UI::GridLayout(UI::GridLayoutSettings(150, 85), new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)); } else { gameList_ = new UI::LinearLayout(UI::ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)); @@ -358,7 +368,7 @@ void GameBrowser::Refresh() { if (path_.GetPath() == "!RECENT") { for (size_t i = 0; i < g_Config.recentIsos.size(); i++) { - gameButtons.push_back(new GameButton(g_Config.recentIsos[i], gridStyle_)); + gameButtons.push_back(new GameButton(g_Config.recentIsos[i], *gridStyle_)); } } else { std::vector fileInfo; @@ -369,7 +379,7 @@ void GameBrowser::Refresh() { if (allowBrowsing_) dirButtons.push_back(new UI::Button(fileInfo[i].name.c_str(), new UI::LinearLayoutParams(UI::FILL_PARENT, UI::FILL_PARENT))); } else { - gameButtons.push_back(new GameButton(fileInfo[i].fullName, gridStyle_, new UI::LinearLayoutParams(gridStyle_ == true ? UI::WRAP_CONTENT : UI::FILL_PARENT, UI::WRAP_CONTENT))); + gameButtons.push_back(new GameButton(fileInfo[i].fullName, *gridStyle_, new UI::LinearLayoutParams(*gridStyle_ == true ? UI::WRAP_CONTENT : UI::FILL_PARENT, UI::WRAP_CONTENT))); } } } @@ -441,12 +451,12 @@ void MainScreen::CreateViews() { ScrollView *scrollHomebrew = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)); GameBrowser *tabRecentGames = new GameBrowser( - "!RECENT", false, m->T("How to get games"), "http://www.ppsspp.org/faq.html", + "!RECENT", false, &g_Config.bGridView1, m->T("How to get games"), "http://www.ppsspp.org/faq.html", new LinearLayoutParams(FILL_PARENT, FILL_PARENT)); - GameBrowser *tabAllGames = new GameBrowser(g_Config.currentDirectory, true, + GameBrowser *tabAllGames = new GameBrowser(g_Config.currentDirectory, true, &g_Config.bGridView2, m->T("How to get games"), "http://www.ppsspp.org/faq.html", new LinearLayoutParams(FILL_PARENT, FILL_PARENT)); - GameBrowser *tabHomebrew = new GameBrowser(g_Config.memCardDirectory + "PSP/GAME/", false, + GameBrowser *tabHomebrew = new GameBrowser(g_Config.memCardDirectory + "PSP/GAME/", false, &g_Config.bGridView3, "", "", new LinearLayoutParams(FILL_PARENT, FILL_PARENT)); diff --git a/native b/native index 2d6f742694..267f105261 160000 --- a/native +++ b/native @@ -1 +1 @@ -Subproject commit 2d6f742694d1de6d58ee99af3707c9592671311b +Subproject commit 267f1052611ecf280aad00d1fba650caf3220c24