示例#1
0
        public void OnPaint(IRenderEventArgs e)
        {
            var ev = e as RenderContextEventArgs;
            var sf = e.Surface as ContextSurface;

            OnDraw(sf.Context, e.Clipper.Bounds);
        }
示例#2
0
        public override void OnPaint(IRenderEventArgs e)
        {
            var g = ((GdiSurface)e.Surface).Graphics;

            var transform = this.Camera.Matrix;

            g.Transform = transform.ToGdi();

            if (AntiAlias)
            {
                // this is hiqh quality mode:
                g.SmoothingMode     = SmoothingMode.HighQuality;            //.AntiAlias;//.HighQuality;//.HighSpeed;
                g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;   //.SystemDefault;//.AntiAliasGridFit;//.ClearTypeGridFit:this is slowest on mono;
                g.InterpolationMode = InterpolationMode.HighQualityBicubic; //
            }
            else
            {
                // this is speed - mode, best compromise, not highspeed:
                g.SmoothingMode     = SmoothingMode.HighSpeed; // .none is fastest
                g.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
                g.InterpolationMode = InterpolationMode.Low;
            }
            //e.Graphics.TextContrast = 12; // 0..12

            g.CompositingMode = CompositingMode.SourceOver;

            this.Renderer.Render(this.Data, e);

            g.Transform.Reset();
        }
示例#3
0
 public void OnPaint(IRenderEventArgs e)
 {
     if (!stopped)
     {
         FrameCount++;
     }
 }
示例#4
0
        public override void OnPaint(IRenderEventArgs e)
        {
            var data = this.Data;

            if (data != null && !hadError)
            {
                try {
                    var g = ((GdiSurface)e.Surface).Graphics;
                    g.Transform          = this.Camera.Matrix.ToGdi();
                    g.InterpolationMode  = InterpolationMode.Low;
                    g.CompositingMode    = CompositingMode.SourceCopy;
                    g.CompositingQuality = CompositingQuality.HighSpeed;
                    ImageAttributes imageAttributes = null;

                    if (Alpha < 1d)
                    {
                        var clrMatrix = new ColorMatrix(new float[][] {
                            new float[] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f },
                            new float[] { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f },
                            new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f },
                            new float[] { 0.0f, 0.0f, 0.0f, (float)this.Alpha, 0.0f },
                            new float[] { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }
                        });
                        imageAttributes = new ImageAttributes();
                        imageAttributes.SetColorMatrix(clrMatrix);

                        g.CompositingMode = CompositingMode.SourceOver;
                    }

                    var rc = Camera.ToSource(e.Clipper.Bounds);

                    rc = rc.Intersect(new Xwt.Rectangle(0, 0, Size.Width, Size.Height));
                    rc = rc.Inflate(new Size(1, 1));
                    if (imageAttributes == null)
                    {
                        g.DrawImage(data,
                                    (float)rc.X,
                                    (float)rc.Y,
                                    rc.ToGdi(),
                                    GraphicsUnit.Pixel);
                    }
                    else
                    {
                        g.DrawImage(data,
                                    rc.ToGdi(),
                                    (float)rc.X,
                                    (float)rc.Y,
                                    (float)rc.Width,
                                    (float)rc.Height,
                                    GraphicsUnit.Pixel,
                                    imageAttributes);
                    }

                    g.Transform.Reset();
                } catch (Exception ex) {
                    ExceptionHandler.Catch(ex, MessageType.OK);
                    hadError = true;
                }
            }
        }
示例#5
0
        public override void OnPaint(IRenderEventArgs e)
        {
            if (Shape != null)
            {
                // we paint the Shape untransformed, otherwise it looses its line-size
                // that means, that the linesize is zoomed which makes an ugly effect

                if (RenderType != RenderType.None)
                {
                    var save = SaveMatrix(e.Surface);
                    SetMatrix(e.Surface);

                    var paintShape = (IShape)this.Shape.Clone();
                    Camera.FromSource(paintShape);

                    Painter.RenderType = RenderType;
                    Painter.Shape      = paintShape;
                    Painter.Style      = this.Style;
                    Painter.Render(e.Surface);

                    //restore
                    RestoreMatrix(e.Surface, save);
                }

                // paint the grips
                base.OnPaint(e);
            }
        }
