示例#1
0
        Control Preview()
        {
            var size     = new Size(128, 128);
            var drawable = new Drawable {
                Size = size
            };

            drawable.Paint += (sender, pe) =>
            {
                if (canvas != null)
                {
                    canvas.DrawRegion(pe.Graphics, new Rectangle(size));
                }
            };
            drawable.LoadComplete += delegate {
                canvas = new BGICanvas(drawable, size);
                DrawCanvas();
            };

            var layout = new DynamicLayout();

            layout.AddCentered(drawable, verticalCenter: false);
            return(new GroupBox {
                Text = "Preview", Content = layout
            });
        }
示例#2
0
        Control FontType()
        {
            var drawable = new Drawable
            {
                Size = new Size(40, 40)
            };

            drawable.MouseUp += delegate
            {
                SelectFont();
            };

            drawable.Paint += delegate(object sender, PaintEventArgs pe)
            {
                if (canvas != null)
                {
                    canvas.DrawRegion(pe.Graphics, new Rectangle(Point.Empty, canvas.WindowSize));
                }
            };

            drawable.LoadComplete += delegate             // Shown?
            {
                if (drawable.Size.IsEmpty)
                {
                    return;
                }
                canvas = new BGICanvas(drawable, drawable.Size);
                DrawCanvas();
            };
            return(drawable);
        }
示例#3
0
 public override bool InternalShouldApply(BGICanvas bgi)
 {
     return(this.Style != BGICanvas.FillStyle.User &&
            (
                bgi.GetFillColor() != this.Color ||
                bgi.GetFillStyle() != this.Style
            ));
 }
示例#4
0
 public override bool InternalShouldApply(BGICanvas bgi)
 {
     return
         (isUserStyle &&
          (
              bgi.GetFillStyle() != BGICanvas.FillStyle.User ||
              bgi.GetFillColor() != Color ||
              !bgi.GetFillPattern(BGICanvas.FillStyle.User).SequenceEqual(Pattern)
          ));
 }
示例#5
0
        public virtual bool ShouldApply(BGICanvas bgi)
        {
            var contains = this.Document.OptionalApplied.Contains(OpCode);

            if (InternalShouldApply(bgi) || !contains)
            {
                return(true);
            }
            return(false);
        }
示例#6
0
		void SetBGI(RipHandler handler)
		{
			var pane = handler?.ViewerControl as ViewerPane;
			var viewer = pane != null ? pane?.Viewer : null;
			
			if (BGI != null)
				BGI.Control = viewer;
			else
				BGI = new BGICanvas(viewer);
		}
示例#7
0
        void SetBGI(RipHandler handler)
        {
            var pane   = handler != null && handler.HasViewerControl ? handler.ViewerControl as ViewerPane : null;
            var viewer = pane != null ? pane.Viewer : null;

            if (BGI != null)
            {
                BGI.Control = viewer;
            }
            else
            {
                BGI = new BGICanvas(viewer);
            }
        }
示例#8
0
        public float DrawCharacter(BGICanvas bgi, float x, float y, BGICanvas.Direction dir, int size, byte character, IList <Rectangle> updates)
        {
            BGICharacter ch = this[character];

            if (ch != null)
            {
                var drawUpdates = updates ?? new List <Rectangle>();
                ch.Draw(bgi, x, y, dir, size, updates);
                if (updates == null)
                {
                    bgi.UpdateRegion(drawUpdates);
                }
                return(ch.GetWidth(size));
            }
            return(0);
        }
示例#9
0
        public void Draw(BGICanvas bgi, float x, float y, BGICanvas.Direction dir, int size, IList <Rectangle> updates)
        {
            var drawUpdates = updates ?? new List <Rectangle> ();

            var height = font.Height * scaleup [size] / scaledown [size];

            if (dir == BGICanvas.Direction.Horizontal)
            {
                foreach (var stroke in strokes)
                {
                    int curx = (int)x + (stroke.x * scaleup [size] / scaledown [size]);
                    int cury = (int)y + height - (stroke.y * scaleup [size] / scaledown [size]);

                    if (stroke.type == StrokeType.MoveTo)
                    {
                        bgi.MoveTo(curx, cury);
                    }
                    else if (stroke.type == StrokeType.LineTo)
                    {
                        bgi.LineTo(curx, cury, drawUpdates);
                    }
                }
            }
            else
            {
                foreach (var stroke in strokes)
                {
                    int curx = (int)x + height - (stroke.y * scaleup [size] / scaledown [size]);
                    int cury = (int)y - (stroke.x * scaleup [size] / scaledown [size]);

                    if (stroke.type == StrokeType.MoveTo)
                    {
                        bgi.MoveTo(curx, cury);
                    }
                    else if (stroke.type == StrokeType.LineTo)
                    {
                        bgi.LineTo(curx, cury, drawUpdates);
                    }
                }
            }
            if (updates == null)
            {
                bgi.UpdateRegion(drawUpdates);
            }
        }
