UI tweaks. Change to cleaner background image.

This commit is contained in:
Henrik Rydgard 2013-08-20 00:49:25 +02:00
parent 1559b4404a
commit b186294132
30 changed files with 33968 additions and 33854 deletions

1
.gitignore vendored
View File

@ -23,6 +23,7 @@ Debug
Release
Windows/x64
Windows/ipch
ui_atlas.zim.png
# For Mac
.DS_Store

View File

@ -57,11 +57,11 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename)
general->Get("ConfirmOnQuit", &bConfirmOnQuit, false);
general->Get("IgnoreBadMemAccess", &bIgnoreBadMemAccess, true);
general->Get("CurrentDirectory", &currentDirectory, "");
general->Get("ShowDebuggerOnLoad", &bShowDebuggerOnLoad, false);
general->Get("DebuggerOnLoad", &bShowDebuggerOnLoad, false);
general->Get("Language", &languageIni, "en_US");
general->Get("NumWorkerThreads", &iNumWorkerThreads, cpu_info.num_cores);
general->Get("EnableCheats", &bEnableCheats, false);
general->Get("MaxRecent", &iMaxRecent, 12);
general->Get("MaxRecent", &iMaxRecent, 30);
general->Get("ScreenshotsAsPNG", &bScreenshotsAsPNG, false);
general->Get("StateSlot", &iCurrentStateSlot, 0);
general->Get("GridView1", &bGridView1, true);

View File