示例#6
0
        public override void Render(IVisual visual, IRenderEventArgs e)
        {
            var layout = this.Layout();
            var style  = layout.GetStyle(visual);
            var shape  = layout.GetShape(visual);

            var shapePainter = layout.GetPainter(shape.GetType());

            if (shapePainter != null)
            {
                shapePainter.Shape = shape;
                shapePainter.Style = style;
                shapePainter.Render(e.Surface);
            }

            bool paintData = style.PaintData;

            if (paintData)
            {
                Action <object, IShape> paint = (data, dataShape) => {
                    data = GetData(data);
                    var dataPainter = layout.GetPainter(data.GetType()) as IDataPainter;
                    if (dataPainter != null)
                    {
                        dataPainter.Data       = data;
                        dataPainter.Style      = style;
                        dataPainter.OuterShape = dataShape;
                        dataPainter.Render(e.Surface);
                    }
                };

                var enumerable = visual.Data as System.Collections.IEnumerable;
                if (!(visual.Data is string) && enumerable != null)
                {
                    var dimension   = Dimension.X;
                    var shapeBounds = shape.BoundsRect;
                    foreach (var d in enumerable)
                    {
                        var size = layout.GetSize(d, style);
                        if (dimension == Dimension.X)
                        {
                            size.Height = shapeBounds.Height;
                        }
                        var dshape = new RectangleShape {
                            Location = shapeBounds.Location, Size = size
                        };
                        paint(d, dshape);
                        if (dimension == Dimension.X)
                        {
                            shapeBounds.Location = new Point(shapeBounds.Location.X + size.Width, shapeBounds.Y);
                        }
                    }
                }
                else
                {
                    paint(visual.Data, shape);
                }
            }
        }
示例#7
0
        public virtual Point[] ClipHull(IRenderEventArgs e)
        {
            var hull   = e.Clipper.Hull.ToArray();
            var result = new Point[hull.Length];

            result = Array.ConvertAll <Xwt.Point, Point> (hull, a => a.ToGdi());

            return(result);
        }
示例#8
0
 public void OnPaint(IRenderEventArgs e)
 {
     foreach (var renderAction in RenderActions)
     {
         if (renderAction.Enabled)
         {
             renderAction.OnPaint(e);
         }
     }
 }
示例#9
0
        public void OnPaint(IRenderEventArgs e)
        {
            var surface = (ContextSurface)e.Surface;
            var ctx     = surface.Context;

            // paint background
            ctx.SetColor(BackColor());
            ctx.Rectangle(e.Clipper.Bounds);
            ctx.Fill();

            Layer.OnPaint(e);
        }
示例#10
0
        public virtual void OnPaint(IRenderEventArgs e)
        {
            var shape = this.Shape;

            if ((shape != null) && (ShowGrips))
            {
                var save = SaveMatrix(e.Surface);
                SetMatrix(e.Surface);

                GripPainter.Render(e.Surface);
                RestoreMatrix(e.Surface, save);
            }
        }
示例#11
0
        public void OnPaintTest2(IRenderEventArgs e)
        {
            Graphics g = ((GdiSurface)e.Surface).Graphics;

            SD.Drawing2D.Matrix save = g.Transform;
            g.Transform = Camera.Matrix.ToGdi();

            Rectangle smaller = new Rectangle(start, new Size(50, 20));
            Rectangle bigger  = new Rectangle(start, new Size(55, 25));
            Rectangle rect3   = new Rectangle(start, new Size(10, 10));

            g.DrawRectangle(rectPen, smaller);
            g.DrawRectangle(rectPen, bigger);

            smaller.Inflate(-5, -5);
            bigger.Inflate(5, 5);

            //region.MakeEmpty ();
            region.MakeEmpty();

            invPath.Reset();
            invPath.FillMode = FillMode.Alternate;

            smaller.Intersect(bigger);
            //region.Intersect (smaller);

            //invPath.StartFigure ();
            invPath.AddRectangle(bigger);
            //invPath.CloseFigure();
            //invPath.StartFigure();
            invPath.AddRectangle(smaller);
            //invPath.CloseFigure();

            // this is to simulage g.Clip, as it has the bounds-rectangle:
            region.Union(invPath.GetBounds());
            region.Intersect(invPath);

            Region saveRegion = g.Clip;

            g.Clip = region;
            g.DrawPath(pathPen, invPath);
            //g.FillPath (regionBrush, invPath);
            g.FillRegion(regionBrush, g.Clip);
            if (!region.IsVisible(rect3))
            {
                int x = 1;
            }
            //g.FillRegion (clipregionBrush, g.Clip);
            g.Transform = save;
            g.Clip      = saveRegion;
        }
