33using Intersect . Client . Framework . File_Management ;
44using Intersect . Client . Framework . GenericClasses ;
55using Intersect . Client . Framework . Graphics ;
6+ using Intersect . Client . Framework . Gwen ;
67using Intersect . Client . Framework . Gwen . Control ;
78using Intersect . Client . Framework . Gwen . Control . EventArguments ;
89using Intersect . Client . Framework . Gwen . ControlInternal ;
1112using Intersect . Client . Localization ;
1213using Intersect . Client . Networking ;
1314using Intersect . Configuration ;
15+ using Intersect . Core ;
1416using Intersect . Enums ;
1517using Intersect . Localization ;
1618using Intersect . Utilities ;
19+ using Microsoft . Extensions . Logging ;
1720
1821namespace Intersect . Client . Interface . Game . Chat ;
1922
@@ -97,7 +100,10 @@ public Chatbox(Canvas gameCanvas, GameInterface gameUi)
97100
98101 //Chatbox Window
99102 mChatboxWindow = new ImagePanel ( gameCanvas , "ChatboxWindow" ) ;
100- mChatboxMessages = new ListBox ( mChatboxWindow , "MessageList" ) ;
103+ mChatboxMessages = new ListBox ( mChatboxWindow , "MessageList" )
104+ {
105+ Dock = Pos . Fill ,
106+ } ;
101107 mChatboxMessages . EnableScroll ( false , true ) ;
102108 mChatboxWindow . ShouldCacheToTexture = true ;
103109
@@ -193,6 +199,8 @@ public Chatbox(Canvas gameCanvas, GameInterface gameUi)
193199 mGuildInviteContextItem = mContextMenu . AddItem ( Strings . ChatContextMenu . GuildInvite ) ;
194200 mGuildInviteContextItem . Clicked += MGuildInviteContextItem_Clicked ;
195201 mContextMenu . LoadJsonUi ( GameContentManager . UI . InGame , Graphics . Renderer . GetResolutionString ( ) ) ;
202+
203+ mChatboxWindow . BeforeLayout += ChatboxWindowOnBeforeLayout ;
196204 }
197205
198206 public void OpenContextMenu ( string name )
@@ -353,34 +361,42 @@ public void Update()
353361 var scrollToBottom = vScrollBar . ScrollAmount == 1 || ! scrollBarVisible ;
354362
355363 // Did the tab change recently? If so, we need to reset a few things to make it work...
356- if ( mLastTab != mCurrentTab )
364+ var currentTab = mCurrentTab ;
365+ if ( mLastTab != currentTab )
357366 {
358367 mChatboxMessages . Clear ( ) ;
359- mChatboxMessages . HorizontalScrollBar . SetScrollAmount ( 0 ) ;
368+ mChatboxMessages . HorizontalScrollBar . ScrollAmount = 0 ;
369+ mChatboxMessages . VerticalScrollBar . ScrollAmount = 1 ;
360370 mMessageIndex = 0 ;
361371 mReceivedMessage = true ;
362- mLastTab = mCurrentTab ;
372+ mLastTab = currentTab ;
363373 }
364374
365- var messages = ChatboxMsg . GetMessages ( mCurrentTab ) ;
375+ var scrollPosition = mChatboxMessages . VerticalScroll ;
376+ var messages = ChatboxMsg . GetMessages ( currentTab ) ;
366377 for ( var i = mMessageIndex ; i < messages . Count ; i ++ )
367378 {
368379 var msg = messages [ i ] ;
369- var lines = Text . WrapText (
380+ string [ ] lines = [ msg . Message ] ; /* Text.WrapText(
370381 msg.Message,
371382 mChatboxMessages.Width - vScrollBar.Width - 8,
372383 mChatboxText.Font,
373384 Graphics.Renderer ?? throw new InvalidOperationException("No renderer")
374- ) ;
385+ );*/
375386
376387 foreach ( var line in lines )
377388 {
378- var row = mChatboxMessages . AddRow ( line . Trim ( ) ) ;
389+ var row = mChatboxMessages . AddRow ( line . Trim ( ) , name : $ "Message:{ currentTab } #{ mMessageIndex } ", userData : msg . Target ) ;
390+ row . ShouldDrawBackground = false ;
391+ row . Padding = new Padding ( 2 , 0 ) ;
379392 row . Font = mChatboxText . Font ;
380393 row . SetTextColor ( msg . Color ) ;
381- row . ShouldDrawBackground = false ;
382- row . UserData = msg . Target ;
394+ if ( row . GetCellContents ( 0 ) is Label label )
395+ {
396+ label . WrappingBehavior = WrappingBehavior . Wrapped ;
397+ }
383398 row . Clicked += ChatboxRow_Clicked ;
399+
384400 mReceivedMessage = true ;
385401
386402 while ( mChatboxMessages . RowCount > ClientConfiguration . Instance . ChatLines )
@@ -395,15 +411,34 @@ public void Update()
395411 // ReSharper disable once InvertIf
396412 if ( mReceivedMessage )
397413 {
414+ // mChatboxMessages.SizeToContents();
415+
398416 if ( scrollToBottom )
399417 {
400- mChatboxMessages . ScrollToBottom ( ) ;
418+ mChatboxMessages . Defer ( mChatboxMessages . ScrollToBottom ) ;
419+ }
420+ else
421+ {
422+ mChatboxMessages . Defer ( ( ) =>
423+ {
424+ ApplicationContext . CurrentContext . Logger . LogTrace (
425+ "Scrolling chat to {ScrollY}" ,
426+ scrollPosition
427+ ) ;
428+ mChatboxMessages . ScrollToY ( scrollPosition ) ;
429+ }
430+ ) ;
401431 }
402- // vScrollBar.SetScrollAmount(scrollToBottom ? 1 : scrollAmount);
432+
403433 mReceivedMessage = false ;
404434 }
405435 }
406436
437+ private void ChatboxWindowOnBeforeLayout ( Base sender , EventArgs arguments )
438+ {
439+ Update ( ) ;
440+ }
441+
407442 public void SetChatboxText ( string msg )
408443 {
409444 mChatboxInput . Text = msg ;
0 commit comments