示例#10
0
        protected override void ApplyInvertedDrawing(IList <Rectangle> updates)
        {
            var point      = this.Command.Point;
            int startAngle = Command.StartAngle;
            int endAngle   = Command.EndAngle;

            if (startAngle > endAngle)
            {
                var t = startAngle;
                startAngle = endAngle;
                endAngle   = t;
            }

            this.BGI.Ellipse(point.X, point.Y, startAngle, endAngle, Command.Radius.Width, Command.Radius.Height, updates);
            this.BGI.Line(point, point + BGICanvas.GetAngleSize(startAngle, Command.Radius), updates);
            this.BGI.Line(point, point + BGICanvas.GetAngleSize(endAngle, Command.Radius), updates);
            ApplyHandles(updates);
        }
示例#11
0
        public Size GetMaxCharacterSize(BGICanvas.Direction dir, int size)
        {
            float width = 0;

            foreach (var ch in characters)
            {
                if (ch != null)
                {
                    width = Math.Max(width, ch.GetWidth(size));
                }
            }
            if (dir == BGICanvas.Direction.Horizontal)
            {
                return(new Size(BGICanvas.Round(width), (int)((Height + Math.Abs(OriginToDescender) + 1) * BGICharacter.scaleup[size] / BGICharacter.scaledown[size])));
            }
            else
            {
                return(new Size((int)((Height + Math.Abs(OriginToDescender) + 1) * BGICharacter.scaleup[size] / BGICharacter.scaledown[size]), BGICanvas.Round(width)));
            }
        }
示例#12
0
        public Size GetTextSize(string str, BGICanvas.Direction dir, int size)
        {
            float width = 0;

            foreach (byte c in BGICanvas.Encoding.GetBytes(str))
            {
                BGICharacter ch = this[c];
                if (ch != null)
                {
                    width += ch.Width;
                }
            }
            if (dir == BGICanvas.Direction.Horizontal)
            {
                return(new Size(BGICanvas.Trunc(width * BGICharacter.scaleup[size] / BGICharacter.scaledown[size]), (int)((Height + Math.Abs(OriginToDescender) + 1) * BGICharacter.scaleup[size] / BGICharacter.scaledown[size])));
            }
            else
            {
                return(new Size((int)((Height + Math.Abs(OriginToDescender) + 1) * BGICharacter.scaleup[size] / BGICharacter.scaledown[size]), BGICanvas.Trunc(width * BGICharacter.scaleup[size] / BGICharacter.scaledown[size])));
            }
        }
示例#13
0
        Control Preview()
        {
            var control = new Drawable
            {
                Size = new Size(400, 100)
            };

            control.Paint += delegate(object sender, PaintEventArgs pe)
            {
                if (canvas != null)
                {
                    canvas.DrawRegion(pe.Graphics, new Rectangle(canvas.WindowSize));
                }
            };

            control.LoadComplete += delegate
            {
                canvas = new BGICanvas(control, control.Size);
                DrawPreview();
            };

            return(control);
        }
示例#14
0
        Control Preview()
        {
            var size     = new Size(128, 128);
            var drawable = new Drawable {
                Size = size
            };

            drawable.Paint += (sender, pe) =>
            {
                if (canvas != null)
                {
                    canvas.DrawRegion(pe.Graphics, new Rectangle(size));
                }
            };
            drawable.LoadComplete += delegate {
                canvas = new BGICanvas(drawable, size);
                DrawCanvas();
            };

            return(new GroupBox {
                Text = "Preview", Content = drawable
            });
        }
示例#15
0
        Control Preview()
        {
            var size     = new Size(256, 128);
            var drawable = new Drawable {
                Size = size
            };

            drawable.Paint += delegate(object sender, PaintEventArgs pe)
            {
                this.canvas.DrawRegion(pe.Graphics, new Rectangle(size));
            };
            drawable.LoadComplete += delegate
            {
                canvas = new BGI.BGICanvas(drawable, size);
                DrawCanvas();
            };

            var layout = new DynamicLayout();

            layout.AddCentered(drawable);
            return(new GroupBox {
                Text = "Preview", Content = layout
            });
        }
