From 9bc7dcfa10c21e4ee1b393155d252002c9fbc628 Mon Sep 17 00:00:00 2001 From: terencehill Date: Mon, 31 Jan 2022 16:53:43 +0100 Subject: [PATCH] Allow scrolling the maximized chat history by pressing mouse wheel up/down and page up/down --- qcsrc/client/hud/panel/chat.qc | 73 ++++++++++++++++++++++++++++++++-- qcsrc/client/hud/panel/chat.qh | 2 + qcsrc/client/main.qc | 4 ++ 3 files changed, 76 insertions(+), 3 deletions(-) diff --git a/qcsrc/client/hud/panel/chat.qc b/qcsrc/client/hud/panel/chat.qc index 07de3b7dd..c1313b86e 100644 --- a/qcsrc/client/hud/panel/chat.qc +++ b/qcsrc/client/hud/panel/chat.qc @@ -9,6 +9,62 @@ void HUD_Chat_Export(int fh) // allow saving cvars that aesthetically change the panel into hud skin files } +float chat_maximized_scroll_ofs; +float chat_maximized_reset_scroll_time; +float HUD_Panel_Chat_InputEvent(float bInputType, float nPrimary, float nSecondary) +{ + if(bInputType == 3) + { + mousepos.x = nPrimary; + mousepos.y = nSecondary; + return true; + } + + if(bInputType == 2) + return false; + + // at this point bInputType can only be 0 or 1 (key pressed or released) + bool key_pressed = (bInputType == 0); + + if(!autocvar__con_chat_maximized) + return false; + + if(nPrimary == K_MWHEELUP) + { + if (!key_pressed) + return true; + chat_maximized_scroll_ofs += 5 * cvar("con_chatsize"); + return true; + } + else if(nPrimary == K_MWHEELDOWN) + { + if (!key_pressed) + return true; + chat_maximized_scroll_ofs -= 5 * cvar("con_chatsize"); + if (chat_maximized_scroll_ofs < 0) + chat_maximized_scroll_ofs = 0; + return true; + } + else if(nPrimary == K_PGUP) + { + if (!key_pressed) + return true; + chat_maximized_scroll_ofs += vid_conheight / 2; + return true; + } + else if(nPrimary == K_PGDN) + { + if (!key_pressed) + return true; + chat_maximized_scroll_ofs -= vid_conheight / 2; + if (chat_maximized_scroll_ofs < 0) + chat_maximized_scroll_ofs = 0; + return true; + } + + return false; +} + void HUD_Chat() { if(!autocvar__hud_configure) @@ -21,16 +77,26 @@ void HUD_Chat() cvar_set("con_chat", "-1"); return; } + if(autocvar__con_chat_maximized) { if(!hud_draw_maximized) return; + + chat_maximized_reset_scroll_time = time + 3; } - else if(chat_panel_modified) + else { - panel.update_time = time; // forces reload of panel attributes - chat_panel_modified = false; + if(chat_panel_modified) + { + panel.update_time = time; // forces reload of panel attributes + chat_panel_modified = false; + } + if (time > chat_maximized_reset_scroll_time) + chat_maximized_scroll_ofs = 0; } } + else + chat_maximized_scroll_ofs = 0; HUD_Panel_LoadCvars(); @@ -57,6 +123,7 @@ void HUD_Chat() chat_panel_modified = true; } panel_bg_alpha = max(0.75, panel_bg_alpha); + panel_size.y += chat_maximized_scroll_ofs; } vector pos, mySize; diff --git a/qcsrc/client/hud/panel/chat.qh b/qcsrc/client/hud/panel/chat.qh index 9ed87d9f3..b17ba1a9a 100644 --- a/qcsrc/client/hud/panel/chat.qh +++ b/qcsrc/client/hud/panel/chat.qh @@ -13,3 +13,5 @@ bool autocvar_con_chatrect; //float autocvar_con_chatrect_x; //float autocvar_con_chatrect_y; float autocvar_con_chatwidth; + +float HUD_Panel_Chat_InputEvent(float bInputType, float nPrimary, float nSecondary); diff --git a/qcsrc/client/main.qc b/qcsrc/client/main.qc index 5dbfb7209..649def85c 100644 --- a/qcsrc/client/main.qc +++ b/qcsrc/client/main.qc @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -452,10 +453,13 @@ float CSQC_InputEvent(int bInputType, float nPrimary, float nSecondary) { TC(int, bInputType); bool override = false; + override |= HUD_Panel_InputEvent(bInputType, nPrimary, nSecondary); if (override) return true; + override |= HUD_Panel_Chat_InputEvent(bInputType, nPrimary, nSecondary); + override |= QuickMenu_InputEvent(bInputType, nPrimary, nSecondary); override |= HUD_Radar_InputEvent(bInputType, nPrimary, nSecondary); -- 2.39.2