]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/hud/panel/chat.qc
Allow scrolling the maximized chat history by pressing mouse wheel up/down and page...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / hud / panel / chat.qc
index 07de3b7dd1b9b4b586606dd1dd59432604404789..c1313b86e8f1d058c3ac23e56f19c73be801d097 100644 (file)
@@ -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;