Beispiel #1
0
        public AlphaTabControl()
        {
            SetStyle(ControlStyles.UserPaint, true);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            SetStyle(ControlStyles.ContainerControl, true);
            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            SetStyle(ControlStyles.ResizeRedraw, true);

            var settings = Settings.Defaults;

            settings.Engine      = "gdi";
            Settings             = settings;
            _renderer            = new ScoreRenderer(settings, this);
            _renderer.PreRender += () =>
            {
                lock (this)
                {
                    _images = new List <Image>();
                }
            };
            _renderer.PartialRenderFinished += result =>
            {
                lock (this)
                {
                    BeginInvoke(new Action(() =>
                    {
                        AddPartialResult(result);
                    }));
                }
            };
            _renderer.RenderFinished += OnRenderFinished;
        }
Beispiel #2
0
        public AlphaTabControl()
        {
            _layoutPanel = new AlphaTabLayoutPanel();
            AutoScroll   = true;
            Controls.Add(_layoutPanel);

            var settings = Settings.Defaults;

            settings.Engine = "gdi";
            _scale          = settings.Scale;
            _scoreWidth     = settings.Width;
            _layoutMode     = settings.Layout.Mode;
            _stretchForce   = settings.StretchForce;
            _stavesMode     = settings.Staves.Id;
            _renderEngine   = settings.Engine;

            _renderer            = new ScoreRenderer(settings);
            _renderer.PreRender += result =>
            {
                BeginInvoke(new Action(() =>
                {
                    _layoutPanel.SuspendLayout();
                    while (_layoutPanel.HasChildren)
                    {
                        var child = _layoutPanel.Controls[0] as PictureBox;
                        if (child != null)
                        {
                            _layoutPanel.Controls.Remove(child);
                            child.Image.Dispose();
                        }
                    }
                    _layoutPanel.ResumeLayout(true);
                    GC.Collect();

                    AddPartialResult(result);
                }));
            };
            _renderer.PartialRenderFinished += result =>
            {
                BeginInvoke(new Action(() =>
                {
                    AddPartialResult(result);
                }));
            };
            _renderer.RenderFinished += result =>
            {
                BeginInvoke(new Action(() =>
                {
                    _initialRenderCompleted = true;
                    _isRendering            = 0;
                    AddPartialResult(result);
                    OnRenderFinished();
                    if (_redrawPending)
                    {
                        ResizeTrack(RenderWidth);
                    }
                    GC.Collect();
                }));
            };
        }
Beispiel #3
0
        public void HamonicsRenderingText_Issue79()
        {
            var tex   = @":8 3.3{nh} 3.3{ah} 3.3{th} 3.3{ph} 3.3{sh}";
            var score = ParseTex(tex);

            var settings = Settings.Defaults;

            settings.Engine = "svg";
            settings.Staves = new FastList <StaveSettings>
            {
                new StaveSettings("harmonics")
            };

            var renderer = new ScoreRenderer(settings, null);
            var svg      = "";

            renderer.PartialRenderFinished += r =>
            {
                svg += r.RenderResult.ToString();
            };
            renderer.Render(score.Tracks[0]);

            var regexTemplate = @"<text[^>]+>\s*{0}\s*</text>";

            Assert.IsTrue(Regex.IsMatch(svg, string.Format(regexTemplate, HarmonicsEffectInfo.HarmonicToString(HarmonicType.Natural))));
            Assert.IsTrue(Regex.IsMatch(svg, string.Format(regexTemplate, HarmonicsEffectInfo.HarmonicToString(HarmonicType.Artificial))));
            Assert.IsTrue(Regex.IsMatch(svg, string.Format(regexTemplate, HarmonicsEffectInfo.HarmonicToString(HarmonicType.Tap))));
            Assert.IsTrue(Regex.IsMatch(svg, string.Format(regexTemplate, HarmonicsEffectInfo.HarmonicToString(HarmonicType.Pinch))));
            Assert.IsTrue(Regex.IsMatch(svg, string.Format(regexTemplate, HarmonicsEffectInfo.HarmonicToString(HarmonicType.Semi))));
        }
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("Usage AlphaTab.ScoreDump.exe Path");
                return;
            }

            // load score
            Score score = ScoreLoader.loadScore(args[0]);

            // render score with svg engine
            Settings settings = Settings.defaults();

            settings.engine = "gdi";
            ScoreRenderer renderer = new ScoreRenderer(settings, null);

            // iterate tracks
            for (int i = 0; i < score.tracks.length; i++)
            {
                Track track = (Track)score.tracks[i];

                // render track
                Console.WriteLine("Rendering track {0} - {1}", i + 1, track.name);
                renderer.render(track);

                // write png
                FileInfo info = new FileInfo(args[0]);
                string   path = Path.Combine(info.DirectoryName, Path.GetFileNameWithoutExtension(info.Name) + "-" + i + ".png");
                using (Bitmap bmp = ((GdiCanvas)renderer.canvas).getImage())
                {
                    bmp.Save(path, ImageFormat.Png);
                }
            }
        }
        public void HamonicsRenderingText_Issue79()
        {
            var tex   = @":8 3.3{nh} 3.3{ah} 3.3{th} 3.3{ph} 3.3{sh}";
            var score = ParseTex(tex);

            Environment.StaveProfiles["harmonics"] = new BarRendererFactory[]
            {
                new EffectBarRendererFactory("harmonics", new IEffectBarRendererInfo[] { new HarmonicsEffectInfo() }),
            };


            var settings = Settings.Defaults;

            settings.Engine = "svg";
            settings.Staves = new StaveSettings("harmonics");

            var renderer = new ScoreRenderer(settings);
            var svg      = "";

            renderer.PartialRenderFinished += r =>
            {
                svg += r.RenderResult.ToString();
            };
            renderer.Render(score, new[] { 0 });

            var regexTemplate = @"<text[^>]+>\s*{0}\s*</text>";

            Assert.IsTrue(Regex.IsMatch(svg, string.Format(regexTemplate, HarmonicsEffectInfo.HarmonicToString(HarmonicType.Natural))));
            Assert.IsTrue(Regex.IsMatch(svg, string.Format(regexTemplate, HarmonicsEffectInfo.HarmonicToString(HarmonicType.Artificial))));
            Assert.IsTrue(Regex.IsMatch(svg, string.Format(regexTemplate, HarmonicsEffectInfo.HarmonicToString(HarmonicType.Tap))));
            Assert.IsTrue(Regex.IsMatch(svg, string.Format(regexTemplate, HarmonicsEffectInfo.HarmonicToString(HarmonicType.Pinch))));
            Assert.IsTrue(Regex.IsMatch(svg, string.Format(regexTemplate, HarmonicsEffectInfo.HarmonicToString(HarmonicType.Semi))));
        }
