-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLovyanGFXModule.cpp
More file actions
147 lines (118 loc) · 4.11 KB
/
Copy pathLovyanGFXModule.cpp
File metadata and controls
147 lines (118 loc) · 4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/**
* @file LovyanGFXModule.cpp
* @brief Module entry point for deki-lovyangfx DLL
*
* This file exports the standard Deki plugin interface so the editor
* can load deki-lovyangfx.dll and discover available LovyanGFX components.
*
* For linked DLLs (not dynamically loaded), DekiLovyanGFX_EnsureRegistered()
* must be called from the main executable to trigger the static initializers.
*/
#include "LovyanGFXModule.h"
#include "interop/DekiPlugin.h"
#include "DekiModuleFeatureMeta.h"
#include "LGFXDisplayPanel.h"
#include "LGFXTouchPanel.h"
#include "reflection/ComponentRegistry.h"
#include "reflection/ComponentFactory.h"
#ifdef DEKI_EDITOR
// Auto-generated registration helpers
extern void DekiLovyanGFX_RegisterComponents();
extern int DekiLovyanGFX_GetAutoComponentCount();
extern const DekiComponentMeta* DekiLovyanGFX_GetAutoComponentMeta(int index);
// Track if already registered to avoid duplicates
static bool s_LovyanGFXRegistered = false;
extern "C" {
/**
* @brief Ensure deki-lovyangfx module is loaded and components are registered
*
* Call this from the editor at startup. Simply calling this function is enough
* to force the linker to include the DLL and trigger static initializers.
*
* @return Number of components registered by this module
*/
DEKI_LOVYANGFX_API int DekiLovyanGFX_EnsureRegistered(void)
{
if (s_LovyanGFXRegistered)
return DekiLovyanGFX_GetAutoComponentCount();
s_LovyanGFXRegistered = true;
// Auto-generated: registers all LovyanGFX components with ComponentRegistry + ComponentFactory
DekiLovyanGFX_RegisterComponents();
return DekiLovyanGFX_GetAutoComponentCount();
}
// =============================================================================
// Plugin metadata (for dynamic loading compatibility)
// =============================================================================
DEKI_PLUGIN_API const char* DekiPlugin_GetName(void)
{
return "Deki LovyanGFX Module";
}
DEKI_PLUGIN_API const char* DekiPlugin_GetVersion(void)
{
#ifdef DEKI_MODULE_VERSION
return DEKI_MODULE_VERSION;
#else
return "0.0.0-dev";
#endif
}
DEKI_PLUGIN_API const char* DekiPlugin_GetReflectionJson(void)
{
return "{}";
}
DEKI_PLUGIN_API int DekiPlugin_Init(void)
{
return 0;
}
DEKI_PLUGIN_API void DekiPlugin_Shutdown(void)
{
s_LovyanGFXRegistered = false;
}
DEKI_PLUGIN_API int DekiPlugin_GetComponentCount(void)
{
return DekiLovyanGFX_GetAutoComponentCount();
}
DEKI_PLUGIN_API const DekiComponentMeta* DekiPlugin_GetComponentMeta(int index)
{
return DekiLovyanGFX_GetAutoComponentMeta(index);
}
DEKI_PLUGIN_API void DekiPlugin_RegisterComponents(void)
{
DekiLovyanGFX_EnsureRegistered();
}
// =============================================================================
// Module Feature API
// =============================================================================
static const DekiModuleFeatureInfo s_Features[] = {
{"display", "Display Panel", "Configure LovyanGFX display hardware", false},
{"touch", "Touch Panel", "Enable LovyanGFX touch panel support", false},
};
DEKI_PLUGIN_API int DekiPlugin_GetFeatureCount(void)
{
return sizeof(s_Features) / sizeof(s_Features[0]);
}
DEKI_PLUGIN_API const DekiModuleFeatureInfo* DekiPlugin_GetFeature(int index)
{
if (index < 0 || index >= DekiPlugin_GetFeatureCount())
return nullptr;
return &s_Features[index];
}
// =============================================================================
// Module-specific feature API (for linked DLL access without name conflicts)
// =============================================================================
DEKI_LOVYANGFX_API const char* DekiLovyanGFX_GetName(void)
{
return "LovyanGFX";
}
DEKI_LOVYANGFX_API int DekiLovyanGFX_GetFeatureCount(void)
{
return DekiPlugin_GetFeatureCount();
}
DEKI_LOVYANGFX_API const DekiModuleFeatureInfo* DekiLovyanGFX_GetFeature(int index)
{
return DekiPlugin_GetFeature(index);
}
} // extern "C"
#else // !DEKI_EDITOR - Runtime (ESP32) registration
// For runtime builds, component registration happens via static initializers
// or explicit calls from the application
#endif // DEKI_EDITOR