Pass draw_item newmenu_item by reference

This commit is contained in:
Kp 2020-09-11 03:08:02 +00:00
parent e2204cc8e5
commit c66a5276b7

View file

@ -417,12 +417,12 @@ static void nm_string_inputbox(grs_canvas &canvas, const int w, const int x, con
gr_string(canvas, *canvas.cv_font, x + w1, y, CURSOR_STRING);
}
static void draw_item(grs_canvas &canvas, newmenu_item *item, int is_current, int tiny, int tabs_flag, int scroll_offset)
static void draw_item(grs_canvas &canvas, newmenu_item &item, int is_current, int tiny, int tabs_flag, int scroll_offset)
{
if (tiny)
{
int r, g, b;
if (item->text[0]=='\t')
if (item.text[0] == '\t')
r = g = b = 63;
else if (is_current)
r = 57, g = 49, b = 20;
@ -436,52 +436,53 @@ static void draw_item(grs_canvas &canvas, newmenu_item *item, int is_current, in
}
const int line_spacing = static_cast<int>(LINE_SPACING(*canvas.cv_font, *GAME_FONT));
switch( item->type ) {
switch(item.type)
{
case NM_TYPE_SLIDER:
{
int i;
auto &slider = item->slider();
if (item->value < slider.min_value)
item->value = slider.min_value;
if (item->value > slider.max_value)
item->value = slider.max_value;
i = snprintf(item->saved_text.data(), item->saved_text.size(), "%s\t", item->text);
prepare_slider_text(item->saved_text, i, slider.max_value - slider.min_value + 1);
item->saved_text[item->value+1+strlen(item->text)+1] = SLIDER_MARKER[0];
nm_string_slider(canvas, item->w, item->x, item->y - (line_spacing * scroll_offset), item->saved_text.data());
auto &slider = item.slider();
if (item.value < slider.min_value)
item.value = slider.min_value;
if (item.value > slider.max_value)
item.value = slider.max_value;
i = snprintf(item.saved_text.data(), item.saved_text.size(), "%s\t", item.text);
prepare_slider_text(item.saved_text, i, slider.max_value - slider.min_value + 1);
item.saved_text[item.value + 1 + strlen(item.text) + 1] = SLIDER_MARKER[0];
nm_string_slider(canvas, item.w, item.x, item.y - (line_spacing * scroll_offset), item.saved_text.data());
}
break;
case NM_TYPE_INPUT_MENU:
if (item->imenu().group == 0)
if (item.imenu().group == 0)
{
case NM_TYPE_TEXT:
case NM_TYPE_MENU:
nm_string(canvas, item->w, item->x, item->y - (line_spacing * scroll_offset), item->text, tabs_flag);
nm_string(canvas, item.w, item.x, item.y - (line_spacing * scroll_offset), item.text, tabs_flag);
break;
}
DXX_BOOST_FALLTHROUGH;
case NM_TYPE_INPUT:
nm_string_inputbox(canvas, item->w, item->x, item->y - (line_spacing * scroll_offset), item->text, is_current);
nm_string_inputbox(canvas, item.w, item.x, item.y - (line_spacing * scroll_offset), item.text, is_current);
break;
case NM_TYPE_CHECK:
nm_string(canvas, item->w, item->x, item->y - (line_spacing * scroll_offset), item->text, tabs_flag);
nm_rstring(canvas, item->right_offset, item->x, item->y - (line_spacing * scroll_offset), item->value ? CHECKED_CHECK_BOX : NORMAL_CHECK_BOX);
nm_string(canvas, item.w, item.x, item.y - (line_spacing * scroll_offset), item.text, tabs_flag);
nm_rstring(canvas, item.right_offset, item.x, item.y - (line_spacing * scroll_offset), item.value ? CHECKED_CHECK_BOX : NORMAL_CHECK_BOX);
break;
case NM_TYPE_RADIO:
nm_string(canvas, item->w, item->x, item->y - (line_spacing * scroll_offset), item->text, tabs_flag);
nm_rstring(canvas, item->right_offset, item->x, item->y - (line_spacing * scroll_offset), item->value ? CHECKED_RADIO_BOX : NORMAL_RADIO_BOX);
nm_string(canvas, item.w, item.x, item.y - (line_spacing * scroll_offset), item.text, tabs_flag);
nm_rstring(canvas, item.right_offset, item.x, item.y - (line_spacing * scroll_offset), item.value ? CHECKED_RADIO_BOX : NORMAL_RADIO_BOX);
break;
case NM_TYPE_NUMBER:
{
char text[sizeof("-2147483647")];
auto &number = item->number();
if (item->value < number.min_value)
item->value = number.min_value;
if (item->value > number.max_value)
item->value = number.max_value;
nm_string(canvas, item->w, item->x, item->y - (line_spacing * scroll_offset), item->text, tabs_flag);
snprintf(text, sizeof(text), "%d", item->value );
nm_rstring(canvas, item->right_offset, item->x, item->y - (line_spacing * scroll_offset), text);
auto &number = item.number();
if (item.value < number.min_value)
item.value = number.min_value;
if (item.value > number.max_value)
item.value = number.max_value;
nm_string(canvas, item.w, item.x, item.y - (line_spacing * scroll_offset), item.text, tabs_flag);
snprintf(text, sizeof(text), "%d", item.value );
nm_rstring(canvas, item.right_offset, item.x, item.y - (line_spacing * scroll_offset), text);
}
break;
}
@ -1492,7 +1493,7 @@ static window_event_result newmenu_draw(window *wind, newmenu *menu)
// Redraw everything...
for (i=menu->scroll_offset; i<menu->max_displayable+menu->scroll_offset; i++ )
{
draw_item(*grd_curcanv, &menu->items[i], (i==menu->citem && !menu->all_text),menu->tiny_mode, menu->tabs_flag, menu->scroll_offset);
draw_item(*grd_curcanv, menu->items[i], (i==menu->citem && !menu->all_text),menu->tiny_mode, menu->tabs_flag, menu->scroll_offset);
}
if (menu->is_scroll_box)