mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
[simgui] Add GUI context getter hooks (#8127)
This enables GUI libraries to be linked statically with shared context.
This commit is contained in:
@@ -65,6 +65,12 @@ __declspec(dllexport)
|
||||
reinterpret_cast<void*>((AddGuiEarlyExecuteFn)&AddGuiEarlyExecute));
|
||||
HAL_RegisterExtension(HALSIMGUI_EXT_GUIEXIT,
|
||||
reinterpret_cast<void*>((GuiExitFn)&GuiExit));
|
||||
HAL_RegisterExtension(
|
||||
HALSIMGUI_EXT_GETGUICONTEXT,
|
||||
reinterpret_cast<void*>((GetGuiContextFn)&gui::GetCurrentContext));
|
||||
HAL_RegisterExtension(
|
||||
HALSIMGUI_EXT_GETGLASSCONTEXT,
|
||||
reinterpret_cast<void*>((GetGlassContextFn)&glass::GetCurrentContext));
|
||||
|
||||
HALSimGui::GlobalInit();
|
||||
DriverStationGui::GlobalInit();
|
||||
@@ -158,6 +164,9 @@ __declspec(dllexport)
|
||||
ImGuiConfigFlags_DockingEnable)) {
|
||||
return 0;
|
||||
}
|
||||
HAL_RegisterExtension(
|
||||
HALSIMGUI_EXT_GETIMGUICONTEXT,
|
||||
reinterpret_cast<void*>((GetImguiContextFn)&ImGui::GetCurrentContext));
|
||||
HAL_RegisterExtensionListener(
|
||||
nullptr, [](void*, const char* name, void* data) {
|
||||
if (std::string_view{name} == "ds_socket") {
|
||||
|
||||
@@ -6,6 +6,16 @@
|
||||
|
||||
#include <functional>
|
||||
|
||||
struct ImGuiContext;
|
||||
|
||||
namespace glass {
|
||||
class Context;
|
||||
} // namespace glass
|
||||
|
||||
namespace wpi::gui {
|
||||
struct Context;
|
||||
} // namespace wpi::gui
|
||||
|
||||
namespace halsimgui {
|
||||
|
||||
// These functions can be used to hook into the GUI, and can be accessed
|
||||
@@ -23,4 +33,13 @@ using AddGuiEarlyExecuteFn = void (*)(std::function<void()> execute);
|
||||
#define HALSIMGUI_EXT_GUIEXIT "halsimgui::GuiExit"
|
||||
using GuiExitFn = void (*)();
|
||||
|
||||
#define HALSIMGUI_EXT_GETIMGUICONTEXT "halsimgui::GetImguiContext"
|
||||
using GetImguiContextFn = ImGuiContext* (*)();
|
||||
|
||||
#define HALSIMGUI_EXT_GETGUICONTEXT "halsimgui::GetGuiContext"
|
||||
using GetGuiContextFn = wpi::gui::Context* (*)();
|
||||
|
||||
#define HALSIMGUI_EXT_GETGLASSCONTEXT "halsimgui::GetGlassContext"
|
||||
using GetGlassContextFn = glass::Context* (*)();
|
||||
|
||||
} // namespace halsimgui
|
||||
|
||||
@@ -169,6 +169,14 @@ void gui::DestroyContext() {
|
||||
gContext = nullptr;
|
||||
}
|
||||
|
||||
Context* gui::GetCurrentContext() {
|
||||
return gContext;
|
||||
}
|
||||
|
||||
void gui::SetCurrentContext(Context* context) {
|
||||
gContext = context;
|
||||
}
|
||||
|
||||
static void UpdateFontScale() {
|
||||
// Scale based on OS window content scaling
|
||||
float windowScale = 1.0;
|
||||
|
||||
@@ -14,6 +14,8 @@ extern "C" struct GLFWwindow;
|
||||
|
||||
namespace wpi::gui {
|
||||
|
||||
struct Context;
|
||||
|
||||
/**
|
||||
* Creates GUI context. Must be called prior to calling any other functions.
|
||||
*/
|
||||
@@ -24,6 +26,20 @@ void CreateContext();
|
||||
*/
|
||||
void DestroyContext();
|
||||
|
||||
/**
|
||||
* Gets GUI context.
|
||||
*
|
||||
* @return context
|
||||
*/
|
||||
Context* GetCurrentContext();
|
||||
|
||||
/**
|
||||
* Sets GUI context.
|
||||
*
|
||||
* @param context context
|
||||
*/
|
||||
void SetCurrentContext(Context* context);
|
||||
|
||||
/**
|
||||
* Initializes the GUI.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user