From da8b4e5d35e2b165f0eb52abc19cb95abc1d6d10 Mon Sep 17 00:00:00 2001 From: dwk Date: Fri, 13 Jun 2008 02:27:16 -0600 Subject: [PATCH] Added a background to the help menu. Made textboxes support CTRL-. The help menu's background is a new NASA image of the Andromeda Galaxy (M33). The variables in src/CMakeLists.txt were shuffled around so that -g could be added to all of the source files at once. The CMake build system now creates debug executables. Made CTRL-directional keys and CTRL-DELETE and CTRL-BACKSPACE work in textboxes. When control is held down, these keys operate on words instead of single characters. (Currently, everything that is not a space is part of a word -- this may change.) move_cursor_word() might be too clever for its own good. Simplified help.c a little bit, and fixed a memory leak (fclose() was not being called). Notes: - Removed some unnecessary #includes. - Used set_widget_visibility() twice in menu.c, simplifying the code. - Comboboxes now (always) have horizontal scrollbars, just to test it out. - xuni is now over 14,000 lines long. --- TODO | 2 ++ gui/background/m33.jpg | Bin 0 -> 53797 bytes gui/data/help.xml | 10 ++++++ src/CMakeLists.txt | 30 ++++++++-------- src/graphics.c | 1 - src/gui.c | 92 ++++++++++++++++++++++++++++++++++++++++++------ src/gui.h | 2 +- src/test/CMakeLists.txt | 6 ++-- src/test/game.c | 3 -- src/test/help.c | 11 +++--- src/test/menu.c | 31 ++++++---------- src/test/options.c | 3 -- src/widget/combobox.c | 2 +- src/widget/image_tile.c | 2 -- 14 files changed, 128 insertions(+), 67 deletions(-) create mode 100644 gui/background/m33.jpg diff --git a/TODO b/TODO index fa17cbb..b5d227a 100644 --- a/TODO +++ b/TODO @@ -343,3 +343,5 @@ Need to test call_blit_surface(). label_t::text has to be made un-const. Support XML file writing. + +Make widget_t::p a void* pointer, to allow widget types to be dynamically added? diff --git a/gui/background/m33.jpg b/gui/background/m33.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99e3aae26a4d721e10b4cbcee435492922cc8d83 GIT binary patch literal 53797 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
5~Y@YA@Stl`%6833AgK^F0E;ybJp6K?3 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 V8_781pGqj81`1FI%|#Re|Jhs#%Dn&p literal 0 HcwPel00001 diff --git a/gui/data/help.xml b/gui/data/help.xml index 34364ff..5e3cdd5 100644 --- a/gui/data/help.xml +++ b/gui/data/help.xml @@ -15,6 +15,16 @@ help_free + + background + 0 + 0 + 100 + 100 + ../background/m33.jpg + 0 + + back 100.0 - 100.0 / 3 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 12d43f2..088e79f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,9 +1,7 @@ INCLUDE_DIRECTORIES(/usr/include/SDL . widget) LINK_DIRECTORIES(.) -# The xuni library - -SET(XUNI_LIBRARY xuni) +# Setup source variables SET(LIBRARY_SOURCES error.c graphics.c gui.c loadso.c loop.c memory.c utility.c xuni.c @@ -14,6 +12,15 @@ SET(LIBRARY_SOURCES widget/scrollbar.c widget/textarea.c widget/textbox.c widget/theme.c widget/widgets.c ) +SET(TEST_SOURCES test/main.c) +SET(EDITOR_SOURCES editor/editor.c) +SET(SOURCES ${LIBRARY_SOURCES} ${TEST_SOURCES} ${EDITOR_SOURCES}) + +SET_SOURCE_FILES_PROPERTIES(${SOURCES} COMPILE_FLAGS -g) + +# Setup library variables + +SET(XUNI_LIBRARY xuni) IF(DEFINED LIBMXML) SET(XML_LIBRARIES mxml) @@ -27,15 +34,10 @@ ELSE(DEFINED LIBMXML) # COMPILE_FLAGS -DHAVE_LIBEXPAT) ENDIF(DEFINED LIBMXML) -ADD_LIBRARY(${XUNI_LIBRARY} STATIC ${LIBRARY_SOURCES}) - -# Libraries - SET(SDL_LIBRARIES SDL SDL_gfx SDL_image SDL_ttf) - SET(LIBRARIES ${XML_LIBRARIES} ${SDL_LIBRARIES} ${XUNI_LIBRARY}) -# Defines +# Setup version variables EXECUTE_PROCESS(COMMAND git log COMMAND head -n 1 @@ -44,21 +46,17 @@ EXECUTE_PROCESS(COMMAND git log OUTPUT_VARIABLE XUNI_GIT_VERSION) IF(XUNI_GIT_VERSION) - SET_SOURCE_FILES_PROPERTIES(xuni.c + SET_SOURCE_FILES_PROPERTIES(xuni.h COMPILE_FLAGS -DXUNI_GIT_VERSION='"${XUNI_GIT_VERSION}"') ENDIF(XUNI_GIT_VERSION) -# The main xuni test program +# Libraries and executables -SET(TEST_SOURCES test/main.c) +ADD_LIBRARY(${XUNI_LIBRARY} STATIC ${LIBRARY_SOURCES}) ADD_EXECUTABLE(../test ${TEST_SOURCES}) TARGET_LINK_LIBRARIES(../test ${LIBRARIES}) -# The xuni resource editor - -SET(EDITOR_SOURCES editor/editor.c) - ADD_EXECUTABLE(../editor ${EDITOR_SOURCES}) TARGET_LINK_LIBRARIES(../editor ${LIBRARIES}) diff --git a/src/graphics.c b/src/graphics.c index 06646f8..0e07af6 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -8,7 +8,6 @@ #include /* for save_screenshot()'s calls */ #include "SDL_image.h" -#include "SDL_rotozoom.h" #include "error.h" #include "graphics.h" diff --git a/src/gui.c b/src/gui.c index bce22da..1bc2104 100644 --- a/src/gui.c +++ b/src/gui.c @@ -56,6 +56,9 @@ static SDLKey get_key_identifier_from_string(const char *name); static void add_resource_widget(struct xuni_t *xuni, struct widget_t **base, struct resource_data_t *data); +static size_t move_cursor_word(struct widget_edit_t *edit, size_t startpos, + int dir, int flip); + void init_theme_structure(struct theme_t *theme) { theme->current = 0; theme->cursors.normal = 0; @@ -160,15 +163,15 @@ void edit_add_char(struct widget_edit_t *edit, char c) { } /* !!! lots of const -> non-const in this function */ -void edit_del_char(struct widget_edit_t *edit) { - if(edit->pos + 1 != edit->len) { +void edit_del_chars(struct widget_edit_t *edit, size_t n) { + if(edit->pos + n < edit->len) { memmove((char *)edit->data->text + edit->pos, - (char *)edit->data->text + edit->pos + 1, - edit->len - edit->pos + 1 - 1); + (char *)edit->data->text + edit->pos + n, + edit->len - edit->pos + n - 1); } else ((char *)edit->data->text)[edit->pos] = 0; - edit->len --; + edit->len -= n; } /*! Clears the sel member of the widget \a widget and all of its child @@ -1017,6 +1020,25 @@ void init_wid_array(struct widget_t *base, struct widget_t *use, } } +static size_t move_cursor_word(struct widget_edit_t *edit, size_t startpos, + int dir, int flip) { + + int space; + size_t x, pos = startpos; + + while((dir < 0) ? pos : (pos < edit->len)) { + x = pos; + if(dir < 0) x --; + + space = (isspace(edit->data->text[x]) ? 1 : 0); + if(space != flip) break; + + pos += dir; + } + + return pos; +} + int widget_process_character(struct xuni_t *xuni, SDL_keysym *sym) { struct widget_t *widget = xuni->gui->active.widget; @@ -1036,8 +1058,20 @@ int widget_process_character(struct xuni_t *xuni, SDL_keysym *sym) { edit_add_char(&xuni->gui->edit, sym->unicode); } else if(sym->unicode == '\b' && xuni->gui->edit.pos) { - xuni->gui->edit.pos --; - edit_del_char(&xuni->gui->edit); + if(sym->mod & KMOD_CTRL) { + size_t end = xuni->gui->edit.pos; + + xuni->gui->edit.pos = move_cursor_word(&xuni->gui->edit, + xuni->gui->edit.pos, -1, 1); + xuni->gui->edit.pos = move_cursor_word(&xuni->gui->edit, + xuni->gui->edit.pos, -1, 0); + + edit_del_chars(&xuni->gui->edit, end - xuni->gui->edit.pos); + } + else { + xuni->gui->edit.pos --; + edit_del_chars(&xuni->gui->edit, 1); + } } else if(sym->unicode == '\r') { clear_active(xuni, &xuni->gui->active, 1); @@ -1045,15 +1079,42 @@ int widget_process_character(struct xuni_t *xuni, SDL_keysym *sym) { else if(sym->sym == SDLK_DELETE && xuni->gui->edit.pos < xuni->gui->edit.len) { - edit_del_char(&xuni->gui->edit); + if(sym->mod & KMOD_CTRL) { + size_t end; + + end = move_cursor_word(&xuni->gui->edit, + xuni->gui->edit.pos, 1, 0); + end = move_cursor_word(&xuni->gui->edit, end, 1, 1); + + edit_del_chars(&xuni->gui->edit, end - xuni->gui->edit.pos); + } + else { + edit_del_chars(&xuni->gui->edit, 1); + } } else if(sym->sym == SDLK_LEFT && xuni->gui->edit.pos) { - xuni->gui->edit.pos --; + if(sym->mod & KMOD_CTRL) { + xuni->gui->edit.pos = move_cursor_word(&xuni->gui->edit, + xuni->gui->edit.pos, -1, 1); + xuni->gui->edit.pos = move_cursor_word(&xuni->gui->edit, + xuni->gui->edit.pos, -1, 0); + } + else { + xuni->gui->edit.pos --; + } } else if(sym->sym == SDLK_RIGHT && xuni->gui->edit.pos < xuni->gui->edit.len) { - xuni->gui->edit.pos ++; + if(sym->mod & KMOD_CTRL) { + xuni->gui->edit.pos = move_cursor_word(&xuni->gui->edit, + xuni->gui->edit.pos, 1, 0); + xuni->gui->edit.pos = move_cursor_word(&xuni->gui->edit, + xuni->gui->edit.pos, 1, 1); + } + else { + xuni->gui->edit.pos ++; + } } else if(sym->sym == SDLK_END) { xuni->gui->edit.pos = xuni->gui->edit.len; @@ -1078,6 +1139,13 @@ int widget_process_character(struct xuni_t *xuni, SDL_keysym *sym) { return 0; } +/*! Returns true if the widget \a widget can be activated. This should depend + only on the type of \a widget -- for example, textboxes can be activated + (after which they trap keyboard input), but buttons cannot. + + \param widget The widget to examine the type of. + \return True if the widget \a widget can be activated. +*/ int widget_can_be_active(struct widget_t *widget) { if(!widget) return 0; @@ -1247,6 +1315,10 @@ void perform_widget_click(struct xuni_t *xuni, struct widget_t *widget) { } } +/*! Frees the memory allocated for the gui_t structure (xuni_t::gui). + \param xuni A pointer to the main xuni structure. Only the gui member of + this structure is used. +*/ void free_gui(struct xuni_t *xuni) { widget_event(xuni, xuni->gui->widget, WIDGET_EVENT_FREE); } diff --git a/src/gui.h b/src/gui.h index 420a33d..677079f 100644 --- a/src/gui.h +++ b/src/gui.h @@ -25,7 +25,7 @@ void clear_edit(struct widget_edit_t *edit); void clear_active(struct xuni_t *xuni, struct widget_p_t *wp, int keep); void clear_tab(struct widget_tab_t *tab, panel_type_t panel); void edit_add_char(struct widget_edit_t *edit, char c); -void edit_del_char(struct widget_edit_t *edit); +void edit_del_chars(struct widget_edit_t *edit, size_t n); int clear_widget_sel(struct widget_t *widget); int clear_widget_sel_keep(struct widget_t *widget, struct widget_t *keep, int n); diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index da649ae..cae19bb 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -1,5 +1,5 @@ -SET(TEST_SO_SOURCES - game.c help.c menu.c options.c -) +SET(TEST_SO_SOURCES game.c help.c menu.c options.c) + +#SET_SOURCE_FILES_PROPERTIES(${TEST_SO_SOURCES} COMPILE_FLAGS -g) ADD_LIBRARY(test SHARED ${TEST_SO_SOURCES}) diff --git a/src/test/game.c b/src/test/game.c index 87323c7..040dae4 100644 --- a/src/test/game.c +++ b/src/test/game.c @@ -2,9 +2,6 @@ */ -#include "SDL_image.h" -#include "SDL_rotozoom.h" - #include "game.h" #include "menu.h" /* for paint_menu_fps() */ diff --git a/src/test/help.c b/src/test/help.c index 0469470..7c24dcc 100644 --- a/src/test/help.c +++ b/src/test/help.c @@ -5,9 +5,6 @@ #include #include -#include "SDL_image.h" -#include "SDL_rotozoom.h" - #include "help.h" #include "graphics.h" @@ -34,8 +31,8 @@ int help_init(struct xuni_t *xuni, struct panel_data_t *data) { init_wid(xuni->gui->widget, xuni->gui->widget, PANEL_HELP, "help"); - init_wid(xuni->gui->widget, panel, WID_BACK, "help/back"); - init_wid(xuni->gui->widget, panel, WID_README, "help/readme"); + init_wid(panel, panel, WID_BACK, "back"); + init_wid(panel, panel, WID_README, "readme"); add_widget_accelerator(xuni, panel, widget_nameid_access(panel, WID_BACK), SDLK_ESCAPE, KMOD_NONE); @@ -63,11 +60,13 @@ static void get_readme_text(struct xuni_t *xuni, struct widget_t *panel) { add_listbox_item(xuni, widget_nameid_access(panel, WID_README) ->compose->widget[WID_LISTBOX_DATA], - THEME_FONT_SANS, line); + strstr(line, "http") ? THEME_FONT_MONO : THEME_FONT_SANS, line); } widget_event(xuni, widget_nameid_access(panel, WID_README), WIDGET_EVENT_RESCALE); + + fclose(file); } int help_start(struct xuni_t *xuni, struct panel_data_t *data) { diff --git a/src/test/menu.c b/src/test/menu.c index f442e5d..4b5078c 100644 --- a/src/test/menu.c +++ b/src/test/menu.c @@ -4,9 +4,6 @@ #include -#include "SDL_image.h" -#include "SDL_rotozoom.h" - #include "menu.h" #include "error.h" @@ -86,14 +83,10 @@ void switch_main_menu_background(struct widget_t *panel, const char *name) { panel->p.panel->frameupdate = data[index].frameupdate; for(x = 0; x < sizeof(wids) / sizeof(*wids); x ++) { - if(data[index].enable[x]) { - widget_nameid_access(panel, wids[x])->visibility - |= WIDGET_VISIBILITY_VISIBLE; - } - else { - widget_nameid_access(panel, wids[x])->visibility - &= ~WIDGET_VISIBILITY_VISIBLE; - } + set_widget_visibility( + widget_nameid_access(panel, wids[x]), + WIDGET_VISIBILITY_VISIBLE, + data[index].enable[x]); } } } @@ -225,16 +218,12 @@ static void set_hover_visible(struct gui_t *gui, struct widget_t *menu) { size_t x; for(x = WID_NEWGAME_IMAGE; x <= WID_QUIT_IMAGE; x ++) { - if(gui->sel.p.widget && gui->sel.p.widget == widget_nameid_follow( - menu, x + (WID_NEWGAME - WID_NEWGAME_IMAGE), (size_t)-1)) { - - widget_nameid_access(menu, x)->visibility - |= WIDGET_VISIBILITY_VISIBLE; - } - else { - widget_nameid_access(menu, x)->visibility - &= ~WIDGET_VISIBILITY_VISIBLE; - } + int set = (gui->sel.p.widget + && gui->sel.p.widget == widget_nameid_follow(menu, + x + (WID_NEWGAME - WID_NEWGAME_IMAGE), (size_t)-1)); + + set_widget_visibility(widget_nameid_access(menu, x), + WIDGET_VISIBILITY_VISIBLE, set); } } diff --git a/src/test/options.c b/src/test/options.c index ab26e16..61b25d3 100644 --- a/src/test/options.c +++ b/src/test/options.c @@ -6,9 +6,6 @@ #include #include -#include "SDL_image.h" -#include "SDL_rotozoom.h" - #include "options.h" #include "graphics.h" diff --git a/src/widget/combobox.c b/src/widget/combobox.c index 199bd72..c363ff8 100644 --- a/src/widget/combobox.c +++ b/src/widget/combobox.c @@ -87,7 +87,7 @@ void init_combobox(struct xuni_t *xuni, struct widget_t *widget, init_widget_pos(last_compose_widget(widget), 0, height, 100.0, 100.0 - height, POS_PACK_NONE); init_listbox(last_compose_widget(widget), xuni, - SCROLLBAR_USE_VERTICAL, SCROLLBAR_USE_VERTICAL); + SCROLLBAR_USE_BOTH, SCROLLBAR_USE_BOTH); last_compose_widget(widget)->visibility &= ~WIDGET_VISIBILITY_VISIBLE; /*last_compose_widget(widget)->visibility &= ~WIDGET_VISIBILITY_SELABLE;*/ diff --git a/src/widget/image_tile.c b/src/widget/image_tile.c index 946d773..3b92b66 100644 --- a/src/widget/image_tile.c +++ b/src/widget/image_tile.c @@ -4,8 +4,6 @@ #include -#include "SDL_rotozoom.h" - #include "../graphics.h" #include "../memory.h" #include "../error.h" -- 2.11.4.GIT