示例#1
0
 /// <summary> 清除整个绘图面并以指定背景色填充
 /// </summary>
 /// <param name="color">System.Drawing.Color 结构,它表示绘图面的背景色</param>
 public void Clear(Color color)
 {
     //this.DxRenderInfos.Clear();
     if (color == Color.Transparent)
     {
         this.target.RenderTarget.Clear(DxConvert.ToColor4(color));
         if (this.target is DUIWindowRenderTarget dUIWindowRenderTarget)
         {
             Control control = Control.FromHandle(dUIWindowRenderTarget.Handle);
             if (control != null)
             {
                 using (Graphics ownerGraphics = Graphics.FromHwnd(dUIWindowRenderTarget.Handle))
                     using (DUIImage image = new DUIImage(control.ClientSize.Width, control.ClientSize.Height))
                         using (Graphics targetGraphics = Graphics.FromImage(image))
                         {
                             IntPtr ownerDC  = ownerGraphics.GetHdc();
                             IntPtr targetDC = targetGraphics.GetHdc();
                             DirectUI.Win32.NativeMethods.BitBlt(targetDC, 0, 0, control.ClientSize.Width, control.ClientSize.Height, ownerDC, 0, 0, 13369376);
                             ownerGraphics.ReleaseHdc(ownerDC);
                             targetGraphics.ReleaseHdc(targetDC);
                             image.RenderTarget = this.target;
                             this.target.RenderTarget.DrawBitmap(image, DxConvert.ToRectF(0, 0, control.ClientSize.Width, control.ClientSize.Height), 1, SharpDX.Direct2D1.BitmapInterpolationMode.NearestNeighbor, DxConvert.ToRectF(0, 0, image.Width, image.Height));
                         }
             }
         }
     }
     else
     {
         this.target.RenderTarget.Clear(DxConvert.ToColor4(color));
     }
 }
示例#2
0
        public void FillPolygon(DUIBrush brush, PointF[] points)
        {
            bool closed = true;

            if (points == null)
            {
                return;
            }
            if (points.Length < 3)
            {
                return;
            }
            brush.RenderTarget = this.target;
            using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory))
                using (SharpDX.Direct2D1.GeometrySink geometrySink = pathGeometry.Open())
                {
                    geometrySink.SetFillMode(SharpDX.Direct2D1.FillMode.Alternate);
                    geometrySink.BeginFigure(DxConvert.ToVector2(points[0]), SharpDX.Direct2D1.FigureBegin.Filled);
                    for (int i = 1; i < points.Length; i++)
                    {
                        geometrySink.AddLine(DxConvert.ToVector2(points[i]));
                    }
                    geometrySink.EndFigure(closed ? SharpDX.Direct2D1.FigureEnd.Closed : SharpDX.Direct2D1.FigureEnd.Open);
                    geometrySink.Close();
                    this.target.RenderTarget.FillGeometry(pathGeometry, brush);
                }
        }
示例#3
0
 public void DrawBezier(DUIPen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
 {
     pen.RenderTarget = this.target;
     if (pen.IsDefaultStyleProperties)
     {
         using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory))
             using (SharpDX.Direct2D1.GeometrySink geometrySink = pathGeometry.Open())
             {
                 geometrySink.BeginFigure(DxConvert.ToVector2(x1, y1), SharpDX.Direct2D1.FigureBegin.Hollow);
                 geometrySink.AddBezier(new SharpDX.Direct2D1.BezierSegment()
                 {
                     Point1 = DxConvert.ToVector2(x2, y2), Point2 = DxConvert.ToVector2(x3, y3), Point3 = DxConvert.ToVector2(x4, y4)
                 });
                 geometrySink.EndFigure(SharpDX.Direct2D1.FigureEnd.Open);
                 geometrySink.Close();
                 this.target.RenderTarget.DrawGeometry(pathGeometry, pen, pen.Width);
             }
     }
     else
     {
         using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory))
             using (SharpDX.Direct2D1.GeometrySink geometrySink = pathGeometry.Open())
             {
                 geometrySink.BeginFigure(DxConvert.ToVector2(x1, y1), SharpDX.Direct2D1.FigureBegin.Hollow);
                 geometrySink.AddBezier(new SharpDX.Direct2D1.BezierSegment()
                 {
                     Point1 = DxConvert.ToVector2(x2, y2), Point2 = DxConvert.ToVector2(x3, y3), Point3 = DxConvert.ToVector2(x4, y4)
                 });
                 geometrySink.EndFigure(SharpDX.Direct2D1.FigureEnd.Open);
                 geometrySink.Close();
                 this.target.RenderTarget.DrawGeometry(pathGeometry, pen, pen.Width, pen);
             }
     }
 }