示例#16
0
        int GetAngle(Point start, Point end)
        {
            var offset = new Point(end - start);

            var angle = BGICanvas.Round(Math.Atan((double)offset.Y * radius.Width / radius.Height / offset.X) * (180.0 / Math.PI));

            if (offset.Y < 0 && offset.X < 0)
            {
                angle = 180 - angle;
            }
            else if (offset.Y > 0 && offset.X < 0)
            {
                angle = 180 - angle;
            }
            else if (offset.Y > 0 && offset.X > 0)
            {
                angle = 360 - angle;
            }
            else
            {
                angle = -angle;
            }
            return(angle);
        }
示例#17
0
 public override bool InternalShouldApply(BGICanvas bgi)
 {
     return(bgi.GetColor() != Value);
 }
示例#18
0
 public override void Set(BGICanvas bgi)
 {
     this.Font          = bgi.GetFontType();
     this.Direction     = bgi.GetTextDirection();
     this.CharacterSize = bgi.GetFontSize();
 }
示例#19
0
 public override bool InternalShouldApply(BGICanvas bgi)
 {
     return(bgi.GetFontType() != this.Font ||
            bgi.GetTextDirection() != this.Direction ||
            bgi.GetFontSize() != this.CharacterSize);
 }
示例#20
0
 public override void Set(BGICanvas bgi)
 {
     this.Style     = bgi.GetLineStyle();
     this.Pattern   = bgi.GetLinePattern(BGICanvas.LineStyle.User);
     this.Thickness = bgi.GetLineThickness();
 }
示例#21
0
 public override bool InternalShouldApply(BGICanvas bgi)
 {
     return(Style != bgi.GetLineStyle() ||
            (Style == BGICanvas.LineStyle.User && Pattern != bgi.GetLinePattern(BGICanvas.LineStyle.User)) ||
            Thickness != bgi.GetLineThickness());
 }
示例#22
0
 public override void Set(BGICanvas bgi)
 {
     Mode = bgi.GetWriteMode();
 }
示例#23
0
 public override void Set(BGICanvas bgi)
 {
     this.Style = bgi.GetFillStyle();
     this.Color = bgi.GetFillColor();
 }
示例#24
0
 public abstract bool InternalShouldApply(BGICanvas bgi);
示例#25
0
 public abstract void Set(BGICanvas bgi);
示例#26
0
 public override bool ShouldApply(BGICanvas bgi)
 {
     return(isUserStyle && base.ShouldApply(bgi));
 }
示例#27
0
        public float DrawCharacter(BGICanvas bgi, float x, float y, BGICanvas.Direction dir, int size, byte character, IList <Rectangle> updates)
        {
            byte          foreCol = bgi.GetColor();
            FontCharacter fc      = this[character];

            if (dir == BGICanvas.Direction.Horizontal)
            {
                int starty = (int)y;
                for (int cy = 0; cy < Height; cy++)
                {
                    int startx = (int)x;
                    for (int cx = 0; cx < Width; cx++)
                    {
                        if (fc[cx, cy])
                        {
                            if (size == 1)
                            {
                                bgi.PutPixelInternal(startx, starty, foreCol);
                            }
                            else
                            {
                                for (int ccy = 0; ccy < size; ccy++)
                                {
                                    for (int ccx = 0; ccx < size; ccx++)
                                    {
                                        bgi.PutPixelInternal(startx + ccx, starty + ccy, foreCol);
                                    }
                                }
                            }
                        }
                        startx += size;
                    }
                    starty += size;
                }
                var updateRect = new Rectangle((int)x, (int)y, Width * size, Height * size);
                if (updates != null)
                {
                    updates.Add(updateRect);
                }
                else
                {
                    bgi.UpdateRegion(updateRect);
                }
            }
            else
            {
                int startx = (int)x;
                for (int cy = 0; cy < Height; cy++)
                {
                    int starty = (int)y;
                    for (int cx = 0; cx < Width; cx++)
                    {
                        if (fc[cx, cy])
                        {
                            if (size == 1)
                            {
                                bgi.PutPixelInternal(startx, starty, foreCol);
                            }
                            else
                            {
                                for (int ccy = 0; ccy < size; ccy++)
                                {
                                    for (int ccx = 0; ccx < size; ccx++)
                                    {
                                        bgi.PutPixelInternal(startx + ccx, starty - ccy, foreCol);
                                    }
                                }
                            }
                        }
                        starty -= size;
                    }
                    startx += size;
                }
                var updateRect = new Rectangle((int)x, (int)y, Height * size, Width * size);
                if (updates != null)
                {
                    updates.Add(updateRect);
                }
                else
                {
                    bgi.UpdateRegion(updateRect);
                }
            }
            return(Width * size);
        }
示例#28
0
 public override bool InternalShouldApply(BGICanvas bgi)
 {
     return(bgi.GetWriteMode() != Mode);
 }