7#if !FL_PLATFORM_HAS_TINY_MEMORY
27#if FASTLED_HAS_ENGINE_EVENTS
29 const bool has_listener = ptr && ptr->
_hasListener(
this);
42 gFrameTaskListener = listener;
46#if !FL_PLATFORM_HAS_TINY_MEMORY
49#if FASTLED_HAS_ENGINE_EVENTS
50 EngineEvents::getInstance()->_onBeginFrame();
52 if (gFrameTaskListener) {
58#if FASTLED_HAS_ENGINE_EVENTS
59 EngineEvents::getInstance()->_onEndFrame();
61 if (gFrameTaskListener) {
66#if FASTLED_HAS_ENGINE_EVENTS
72#if FASTLED_HAS_ENGINE_EVENTS
74 for (
auto &item : mListeners) {
75 auto listener = item.listener;
76 listener->onPlatformPreLoop();
78 for (
auto &item : mListeners) {
79 auto listener = item.listener;
80 listener->onPlatformPreLoop2();
85 auto predicate = [listener](
const Pair &pair) {
86 return pair.listener == listener;
88 return mListeners.find_if(predicate) != mListeners.end();
95 for (
auto it = mListeners.begin(); it != mListeners.end(); ++it) {
96 if (it->priority < priority) {
98 EngineEvents::Pair pair = EngineEvents::Pair(listener, priority);
99 mListeners.insert(it, pair);
103 EngineEvents::Pair pair = EngineEvents::Pair(listener, priority);
104 mListeners.push_back(pair);
108 auto predicate = [listener](
const Pair &pair) {
109 return pair.listener == listener;
111 auto it = mListeners.find_if(predicate);
112 if (it != mListeners.end()) {
113 mListeners.erase(it);
120 ListenerList copy = mListeners;
121 for (
auto &item : copy) {
122 auto listener = item.listener;
123 listener->onBeginFrame();
130 ListenerList copy = mListeners;
131 for (
auto &item : copy) {
132 auto listener = item.listener;
133 listener->onEndShowLeds();
140 ListenerList copy = mListeners;
141 for (
auto &item : copy) {
142 auto listener = item.listener;
143 listener->onEndFrame();
150 ListenerList copy = mListeners;
151 for (
auto &item : copy) {
152 auto listener = item.listener;
153 listener->onStripAdded(strip, num_leds);
161 ListenerList copy = mListeners;
162 for (
auto &item : copy) {
163 auto listener = item.listener;
164 listener->onCanvasUiSet(strip,
screenmap);
171 ListenerList copy = mListeners;
172 for (
auto &item : copy) {
173 auto listener = item.listener;
virtual ~Listener() FL_NO_EXCEPT
virtual void onBeginFrame() FL_NO_EXCEPT
virtual void onEndFrame() FL_NO_EXCEPT
void _addListener(Listener *listener, int priority) FL_NO_EXCEPT
static void onBeginFrame() FL_NO_EXCEPT
bool _hasListener(Listener *listener) FL_NO_EXCEPT
void _onPlatformPreLoop() FL_NO_EXCEPT
void _onCanvasUiSet(CLEDController *strip, const ScreenMap &xymap) FL_NO_EXCEPT
static void onEndFrame() FL_NO_EXCEPT
void _onExit() FL_NO_EXCEPT
static void setFrameTaskListener(Listener *listener) FL_NO_EXCEPT
EngineEvents() FL_NO_EXCEPT
void _onEndShowLeds() FL_NO_EXCEPT
void _onStripAdded(CLEDController *strip, fl::u32 num_leds) FL_NO_EXCEPT
void _onEndFrame() FL_NO_EXCEPT
void _onBeginFrame() FL_NO_EXCEPT
void _removeListener(Listener *listener) FL_NO_EXCEPT
static T & instance() FL_NO_EXCEPT
fl::CLEDController CLEDController
Shared temporal-dither phase tracking.
EngineEvents::Listener * gFrameTaskListener
FL_ALWAYS_INLINE void advanceDitherFrame() FL_NO_EXCEPT
Advance temporal dithering once per logical frame, not once per controller.
u8 u8 fract8 blur_amount FL_NO_EXCEPT
Base definition for an LED controller.