refactor rendering

This commit is contained in:
2025-07-16 13:38:02 +02:00
parent 1bee6aed9c
commit 9667454811
14 changed files with 130 additions and 105 deletions

View File

@@ -1,36 +0,0 @@
#pragma once
#include <algorithm>
#include <functional>
#include <vector>
namespace td {
namespace utils {
template <typename Listener>
class ObjectNotifier {
protected:
std::vector<Listener*> m_Listeners;
public:
void BindListener(Listener* listener) {
m_Listeners.push_back(listener);
}
void UnbindListener(Listener* listener) {
auto iter = std::find(m_Listeners.begin(), m_Listeners.end(), listener);
if (iter == m_Listeners.end()) return;
m_Listeners.erase(iter);
}
template <typename Func, typename... Args>
void NotifyListeners(Func function, Args... args) {
for (Listener* listener : m_Listeners)
std::bind(function, listener, args...)();
}
};
} // namespace utils
} // namespace td

31
include/td/misc/Signal.h Normal file
View File

@@ -0,0 +1,31 @@
#pragma once
#include <algorithm>
#include <functional>
#include <td/common/NonCopyable.h>
#include <vector>
namespace td {
namespace utils {
template <typename... Args>
class Signal : private NonCopyable {
private:
using CallBack = std::function<void(Args...)>;
std::vector<CallBack> m_Callbacks;
public:
void Connect(CallBack&& a_Callback) {
m_Callbacks.push_back(std::move(a_Callback));
}
void operator()(Args... args) const {
for (const CallBack& callback : m_Callbacks) {
callback(args...);
}
}
};
} // namespace utils
} // namespace td