示例#4
0
 public SizeF MeasureString(string text, DUIFont font, float width, float height)
 {
     using (SharpDX.DirectWrite.TextLayout tl = DxConvert.ToTextLayout(font, text))
     {
         float w = tl.Metrics.WidthIncludingTrailingWhitespace;
         float h = tl.Metrics.Height;
         return(new SizeF(w, h));
     }
 }
示例#5
0
        public static SharpDX.Direct2D1.BitmapBrush ToBitmapBrush(DUIRenderTarget renderTarget, SharpDX.Direct2D1.Bitmap dxBitmap)
        {
            SharpDX.Direct2D1.BitmapBrush bb = new SharpDX.Direct2D1.BitmapBrush(renderTarget, dxBitmap);
            var extendMode = DxConvert.ToExtendMode(DUIExtendMode.Clamp);

            bb.ExtendModeX       = extendMode;
            bb.ExtendModeY       = extendMode;
            bb.InterpolationMode = SharpDX.Direct2D1.BitmapInterpolationMode.NearestNeighbor;
            return(bb);
        }
示例#6
0
 /// <summary> 加入一个图层
 /// </summary>
 /// <param name="width">图层宽度</param>
 /// <param name="height">图层深度</param>
 public void PushLayer(float x, float y, float width, float height)
 {
     this.target.RenderTarget.PushAxisAlignedClip(DxConvert.ToRectF(new RectangleF(x, y, width, height)), SharpDX.Direct2D1.AntialiasMode.PerPrimitive);
     //using (SharpDX.Direct2D1.Layer layer = new SharpDX.Direct2D1.Layer(this.target.RenderTarget))
     //{
     //    layerParameters.ContentBounds = DxConvert.ToRectF(new RectangleF(x, y, width, height));
     //    this.target.RenderTarget.PushLayer(ref layerParameters, layer);
     //}
     isPushLayer.Push(true);
 }
示例#7
0
 public void DrawRoundedRectangle(DUIPen pen, float x, float y, float width, float height, float radius)
 {
     pen.RenderTarget = this.target;
     if (pen.IsDefaultStyleProperties)
     {
         this.target.RenderTarget.DrawRoundedRectangle(DxConvert.ToRoundRectF(x, y, width, height, radius), pen, pen.Width);
     }
     else
     {
         this.target.RenderTarget.DrawRoundedRectangle(DxConvert.ToRoundRectF(x, y, width, height, radius), pen, pen.Width, pen);
     }
 }
示例#8
0
 public void DrawEllipse(DUIPen pen, float x, float y, float width, float height)
 {
     pen.RenderTarget = this.target;
     if (pen.IsDefaultStyleProperties)
     {
         this.target.RenderTarget.DrawEllipse(DxConvert.ToEllipse(new RectangleF(x, y, width, height)), pen, pen.Width);
     }
     else
     {
         this.target.RenderTarget.DrawEllipse(DxConvert.ToEllipse(new RectangleF(x, y, width, height)), pen, pen.Width, pen);
     }
 }