示例#12
0
        public override void OnPaint(IRenderEventArgs e)
        {
            Graphics g = ((GdiSurface)e.Surface).Graphics;

            SD.Drawing2D.Matrix save = g.Transform;
            g.Transform = Camera.Matrix.ToGdi();

            Rectangle smaller = new Rectangle(start, new Size(50, 20));
            Rectangle bigger  = new Rectangle(start, new Size(55, 25));

            g.DrawRectangle(rectPen, smaller);
            g.DrawRectangle(rectPen, bigger);

            smaller.Inflate(-5, -5);
            bigger.Inflate(5, 5);
            Rectangle[] pathRects =
            {
                Rectangle.FromLTRB(bigger.Left,   bigger.Top,     bigger.Right, smaller.Top),
                Rectangle.FromLTRB(bigger.Left,   smaller.Bottom, bigger.Right, bigger.Bottom),
                Rectangle.FromLTRB(bigger.Left,   smaller.Top,    smaller.Left, smaller.Bottom),
                Rectangle.FromLTRB(smaller.Right, smaller.Top,    bigger.Right, smaller.Bottom)
            };

            Region clipRegion = new Region();

            clipRegion.MakeInfinite();
            clipRegion.Intersect(
                Rectangle.FromLTRB(bigger.Left, bigger.Top, bigger.Right, smaller.Top));
            clipRegion.Union(
                Rectangle.FromLTRB(bigger.Left, smaller.Bottom, bigger.Right, bigger.Bottom));
            clipRegion.Union(
                Rectangle.FromLTRB(bigger.Left, smaller.Top, smaller.Left, smaller.Bottom));
            clipRegion.Union(
                Rectangle.FromLTRB(smaller.Right, smaller.Top, bigger.Right, smaller.Bottom));


            bool       isVisible = false;
            RectangleF testRect  = Rectangle.Inflate(smaller, -1, -1);

            isVisible = clipRegion.IsVisible(testRect);
            if (isVisible)
            {
                clipRegion.MakeInfinite();
            }
            invPath.Reset();
            invPath.FillMode = FillMode.Alternate;
            invPath.AddRectangles(pathRects);
            g.DrawPath(pathPen, invPath);
            g.FillPath(regionBrush, invPath);
        }
示例#13
0
        public override void OnPaint(IRenderEventArgs e)
        {
            var surface = (ContextSurface)e.Surface;
            var ctx     = surface.Context;
            var matrix  = this.Camera.Matrix;

            ctx.Save();

            try {
                if (!matrix.IsIdentity)
                {
                    ctx.ModifyCTM(matrix);
                }
                this.Renderer.Render(this.Data, e);
            } finally {
                ctx.Restore();
            }
        }
示例#14
0
        public override void Render(IGraphScene <TItem, TEdge> data, IRenderEventArgs e)
        {
            var camera     = this.Camera();
            var clipBounds = camera.ToSource(e.Clipper.Bounds);

#if TraceRender
            Trace.WriteLine($"\t{nameof(Render)}.{nameof(clipBounds)}:\t{clipBounds}");
            //+"\toffset(g)"+new SizeS(g.Transform.OffsetX, g.Transform.OffsetY)
#endif

            var focused = data.Focused;
            var hovered = data.Hovered;

            var layout = this.Layout();
            ItemRenderer.Layout = this.Layout;

            foreach (var item in data.ElementsIn(clipBounds, ZOrder.EdgesFirst))
            {
                bool rendered = true;
                if (!item.Equals(focused) && !item.Equals(hovered))
                {
                    ItemRenderer.Render(item, e);

#if countVisuals
                    if (rendered)
                    {
                        iItems++;
                    }
#endif
                }
            }

            if (hovered != null && DrawingExtensions.Intersects(clipBounds, layout.GetShape(hovered).BoundsRect))
            {
                ItemRenderer.Render(hovered, e);
            }


            if (focused != null && layout.GetShape(focused) != null && DrawingExtensions.Intersects(clipBounds, layout.GetShape(focused).BoundsRect))
            {
                ItemRenderer.Render(focused, e);
            }
        }
示例#15
0
        public override void OnPaint(IRenderEventArgs e)
        {
            var g    = ((GdiSurface)e.Surface).Graphics;
            var save = g.Transform;

            g.Transform = new System.Drawing.Drawing2D.Matrix();
            System.Drawing.Drawing2D.GraphicsPath hullPath =
                new System.Drawing.Drawing2D.GraphicsPath();

            var layout = this.Layout();

            foreach (var visual in Data.Elements)
            {
                Point[] datahull = null;
                var     r        = Camera.FromSource(visual.Shape.BoundsRect);
                g.DrawRectangle(pen, r.ToGdi());

                if (Layout != null)
                {
                    datahull = layout.GetDataHull(visual, Camera.Matrix, 0, true);
                }
                //Point[] hull = visual.Shape.Hull(Transformer.Matrice,15, true);

                Point[] hull = null;
                if (visual.Shape is VectorShape && Layout != null)
                {
                }

                if (datahull != null)
                {
                    g.DrawPolygon(datahullpen, GDIConverter.Convert(datahull));
                }

                if (hull != null)
                {
                    g.DrawPolygon(hullpen, GDIConverter.Convert(hull));
                }
            }
            g.Transform = save;
        }