Beispiel #6
0
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("Usage AlphaTab.ScoreDump.exe Path");
                return;
            }

            // load score
            var score = ScoreLoader.LoadScoreFromBytes(File.ReadAllBytes(args[0]));

            // render score with svg engine and desired rendering width
            var settings = Settings.Defaults;

            settings.Engine = "gdi";
            settings.Width  = 970;
            var renderer = new ScoreRenderer(settings);

            // iterate tracks
            for (int i = 0, j = score.Tracks.Count; i < j; i++)
            {
                var track = score.Tracks[i];

                // render track
                Console.WriteLine("Rendering track {0} - {1}", i + 1, track.Name);
                var images      = new List <Image>();
                var totalWidth  = 0;
                var totalHeight = 0;
                renderer.PartialRenderFinished += r =>
                {
                    images.Add((Image)r.RenderResult);
                };
                renderer.RenderFinished += r =>
                {
                    totalWidth  = (int)r.TotalWidth;
                    totalHeight = (int)r.TotalHeight;
                };
                renderer.Render(track);

                // write png
                var info = new FileInfo(args[0]);
                var path = Path.Combine(info.DirectoryName, Path.GetFileNameWithoutExtension(info.Name) + "-" + i + ".png");

                using (var bmp = new Bitmap(totalWidth, totalHeight))
                {
                    int y = 0;
                    using (var g = Graphics.FromImage(bmp))
                    {
                        foreach (var image in images)
                        {
                            g.DrawImage(image, new Rectangle(0, y, image.Width, image.Height),
                                        new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
                            y += image.Height;
                        }
                    }
                    bmp.Save(path, ImageFormat.Png);
                }
            }
        }