示例#9
0
        //public static SharpDX.Direct2D1.BitmapBrush ToBitmapBrush(DUIRenderTarget renderTarget, Bitmap bitmap)
        //{
        //    return new SharpDX.Direct2D1.BitmapBrush(renderTarget, ToBitmap(renderTarget, bitmap));
        //}
        public static SharpDX.Direct2D1.BitmapBrush ToBitmapBrush(DUIRenderTarget renderTarget, DUIBitmapBrush bitmapBrush)
        {
            bitmapBrush.Image.RenderTarget = renderTarget;
            SharpDX.Direct2D1.BitmapBrush bb = new SharpDX.Direct2D1.BitmapBrush(renderTarget, bitmapBrush.Image);
            var extendMode = DxConvert.ToExtendMode(bitmapBrush.ExtendMode);

            bb.ExtendModeX       = extendMode;
            bb.ExtendModeY       = extendMode;
            bb.InterpolationMode = SharpDX.Direct2D1.BitmapInterpolationMode.NearestNeighbor;
            bb.Opacity           = bitmapBrush.Opacity;
            return(bb);
        }
示例#10
0
 public void DrawString(string s, DUIFont font, DUIBrush brush, RectangleF layoutRectangle, StringFormat format)
 {
     brush.RenderTarget = this.target;
     try
     {
         this.target.RenderTarget.DrawText(s, font, DxConvert.ToRectF(new RectangleF(layoutRectangle.X, layoutRectangle.Y, float.MaxValue, 0)), brush);
     }
     catch (Exception ex)
     {
         Log.DUILog.GettingLog(ex);
         //这里报错率很高,但不知道为什么
     }
 }
示例#11
0
        public void DrawPolygon(DUIPen pen, PointF[] points)
        {
            bool closed = true;

            if (points == null)
            {
                return;
            }
            if (points.Length < (closed ? 3 : 2))
            {
                return;
            }
            pen.RenderTarget = this.target;
            if (pen.IsDefaultStyleProperties)
            {
                using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory))
                    using (SharpDX.Direct2D1.GeometrySink geometrySink = pathGeometry.Open())
                    {
                        geometrySink.BeginFigure(DxConvert.ToVector2(points[0]), SharpDX.Direct2D1.FigureBegin.Filled);
                        for (int i = 1; i < points.Length; i++)
                        {
                            geometrySink.AddLine(DxConvert.ToVector2(points[i]));
                        }
                        geometrySink.EndFigure(closed ? SharpDX.Direct2D1.FigureEnd.Closed : SharpDX.Direct2D1.FigureEnd.Open);
                        geometrySink.Close();
                        this.target.RenderTarget.DrawGeometry(pathGeometry, pen, pen.Width);
                    }
            }
            else
            {
                using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory))
                    using (SharpDX.Direct2D1.GeometrySink geometrySink = pathGeometry.Open())
                    {
                        geometrySink.BeginFigure(DxConvert.ToVector2(points[0]), SharpDX.Direct2D1.FigureBegin.Filled);
                        for (int i = 1; i < points.Length; i++)
                        {
                            geometrySink.AddLine(DxConvert.ToVector2(points[i]));
                        }
                        geometrySink.EndFigure(closed ? SharpDX.Direct2D1.FigureEnd.Closed : SharpDX.Direct2D1.FigureEnd.Open);
                        geometrySink.Close();
                        this.target.RenderTarget.DrawGeometry(pathGeometry, pen, pen.Width, pen);
                    }
            }
        }
示例#12
0
 public void DrawImage(DUIImage image, PointF[] polygon, GraphicsUnit srcUnit, float opacity)
 {
     image.RenderTarget = this.target;
     using (DirectUI.Common.DUIBitmapBrush dbs = new DirectUI.Common.DUIBitmapBrush(image, DUIExtendMode.Clamp, opacity))
         using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory))
             using (SharpDX.Direct2D1.GeometrySink gs1 = pathGeometry.Open())
             {
                 dbs.RenderTarget = this.target;
                 gs1.SetFillMode(SharpDX.Direct2D1.FillMode.Alternate);
                 gs1.BeginFigure(DxConvert.ToVector2(polygon[0]), SharpDX.Direct2D1.FigureBegin.Filled);
                 for (int i = 1; i < polygon.Length; i++)
                 {
                     gs1.AddLine(DxConvert.ToVector2(polygon[i]));
                 }
                 gs1.EndFigure(SharpDX.Direct2D1.FigureEnd.Closed);
                 gs1.Close();
                 this.target.RenderTarget.FillGeometry(pathGeometry, dbs);
             }
 }
