diff options
Diffstat (limited to 'src/game/client/components/menus_demo.cpp')
| -rw-r--r-- | src/game/client/components/menus_demo.cpp | 221 |
1 files changed, 130 insertions, 91 deletions
diff --git a/src/game/client/components/menus_demo.cpp b/src/game/client/components/menus_demo.cpp index 594ee3df..07019d46 100644 --- a/src/game/client/components/menus_demo.cpp +++ b/src/game/client/components/menus_demo.cpp @@ -17,13 +17,14 @@ #include "menus.hpp" -void MENUS::ui_draw_demoplayer_button(const void *id, const char *text, int checked, const RECT *r, const void *extra) +int MENUS::DoButton_DemoPlayer(const void *pID, const char *pText, int Checked, const CUIRect *pRect) { - ui_draw_rect(r, vec4(1,1,1, checked ? 0.10f : 0.5f)*button_color_mul(id), CORNER_ALL, 5.0f); - ui_do_label(r, text, 14.0f, 0); + RenderTools()->DrawUIRect(pRect, vec4(1,1,1, Checked ? 0.10f : 0.5f)*button_color_mul(pID), CUI::CORNER_ALL, 5.0f); + UI()->DoLabel(pRect, pText, 14.0f, 0); + return UI()->DoButtonLogic(pID, pText, Checked, pRect); } -void MENUS::render_demoplayer(RECT main_view) +void MENUS::render_demoplayer(CUIRect main_view) { const DEMOPLAYBACK_INFO *info = client_demoplayer_getinfo(); @@ -37,20 +38,20 @@ void MENUS::render_demoplayer(RECT main_view) else total_height = seekbar_height+margins*2; - ui_hsplit_b(&main_view, total_height, 0, &main_view); - ui_vsplit_l(&main_view, 250.0f, 0, &main_view); - ui_vsplit_r(&main_view, 250.0f, &main_view, 0); + main_view.HSplitBottom(total_height, 0, &main_view); + main_view.VSplitLeft(250.0f, 0, &main_view); + main_view.VSplitRight(250.0f, &main_view, 0); - ui_draw_rect(&main_view, color_tabbar_active, CORNER_T, 10.0f); + RenderTools()->DrawUIRect(&main_view, color_tabbar_active, CUI::CORNER_T, 10.0f); - ui_margin(&main_view, 5.0f, &main_view); + main_view.Margin(5.0f, &main_view); - RECT seekbar, buttonbar; + CUIRect seekbar, buttonbar; if(menu_active) { - ui_hsplit_t(&main_view, seekbar_height, &seekbar, &buttonbar); - ui_hsplit_t(&buttonbar, margins, 0, &buttonbar); + main_view.HSplitTop(seekbar_height, &seekbar, &buttonbar); + buttonbar.HSplitTop(margins, 0, &buttonbar); } else seekbar = main_view; @@ -61,33 +62,33 @@ void MENUS::render_demoplayer(RECT main_view) void *id = &seekbar_id; char buffer[128]; - ui_draw_rect(&seekbar, vec4(0,0,0,0.5f), CORNER_ALL, 5.0f); + RenderTools()->DrawUIRect(&seekbar, vec4(0,0,0,0.5f), CUI::CORNER_ALL, 5.0f); int current_tick = info->current_tick - info->first_tick; int total_ticks = info->last_tick - info->first_tick; float amount = current_tick/(float)total_ticks; - RECT filledbar = seekbar; + CUIRect filledbar = seekbar; filledbar.w = 10.0f + (filledbar.w-10.0f)*amount; - ui_draw_rect(&filledbar, vec4(1,1,1,0.5f), CORNER_ALL, 5.0f); + RenderTools()->DrawUIRect(&filledbar, vec4(1,1,1,0.5f), CUI::CORNER_ALL, 5.0f); str_format(buffer, sizeof(buffer), "%d:%02d / %d:%02d", current_tick/SERVER_TICK_SPEED/60, (current_tick/SERVER_TICK_SPEED)%60, total_ticks/SERVER_TICK_SPEED/60, (total_ticks/SERVER_TICK_SPEED)%60); - ui_do_label(&seekbar, buffer, seekbar.h*0.70f, 0); + UI()->DoLabel(&seekbar, buffer, seekbar.h*0.70f, 0); // do the logic - int inside = ui_mouse_inside(&seekbar); + int inside = UI()->MouseInside(&seekbar); - if(ui_active_item() == id) + if(UI()->ActiveItem() == id) { - if(!ui_mouse_button(0)) - ui_set_active_item(0); + if(!UI()->MouseButton(0)) + UI()->SetActiveItem(0); else { - float amount = (ui_mouse_x()-seekbar.x)/(float)seekbar.w; + float amount = (UI()->MouseX()-seekbar.x)/(float)seekbar.w; if(amount > 0 && amount < 1.0f) { gameclient.on_reset(); @@ -97,43 +98,43 @@ void MENUS::render_demoplayer(RECT main_view) } } } - else if(ui_hot_item() == id) + else if(UI()->HotItem() == id) { - if(ui_mouse_button(0)) - ui_set_active_item(id); + if(UI()->MouseButton(0)) + UI()->SetActiveItem(id); } if(inside) - ui_set_hot_item(id); + UI()->SetHotItem(id); } if(menu_active) { // do buttons - RECT button; + CUIRect button; // pause button - ui_vsplit_l(&buttonbar, buttonbar_height, &button, &buttonbar); + buttonbar.VSplitLeft(buttonbar_height, &button, &buttonbar); static int pause_button = 0; - if(ui_do_button(&pause_button, "| |", info->paused, &button, ui_draw_demoplayer_button, 0)) + if(DoButton_DemoPlayer(&pause_button, "| |", info->paused, &button)) client_demoplayer_setpause(!info->paused); // play button - ui_vsplit_l(&buttonbar, margins, 0, &buttonbar); - ui_vsplit_l(&buttonbar, buttonbar_height, &button, &buttonbar); + buttonbar.VSplitLeft(margins, 0, &buttonbar); + buttonbar.VSplitLeft(buttonbar_height, &button, &buttonbar); static int play_button = 0; - if(ui_do_button(&play_button, ">", !info->paused, &button, ui_draw_demoplayer_button, 0)) + if(DoButton_DemoPlayer(&play_button, ">", !info->paused, &button)) { client_demoplayer_setpause(0); client_demoplayer_setspeed(1.0f); } // slowdown - ui_vsplit_l(&buttonbar, margins, 0, &buttonbar); - ui_vsplit_l(&buttonbar, buttonbar_height, &button, &buttonbar); + buttonbar.VSplitLeft(margins, 0, &buttonbar); + buttonbar.VSplitLeft(buttonbar_height, &button, &buttonbar); static int slowdown_button = 0; - if(ui_do_button(&slowdown_button, "<<", 0, &button, ui_draw_demoplayer_button, 0)) + if(DoButton_DemoPlayer(&slowdown_button, "<<", 0, &button)) { if(info->speed > 4.0f) client_demoplayer_setspeed(4.0f); else if(info->speed > 2.0f) client_demoplayer_setspeed(2.0f); @@ -143,10 +144,10 @@ void MENUS::render_demoplayer(RECT main_view) } // fastforward - ui_vsplit_l(&buttonbar, margins, 0, &buttonbar); - ui_vsplit_l(&buttonbar, buttonbar_height, &button, &buttonbar); + buttonbar.VSplitLeft(margins, 0, &buttonbar); + buttonbar.VSplitLeft(buttonbar_height, &button, &buttonbar); static int fastforward_button = 0; - if(ui_do_button(&fastforward_button, ">>", 0, &button, ui_draw_demoplayer_button, 0)) + if(DoButton_DemoPlayer(&fastforward_button, ">>", 0, &button)) { if(info->speed < 0.5f) client_demoplayer_setspeed(0.5f); else if(info->speed < 1.0f) client_demoplayer_setspeed(1.0f); @@ -156,24 +157,24 @@ void MENUS::render_demoplayer(RECT main_view) } // speed meter - ui_vsplit_l(&buttonbar, margins*3, 0, &buttonbar); + buttonbar.VSplitLeft(margins*3, 0, &buttonbar); char buffer[64]; if(info->speed >= 1.0f) str_format(buffer, sizeof(buffer), "x%.0f", info->speed); else str_format(buffer, sizeof(buffer), "x%.1f", info->speed); - ui_do_label(&buttonbar, buffer, button.h*0.7f, -1); + UI()->DoLabel(&buttonbar, buffer, button.h*0.7f, -1); // close button - ui_vsplit_r(&buttonbar, buttonbar_height*3, &buttonbar, &button); + buttonbar.VSplitRight(buttonbar_height*3, &buttonbar, &button); static int exit_button = 0; - if(ui_do_button(&exit_button, localize("Close"), 0, &button, ui_draw_demoplayer_button, 0)) + if(DoButton_DemoPlayer(&exit_button, localize("Close"), 0, &button)) client_disconnect(); } } -static RECT listbox_originalview; -static RECT listbox_view; +static CUIRect listbox_originalview; +static CUIRect listbox_view; static float listbox_rowheight; static int listbox_itemindex; static int listbox_selected_index; @@ -181,27 +182,27 @@ static int listbox_new_selected; static int listbox_doneevents; static int listbox_numitems; -void MENUS::ui_do_listbox_start(void *id, const RECT *rect, float row_height, const char *title, int num_items, int selected_index) +void MENUS::ui_do_listbox_start(void *id, const CUIRect *rect, float row_height, const char *title, int num_items, int selected_index) { - RECT scroll, row; - RECT view = *rect; - RECT header, footer; + CUIRect scroll, row; + CUIRect view = *rect; + CUIRect header, footer; // draw header - ui_hsplit_t(&view, listheader_height, &header, &view); - ui_draw_rect(&header, vec4(1,1,1,0.25f), CORNER_T, 5.0f); - ui_do_label(&header, title, header.h*fontmod_height, 0); + view.HSplitTop(listheader_height, &header, &view); + RenderTools()->DrawUIRect(&header, vec4(1,1,1,0.25f), CUI::CORNER_T, 5.0f); + UI()->DoLabel(&header, title, header.h*fontmod_height, 0); // draw footers - ui_hsplit_b(&view, listheader_height, &view, &footer); - ui_draw_rect(&footer, vec4(1,1,1,0.25f), CORNER_B, 5.0f); - ui_vsplit_l(&footer, 10.0f, 0, &footer); + view.HSplitBottom(listheader_height, &view, &footer); + RenderTools()->DrawUIRect(&footer, vec4(1,1,1,0.25f), CUI::CORNER_B, 5.0f); + footer.VSplitLeft(10.0f, 0, &footer); // background - ui_draw_rect(&view, vec4(0,0,0,0.15f), 0, 0); + RenderTools()->DrawUIRect(&view, vec4(0,0,0,0.15f), 0, 0); // prepare the scroll - ui_vsplit_r(&view, 15, &view, &scroll); + view.VSplitRight(15, &view, &scroll); // setup the variables listbox_originalview = view; @@ -215,7 +216,7 @@ void MENUS::ui_do_listbox_start(void *id, const RECT *rect, float row_height, co // do the scrollbar - ui_hsplit_t(&view, listbox_rowheight, &row, 0); + view.HSplitTop(listbox_rowheight, &row, 0); int num_viewable = (int)(listbox_originalview.h/row.h) + 1; int num = num_items-num_viewable+1; @@ -223,8 +224,8 @@ void MENUS::ui_do_listbox_start(void *id, const RECT *rect, float row_height, co num = 0; static float scrollvalue = 0; - ui_hmargin(&scroll, 5.0f, &scroll); - scrollvalue = ui_do_scrollbar_v(id, &scroll, scrollvalue); + scroll.HMargin(5.0f, &scroll); + scrollvalue = DoScrollbarV(id, &scroll, scrollvalue); int start = (int)(num*scrollvalue); if(start < 0) @@ -232,19 +233,62 @@ void MENUS::ui_do_listbox_start(void *id, const RECT *rect, float row_height, co // the list listbox_view = listbox_originalview; - ui_vmargin(&listbox_view, 5.0f, &listbox_view); - ui_clip_enable(&listbox_view); + listbox_view.VMargin(5.0f, &listbox_view); + UI()->ClipEnable(&listbox_view); listbox_view.y -= scrollvalue*num*row.h; } -MENUS::LISTBOXITEM MENUS::ui_do_listbox_nextitem(void *id) +MENUS::LISTBOXITEM MENUS::ui_do_listbox_nextrow() { - RECT row; LISTBOXITEM item = {0}; - ui_hsplit_t(&listbox_view, listbox_rowheight /*-2.0f*/, &row, &listbox_view); - //ui_hsplit_t(&listbox_view, 2.0f, 0, &listbox_view); + listbox_view.HSplitTop(listbox_rowheight /*-2.0f*/, &item.rect, &listbox_view); + item.visible = 1; + //item.rect = row; + + item.hitrect = item.rect; + + //CUIRect select_hit_box = item.rect; + + if(listbox_selected_index == listbox_itemindex) + item.selected = 1; + + // make sure that only those in view can be selected + if(item.rect.y+item.rect.h > listbox_originalview.y) + { + + if(item.hitrect.y < item.hitrect.y) // clip the selection + { + item.hitrect.h -= listbox_originalview.y-item.hitrect.y; + item.hitrect.y = listbox_originalview.y; + } + + } + else + item.visible = 0; - RECT select_hit_box = row; + // check if we need to do more + if(item.rect.y > listbox_originalview.y+listbox_originalview.h) + item.visible = 0; + + listbox_itemindex++; + return item; +} + +MENUS::LISTBOXITEM MENUS::ui_do_listbox_nextitem(void *id) +{ + int this_itemindex = listbox_itemindex; + + LISTBOXITEM item = ui_do_listbox_nextrow(); + + if(UI()->DoButtonLogic(id, "", listbox_selected_index == listbox_itemindex, &item.hitrect)) + listbox_new_selected = listbox_itemindex; + + //CUIRect row; + //LISTBOXITEM item = {0}; + //listbox_view.HSplitTop(listbox_rowheight /*-2.0f*/, &row, &listbox_view); + //listbox_view.HSplitTop(2.0f, 0, &listbox_view); + /* + CUIRect select_hit_box = row; item.visible = 1; if(listbox_selected_index == listbox_itemindex) @@ -260,19 +304,17 @@ MENUS::LISTBOXITEM MENUS::ui_do_listbox_nextitem(void *id) select_hit_box.y = listbox_originalview.y; } - if(ui_do_button(id, "", listbox_selected_index==listbox_itemindex, &select_hit_box, 0, 0)) + if(UI()->DoButton(id, "", listbox_selected_index==listbox_itemindex, &select_hit_box, 0, 0)) listbox_new_selected = listbox_itemindex; } else item.visible = 0; item.rect = row; + */ - // check if we need to do more - if(row.y > listbox_originalview.y+listbox_originalview.h) - item.visible = 0; - if(listbox_selected_index==listbox_itemindex) + if(listbox_selected_index == this_itemindex) { if(!listbox_doneevents) { @@ -294,21 +336,18 @@ MENUS::LISTBOXITEM MENUS::ui_do_listbox_nextitem(void *id) } //selected_index = i; - RECT r = row; - ui_margin(&r, 1.5f, &r); - ui_draw_rect(&r, vec4(1,1,1,0.5f), CORNER_ALL, 4.0f); + CUIRect r = item.rect; + r.Margin(1.5f, &r); + RenderTools()->DrawUIRect(&r, vec4(1,1,1,0.5f), CUI::CORNER_ALL, 4.0f); } - listbox_itemindex++; - - ui_vmargin(&item.rect, 5.0f, &item.rect); - + //listbox_itemindex++; return item; } int MENUS::ui_do_listbox_end() { - ui_clip_disable(); + UI()->ClipDisable(); return listbox_new_selected; } @@ -346,7 +385,7 @@ void MENUS::demolist_populate() } -void MENUS::render_demolist(RECT main_view) +void MENUS::render_demolist(CUIRect main_view) { static int inited = 0; if(!inited) @@ -354,12 +393,12 @@ void MENUS::render_demolist(RECT main_view) inited = 1; // render background - ui_draw_rect(&main_view, color_tabbar_active, CORNER_ALL, 10.0f); - ui_margin(&main_view, 10.0f, &main_view); + RenderTools()->DrawUIRect(&main_view, color_tabbar_active, CUI::CORNER_ALL, 10.0f); + main_view.Margin(10.0f, &main_view); - RECT buttonbar; - ui_hsplit_b(&main_view, button_height+5.0f, &main_view, &buttonbar); - ui_hsplit_t(&buttonbar, 5.0f, 0, &buttonbar); + CUIRect buttonbar; + main_view.HSplitBottom(button_height+5.0f, &main_view, &buttonbar); + buttonbar.HSplitTop(5.0f, 0, &buttonbar); static int selected_item = -1; static int demolist_id = 0; @@ -370,23 +409,23 @@ void MENUS::render_demolist(RECT main_view) { LISTBOXITEM item = ui_do_listbox_nextitem((void*)(&r.front())); if(item.visible) - ui_do_label(&item.rect, r.front().name, item.rect.h*fontmod_height, -1); + UI()->DoLabel(&item.rect, r.front().name, item.rect.h*fontmod_height, -1); } selected_item = ui_do_listbox_end(); - RECT refresh_rect, play_rect; - ui_vsplit_r(&buttonbar, 250.0f, &buttonbar, &refresh_rect); - ui_vsplit_r(&refresh_rect, 130.0f, &refresh_rect, &play_rect); - ui_vsplit_r(&play_rect, 120.0f, 0x0, &play_rect); + CUIRect refresh_rect, play_rect; + buttonbar.VSplitRight(250.0f, &buttonbar, &refresh_rect); + refresh_rect.VSplitRight(130.0f, &refresh_rect, &play_rect); + play_rect.VSplitRight(120.0f, 0x0, &play_rect); static int refresh_button = 0; - if(ui_do_button(&refresh_button, localize("Refresh"), 0, &refresh_rect, ui_draw_menu_button, 0)) + if(DoButton_Menu(&refresh_button, localize("Refresh"), 0, &refresh_rect)) { demolist_populate(); } static int play_button = 0; - if(ui_do_button(&play_button, localize("Play"), 0, &play_rect, ui_draw_menu_button, 0)) + if(DoButton_Menu(&play_button, localize("Play"), 0, &play_rect)) { if(selected_item >= 0 && selected_item < demos.size()) { |