Beispiel #7
0
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("Usage AlphaTab.ScoreDump.exe Path");
                return;
            }

            // we need to use english culture to have correct string variants of floating points (dot as decimal separator)
            Thread.CurrentThread.CurrentCulture   = new CultureInfo("en-us");
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");

            // load score
            Score score = ScoreLoader.LoadScore(args[0]);

            // render score with svg engine
            Settings settings = Settings.Defaults;

            settings.Engine = "svg";
            ScoreRenderer renderer = new ScoreRenderer(settings, null);

            // get iterate tracks
            for (int i = 0; i < score.Tracks.Count; i++)
            {
                Track track = score.Tracks[i];
                // render track
                Console.WriteLine("Rendering track {0} - {1}", i + 1, track.Name);
                var totalWidth  = 0;
                var totalHeight = 0;
                var merged      = XDocument.Parse("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"1px\" height=\"1px\"></svg>");
                var currentY    = 0f;
                renderer.PartialRenderFinished += r =>
                {
                    var subSvg  = XDocument.Parse(r.RenderResult.ToString());
                    var subRoot = subSvg.Root;
                    subRoot.SetAttributeValue("x", "0px");
                    subRoot.SetAttributeValue("y", ((int)currentY) + "px");
                    merged.Root.Add(subRoot);
                    currentY += r.Height;
                };
                renderer.RenderFinished += r =>
                {
                    totalWidth  = (int)r.TotalWidth;
                    totalHeight = (int)r.TotalHeight;
                };
                renderer.Render(track);

                merged.Root.Attribute("width").Value  = totalWidth + "px";
                merged.Root.Attribute("height").Value = totalHeight + "px";


                string svg = merged.ToString();

                FileInfo info = new FileInfo(args[0]);
                string   path = Path.Combine(info.DirectoryName, Path.GetFileNameWithoutExtension(info.Name) + "-" + i + ".svg");
                File.WriteAllText(path, svg);
            }
        }
        public void BendRendering_Issue79()
        {
            var tex   = @":4 15.6{b(0 4)} 18.6{b(0 6)} 17.6{b(0 8)} 16.6{b(0 3 0)} | 15.6{b(0 8 4)} 14.6{b(4 4)} 13.6{b(4 6)} 14.6{b(4 0)}";
            var score = ParseTex(tex);

            Environment.StaveProfiles["tabOnly"] = new BarRendererFactory[]
            {
                new TabBarRendererFactory(false, false, false),
            };

            var settings = Settings.Defaults;

            settings.Engine      = "svg";
            settings.Layout.Mode = "horizontal";
            settings.Staves      = new StaveSettings("tabOnly");

            var renderer = new ScoreRenderer(settings);
            var partials = new FastList <string>();

            renderer.Error += (o, e) =>
            {
                Assert.Fail(e.Message);
            };
            renderer.PartialRenderFinished += r =>
            {
                partials.Add(r.RenderResult.ToString());
            };
            renderer.Render(score, new[] { 0 });

            var tab = new XmlDocument(partials[0]);

            var texts = tab.GetElementsByTagName("text", true);

            var expectedTexts = new[]
            {
                Platform.Platform.StringFromCharCode((int)MusicFontSymbol.ClefTab), // clef

                "1",                                                                // bar number

                "15", "full",
                "18", "1½",
                "17", "2",
                "16", "¾",

                "2", // bar number

                "15", "2", "full",
                "14", "full",
                "13", "full", "1½",
                "14", "full"
            };

            for (int i = 0; i < expectedTexts.Length; i++)
            {
                var text = texts[i].InnerText.Trim();
                Assert.AreEqual(expectedTexts[i], text, "Mismatch at index {0}", i);
            }
        }
        public AlphaTabGdi()
        {
            var settings = Settings.defaults();

            settings.engine = "gdi";
            Settings        = settings;
            _renderer       = new ScoreRenderer(settings, this);
            _renderer.addRenderFinishedListener(new ActionFunction(OnRenderFinished));
        }
Beispiel #10
0
        public void DrawMainMenu()
        {
            // Set "cursor" position on menu.
            Vector2 coinPos = Vector2.Zero;

            switch (gameController.CurrentMenu.SelectedOption)
            {
            case 0:
                coinPos = new Vector2(9, 7);
                break;

            case 1:
                coinPos = new Vector2(9, 20);
                break;

            case 2:
                coinPos = new Vector2(9, 35);
                break;
            }

            batch.Begin(samplerState: samplerState, transformMatrix: baseScaleMatrix);
            {
                batch.Draw(titleGraphic, Vector2.Zero, Color.White);
                batch.Draw(titleCursor, coinPos, Color.White);

                var totalScoreLength = 11 + ScoreRenderer.LengthOf(gameController.bestCoinScore / 100d);
                var diff             = bestScoreBackgroundOffset.X - totalScoreLength;

                // Draw "best score" section.
                if (gameController.bestCoinScore > 0)
                {
                    batch.Draw(bestScoreBackground, bestScoreBackgroundOffset.ToVector2() - new Vector2(totalScoreLength, 0), Color.White);
                    DrawScore(batch, bestScoreBackgroundOffset.ToVector2() + new Vector2(11, 2) - new Vector2(totalScoreLength, 0), gameController.bestCoinScore / 100d);
                }

                #region Main menu icons
                if (SoundController.Muted())
                {
                    batch.Draw(mutedIcon, mutedIconOffset.ToVector2(), Color.White);
                }

                if (SoundController.MusicMuted())
                {
                    batch.Draw(mutedMusicIcon, mutedMusicIconOffset.ToVector2(), Color.White);
                }

                if (gameController.skipTutorial)
                {
                    batch.Draw(noTutorialIcon, noTutorialIconOffset.ToVector2(), Color.White);
                }
                #endregion

                // Draw the border graphic over the bestScoreBackground.
                batch.Draw(titleBorderGraphic, Vector2.Zero, Color.White);
            }
            batch.End();
        }
