Exemple #1
0
        public override void Render(RenderingBuffer buffer) {
            Attr captionAttrs;
            if (Disabled) {
                captionAttrs = Colors.Blend(Color.Gray, Color.DarkGray);
            } else {
                if (HasFocus)
                    captionAttrs = Colors.Blend(Color.White, Color.DarkGreen);
                else
                    captionAttrs = Colors.Blend(Color.Black, Color.DarkGreen);
            }

            if (pressed || pressedUsingKeyboard) {
                buffer.FillRectangle(1, 0, ActualWidth - 1, ActualHeight - 1, ' ', captionAttrs);
                buffer.SetOpacityRect(0, 0, 1, ActualHeight, 3);
                buffer.FillRectangle(0, 0, 1, ActualHeight, ' ', captionAttrs);
                if (!string.IsNullOrEmpty(Caption)) {
                    RenderString(Caption, buffer, 2 + 1 +(ActualWidth - 2 * 2 - Caption.Length) / 2,
                        (ActualHeight-1)/2, ActualWidth - 2 * 2, captionAttrs);
                }
                buffer.SetOpacityRect(0, ActualHeight-1, ActualWidth, 1, 3);
                buffer.FillRectangle(0, ActualHeight - 1, ActualWidth, 1, ' ', Attr.NO_ATTRIBUTES);
            } else {
                buffer.FillRectangle(0, 0, ActualWidth - 1, ActualHeight, ' ', captionAttrs);
                if (!string.IsNullOrEmpty(Caption)) {
                    RenderString(Caption, buffer, 2 + (ActualWidth - 2 * 2 - Caption.Length) / 2, 
                        (ActualHeight - 1) / 2, ActualWidth - 2 * 2, captionAttrs);
                }
                buffer.SetPixel(0, ActualHeight-1, ' ');
                buffer.SetOpacityRect(0, ActualHeight -1, ActualWidth, 1, 3);
                buffer.FillRectangle(1, ActualHeight-1, ActualWidth - 1, 1, UnicodeTable.UpperHalfBlock, Attr.NO_ATTRIBUTES);
                buffer.SetOpacityRect(ActualWidth - 1, 0, 1, ActualHeight, 3);
                buffer.FillRectangle(ActualWidth - 1, 1, 1, ActualHeight - 2, UnicodeTable.FullBlock, Attr.NO_ATTRIBUTES);
                buffer.SetPixel(ActualWidth - 1, 0, UnicodeTable.LowerHalfBlock);
            }
        }
        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 );
                }
            }
        }
 public override void Render(RenderingBuffer buffer) {
     Attr attr = Colors.Blend(Color.Black, Color.DarkYellow);
     buffer.FillRectangle( 0, 0, ActualWidth, ActualHeight, ' ', attr);
     for (int x = 0; x < ActualWidth; ++x) {
         for (int y = 0; y < ActualHeight; ++y) {
             if (y == 0 && x < text.Length) {
                 buffer.SetPixel(x, y, text[x], attr);
             }
         }
     }
     buffer.SetOpacityRect(0, 0, ActualWidth, ActualHeight, 3);
 }
        public override void Render(RenderingBuffer buffer) {
            Attr captionAttrs;
            if (HasFocus)
                captionAttrs = Colors.Blend(Color.White, Color.DarkGreen);
            else
                captionAttrs = Colors.Blend(Color.Black, Color.DarkGreen);

            Attr buttonAttrs = captionAttrs;
//            if ( pressed )
//                buttonAttrs = Colors.Blend(Color.Black, Color.DarkGreen);

            buffer.SetOpacityRect( 0, 0, ActualWidth, ActualHeight, 3 );

            buffer.SetPixel(0, 0, pressed ? '<' : '[', buttonAttrs);
            buffer.SetPixel(1, 0, Checked ? 'X' : ' ', buttonAttrs);
            buffer.SetPixel(2, 0, pressed ? '>' : ']', buttonAttrs);
            buffer.SetPixel(3, 0, ' ', buttonAttrs);
            if (null != caption)
                RenderString( caption, buffer, 4, 0, ActualWidth - 4, captionAttrs );
        }
Exemple #5
0
            public override void Render(RenderingBuffer buffer)
            {
                Attr borderAttrs = Colors.Blend(Color.Black, Color.Gray);

                // Background
                buffer.FillRectangle(0, 1, ActualWidth, ActualHeight - 1, ' ', borderAttrs);

                // Первые width пикселей первой строки - прозрачные, но события мыши не пропускают
                // По нажатию на них мы закрываем всплывающее окно вручную
                buffer.SetOpacityRect(0, 0, parentItemWidth, 1, 2);
                // Оставшиеся пиксели первой строки - пропускают события мыши
                // И WindowsHost закроет всплывающее окно автоматически при нажатии или
                // перемещении нажатого курсора над этим местом
                buffer.SetOpacityRect( parentItemWidth, 0, ActualWidth - parentItemWidth, 1, 6 );

                if (shadow) {
                    buffer.SetOpacity(0, ActualHeight - 1, 2 + 4);
                    buffer.SetOpacity(ActualWidth - 1, 1, 2 + 4);
                    buffer.SetOpacityRect(ActualWidth - 1, 2, 1, ActualHeight - 2, 1 + 4);
                    buffer.FillRectangle(ActualWidth - 1, 2, 1, ActualHeight - 2, UnicodeTable.FullBlock, borderAttrs);
                    buffer.SetOpacityRect(1, ActualHeight - 1, ActualWidth - 1, 1, 3 + 4);
                    buffer.FillRectangle(1, ActualHeight - 1, ActualWidth - 1, 1, UnicodeTable.UpperHalfBlock,
                                          Attr.NO_ATTRIBUTES);
                }

                RenderBorders( buffer, new Point( 1, 1 ),
                               shadow
                                   ? new Point( ActualWidth - 3, ActualHeight - 2 )
                                   : new Point( ActualWidth - 2, ActualHeight - 1 ),
                               true, borderAttrs );
            }
        public override void Render(RenderingBuffer buffer) {
            Attr attr = Colors.Blend(Color.DarkCyan, Color.DarkBlue);

            buffer.SetOpacityRect( 0,0, ActualWidth, ActualHeight, 2 );

            if ( horizontalScrollVisible ) {
                buffer.SetOpacityRect( 0, ActualHeight-1, ActualWidth, 1, 0 );
                buffer.SetPixel(0, ActualHeight - 1, UnicodeTable.ArrowLeft, attr); // ◄
                // оставляем дополнительный пиксель справа, если одновременно видны оба скроллбара
                int rightOffset = verticalScrollVisible ? 1 : 0;
                if ( ActualWidth > 2 + rightOffset ) {
                    buffer.FillRectangle(1, ActualHeight - 1, ActualWidth - (2 + rightOffset), 1, 
                        UnicodeTable.MediumShade, attr); // ▒
                }
                if ( ActualWidth > 1 + rightOffset ) {
                    buffer.SetPixel(ActualWidth - (1 + rightOffset), ActualHeight - 1,
                        UnicodeTable.ArrowRight, attr); // ►
                }

                // определим, в каком месте находится ползунок
                if ( ActualWidth > 3 + ( verticalScrollVisible ? 1 : 0 ) ) {
                    int remainingWidth = ActualWidth - ( verticalScrollVisible ? 1 : 0 );
                    int extraWidth = Content.RenderSize.Width - remainingWidth;
                    int pages = extraWidth/( remainingWidth - 2 - 1 );

                    //Debugger.Log( 1, "", "pages: " + pages + "\n" );

                    int scrollerPos;
                    if ( pages == 0 ) {
                        double posInDelta = ( remainingWidth*1.0 - 2 - 1 )/extraWidth;
                        //Debugger.Log( 1, "", "posInDelta: " + posInDelta + "\n" );
                        scrollerPos = ( int ) Math.Round( posInDelta*deltaX );
                    } else {
                        double deltaInPos = ( extraWidth*1.0 )/( remainingWidth - 2 - 1 );
                        //Debugger.Log( 1, "", "deltaX/( deltaInPos ): " + deltaX/( deltaInPos ) + "\n" );
                        scrollerPos = ( int ) Math.Round( deltaX/( deltaInPos ) );
                    }

                    buffer.SetPixel(1 + scrollerPos, ActualHeight - 1, UnicodeTable.BlackSquare, attr); // ■
                } else if ( ActualWidth == 3 + ( verticalScrollVisible ? 1 : 0 ) ) {
                    buffer.SetPixel(1, ActualHeight - 1, UnicodeTable.BlackSquare, attr); // ■
                }
            }
            if ( verticalScrollVisible ) {
                buffer.SetOpacityRect(ActualWidth-1, 0, 1, ActualHeight, 0);

                buffer.SetPixel(ActualWidth - 1, 0, UnicodeTable.ArrowUp, attr); // ▲
                // оставляем дополнительный пиксель снизу, если одновременно видны оба скроллбара
                int downOffset = horizontalScrollVisible ? 1 : 0;
                if ( ActualHeight > 2 + downOffset ) {
                    buffer.FillRectangle(ActualWidth - 1, 1, 1, ActualHeight - (2 + downOffset), UnicodeTable.MediumShade, attr); // ▒
                }
                if ( ActualHeight > 1 + downOffset ) {
                    buffer.SetPixel(ActualWidth - 1, ActualHeight - (1 + downOffset), UnicodeTable.ArrowDown, attr); // ▼
                }

                // определим, в каком месте находится ползунок
                if ( ActualHeight > 3 + ( horizontalScrollVisible ? 1 : 0 ) ) {
                    int remainingHeight = ActualHeight - (horizontalScrollVisible ? 1 : 0);
                    int extraHeight = Content.RenderSize.Height - remainingHeight;
                    int pages = extraHeight/( remainingHeight - 2 - 1 );

                    //Debugger.Log( 1, "", "pages: " + pages + "\n" );

                    int scrollerPos;
                    if ( pages == 0 ) {
                        double posInDelta = ( remainingHeight*1.0 - 2 - 1 )/extraHeight;
                        //Debugger.Log( 1, "", "posInDelta: " + posInDelta + "\n" );
                        scrollerPos = ( int ) Math.Round( posInDelta*deltaY );
                    } else {
                        double deltaInPos = ( extraHeight*1.0 )/( remainingHeight - 2 - 1 );
                        //Debugger.Log( 1, "", "deltaY/( deltaInPos ): " + deltaY/( deltaInPos ) + "\n" );
                        scrollerPos = ( int ) Math.Round( deltaY/( deltaInPos ) );
                    }

                    buffer.SetPixel(ActualWidth - 1, 1 + scrollerPos, UnicodeTable.BlackSquare, attr); // ■
                } else if ( ActualHeight == 3 + ( horizontalScrollVisible ? 1 : 0 ) ) {
                    buffer.SetPixel(ActualWidth - 1, 1, UnicodeTable.BlackSquare, attr); // ■
                }
            }
            if ( horizontalScrollVisible && verticalScrollVisible ) {
                buffer.SetPixel(ActualWidth - 1, ActualHeight - 1, UnicodeTable.SingleFrameBottomRightCorner, attr); // ┘
            }
        }
