From 9200e8473f2b70dbf2b0e5f5fbf2560dd7adb8fa Mon Sep 17 00:00:00 2001 From: Ian Burgmyer Date: Mon, 29 May 2017 18:23:54 -0400 Subject: [PATCH] Completed UI for Sample.Audio. --- Samples/Sample.Audio/Font.cs | 134 +++++++++++++++++++++++++++++++ Samples/Sample.Audio/Program.cs | 4 +- Samples/Sample.Audio/Sample.Audio.csproj | 1 + Samples/Sample.Audio/Window.cs | 127 ++++++++++++++++++++++++++++- 4 files changed, 262 insertions(+), 4 deletions(-) create mode 100644 Samples/Sample.Audio/Font.cs diff --git a/Samples/Sample.Audio/Font.cs b/Samples/Sample.Audio/Font.cs new file mode 100644 index 0000000..1658551 --- /dev/null +++ b/Samples/Sample.Audio/Font.cs @@ -0,0 +1,134 @@ +using System.Collections.Generic; + +namespace Sample.Audio { + internal static class Font { + internal const int Width = 4; + internal const int Height = 7; + + // Probably not particularly efficient (and definitely not elegant), + // but this *is* just a quick sample project. :) + internal static Dictionary Glyph = new Dictionary { + { + '0', new[,] { + { true, true, true, true }, + { true, false, false, true }, + { true, false, false, true }, + { true, false, false, true }, + { true, false, false, true }, + { true, false, false, true }, + { true, true, true, true } + } + }, { + '1', new[,] { + { false, false, true, false }, + { false, true, true, false }, + { false, false, true, false }, + { false, false, true, false }, + { false, false, true, false }, + { false, false, true, false }, + { false, true, true, true } + } + }, { + '2', new[,] { + { true, true, true, true }, + { false, false, false, true }, + { false, false, false, true }, + { true, true, true, true }, + { true, false, false, false }, + { true, false, false, false }, + { true, true, true, true } + } + }, { + '3', new[,] { + { true, true, true, true }, + { false, false, false, true }, + { false, false, false, true }, + { false, true, true, true }, + { false, false, false, true }, + { false, false, false, true }, + { true, true, true, true } + } + }, { + '4', new[,] { + { true, false, false, true }, + { true, false, false, true }, + { true, false, false, true }, + { true, true, true, true }, + { false, false, false, true }, + { false, false, false, true }, + { false, false, false, true } + } + }, { + '5', new[,] { + { true, true, true, true }, + { true, false, false, false }, + { true, false, false, false }, + { true, true, true, true }, + { false, false, false, true }, + { false, false, false, true }, + { true, true, true, true } + } + }, { + '6', new[,] { + { true, true, true, true }, + { true, false, false, false }, + { true, false, false, false }, + { true, true, true, true }, + { true, false, false, true }, + { true, false, false, true }, + { true, true, true, true } + } + }, { + '7', new[,] { + { true, true, true, true }, + { false, false, false, true }, + { false, false, false, true }, + { false, false, false, true }, + { false, false, false, true }, + { false, false, false, true }, + { false, false, false, true } + } + }, { + '8', new[,] { + { true, true, true, true }, + { true, false, false, true }, + { true, false, false, true }, + { true, true, true, true }, + { true, false, false, true }, + { true, false, false, true }, + { true, true, true, true } + } + }, { + '9', new[,] { + { true, true, true, true }, + { true, false, false, true }, + { true, false, false, true }, + { true, true, true, true }, + { false, false, false, true }, + { false, false, false, true }, + { true, true, true, true } + } + }, { + 'h', new[,] { + { true, false, false, false }, + { true, false, false, false }, + { true, false, false, false }, + { true, true, true, true }, + { true, false, false, true }, + { true, false, false, true }, + { true, false, false, true } + } + }, { + 'z', new[,] { + { false, false, false, false }, + { false, false, false, false }, + { false, false, false, false }, + { true, true, true, true }, + { false, false, true, false }, + { false, true, false, false }, + { true, true, true, true } + } + } + }; + } +} diff --git a/Samples/Sample.Audio/Program.cs b/Samples/Sample.Audio/Program.cs index 40be831..6902ded 100644 --- a/Samples/Sample.Audio/Program.cs +++ b/Samples/Sample.Audio/Program.cs @@ -1,8 +1,8 @@ namespace Sample.Audio { class Program { static void Main(string[] args) { - var window = new Window(512, 256); - window.Start(500, 16); + var window = new Window(720, 180); + window.Start(16); } } } diff --git a/Samples/Sample.Audio/Sample.Audio.csproj b/Samples/Sample.Audio/Sample.Audio.csproj index 7e0d104..2df4d3a 100644 --- a/Samples/Sample.Audio/Sample.Audio.csproj +++ b/Samples/Sample.Audio/Sample.Audio.csproj @@ -56,6 +56,7 @@ + diff --git a/Samples/Sample.Audio/Window.cs b/Samples/Sample.Audio/Window.cs index 9b5d36a..3c7f010 100644 --- a/Samples/Sample.Audio/Window.cs +++ b/Samples/Sample.Audio/Window.cs @@ -1,9 +1,132 @@ using DotSDL.Graphics; +using DotSDL.Input.Keyboard; namespace Sample.Audio { internal class Window : SdlWindow { - public Window(int width, int height) : base("DotSDL Audio Example", new Point{ X = WindowPosUndefined, Y = WindowPosUndefined }, width, height, 128, 32) { - + private bool UpPressed { get; set; } + private bool DownPressed { get; set; } + private bool Fast { get; set; } + + private int _freq = 440; + private int _minFreq = 1; + private int _maxFreq = 22050; + + private const int DrawX = 1; + private const int SpacingX = 5; + private const int DrawY = 1; + + private const byte OnDelta = 24; + private const byte OffColor = 72; + private Color TextColor = new Color { A = 255, R = 159, G = 159, B = 159 }; + + public Window(int width, int height) : base("DotSDL Audio Example", + new Point{ X = WindowPosUndefined, Y = WindowPosUndefined }, + width, height, + 36, 9) { + KeyPressed += Window_KeyPressed; + KeyReleased += Window_KeyReleased; + } + + private void DrawGlyph(ref Canvas canvas, char ch, int xPos, Color c) { + var xPixel = DrawX + SpacingX * xPos; + var glyph = Font.Glyph[ch]; + + for(var y = 0; y < Font.Height; y++) { + for(var x = 0; x < Font.Width; x++) { + if(!glyph[y, x]) continue; + var index = canvas.GetIndex(x + xPixel, y + DrawY); + + canvas.Pixels[index] = TextColor; + } + } + } + + protected override void OnDraw(ref Canvas canvas) { + // Clear canvas. + for(var i = 0; i < canvas.Pixels.Length; i++) + canvas.Pixels[i].R = canvas.Pixels[i].G = canvas.Pixels[i].B = 0; + + // hz Text + DrawGlyph(ref canvas, 'h', 5, TextColor); + DrawGlyph(ref canvas, 'z', 6, TextColor); + + // Number + var freqText = _freq.ToString(); + var textPos = 5 - freqText.Length; + for(int x = 0; x < freqText.Length; x++) + DrawGlyph(ref canvas, freqText[x], textPos + x, TextColor); + + // Background/highlighting. + var component = 0; + + for(var i = 0; i < canvas.Pixels.Length; i++) { + canvas.Pixels[i].R += OffColor; + canvas.Pixels[i].G += OffColor; + canvas.Pixels[i].B += OffColor; + switch(component) { + default: + canvas.Pixels[i].R += OnDelta; + break; + case 1: + canvas.Pixels[i].G += OnDelta; + break; + case 2: + canvas.Pixels[i].B += OnDelta; + break; + } + component = component >= 2 ? 0 : ++component; + } + + + base.OnDraw(ref canvas); + } + + protected override void OnUpdate() { + var delta = Fast ? 10 : 1; + if(UpPressed) + _freq += delta; + if(DownPressed) + _freq -= delta; + + if(_freq > _maxFreq) _freq = _maxFreq; + if(_freq < _minFreq) _freq = _minFreq; + + base.OnUpdate(); + } + + private void Window_KeyPressed(object sender, DotSDL.Events.KeyboardEvent e) { + if(e.Repeat) return; + + switch(e.Keycode) { + case Keycode.Up: + UpPressed = true; + break; + case Keycode.Down: + DownPressed = true; + break; + case Keycode.LShift: + case Keycode.RShift: + Fast = true; + break; + case Keycode.Escape: + Stop(); + break; + } + } + + private void Window_KeyReleased(object sender, DotSDL.Events.KeyboardEvent e) { + switch(e.Keycode) { + case Keycode.Up: + UpPressed = false; + break; + case Keycode.Down: + DownPressed = false; + break; + case Keycode.LShift: + case Keycode.RShift: + Fast = false; + break; + } } } }