Beispiel #11
0
        public void BendRendering_Issue79()
        {
            var tex   = @":4 15.6{b(0 4)} 18.6{b(0 6)} 17.6{b(0 8)} 16.6{b(0 3 0)} | 15.6{b(0 8 4)} 14.6{b(4 4)} 13.6{b(4 6)} 14.6{b(4 0)}";
            var score = ParseTex(tex);

            Environment.StaveProfiles["tabOnly"] = new BarRendererFactory[]
            {
                new TabBarRendererFactory(),
            };

            var settings = Settings.Defaults;

            settings.Engine = "svg";
            settings.Staves = new StaveSettings("tabOnly");

            var renderer = new ScoreRenderer(settings);
            var partials = new List <string>();

            renderer.PartialRenderFinished += r =>
            {
                partials.Add(r.RenderResult.ToString());
            };
            renderer.Render(score.Tracks[0]);

            var tab = XDocument.Parse(partials[1]);

            var texts = tab.Descendants(XName.Get("text", "http://www.w3.org/2000/svg")).ToArray();

            var expectedTexts = new[]
            {
                "T", "A", "B", // clef

                "1",           // bar number

                "15", "full",
                "18", "1½",
                "17", "2",
                "16", "¾",

                "2", // bar number

                "15", "2", "-1",
                "14", "full",
                "13", "full", "1½",
                "14", "full"
            };

            Assert.Inconclusive("There must be a better way of testing the rendered values");

            for (int i = 0; i < expectedTexts.Length; i++)
            {
                var text = texts[i].Value.Trim();
                Assert.AreEqual(expectedTexts[i], text, "Mismatch at index {0}", i);
            }
        }
Beispiel #12
0
        private void Initialize(Context context)
        {
            using (var metrics = context.Resources.DisplayMetrics)
            {
                _displayDensity = metrics.Density;
            }

            _contentPanel = new AlphaTabLayoutPanel(context);
            AddView(_contentPanel);

            var settings = Settings.Defaults;

            settings.Engine       = "skia";
            settings.Width        = 970;
            settings.Scale        = 0.8f;
            settings.StretchForce = 0.8f;

            _renderer            = new ScoreRenderer(settings);
            _renderer.PreRender += result =>
            {
                lock (this)
                {
                    Post(() =>
                    {
                        ClearPartialResults();
                        AddPartialResult(result);
                    });
                }
            };
            _renderer.PartialRenderFinished += result =>
            {
                lock (this)
                {
                    Post(() =>
                    {
                        AddPartialResult(result);
                    });
                }
            };
            _renderer.RenderFinished += result =>
            {
                Post(() =>
                {
                    _initialRenderCompleted = true;
                    _isRendering            = false;
                    AddPartialResult(result);
                    OnRenderFinished(result);
                    if (_redrawPending)
                    {
                        Resize((int)(Width / _displayDensity));
                    }
                });
            };
        }
 private void Initialize(Settings settings)
 {
     _renderer = new ScoreRenderer(settings);
     _renderer.PartialRenderFinished.On(result =>
                                        _uiInvoke(() => OnPartialRenderFinished(result)));
     _renderer.RenderFinished.On(result => _uiInvoke(() => OnRenderFinished(result)));
     _renderer.PostRenderFinished.On(() =>
                                     _uiInvoke(() => OnPostFinished(_renderer.BoundsLookup)));
     _renderer.PreRender.On(resize => _uiInvoke(() => OnPreRender(resize)));
     _renderer.Error.On(e => _uiInvoke(() => OnError(e)));
 }
Beispiel #14
0
        public AlphaTab()
        {
            _contentPanel = new AlphaTabLayoutPanel();
            _contentPanel.HorizontalOptions = new LayoutOptions(LayoutAlignment.Start, true);
            _contentPanel.VerticalOptions   = new LayoutOptions(LayoutAlignment.Start, true);

            Orientation = ScrollOrientation.Both;

            Content = _contentPanel;

            var settings = Settings.Defaults;

            settings.Engine       = "skia";
            settings.Width        = 970;
            settings.Scale        = 0.8f;
            settings.StretchForce = 0.8f;

            _renderer            = new ScoreRenderer(settings);
            _renderer.PreRender += result =>
            {
                lock (this)
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        ClearPartialResults();
                        AddPartialResult(result);
                    });
                }
            };
            _renderer.PartialRenderFinished += result =>
            {
                lock (this)
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        AddPartialResult(result);
                    });
                }
            };
            _renderer.RenderFinished += result =>
            {
                Device.BeginInvokeOnMainThread(() =>
                {
                    _initialRenderCompleted = true;
                    _isRendering            = false;
                    if (_redrawPending)
                    {
                        Resize((int)Width);
                    }
                    OnRenderFinished(result);
                });
            };
        }
