about summary refs log tree commit diff
path: root/src/game/client/components/menus_demo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/client/components/menus_demo.cpp')
-rw-r--r--src/game/client/components/menus_demo.cpp221
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())
 		{