From 8d8db2ae3c64d7de45bb34cbdac2c4f150ed0c09 Mon Sep 17 00:00:00 2001 From: DeaDDooMER Date: Fri, 10 Apr 2020 11:19:18 +0400 Subject: [PATCH] menu: add video settings --- src/gl/render.c | 55 +++++++++++++++++++++++++++++++++++-------------- src/menu.c | 13 +++++++++--- src/menu.h | 3 +++ src/render.h | 9 ++++---- 4 files changed, 57 insertions(+), 23 deletions(-) diff --git a/src/gl/render.c b/src/gl/render.c index bfd379c..0818286 100644 --- a/src/gl/render.c +++ b/src/gl/render.c @@ -81,8 +81,6 @@ typedef struct image { /* Render Specific */ int SCRW = 320; // public int SCRH = 200; // public -static int gamma; -static int fullscreen; static rgb playpal[256]; static byte bright[256]; static GLuint lastTexture; @@ -1598,7 +1596,7 @@ void R_draw (void) { Y_swap_buffers(); } -void R_alloc (void) { +static void R_alloc (void) { char s[10]; int i, j, n; logo("R_alloc: load graphics\n"); @@ -1847,10 +1845,9 @@ void R_set_videomode (int w, int h, int fullscreen) { } } -void R_toggle_fullscreen (void) { +static void R_fullscreen (int yes) { R_cache_free(root, 0); - Y_set_fullscreen(!Y_get_fullscreen()); - fullscreen = Y_get_fullscreen(); + Y_set_fullscreen(yes); Y_get_videomode(&SCRW, &SCRH); root = R_cache_new(); assert(root); @@ -1858,10 +1855,46 @@ void R_toggle_fullscreen (void) { R_reload_textures(); } +static int R_video_menu_handler (new_msg_t *msg, const new_menu_t *m, void *data) { + intptr_t i = (intptr_t)data; + static int fullscreen; + switch (i) { + case -1: + switch (msg->type) { + case GM_ENTER: fullscreen = Y_get_fullscreen(); return 1; + } + break; + case 0: + switch (msg->type) { + case GM_SELECT: fullscreen = !fullscreen; return 1; + case GM_GETSTR: return GM_init_str(msg, fullscreen ? "Yes" : "No", 3); + } + break; + case 1: + switch (msg->type) { + case GM_SELECT: R_fullscreen(fullscreen); return 1; + } + } + return 0; +} + +static const new_menu_t video_menu = { + GM_BIG, "Video", (void*)-1, &R_video_menu_handler, + { + { GM_BUTTON, "Fullscreen: ", (void*)0, &R_video_menu_handler, NULL }, + { GM_BUTTON, "Apply", (void*)1, &R_video_menu_handler, NULL }, + { 0, NULL, NULL, NULL, NULL } // end + } +}; + +const new_menu_t *R_menu (void) { + return &video_menu; +} + void R_init (void) { logo("R_init: intialize opengl render\n"); R_init_playpal(); - R_set_videomode(SCRW, SCRH, fullscreen); + R_set_videomode(SCRW, SCRH, 0); } void R_done (void) { @@ -1870,14 +1903,6 @@ void R_done (void) { root = NULL; } -void R_setgamma (int g) { - gamma = g < 0 ? 0 : (g > 4 ? 4 : g); -} - -int R_getgamma (void) { - return gamma; -} - void R_get_name (int n, char s[8]) { assert(n >= 0 && n < 256); if (walp[n].res == -1) { diff --git a/src/menu.c b/src/menu.c index e80e436..f7ba78f 100644 --- a/src/menu.c +++ b/src/menu.c @@ -94,7 +94,7 @@ static void GM_say (const char nm[8]) { } } -static int GM_init_int (new_msg_t *msg, int i, int a, int b, int s) { +int GM_init_int (new_msg_t *msg, int i, int a, int b, int s) { assert(msg != NULL); assert(a <= b); assert(s >= 0); @@ -105,7 +105,7 @@ static int GM_init_int (new_msg_t *msg, int i, int a, int b, int s) { return 1; } -static int GM_init_str (new_msg_t *msg, char *str, int maxlen) { +int GM_init_str (new_msg_t *msg, char *str, int maxlen) { assert(msg != NULL); assert(str != NULL); assert(maxlen >= 0); @@ -221,6 +221,13 @@ static int GM_save_handler (new_msg_t *msg, const new_menu_t *m, void *data) { return 0; } +static int GM_options_handler (new_msg_t *msg, const new_menu_t *m, void *data) { + switch (msg->type) { + case GM_SELECT: GM_push(R_menu()); return 1; + } + return 0; +} + static int GM_exit_handler (new_msg_t *msg, const new_menu_t *m, void *data) { switch (msg->type) { case GM_ENTER: @@ -289,7 +296,7 @@ static const new_menu_t newgame_menu = { }, options_menu = { GM_BIG, "Options", NULL, NULL, { - //{ GM_BUTTON, "Video", NULL, NULL, NULL }, + { GM_BUTTON, "Video", NULL, &GM_options_handler, NULL }, { GM_BUTTON, "Sound", NULL, NULL, &sound_menu }, { GM_BUTTON, "Music", NULL, NULL, &music_menu }, { 0, NULL, NULL, NULL, NULL } // end diff --git a/src/menu.h b/src/menu.h index b0b2929..38a3205 100644 --- a/src/menu.h +++ b/src/menu.h @@ -93,6 +93,9 @@ extern int imax; extern short lastkey; +int GM_init_int (new_msg_t *msg, int i, int a, int b, int s); +int GM_init_str (new_msg_t *msg, char *str, int maxlen); + void GM_push (const new_menu_t *m); void GM_pop (void); void GM_popall (void); diff --git a/src/render.h b/src/render.h index 4904017..1299929 100644 --- a/src/render.h +++ b/src/render.h @@ -1,16 +1,15 @@ #ifndef RENDER_H_INCLUDED #define RENDER_H_INCLUDED +#include "menu.h" + extern int SCRW, SCRH; // from vga.c -void R_draw (void); -void R_alloc (void); +const new_menu_t *R_menu (void); void R_init (void); +void R_draw (void); void R_done (void); -void R_setgamma (int g); -int R_getgamma (void); -void R_toggle_fullscreen (void); void R_set_videomode (int w, int h, int fullscreen); void R_get_name (int n, char s[8]); -- 2.29.2