//Update public void Update() { if (mReceivedMessage) { mChatboxMessages.ScrollToBottom(); mReceivedMessage = false; } var msgs = ChatboxMsg.GetMessages(); for (var i = mMessageIndex; i < msgs.Count; i++) { var msg = msgs[i]; var myText = Interface.WrapText( msg.GetMessage(), mChatboxMessages.Width - mChatboxMessages.GetVerticalScrollBar().Width - 8, mChatboxText.Font ); foreach (var t in myText) { var rw = mChatboxMessages.AddRow(t.Trim()); rw.SetTextFont(mChatboxText.Font); rw.SetTextColor(msg.GetColor()); rw.ShouldDrawBackground = false; rw.UserData = msg.GetTarget(); rw.Clicked += ChatboxRow_Clicked; mReceivedMessage = true; while (mChatboxMessages.RowCount > ClientConfiguration.Instance.ChatLines) { mChatboxMessages.RemoveRow(0); } } mMessageIndex++; } }
//Update public void Update() { // TODO: Find a cleaner way to do this logic, right now this will only start working properly (ie not resetting scroll height) after a few chat messages. // Can't seem to find a cleaner way yet. But works in longer chat convos. var scrollAmount = mChatboxMessages.GetVerticalScrollBar().ScrollAmount; var scrollToBottom = mChatboxMessages.GetVerticalScrollBar().ScrollAmount == 1 || (mChatboxMessages.RowCount <= 10 && mChatboxMessages.GetVerticalScrollBar().ScrollAmount <= 1); // Did the tab change recently? If so, we need to reset a few things to make it work... if (mLastTab != mCurrentTab) { mChatboxMessages.Clear(); mChatboxMessages.GetHorizontalScrollBar().SetScrollAmount(0); mMessageIndex = 0; mReceivedMessage = true; mLastTab = mCurrentTab; } if (mReceivedMessage) { mChatboxMessages.ScrollToBottom(); mReceivedMessage = false; } var msgs = ChatboxMsg.GetMessages(mCurrentTab); for (var i = mMessageIndex; i < msgs.Count; i++) { var msg = msgs[i]; var myText = Interface.WrapText( msg.Message, mChatboxMessages.Width - mChatboxMessages.GetVerticalScrollBar().Width - 8, mChatboxText.Font ); foreach (var t in myText) { var rw = mChatboxMessages.AddRow(t.Trim()); rw.SetTextFont(mChatboxText.Font); rw.SetTextColor(msg.Color); rw.ShouldDrawBackground = false; rw.UserData = msg.Target; rw.Clicked += ChatboxRow_Clicked; rw.RightClicked += ChatboxRow_RightClicked; mReceivedMessage = true; while (mChatboxMessages.RowCount > ClientConfiguration.Instance.ChatLines) { mChatboxMessages.RemoveRow(0); } } mMessageIndex++; } if (!scrollToBottom) { mChatboxMessages.GetVerticalScrollBar().SetScrollAmount(scrollAmount); } else { mChatboxMessages.GetVerticalScrollBar().SetScrollAmount(1); } }