示例#1
0
 public static void PlayPitch(McPitch pitch)
 {
     if (pitch.Volume >= 0.001f)
     {
         McNotePack         parentNotePack = pitch.ParentNotePack;
         MusicCanvasControl canvas         = parentNotePack.Canvas;
         McMeasure          parentMeasure  = parentNotePack.ParentMeasure;
         float num  = ((parentMeasure.TemporaryInfo.RelativeX + McNotation.Margin.Left) + McRegularTrack.Margin.Left) - canvas.ScrollXSmooth;
         float num2 = ((((McRegularTrack.Margin.Bottom + McRegularTrack.Margin.Top) + McMeasure.Height) * parentMeasure.ParentRegularTrack.Index) + McNotation.Margin.Top) + McRegularTrack.Margin.Top;
         float x    = (num + parentNotePack.TemporaryInfo.RelativeXSmooth) + 8f;
         if (parentNotePack.Staccato)
         {
             canvas.PlaySound(parentMeasure.InstrumentType, pitch.AlterantValue, pitch.Volume, (long)parentNotePack.TemporaryInfo.PlayingDurationTimeMs, 0.03f);
         }
         else
         {
             canvas.PlaySound(parentMeasure.InstrumentType, pitch.AlterantValue, pitch.Volume, (long)parentNotePack.TemporaryInfo.PlayingDurationTimeMs, 0.03f);
         }
         int   num4 = parentNotePack.IsRest ? (((parentMeasure.ClefType == McMeasure.ClefTypes.L2G) ? 0x2c : 0x17) + 5) : pitch.Value;
         float measureLineRelativeY = pitch.MeasureLineRelativeY;
         float num6  = 3.141593f * (((float)num4) / 88f);
         Color color = parentNotePack.IsRest ? Color.FromArgb(0x80, Color.White) : Color.FromArgb(0xff, (int)(((Math.Cos((double)num6) + 1.0) / 2.0) * 255.0), (int)(((Math.Sin((double)num6) + 1.0) / 2.0) * 255.0), (int)(((Math.Cos((double)num6) + 1.0) / 2.0) * 255.0));
         MusicCanvasControl.RippleAniManager.Append(x, num2 + measureLineRelativeY, color, 10 + ((int)(30f * parentNotePack.Volume)), 0.5f, parentNotePack);
     }
 }
 public static void DrawBitmap(this MusicCanvasControl canvas, SharpDX.Direct2D1.Bitmap bitmap, RawVector2 pos, Size2F?size, float opacity = 1f, BitmapInterpolationMode interpolationMode = 0)
 {
     if (!size.HasValue)
     {
         size = new Size2F?(bitmap.Size);
     }
     canvas.RenderTarget2D.DrawBitmap(bitmap, new RawRectangleF(pos.X, pos.Y, pos.X + size.Value.Width, pos.Y + size.Value.Height), opacity, interpolationMode);
 }
        public static void DrawLine(this MusicCanvasControl canvas, RawVector2 p1, RawVector2 p2, Color color, float strokeWidth)
        {
            RenderTarget    renderTarget = canvas.RenderTarget2D;
            SolidColorBrush brush        = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));

            renderTarget.DrawLine(p1, p2, brush, strokeWidth);
            brush.Dispose();
        }
        public static void FillEllipse(this MusicCanvasControl canvas, Ellipse ellipse, Color color)
        {
            RenderTarget    renderTarget = canvas.RenderTarget2D;
            SolidColorBrush brush        = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));

            renderTarget.FillEllipse(ellipse, brush);
            brush.Dispose();
        }
        public static void FillRectangle(this MusicCanvasControl canvas, RawRectangleF rectF, Color color)
        {
            RenderTarget    renderTarget = canvas.RenderTarget2D;
            SolidColorBrush brush        = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));

            renderTarget.FillRectangle(rectF, brush);
            brush.Dispose();
        }
        public static void DrawEllipse(this MusicCanvasControl canvas, Ellipse ellipse, Color color, float strokeWidth)
        {
            RenderTarget    renderTarget = canvas.RenderTarget2D;
            SolidColorBrush brush        = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));

            renderTarget.DrawEllipse(ellipse, brush, strokeWidth);
            brush.Dispose();
        }
        public static void DrawSimpleTip(this MusicCanvasControl canvas, string text, RawVector2?pos = new RawVector2?())
        {
            if (MusicCanvasControl.EnableControlTip && canvas.IsAltKeyPressed())
            {
                Trimming     trimming;
                InlineObject obj2;
                if (!pos.HasValue)
                {
                    Point point = canvas.PointToClient(Control.MousePosition);
                    pos = new RawVector2((float)(point.X + 0x18), (float)(point.Y - 0x18));
                }
                RenderTarget renderTarget = canvas.RenderTarget2D;
                SharpDX.DirectWrite.Factory factoryDWrite = canvas.FactoryDWrite;
                TextFormat textFormat = new TextFormat(factoryDWrite, "微软雅黑", FontWeight.Bold, SharpDX.DirectWrite.FontStyle.Normal, FontStretch.Normal, 12f);
                textFormat.GetTrimming(out trimming, out obj2);
                trimming.Granularity = TrimmingGranularity.Word;
                textFormat.SetTrimming(trimming, obj2);
                textFormat.TextAlignment      = TextAlignment.Center;
                textFormat.ParagraphAlignment = ParagraphAlignment.Center;
                TextLayout layout = new TextLayout(factoryDWrite, text, textFormat, 1920f, 1080f);
                textFormat.TextAlignment      = TextAlignment.Leading;
                textFormat.ParagraphAlignment = ParagraphAlignment.Far;
                TextLayout textLayout = new TextLayout(factoryDWrite, text, textFormat, layout.Metrics.Width, layout.Metrics.Height);
                layout.Dispose();
                RawVector2 origin = new RawVector2(pos.Value.X, pos.Value.Y);
                switch (textFormat.TextAlignment)
                {
                case TextAlignment.Trailing:
                    origin.X = pos.Value.X - textLayout.Metrics.Width;
                    break;

                case TextAlignment.Center:
                case TextAlignment.Justified:
                    origin.X = pos.Value.X - (textLayout.Metrics.Width / 2f);
                    break;
                }
                switch (textFormat.ParagraphAlignment)
                {
                case ParagraphAlignment.Far:
                    origin.Y = pos.Value.Y - textLayout.Metrics.Height;
                    break;

                case ParagraphAlignment.Center:
                    origin.Y = pos.Value.Y - (textLayout.Metrics.Height / 2f);
                    break;
                }
                origin.X += 4f;
                origin.Y += 4f;
                textFormat.Dispose();
                RawRectangleF rectF = new RawRectangleF(pos.Value.X, pos.Value.Y - textLayout.Metrics.Height, (pos.Value.X + textLayout.Metrics.Width) + 8f, pos.Value.Y + 8f);
                canvas.FillRoundedRectangle(rectF, 4f, Color.FromArgb(150, 0x1f, 0x1f, 0x22));
                canvas.DrawRoundedRectangle(rectF, 4f, Color.FromArgb(150, 0xe9, 0xe9, 0xe9), 2f);
                SolidColorBrush defaultForegroundBrush = new SolidColorBrush(renderTarget, Color.FromArgb(250, Color.DarkGray).ToRawColor4(1f));
                renderTarget.DrawTextLayout(origin, textLayout, defaultForegroundBrush, DrawTextOptions.Clip);
                defaultForegroundBrush.Dispose();
                textLayout.Dispose();
            }
        }