Beispiel #15
0
        public JsWorker(SharpKit.Html.workers.WorkerContext main, object options)
        {
            _main = main;
            _main.addEventListener("message", HandleMessage, false);
            Settings settings = Settings.FromJson(options);

            _renderer = new ScoreRenderer(settings);
            _renderer.PartialRenderFinished += result => PostMessage(new { cmd = "partialRenderFinished", result = result });
            _renderer.RenderFinished        += result => PostMessage(new { cmd = "renderFinished", result = result });
            _renderer.PostRenderFinished    += () => PostMessage(new { cmd = "postRenderFinished", boundsLookup = _renderer.BoundsLookup.ToJson() });
            _renderer.PreRender             += result => PostMessage(new { cmd = "preRender", result = result });
        }
        protected void Render(Track[] tracks, string path, string renderLayout)
        {
            var settings = Settings.Defaults;

            settings.Engine = "gdi";
            settings.Layout = new LayoutSettings
            {
                Mode = renderLayout
            };
            settings.Width = 800;
            var renderer    = new ScoreRenderer(settings);
            var images      = new FastList <Image>();
            var totalWidth  = 0;
            var totalHeight = 0;

            renderer.Error += (s, exception) =>
            {
                if (exception != null)
                {
                    throw exception;
                }
                else
                {
                    throw new Exception(s);
                }
            };
            renderer.PartialRenderFinished += r =>
            {
                images.Add((Image)r.RenderResult);
            };
            renderer.RenderFinished += r =>
            {
                totalWidth  = (int)r.TotalWidth;
                totalHeight = (int)r.TotalHeight;
            };
            renderer.Render(tracks[0].Score, tracks.Select(t => t.Index).ToArray());
            using (var bmp = new Bitmap(totalWidth, totalHeight))
            {
                int y = 0;
                using (var g = Graphics.FromImage(bmp))
                {
                    g.Clear(Color.White);
                    foreach (var image in images)
                    {
                        g.DrawImage(image, new Rectangle(0, y, image.Width, image.Height),
                                    new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
                        y += image.Height;
                    }
                }
                bmp.Save(path, ImageFormat.Png);
            }
        }
        public JsWorker(SharpKit.Html.workers.WorkerContext main, object options)
        {
            _main = main;
            _includeScoreInLoadedEvent = options.Member("scoreInLoadedEvent").As <bool>();
            _main.addEventListener("message", HandleMessage, false);
            Settings settings = Settings.FromJson(options);

            _renderer = new ScoreRenderer(settings, null);
            _renderer.PartialRenderFinished += result => PostMessage(new { cmd = "partialRenderFinished", result = result });
            _renderer.RenderFinished        += result => PostMessage(new { cmd = "renderFinished", result = result });
            _renderer.PostRenderFinished    += () => PostMessage(new { cmd = "postRenderFinished" });
            _renderer.PreRender             += () => PostMessage(new { cmd = "preRender" });
        }
Beispiel #18
0
        public void BendRendering_Issue79()
        {
            var tex   = @":4 15.6{b(0 4)} 18.6{b(0 6)} 17.6{b(0 8)} 16.6{b(0 3 0)} | 15.6{b(0 8 1)} 14.6{b(0 4)} 13.6{b(0 4 6)} 14.6{b(0 4 0)}";
            var score = ParseTex(tex);

            var settings = Settings.Defaults;

            settings.Engine = "svg";
            settings.Staves = new FastList <StaveSettings>
            {
                new StaveSettings("tab")
            };

            var renderer = new ScoreRenderer(settings, null);
            var partials = new List <string>();

            renderer.PartialRenderFinished += r =>
            {
                partials.Add(r.RenderResult.ToString());
            };
            renderer.Render(score.Tracks[0]);

            var tab = XDocument.Parse(partials[1]);

            var texts = tab.Descendants(XName.Get("text", "http://www.w3.org/2000/svg")).ToArray();

            var expectedTexts = new[]
            {
                "T", "A", "B", // clef

                "1",           // bar number

                "15", "full",
                "18", "1½",
                "17", "2",
                "16", "¾",

                "2", // bar number

                "15", "2", "-1¾",
                "14", "full",
                "13", "full", "½",
                "14", "full"
            };

            for (int i = 0; i < expectedTexts.Length; i++)
            {
                var text = texts[i].Value.Trim();
                Assert.AreEqual(expectedTexts[i], text, "Mismatch at index {0}", i);
            }
        }
        protected void Render(Score score, [CallerFilePath] string callerFile = null, [CallerMemberName] string caller = null)
        {
            if (caller == null)
            {
                throw new ArgumentNullException("caller", "svg rendering failed because caller info was missing");
            }
            var settings = Settings.Defaults;

            settings.Engine = "svg";
            var renderer = new ScoreRenderer(settings, null);

            for (int i = 0; i < score.Tracks.Count; i++)
            {
                Track track = score.Tracks[i];
                // render track
                Console.WriteLine("Rendering track {0} - {1}", i + 1, track.Name);
                var totalWidth  = 0;
                var totalHeight = 0;
                var merged      = XDocument.Parse("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"1px\" height=\"1px\"></svg>");
                var currentY    = 0f;
                renderer.PartialRenderFinished += r =>
                {
                    var subSvg  = XDocument.Parse(r.RenderResult.ToString());
                    var subRoot = subSvg.Root;
                    subRoot.SetAttributeValue("x", "0px");
                    subRoot.SetAttributeValue("y", ((int)currentY) + "px");
                    merged.Root.Add(subRoot);
                    currentY += r.Height;
                };
                renderer.RenderFinished += r =>
                {
                    totalWidth  = (int)r.TotalWidth;
                    totalHeight = (int)r.TotalHeight;
                };
                renderer.Render(track);

                merged.Root.Attribute("width").Value  = totalWidth + "px";
                merged.Root.Attribute("height").Value = totalHeight + "px";

                var svg = merged.ToString();

                var dirName = Path.GetFileNameWithoutExtension(callerFile);
                var path    = Path.Combine(dirName, caller + "-" + i + ".svg");
                if (!Directory.Exists(dirName))
                {
                    Directory.CreateDirectory(dirName);
                }
                File.WriteAllText(path, svg);
            }
        }
Beispiel #20
0
        public void DrawScore(SpriteBatch b, Vector2 drawPos, double score)
        {
            var scoreStr = ScoreRenderer.StringFor(score);

            for (int i = 0; i < scoreStr.Length; i++)
            {
                // Only attempt to draw character if supported.
                if (fontGraphics.ContainsKey(scoreStr[i]))
                {
                    Vector2 offset = drawPos + new Vector2(ScoreRenderer.OffsetOf(scoreStr, i), 1);
                    b.Draw(fontGraphics[scoreStr[i]], offset, Color.White);
                }
            }
        }
        protected void Render(Score score, [CallerFilePath] string callerFile = null, [CallerMemberName] string caller = null)
        {
            if (caller == null)
            {
                throw new ArgumentNullException("caller", "svg rendering failed because caller info was missing");
            }
#if !PHASE
            var settings = Settings.Defaults;
            settings.Engine = "svg";
            var renderer = new ScoreRenderer(settings);
            for (int i = 0; i < score.Tracks.Count; i++)
            {
                Track track = score.Tracks[i];
                // render track
                Logger.Info("Test", $"Rendering track {i + 1} - {track.Name}");
                var totalWidth  = 0;
                var totalHeight = 0;
                var merged      = new StringBuilder();
                var currentY    = 0f;
                renderer.PartialRenderFinished += r =>
                {
                    var subSvg = r.RenderResult.ToString()
                                 .Replace("width=", "x=\"0px\" y=\"" + ((int)currentY) + "\" width=");
                    merged.Append(subSvg);
                    currentY += r.Height;
                };
                renderer.RenderFinished += r =>
                {
                    totalWidth  = (int)r.TotalWidth;
                    totalHeight = (int)r.TotalHeight;
                };
                renderer.Render(score, new[] { track.Index });

                var final = new StringBuilder();
                final.Append("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"" + ((int)totalWidth) + "px\" height=\"" + ((int)totalHeight) + "px\">");
                final.Append(merged.ToString());
                final.Append("</svg>");
                var svg = merged.ToString();

                var dirName = Path.GetFileNameWithoutExtension(callerFile);
                var path    = Path.Combine(dirName, caller + "-" + i + ".svg");
                if (!Directory.Exists(dirName))
                {
                    Directory.CreateDirectory(dirName);
                }
                File.WriteAllText(path, svg);
            }
#endif
        }
Beispiel #22
0
        public GameplayState(GameStateManager gameStateManager, GraphicsDevice graphicsDevice)
            : base(gameStateManager)
        {
            level = new Level.Level(MoveToWinState, MoveToTieState);
            scoreRenderer = new ScoreRenderer();

            //Create the render target to the level size
            //Initialise it with Bgr565 (no need for alpha) and no mipmap or depth buffer
            levelRenderTarget = new RenderTarget2D(graphicsDevice, GlobalGameData.levelSizeX, GlobalGameData.levelSizeY, false, SurfaceFormat.Bgr565, DepthFormat.None);

            this.graphicsDevice = graphicsDevice;

            playerInputTypes = new int[4];
            songList = new Song[5];
        }
Beispiel #23
0
        public AlphaTabControl()
        {
            SetStyle(ControlStyles.UserPaint, true);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            SetStyle(ControlStyles.ContainerControl, true);
            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            SetStyle(ControlStyles.ResizeRedraw, true);

            var settings = Settings.defaults();

            settings.engine = "gdi";
            Settings        = settings;
            _renderer       = new ScoreRenderer(settings, this);
            _renderer.addRenderFinishedListener(new ActionFunction(OnRenderFinished));
        }
Beispiel #24
0
        private void HandleMessage(DOMEvent e)
        {
            var data = e.As <MessageEvent>().data;
            var cmd  = data.Member("cmd").As <string>();

            switch (cmd)
            {
            case "alphaTab.initialize":
                var settings = Settings.FromJson(data.Member("settings"), null);
                _renderer = new ScoreRenderer(settings);
                _renderer.PartialRenderFinished += result => PostMessage(new { cmd = "alphaTab.partialRenderFinished", result = result });
                _renderer.RenderFinished        += result => PostMessage(new { cmd = "alphaTab.renderFinished", result = result });
                _renderer.PostRenderFinished    += () => PostMessage(new { cmd = "alphaTab.postRenderFinished", boundsLookup = _renderer.BoundsLookup.ToJson() });
                _renderer.PreRender             += result => PostMessage(new { cmd = "alphaTab.preRender", result = result });
                break;

            case "alphaTab.load":
                Load(data.Member("data"), data.Member("indexes").As <int[]>());
                break;

            case "alphaTab.invalidate":
                _renderer.Invalidate();
                break;

            case "alphaTab.resize":
                _renderer.Resize(data.Member("width").As <int>());
                break;

            case "alphaTab.tex":
                Tex(data.Member("data").As <string>());
                break;

            case "alphaTab.renderMultiple":
                RenderMultiple(data.Member("data").As <int[]>());
                break;

            case "alphaTab.score":
                var converter = new JsonConverter();
                var score     = converter.JsObjectToScore(data.Member("score").As <Score>());
                Score = score;
                break;

            case "alphaTab.updateSettings":
                UpdateSettings(data.Member("settings"));
                break;
            }
        }
        public ManagedThreadScoreRenderer(Settings settings, Action <Action> uiInvoke)
        {
            _uiInvoke                = uiInvoke;
            _renderer                = null !;
            _threadStartedEvent      = new ManualResetEventSlim(false);
            _workerQueue             = new BlockingCollection <Action>();
            _workerCancellationToken = new CancellationTokenSource();

            _workerThread = new Thread(DoWork);
            _workerThread.IsBackground = true;
            _workerThread.Start();

            _threadStartedEvent.Wait();

            _workerQueue.Add(() => Initialize(settings));
            _threadStartedEvent.Dispose();
            _threadStartedEvent = null;
        }
Beispiel #26
0
        public AlphaTab()
        {
            SnapsToDevicePixels = true;

            _images        = new ObservableCollection <ImageSource>();
            RenderPartials = _images;

            var settings = Settings.Defaults;

            settings.Engine = "gdi";

            Renderer            = new ScoreRenderer(settings);
            Renderer.PreRender += result =>
            {
                Dispatcher.BeginInvoke(new Action(() =>
                {
                    _images.Clear();
                    GC.Collect();
                    AddPartialResult(result);
                }));
            };
            Renderer.PartialRenderFinished += result =>
            {
                Dispatcher.BeginInvoke(new Action(() =>
                {
                    AddPartialResult(result);
                }));
            };
            Renderer.RenderFinished += result =>
            {
                Dispatcher.BeginInvoke(new Action(() =>
                {
                    _initialRenderCompleted = true;
                    _isRendering            = 0;
                    AddPartialResult(result);
                    OnRenderFinished();
                    if (_redrawPending)
                    {
                        ResizeTracks(RenderWidth);
                    }
                }));
            };
        }
        protected void Render(Track[] tracks, string path, string renderLayout)
        {
            var settings = Settings.Defaults;

            settings.Engine = "gdi";
            settings.Layout = new LayoutSettings
            {
                Mode = renderLayout
            };
            var renderer    = new ScoreRenderer(settings);
            var images      = new List <Image>();
            var totalWidth  = 0;
            var totalHeight = 0;

            renderer.PartialRenderFinished += r =>
            {
                images.Add((Image)r.RenderResult);
            };
            renderer.RenderFinished += r =>
            {
                totalWidth  = (int)r.TotalWidth;
                totalHeight = (int)r.TotalHeight;
            };
            renderer.RenderMultiple(tracks);
            using (var bmp = new Bitmap(totalWidth, totalHeight))
            {
                int y = 0;
                using (var g = Graphics.FromImage(bmp))
                {
                    g.Clear(Color.White);
                    foreach (var image in images)
                    {
                        g.DrawImage(image, new Rectangle(0, y, image.Width, image.Height),
                                    new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
                        y += image.Height;
                    }
                }
                bmp.Save(path, ImageFormat.Png);
            }
        }
Beispiel #28
0
        public AlphaTab()
        {
            SnapsToDevicePixels = true;
            var settings = Settings.Defaults;

            settings.Engine      = "gdi";
            Settings             = settings;
            PartialResults       = new ObservableCollection <ImageSource>();
            _renderer            = new ScoreRenderer(settings);
            _renderer.PreRender += result =>
            {
                lock (this)
                {
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                        PartialResults.Clear();
                        AddPartialResult(result);
                    }));
                }
            };
            _renderer.PartialRenderFinished += result =>
            {
                lock (this)
                {
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                        AddPartialResult(result);
                    }));
                }
            };
            _renderer.RenderFinished += result =>
            {
                Dispatcher.BeginInvoke(new Action(() =>
                {
                    OnRenderFinished(result);
                }));
            };
        }
