mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-21 18:01:15 +00:00
[vid] Add a listener set for palette changes
This was needed to get crosshaircolor working correctly, but is likely another step towards resizable windows (the listener set types are generic for any viddef event, not just palette changes).
This commit is contained in:
parent
5128029368
commit
83ec2be2a6
2 changed files with 33 additions and 0 deletions
|
@ -28,6 +28,7 @@
|
|||
#ifndef __QF_vid_h
|
||||
#define __QF_vid_h
|
||||
|
||||
#include "QF/listener.h"
|
||||
#include "QF/qtypes.h"
|
||||
|
||||
#define VID_CBITS 6
|
||||
|
@ -56,8 +57,14 @@ typedef struct {
|
|||
quat_t cshift_color;
|
||||
struct view_s *conview;
|
||||
struct vid_internal_s *vid_internal;
|
||||
|
||||
struct viddef_listener_set_s *onPaletteChanged;
|
||||
} viddef_t;
|
||||
|
||||
typedef struct viddef_listener_set_s LISTENER_SET_TYPE (viddef_t)
|
||||
viddef_listener_set_t;
|
||||
typedef void (*viddef_listener_t) (void *data, const viddef_t *viddef);
|
||||
|
||||
#define viddef (*r_data->vid)
|
||||
|
||||
extern unsigned int d_8to24table[256]; //FIXME nq/qw uses
|
||||
|
@ -73,4 +80,8 @@ void VID_Init (byte *palette, byte *colormap);
|
|||
void VID_SetCaption (const char *text);
|
||||
void VID_ClearMemory (void);
|
||||
|
||||
void VID_OnPaletteChange_AddListener (viddef_listener_t listener, void *data);
|
||||
void VID_OnPaletteChange_RemoveListener (viddef_listener_t listener,
|
||||
void *data);
|
||||
|
||||
#endif//__QF_vid_h
|
||||
|
|
|
@ -241,6 +241,10 @@ VID_InitGamma (const byte *pal)
|
|||
VID_UpdateGamma, "Gamma correction");
|
||||
|
||||
VID_BuildGammaTable (vid_gamma->value);
|
||||
|
||||
if (viddef.onPaletteChanged) {
|
||||
LISTENER_INVOKE (viddef.onPaletteChanged, &viddef);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -317,3 +321,21 @@ VID_ClearMemory (void)
|
|||
vi->flush_caches (vi->data);
|
||||
}
|
||||
}
|
||||
|
||||
VISIBLE void
|
||||
VID_OnPaletteChange_AddListener (viddef_listener_t listener, void *data)
|
||||
{
|
||||
if (!viddef.onPaletteChanged) {
|
||||
viddef.onPaletteChanged = malloc (sizeof (*viddef.onPaletteChanged));
|
||||
LISTENER_SET_INIT (viddef.onPaletteChanged, 8);
|
||||
}
|
||||
LISTENER_ADD (viddef.onPaletteChanged, listener, data);
|
||||
}
|
||||
|
||||
VISIBLE void
|
||||
VID_OnPaletteChange_RemoveListener (viddef_listener_t listener, void *data)
|
||||
{
|
||||
if (viddef.onPaletteChanged) {
|
||||
LISTENER_REMOVE (viddef.onPaletteChanged, listener, data);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue