diff options
author | Simon Howard | 2006-05-18 18:48:24 +0000 |
---|---|---|
committer | Simon Howard | 2006-05-18 18:48:24 +0000 |
commit | 978ddf539803405ab8fed17e21014ee1ae69fac8 (patch) | |
tree | 6f9cf3fe29ec11b9d7b008227061934fededc590 /textscreen/txt_button.c | |
parent | ff6493e0efe1c7ea628d8a6b596f915d9c9764e1 (diff) | |
download | chocolate-doom-978ddf539803405ab8fed17e21014ee1ae69fac8.tar.gz chocolate-doom-978ddf539803405ab8fed17e21014ee1ae69fac8.tar.bz2 chocolate-doom-978ddf539803405ab8fed17e21014ee1ae69fac8.zip |
Initial working text-mode GUI framework.
Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 480
Diffstat (limited to 'textscreen/txt_button.c')
-rw-r--r-- | textscreen/txt_button.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/textscreen/txt_button.c b/textscreen/txt_button.c new file mode 100644 index 00000000..93af5297 --- /dev/null +++ b/textscreen/txt_button.c @@ -0,0 +1,69 @@ + +#include <string.h> + +#include "txt_button.h" +#include "txt_io.h" +#include "txt_main.h" +#include "txt_widget.h" +#include "txt_window.h" + +static int TXT_ButtonSizeCalc(txt_widget_t *widget) +{ + txt_button_t *button = (txt_button_t *) widget; + + // Minimum width is the string length + two spaces for padding + + return strlen(button->label) + 2; +} + +static void TXT_ButtonDrawer(txt_widget_t *widget, int w, int selected) +{ + txt_button_t *button = (txt_button_t *) widget; + int i; + + TXT_BGColor(TXT_COLOR_BLUE, 0); + TXT_FGColor(TXT_COLOR_BRIGHT_WHITE); + TXT_PutChar(' '); + + if (selected) + { + TXT_BGColor(TXT_COLOR_GREY, 0); + } + + for (i=0; i<strlen(button->label); ++i) + { + TXT_PutChar(button->label[i]); + } + + for (i=strlen(button->label); i < w-2; ++i) + { + TXT_PutChar(' '); + } +} + +static void TXT_ButtonDestructor(txt_widget_t *widget) +{ + txt_button_t *button = (txt_button_t *) widget; + + free(button->label); +} + +txt_widget_class_t txt_button_class = +{ + TXT_ButtonSizeCalc, + TXT_ButtonDrawer, + TXT_ButtonDestructor, +}; + +txt_button_t *TXT_NewButton(char *label) +{ + txt_button_t *button; + + button = malloc(sizeof(txt_button_t)); + + button->widget.widget_class = &txt_button_class; + button->label = strdup(label); + + return button; +} + |