diff options
| author | NeoBrainX <NeoBrainX@gmail.com> | 2013-04-25 14:01:07 +0200 |
|---|---|---|
| committer | NeoBrainX <NeoBrainX@gmail.com> | 2013-04-25 14:05:54 +0200 |
| commit | 5e6b712651dc042b06ce59bcfb4becda5ee15022 (patch) | |
| tree | c82731464d76517cce5ffb6d7e9764c47a433804 /Source/Core/VideoCommon/Src/OnScreenDisplay.cpp | |
| parent | eef95fa4c5919bf93335e10dd61cd5a9fd6a5f6d (diff) | |
| parent | d18b71ccf91c9578236b44ae26e8bc35314cc180 (diff) | |
Merge 'master' into shader-uids-awesome.
Conflicts:
Source/Core/VideoCommon/Src/BPMemory.h
Source/Core/VideoCommon/Src/LightingShaderGen.cpp
Source/Core/VideoCommon/Src/PixelShaderGen.cpp
Source/Core/VideoCommon/Src/PixelShaderGen.h
Source/Core/VideoCommon/Src/PixelShaderManager.cpp
Source/Core/VideoCommon/Src/VertexShaderGen.cpp
Source/Core/VideoCommon/Src/VertexShaderGen.h
Diffstat (limited to 'Source/Core/VideoCommon/Src/OnScreenDisplay.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/Src/OnScreenDisplay.cpp | 72 |
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 |
