using System.Collections.Generic; using UnityEngine; namespace WeChatWASM.MDV { public class BlockContent : Block { Content mPrefix = null; List mContent = new List(); public bool IsEmpty { get { return mContent.Count == 0; } } public BlockContent( float indent ) : base( indent ) { } public void Add( Content content ) { mContent.Add( content ); } public void Prefix( Content content ) { mPrefix = content; } public override void Arrange( Context context, Vector2 pos, float maxWidth ) { var origin = pos; pos.x += Indent; maxWidth = Mathf.Max( maxWidth - Indent, context.MinWidth ); Rect.position = pos; // prefix if( mPrefix != null ) { mPrefix.Location.x = pos.x - context.IndentSize * 0.5f; mPrefix.Location.y = pos.y; } // content if( mContent.Count == 0 ) { Rect.width = 0.0f; Rect.height = 0.0f; return; } mContent.ForEach( c => c.Update( context ) ); var rowWidth = mContent[0].Width; var rowHeight = mContent[0].Height; var startIndex = 0; for( var i = 1; i < mContent.Count; i++ ) { var content = mContent[i]; if( rowWidth + content.Width > maxWidth ) { LayoutRow( pos, startIndex, i, rowHeight ); pos.y += rowHeight; startIndex = i; rowWidth = content.Width; rowHeight = content.Height; } else { rowWidth += content.Width; rowHeight = Mathf.Max( rowHeight, content.Height ); } } if( startIndex < mContent.Count ) { LayoutRow( pos, startIndex, mContent.Count, rowHeight ); pos.y += rowHeight; } Rect.width = maxWidth; Rect.height = pos.y - origin.y; } void LayoutRow( Vector2 pos, int from, int until, float rowHeight ) { for( var i = from; i < until; i++ ) { var content = mContent[i]; content.Location.x = pos.x; content.Location.y = pos.y + rowHeight - content.Height; pos.x += content.Width; } } public override void Draw( Context context ) { mContent.ForEach( c => c.Draw( context ) ); if( mPrefix != null ) { mPrefix.Draw( context ); } } } }