diff options
Diffstat (limited to 'engines/sci/gfx/menubar.cpp')
-rw-r--r-- | engines/sci/gfx/menubar.cpp | 163 |
1 files changed, 62 insertions, 101 deletions
diff --git a/engines/sci/gfx/menubar.cpp b/engines/sci/gfx/menubar.cpp index e68fed3686..89d2d0335f 100644 --- a/engines/sci/gfx/menubar.cpp +++ b/engines/sci/gfx/menubar.cpp @@ -34,16 +34,14 @@ #define SIZE_INF 32767 -menubar_t * -menubar_new() { +menubar_t *menubar_new() { menubar_t *tmp = (menubar_t*)sci_malloc(sizeof(menubar_t)); tmp->menus_nr = 0; return tmp; } -void -menubar_free(menubar_t *menubar) { +void menubar_free(menubar_t *menubar) { int i; for (i = 0; i < menubar->menus_nr; i++) { @@ -67,20 +65,18 @@ menubar_free(menubar_t *menubar) { free(menubar); } - -int -_menubar_add_menu_item(gfx_state_t *state, menu_t *menu, int type, char *left, char *right, - int font, int key, int modifiers, int tag, reg_t text_pos) -/* Returns the total text size, plus MENU_BOX_CENTER_PADDING if (right != NULL) */ -{ +int _menubar_add_menu_item(gfx_state_t *state, menu_t *menu, int type, char *left, char *right, + int font, int key, int modifiers, int tag, reg_t text_pos) { +// Returns the total text size, plus MENU_BOX_CENTER_PADDING if (right != NULL) menu_item_t *item; int total_left_size = 0; int width, height; if (menu->items_nr == 0) { - menu->items = (menu_item_t *) sci_malloc(sizeof(menu_item_t)); + menu->items = (menu_item_t *)sci_malloc(sizeof(menu_item_t)); menu->items_nr = 1; - } else menu->items = (menu_item_t *) sci_realloc(menu->items, sizeof(menu_item_t) * ++(menu->items_nr)); + } else + menu->items = (menu_item_t *)sci_realloc(menu->items, sizeof(menu_item_t) * ++(menu->items_nr)); item = &(menu->items[menu->items_nr - 1]); @@ -89,13 +85,13 @@ _menubar_add_menu_item(gfx_state_t *state, menu_t *menu, int type, char *left, c if ((item->type = type) == MENU_TYPE_HBAR) return 0; - /* else assume MENU_TYPE_NORMAL */ + // else assume MENU_TYPE_NORMAL item->text = left; if (right) { int end = strlen(right); item->keytext = right; while (end && isspace(right[end])) - right[end--] = 0; /* Remove trailing whitespace */ + right[end--] = 0; // Remove trailing whitespace item->flags = MENU_ATTRIBUTE_FLAGS_KEY; item->key = key; item->modifiers = modifiers; @@ -105,23 +101,19 @@ _menubar_add_menu_item(gfx_state_t *state, menu_t *menu, int type, char *left, c } if (right) { - gfxop_get_text_params(state, font, right, SIZE_INF, &width, &height, 0, - NULL, NULL, NULL); + gfxop_get_text_params(state, font, right, SIZE_INF, &width, &height, 0, NULL, NULL, NULL); total_left_size = MENU_BOX_CENTER_PADDING + (item->keytext_size = width); } item->enabled = 1; item->tag = tag; item->text_pos = text_pos; - gfxop_get_text_params(state, font, left, SIZE_INF, &width, &height, 0, - NULL, NULL, NULL); + gfxop_get_text_params(state, font, left, SIZE_INF, &width, &height, 0, NULL, NULL, NULL); return total_left_size + width; } -void -menubar_add_menu(gfx_state_t *state, menubar_t *menubar, char *title, char *entries, int font, - reg_t entries_base) { +void menubar_add_menu(gfx_state_t *state, menubar_t *menubar, char *title, char *entries, int font, reg_t entries_base) { int i, add_freesci = 0; menu_t *menu; char tracker; @@ -135,31 +127,29 @@ menubar_add_menu(gfx_state_t *state, menubar_t *menubar, char *title, char *entr #ifdef MENU_FREESCI_BLATANT_PLUG add_freesci = 1; #endif - menubar->menus = (menu_t*)sci_malloc(sizeof(menu_t)); + menubar->menus = (menu_t *)sci_malloc(sizeof(menu_t)); menubar->menus_nr = 1; - } else menubar->menus = (menu_t*)sci_realloc(menubar->menus, ++(menubar->menus_nr) * sizeof(menu_t)); + } else + menubar->menus = (menu_t *)sci_realloc(menubar->menus, ++(menubar->menus_nr) * sizeof(menu_t)); menu = &(menubar->menus[menubar->menus_nr-1]); memset(menu, 0, sizeof(menu_t)); menu->items_nr = 0; menu->title = sci_strdup(title); - gfxop_get_text_params(state, font, menu->title, SIZE_INF, &(menu->title_width), &height, 0, - NULL, NULL, NULL); + gfxop_get_text_params(state, font, menu->title, SIZE_INF, &(menu->title_width), &height, 0, NULL, NULL, NULL); do { tracker = *entries++; entries_base.offset++; - if (!left) { /* Left string not finished? */ - - if (tracker == '=') { /* Hit early-SCI tag assignment? */ - + if (!left) { // Left string not finished? + if (tracker == '=') { // Hit early-SCI tag assignment? left = sci_strndup(entries - string_len - 1, string_len); tag = atoi(entries++); tracker = *entries++; } - if ((tracker == 0 && string_len > 0) || (tracker == '=') || (tracker == ':')) { /* End of entry */ + if ((tracker == 0 && string_len > 0) || (tracker == '=') || (tracker == ':')) { // End of entry int entrytype = MENU_TYPE_NORMAL; char *inleft; reg_t beginning; @@ -169,57 +159,54 @@ menubar_add_menu(gfx_state_t *state, menubar_t *menubar, char *title, char *entr inleft = left; while (isspace(*inleft)) - inleft++; /* Seek beginning of actual string */ + inleft++; // Seek beginning of actual string if (!strncmp(inleft, MENU_HBAR_STRING_1, strlen(MENU_HBAR_STRING_1)) || !strncmp(inleft, MENU_HBAR_STRING_2, strlen(MENU_HBAR_STRING_2)) || !strncmp(inleft, MENU_HBAR_STRING_3, strlen(MENU_HBAR_STRING_3))) { - entrytype = MENU_TYPE_HBAR; /* Horizontal bar */ + entrytype = MENU_TYPE_HBAR; // Horizontal bar free(left); left = NULL; } beginning = entries_base; beginning.offset -= string_len + 1; - c_width = _menubar_add_menu_item(state, menu, entrytype, left, NULL, font, 0, 0, tag, - beginning); + c_width = _menubar_add_menu_item(state, menu, entrytype, left, NULL, font, 0, 0, tag, beginning); if (c_width > max_width) max_width = c_width; string_len = 0; - left = NULL; /* Start over */ - - } else if (tracker == '`') { /* Start of right string */ - + left = NULL; // Start over + } else if (tracker == '`') { // Start of right string if (!left) { left_origin = entries_base; left_origin.offset -= string_len + 1; left = sci_strndup(entries - string_len - 1, string_len); } - string_len = 0; /* Continue with the right string */ - - } else string_len++; /* Nothing special */ + string_len = 0; // Continue with the right string + } else + string_len++; // Nothing special - } else { /* Left string finished => working on right string */ - if ((tracker == ':') || (tracker == 0)) { /* End of entry */ + } else { // Left string finished => working on right string + if ((tracker == ':') || (tracker == 0)) { // End of entry int key, modifiers = 0; right = sci_strndup(entries - string_len - 1, string_len); if (right[0] == '#') { - right[0] = SCI_SPECIAL_CHAR_FUNCTION; /* Function key */ + right[0] = SCI_SPECIAL_CHAR_FUNCTION; // Function key key = SCI_K_F1 + ((right[1] - '1') << 8); if (right[1] == '0') - key = SCI_K_F10; /* F10 */ + key = SCI_K_F10; // F10 if (right[2] == '=') { tag = atoi(right + 3); right[2] = 0; }; - } else if (right[0] == '@') { /* Alt key */ - right[0] = SCI_SPECIAL_CHAR_ALT; /* ALT */ + } else if (right[0] == '@') { // Alt key + right[0] = SCI_SPECIAL_CHAR_ALT; // ALT key = right[1]; modifiers = SCI_EVM_ALT; @@ -230,11 +217,9 @@ menubar_add_menu(gfx_state_t *state, menubar_t *menubar, char *title, char *entr tag = atoi(right + 3); right[2] = 0; }; - } else { - if (right[0] == '^') { - right[0] = SCI_SPECIAL_CHAR_CTRL; /* Control key - there must be a replacement... */ + right[0] = SCI_SPECIAL_CHAR_CTRL; // Control key - there must be a replacement... key = right[1]; modifiers = SCI_EVM_CTRL; @@ -245,7 +230,6 @@ menubar_add_menu(gfx_state_t *state, menubar_t *menubar, char *title, char *entr tag = atoi(right + 3); right[2] = 0; } - } else { key = right[0]; if ((key >= 'a') && (key <= 'z')) @@ -256,16 +240,14 @@ menubar_add_menu(gfx_state_t *state, menubar_t *menubar, char *title, char *entr right[1] = 0; } } - if ((key >= 'A') && (key <= 'Z')) - key = key - 'A' + 'a'; /* Lowercase the key */ + key = key - 'A' + 'a'; // Lowercase the key } - i = strlen(right); while (i > 0 && right[--i] == ' ') - right[i] = 0; /* Cut off chars to the right */ + right[i] = 0; // Cut off chars to the right c_width = _menubar_add_menu_item(state, menu, MENU_TYPE_NORMAL, left, right, font, key, modifiers, tag, left_origin); @@ -274,16 +256,15 @@ menubar_add_menu(gfx_state_t *state, menubar_t *menubar, char *title, char *entr max_width = c_width; string_len = 0; - left = NULL; /* Start over */ - - } else string_len++; /* continuing entry */ - } /* right string finished */ + left = NULL; // Start over + } else + string_len++; // continuing entry + } // right string finished } while (tracker); #ifdef MENU_FREESCI_BLATANT_PLUG if (add_freesci) { - char *freesci_text = sci_strdup("About FreeSCI"); c_width = _menubar_add_menu_item(state, menu, MENU_TYPE_NORMAL, freesci_text, NULL, font, 0, 0, 0, NULL_REG); if (c_width > max_width) @@ -291,27 +272,21 @@ menubar_add_menu(gfx_state_t *state, menubar_t *menubar, char *title, char *entr menu->items[menu->items_nr-1].flags = MENU_FREESCI_BLATANT_PLUG; } -#endif /* MENU_FREESCI_BLATANT_PLUG */ +#endif menu->width = max_width; } -int -menubar_match_key(menu_item_t *item, int message, int modifiers) { - if ((item->key == message) - && ((modifiers & (SCI_EVM_CTRL | SCI_EVM_ALT)) == item->modifiers)) +int menubar_match_key(menu_item_t *item, int message, int modifiers) { + if ((item->key == message) && ((modifiers & (SCI_EVM_CTRL | SCI_EVM_ALT)) == item->modifiers)) return 1; - if (message == '\t' - && item->key == 'i' - && ((modifiers & (SCI_EVM_CTRL | SCI_EVM_ALT)) == 0) - && item->modifiers == SCI_EVM_CTRL) - return 1; /* Match TAB to ^I */ + if (message == '\t' && item->key == 'i' && ((modifiers & (SCI_EVM_CTRL | SCI_EVM_ALT)) == 0) && item->modifiers == SCI_EVM_CTRL) + return 1; // Match TAB to ^I return 0; } -int -menubar_set_attribute(state_t *s, int menu_nr, int item_nr, int attribute, reg_t value) { +int menubar_set_attribute(state_t *s, int menu_nr, int item_nr, int attribute, reg_t value) { menubar_t *menubar = s->menubar; menu_item_t *item; @@ -328,7 +303,7 @@ menubar_set_attribute(state_t *s, int menu_nr, int item_nr, int attribute, reg_t case MENU_ATTRIBUTE_SAID: if (value.segment) { item->said_pos = value; - memcpy(item->said, kernel_dereference_bulk_pointer(s, value, 0), MENU_SAID_SPEC_SIZE); /* Copy Said spec */ + memcpy(item->said, kernel_dereference_bulk_pointer(s, value, 0), MENU_SAID_SPEC_SIZE); // Copy Said spec item->flags |= MENU_ATTRIBUTE_FLAGS_SAID; } else @@ -349,22 +324,18 @@ menubar_set_attribute(state_t *s, int menu_nr, int item_nr, int attribute, reg_t if (value.segment) { - /* FIXME: What happens here if <value> is an extended key? Potential bug. LS */ + // FIXME: What happens here if <value> is an extended key? Potential bug. LS item->key = value.offset; item->modifiers = 0; - item->keytext = (char*)sci_malloc(2); + item->keytext = (char *)sci_malloc(2); item->keytext[0] = value.offset; item->keytext[1] = 0; item->flags |= MENU_ATTRIBUTE_FLAGS_KEY; if ((item->key >= 'A') && (item->key <= 'Z')) - item->key = item->key - 'A' + 'a'; /* Lowercase the key */ - - + item->key = item->key - 'A' + 'a'; // Lowercase the key } else { - item->keytext = NULL; item->flags &= ~MENU_ATTRIBUTE_FLAGS_KEY; - } break; @@ -377,16 +348,14 @@ menubar_set_attribute(state_t *s, int menu_nr, int item_nr, int attribute, reg_t break; default: - sciprintf("Attempt to set invalid attribute of menu %d, item %d: 0x%04x\n", - menu_nr, item_nr, attribute); + sciprintf("Attempt to set invalid attribute of menu %d, item %d: 0x%04x\n", menu_nr, item_nr, attribute); return 1; } return 0; } -reg_t -menubar_get_attribute(state_t *s, int menu_nr, int item_nr, int attribute) { +reg_t menubar_get_attribute(state_t *s, int menu_nr, int item_nr, int attribute) { menubar_t *menubar = s->menubar; menu_item_t *item; @@ -415,14 +384,12 @@ menubar_get_attribute(state_t *s, int menu_nr, int item_nr, int attribute) { return make_reg(0, item->tag); default: - sciprintf("Attempt to read invalid attribute from menu %d, item %d: 0x%04x\n", - menu_nr, item_nr, attribute); + sciprintf("Attempt to read invalid attribute from menu %d, item %d: 0x%04x\n", menu_nr, item_nr, attribute); return make_reg(0, -1); } } -int -menubar_item_valid(state_t *s, int menu_nr, int item_nr) { +int menubar_item_valid(state_t *s, int menu_nr, int item_nr) { menubar_t *menubar = s->menubar; menu_item_t *item; @@ -434,20 +401,17 @@ menubar_item_valid(state_t *s, int menu_nr, int item_nr) { item = menubar->menus[menu_nr].items + item_nr; - if ((item->type == MENU_TYPE_NORMAL) - && item->enabled) + if ((item->type == MENU_TYPE_NORMAL) && item->enabled) return 1; - return 0; /* May not be selected */ + return 0; // May not be selected } - -int -menubar_map_pointer(state_t *s, int *menu_nr, int *item_nr, gfxw_port_t *port) { +int menubar_map_pointer(state_t *s, int *menu_nr, int *item_nr, gfxw_port_t *port) { menubar_t *menubar = s->menubar; menu_t *menu; - if (s->gfx_state->pointer_pos.y <= 10) { /* Re-evaulate menu */ + if (s->gfx_state->pointer_pos.y <= 10) { // Re-evaulate menu int x = MENU_LEFT_BORDER; int i; @@ -464,16 +428,14 @@ menubar_map_pointer(state_t *s, int *menu_nr, int *item_nr, gfxw_port_t *port) { x = newx; } - return 0; - } else { int row = (s->gfx_state->pointer_pos.y / 10) - 1; if ((*menu_nr < 0) || (*menu_nr >= menubar->menus_nr)) - return 1; /* No menu */ + return 1; // No menu else - menu = menubar->menus + *menu_nr; /* Menu is valid, assume that it's popped up */ + menu = menubar->menus + *menu_nr; // Menu is valid, assume that it's popped up if (menu->items_nr <= row) return 1; @@ -482,9 +444,8 @@ menubar_map_pointer(state_t *s, int *menu_nr, int *item_nr, gfxw_port_t *port) { return 1; if (menubar_item_valid(s, *menu_nr, row)) - *item_nr = row; /* Only modify if we'll be hitting a valid element */ + *item_nr = row; // Only modify if we'll be hitting a valid element return 0; } - } |