Beispiel #29
0
        private void HandleMessage(Event e)
        {
            var data = ((MessageEvent)e).Data;
            var cmd  = data ? data.cmd : "";

            switch (cmd)
            {
            case "alphaTab.initialize":
                Settings settings = Settings.FromJson(data.settings, null);
                Logger.LogLevel = settings.LogLevel;
                _renderer       = new ScoreRenderer(settings);
                _renderer.PartialRenderFinished += result => _main.PostMessage(new { cmd = "alphaTab.partialRenderFinished", result = result });
                _renderer.RenderFinished        += result => _main.PostMessage(new { cmd = "alphaTab.renderFinished", result = result });
                _renderer.PostRenderFinished    += () => _main.PostMessage(new { cmd = "alphaTab.postRenderFinished", boundsLookup = _renderer.BoundsLookup.ToJson() });
                _renderer.PreRender             += result => _main.PostMessage(new { cmd = "alphaTab.preRender", result = result });
                _renderer.Error += Error;
                break;

            case "alphaTab.invalidate":
                _renderer.Invalidate();
                break;

            case "alphaTab.resize":
                _renderer.Resize(data.width);
                break;

            case "alphaTab.render":
                var score = JsonConverter.JsObjectToScore(data.score, _renderer.Settings);
                RenderMultiple(score, data.trackIndexes);
                break;

            case "alphaTab.updateSettings":
                UpdateSettings(data.settings);
                break;
            }
        }