@ -215,6 +215,7 @@ void __DisplayFireVblank() {
}
}
// TODO: Also average actualFps
void __DisplayGetFPS(float *out_vps, float *out_fps, float *out_actual_fps) {
*out_vps = fps;
*out_fps = flips;
@ -240,8 +241,7 @@ void CalculateFPS() {
time_update();
double now = time_now_d();
if (now >= lastFpsTime + 1.0)
{
if (now >= lastFpsTime + 1.0) {
double frames = (gpuStats.numVBlanks - lastFpsFrame);
actualFps = (actualFlips - lastActualFlips);
@ -433,6 +433,10 @@ void hleEnterVblank(u64 userdata, int cyclesLate) {
// non-buffered rendering. The interaction with frame skipping seems to need
// some work.
if (gpu->FramebufferDirty()) {
if (g_Config.iShowFPSCounter) {
CalculateFPS();
}
// Setting CORE_NEXTFRAME causes a swap.
// Check first though, might've just quit / been paused.
if (gpu->FramebufferReallyDirty()) {
@ -501,6 +505,7 @@ u32 sceDisplaySetMode(int displayMode, int displayWidth, int displayHeight) {
return 0;
}
// Some games (GTA) never call this during gameplay, so bad place to put a framerate counter.
u32 sceDisplaySetFramebuf(u32 topaddr, int linesize, int pixelformat, int sync) {
FrameBufferState fbstate;
DEBUG_LOG(HLE,"sceDisplaySetFramebuf(topaddr=%08x,linesize=%d,pixelsize=%d,sync=%d)", topaddr, linesize, pixelformat, sync);
@ -512,10 +517,6 @@ u32 sceDisplaySetFramebuf(u32 topaddr, int linesize, int pixelformat, int sync)
fbstate.pspFramebufLinesize = linesize;
}
if (g_Config.iShowFPSCounter) {
CalculateFPS();
}
if (topaddr != framebuf.topaddr) {
if (g_Config.iForceMaxEmulatedFPS) {
u64 now = CoreTiming::GetTicks();

View File

@ -213,7 +213,7 @@ void KeyMappingNewKeyDialog::CreatePopupContents(UI::ViewGroup *parent) {
std::string pspButtonName = KeyMap::GetPspButtonName(this->pspBtn_);
parent->Add(new TextView(std::string(keyI18N->T("Map a new key for ")) + pspButtonName));
parent->Add(new TextView(std::string(keyI18N->T("Map a new key for ")) + pspButtonName, new LinearLayoutParams(Margins(10,0))));
}
void KeyMappingNewKeyDialog::key(const KeyInput &key) {
@ -221,6 +221,11 @@ void KeyMappingNewKeyDialog::key(const KeyInput &key) {
if (key.keyCode == NKCODE_EXT_MOUSEBUTTON_1) {
return;
}
if (key.keyCode == NKCODE_ESCAPE) {
screenManager()->finishDialog(this, DR_CANCEL);
return;
}
KeyDef kdf(key.deviceId, key.keyCode);
screenManager()->finishDialog(this, DR_OK);

View File

@ -34,7 +34,8 @@ private:
class KeyMappingNewKeyDialog : public PopupScreen {
public:
explicit KeyMappingNewKeyDialog(int btn, bool replace, std::function<void(KeyDef)> callback) : PopupScreen("Map Key"), callback_(callback) {
explicit KeyMappingNewKeyDialog(int btn, bool replace, std::function<void(KeyDef)> callback)
: PopupScreen("Map Key", "Cancel", ""), callback_(callback) {
pspBtn_ = btn;
}
@ -45,7 +46,7 @@ protected:
void CreatePopupContents(UI::ViewGroup *parent);
virtual bool FillVertical() { return false; }
virtual bool ShowButtons() { return false; }
virtual bool ShowButtons() { return true; }
virtual void OnCompleted(DialogResult result) {}
private:

View File

@ -510,7 +510,7 @@ void EmuScreen::render() {
case 2:
sprintf(fpsbuf, "FPS: %0.1f", actual_fps); break;
case 3:
sprintf(fpsbuf, "%0.1f/%0.0f (%0.1f%%)", actual_fps, fps, vps / 60.0f * 100.0f); break;
sprintf(fpsbuf, "%0.0f/%0.0f (%0.1f%%)", actual_fps, fps, vps / 60.0f * 100.0f); break;
}
ui_draw2d.SetFontScale(0.7f, 0.7f);
ui_draw2d.DrawText(UBUNTU24, fpsbuf, dp_xres - 8, 12, 0xc0000000, ALIGN_TOPRIGHT);

View File

@ -24,6 +24,7 @@
#include "file/zip_read.h"
#include "image/png_load.h"
#include "thread/prioritizedworkqueue.h"
#include "Common/StringUtils.h"
#include "GameInfoCache.h"
#include "Core/FileSystems/ISOFileSystem.h"
#include "Core/FileSystems/DirectoryFileSystem.h"
@ -286,9 +287,14 @@ public:
ReadFileToString(&umd, "/PSP_GAME/PIC1.PNG", &info_->pic1TextureData, &info_->lock);
break;
}
default:
;
{
std::string fn, ext;
SplitPath(gamePath_, 0, &fn, &ext);
info_->title = fn + "." + ext;
}
break;
}
// probably only want these when we ask for the background image...
// should maybe flip the flag to "onlyIcon"

View File

@ -221,7 +221,8 @@ void GameSettingsScreen::CreateViews() {
// Graphics
ViewGroup *graphicsSettingsScroll = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT));
ViewGroup *graphicsSettings = new LinearLayout(ORIENT_VERTICAL);
LinearLayout *graphicsSettings = new LinearLayout(ORIENT_VERTICAL);
graphicsSettings->SetSpacing(0);
graphicsSettingsScroll->Add(graphicsSettings);
tabHolder->AddTab(ms->T("Graphics"), graphicsSettingsScroll);
@ -282,7 +283,8 @@ void GameSettingsScreen::CreateViews() {
// Audio
ViewGroup *audioSettingsScroll = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT));
ViewGroup *audioSettings = new LinearLayout(ORIENT_VERTICAL);
LinearLayout *audioSettings = new LinearLayout(ORIENT_VERTICAL);
audioSettings->SetSpacing(0);
audioSettingsScroll->Add(audioSettings);
tabHolder->AddTab(ms->T("Audio"), audioSettingsScroll);
@ -292,13 +294,14 @@ void GameSettingsScreen::CreateViews() {
audioSettings->Add(new PopupSliderChoice(&g_Config.iSFXVolume, 0, 8, a->T("SFX volume"), screenManager()));
audioSettings->Add(new PopupSliderChoice(&g_Config.iBGMVolume, 0, 8, a->T("BGM volume"), screenManager()));
audioSettings->Add(new CheckBox(&g_Config.bEnableSound, a->T("Enable Sound")));
audioSettings->Add(new CheckBox(&g_Config.bEnableAtrac3plus, a->T("Enable Atrac3+")));
// Control
ViewGroup *controlsSettingsScroll = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT));
ViewGroup *controlsSettings = new LinearLayout(ORIENT_VERTICAL);
LinearLayout *controlsSettings = new LinearLayout(ORIENT_VERTICAL);
controlsSettings->SetSpacing(0);
controlsSettingsScroll->Add(controlsSettings);
tabHolder->AddTab(ms->T("Controls"), controlsSettingsScroll);
controlsSettings->Add(new Choice(gs->T("Control Mapping")))->OnClick.Handle(this, &GameSettingsScreen::OnControlMapping);
@ -310,7 +313,8 @@ void GameSettingsScreen::CreateViews() {
// System
ViewGroup *systemSettingsScroll = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT));
ViewGroup *systemSettings = new LinearLayout(ORIENT_VERTICAL);
LinearLayout *systemSettings = new LinearLayout(ORIENT_VERTICAL);
systemSettings->SetSpacing(0);
systemSettingsScroll->Add(systemSettings);
tabHolder->AddTab(ms->T("System"), systemSettingsScroll);
@ -433,6 +437,7 @@ void GlobalSettingsScreen::CreateViews() {
I18NCategory *gs = GetI18NCategory("Graphics");
LinearLayout *list = root_->Add(new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(1.0f)));
list->SetSpacing(0);
list->Add(new ItemHeader(g->T("General")));
list->Add(new CheckBox(&enableReports_, s->T("Enable Compatibility Server Reports")));
#ifndef ANDROID
@ -508,6 +513,7 @@ void DeveloperToolsScreen::CreateViews() {
I18NCategory *a = GetI18NCategory("Audio");
LinearLayout *list = root_->Add(new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(1.0f)));
list->SetSpacing(0);
list->Add(new ItemHeader(g->T("General")));
list->Add(new Choice(g->T("System Information")))->OnClick.Handle(this, &DeveloperToolsScreen::OnSysInfo);
list->Add(new Choice(d->T("Run CPU Tests")))->OnClick.Handle(this, &DeveloperToolsScreen::OnRunCPUTests);
@ -515,6 +521,7 @@ void DeveloperToolsScreen::CreateViews() {
list->Add(new CheckBox(&g_Config.bSoftwareRendering, gs->T("Software Rendering", "Software Rendering (experimental)")));
#endif
list->Add(new CheckBox(&enableLogging_, d->T("Enable Logging")))->OnClick.Handle(this, &DeveloperToolsScreen::OnLoggingChanged);
list->Add(new ItemHeader(g->T("Language")));
list->Add(new Choice(d->T("Load language ini")))->OnClick.Handle(this, &DeveloperToolsScreen::OnLoadLanguageIni);
list->Add(new Choice(d->T("Save language ini")))->OnClick.Handle(this, &DeveloperToolsScreen::OnSaveLanguageIni);
list->Add(new Choice(g->T("Back")))->OnClick.Handle(this, &DeveloperToolsScreen::OnBack);

View File

@ -150,12 +150,14 @@ void GameButton::Draw(UIContext &dc) {
y += txOffset * 2;
}
if (HasFocus()) {
// dc.Draw()->DrawImage4Grid(I_DROP_SHADOW, x - dropsize, y, x+w + dropsize, y+h+dropsize*1.5, alphaMul(color, 0.5f), 1.0f);
// dc.Draw()->Flush();
dc.Draw()->Flush();
dc.RebindTexture();
dc.Draw()->DrawImage4Grid(I_DROP_SHADOW, x - dropsize*1.5f, y - dropsize*1.5f, x+w + dropsize*1.5f, y+h+dropsize*1.5f, alphaMul(color, 1.0f), 1.0f);
dc.Draw()->Flush();
} else {
dc.Draw()->Flush();
dc.RebindTexture();
dc.Draw()->DrawImage4Grid(dc.theme->dropShadow4Grid, x - dropsize, y, x+w + dropsize, y+h+dropsize*1.5, alphaMul(shadowColor, 0.5f), 1.0f);
dc.Draw()->DrawImage4Grid(dc.theme->dropShadow4Grid, x - dropsize, y - dropsize*0.5f, x+w + dropsize, y+h+dropsize*1.5, alphaMul(shadowColor, 0.5f), 1.0f);
dc.Draw()->Flush();
}
}
@ -332,6 +334,8 @@ UI::EventReturn GameBrowser::LastClick(UI::EventParams &e) {
UI::EventReturn GameBrowser::HomeClick(UI::EventParams &e) {
path_.SetPath(g_Config.memCardDirectory);
g_Config.currentDirectory = path_.GetPath();
Refresh();
return UI::EVENT_DONE;
}
@ -343,13 +347,13 @@ void GameBrowser::Refresh() {
if (allowBrowsing_) {
LinearLayout *topBar = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT));
topBar->Add(new TextView(path_.GetFriendlyPath().c_str(), ALIGN_VCENTER, 1.0f, new LinearLayoutParams(WRAP_CONTENT, FILL_PARENT, 1.0f)));
topBar->Add(new TextView(path_.GetFriendlyPath().c_str(), ALIGN_VCENTER, 0.7f, new LinearLayoutParams(WRAP_CONTENT, FILL_PARENT, 1.0f)));
#ifdef ANDROID
topBar->Add(new Choice("Home"))->OnClick.Handle(this, &GameBrowser::HomeClick);
#endif
ChoiceStrip *layoutChoice = topBar->Add(new ChoiceStrip(ORIENT_HORIZONTAL));
layoutChoice->AddChoice("Grid");
layoutChoice->AddChoice("List");
layoutChoice->AddChoice(I_GRID);
layoutChoice->AddChoice(I_LINES);
layoutChoice->SetSelection(*gridStyle_ ? 0 : 1);
layoutChoice->OnChoice.Handle(this, &GameBrowser::LayoutChange);
Add(topBar);
@ -382,6 +386,18 @@ void GameBrowser::Refresh() {
gameButtons.push_back(new GameButton(fileInfo[i].fullName, *gridStyle_, new UI::LinearLayoutParams(*gridStyle_ == true ? UI::WRAP_CONTENT : UI::FILL_PARENT, UI::WRAP_CONTENT)));
}
}
// Put RAR/ZIP files at the end to get them out of the way. They're only shown so that people
// can click them and get an explanation that they need to unpack them. This is necessary due
// to a flood of support email...
if (allowBrowsing_) {
fileInfo.clear();
path_.GetListing(fileInfo, "zip:rar:r01:");
for (size_t i = 0; i < fileInfo.size(); i++) {
if (!fileInfo[i].isDirectory) {
gameButtons.push_back(new GameButton(fileInfo[i].fullName, *gridStyle_, new UI::LinearLayoutParams(*gridStyle_ == true ? UI::WRAP_CONTENT : UI::FILL_PARENT, UI::WRAP_CONTENT)));
}
}
}
}
if (allowBrowsing_)
@ -439,7 +455,7 @@ void MainScreen::CreateViews() {
I18NCategory *m = GetI18NCategory("MainMenu");
Margins actionMenuMargins(0, 80, 15, 0);
Margins actionMenuMargins(0, 0, 10, 0);
root_ = new LinearLayout(ORIENT_HORIZONTAL);
@ -487,9 +503,21 @@ void MainScreen::CreateViews() {
ViewGroup *rightColumn = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(300, FILL_PARENT, actionMenuMargins));
root_->Add(rightColumn);
ViewGroup *rightColumnItems = new LinearLayout(ORIENT_VERTICAL);
LinearLayout *rightColumnItems = new LinearLayout(ORIENT_VERTICAL);
rightColumn->Add(rightColumnItems);
char versionString[256];
sprintf(versionString, "%s", PPSSPP_GIT_VERSION);
rightColumnItems->SetSpacing(0.0f);
LinearLayout *logos = new LinearLayout(ORIENT_HORIZONTAL);
#ifdef GOLD
logos->Add(new ImageView(I_ICONGOLD, new AnchorLayoutParams(64, 64, 10, 10, NONE, NONE, false)));
#else
logos->Add(new ImageView(I_ICON, IS_DEFAULT, new AnchorLayoutParams(64, 64, 10, 10, NONE, NONE, false)));
#endif
logos->Add(new ImageView(I_LOGO, IS_DEFAULT, new LinearLayoutParams(Margins(-12, 0, 0, 0))));
rightColumnItems->Add(logos);
rightColumnItems->Add(new TextView(versionString, new LinearLayoutParams(Margins(70, -6, 0, 0))))->SetTextScale(0.5f);
#if defined(_WIN32) || defined(USING_QT_UI)
rightColumnItems->Add(new Choice(m->T("Load","Load...")))->OnClick.Handle(this, &MainScreen::OnLoadFile);
#endif
@ -497,6 +525,7 @@ void MainScreen::CreateViews() {
rightColumnItems->Add(new Choice(m->T("Main Settings")))->OnClick.Handle(this, &MainScreen::OnSettings);
rightColumnItems->Add(new Choice(m->T("Exit")))->OnClick.Handle(this, &MainScreen::OnExit);
rightColumnItems->Add(new Choice(m->T("Credits")))->OnClick.Handle(this, &MainScreen::OnCredits);
rightColumnItems->Add(new Choice(m->T("www.ppsspp.org")))->OnClick.Handle(this, &MainScreen::OnPPSSPPOrg);
rightColumnItems->Add(new Choice(m->T("Support PPSSPP")))->OnClick.Handle(this, &MainScreen::OnSupport);
}
@ -563,6 +592,16 @@ UI::EventReturn MainScreen::OnSupport(UI::EventParams &e) {
return UI::EVENT_DONE;
}
UI::EventReturn MainScreen::OnPPSSPPOrg(UI::EventParams &e) {
LaunchBrowser("http://www.ppsspp.org");
return UI::EVENT_DONE;
}
UI::EventReturn MainScreen::OnForums(UI::EventParams &e) {
LaunchBrowser("http://forums.ppsspp.org");
return UI::EVENT_DONE;
}
UI::EventReturn MainScreen::OnExit(UI::EventParams &e) {
NativeShutdown();
exit(0);

View File

@ -44,6 +44,8 @@ private:
UI::EventReturn OnGameSettings(UI::EventParams &e);
UI::EventReturn OnCredits(UI::EventParams &e);
UI::EventReturn OnSupport(UI::EventParams &e);
UI::EventReturn OnPPSSPPOrg(UI::EventParams &e);
UI::EventReturn OnForums(UI::EventParams &e);
UI::EventReturn OnExit(UI::EventParams &e);
};

View File

@ -293,7 +293,8 @@ void LogoScreen::render() {
sprintf(temp, "%s Henrik Rydgård", c->T("created", "Created by"));
dc.Draw()->SetFontScale(1.5f, 1.5f);
dc.Draw()->DrawTextShadow(UBUNTU48, "PPSSPP", dp_xres / 2, dp_yres / 2 - 30, colorAlpha(0xFFFFFFFF, alphaText), ALIGN_CENTER);
dc.Draw()->DrawImage(I_LOGO, dp_xres / 2, dp_yres / 2 - 30, 1.5f, colorAlpha(0xFFFFFFFF, alphaText), ALIGN_CENTER);
//dc.Draw()->DrawTextShadow(UBUNTU48, "PPSSPP", dp_xres / 2, dp_yres / 2 - 30, colorAlpha(0xFFFFFFFF, alphaText), ALIGN_CENTER);
dc.Draw()->SetFontScale(1.0f, 1.0f);
dc.Draw()->DrawTextShadow(UBUNTU24, temp, dp_xres / 2, dp_yres / 2 + 40, colorAlpha(0xFFFFFFFF, alphaText), ALIGN_CENTER);
dc.Draw()->DrawTextShadow(UBUNTU24, c->T("license", "Free Software under GPL 2.0"), dp_xres / 2, dp_yres / 2 + 70, colorAlpha(0xFFFFFFFF, alphaText), ALIGN_CENTER);
@ -334,11 +335,41 @@ void SystemInfoScreen::CreateViews() {
}
}
void CreditsScreen::CreateViews() {
using namespace UI;
I18NCategory *g = GetI18NCategory("General");
root_ = new AnchorLayout(new LayoutParams(FILL_PARENT, FILL_PARENT));
root_->Add(new Button("OK", new AnchorLayoutParams(200, 50, NONE, NONE, 10, 10, false)))->OnClick.Handle(this, &CreditsScreen::OnOK);
root_->Add(new Button(g->T("Back"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, 10, false)))->OnClick.Handle(this, &CreditsScreen::OnOK);
#ifndef GOLD
root_->Add(new Button(g->T("Buy Gold"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 10, false)))->OnClick.Handle(this, &CreditsScreen::OnSupport);
#endif
root_->Add(new Button(g->T("PPSSPP Forums"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 84, false)))->OnClick.Handle(this, &CreditsScreen::OnForums);
root_->Add(new Button("www.ppsspp.org", new AnchorLayoutParams(260, 64, 10, NONE, NONE, 158, false)))->OnClick.Handle(this, &CreditsScreen::OnPPSSPPOrg);
#ifdef GOLD
root_->Add(new ImageView(I_ICONGOLD, new AnchorLayoutParams(100, 64, 10, 10, NONE, NONE, false)));
#else
root_->Add(new ImageView(I_ICON, IS_DEFAULT, new AnchorLayoutParams(100, 64, 10, 10, NONE, NONE, false)));
#endif
}
UI::EventReturn CreditsScreen::OnSupport(UI::EventParams &e) {
#ifdef ANDROID
LaunchBrowser("market://details?id=org.ppsspp.ppssppgold");
#else
LaunchBrowser("http://central.ppsspp.org/buygold");
#endif
return UI::EVENT_DONE;
}
UI::EventReturn CreditsScreen::OnPPSSPPOrg(UI::EventParams &e) {
LaunchBrowser("http://www.ppsspp.org");
return UI::EVENT_DONE;
}
UI::EventReturn CreditsScreen::OnForums(UI::EventParams &e) {
LaunchBrowser("http://forums.ppsspp.org");
return UI::EVENT_DONE;
}
UI::EventReturn CreditsScreen::OnOK(UI::EventParams &e) {
@ -407,6 +438,9 @@ void CreditsScreen::render() {
c->T("specialthanks", "Special thanks to:"),
"Keith Galocy at nVidia (hw, advice)",
"Orphis (build server)",
"angelxwind (iOS build server)",
"solarmystic (testing)",
"all the forum mods",
"",
"",
c->T("written", "Written in C++ for speed and portability"),

View File

@ -100,6 +100,10 @@ public:
private:
UI::EventReturn OnOK(UI::EventParams &e);
UI::EventReturn OnSupport(UI::EventParams &e);
UI::EventReturn OnPPSSPPOrg(UI::EventParams &e);
UI::EventReturn OnForums(UI::EventParams &e);
int frames_;
};

View File

@ -403,8 +403,8 @@ void NativeInitGraphics() {
theme.uiFont = UBUNTU24;
theme.uiFontSmall = UBUNTU24;
theme.uiFontSmaller = UBUNTU24;
theme.buttonImage = I_BUTTON;
theme.buttonSelected = I_BUTTON_SELECTED;
theme.buttonImage = I_SOLIDWHITE; // not using classic buttons
theme.buttonSelected = I_SOLIDWHITE;
theme.checkOn = I_CHECKEDBOX;
theme.checkOff = I_SQUARE;
@ -415,10 +415,11 @@ void NativeInitGraphics() {
ui_theme.uiFontSmaller = UBUNTU24;
ui_theme.checkOn = I_CHECKEDBOX;
ui_theme.checkOff = I_SQUARE;
ui_theme.whiteImage = SOLIDWHITE;
ui_theme.whiteImage = I_SOLIDWHITE;
ui_theme.sliderKnob = I_CIRCLE;
ui_theme.dropShadow4Grid = I_DROP_SHADOW;
/*
ui_theme.buttonStyle.background = UI::Drawable(UI::DRAW_4GRID, I_BUTTON);
ui_theme.buttonStyle.fgColor = 0xFFFFFFFF;
ui_theme.buttonStyle.image = I_BUTTON;
@ -428,6 +429,7 @@ void NativeInitGraphics() {
ui_theme.buttonDownStyle.fgColor = 0xFFFFFFFF;
ui_theme.buttonDisabledStyle.background = UI::Drawable(UI::DRAW_4GRID, I_BUTTON, 0xFF404040);
ui_theme.buttonDisabledStyle.fgColor = 0xFF707070;
*/
ui_theme.itemStyle.background = UI::Drawable(0x55000000);
ui_theme.itemStyle.fgColor = 0xFFFFFFFF;

File diff suppressed because it is too large Load Diff

View File

@ -5,11 +5,10 @@
// FONTS_ui
#define UBUNTU24 0
#define UBUNTU48 1
// IMAGES_ui
#define SOLIDWHITE 0
#define I_SOLIDWHITE 0
#define I_CROSS 1
#define I_CIRCLE 2
#define I_SQUARE 3
@ -27,12 +26,12 @@
#define I_BG 15
#define I_L 16
#define I_R 17
#define I_BUTTON 18
#define I_BUTTON_SELECTED 19
#define I_ICON_UMD 20
#define I_ICON_FOLDER 21
#define I_ICON_EXE 22
#define I_DROP_SHADOW 23
#define I_DROP_SHADOW 18
#define I_LINES 19
#define I_GRID 20
#define I_LOGO 21
#define I_ICON 22
#define I_ICONGOLD 23
extern const Atlas ui_atlas;

View File

@ -221,7 +221,7 @@ bool CtrlDisAsmView::getDisasmAddressText(u32 address, char* dest, bool abbrevia
return false;
}
} else {
sprintf(dest,"%08X %08X",address,Memory::ReadUnchecked_U32(address));
sprintf(dest,"%08X %08X",address,Memory::Read_U32(address));
return false;
}
}

Binary file not shown.

Binary file not shown.

View File

@ -1,8 +1,7 @@
2048
font UBUNTU24 C:/Windows/Fonts/Roboto-Condensed.ttf UWER 34 -2
font UBUNTU24 C:/Windows/Fonts/ARIALUNI.ttf UWEhkcRGHK 30 0
font UBUNTU48 source_assets/font/zrnic.ttf UW 55
image SOLIDWHITE white.png copy
image I_SOLIDWHITE white.png copy
image I_CROSS source_assets/image/cross.png copy
image I_CIRCLE source_assets/image/circle.png copy
image I_SQUARE source_assets/image/square.png copy
@ -17,12 +16,12 @@ image I_SHOULDER source_assets/image/shoulder.png copy
image I_CHECKEDBOX source_assets/image/checkedbox.png copy
image I_RECT source_assets/image/rect.png copy
image I_STICKBG source_assets/image/stick_bg.png copy
image I_BG source_assets/image/background.png copy
image I_BG source_assets/image/background2.png copy
image I_L source_assets/image/L.png copy
image I_R source_assets/image/R.png copy
image I_BUTTON source_assets/image/button.png copy
image I_BUTTON_SELECTED source_assets/image/button_selected.png copy
image I_ICON_UMD source_assets/image/umd48.png copy
image I_ICON_FOLDER source_assets/image/folder.png copy
image I_ICON_EXE source_assets/image/exe.png copy
image I_DROP_SHADOW source_assets/image/dropshadow.png copy
image I_LINES source_assets/image/lines.png copy
image I_GRID source_assets/image/grid.png copy
image I_LOGO source_assets/image/logo.png copy
image I_ICON source_assets/image/icon_regular_72.png copy
image I_ICONGOLD source_assets/image/icon_gold_72.png copy

View File

@ -9,15 +9,27 @@ Exit = 退出
Load = 载入...
Settings = 设置
Recent = 最近使用
Homebrew & Demos = 自製遊戲和試玩
Games = 遊戲
How to get games = 如何获得游戏
Game Settings = 游戏设置
Main Settings = 主要设置
Support PPSSPP = 支持PPSSPP
[Developer]
Developer Tools = 开发者工具
Dump frame to log = 转储帧为日志
Load language ini = 载入语言配置文件
Run CPU tests = 运行CPU测试
Run CPU Tests = 运行CPU测试
Save language ini = 储存语言配置文件
Dump next frame = 转储下一帧
Report = 向网络服务器自动收集兼容性问题
Cleanup Recents = 清除最近列表
Enable Logging = 記錄日志
New UI = 新界面
[General]
Up = 向上一级
Back = 返回
Up = 向上一级
Prev Page = 上一页
Next Page = 下一页
[MainSettings]
Audio = 声音
@ -30,63 +42,122 @@ Graphics = 图像
GraphicsDesc = 更改图像选项
Settings = 设置
System = 系统
SystemDesc = 快速内存访问、语言设置
SystemDesc = 动态重编译、快速内存访问等
[System]
Dynarec = 动态重编译 (JIT)
DynarecisJailed = 动态重编译 (JIT) 未越狱无法开启
Unlock CPU Clock = 解鎖CPU时鐘
Multithreaded (experimental) = 实验性多线程
Auto = 自动
Frequency : = 頻率:
Fast Memory = 快速内存访问 (可能导致崩溃)
Show Debug Statistics = 显示调试信息
Show FPS = 显示帧率 (每秒帧数)
System Settings = 系统设置
Encrypt Save = 加密储存数据 (使用非文本格式)
12HR Time Format = 使用12小时制
Use Button X to Confirm = 使用X按钮确认
Daylight Savings = 夏令时
Language = 语言设置
Button Pref : O to Confirm = 按钮设置使用按钮O确认
Button Pref : X to Confirm = 按钮设置使用按钮X确认
System Language : = 系统语言:
Max. No of Recents : = 最近使用最大数量:
Clear = 清除
Use O = 使用O
Use X = 使用X
Enable Cheats = 启用作弊码
Enable Compatibility Server Reports = 向网络服务器报告兼容性问题
Reload Cheats = 重载作弊码
Reload Cheats = 重新载入作弊码
Language = 语言设置
[Audio]
Audio Settings = 声音设置
Enable Sound = 开启声音
Enable Atrac3+ = 开启Atract3+解码器
Download Atrac3+ plugin = 下载Atrac3+解码器
SFX volume = 效果音量
BGM volume = 背景音樂音量
Auto = 自动
SFX Volume = 音効音量
Redownload Atrac3+ plugin = 重新加载ATrac3+插件
[Controls]
Controls Settings = 控制设置
OnScreen = 触屏虚拟按钮
Key Mapping = 按鍵映射
Default Mapping = 還原按鍵映射
Show Left Analog Stick = 显示左摇杆
Bind Right Analog Stick = 绑定右摇杆
Arrow Buttons = 方向键按钮
Target : = 目标:
Face Buttons = 正面按钮
L/R = L/R
L/R + Triangle/Cross = L/R + 三角/十字
Back = 返回
Tilt = 重力感应替代摇杆 (水平方向)
Large Controls = 大按钮
Show Analog Stick = 显示摇杆
Buttons Scaling: = 按钮縮放
Buttons Opacity = 按钮透明度
Auto = 自动
Scale : = 比例 :
Opacity : = 透明度 :
[Key Mapping]
Pad = 手柄
Keyboard = 键盘
Prev = 上页
Next = 下页
[Graphics]
Rendering Mode = 渲染模式
Mode = 模式
Anti-Aliasing = 抗鋸齒
2X = 2倍渲染分辨率
Buffered Rendering = 缓冲渲染 (关闭后可能出现图像错误)
Buffered Rendering = 缓冲渲染
Frame Skipping = 跳帧
Skip Frames : = 跳帧数:
Frames : = 跳帧数:
Graphics Settings = 图像设置
Hardware Transform = 硬件几何变换 (可能加速或减速)
Hardware Transform = 硬件几何变换
Linear Filtering = 纹理过滤 (线性插值)
Media Engine = 媒体引擎
Mipmapping = 多级纹理映射 (MipMap)
Mipmapping = 多级纹理映射 (Mipmap)
Stream VBO = 流式顶点缓冲对象 (Stream VBO)
Texture Filtering = 纹理过滤
Texture Scaling = 纹理縮放
Force 60 FPS or less = 強制60 FPS或更低
Show speed / internal FPS = 显示速度/内部FPS
(60.0 is full speed, internal FPS depends on game) = (60.0速度是全速, 内部FPS每個遊戲不相同)
Toggled Speed Limit = 切换速度最大值
Nearest = 最近
Non-Buffered Rendering = 非缓冲渲染
Read Framebuffers To Memory(CPU) = 将缓冲帧数据载入内存(CPU)
Read Framebuffers To Memory(GPU) = 将缓冲帧数据载入内存(GPU)
Linear = 线性
Linear(CG) = 线性CG
Fullscreen = 全屏
Speed: = 速度:
Display: Speed = 显示:速度
Display: FPS = 显示FPS
Display: Both = 显示:全部
Vertex Cache = 顶点缓存
Partial Vertical Stretch = 垂直拉伸画面
Stretch to Display = 拉伸画面
AA = 抗锯齿处理
VSync = 垂直同步
Skip Updating PSP Memory = 跳过更新PSP内存
Draw Wireframe = 显示线框
Display Raw Framebuffer = 显示原始帧缓冲
Fps Limit = 帧率限制
Fps : = 帧率:
Show VPS/FPS = 显示VPS/FPS
Format : = 格式 :
Both = 全部
Speed = 速度
FPS Limit = 帧率限制
FPS : = 帧率:
Auto = 自动
Anisotropic Filtering = 各向异性 (非等方性)过滤
Level : = 级别:
xBRZ Texture Scaling = xBRZ纹理放大
Type : = 类型:
Level : = 级别
xBRZ Texture Scaling = 纹理放大
Type : = 类型
xBRZ = xBRZ
Hybrid = 混合式(H)
Bicubic = 双三次(B)
H+B = H+B
Deposterize = 色调融合
Save State : = 即时存档 :
Load State : = 载入存档 :
[Pause]
Save State = 即时状态储存
Load State = 即时状态载入
Continue = 继续
Settings = 设置
Back to Menu = 返回菜单
@ -96,17 +167,19 @@ Yes = 是
No = 否
Do you want to overwrite the data? = 您要覆盖此存档吗?
Saving = 保存中...
Save completed = 已保存
Save completed = 已保存
ConfirmLoad = 您要载入此存档吗?
Loading = 载入中...
There is no data = 无存档
There is no data = 沒有存档。
DeleteConfirm = 您要删除此存档吗?
Deleting = 删除中...
Delete completed = 已删除
Load completed = 已载入
Delete completed = 已删除
Load completed = 已载入
Enter = 确定
Select = 选择
Back = 返回
Load = 载入
Save = 保存
Delete = 删除
Finish = 完成
Shift = Shift
@ -116,17 +189,56 @@ Error loading file = 文件载入错误
fixed = 速度:固定
standard = 速度:标准
unlimited = 速度:不限!
Loaded State = 存档加载
Saved State = 存档保存
LoadStateDoesntExist = 无法加载存档:不存在存档!
LoadStateWrongVersion = 无法加载存档:当前存档为旧版PPSSPP所产生的.
Save State Failed = 无法保存存档!
[PSPCredits]
license = 根据GPL 2.0开源协议的免费软件
created = 作者
title = 一个快速和便携的PSP模拟器
contributors = 参与者:
written = 使用C++语言编写,具有快速与便携性
tools = 使用免费的工具:
website = 官网
list = 兼容性列表,论坛和发展信息
check = 还有海豚模拟器最好的Wii/GC模拟器
info1 = PPSSPP的目的用在教育
info2 = 請确保持有任何正版遊戲
info3 = 您所持有的游戏应该拥有UMD或正版游戏
info4 = 在PSP中的PSN商店中下载
info5 = PSP是索尼公司的注冊商标.
[Plugin]
Atrac3+ Audio Support = Atrac3+音頻插件
Origins are dubious = * Mai的ATRAC3+解码器\n有的遊戲的背景声音需要ATRAC3+解码器的支持。\n注意此段代码是不穩定的。\n选择更多信息了解更多信息。
Back = 返回
Download and install = 下载和安装
More Information = 更多信息
Failed to reach server = 无法连接服务器。\n请检查您的网络是否正常。
SorryNoDownload = 对不起,没有可以用于此平台的解码器。
To download and install = 要下载且安装Mai的ATRAC3+解码器?\n当前平台支持。
Already installed = Mai的ATRAC3+解码器已安装。\n您想重新下载且安装
Installed Correctly = Mai的ATRAC3+解码器下载与安装。\n安装完成。
Failed to download plugin = 无法下载插件。\n请稍后再试。
繁體中文
[MainMenu]
Load = 載入遊戲...
Settings = 設定
Credits = 製作組
Exit = 離開
Recent = 最近執行的遊戲
Homebrew & Demos = 自製遊戲和試玩
Games = 遊戲
How to get games = 如何獲得遊戲
Game Settings = 遊戲設置
Main Settings = 主要設置
Support PPSSPP = 支持PPSSPP
[System]
System Settings = 系統設定
Dynarec = 動態重新編譯 (JIT)
Unlock CPU Clock = 解鎖CPU時鐘
Multithreaded (experimental) = 實驗性多線程
DynarecisJailed = 動態重新編譯 (JIT) - 尚未越獄故無法使用
Fast Memory = 快速記憶體存取 (不穩定)
Show Debug Statistics = 顯示除錯訊息
@ -134,41 +246,50 @@ Show FPS = 顯示每秒張數
Encrypt Save = 加密儲存資料
Use Button X to Confirm = 使用按鈕X確認
Enable Cheats = 啓用作弊碼
12HR Time Format = 使用12小時制
Enable Compatibility Server Reports = 向網路伺服器報告相容性問題
Reload Cheats = 重载作弊碼
Reload Cheats = 重新載入作弊碼
Daylight Savings = 日光節約時間
Language = 語言設定
Button Preference - O to Confirm = 按鈕設定 - 使用按鈕O確認
Button Preference - X to Confirm = 按鈕設定 - 使用按鈕X確認
Use O = 使用O
Use X = 使用X
[Graphics]
Rendering Mode = 渲染模式
Mode = 模式
Anti-Aliasing = 抗鋸齒
Partial Vertical Stretch = 畫面垂直拉伸
Stretch to Display = 畫面拉伸
Hardware Transform = 硬體幾何轉換
Buffered Rendering = 描繪緩衝
Frame Skipping = 跳格
Frames : = 跳格數:
Media Engine = 媒體引擎
Graphics Settings = 圖形設定
Vertex Cache = 頂點快取
Stream VBO = 流動式頂點緩衝物件
Linear Filtering = 線性過濾
Mipmapping = Mipmap 貼圖
VSync = 垂直同步
Read Framebuffers To Memory(CPU) = 將緩衝幀數據載入內存(CPU)
Read Framebuffers To Memory(GPU) = 將緩衝幀數據載入內存(GPU)
AA = 反鋸齒
Draw Wireframe = 顯示線框
Display Raw Framebuffer = 顯示原始繪圖緩衝
Fps Limit = 每秒張數限制
Fps : = 張數:
FPS Limit = FPS限制
FPS : = 張數:
Show VPS/FPS = 顯示VPS/FPS
Format : = 格式 :
Both = 兩者
Auto = 自動
Anisotropic Filtering = 非等方性過濾
Level : = 等級:
Frames : = 跳格數:
xBRZ Texture Scaling = xBRZ 貼圖放大
Type : = 類別:
xBRZ Texture Scaling = 貼圖放大
Type : = 類別:
xBRZ = xBRZ
Hybrid = 混合式(H)
Bicubic = 雙三次(B)
H+B = H+B
Deposterize = 色調混合
Save State : = 即時存檔 :
Load State : = 載入存檔 :
[Pause]
Save State = 即時存檔
Load State = 載入存檔
Continue = 繼續
Settings = 設定
Back to Menu = 返回主選單
@ -188,21 +309,31 @@ DeveloperDesc = 執行 CPU 測試、記錄執行流程
Developer Tools = 開發者工具
Load language ini = 載入語言設定
Save language ini = 儲存語言設定
Run CPU tests = 執行 CPU 測試
Dump frame to log = 建立記憶體轉儲
Run CPU Tests = 執行 CPU 測試
Dump next frame = 建立記憶體轉儲
Report = 向網路伺服器報告相容性問題
Cleanup Recents = 清理最近記錄
[Audio]
Audio Settings = 聲音設定
Enable Sound = 開啟聲音
Enable Atrac3+ = 開啓Atrac3+解碼器
SFX volume = 效果音量
BGM volume = 背景音樂音量
[Controls]
Controls Settings = 控制器設定
OnScreen = 顯示虛擬控制器
Tilt = 類比左右傾斜對應
Large Controls = 大按鍵
Show Analog Stick = 顯示類比搖桿
Buttons Scaling = 按鈕縮放
Buttons Opacity = 按鈕透明度
Auto = 自動
Scale : = 比例 :
Opacity : = 透明度 :
[General]
Back = 返回
Up = 返回上層
Prev Page = 上一頁
Next Page = 下一頁
[Dialog]
Back = 返回
@ -210,21 +341,23 @@ Yes = 是
No = 否
Enter = 決定
Select = 選擇
Load = 載入
Save = 儲存
Delete = 刪除
Start = Start
Finish = 完成
Shift = Shift
New Save = 建立新的存
New Save = 建立新檔
Do you want to overwrite the data? = 您想要覆蓋這份檔案嗎?
Saving = 儲存中\n請稍候...
Save completed = 已儲存
Save completed = 檔案已儲存
ConfirmLoad = 您想要載入這份檔案嗎?
Loading = 載入中\n請稍候...
Load completed = 載入完成
There is no data = 沒有
Load completed = 檔案已載入。
There is no data = 沒有檔案。
DeleteConfirm = 這份檔案將被刪除。\n您確定要繼續嗎?
Deleting = 刪除中\n請稍候...
Delete completed = 已刪除
Delete completed = 檔案已刪除
[Error]
Error loading file = 檔案載入錯誤
[Screen]

2
lang

@ -1 +1 @@
Subproject commit a2feb9fdefff4daa0d0979ddf3c450c792f63d19
Subproject commit 4a963a637f8b36a42e2d9052629ac643843bc50a

2
native

@ -1 +1 @@
Subproject commit ddf5c379c3b2d368031990c81f96a062dc46bee4
Subproject commit ba28246dd267badbea61e943597e05fa739a55c2

@ -1 +1 @@
Subproject commit f003246b8d8803d9bdb7d0e3de53cab620eda8b9
Subproject commit f5fa205057dbbf80ec1e302c21d22c9ddd0ea03a

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="200"
height="70"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="New document 1">
<defs
id="defs4">
<filter
id="filter3049"
inkscape:label="Drop Shadow"
color-interpolation-filters="sRGB">
<feFlood
id="feFlood3051"
flood-opacity="0.4"
flood-color="rgb(0,0,0)"
result="flood" />
<feComposite
id="feComposite3053"
in2="SourceGraphic"
in="flood"
operator="in"
result="composite1" />
<feGaussianBlur
id="feGaussianBlur3055"
stdDeviation="2"
result="blur" />
<feOffset
id="feOffset3057"
dx="0"
dy="3"
result="offset" />
<feComposite
id="feComposite3059"
in2="offset"
in="SourceGraphic"
operator="over"
result="composite2" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="141.07278"
inkscape:cy="101.30662"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1267"
inkscape:window-height="768"
inkscape:window-x="125"
inkscape:window-y="125"
inkscape:window-maximized="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-982.36218)">
<text
xml:space="preserve"
style="font-size:63.55089951px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3049);font-family:Myriad Pro;-inkscape-font-specification:Myriad Pro"
x="8.6396723"
y="1038.6173"
id="text2985"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2987"
x="8.6396723"
y="1038.6173"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;font-family:Zrnic Rg;-inkscape-font-specification:Zrnic Rg">PPSSPP</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB