Esempio n. 1
0
        public override void Render(SpriteRenderContext ctx, byte[] frameBuffer, int pixelOffset)
        {
            // foreach (char ch in Value)
            for (int i = 0; i < Value.Length; i++)
            {
                // var character = SysFont.Font[(byte)Value[i]];
                //for (int fx = 0; fx < 8; fx++)
                //    for (int fy = 0; fy < 8; fy++)
                //    {
                //        bool draw = ((character >> ((fy * 8) + fx)) & 0x01) == 0x01;
                //        frameBuffer[((fy + Y) * 640) + (fx + X) + pixelOffset + (i * 8)] = draw ? (byte)ctx.Color : (byte)EgaColor.White;
                //    }

                byte[]    character = ctx.State.Font[(byte)Value[i]];
                const int byteSize  = 8;

                for (int fy = 0; fy < ctx.State.Font.Height; fy++)
                {
                    for (int fx = 0; fx < ctx.State.Font.Width; fx++)
                    {
                        var  fontRow = character[(fy * ctx.State.Font.Width) / byteSize];
                        bool draw    = ((fontRow >> (fx % byteSize)) & 0x01) == 0x01;
                        frameBuffer[((fy + Y) * ctx.State.Width) + (fx + X) + pixelOffset + (i * ctx.State.Font.Width)] = draw ? (byte)ctx.Color : (byte)EgaColor.White;
                        //frameBuffer[(((row * _font.Height) + fy) * Width) + (column * _font.Width) + fx + ch.ShiftX] = draw ? (byte)fg : (byte)bg;
                    }
                }
            }
        }
Esempio n. 2
0
        public override void Render(SpriteRenderContext ctx, byte[] frameBuffer, int pixelOffset)
        {
            // Draw the text first.
            base.Render(ctx, frameBuffer, pixelOffset);

            // Then, draw a border around it.
            for (int i = -2; i < (Value.Length * ctx.State.Font.Width) + Padding; i++)
            {
                frameBuffer[i + pixelOffset + ((Y - Padding) * ctx.State.Width) + X] = 0x00;
            }

            // Bottom
            for (int i = -2; i < (Value.Length * ctx.State.Font.Width) + Padding + 1; i++)
            {
                frameBuffer[i + pixelOffset + ((Y + Padding) * ctx.State.Width) + X + (ctx.State.Font.Width * ctx.State.Width)] = 0x00;
            }

            // Left
            for (int i = 0; i < ctx.State.Font.Width + (2 * Padding); i++)
            {
                frameBuffer[(i * ctx.State.Width) + pixelOffset + ((Y - 2) * ctx.State.Width) + X - Padding] = 0x00;
            }

            // Right
            for (int i = 0; i < ctx.State.Font.Width + (2 * 2); i++)
            {
                frameBuffer[(i * ctx.State.Width) + (Value.Length * ctx.State.Font.Width) + pixelOffset + ((Y - Padding) * ctx.State.Width) + X + Padding] = 0x00;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Renders an arrow head at the end of the line.
        /// </summary>
        /// <param name="ctx">Render ctx</param>
        /// <param name="frameBuffer">Framebuffer</param>
        /// <param name="pixelOffset">Offset in framebuffer</param>
        /// <param name="x1">Source X</param>
        /// <param name="y1">Source Y</param>
        /// <param name="x2">Dest X</param>
        /// <param name="y2">Dest Y</param>
        /// <param name="size">Length in pixels of the arrow heads</param>
        protected void RenderArrowHead(SpriteRenderContext renderContext, byte[] frameBuffer, int pixelOffset, int x1, int y1, int x2, int y2, int size = 6)
        {
            var angle = Math.Atan2(y2 - y1, x2 - x1);

            RenderLine(renderContext, frameBuffer, pixelOffset, x2, y2, (int)(x2 - size * Math.Cos(angle - Math.PI / 6)), (int)(y2 - size * Math.Sin(angle - Math.PI / 6)), renderContext.Color);
            RenderLine(renderContext, frameBuffer, pixelOffset, x2, y2, (int)(x2 - size * Math.Cos(angle + Math.PI / 6)), (int)(y2 - size * Math.Sin(angle + Math.PI / 6)), renderContext.Color);
        }
Esempio n. 4
0
        public override void Render(SpriteRenderContext ctx, byte[] frameBuffer, int pixelOffset)
        {
            // First, render the line.
            base.Render(ctx, frameBuffer, pixelOffset);

            // Then, render the arrow head on top.
            RenderArrowHead(ctx, frameBuffer, pixelOffset, X1, Y1, X2, Y2);
        }
Esempio n. 5
0
        public void WriteToFrameBuffer(ViewerState state, byte[] frameBuffer, int pixelOffset)
        {
            var ctx = new SpriteRenderContext(state);

            foreach (var element in _spriteElements)
            {
                element.Render(ctx, frameBuffer, pixelOffset);
                Console.WriteLine("Rendered {0}", element);
            }
        }
Esempio n. 6
0
 public override void Render(SpriteRenderContext ctx, byte[] frameBuffer, int pixelOffset)
 {
     //for (int y = _y + pixelOffset; y < _h + pixelOffset + _y; y++)
     for (int y = 0; y < _h; y++)
     {
         Array.Copy(
             _data,
             y * _w,
             frameBuffer,
             pixelOffset + (y * ctx.State.Width) + (_y * ctx.State.Width) + _x,
             _w);
     }
 }
Esempio n. 7
0
 public override void Render(SpriteRenderContext ctx, byte[] frameBuffer, int pixelOffset)
 {
     ctx.Thickness = Thickness;
 }
Esempio n. 8
0
        protected void RenderLine(SpriteRenderContext renderContext, byte[] frameBuffer, int pixelOffset, int x1, int y1, int x2, int y2, EgaColor color = EgaColor.Black)
        {
            int w = x2 - x1;
            int h = y2 - y1;
            int dx1 = 0, dy1 = 0, dx2 = 0, dy2 = 0;

            if (w < 0)
            {
                dx1 = -1;
            }
            else if (w > 0)
            {
                dx1 = 1;
            }
            if (h < 0)
            {
                dy1 = -1;
            }
            else if (h > 0)
            {
                dy1 = 1;
            }
            if (w < 0)
            {
                dx2 = -1;
            }
            else if (w > 0)
            {
                dx2 = 1;
            }
            int longest  = Math.Abs(w);
            int shortest = Math.Abs(h);

            if (!(longest > shortest))
            {
                longest  = Math.Abs(h);
                shortest = Math.Abs(w);
                if (h < 0)
                {
                    dy2 = -1;
                }
                else if (h > 0)
                {
                    dy2 = 1;
                }
                dx2 = 0;
            }
            int numerator = longest >> 1;

            for (int i = 0; i <= longest; i++)
            {
                // putpixel(x, y, color);
                if ((y1 * renderContext.State.Width) + x1 + pixelOffset < 0)
                {
                    continue;
                }

                frameBuffer[(y1 * renderContext.State.Width) + x1 + pixelOffset] = (byte)color;
                numerator += shortest;
                if (!(numerator < longest))
                {
                    numerator -= longest;
                    x1        += dx1;
                    y1        += dy1;
                }
                else
                {
                    x1 += dx2;
                    y1 += dy2;
                }
            }
        }
Esempio n. 9
0
 public override void Render(SpriteRenderContext ctx, byte[] frameBuffer, int pixelOffset) => RenderLine(ctx, frameBuffer, pixelOffset, X1, Y1, X2, Y2, ctx.Color);
Esempio n. 10
0
 public abstract void Render(SpriteRenderContext ctx, byte[] frameBuffer, int pixelOffset);