示例#16
0
        public override void OnPaint(IRenderEventArgs e)
        {
            var hull =
                //CommandsHull;
                //hull = ClipHull(e);
                GetHull(this.Data, Camera.Matrix, 5);

            Graphics g = ((GdiSurface)e.Surface).Graphics;

            System.Drawing.Drawing2D.Matrix save = g.Transform;
            g.Transform = new System.Drawing.Drawing2D.Matrix();

            if (oldHull != null && oldHull.Length > 2)
            {
                invPath.Reset();
                invPath.FillMode = FillMode.Alternate;

                invPath.AddPolygon(oldHull);
                g.DrawPath(backGroundPen, invPath);
                //g.FillPath (regionBrush, invPath);

                oldHull = null;
            }

            if (hull != null && hull.Length > 2)
            {
                invPath.Reset();
                invPath.FillMode = FillMode.Alternate;

                invPath.AddPolygon(hull);
                g.DrawPath(pathPen, invPath);
                //g.FillPath (regionBrush, invPath);

                g.Transform = save;
                oldHull     = hull;
            }
            g.Transform = save;
        }
示例#17
0
        public override void OnPaint(IRenderEventArgs e)
        {
            var image = this.Data;

            if (image != null && !hadError)
            {
                var ctx = ((ContextSurface)e.Surface).Context;
                ctx.Save();
                try {
                    ctx.ModifyCTM(this.Camera.Matrix);

                    var rc = Camera.ToSource(e.Clipper.Bounds);
                    rc = rc.Intersect(new Xwt.Rectangle(0, 0, Size.Width, Size.Height));
                    rc = rc.Inflate(new Size(1, 1));

                    ctx.DrawImage(image, rc, rc);
                } catch (Exception ex) {
                    ExceptionHandler.Catch(ex, MessageType.OK);
                    hadError = true;
                } finally {
                    ctx.Restore();
                }
            }
        }
示例#18
0
 public static PaintEventArgs Convert(IRenderEventArgs e)
 {
     return(new PaintEventArgs(
                ((GdiSurface)e.Surface).Graphics,
                e.Clipper.Bounds.ToGdi()));
 }
示例#19
0
文件: Layer.cs 项目: git-thinh/limada
 public abstract void OnPaint(IRenderEventArgs e);
示例#20
0
        public void OnPaintHullTest(IRenderEventArgs e)
        {
            var g    = ((GdiSurface)e.Surface).Graphics;
            var save = g.Transform;

            g.Transform = Camera.Matrix.ToGdi();

            var start    = new Point(200, 100);
            var size     = new Size(0, -100);
            var distance = new Size(30, 30);

            PaintWidenPolygon(g, start, size, 1);

            start += distance;
            size   = new Size(0, 100);
            PaintWidenPolygon(g, start, size, 2);

            start += distance;
            size   = new Size(100, 0);
            PaintWidenPolygon(g, start, size, 3);

            start += distance;
            size   = new Size(-100, 0);
            PaintWidenPolygon(g, start, size, 4);

            // second

            start += distance;
            size   = new Size(10, -100);
            PaintWidenPolygon(g, start, size, 5);

            start += distance;
            size   = new Size(10, 100);
            PaintWidenPolygon(g, start, size, 6);

            start += distance;
            size   = new Size(100, 10);
            PaintWidenPolygon(g, start, size, 7);

            start += distance;
            size   = new Size(-100, 10);
            PaintWidenPolygon(g, start, size, 8);

            // third

            start += distance;
            size   = new Size(-10, -100);
            PaintWidenPolygon(g, start, size, 9);

            start += distance;
            size   = new Size(-10, 100);
            PaintWidenPolygon(g, start, size, 10);

            start += distance;
            size   = new Size(100, -80);
            PaintWidenPolygon(g, start, size, 11);

            start += distance;
            size   = new Size(-100, -10);
            PaintWidenPolygon(g, start, size, 12);
            g.Transform = save;
        }
示例#21
0
 public abstract void Render(T data, IRenderEventArgs e);
示例#22
0
 public virtual void OnPaint(IRenderEventArgs e)
 {
     this.OnPaint(Converter.Convert(e));
 }
示例#23
0
 public void OnPaint(IRenderEventArgs e)
 {
     BackendRenderer.OnPaint(e);
 }
示例#24
0
 public override void OnPaint(IRenderEventArgs e)
 {
     this.Renderer.Render(this.Data, e);
 }