示例#8
0
 public McNotation(MusicCanvasControl canvas)
 {
     this._canvas       = canvas;
     this.TemporaryInfo = new NtTemporaryInfo(this);
     for (int i = 0; i < 3; i++)
     {
         this._regularTrackList.Add(new McRegularTrack(this));
     }
 }
        public static void FillCircle(this MusicCanvasControl canvas, RawVector2 pos, float radius, Color color)
        {
            RenderTarget    renderTarget = canvas.RenderTarget2D;
            SolidColorBrush brush        = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));
            Ellipse         ellipse      = new Ellipse(new RawVector2(pos.X, pos.Y), radius, radius);

            renderTarget.FillEllipse(ellipse, brush);
            brush.Dispose();
        }
        public static void DrawBezierLine(this MusicCanvasControl canvas, RawVector2 pStart, RawVector2 pEnd, float heightDiff, float mpRatio, Color color, float strokeWidth, StrokeStyle strokeStyle, bool disposeStrokeStyle = true)
        {
            mpRatio = mpRatio.Clamp(0f, 1f);
            float      num     = pEnd.X - pStart.X;
            float      num2    = pEnd.Y - pStart.Y;
            RawVector2 vector  = new RawVector2(pStart.X + (num * mpRatio), (pStart.Y + (num2 * mpRatio)) + heightDiff);
            RawVector2 vector2 = new RawVector2(pStart.X + (num * (1f - mpRatio)), (pStart.Y + (num2 * (1f - mpRatio))) + heightDiff);

            canvas.DrawBezierLine(pStart, vector, vector2, pEnd, color, strokeWidth, strokeStyle, disposeStrokeStyle);
        }
        public static void DrawLine(this MusicCanvasControl canvas, RawVector2 p1, RawVector2 p2, Color color, float strokeWidth, StrokeStyle strokeStyle, bool disposeStrokeStyle = true)
        {
            RenderTarget    renderTarget = canvas.RenderTarget2D;
            SolidColorBrush brush        = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));

            renderTarget.DrawLine(p1, p2, brush, strokeWidth, strokeStyle);
            brush.Dispose();
            if (disposeStrokeStyle && (strokeStyle != null))
            {
                strokeStyle.Dispose();
            }
        }
        public static void FillRoundedRectangle(this MusicCanvasControl canvas, RawRectangleF rectF, float radius, Color color)
        {
            RenderTarget     renderTarget = canvas.RenderTarget2D;
            SolidColorBrush  brush        = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));
            RoundedRectangle roundedRect  = new RoundedRectangle {
                Rect    = rectF,
                RadiusX = radius,
                RadiusY = radius
            };

            renderTarget.FillRoundedRectangle(roundedRect, brush);
            brush.Dispose();
        }
        public static void DrawTextLayout(this MusicCanvasControl canvas, string text, RawVector2 pos, string fontFamilyName, float fontSize, Color color, TextAlignment textAlignment, ParagraphAlignment paragraphAlignment, SharpDX.DirectWrite.FontStyle fontStyle = 0, FontWeight fontWeight = 700)
        {
            Trimming     trimming;
            InlineObject obj2;
            RenderTarget renderTarget = canvas.RenderTarget2D;

            SharpDX.DirectWrite.Factory factoryDWrite = canvas.FactoryDWrite;
            TextFormat textFormat = new TextFormat(factoryDWrite, fontFamilyName, fontWeight, fontStyle, FontStretch.Normal, fontSize);

            textFormat.GetTrimming(out trimming, out obj2);
            trimming.Granularity = TrimmingGranularity.Word;
            textFormat.SetTrimming(trimming, obj2);
            textFormat.TextAlignment      = TextAlignment.Center;
            textFormat.ParagraphAlignment = ParagraphAlignment.Center;
            TextLayout layout = new TextLayout(factoryDWrite, text, textFormat, 1920f, 1080f);

            textFormat.TextAlignment      = textAlignment;
            textFormat.ParagraphAlignment = paragraphAlignment;
            TextLayout textLayout = new TextLayout(factoryDWrite, text, textFormat, layout.Metrics.Width, layout.Metrics.Height);

            layout.Dispose();
            textFormat.Dispose();
            switch (textAlignment)
            {
            case TextAlignment.Trailing:
                pos.X -= textLayout.Metrics.Width;
                break;

            case TextAlignment.Center:
            case TextAlignment.Justified:
                pos.X -= textLayout.Metrics.Width / 2f;
                break;
            }
            switch (paragraphAlignment)
            {
            case ParagraphAlignment.Far:
                pos.Y -= textLayout.Metrics.Height;
                break;

            case ParagraphAlignment.Center:
                pos.Y -= textLayout.Metrics.Height / 2f;
                break;
            }
            SolidColorBrush defaultForegroundBrush = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));

            renderTarget.DrawTextLayout(pos, textLayout, defaultForegroundBrush, DrawTextOptions.Clip);
            defaultForegroundBrush.Dispose();
            textLayout.Dispose();
        }
        public static void DrawRoundedRectangle(this MusicCanvasControl canvas, RawRectangleF rectF, float radius, Color color, float strokeWidth, StrokeStyle strokeStyle, bool disposeStrokeStyle = true)
        {
            RenderTarget     renderTarget = canvas.RenderTarget2D;
            SolidColorBrush  brush        = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));
            RoundedRectangle roundedRect  = new RoundedRectangle {
                Rect    = rectF,
                RadiusX = radius,
                RadiusY = radius
            };

            renderTarget.DrawRoundedRectangle(roundedRect, brush, strokeWidth, strokeStyle);
            brush.Dispose();
            if (disposeStrokeStyle && (strokeStyle != null))
            {
                strokeStyle.Dispose();
            }
        }
 public static SharpDX.Direct2D1.Bitmap LoadBitmapFromFileName(this MusicCanvasControl canvas, string filename)
 {
     if (File.Exists(filename))
     {
         try
         {
             System.Drawing.Bitmap bitmap2;
             RenderTarget          renderTarget = canvas.RenderTarget2D;
             System.Drawing.Bitmap image        = new System.Drawing.Bitmap(filename);
             if (image.PixelFormat != System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
             {
                 bitmap2 = new System.Drawing.Bitmap(image.Width, image.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
                 using (Graphics graphics = Graphics.FromImage(bitmap2))
                 {
                     graphics.DrawImage(image, 0, 0, image.Width, image.Height);
                 }
             }
             else
             {
                 bitmap2 = image;
             }
             BitmapData bitmapdata  = bitmap2.LockBits(new Rectangle(0, 0, bitmap2.Width, bitmap2.Height), ImageLockMode.ReadOnly, bitmap2.PixelFormat);
             int        length      = bitmapdata.Stride * bitmap2.Height;
             byte[]     destination = new byte[length];
             Marshal.Copy(bitmapdata.Scan0, destination, 0, length);
             bitmap2.UnlockBits(bitmapdata);
             SharpDX.Direct2D1.PixelFormat pixelFormat = new SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.B8G8R8A8_UNorm, SharpDX.Direct2D1.AlphaMode.Premultiplied);
             BitmapProperties         bitmapProperties = new BitmapProperties(pixelFormat, bitmap2.HorizontalResolution, bitmap2.VerticalResolution);
             SharpDX.Direct2D1.Bitmap bitmap3          = new SharpDX.Direct2D1.Bitmap(renderTarget, new Size2(bitmap2.Width, bitmap2.Height), bitmapProperties);
             bitmap3.CopyFromMemory(destination, bitmapdata.Stride);
             bitmap2.Dispose();
             image.Dispose();
             return(bitmap3);
         }
         catch (Exception exception)
         {
             Console.WriteLine(exception.Message);
         }
     }
     return(null);
 }
        public static void DrawBezierLine(this MusicCanvasControl canvas, RawVector2 pStart, RawVector2 pM1, RawVector2 pM2, RawVector2 pEnd, Color color, float strokeWidth, StrokeStyle strokeStyle, bool disposeStrokeStyle = true)
        {
            PointF[]     pathPoints;
            RenderTarget renderTarget = canvas.RenderTarget2D;

            using (GraphicsPath path = new GraphicsPath())
            {
                path.AddBezier(pStart.X, pStart.Y, pM1.X, pM1.Y, pM2.X, pM2.Y, pEnd.X, pEnd.Y);
                path.Flatten();
                pathPoints = path.PathPoints;
                path.Dispose();
            }
            PathGeometry geometry = new PathGeometry(renderTarget.Factory);

            if (pathPoints.Length > 1)
            {
                GeometrySink sink = geometry.Open();
                sink.SetSegmentFlags(PathSegment.ForceRoundLineJoin);
                sink.BeginFigure(new RawVector2(pathPoints[0].X, pathPoints[0].Y), FigureBegin.Filled);
                for (int i = 1; i < pathPoints.Length; i++)
                {
                    sink.AddLine(new RawVector2(pathPoints[i].X, pathPoints[i].Y));
                }
                sink.EndFigure(FigureEnd.Open);
                sink.Close();
                sink.Dispose();
            }
            SolidColorBrush brush = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));

            renderTarget.DrawGeometry(geometry, brush, strokeWidth, strokeStyle);
            brush.Dispose();
            geometry.Dispose();
            if (disposeStrokeStyle && (strokeStyle != null))
            {
                strokeStyle.Dispose();
            }
        }
 public static bool IsShiftKeyPressed(this MusicCanvasControl canvas) =>
 ((Control.ModifierKeys & Keys.Shift) == Keys.Shift);
 public static void DrawBitmap(this MusicCanvasControl canvas, SharpDX.Direct2D1.Bitmap bitmap, RawVector2 pos, float opacity)
 {
     canvas.DrawBitmap(bitmap, pos, null, opacity, BitmapInterpolationMode.NearestNeighbor);
 }
 public static bool IsMouseMiddleKeyPressed(this MusicCanvasControl canvas) =>
 ((Control.MouseButtons & MouseButtons.Middle) == MouseButtons.Middle);
 public static bool IsMouseRightKeyPressed(this MusicCanvasControl canvas) =>
 ((Control.MouseButtons & MouseButtons.Right) == MouseButtons.Right);
 public static bool IsCtrlKeyPressed(this MusicCanvasControl canvas) =>
 ((Control.ModifierKeys & Keys.Control) == Keys.Control);
 public static void FillSector(this MusicCanvasControl canvas, RawVector2 pos, float radius, Color color, float angleStart, float angleEnd)
 {
     canvas.RenderTarget2D.FillSector(pos, radius, color, angleStart, angleEnd);
 }
 public static void DrawSector(this MusicCanvasControl canvas, RawVector2 pos, float radius, Color color, float angleStart, float angleEnd, float strokeWidth = 1f, bool arc = false)
 {
     canvas.RenderTarget2D.DrawSector(pos, radius, color, angleStart, angleEnd, strokeWidth, arc);
 }
 public static void DrawBezierLine(this MusicCanvasControl canvas, RawVector2 pStart, RawVector2 pEnd, float heightDiff, float mpRatio, Color color)
 {
     canvas.DrawBezierLine(pStart, pEnd, heightDiff, mpRatio, color, 1f, null, false);
 }
 public static void DrawTextLayout(this MusicCanvasControl canvas, string text, RawVector2 pos, string fontFamilyName, float fontSize, Color color, TextAlignment textAlignment, SharpDX.DirectWrite.FontStyle fontStyle = 0)
 {
     canvas.DrawTextLayout(text, pos, fontFamilyName, fontSize, color, textAlignment, ParagraphAlignment.Near, fontStyle, FontWeight.Bold);
 }