Exemple #7
0
 public override void Render(RenderingBuffer buffer)
 {
     Attr borderAttrs = moving ? Colors.Blend(Color.Green, Color.Gray) : Colors.Blend(Color.White, Color.Gray);
     // background
     buffer.FillRectangle(0, 0, this.ActualWidth, this.ActualHeight, ' ', borderAttrs);
     // Borders
     RenderBorders(buffer, new Point(0, 0), new Point(ActualWidth - 3, ActualHeight - 2),
         this.moving || this.resizing, borderAttrs);
     // close button
     if (ActualWidth > 4) {
         buffer.SetPixel(2, 0, '[');
         buffer.SetPixel(3, 0, showClosingGlyph ? UnicodeTable.WindowClosePressedSymbol : UnicodeTable.WindowCloseSymbol,
             Colors.Blend(Color.Green, Color.Gray));
         buffer.SetPixel(4, 0, ']');
     }
     // shadows
     buffer.SetOpacity(0, ActualHeight - 1, 2+4);
     buffer.SetOpacity(1, ActualHeight - 1, 2+4);
     buffer.SetOpacity(ActualWidth - 1, 0, 2+4);
     buffer.SetOpacity(ActualWidth - 2, 0, 2+4);
     buffer.SetOpacityRect(2, ActualHeight - 1, ActualWidth - 2, 1, 1+4);
     buffer.SetOpacityRect(ActualWidth - 2, 1, 2, ActualHeight - 1, 1+4);
     // title
     if (!string.IsNullOrEmpty(Title)) {
         int titleStartX = 7;
         bool renderTitle = false;
         string renderTitleString = null;
         int availablePixelsCount = ActualWidth - titleStartX*2;
         if (availablePixelsCount > 0) {
             renderTitle = true;
             if (Title.Length <= availablePixelsCount) {
                 // dont truncate title
                 titleStartX += (availablePixelsCount - Title.Length)/2;
                 renderTitleString = Title;
             } else {
                 renderTitleString = Title.Substring(0, availablePixelsCount);
                 if (renderTitleString.Length > 2) {
                     renderTitleString = renderTitleString.Substring(0, renderTitleString.Length - 2) + "..";
                 } else {
                     renderTitle = false;
                 }
             }
         }
         if (renderTitle) {
             // assert !string.IsNullOrEmpty(renderingTitleString);
             buffer.SetPixel(titleStartX - 1, 0, ' ', borderAttrs);
             for (int i = 0; i < renderTitleString.Length; i++) {
                 buffer.SetPixel(titleStartX + i, 0, renderTitleString[i], borderAttrs);
             }
             buffer.SetPixel(titleStartX + renderTitleString.Length, 0, ' ', borderAttrs);
         }
     }
 }
