diff --git a/CMakeLists.txt b/CMakeLists.txt index 94c9224310..59f6a27804 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1101,6 +1101,7 @@ set(NativeAppSource android/jni/TestRunner.cpp UI/GameInfoCache.cpp UI/MainScreen.cpp + UI/MiscScreens.cpp UI/MenuScreens.cpp UI/GameScreen.cpp UI/GameSettingsScreen.cpp diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index 18e3daed4b..eb7b0112ad 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -50,6 +50,7 @@ #include "UI/MenuScreens.h" #include "UI/EmuScreen.h" #include "UI/GameInfoCache.h" +#include "UI/MiscScreens.h" EmuScreen::EmuScreen(const std::string &filename) : invalid_(true) { CheckGLExtensions(); @@ -349,9 +350,8 @@ static const struct { int from, to; } legacy_touch_mapping[12] = { void EmuScreen::update(InputState &input) { globalUIState = UISTATE_INGAME; if (errorMessage_.size()) { - screenManager()->push(new ErrorScreen( - "Error loading file", - errorMessage_)); + screenManager()->push(new PromptScreen( + "Error loading file: " + errorMessage_, "OK", "")); errorMessage_ = ""; return; } diff --git a/UI/GameScreen.cpp b/UI/GameScreen.cpp index f26b964a03..58a0c1809e 100644 --- a/UI/GameScreen.cpp +++ b/UI/GameScreen.cpp @@ -26,6 +26,7 @@ #include "UI/GameSettingsScreen.h" #include "UI/GameInfoCache.h" #include "UI/MenuScreens.h" +#include "UI/MiscScreens.h" #include "UI/MainScreen.h" void GameScreen::CreateViews() { @@ -172,42 +173,3 @@ void GameScreen::CallbackDeleteGame(bool yes) { } } - -void DrawBackground(float alpha); - -void PromptScreen::DrawBackground(UIContext &dc) { - ::DrawBackground(1.0f); -} -void PromptScreen::CreateViews() { - // Information in the top left. - // Back button to the bottom left. - // Scrolling action menu to the right. - using namespace UI; - - Margins actionMenuMargins(0, 100, 15, 0); - - root_ = new LinearLayout(ORIENT_HORIZONTAL); - - ViewGroup *leftColumn = new AnchorLayout(new LinearLayoutParams(1.0f)); - root_->Add(leftColumn); - - leftColumn->Add(new TextView(0, message_, ALIGN_LEFT, 1.0f, new AnchorLayoutParams(10, 10, NONE, NONE))); - - ViewGroup *rightColumnItems = new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(300, FILL_PARENT, actionMenuMargins)); - root_->Add(rightColumnItems); - rightColumnItems->Add(new Choice(yesButtonText_))->OnClick.Handle(this, &PromptScreen::OnYes); - if (noButtonText_ != "") - rightColumnItems->Add(new Choice(noButtonText_))->OnClick.Handle(this, &PromptScreen::OnNo); -} - -UI::EventReturn PromptScreen::OnYes(UI::EventParams &e) { - callback_(true); - screenManager()->finishDialog(this, DR_OK); - return UI::EVENT_DONE; -} - -UI::EventReturn PromptScreen::OnNo(UI::EventParams &e) { - callback_(false); - screenManager()->finishDialog(this, DR_CANCEL); - return UI::EVENT_DONE; -} diff --git a/UI/GameScreen.h b/UI/GameScreen.h index e73192a449..e8386138bf 100644 --- a/UI/GameScreen.h +++ b/UI/GameScreen.h @@ -52,25 +52,3 @@ private: UI::TextView *tvGameSize_; UI::TextView *tvSaveDataSize_; }; - -inline void NoOpVoidBool(bool) {} - -class PromptScreen : public UIScreen { -public: - PromptScreen(std::string message, std::string yesButtonText, std::string noButtonText, std::function callback) - : message_(message), yesButtonText_(yesButtonText), noButtonText_(noButtonText), callback_(callback) {} - - virtual void CreateViews(); -protected: - virtual void DrawBackground(UIContext &dc); - -private: - UI::EventReturn OnYes(UI::EventParams &e); - UI::EventReturn OnNo(UI::EventParams &e); - - - std::string message_; - std::string yesButtonText_; - std::string noButtonText_; - std::function callback_; -}; diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp index 6c71ee10d2..20b9bc214a 100644 --- a/UI/MainScreen.cpp +++ b/UI/MainScreen.cpp @@ -58,7 +58,8 @@ private: void GameButton::Draw(UIContext &dc) { GameInfo *ginfo = g_gameInfoCache.GetInfo(gamePath_, false); Texture *texture = 0; - u32 color = 0; + u32 color = 0, shadowColor = 0; + if (ginfo->iconTexture) { texture = ginfo->iconTexture; } else { @@ -72,6 +73,7 @@ void GameButton::Draw(UIContext &dc) { if (texture) { color = whiteAlpha(ease((time_now_d() - ginfo->timeIconWasLoaded) * 2)); + shadowColor = blackAlpha(ease((time_now_d() - ginfo->timeIconWasLoaded) * 2)); float tw = texture->Width(); float th = texture->Height(); @@ -88,12 +90,17 @@ void GameButton::Draw(UIContext &dc) { // Render button int dropsize = 10; if (texture) { - if (txOffset) { - dropsize = 3; - 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(); + } else { + if (txOffset) { + dropsize = 3; + y += txOffset * 2; + } + dc.Draw()->DrawImage4Grid(I_DROP_SHADOW, x - dropsize, y, x+w + dropsize, y+h+dropsize*1.5, alphaMul(shadowColor, 0.5f), 1.0f); + dc.Draw()->Flush(); } - 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(); } if (texture) { @@ -377,6 +384,11 @@ UI::EventReturn MainScreen::OnCredits(UI::EventParams &e) { } UI::EventReturn MainScreen::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; } diff --git a/UI/MenuScreens.cpp b/UI/MenuScreens.cpp index f4d17b5f7b..6c0f76ce46 100644 --- a/UI/MenuScreens.cpp +++ b/UI/MenuScreens.cpp @@ -1985,7 +1985,7 @@ void FileSelectScreen::render() { void CreditsScreen::update(InputState &input_state) { globalUIState = UISTATE_MENU; if (input_state.pad_buttons_down & PAD_BUTTON_BACK) { - screenManager()->switchScreen(new MenuScreen()); + screenManager()->finishDialog(this, DR_OK); } frames_++; } @@ -2104,40 +2104,17 @@ void CreditsScreen::render() { #ifdef ANDROID #ifndef GOLD - if (UIButton(GEN_ID, Pos(10, dp_yres - 10), 200, 0, g->T("Buy PPSSPP Gold"), ALIGN_BOTTOMLEFT)) { - sendMessage("launchBrowser", "market://details?id=org.ppsspp.ppssppgold"); + if (UIButton(GEN_ID, Pos(10, dp_yres - 10), 300, 0, g->T("Buy PPSSPP Gold"), ALIGN_BOTTOMLEFT)) { + LaunchBrowser("market://details?id=org.ppsspp.ppssppgold"); + } +#endif +#else +#ifndef GOLD + if (UIButton(GEN_ID, Pos(10, dp_yres - 10), 300, 0, g->T("Buy PPSSPP Gold"), ALIGN_BOTTOMLEFT)) { + LaunchBrowser("http://central.ppsspp.org/buygold"); } #endif #endif UIEnd(); } - -void ErrorScreen::update(InputState &input_state) { - if (input_state.pad_buttons_down & PAD_BUTTON_BACK) { - screenManager()->finishDialog(this, DR_OK); - } -} - -void ErrorScreen::render() -{ - UIShader_Prepare(); - UIBegin(UIShader_Get()); - DrawBackground(1.0f); - - I18NCategory *ge = GetI18NCategory("Error"); - - ui_draw2d.SetFontScale(1.5f, 1.5f); - ui_draw2d.DrawTextShadow(UBUNTU24, ge->T(errorTitle_.c_str()), dp_xres / 2, 30, 0xFFFFFFFF, ALIGN_HCENTER); - ui_draw2d.SetFontScale(1.0f, 1.0f); - - ui_draw2d.DrawTextShadow(UBUNTU24, ge->T(errorMessage_.c_str()), 40, 120, 0xFFFFFFFF, ALIGN_LEFT); - - I18NCategory *g = GetI18NCategory("General"); - - if (UIButton(GEN_ID, Pos(dp_xres - 10, dp_yres - 10), 200, 0, g->T("Back"), ALIGN_BOTTOMRIGHT)) { - screenManager()->finishDialog(this, DR_OK); - } - - UIEnd(); -} diff --git a/UI/MenuScreens.h b/UI/MenuScreens.h index 9b1eb572a2..910f69f4c7 100644 --- a/UI/MenuScreens.h +++ b/UI/MenuScreens.h @@ -39,7 +39,6 @@ private: int frames_; }; - class MenuScreen : public Screen { public: @@ -209,19 +208,4 @@ private: int frames_; }; - -// Dialog box, meant to be pushed -class ErrorScreen : public Screen -{ -public: - ErrorScreen(const std::string &errorTitle, const std::string &errorMessage) : errorTitle_(errorTitle), errorMessage_(errorMessage) {} - void update(InputState &input); - void render(); - -private: - std::string errorTitle_; - std::string errorMessage_; -}; - - void DrawWatermark(); diff --git a/UI/MiscScreens.cpp b/UI/MiscScreens.cpp new file mode 100644 index 0000000000..73696606a0 --- /dev/null +++ b/UI/MiscScreens.cpp @@ -0,0 +1,64 @@ +// Copyright (c) 2013- PPSSPP Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0 or later versions. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official git repository and contact information can be found at +// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. + +#include "base/colorutil.h" +#include "base/timeutil.h" +#include "gfx_es2/draw_buffer.h" +#include "ui/ui_context.h" +#include "ui/view.h" +#include "ui/viewgroup.h" +#include "UI/MiscScreens.h" + +void DrawBackground(float alpha); + +void PromptScreen::DrawBackground(UIContext &dc) { + ::DrawBackground(1.0f); +} + +void PromptScreen::CreateViews() { + // Information in the top left. + // Back button to the bottom left. + // Scrolling action menu to the right. + using namespace UI; + + Margins actionMenuMargins(0, 100, 15, 0); + + root_ = new LinearLayout(ORIENT_HORIZONTAL); + + ViewGroup *leftColumn = new AnchorLayout(new LinearLayoutParams(1.0f)); + root_->Add(leftColumn); + + leftColumn->Add(new TextView(0, message_, ALIGN_LEFT, 1.0f, new AnchorLayoutParams(10, 10, NONE, NONE))); + + ViewGroup *rightColumnItems = new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(300, FILL_PARENT, actionMenuMargins)); + root_->Add(rightColumnItems); + rightColumnItems->Add(new Choice(yesButtonText_))->OnClick.Handle(this, &PromptScreen::OnYes); + if (noButtonText_ != "") + rightColumnItems->Add(new Choice(noButtonText_))->OnClick.Handle(this, &PromptScreen::OnNo); +} + +UI::EventReturn PromptScreen::OnYes(UI::EventParams &e) { + callback_(true); + screenManager()->finishDialog(this, DR_OK); + return UI::EVENT_DONE; +} + +UI::EventReturn PromptScreen::OnNo(UI::EventParams &e) { + callback_(false); + screenManager()->finishDialog(this, DR_CANCEL); + return UI::EVENT_DONE; +} diff --git a/UI/MiscScreens.h b/UI/MiscScreens.h new file mode 100644 index 0000000000..705534d90a --- /dev/null +++ b/UI/MiscScreens.h @@ -0,0 +1,46 @@ +// Copyright (c) 2013- PPSSPP Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0 or later versions. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official git repository and contact information can be found at +// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. + +#pragma once + +#include "base/functional.h" +#include "ui/ui_screen.h" + +inline void NoOpVoidBool(bool) {} + +class PromptScreen : public UIScreen { +public: + PromptScreen(std::string message, std::string yesButtonText, std::string noButtonText) + : message_(message), yesButtonText_(yesButtonText), noButtonText_(noButtonText) { + callback_ = &NoOpVoidBool; + } + PromptScreen(std::string message, std::string yesButtonText, std::string noButtonText, std::function callback) + : message_(message), yesButtonText_(yesButtonText), noButtonText_(noButtonText), callback_(callback) {} + + virtual void CreateViews(); +protected: + virtual void DrawBackground(UIContext &dc); + +private: + UI::EventReturn OnYes(UI::EventParams &e); + UI::EventReturn OnNo(UI::EventParams &e); + + std::string message_; + std::string yesButtonText_; + std::string noButtonText_; + std::function callback_; +}; diff --git a/UI/NativeApp.cpp b/UI/NativeApp.cpp index db503a8d30..d6d1db815e 100644 --- a/UI/NativeApp.cpp +++ b/UI/NativeApp.cpp @@ -553,6 +553,7 @@ void NativeTouch(const TouchInput &touch) { } void NativeKey(const KeyInput &key) { + g_buttonTracker.Process(key); if (screenManager) screenManager->key(key); } diff --git a/UI/UI.vcxproj b/UI/UI.vcxproj index 94f11e5c3d..61772c3fd1 100644 --- a/UI/UI.vcxproj +++ b/UI/UI.vcxproj @@ -26,6 +26,7 @@ + @@ -40,6 +41,7 @@ + diff --git a/UI/UI.vcxproj.filters b/UI/UI.vcxproj.filters index f2925573ba..6e91becff2 100644 --- a/UI/UI.vcxproj.filters +++ b/UI/UI.vcxproj.filters @@ -25,6 +25,9 @@ Screens + + Screens + @@ -50,6 +53,9 @@ Screens + + Screens + diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index bdfb3891ec..9e52cce8a6 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -570,7 +570,7 @@ namespace MainWindow if (globalUIState == UISTATE_PAUSEMENU) { NativeMessageReceived("run", ""); - if (disasmWindow[0]) + if (disasmWindow[0]) SendMessage(disasmWindow[0]->GetDlgHandle(), WM_COMMAND, IDC_GO, 0); } else if (Core_IsStepping()) //It is paused, then continue to run @@ -896,13 +896,15 @@ namespace MainWindow if (raw->data.keyboard.Message == WM_KEYDOWN || raw->data.keyboard.Message == WM_SYSKEYDOWN) { key.flags = KEY_DOWN; key.keyCode = windowsTransTable[GetTrueVKey(raw->data.keyboard)]; - if (key.keyCode) + if (key.keyCode) { NativeKey(key); + } } else if (raw->data.keyboard.Message == WM_KEYUP) { key.flags = KEY_UP; key.keyCode = windowsTransTable[GetTrueVKey(raw->data.keyboard)]; - if (key.keyCode) + if (key.keyCode) { NativeKey(key); + } } } } diff --git a/android/jni/Android.mk b/android/jni/Android.mk index 17ab5c6638..1e47bb3832 100644 --- a/android/jni/Android.mk +++ b/android/jni/Android.mk @@ -133,6 +133,7 @@ LOCAL_SRC_FILES := \ $(SRC)/UI/EmuScreen.cpp \ $(SRC)/UI/MenuScreens.cpp \ $(SRC)/UI/MainScreen.cpp \ + $(SRC)/UI/MiscScreens.cpp \ $(SRC)/UI/UIShader.cpp \ $(SRC)/UI/GamepadEmu.cpp \ $(SRC)/UI/GameInfoCache.cpp \ diff --git a/native b/native index 693944a0a5..7151e4c06e 160000 --- a/native +++ b/native @@ -1 +1 @@ -Subproject commit 693944a0a5b07bd4ef4690168c03fefefc475ac5 +Subproject commit 7151e4c06e5d782ef7da8e853f57ddbbb339ea60 diff --git a/source_assets/image/dropshadow.png b/source_assets/image/dropshadow.png index 424d99f32f..92fad619d1 100644 Binary files a/source_assets/image/dropshadow.png and b/source_assets/image/dropshadow.png differ diff --git a/source_assets/ouya/OUYA_A.png b/source_assets/ouya/OUYA_A.png new file mode 100644 index 0000000000..ad90b23551 Binary files /dev/null and b/source_assets/ouya/OUYA_A.png differ diff --git a/source_assets/ouya/OUYA_DPAD.png b/source_assets/ouya/OUYA_DPAD.png new file mode 100644 index 0000000000..d2f9a20b9b Binary files /dev/null and b/source_assets/ouya/OUYA_DPAD.png differ diff --git a/source_assets/ouya/OUYA_DPAD_DOWN.png b/source_assets/ouya/OUYA_DPAD_DOWN.png new file mode 100644 index 0000000000..e19cb4ead8 Binary files /dev/null and b/source_assets/ouya/OUYA_DPAD_DOWN.png differ diff --git a/source_assets/ouya/OUYA_DPAD_LEFT.png b/source_assets/ouya/OUYA_DPAD_LEFT.png new file mode 100644 index 0000000000..74043e81bd Binary files /dev/null and b/source_assets/ouya/OUYA_DPAD_LEFT.png differ diff --git a/source_assets/ouya/OUYA_DPAD_RIGHT.png b/source_assets/ouya/OUYA_DPAD_RIGHT.png new file mode 100644 index 0000000000..edd1ebf03b Binary files /dev/null and b/source_assets/ouya/OUYA_DPAD_RIGHT.png differ diff --git a/source_assets/ouya/OUYA_DPAD_UP.png b/source_assets/ouya/OUYA_DPAD_UP.png new file mode 100644 index 0000000000..8e42685d15 Binary files /dev/null and b/source_assets/ouya/OUYA_DPAD_UP.png differ diff --git a/source_assets/ouya/OUYA_L1.png b/source_assets/ouya/OUYA_L1.png new file mode 100644 index 0000000000..b023242d7f Binary files /dev/null and b/source_assets/ouya/OUYA_L1.png differ diff --git a/source_assets/ouya/OUYA_L2.png b/source_assets/ouya/OUYA_L2.png new file mode 100644 index 0000000000..d43947f6f7 Binary files /dev/null and b/source_assets/ouya/OUYA_L2.png differ diff --git a/source_assets/ouya/OUYA_L3.png b/source_assets/ouya/OUYA_L3.png new file mode 100644 index 0000000000..40436210cb Binary files /dev/null and b/source_assets/ouya/OUYA_L3.png differ diff --git a/source_assets/ouya/OUYA_LS.png b/source_assets/ouya/OUYA_LS.png new file mode 100644 index 0000000000..c1fb9c234b Binary files /dev/null and b/source_assets/ouya/OUYA_LS.png differ diff --git a/source_assets/ouya/OUYA_LS_DOWN.png b/source_assets/ouya/OUYA_LS_DOWN.png new file mode 100644 index 0000000000..376efd5a47 Binary files /dev/null and b/source_assets/ouya/OUYA_LS_DOWN.png differ diff --git a/source_assets/ouya/OUYA_LS_LEFT.png b/source_assets/ouya/OUYA_LS_LEFT.png new file mode 100644 index 0000000000..27db80af19 Binary files /dev/null and b/source_assets/ouya/OUYA_LS_LEFT.png differ diff --git a/source_assets/ouya/OUYA_LS_RIGHT.png b/source_assets/ouya/OUYA_LS_RIGHT.png new file mode 100644 index 0000000000..a16b1d58ec Binary files /dev/null and b/source_assets/ouya/OUYA_LS_RIGHT.png differ diff --git a/source_assets/ouya/OUYA_LS_UP.png b/source_assets/ouya/OUYA_LS_UP.png new file mode 100644 index 0000000000..b11fdb4fad Binary files /dev/null and b/source_assets/ouya/OUYA_LS_UP.png differ diff --git a/source_assets/ouya/OUYA_O.png b/source_assets/ouya/OUYA_O.png new file mode 100644 index 0000000000..ee2f890916 Binary files /dev/null and b/source_assets/ouya/OUYA_O.png differ diff --git a/source_assets/ouya/OUYA_R1.png b/source_assets/ouya/OUYA_R1.png new file mode 100644 index 0000000000..0a7a41967d Binary files /dev/null and b/source_assets/ouya/OUYA_R1.png differ diff --git a/source_assets/ouya/OUYA_R2.png b/source_assets/ouya/OUYA_R2.png new file mode 100644 index 0000000000..2d000a6811 Binary files /dev/null and b/source_assets/ouya/OUYA_R2.png differ diff --git a/source_assets/ouya/OUYA_R3.png b/source_assets/ouya/OUYA_R3.png new file mode 100644 index 0000000000..54f9eae357 Binary files /dev/null and b/source_assets/ouya/OUYA_R3.png differ diff --git a/source_assets/ouya/OUYA_RS.png b/source_assets/ouya/OUYA_RS.png new file mode 100644 index 0000000000..a9a4b4eab4 Binary files /dev/null and b/source_assets/ouya/OUYA_RS.png differ diff --git a/source_assets/ouya/OUYA_RS_DOWN.png b/source_assets/ouya/OUYA_RS_DOWN.png new file mode 100644 index 0000000000..5a25f334d6 Binary files /dev/null and b/source_assets/ouya/OUYA_RS_DOWN.png differ diff --git a/source_assets/ouya/OUYA_RS_LEFT.png b/source_assets/ouya/OUYA_RS_LEFT.png new file mode 100644 index 0000000000..54a2b6a293 Binary files /dev/null and b/source_assets/ouya/OUYA_RS_LEFT.png differ diff --git a/source_assets/ouya/OUYA_RS_RIGHT.png b/source_assets/ouya/OUYA_RS_RIGHT.png new file mode 100644 index 0000000000..e2e2536278 Binary files /dev/null and b/source_assets/ouya/OUYA_RS_RIGHT.png differ diff --git a/source_assets/ouya/OUYA_RS_UP.png b/source_assets/ouya/OUYA_RS_UP.png new file mode 100644 index 0000000000..ba551419b3 Binary files /dev/null and b/source_assets/ouya/OUYA_RS_UP.png differ diff --git a/source_assets/ouya/OUYA_SYSTEM.png b/source_assets/ouya/OUYA_SYSTEM.png new file mode 100644 index 0000000000..51150b50fc Binary files /dev/null and b/source_assets/ouya/OUYA_SYSTEM.png differ diff --git a/source_assets/ouya/OUYA_TOUCHPAD.png b/source_assets/ouya/OUYA_TOUCHPAD.png new file mode 100644 index 0000000000..1c86e5c8ab Binary files /dev/null and b/source_assets/ouya/OUYA_TOUCHPAD.png differ diff --git a/source_assets/ouya/OUYA_U.png b/source_assets/ouya/OUYA_U.png new file mode 100644 index 0000000000..e7a851f376 Binary files /dev/null and b/source_assets/ouya/OUYA_U.png differ diff --git a/source_assets/ouya/OUYA_Y.png b/source_assets/ouya/OUYA_Y.png new file mode 100644 index 0000000000..a0f650cd16 Binary files /dev/null and b/source_assets/ouya/OUYA_Y.png differ