public override void Render( RenderingBuffer buffer ) { Attr attr = Colors.Blend( Color.Black, Color.DarkGreen ); Attr inactiveAttr = Colors.Blend( Color.DarkGray, Color.DarkGreen ); // Transparent background for borders buffer.SetOpacityRect( 0, 0, ActualWidth, ActualHeight, 3 ); buffer.FillRectangle( 0, 0, ActualWidth, ActualHeight, ' ', attr ); // Transparent child content part if ( ActualWidth > 2 && ActualHeight > 3 ) buffer.SetOpacityRect( 1, 3, ActualWidth - 2, ActualHeight - 4, 2 ); renderBorderSafe( buffer, 0, 2, Math.Max( getTabHeaderWidth( ) - 1, ActualWidth - 1 ), ActualHeight - 1 ); // Start to render header buffer.FillRectangle( 0, 0, ActualWidth, Math.Min( 2, ActualHeight ), ' ', attr ); int x = 0; // Render tabs before active tab for ( int tab = 0; tab < tabDefinitions.Count; x += TabDefinitions[ tab++ ].Title.Length + 3 ) { var tabDefinition = TabDefinitions[ tab ]; if ( tab <= activeTabIndex ) { buffer.SetPixelSafe( x, 0, UnicodeTable.SingleFrameTopLeftCorner ); buffer.SetPixelSafe( x, 1, UnicodeTable.SingleFrameVertical ); } if ( tab == activeTabIndex ) { buffer.SetPixelSafe( x, 2, activeTabIndex == 0 ? UnicodeTable.SingleFrameVertical : UnicodeTable.SingleFrameBottomRightCorner ); } for ( int i = 0; i < tabDefinition.Title.Length + 2; i++ ) { buffer.SetPixelSafe( x + 1 + i, 0, UnicodeTable.SingleFrameHorizontal ); if ( tab == activeTabIndex ) buffer.SetPixelSafe( x + 1 + i, 2, ' ' ); } buffer.RenderStringSafe( " " + tabDefinition.Title + " ", x + 1, 1, activeTabIndex == tab ? attr : inactiveAttr ); if ( tab >= activeTabIndex ) { buffer.SetPixelSafe( x + tabDefinition.Title.Length + 3, 0, UnicodeTable.SingleFrameTopRightCorner ); buffer.SetPixelSafe( x + tabDefinition.Title.Length + 3, 1, UnicodeTable.SingleFrameVertical ); } if ( tab == activeTabIndex ) { buffer.SetPixelSafe( x + tabDefinition.Title.Length + 3, 2, activeTabIndex == tabDefinitions.Count - 1 && ActualWidth - 1 == x + tabDefinition.Title.Length + 3 ? UnicodeTable.SingleFrameVertical : UnicodeTable.SingleFrameBottomLeftCorner ); } } }