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; }
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(); })); }; }
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)))); }
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); } } }
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)); }
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(); }
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); } }
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))); }
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); }); }; }
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" }); }
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); } }
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 }
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]; }
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)); }
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; }
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); } }
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); })); }; }
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; } }
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); } }
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) { }
public PageViewLayout(ScoreRenderer renderer) : base(renderer) { }
protected ScoreLayout(ScoreRenderer renderer) { Renderer = renderer; _barRendererLookup = new FastDictionary<string, FastDictionary<int, BarRendererBase>>(); }