Exemple #8
0
 public override void Render( RenderingBuffer buffer ) {
     buffer.SetOpacityRect( 0, 0, ActualWidth, ActualHeight, 2 );
 }
Exemple #9
0
            public override void Render(RenderingBuffer buffer)
            {
                Attr borderAttrs = Colors.Blend(Color.Black, Color.DarkCyan);

                // Background
                buffer.FillRectangle(1, 1, this.ActualWidth - 1, this.ActualHeight - 1, ' ', borderAttrs);

                // First row and first column are transparent
                // Column is also transparent for mouse events
                buffer.SetOpacityRect( 0,0,ActualWidth, 1, 2 );
                buffer.SetOpacityRect( 0, 1, 1, ActualHeight-1, 6 );
                if ( shadow ) {
                    buffer.SetOpacity( 1, ActualHeight - 1, 2+4 );
                    buffer.SetOpacity( ActualWidth - 1, 0, 2+4 );
                    buffer.SetOpacityRect( ActualWidth - 1, 1, 1, ActualHeight - 1, 1+4 );
                    buffer.FillRectangle(ActualWidth - 1, 1, 1, ActualHeight - 1, UnicodeTable.FullBlock, borderAttrs);
                    buffer.SetOpacityRect( 2, ActualHeight - 1, ActualWidth - 2, 1, 3+4 );
                    buffer.FillRectangle(2, ActualHeight - 1, ActualWidth - 2, 1, UnicodeTable.UpperHalfBlock,
                                          Attr.NO_ATTRIBUTES );
                }
            }