Beispiel #30
0
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("Usage AlphaTab.ScoreDump.exe Path");
                return;
            }

            // we need to use english culture to have correct string variants of floating points (dot as decimal separator)
            Thread.CurrentThread.CurrentCulture   = new CultureInfo("en-us");
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");

            // load score
            Score score = ScoreLoader.loadScore(args[0]);

            // render score with svg engine
            Settings settings = Settings.defaults();

            settings.engine = "svg";
            ScoreRenderer renderer = new ScoreRenderer(settings, null);

            // get iterate tracks
            for (int i = 0; i < score.tracks.length; i++)
            {
                Track track = (Track)score.tracks[i];
                // render track
                Console.WriteLine("Rendering track {0} - {1}", i + 1, track.name);
                renderer.render(track);

                // write svg file
                string   svg  = ((SvgCanvas)renderer.canvas).toSvg(true, "alphaTab");
                FileInfo info = new FileInfo(args[0]);
                string   path = Path.Combine(info.DirectoryName, Path.GetFileNameWithoutExtension(info.Name) + "-" + i + ".svg");
                File.WriteAllText(path, svg);
            }
        }
Beispiel #31
0
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("Usage AlphaTab.ScoreDump.exe Path");
                return;
            }

            // we need to use english culture to have correct string variants of floating points (dot as decimal separator)
            Thread.CurrentThread.CurrentCulture   = new CultureInfo("en-us");
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");

            // load score
            Score score = ScoreLoader.LoadScore(args[0]);

            // render score with svg engine
            Settings settings = Settings.Defaults;

            settings.Engine = "svg";
            ScoreRenderer renderer = new ScoreRenderer(settings);

            // get iterate tracks
            for (int i = 0; i < 1; i++)
            {
                Track track = score.Tracks[i];
                // render track
                Console.WriteLine("Rendering track {0} - {1}", i + 1, track.Name);
                var       totalWidth  = 0;
                var       totalHeight = 0;
                XDocument merged      = null;
                var       currentY    = 0f;
                renderer.PreRender += r =>
                {
                    // append the svg close tag which would be part of the RenderFinished event
                    var svgString = r.RenderResult.ToString() + "</svg>";
                    merged = XDocument.Parse(svgString);
                };
                renderer.PartialRenderFinished += r =>
                {
                    var subSvg  = XDocument.Parse(r.RenderResult.ToString());
                    var subRoot = subSvg.Root;
                    subRoot.SetAttributeValue("x", "0px");
                    subRoot.SetAttributeValue("y", ((int)currentY) + "px");
                    merged.Root.Add(subRoot);
                    currentY += r.Height;
                };
                renderer.RenderFinished += r =>
                {
                    totalWidth  = (int)r.TotalWidth;
                    totalHeight = (int)r.TotalHeight;
                };
                renderer.Render(track);

                merged.Root.SetAttributeValue("width", totalWidth + "px");
                merged.Root.SetAttributeValue("height", totalHeight + "px");


                var svg       = new StringWriter();
                var xmlWriter = new EntitizingXmlWriter(svg);
                merged.Save(xmlWriter);

                FileInfo info = new FileInfo(args[0]);
                string   path = Path.Combine(info.DirectoryName, Path.GetFileNameWithoutExtension(info.Name) + "-" + i + ".svg");
                File.WriteAllText(path, svg.ToString());
            }
        }
 public HorizontalScreenLayout(ScoreRenderer renderer)
     : base(renderer)
 {
 }
Beispiel #33
0
 public PageViewLayout(ScoreRenderer renderer)
     : base(renderer)
 {
 }
Beispiel #34
0
 protected ScoreLayout(ScoreRenderer renderer)
 {
     Renderer = renderer;
     _barRendererLookup = new FastDictionary<string, FastDictionary<int, BarRendererBase>>();
 }