summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Src/OnScreenDisplay.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/Src/OnScreenDisplay.cpp')
-rw-r--r--Source/Core/VideoCommon/Src/OnScreenDisplay.cpp72
1 files changed, 52 insertions, 20 deletions
diff --git a/Source/Core/VideoCommon/Src/OnScreenDisplay.cpp b/Source/Core/VideoCommon/Src/OnScreenDisplay.cpp
index 10cf5b84af..29a3837a9a 100644
--- a/Source/Core/VideoCommon/Src/OnScreenDisplay.cpp
+++ b/Source/Core/VideoCommon/Src/OnScreenDisplay.cpp
@@ -1,19 +1,6 @@
-// Copyright (C) 2003 Dolphin 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.
-
-// 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 SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
+// Copyright 2013 Dolphin Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
#include <list>
@@ -24,13 +11,16 @@
#include "RenderBase.h"
#include "Timer.h"
+#include <vector>
+
namespace OSD
{
struct MESSAGE
{
MESSAGE() {}
- MESSAGE(const char* p, u32 dw) {
+ MESSAGE(const char* p, u32 dw)
+ {
strncpy(str, p, 255);
str[255] = '\0';
dwTimeStamp = dw;
@@ -39,6 +29,28 @@ struct MESSAGE
u32 dwTimeStamp;
};
+class OSDCALLBACK
+{
+private:
+ CallbackPtr m_functionptr;
+ CallbackType m_type;
+ u32 m_data;
+public:
+ OSDCALLBACK(CallbackType OnType, CallbackPtr FuncPtr, u32 UserData)
+ {
+ m_type = OnType;
+ m_functionptr = FuncPtr;
+ m_data = UserData;
+ }
+ void Call()
+ {
+ m_functionptr(m_data);
+ }
+
+ CallbackType Type() { return m_type; }
+};
+
+std::vector<OSDCALLBACK> m_callbacks;
static std::list<MESSAGE> s_listMsgs;
void AddMessage(const char* pstr, u32 ms)
@@ -48,7 +60,8 @@ void AddMessage(const char* pstr, u32 ms)
void DrawMessages()
{
- if(!SConfig::GetInstance().m_LocalCoreStartupParameter.bOnScreenDisplayMessages) return;
+ if(!SConfig::GetInstance().m_LocalCoreStartupParameter.bOnScreenDisplayMessages)
+ return;
if (s_listMsgs.size() > 0)
{
@@ -62,7 +75,8 @@ void DrawMessages()
if (time_left < 1024)
{
alpha = time_left >> 2;
- if (time_left < 0) alpha = 0;
+ if (time_left < 0)
+ alpha = 0;
}
alpha <<= 24;
@@ -82,8 +96,26 @@ void DrawMessages()
void ClearMessages()
{
std::list<MESSAGE>::iterator it = s_listMsgs.begin();
- while (it != s_listMsgs.end())
+
+ while (it != s_listMsgs.end())
+ {
it = s_listMsgs.erase(it);
+ }
+}
+
+// On-Screen Display Callbacks
+void AddCallback(CallbackType OnType, CallbackPtr FuncPtr, u32 UserData)
+{
+ m_callbacks.push_back(OSDCALLBACK(OnType, FuncPtr, UserData));
+}
+
+void DoCallbacks(CallbackType OnType)
+{
+ for (auto it = m_callbacks.begin(); it != m_callbacks.end(); ++it)
+ {
+ if (it->Type() == OnType)
+ it->Call();
+ }
}
} // namespace