mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-12-23 22:31:46 +00:00
[client] implement stream paused alert
This commit is contained in:
parent
697dbc7a96
commit
60070e6076
3 changed files with 60 additions and 11 deletions
|
@ -118,7 +118,7 @@ typedef void (* LG_RendererOnResize )(void * opaque, const int width,
|
||||||
typedef bool (* LG_RendererOnMouseShape)(void * opaque, const LG_RendererCursor cursor, const int width, const int height, const int pitch, const uint8_t * data);
|
typedef bool (* LG_RendererOnMouseShape)(void * opaque, const LG_RendererCursor cursor, const int width, const int height, const int pitch, const uint8_t * data);
|
||||||
typedef bool (* LG_RendererOnMouseEvent)(void * opaque, const bool visible , const int x, const int y);
|
typedef bool (* LG_RendererOnMouseEvent)(void * opaque, const bool visible , const int x, const int y);
|
||||||
typedef bool (* LG_RendererOnFrameEvent)(void * opaque, const LG_RendererFormat format, const uint8_t * data);
|
typedef bool (* LG_RendererOnFrameEvent)(void * opaque, const LG_RendererFormat format, const uint8_t * data);
|
||||||
typedef void (* LG_RendererOnAlert )(void * opaque, const LG_RendererAlert alert, const char * message);
|
typedef void (* LG_RendererOnAlert )(void * opaque, const LG_RendererAlert alert, const char * message, bool ** closeFlag);
|
||||||
typedef bool (* LG_RendererRender )(void * opaque, SDL_Window *window);
|
typedef bool (* LG_RendererRender )(void * opaque, SDL_Window *window);
|
||||||
|
|
||||||
typedef struct LG_Renderer
|
typedef struct LG_Renderer
|
||||||
|
|
|
@ -540,7 +540,8 @@ int eventFilter(void * userdata, SDL_Event * event)
|
||||||
state.lgr->on_alert(
|
state.lgr->on_alert(
|
||||||
state.lgrData,
|
state.lgrData,
|
||||||
serverMode ? LG_ALERT_SUCCESS : LG_ALERT_WARNING,
|
serverMode ? LG_ALERT_SUCCESS : LG_ALERT_WARNING,
|
||||||
serverMode ? "Capture Enabled" : "Capture Disabled"
|
serverMode ? "Capture Enabled" : "Capture Disabled",
|
||||||
|
NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!serverMode)
|
if (!serverMode)
|
||||||
|
@ -970,6 +971,7 @@ int run()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool *closeAlert = NULL;
|
||||||
while(state.running)
|
while(state.running)
|
||||||
{
|
{
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
|
@ -982,6 +984,29 @@ int run()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (closeAlert == NULL)
|
||||||
|
{
|
||||||
|
if (state.shm->flags & KVMFR_HEADER_FLAG_PAUSED)
|
||||||
|
{
|
||||||
|
if (state.lgr && !params.disableAlerts)
|
||||||
|
state.lgr->on_alert(
|
||||||
|
state.lgrData,
|
||||||
|
LG_ALERT_WARNING,
|
||||||
|
"Stream Paused",
|
||||||
|
&closeAlert
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!(state.shm->flags & KVMFR_HEADER_FLAG_PAUSED))
|
||||||
|
{
|
||||||
|
*closeAlert = true;
|
||||||
|
closeAlert = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
usleep(1000);
|
usleep(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1595,4 +1620,4 @@ int main(int argc, char * argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
|
@ -43,6 +43,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
#define ALERT_TEXTURE 2
|
#define ALERT_TEXTURE 2
|
||||||
#define TEXTURE_COUNT 3
|
#define TEXTURE_COUNT 3
|
||||||
|
|
||||||
|
#define ALERT_TIMEOUT_FLAG ((uint64_t)-1)
|
||||||
|
|
||||||
#define FADE_TIME 1000000
|
#define FADE_TIME 1000000
|
||||||
|
|
||||||
struct Options
|
struct Options
|
||||||
|
@ -63,9 +65,13 @@ static struct Options defaultOptions =
|
||||||
|
|
||||||
struct Alert
|
struct Alert
|
||||||
{
|
{
|
||||||
|
bool ready;
|
||||||
|
bool useCloseFlag;
|
||||||
|
|
||||||
SDL_Surface *text;
|
SDL_Surface *text;
|
||||||
float r, g, b, a;
|
float r, g, b, a;
|
||||||
uint64_t timeout;
|
uint64_t timeout;
|
||||||
|
bool closeFlag;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Inst
|
struct Inst
|
||||||
|
@ -343,7 +349,7 @@ bool opengl_on_frame_event(void * opaque, const LG_RendererFormat format, const
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void opengl_on_alert(void * opaque, const LG_RendererAlert alert, const char * message)
|
void opengl_on_alert(void * opaque, const LG_RendererAlert alert, const char * message, bool ** closeFlag)
|
||||||
{
|
{
|
||||||
struct Inst * this = (struct Inst *)opaque;
|
struct Inst * this = (struct Inst *)opaque;
|
||||||
struct Alert * a = malloc(sizeof(struct Alert));
|
struct Alert * a = malloc(sizeof(struct Alert));
|
||||||
|
@ -388,6 +394,12 @@ void opengl_on_alert(void * opaque, const LG_RendererAlert alert, const char * m
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (closeFlag)
|
||||||
|
{
|
||||||
|
a->useCloseFlag = true;
|
||||||
|
*closeFlag = &a->closeFlag;
|
||||||
|
}
|
||||||
|
|
||||||
ll_push(this->alerts, a);
|
ll_push(this->alerts, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -534,7 +546,7 @@ bool opengl_render(void * opaque, SDL_Window * window)
|
||||||
struct Alert * alert;
|
struct Alert * alert;
|
||||||
while(ll_peek_head(this->alerts, (void **)&alert))
|
while(ll_peek_head(this->alerts, (void **)&alert))
|
||||||
{
|
{
|
||||||
if (alert->timeout == 0)
|
if (!alert->ready)
|
||||||
{
|
{
|
||||||
surface_to_texture(alert->text, this->textures[ALERT_TEXTURE]);
|
surface_to_texture(alert->text, this->textures[ALERT_TEXTURE]);
|
||||||
|
|
||||||
|
@ -566,16 +578,28 @@ bool opengl_render(void * opaque, SDL_Window * window)
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
glEndList();
|
glEndList();
|
||||||
|
|
||||||
alert->timeout = microtime() + 2*1000000;
|
if (!alert->useCloseFlag)
|
||||||
|
alert->timeout = microtime() + 2*1000000;
|
||||||
|
alert->ready = true;
|
||||||
|
|
||||||
SDL_FreeSurface(alert->text);
|
SDL_FreeSurface(alert->text);
|
||||||
alert->text = NULL;
|
alert->text = NULL;
|
||||||
|
alert->ready = true;
|
||||||
}
|
}
|
||||||
else if (alert->timeout < microtime())
|
else
|
||||||
{
|
{
|
||||||
free(alert);
|
bool close = false;
|
||||||
ll_shift(this->alerts, NULL);
|
if (alert->useCloseFlag)
|
||||||
continue;
|
close = alert->closeFlag;
|
||||||
|
else if (alert->timeout < microtime())
|
||||||
|
close = true;
|
||||||
|
|
||||||
|
if (close)
|
||||||
|
{
|
||||||
|
free(alert);
|
||||||
|
ll_shift(this->alerts, NULL);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
|
Loading…
Reference in a new issue