mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-10-17 12:58:11 +00:00
[client] app: move all alert management into overlay/alert.c
This commit is contained in:
@@ -22,8 +22,23 @@
|
||||
#include "cimgui.h"
|
||||
#include "overlay_utils.h"
|
||||
|
||||
#include "common/stringutils.h"
|
||||
|
||||
#include "../main.h"
|
||||
|
||||
#define ALERT_TIMEOUT (2000 / (1000/25))
|
||||
|
||||
struct AlertState
|
||||
{
|
||||
bool show;
|
||||
char * message;
|
||||
LG_MsgAlert type;
|
||||
uint64_t timeout;
|
||||
bool redraw;
|
||||
};
|
||||
|
||||
struct AlertState l_alert = { 0 };
|
||||
|
||||
static bool alert_init(void ** udata, const void * params)
|
||||
{
|
||||
return true;
|
||||
@@ -31,6 +46,8 @@ static bool alert_init(void ** udata, const void * params)
|
||||
|
||||
static void alert_free(void * udata)
|
||||
{
|
||||
free(l_alert.message);
|
||||
l_alert.message = NULL;
|
||||
}
|
||||
|
||||
static const uint32_t colours[] =
|
||||
@@ -44,14 +61,14 @@ static const uint32_t colours[] =
|
||||
static int alert_render(void * udata, bool interactive, struct Rect * windowRects,
|
||||
int maxRects)
|
||||
{
|
||||
if (!g_state.alertShow)
|
||||
if (!l_alert.show)
|
||||
return 0;
|
||||
|
||||
ImVec2 * screen = overlayGetScreenSize();
|
||||
igSetNextWindowBgAlpha(0.8f);
|
||||
igSetNextWindowPos((ImVec2) { screen->x / 2.0f, screen->y / 2.0f }, 0,
|
||||
(ImVec2) { 0.5f, 0.5f });
|
||||
igPushStyleColor_U32(ImGuiCol_WindowBg, colours[g_state.alertType]);
|
||||
igPushStyleColor_U32(ImGuiCol_WindowBg, colours[l_alert.type]);
|
||||
igPushStyleVar_Vec2(ImGuiStyleVar_WindowPadding, (ImVec2) { 4.0f , 4.0f });
|
||||
igPushStyleVar_Vec2(ImGuiStyleVar_WindowMinSize, (ImVec2) { 0.0f , 0.0f });
|
||||
|
||||
@@ -64,7 +81,7 @@ static int alert_render(void * udata, bool interactive, struct Rect * windowRect
|
||||
);
|
||||
|
||||
igPushFont(g_state.fontLarge);
|
||||
igText("%s", g_state.alertMessage);
|
||||
igText("%s", l_alert.message);
|
||||
igPopFont();
|
||||
|
||||
overlayGetImGuiRect(windowRects);
|
||||
@@ -76,10 +93,42 @@ static int alert_render(void * udata, bool interactive, struct Rect * windowRect
|
||||
return 1;
|
||||
}
|
||||
|
||||
static bool alert_tick(void * udata, unsigned long long tickCount)
|
||||
{
|
||||
if (l_alert.show && l_alert.timeout-- == 0)
|
||||
{
|
||||
l_alert.show = false;
|
||||
l_alert.redraw = true;
|
||||
}
|
||||
|
||||
if (!l_alert.redraw)
|
||||
return false;
|
||||
|
||||
l_alert.redraw = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
struct LG_OverlayOps LGOverlayAlert =
|
||||
{
|
||||
.name = "alert",
|
||||
.init = alert_init,
|
||||
.free = alert_free,
|
||||
.render = alert_render
|
||||
.render = alert_render,
|
||||
.tick = alert_tick,
|
||||
};
|
||||
|
||||
void overlayAlert_show(LG_MsgAlert type, const char * fmt, va_list args)
|
||||
{
|
||||
if (!g_state.lgr || !g_params.showAlerts)
|
||||
return;
|
||||
|
||||
char * buffer;
|
||||
valloc_sprintf(&buffer, fmt, args);
|
||||
|
||||
free(l_alert.message);
|
||||
l_alert.message = buffer;
|
||||
l_alert.timeout = ALERT_TIMEOUT;
|
||||
l_alert.type = type;
|
||||
l_alert.show = true;
|
||||
l_alert.redraw = true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user