示例#13
0
        public void DrawImage(DUIImage image, PointF[] destTriangle, PointF[] srcTriangle, GraphicsUnit srcUnit, float opacity)
        {
            PointF t1 = destTriangle[0];
            PointF t2 = destTriangle[1];
            PointF t3 = destTriangle[2];

            image.RenderTarget = this.target;
            using (DirectUI.Common.DUIBitmapBrush dbs = new DirectUI.Common.DUIBitmapBrush(image, DUIExtendMode.Clamp, opacity))
                using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory))
                    using (SharpDX.Direct2D1.GeometrySink gs1 = pathGeometry.Open())
                    {
                        dbs.RenderTarget = this.target;
                        gs1.SetFillMode(SharpDX.Direct2D1.FillMode.Alternate);
                        gs1.BeginFigure(DxConvert.ToVector2(t1), SharpDX.Direct2D1.FigureBegin.Filled);
                        gs1.AddLine(DxConvert.ToVector2(t2));
                        gs1.AddLine(DxConvert.ToVector2(t3));
                        gs1.EndFigure(SharpDX.Direct2D1.FigureEnd.Closed);
                        gs1.Close();
                        dbs.Transform = MatrixTools.ThreePointsAffine(srcTriangle, destTriangle);
                        this.target.RenderTarget.FillGeometry(pathGeometry, dbs);
                    }
        }
示例#14
0
 public void FillEllipse(DUIBrush brush, float x, float y, float width, float height)
 {
     brush.RenderTarget = this.target;
     this.target.RenderTarget.FillEllipse(DxConvert.ToEllipse(new RectangleF(x, y, width, height)), brush);
 }
示例#15
0
 public void DrawImage(DUIImage image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, float opacity)
 {
     image.RenderTarget = this.target;
     this.target.RenderTarget.DrawBitmap(image, DxConvert.ToRectF(destRect), opacity, SharpDX.Direct2D1.BitmapInterpolationMode.NearestNeighbor, DxConvert.ToRectF(srcRect));
 }
示例#16
0
 /// <summary> 基于指定的 System.Drawing.RectangleF 结构初始化一个新的 DUIRegion。
 /// </summary>
 /// <param name="rect">一个 System.Drawing.RectangleF 结构,用于定义新 DUIRegion 的内部</param>
 public DUIRegion(RectangleF rect)
 {
     this.region = new Region(rect);
     this.actions.Add((dxGeometry, geometrySink) =>
     {
         SharpDX.Direct2D1.RectangleGeometry rectangleGeometry = new SharpDX.Direct2D1.RectangleGeometry(RenderTarget.RenderTarget.Factory, DxConvert.ToRectF(rect));
         this.rectangleGeometry.Combine(rectangleGeometry, SharpDX.Direct2D1.CombineMode.Union, geometrySink);
     });
 }
示例#17
0
 /// <summary> 将此 DUIRegion 更新为其自身与指定的 System.Drawing.Rectangle 结构的交集。
 /// </summary>
 /// <param name="rect">要与此 DUIRegion 相交的 System.Drawing.Rectangle 结构。</param>
 public void Intersect(Rectangle rect)
 {
     this.region.Intersect(rect);
     this.actions.Add((dxGeometry, geometrySink) =>
     {
         SharpDX.Direct2D1.RectangleGeometry rectangleGeometry = new SharpDX.Direct2D1.RectangleGeometry(RenderTarget.RenderTarget.Factory, DxConvert.ToRectF(rect));
         this.rectangleGeometry.Combine(rectangleGeometry, SharpDX.Direct2D1.CombineMode.Intersect, geometrySink);
     });
 }
示例#18
0
 public DirectUI.Common.DUIGraphicsState Save()
 {
     return(DxConvert.ToDUIGraphicsState(this.graphics.Save()));
 }
示例#19
0
 public void FillRoundedRectangle(DUIBrush brush, float x, float y, float width, float height, float radius)
 {
     brush.RenderTarget = this.target;
     this.target.RenderTarget.FillRoundedRectangle(DxConvert.ToRoundRectF(x, y, width, height, radius), brush);
 }