Exemple #10
0
        public override void Render(RenderingBuffer buffer) {
            Attr attr = Colors.Blend( Color.Black, Color.DarkGreen );

            // прозрачный фон для рамки
            buffer.SetOpacityRect( 0, 0, ActualWidth, ActualHeight, 3 );
            // полностью прозрачный внутри
            if (ActualWidth > 2 && ActualHeight > 2)
                buffer.SetOpacityRect( 1, 1, ActualWidth-2, ActualHeight-2, 2 );
            // title
            int titleRenderedWidth = 0;
            if ( !string.IsNullOrEmpty( title ) )
                titleRenderedWidth = RenderString( title, buffer, 2, 0, ActualWidth - 4, attr );
            // upper border
            for ( int x = 0; x < ActualWidth; x++ ) {
                char? c = null;
                if ( x == 0 )
                    c = UnicodeTable.SingleFrameTopLeftCorner;
                else if (x == ActualWidth - 1)
                    c = UnicodeTable.SingleFrameTopRightCorner;
                else if (x == 1 || x == 2 + titleRenderedWidth)
                    c = ' ';
                else if ( x > 2 + titleRenderedWidth && x < ActualWidth - 1 )
                    c = UnicodeTable.SingleFrameHorizontal;
                if (c != null)
                    buffer.SetPixel( x, 0, c.Value, attr );
            }
            // left border
            if (ActualHeight > 2)
                buffer.FillRectangle(0, 1, 1, ActualHeight - 2, UnicodeTable.SingleFrameVertical, attr);
            if (ActualHeight > 1)
                buffer.SetPixel(0, ActualHeight - 1, UnicodeTable.SingleFrameBottomLeftCorner, attr);
            // right border
            if ( ActualWidth > 1 ) {
                if (ActualHeight > 2)
                    buffer.FillRectangle(ActualWidth - 1, 1, 1, ActualHeight - 2, UnicodeTable.SingleFrameVertical, attr);
                if (ActualHeight > 1)
                    buffer.SetPixel(ActualWidth - 1, ActualHeight - 1, UnicodeTable.SingleFrameBottomRightCorner, attr);
            }
            // bottom border
            if ( ActualHeight > 1 && ActualWidth > 2 ) {
                buffer.FillRectangle(1, ActualHeight - 1, ActualWidth - 2, 1, UnicodeTable.SingleFrameHorizontal, attr);
            }
        }
            public override void Render(RenderingBuffer buffer)
            {
                Attr borderAttrs = Colors.Blend(Color.Black, Color.DarkCyan);
                // устанавливаем прозрачными первую строку и первый столбец
                // для столбца дополнительно включена прозрачность для событий мыши

                // background
                buffer.FillRectangle(1, 1, this.ActualWidth - 1, this.ActualHeight - 1, ' ', borderAttrs);

                buffer.SetOpacityRect( 0,0,ActualWidth, 1, 2 );
                buffer.SetOpacityRect( 0, 1, 1, ActualHeight-1, 6 );
                if ( shadow ) {
                    buffer.SetOpacity( 1, ActualHeight - 1, 2+4 );
                    buffer.SetOpacity( ActualWidth - 1, 0, 2+4 );
                    buffer.SetOpacityRect( ActualWidth - 1, 1, 1, ActualHeight - 1, 1+4 );
                    buffer.FillRectangle(ActualWidth - 1, 1, 1, ActualHeight - 1, UnicodeTable.FullBlock, borderAttrs);
                    buffer.SetOpacityRect( 2, ActualHeight - 1, ActualWidth - 2, 1, 3+4 );
                    buffer.FillRectangle(2, ActualHeight - 1, ActualWidth - 2, 1, UnicodeTable.UpperHalfBlock,
                                          Attr.NO_ATTRIBUTES );
                }
            }