[view] Add a cexpr enum for grav_t

And use it for hud_scoreboard_gravity. Putting the enum def in view made
the most sense as view does own the base type and the enum is likely to
be by useful for other settings.
This commit is contained in:
Bill Currie 2022-04-24 21:09:58 +09:00
parent bdb1192c13
commit bafe54b010
4 changed files with 44 additions and 26 deletions

View file

@ -66,6 +66,8 @@ typedef enum {
grav_northwest, ///< +ve X right, +ve Y down, -X left, -ve Y up
} grav_t;
extern struct exprtype_s grav_t_type;
/** The view object.
*/
typedef struct view_s view_t;

View file

@ -31,7 +31,6 @@
extern int hud_sb_lines;
extern int hud_sbar;
extern char *hud_scoreboard_gravity;
extern int hud_swap;
extern struct view_s *sbar_view;

View file

@ -52,7 +52,7 @@ static cvar_t hud_sbar_cvar = {
.flags = CVAR_ARCHIVE,
.value = { .type = &cexpr_int, .value = &hud_sbar },
};
char *hud_scoreboard_gravity;
grav_t hud_scoreboard_gravity;
static cvar_t hud_scoreboard_gravity_cvar = {
.name = "hud_scoreboard_gravity",
.description =
@ -60,7 +60,7 @@ static cvar_t hud_scoreboard_gravity_cvar = {
"northeast, west, east, southwest, south, southeast",
.default_value = "center",
.flags = CVAR_ARCHIVE,
.value = { .type = 0/* not used */, .value = &hud_scoreboard_gravity },
.value = { .type = &grav_t_type, .value = &hud_scoreboard_gravity },
};
int hud_swap;
static cvar_t hud_swap_cvar = {
@ -123,29 +123,7 @@ hud_swap_f (void *data, const cvar_t *cvar)
static void
hud_scoreboard_gravity_f (void *data, const cvar_t *cvar)
{
grav_t grav;
if (strequal (hud_scoreboard_gravity, "center"))
grav = grav_center;
else if (strequal (hud_scoreboard_gravity, "northwest"))
grav = grav_northwest;
else if (strequal (hud_scoreboard_gravity, "north"))
grav = grav_north;
else if (strequal (hud_scoreboard_gravity, "northeast"))
grav = grav_northeast;
else if (strequal (hud_scoreboard_gravity, "west"))
grav = grav_west;
else if (strequal (hud_scoreboard_gravity, "east"))
grav = grav_east;
else if (strequal (hud_scoreboard_gravity, "southwest"))
grav = grav_southwest;
else if (strequal (hud_scoreboard_gravity, "south"))
grav = grav_south;
else if (strequal (hud_scoreboard_gravity, "southeast"))
grav = grav_southeast;
else
grav = grav_center;
view_setgravity (hud_overlay_view, grav);
view_setgravity (hud_overlay_view, hud_scoreboard_gravity);
}
void

View file

@ -39,8 +39,47 @@
#endif
#include <stdlib.h>
#include "QF/cexpr.h"
#include "QF/ui/view.h"
static exprenum_t grav_t_enum;
exprtype_t grav_t_type = {
.name = "grav_t",
.size = sizeof (grav_t),
.data = &grav_t_enum,
.get_string = cexpr_enum_get_string,
};
static grav_t grav_t_values[] = {
grav_center,
grav_north,
grav_northeast,
grav_east,
grav_southeast,
grav_south,
grav_southwest,
grav_west,
grav_northwest,
};
static exprsym_t grav_t_symbols[] = {
{ "center", &grav_t_type, grav_t_values + grav_center },
{ "north", &grav_t_type, grav_t_values + grav_north },
{ "northeast", &grav_t_type, grav_t_values + grav_northeast },
{ "east", &grav_t_type, grav_t_values + grav_east },
{ "southeast", &grav_t_type, grav_t_values + grav_southeast },
{ "south", &grav_t_type, grav_t_values + grav_south },
{ "southwest", &grav_t_type, grav_t_values + grav_southwest },
{ "west", &grav_t_type, grav_t_values + grav_west },
{ "northwest", &grav_t_type, grav_t_values + grav_northwest },
{}
};
static exprtab_t grav_t_symtab = {
grav_t_symbols,
};
static exprenum_t grav_t_enum = {
&grav_t_type,
&grav_t_symtab,
};
static void
setgeometry (view_t *view)
{