diff --git a/Matrix App/GifWriter.cs b/Matrix App/GifWriter.cs index 5d4f1ea..cbe2520 100644 --- a/Matrix App/GifWriter.cs +++ b/Matrix App/GifWriter.cs @@ -1,11 +1,7 @@ using System; -using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Matrix_App { @@ -15,44 +11,45 @@ namespace Matrix_App public class GifWriter : IDisposable { #region Fields - const long SourceGlobalColorInfoPosition = 10, - SourceImageBlockPosition = 789; + + private const long SourceGlobalColorInfoPosition = 10, SourceImageBlockPosition = 789; - readonly BinaryWriter _writer; - bool _firstFrame = true; - readonly object _syncLock = new object(); + private readonly object syncLock = new object(); + private readonly BinaryWriter writer; + private bool firstFrame = true; + #endregion /// /// Creates a new instance of GifWriter. /// - /// The to output the Gif to. - /// Default Delay between consecutive frames... FrameRate = 1000 / DefaultFrameDelay. - /// No of times the Gif should repeat... -1 not to repeat, 0 to repeat indefinitely. - public GifWriter(Stream OutStream, int DefaultFrameDelay = 500, int Repeat = 0) + /// The to output the Gif to. + /// Default Delay between consecutive frames... FrameRate = 1000 / DefaultFrameDelay. + /// No of times the Gif should repeat... -1 not to repeat, 0 to repeat indefinitely. + public GifWriter(Stream outStream, int defaultFrameDelay = 500, int repeat = 0) { - if (OutStream == null) - throw new ArgumentNullException(nameof(OutStream)); + if (outStream == null) + throw new ArgumentNullException(nameof(outStream)); - if (DefaultFrameDelay <= 0) - throw new ArgumentOutOfRangeException(nameof(DefaultFrameDelay)); + if (defaultFrameDelay <= 0) + throw new ArgumentOutOfRangeException(nameof(defaultFrameDelay)); - if (Repeat < -1) - throw new ArgumentOutOfRangeException(nameof(Repeat)); + if (repeat < -1) + throw new ArgumentOutOfRangeException(nameof(repeat)); - _writer = new BinaryWriter(OutStream); - this.DefaultFrameDelay = DefaultFrameDelay; - this.Repeat = Repeat; + writer = new BinaryWriter(outStream); + this.DefaultFrameDelay = defaultFrameDelay; + this.Repeat = repeat; } /// /// Creates a new instance of GifWriter. /// - /// The path to the file to output the Gif to. - /// Default Delay between consecutive frames... FrameRate = 1000 / DefaultFrameDelay. - /// No of times the Gif should repeat... -1 not to repeat, 0 to repeat indefinitely. - public GifWriter(string FileName, int DefaultFrameDelay = 500, int Repeat = -1) - : this(new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read), DefaultFrameDelay, Repeat) { } + /// The path to the file to output the Gif to. + /// Default Delay between consecutive frames... FrameRate = 1000 / DefaultFrameDelay. + /// No of times the Gif should repeat... -1 not to repeat, 0 to repeat indefinitely. + public GifWriter(string fileName, int defaultFrameDelay = 500, int repeat = -1) + : this(new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read), defaultFrameDelay, repeat) { } #region Properties /// @@ -80,114 +77,114 @@ namespace Matrix_App /// /// Adds a frame to this animation. /// - /// The image to add - /// Delay in Milliseconds between this and last frame... 0 = - public void WriteFrame(Image Image, int Delay = 0) + /// The image to add + /// Delay in Milliseconds between this and last frame... 0 = + public void WriteFrame(Image image, int delay = 0) { - lock (_syncLock) + lock (syncLock) using (var gifStream = new MemoryStream()) { - Image.Save(gifStream, ImageFormat.Gif); + image.Save(gifStream, ImageFormat.Gif); // Steal the global color table info - if (_firstFrame) - InitHeader(gifStream, _writer, Image.Width, Image.Height); + if (firstFrame) + InitHeader(gifStream, writer, image.Width, image.Height); - WriteGraphicControlBlock(gifStream, _writer, Delay == 0 ? DefaultFrameDelay : Delay); - WriteImageBlock(gifStream, _writer, !_firstFrame, 0, 0, Image.Width, Image.Height); + WriteGraphicControlBlock(gifStream, writer, delay == 0 ? DefaultFrameDelay : delay); + WriteImageBlock(gifStream, writer, !firstFrame, 0, 0, image.Width, image.Height); } - if (_firstFrame) - _firstFrame = false; + if (firstFrame) + firstFrame = false; } #region Write - void InitHeader(Stream SourceGif, BinaryWriter Writer, int Width, int Height) + private void InitHeader(Stream sourceGif, BinaryWriter writer, int width, int height) { // File Header - Writer.Write("GIF".ToCharArray()); // File type - Writer.Write("89a".ToCharArray()); // File Version + writer.Write("GIF".ToCharArray()); // File type + writer.Write("89a".ToCharArray()); // File Version - Writer.Write((short)(DefaultWidth == 0 ? Width : DefaultWidth)); // Initial Logical Width - Writer.Write((short)(DefaultHeight == 0 ? Height : DefaultHeight)); // Initial Logical Height + writer.Write((short)(DefaultWidth == 0 ? width : DefaultWidth)); // Initial Logical Width + writer.Write((short)(DefaultHeight == 0 ? height : DefaultHeight)); // Initial Logical Height - SourceGif.Position = SourceGlobalColorInfoPosition; - Writer.Write((byte)SourceGif.ReadByte()); // Global Color Table Info - Writer.Write((byte)0); // Background Color Index - Writer.Write((byte)0); // Pixel aspect ratio - WriteColorTable(SourceGif, Writer); + sourceGif.Position = SourceGlobalColorInfoPosition; + writer.Write((byte)sourceGif.ReadByte()); // Global Color Table Info + writer.Write((byte)0); // Background Color Index + writer.Write((byte)0); // Pixel aspect ratio + WriteColorTable(sourceGif, writer); // App Extension Header for Repeating if (Repeat == -1) return; - Writer.Write(unchecked((short)0xff21)); // Application Extension Block Identifier - Writer.Write((byte)0x0b); // Application Block Size - Writer.Write("NETSCAPE2.0".ToCharArray()); // Application Identifier - Writer.Write((byte)3); // Application block length - Writer.Write((byte)1); - Writer.Write((short)Repeat); // Repeat count for images. - Writer.Write((byte)0); // terminator + writer.Write(unchecked((short)0xff21)); // Application Extension Block Identifier + writer.Write((byte)0x0b); // Application Block Size + writer.Write("NETSCAPE2.0".ToCharArray()); // Application Identifier + writer.Write((byte)3); // Application block length + writer.Write((byte)1); + writer.Write((short)Repeat); // Repeat count for images. + writer.Write((byte)0); // terminator } - static void WriteColorTable(Stream SourceGif, BinaryWriter Writer) + static void WriteColorTable(Stream sourceGif, BinaryWriter writer) { - SourceGif.Position = 13; // Locating the image color table + sourceGif.Position = 13; // Locating the image color table var colorTable = new byte[768]; - SourceGif.Read(colorTable, 0, colorTable.Length); - Writer.Write(colorTable, 0, colorTable.Length); + sourceGif.Read(colorTable, 0, colorTable.Length); + writer.Write(colorTable, 0, colorTable.Length); } - static void WriteGraphicControlBlock(Stream SourceGif, BinaryWriter Writer, int FrameDelay) + static void WriteGraphicControlBlock(Stream sourceGif, BinaryWriter writer, int frameDelay) { - SourceGif.Position = 781; // Locating the source GCE + sourceGif.Position = 781; // Locating the source GCE var blockhead = new byte[8]; - SourceGif.Read(blockhead, 0, blockhead.Length); // Reading source GCE + sourceGif.Read(blockhead, 0, blockhead.Length); // Reading source GCE - Writer.Write(unchecked((short)0xf921)); // Identifier - Writer.Write((byte)0x04); // Block Size - Writer.Write((byte)(blockhead[3] & 0xf7 | 0x08)); // Setting disposal flag - Writer.Write((short)(FrameDelay / 10)); // Setting frame delay - Writer.Write(blockhead[6]); // Transparent color index - Writer.Write((byte)0); // Terminator + writer.Write(unchecked((short)0xf921)); // Identifier + writer.Write((byte)0x04); // Block Size + writer.Write((byte)(blockhead[3] & 0xf7 | 0x08)); // Setting disposal flag + writer.Write((short)(frameDelay / 10)); // Setting frame delay + writer.Write(blockhead[6]); // Transparent color index + writer.Write((byte)0); // Terminator } - static void WriteImageBlock(Stream SourceGif, BinaryWriter Writer, bool IncludeColorTable, int X, int Y, int Width, int Height) + static void WriteImageBlock(Stream sourceGif, BinaryWriter writer, bool includeColorTable, int x, int y, int width, int height) { - SourceGif.Position = SourceImageBlockPosition; // Locating the image block + sourceGif.Position = SourceImageBlockPosition; // Locating the image block var header = new byte[11]; - SourceGif.Read(header, 0, header.Length); - Writer.Write(header[0]); // Separator - Writer.Write((short)X); // Position X - Writer.Write((short)Y); // Position Y - Writer.Write((short)Width); // Width - Writer.Write((short)Height); // Height + sourceGif.Read(header, 0, header.Length); + writer.Write(header[0]); // Separator + writer.Write((short)x); // Position X + writer.Write((short)y); // Position Y + writer.Write((short)width); // Width + writer.Write((short)height); // Height - if (IncludeColorTable) // If first frame, use global color table - else use local + if (includeColorTable) // If first frame, use global color table - else use local { - SourceGif.Position = SourceGlobalColorInfoPosition; - Writer.Write((byte)(SourceGif.ReadByte() & 0x3f | 0x80)); // Enabling local color table - WriteColorTable(SourceGif, Writer); + sourceGif.Position = SourceGlobalColorInfoPosition; + writer.Write((byte)(sourceGif.ReadByte() & 0x3f | 0x80)); // Enabling local color table + WriteColorTable(sourceGif, writer); } - else Writer.Write((byte)(header[9] & 0x07 | 0x07)); // Disabling local color table + else writer.Write((byte)(header[9] & 0x07 | 0x07)); // Disabling local color table - Writer.Write(header[10]); // LZW Min Code Size + writer.Write(header[10]); // LZW Min Code Size // Read/Write image data - SourceGif.Position = SourceImageBlockPosition + header.Length; + sourceGif.Position = SourceImageBlockPosition + header.Length; - var dataLength = SourceGif.ReadByte(); + var dataLength = sourceGif.ReadByte(); while (dataLength > 0) { var imgData = new byte[dataLength]; - SourceGif.Read(imgData, 0, dataLength); + sourceGif.Read(imgData, 0, dataLength); - Writer.Write((byte)dataLength); - Writer.Write(imgData, 0, dataLength); - dataLength = SourceGif.ReadByte(); + writer.Write((byte)dataLength); + writer.Write(imgData, 0, dataLength); + dataLength = sourceGif.ReadByte(); } - Writer.Write((byte)0); // Terminator + writer.Write((byte)0); // Terminator } #endregion @@ -197,10 +194,10 @@ namespace Matrix_App public void Dispose() { // Complete File - _writer.Write((byte)0x3b); // File Trailer + writer.Write((byte)0x3b); // File Trailer - _writer.BaseStream.Dispose(); - _writer.Dispose(); + writer.BaseStream.Dispose(); + writer.Dispose(); } } } diff --git a/Matrix App/Matrix App.csproj b/Matrix App/Matrix App.csproj index 20e9fde..65c7eff 100644 --- a/Matrix App/Matrix App.csproj +++ b/Matrix App/Matrix App.csproj @@ -38,5 +38,6 @@ + \ No newline at end of file diff --git a/Matrix App/MatrixDesigner.Designer.cs b/Matrix App/MatrixDesigner.Designer.cs index 501dcc2..4f461ff 100644 --- a/Matrix App/MatrixDesigner.Designer.cs +++ b/Matrix App/MatrixDesigner.Designer.cs @@ -10,13 +10,13 @@ namespace Matrix_App /// private System.ComponentModel.IContainer components = null; - /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { + IMAGE_DRAWER.Stop(); MatrixGifGenerator.Close(); commandQueue.Close(); if (disposing && (components != null)) @@ -47,7 +47,6 @@ namespace Matrix_App this.label3 = new System.Windows.Forms.Label(); this.FramesLabel = new System.Windows.Forms.Label(); this.configButton = new System.Windows.Forms.Button(); - this.read_me = new System.Windows.Forms.RichTextBox(); this.DelayLabel = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); @@ -81,7 +80,7 @@ namespace Matrix_App this.Play = new System.Windows.Forms.Button(); this.Apply = new System.Windows.Forms.Button(); this.DragDropButton = new System.Windows.Forms.Button(); - this.matrixView = new Matrix_App.Matrix(); + matrixView = new Matrix_App.Matrix(); this.panel3 = new System.Windows.Forms.Panel(); this.Modus.SuspendLayout(); this.tabPage1.SuspendLayout(); @@ -140,7 +139,6 @@ namespace Matrix_App this.tabPage1.Controls.Add(this.label3); this.tabPage1.Controls.Add(this.FramesLabel); this.tabPage1.Controls.Add(this.configButton); - this.tabPage1.Controls.Add(this.read_me); this.tabPage1.Controls.Add(this.DelayLabel); this.tabPage1.Controls.Add(this.label4); this.tabPage1.Controls.Add(this.label2); @@ -248,17 +246,6 @@ namespace Matrix_App this.configButton.UseVisualStyleBackColor = true; this.configButton.Click += new System.EventHandler(this.ConfigButton_Click); // - // read_me - // - this.read_me.Dock = System.Windows.Forms.DockStyle.Bottom; - this.read_me.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.read_me.Location = new System.Drawing.Point(0, 344); - this.read_me.Name = "read_me"; - this.read_me.ReadOnly = true; - this.read_me.Size = new System.Drawing.Size(232, 291); - this.read_me.TabIndex = 5; - this.read_me.Text = "Reads Me"; - // // DelayLabel // this.DelayLabel.AutoSize = true; @@ -689,16 +676,16 @@ namespace Matrix_App // // matrixView // - this.matrixView.Dock = System.Windows.Forms.DockStyle.Fill; - this.matrixView.Location = new System.Drawing.Point(16, 16); - this.matrixView.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); - this.matrixView.Name = "matrixView"; - this.matrixView.Size = new System.Drawing.Size(627, 557); - this.matrixView.TabIndex = 3; + matrixView.Dock = System.Windows.Forms.DockStyle.Fill; + matrixView.Location = new System.Drawing.Point(16, 16); + matrixView.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0); + matrixView.Name = "matrixView"; + matrixView.Size = new System.Drawing.Size(627, 557); + matrixView.TabIndex = 3; // // panel3 // - this.panel3.Controls.Add(this.matrixView); + this.panel3.Controls.Add(matrixView); this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; this.panel3.Location = new System.Drawing.Point(240, 0); this.panel3.Name = "panel3"; @@ -757,7 +744,6 @@ namespace Matrix_App private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label4; - private System.Windows.Forms.RichTextBox read_me; private System.Windows.Forms.Panel ToolBar; private System.Windows.Forms.NumericUpDown matrixHeight; private System.Windows.Forms.NumericUpDown matrixWidth; @@ -782,7 +768,7 @@ namespace Matrix_App private System.Windows.Forms.Button Save; private System.Windows.Forms.Label label3; private System.Windows.Forms.Button configButton; - private Matrix matrixView; + private static Matrix matrixView; private System.Windows.Forms.TabPage pregeneratedMods; private System.Windows.Forms.FlowLayoutPanel pregeneratedModsBase; private System.Windows.Forms.Panel panel2; diff --git a/Matrix App/MatrixDesigner.cs b/Matrix App/MatrixDesigner.cs index e708807..be096e4 100644 --- a/Matrix App/MatrixDesigner.cs +++ b/Matrix App/MatrixDesigner.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Drawing; using System.Linq; @@ -44,8 +45,10 @@ namespace Matrix_App /// /// Gif like frame video buffer /// - public byte[][] gifBuffer = CreateImageRGB_NT(MatrixStartWidth, MatrixStartHeight, MatrixStartFrames); - + public static byte[][] gifBuffer = CreateImageRGB_NT(MatrixStartWidth, MatrixStartHeight, MatrixStartFrames); + + public static readonly ThreadQueue IMAGE_DRAWER = new ThreadQueue("Matrix Image Drawer", 4); + #endregion #region Setup @@ -595,24 +598,37 @@ namespace Matrix_App private void Timeline_ValueChanged(object sender, EventArgs e) { - int width = matrixView.matrixWidth(); - int height = matrixView.matrixHeight(); - - for (int y = 0; y < height; y++) + var timeFrame = Timeline.Value; + + IMAGE_DRAWER.Enqueue(() => { - int index = y * width; + WriteImage(gifBuffer[timeFrame]); + + var width = matrixView.matrixWidth(); + var height = matrixView.matrixHeight(); - for (int x = 0; x < width; x++) + lock (matrixView) { - int tmp = (index + x) * 3; + for (var y = 0; y < height; y++) + { + var index = y * width; - var color = Color.FromArgb(gifBuffer[Timeline.Value][tmp + 1], gifBuffer[Timeline.Value][tmp], gifBuffer[Timeline.Value][tmp + 2]); + for (var x = 0; x < width; x++) + { + var tmp = (index + x) * 3; - matrixView.SetPixelNoRefresh(x, y, color); + var color = Color.FromArgb(gifBuffer[timeFrame][tmp + 1], gifBuffer[timeFrame][tmp], gifBuffer[timeFrame][tmp + 2]); + + matrixView.SetPixelNoRefresh(x, y, color); + } + } } - } + + matrixView.Refresh(); + + return true; + }); matrixView.Refresh(); - WriteImage(gifBuffer[Timeline.Value]); } /// diff --git a/Matrix App/MatrixGifGenerator.cs b/Matrix App/MatrixGifGenerator.cs index ed4d72c..2d8dd46 100644 --- a/Matrix App/MatrixGifGenerator.cs +++ b/Matrix App/MatrixGifGenerator.cs @@ -1,11 +1,10 @@ using Matrix_App.PregeneratedMods; using System; -using System.Diagnostics; using System.Drawing; using System.Reflection; -using System.Text.RegularExpressions; using System.Threading; using System.Windows.Forms; +using Matrix_App.PregeneratedMods.reflection; using static Matrix_App.Utils; using static Matrix_App.Defaults; using Timer = System.Windows.Forms.Timer; @@ -26,33 +25,46 @@ namespace Matrix_App new Grayscale(), new Invert() }; - - private static readonly Timer PlaybackTimer = new Timer(); - - private static int _playbackFrame; - - protected static int totalFrames; - protected static byte[][]? actualStore; + + // Static generator accessible members + // must work on multiple threads + protected static int totalFrames; // total amount of frames to generate + protected static byte[][]? actualStore; // image copy of previous GIF for generator protected static int width; protected static int height; + + // updates the preview matrix for animation + private static readonly Timer PlaybackTimer = new Timer(); + // current frame to play + private static int _playbackFrame; + // temporary buffer for storing snapshots for buttons private static readonly byte[][] Snapshot; - private static byte[][] _initialBuffer; + private static byte[][] _initialBuffer; // temporary buffer for swapping + // Generator renderer private static readonly ThreadQueue Renderer; + // Current generator to use private static MatrixGifGenerator? _generator; static MatrixGifGenerator() { PlaybackTimer.Tick += PlaybackFrame; - + + // Generate buffer for button filter snapshots Snapshot = CreateImageRGB_NT(FilterPreviewWidth, FilterPreviewHeight, 1); _initialBuffer = CreateImageRGB_NT(FilterPreviewWidth, FilterPreviewHeight, 1); Renderer = new ThreadQueue("Matrix Gif Renderer", 2); } + + /// + /// Plays the next frame of what is currently in the animation buffer + /// + /// + /// private static void PlaybackFrame(object? sender, EventArgs e) { if (_playbackFrame >= _animationBuffer.Length - 1) @@ -65,12 +77,25 @@ namespace Matrix_App _playbackFrame++; } + /// + /// Colors a single fragment at the specified pixel location (x|y) at frame frame. + /// + /// + /// + /// Normalized pixel X-coordinate + /// Normalized pixel Y-coordinate + /// Current frame + /// Pixel Red value in range [0, 1] (saturated) + /// Pixel Green value in range [0, 1] (saturated) + /// Pixel Blue value in range [0, 1] (saturated) protected abstract void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b); + // Buffer to store generator result in private static byte[][] _animationBuffer = null!; + // Main application reference private static MatrixDesignerMain _form = null!; - private static Matrix _preview = null!; + private static Matrix _preview = null!; // preview matrix public static void GenerateBaseUi(FlowLayoutPanel anchor, Matrix matrix, MatrixDesignerMain form1) { @@ -79,10 +104,11 @@ namespace Matrix_App // generate access buttons for available generators foreach (var generator in Generators) { + // generate button var button = new Button { Width = 215, - Text = GetBetterFieldName(generator.GetType().Name) + Text = FieldWidgets.GetBetterFieldName(generator.GetType().Name) }; button.Click += (sender, e) => OpenGeneratorUi(generator, matrix); button.Image = CreateSnapshot(generator); @@ -124,16 +150,34 @@ namespace Matrix_App Thread.Sleep(50); } } - + private static void OpenGeneratorUi(MatrixGifGenerator matrixGifGenerator, Matrix matrix) { _generator = matrixGifGenerator; if (!ShowEditDialog(matrix)) return; - - FlipColorStoreRG_GR(_animationBuffer, _form.gifBuffer); - _form.ResetTimeline(); + + if (Renderer.HasWork()) + { + if (DialogResult.Yes == + MessageBox.Show($@"The filter {_generator.GetType().Name} hasn't finished yet, wait for completion?", + @"Filter incomplete", MessageBoxButtons.YesNo, MessageBoxIcon.Warning)) + { + BlockBuffer(); + FlipColorStoreRG_GR(_animationBuffer, MatrixDesignerMain.gifBuffer); + _form.ResetTimeline(); + } + else + { + MessageBox.Show($@"The filter {_generator.GetType().Name} has timedout", @"Failed applying filter", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + else + { + FlipColorStoreRG_GR(_animationBuffer, MatrixDesignerMain.gifBuffer); + _form.ResetTimeline(); + } } private static void SetGlobalArgs(int w, int h, int f, in byte[][]? previous, in byte[][] preview) @@ -149,6 +193,11 @@ namespace Matrix_App private static bool ShowEditDialog(Matrix matrix) { + if (_generator == null) + { + return false; + } + var success = false; Initialize(matrix); @@ -160,7 +209,7 @@ namespace Matrix_App Text = @"Vorgenerierter Modus: " + _generator.GetType().Name }; - var confirmation = new Button {Text = "Apply", Anchor = AnchorStyles.Top | AnchorStyles.Left}; + var confirmation = new Button {Text = @"Apply", Anchor = AnchorStyles.Top | AnchorStyles.Left}; confirmation.Click += (sender, e) => { success = true; prompt.Close(); @@ -175,20 +224,21 @@ namespace Matrix_App AutoSize = true }; - var fields = _generator.GetType().GetFields(); - PlaybackTimer.Interval = _form.GetDelayTime(); PlaybackTimer.Enabled = true; + var type = _generator.GetType(); + var fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); + CreateDivider(controlPanel, 2); foreach (var field in fields) { - if (field.IsStatic || !field.IsPublic) + var widget = FieldWidgets.GetFieldWidget(field, _generator, InvokeGenerator); + + if (widget == null) continue; - var fieldValue = field.GetValue(_generator); - - controlPanel.Controls.AddRange(GetFieldUi(field, _generator.GetType(), fieldValue, _generator)); + controlPanel.Controls.AddRange(widget); CreateDivider(controlPanel, 1); } @@ -218,130 +268,17 @@ namespace Matrix_App return success; } - private static Control[] GetFieldUi(FieldInfo field, Type clazz, object? fieldValue, MatrixGifGenerator generator) - { - var panel = new FlowLayoutPanel - { - FlowDirection = FlowDirection.LeftToRight, - Anchor = AnchorStyles.Top | AnchorStyles.Left, - AutoSize = true - }; - - var title = GetBetterFieldName(field.Name); - - var description = new Label(); - - if (Attribute.GetCustomAttribute(field, typeof(UiDescriptionAttribute)) is UiDescriptionAttribute desc) - { - title = desc.title; - description.Text = desc.description; - description.ForeColor = Color.Gray; - description.Height += 10; - description.AutoSize = true; - } - - panel.Controls.Add(new Label - { - TextAlign = ContentAlignment.MiddleLeft, - Text = title, - Dock = DockStyle.Left, - Anchor = AnchorStyles.Top | AnchorStyles.Left, - Width = 100 - }); - - switch (fieldValue) - { - case int value: - { - var upDown = new NumericUpDown - { - Dock = DockStyle.Fill, - Anchor = AnchorStyles.Top | AnchorStyles.Right, - Width = 360, - Value = value - }; - upDown.ValueChanged += (a, b) => - { - field.SetValue(generator, (int) upDown.Value); - InvokeGenerator(); - }; - - panel.Controls.Add(upDown); - break; - } - case bool value1: - { - var upDown = new CheckBox - { - Dock = DockStyle.Fill, Anchor = AnchorStyles.Top | AnchorStyles.Right, Checked = value1 - }; - upDown.CheckedChanged += (a, b) => - { - field.SetValue(generator, (bool) upDown.Checked); - InvokeGenerator(); - }; - - panel.Controls.Add(upDown); - break; - } - case float floatValue: - { - var upDown = new TrackBar - { - Dock = DockStyle.Fill, - Anchor = AnchorStyles.Top | AnchorStyles.Right, - Maximum = 100, - Minimum = 0, - Value = (int) (floatValue * 100.0f), - TickFrequency = 10, - Width = 360 - }; - upDown.ValueChanged += (a, b) => - { - field.SetValue(generator, upDown.Value / 1e2f); - InvokeGenerator(); - }; - - panel.Controls.Add(upDown); - break; - } - } - - return new Control[] {description, panel}; - } - - /// - /// Generates a new name from standard class names - /// Example: SomeClassA --> some class a - /// - /// - /// - private static string GetBetterFieldName(string name) - { - var groups = Regex.Match(name, @"([A-Z]*[a-z]+)([A-Z]+[a-z]*)|(.*)").Groups; - - var newName = ""; - - for (var c = 1; c < groups.Count; c++) - { - newName += groups[c].Value.ToLower() + " "; - } - - return newName; - } - private static void Initialize(in Matrix matrix) { // Create new initial buffer and copy what ever was in the Gif buffer to it - _initialBuffer = CreateImageRGB_NT(matrix.matrixWidth(), matrix.matrixHeight(), _form.gifBuffer.Length); - FlipColorStoreRG_GR(_form.gifBuffer, _initialBuffer); - + _initialBuffer = CreateImageRGB_NT(matrix.matrixWidth(), matrix.matrixHeight(), MatrixDesignerMain.gifBuffer.Length); + FlipColorStoreRG_GR(MatrixDesignerMain.gifBuffer, _initialBuffer); // Set Generator args SetGlobalArgs(matrix.matrixWidth(), matrix.matrixHeight(), - _form.gifBuffer.Length - 1, + MatrixDesignerMain.gifBuffer.Length - 1, _initialBuffer, - CreateImageRGB_NT(matrix.matrixWidth(), matrix.matrixHeight(), _form.gifBuffer.Length) + CreateImageRGB_NT(matrix.matrixWidth(), matrix.matrixHeight(), MatrixDesignerMain.gifBuffer.Length) ); // Create preview matrix @@ -356,13 +293,14 @@ namespace Matrix_App /// Adds a separating line to the controls /// /// - private static void CreateDivider(Control controlPanel, int height) + /// + private static void CreateDivider(Control controlPanel, int lineHeight) { var divider = new Label { BorderStyle = BorderStyle.Fixed3D, AutoSize = false, - Height = height, + Height = lineHeight, Width = 500 }; @@ -383,7 +321,7 @@ namespace Matrix_App { var v = y / (float)height; - _generator.ColorFragment(x, y, u, v, frame, out var r, out var g, out var b); + _generator!.ColorFragment(x, y, u, v, frame, out var r, out var g, out var b); var index = (x + y * width) * 3; diff --git a/Matrix App/PregeneratedMods/Boxblur.cs b/Matrix App/PregeneratedMods/Boxblur.cs index 503b8a5..aa595d7 100644 --- a/Matrix App/PregeneratedMods/Boxblur.cs +++ b/Matrix App/PregeneratedMods/Boxblur.cs @@ -1,12 +1,14 @@ using System; +using Matrix_App.PregeneratedMods.reflection; using static Matrix_App.GifGeneratorUtils; namespace Matrix_App.PregeneratedMods { public sealed class Boxblur : MatrixGifGenerator { - [UiDescriptionAttribute(title: "Blur size", description: "The side length of the bounding square used to blur in pixels")] - public int blurSize = 2; + [UiWidget] + [UiDescription(title: "Blur size", description: "The side length of the bounding square used to blur in pixels")] + private int blurSize = 2; protected override void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b) { diff --git a/Matrix App/PregeneratedMods/ColorAdjust.cs b/Matrix App/PregeneratedMods/ColorAdjust.cs index 3a6599e..da01c83 100644 --- a/Matrix App/PregeneratedMods/ColorAdjust.cs +++ b/Matrix App/PregeneratedMods/ColorAdjust.cs @@ -1,47 +1,58 @@ using System; -using System.Collections.Generic; -using System.Text; +using Matrix_App.PregeneratedMods.reflection; using static Matrix_App.GifGeneratorUtils; namespace Matrix_App.PregeneratedMods { - public sealed class ColorAdjust : MatrixGifGenerator + public class ColorAdjust : MatrixGifGenerator { - [UiDescriptionAttribute(title: "Tone offset", description: "Sets an additional offset to the pixels hue")] - public float hueOffset = 0.0f; - [UiDescriptionAttribute(title: "Saturation boost", description: "Decreases or increases saturation")] - public float saturationBoost = 0.5f; - [UiDescriptionAttribute(title: "Brightness boost", description: "Decreases or increases brightness")] - public float valueBoost = 0.5f; + [UiWidget] + [UiDescription(title: "Tone offset", description: "Sets an additional offset to the pixels hue")] + private float hueOffset = 0.0f; + + [UiWidget] + [UiDescription(title: "Saturation boost", description: "Decreases or increases saturation")] + private float saturationBoost = 0.5f; + + [UiWidget] + [UiDescription(title: "Brightness boost", description: "Decreases or increases brightness")] + private float valueBoost = 0.5f; - [UiDescriptionAttribute(title: "Red boost", description: "Decreases or increases Red")] - public float redBoost = 0.5f; - [UiDescriptionAttribute(title: "Green boost", description: "Decreases or increases Green")] - public float greenBoost = 0.5f; - [UiDescriptionAttribute(title: "Blue boost", description: "Decreases or increases Blue")] - public float blueBoost = 0.5f; + [UiWidget] + [UiDescription(title: "Red boost", description: "Decreases or increases Red")] + private float redBoost = 0.5f; + + [UiWidget] + [UiDescription(title: "Green boost", description: "Decreases or increases Green")] + private float greenBoost = 0.5f; + + [UiWidget] + [UiDescription(title: "Blue boost", description: "Decreases or increases Blue")] + private float blueBoost = 0.5f; - private float boost(float x, float y) + private static float Boost(float x, float y) { return Math.Clamp(x + (y - 0.5f) * 2.0f, 0.0f, 1.0f); } protected override void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b) { - SampleFrame(actualStore, frame, x, y, width, out float tr, out float tg, out float tb); + SampleFrame(actualStore!, frame, x, y, width, out float tr, out float tg, out float tb); + // Adjust HSV HsvFromRgb(tr, tg, tb, out float h, out float s, out float value); h = h / 360.0f + hueOffset; h = (h - MathF.Floor(h)) * 360.0f; - s = boost(s, saturationBoost); - value = boost(value, valueBoost); + s = Boost(s, saturationBoost); + value = Boost(value, valueBoost); + // Adjust RGB RgbFromHsv(h, s, value, out tr, out tg, out tb); - r = boost(tr, redBoost); - g = boost(tg, greenBoost); - b = boost(tb, blueBoost); + r = Boost(tr, redBoost); + g = Boost(tg, greenBoost); + b = Boost(tb, blueBoost); } } } diff --git a/Matrix App/PregeneratedMods/Grayscale.cs b/Matrix App/PregeneratedMods/Grayscale.cs index df83745..9510639 100644 --- a/Matrix App/PregeneratedMods/Grayscale.cs +++ b/Matrix App/PregeneratedMods/Grayscale.cs @@ -1,18 +1,17 @@ -using System; -using System.Collections.Generic; -using System.Text; +using Matrix_App.PregeneratedMods.reflection; using static Matrix_App.GifGeneratorUtils; namespace Matrix_App.PregeneratedMods { public sealed class Grayscale : MatrixGifGenerator { - [UiDescriptionAttribute(title: "use Luminance", description: "Use luminance as defined by ITU-R BT.709 as grayscale output")] - public bool byLuminance = false; + [UiWidget] + [UiDescription(title: "use Luminance", description: "Use luminance as defined by ITU-R BT.709 as grayscale output")] + private bool byLuminance = false; protected override void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b) { - SampleFrame(actualStore, frame, x, y, width, out float lr, out float lg, out float lb); + SampleFrame(actualStore!, frame, x, y, width, out float lr, out float lg, out float lb); if (byLuminance) { diff --git a/Matrix App/PregeneratedMods/Invert.cs b/Matrix App/PregeneratedMods/Invert.cs index bbe149d..c1e285d 100644 --- a/Matrix App/PregeneratedMods/Invert.cs +++ b/Matrix App/PregeneratedMods/Invert.cs @@ -1,19 +1,16 @@ -using System; -using System.Collections.Generic; -using System.Text; -using static Matrix_App.GifGeneratorUtils; +using static Matrix_App.GifGeneratorUtils; namespace Matrix_App.PregeneratedMods { - class Invert : MatrixGifGenerator + public sealed class Invert : MatrixGifGenerator { protected override void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b) { - SampleFrame(actualStore, frame, x, y, width, out float lr, out float lg, out float lb); + SampleFrame(actualStore!, frame, x, y, width, out float lr, out float lg, out float lb); - r = 1- lr; - g = 1 -lg; - b = 1 -lb; + r = 1 - lr; + g = 1 - lg; + b = 1 - lb; } } } diff --git a/Matrix App/PregeneratedMods/Rain.cs b/Matrix App/PregeneratedMods/Rain.cs index e368b7a..07d1c79 100644 --- a/Matrix App/PregeneratedMods/Rain.cs +++ b/Matrix App/PregeneratedMods/Rain.cs @@ -6,38 +6,38 @@ namespace Matrix_App.PregeneratedMods { public sealed class Rain : MatrixGifGenerator { - private float Fract(float x) + private static float Fract(float x) { return x - MathF.Floor(x); } - private float Step(float x, float y) + private static float Step(float x, float y) { return y > x ? 1.0f : 0.0f; } - private float Shower(float u, float v, float x, float y, float t, float frame) + private static float Shower(float u, float v, float x, float y, float t, float frame) { - float movY = Fract(v - frame * t + y + MathF.Sin(u * 5.0f) * 0.3f); + var movY = Fract(v - frame * t + y + MathF.Sin(u * 5.0f) * 0.3f); - float opacityX = Step(0.7f, Fract((u + x) * 93.0f)); - float opacityY = Step(0.6f, movY); + var opacityX = Step(0.7f, Fract((u + x) * 93.0f)); + var opacityY = Step(0.6f, movY); - float drop = MathF.Pow(movY, 6.0f); + var drop = MathF.Pow(movY, 6.0f); return opacityX * opacityY * drop; } protected override void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b) { - float time = frame / (totalFrames * 0.5f); + var time = frame / (totalFrames * 0.5f); - float s1 = Shower(u, v, 0.00f, 0.0f, 1.0f, time); - float s2 = Shower(u, v, 3.11f, 0.5f, 1.0f, time); - float s3 = Shower(u, v, 3.40f, 0.2f, 0.6f, time); - float s4 = Shower(u, v, 3.20f, 0.7f, 0.6f, time); + var s1 = Shower(u, v, 0.00f, 0.0f, 1.0f, time); + var s2 = Shower(u, v, 3.11f, 0.5f, 1.0f, time); + var s3 = Shower(u, v, 3.40f, 0.2f, 0.6f, time); + var s4 = Shower(u, v, 3.20f, 0.7f, 0.6f, time); - float skyLight = (Fract(MathF.Sin(u * v + v) * 67128.0f + time) * 0.3f + 0.7f) * (1.3f - v); + var skyLight = (Fract(MathF.Sin(u * v + v) * 67128.0f + time) * 0.3f + 0.7f) * (1.3f - v); r = skyLight * 0.1f; g = skyLight * 0.2f; diff --git a/Matrix App/PregeneratedMods/RandomPixels.cs b/Matrix App/PregeneratedMods/RandomPixels.cs index 33c6e58..b443af8 100644 --- a/Matrix App/PregeneratedMods/RandomPixels.cs +++ b/Matrix App/PregeneratedMods/RandomPixels.cs @@ -1,22 +1,24 @@ using System; +using Matrix_App.PregeneratedMods.reflection; namespace Matrix_App.PregeneratedMods { public class RandomPixels : MatrixGifGenerator { - [UiDescriptionAttribute(title: "Seed", description: "Just a seed for a bad deterministic random function")] - public int seed = 0; + [UiWidget] + [UiDescription(title: "Seed", description: "Just a seed for a bad deterministic random function")] + private int seed = 0; protected override void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b) { - r = next(frame, x, y); - g = next(frame, x, y + 67); - b = next(frame, x, y + 34968); + r = Next(frame, x, y); + g = Next(frame, x, y + 67); + b = Next(frame, x, y + 34968); } - private float next(int frame, int x, int y) + private float Next(int frame, int x, int y) { - float k = MathF.Sin(frame * 2356f + (x + y) * 5334f + (y * x) * 534f + 78.0f + seed * 435f) * 567f; + var k = MathF.Sin(frame * 2356f + (x + y) * 5334f + (y * x) * 534f + 78.0f + seed * 435f) * 567f; return k - MathF.Floor(k); } } diff --git a/Matrix App/PregeneratedMods/SimpleRainbow.cs b/Matrix App/PregeneratedMods/SimpleRainbow.cs index 926c341..ada4f9a 100644 --- a/Matrix App/PregeneratedMods/SimpleRainbow.cs +++ b/Matrix App/PregeneratedMods/SimpleRainbow.cs @@ -1,24 +1,28 @@ using System; +using Matrix_App.PregeneratedMods.reflection; using static Matrix_App.GifGeneratorUtils; namespace Matrix_App.PregeneratedMods { - public class SimpleRainbow : MatrixGifGenerator + public sealed class SimpleRainbow : MatrixGifGenerator { + [UiWidget] [UiDescription(title: "Radial", description: "Uses the angle to alter hues")] - public bool radial = false; + private bool radial = false; + [UiWidget] [UiDescription(title: "Saturation", description: "Overall saturation")] - public float saturation = 1.0f; + private float saturation = 1.0f; + + [UiWidget] [UiDescription(title: "Brightness", description: "Overall brightness")] - public float value = 1.0f; + private float value = 1.0f; + + [UiWidget] [UiDescription(title: "Hue rotation", description: "Offset for hue calculation")] - public float rotation = 0.0f; + private float rotation = 0.0f; - protected override void ColorFragment(in int x, in int y, - in float u, in float v, - in int frame, - out float r, out float g, out float b) + protected override void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b) { if (radial) { diff --git a/Matrix App/PregeneratedMods/Spiral.cs b/Matrix App/PregeneratedMods/Spiral.cs index 4bbf311..d099fa6 100644 --- a/Matrix App/PregeneratedMods/Spiral.cs +++ b/Matrix App/PregeneratedMods/Spiral.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Text; namespace Matrix_App.PregeneratedMods { @@ -14,18 +12,18 @@ namespace Matrix_App.PregeneratedMods return clamp(v,0.,1.); } */ - private float SpiralCurve(float s, float t, float time) + private static float SpiralCurve(float s, float t, float time) { - float r = MathF.Sqrt(s * s + t * t); - float a = MathF.Atan2(t, s); - float v = MathF.Sin(50 * (MathF.Sqrt(r) - 0.02f * a - time)); + var r = MathF.Sqrt(s * s + t * t); + var a = MathF.Atan2(t, s); + var v = MathF.Sin(50 * (MathF.Sqrt(r) - 0.02f * a - time)); return v; } protected override void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b) { - float sp = SpiralCurve((u - 0.5f) * 0.1f, (v - 0.5f) * 0.1f, frame / (float) totalFrames); + var sp = SpiralCurve((u - 0.5f) * 0.1f, (v - 0.5f) * 0.1f, frame / (float) totalFrames); r = sp; g = sp; diff --git a/Matrix App/PregeneratedMods/UV-Grid.cs b/Matrix App/PregeneratedMods/UV-Grid.cs index 8d03f59..90da0f7 100644 --- a/Matrix App/PregeneratedMods/UV-Grid.cs +++ b/Matrix App/PregeneratedMods/UV-Grid.cs @@ -1,16 +1,15 @@ -using System; -using System.Collections.Generic; -using System.Text; + +using System; namespace Matrix_App.PregeneratedMods { - class UvGrid : MatrixGifGenerator + public sealed class UvGrid : MatrixGifGenerator { protected override void ColorFragment(in int x, in int y, in float u, in float v, in int frame, out float r, out float g, out float b) { r = u; g = v; - b = 0.5f; + b = MathF.Sin(frame / (float) totalFrames * MathF.PI); } } } diff --git a/Matrix App/PregeneratedMods/reflection/FieldWidgets.cs b/Matrix App/PregeneratedMods/reflection/FieldWidgets.cs new file mode 100644 index 0000000..70c1a36 --- /dev/null +++ b/Matrix App/PregeneratedMods/reflection/FieldWidgets.cs @@ -0,0 +1,134 @@ +using System; +using System.Drawing; +using System.Reflection; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace Matrix_App.PregeneratedMods.reflection +{ + public static class FieldWidgets + { + public delegate void UiEvent(); + + public static Control[]? GetFieldWidget(FieldInfo field, object instance, UiEvent eventTask) + { + if (field.IsStatic || !field.IsDefined(typeof(UiWidget))) + return null; + + // fallback + return GetDefaultFieldUi(field, field.GetValue(instance), (instance as MatrixGifGenerator)!, eventTask); + } + + private static Control[] GetDefaultFieldUi(FieldInfo field, object? fieldValue, MatrixGifGenerator generator, UiEvent eventTask) + { + var panel = new FlowLayoutPanel + { + FlowDirection = FlowDirection.LeftToRight, + Anchor = AnchorStyles.Top | AnchorStyles.Left, + AutoSize = true + }; + + var title = GetBetterFieldName(field.Name); + + var description = new Label(); + + if (Attribute.GetCustomAttribute(field, typeof(UiDescriptionAttribute)) is UiDescriptionAttribute desc) + { + title = desc.title; + description.Text = desc.description; + description.ForeColor = Color.Gray; + description.Height += 10; + description.AutoSize = true; + } + + panel.Controls.Add(new Label + { + TextAlign = ContentAlignment.MiddleLeft, + Text = title, + Dock = DockStyle.Left, + Anchor = AnchorStyles.Top | AnchorStyles.Left, + Width = 100 + }); + + switch (fieldValue) + { + case int value: + { + var upDown = new NumericUpDown + { + Dock = DockStyle.Fill, + Anchor = AnchorStyles.Top | AnchorStyles.Right, + Width = 360, + Value = value + }; + upDown.ValueChanged += (a, b) => + { + field.SetValue(generator, (int) upDown.Value); + eventTask(); + }; + + panel.Controls.Add(upDown); + break; + } + case bool value1: + { + var upDown = new CheckBox + { + Dock = DockStyle.Fill, Anchor = AnchorStyles.Top | AnchorStyles.Right, Checked = value1 + }; + upDown.CheckedChanged += (a, b) => + { + field.SetValue(generator, upDown.Checked); + eventTask(); + }; + + panel.Controls.Add(upDown); + break; + } + case float floatValue: + { + var upDown = new TrackBar + { + Dock = DockStyle.Fill, + Anchor = AnchorStyles.Top | AnchorStyles.Right, + Maximum = 100, + Minimum = 0, + Value = (int) (floatValue * 100.0f), + TickFrequency = 10, + Width = 360 + }; + upDown.ValueChanged += (a, b) => + { + field.SetValue(generator, upDown.Value / 1e2f); + eventTask(); + }; + + panel.Controls.Add(upDown); + break; + } + } + + return new Control[] {description, panel}; + } + + /// + /// Generates a new name from standard class names + /// Example: SomeClassA --> some class a + /// + /// + /// + public static string GetBetterFieldName(string name) + { + var groups = Regex.Match(name, @"([A-Z]*[a-z]+)([A-Z]+[a-z]*)|(.*)").Groups; + + var newName = ""; + + for (var c = 1; c < groups.Count; c++) + { + newName += groups[c].Value.ToLower() + " "; + } + + return newName; + } + } +} \ No newline at end of file diff --git a/Matrix App/PregeneratedMods/UIDescriptionAttribute.cs b/Matrix App/PregeneratedMods/reflection/UIDescriptionAttribute.cs similarity index 87% rename from Matrix App/PregeneratedMods/UIDescriptionAttribute.cs rename to Matrix App/PregeneratedMods/reflection/UIDescriptionAttribute.cs index 0d7fb06..e397eaa 100644 --- a/Matrix App/PregeneratedMods/UIDescriptionAttribute.cs +++ b/Matrix App/PregeneratedMods/reflection/UIDescriptionAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Matrix_App.PregeneratedMods +namespace Matrix_App.PregeneratedMods.reflection { [AttributeUsage(AttributeTargets.Field)] public class UiDescriptionAttribute : Attribute diff --git a/Matrix App/PregeneratedMods/reflection/UIWidget.cs b/Matrix App/PregeneratedMods/reflection/UIWidget.cs new file mode 100644 index 0000000..8cf7380 --- /dev/null +++ b/Matrix App/PregeneratedMods/reflection/UIWidget.cs @@ -0,0 +1,9 @@ +using System; + +namespace Matrix_App.PregeneratedMods.reflection +{ + [AttributeUsage(AttributeTargets.Field)] + public class UiWidget : Attribute + { + } +} \ No newline at end of file diff --git a/Matrix App/Properties/Resources.resx b/Matrix App/Properties/Resources.resx index 8432c96..a0f0cc4 100644 --- a/Matrix App/Properties/Resources.resx +++ b/Matrix App/Properties/Resources.resx @@ -143,6 +143,6 @@ ..\resources\frosch.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\pfüsikuh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Splashcreen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/Matrix App/Resources/Splashcreen.png b/Matrix App/Resources/Splashcreen.png new file mode 100644 index 0000000..c9bad80 Binary files /dev/null and b/Matrix App/Resources/Splashcreen.png differ diff --git a/Matrix App/Resources/pfüsikuh.png b/Matrix App/Resources/pfüsikuh.png deleted file mode 100644 index bd297f2..0000000 Binary files a/Matrix App/Resources/pfüsikuh.png and /dev/null differ diff --git a/Matrix App/ThreadQueue.cs b/Matrix App/ThreadQueue.cs index 6b0618b..7299cd2 100644 --- a/Matrix App/ThreadQueue.cs +++ b/Matrix App/ThreadQueue.cs @@ -25,7 +25,7 @@ namespace Matrix_App { Name = name, IsBackground = true, - Priority = ThreadPriority.BelowNormal + Priority = ThreadPriority.Normal }; thread.Start(); } @@ -56,7 +56,7 @@ namespace Matrix_App { try { - Thread.Sleep(500); + Thread.Sleep(10); } catch(ThreadInterruptedException) { thread.Interrupt(); diff --git a/Matrix App/Utils.cs b/Matrix App/Utils.cs index e9e02b1..8aa3e37 100644 --- a/Matrix App/Utils.cs +++ b/Matrix App/Utils.cs @@ -1,10 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; +using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; -using System.Text; using static Matrix_App.Defaults; namespace Matrix_App @@ -81,9 +77,9 @@ namespace Matrix_App int index = (x + y * width) * Bpp; image.SetPixel(x, y, Color.FromArgb( - (byte) buffer[index + 0], - (byte) buffer[index + 1], - (byte) buffer[index + 2] + buffer[index + 0], + buffer[index + 1], + buffer[index + 2] )); } } diff --git a/Matrix App/bin/Debug/netcoreapp3.1/Matrix App.dll b/Matrix App/bin/Debug/netcoreapp3.1/Matrix App.dll index e55c3a3..b216662 100644 Binary files a/Matrix App/bin/Debug/netcoreapp3.1/Matrix App.dll and b/Matrix App/bin/Debug/netcoreapp3.1/Matrix App.dll differ diff --git a/Matrix App/bin/Debug/netcoreapp3.1/Matrix App.pdb b/Matrix App/bin/Debug/netcoreapp3.1/Matrix App.pdb index bf8aba4..14fb5c6 100644 Binary files a/Matrix App/bin/Debug/netcoreapp3.1/Matrix App.pdb and b/Matrix App/bin/Debug/netcoreapp3.1/Matrix App.pdb differ diff --git a/Matrix App/bin/Release/netcoreapp3.1/Matrix App.deps.json b/Matrix App/bin/Release/PainterlyUNO/Matrix App.deps.json similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/Matrix App.deps.json rename to Matrix App/bin/Release/PainterlyUNO/Matrix App.deps.json diff --git a/Matrix App/bin/Release/PainterlyUNO/Matrix App.dll b/Matrix App/bin/Release/PainterlyUNO/Matrix App.dll new file mode 100644 index 0000000..71ca798 Binary files /dev/null and b/Matrix App/bin/Release/PainterlyUNO/Matrix App.dll differ diff --git a/Matrix App/bin/Release/netcoreapp3.1/Matrix App.exe b/Matrix App/bin/Release/PainterlyUNO/Matrix App.exe similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/Matrix App.exe rename to Matrix App/bin/Release/PainterlyUNO/Matrix App.exe diff --git a/Matrix App/bin/Release/PainterlyUNO/Matrix App.pdb b/Matrix App/bin/Release/PainterlyUNO/Matrix App.pdb new file mode 100644 index 0000000..d82a2c8 Binary files /dev/null and b/Matrix App/bin/Release/PainterlyUNO/Matrix App.pdb differ diff --git a/Matrix App/bin/Release/netcoreapp3.1/Matrix App.runtimeconfig.dev.json b/Matrix App/bin/Release/PainterlyUNO/Matrix App.runtimeconfig.dev.json similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/Matrix App.runtimeconfig.dev.json rename to Matrix App/bin/Release/PainterlyUNO/Matrix App.runtimeconfig.dev.json diff --git a/Matrix App/bin/Release/netcoreapp3.1/Matrix App.runtimeconfig.json b/Matrix App/bin/Release/PainterlyUNO/Matrix App.runtimeconfig.json similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/Matrix App.runtimeconfig.json rename to Matrix App/bin/Release/PainterlyUNO/Matrix App.runtimeconfig.json diff --git a/Matrix App/bin/Release/netcoreapp3.1/Microsoft.Win32.Registry.dll b/Matrix App/bin/Release/PainterlyUNO/Microsoft.Win32.Registry.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/Microsoft.Win32.Registry.dll rename to Matrix App/bin/Release/PainterlyUNO/Microsoft.Win32.Registry.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/System.CodeDom.dll b/Matrix App/bin/Release/PainterlyUNO/System.CodeDom.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/System.CodeDom.dll rename to Matrix App/bin/Release/PainterlyUNO/System.CodeDom.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/System.IO.Ports.dll b/Matrix App/bin/Release/PainterlyUNO/System.IO.Ports.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/System.IO.Ports.dll rename to Matrix App/bin/Release/PainterlyUNO/System.IO.Ports.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/System.Management.dll b/Matrix App/bin/Release/PainterlyUNO/System.Management.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/System.Management.dll rename to Matrix App/bin/Release/PainterlyUNO/System.Management.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/System.Security.AccessControl.dll b/Matrix App/bin/Release/PainterlyUNO/System.Security.AccessControl.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/System.Security.AccessControl.dll rename to Matrix App/bin/Release/PainterlyUNO/System.Security.AccessControl.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/System.Security.Principal.Windows.dll b/Matrix App/bin/Release/PainterlyUNO/System.Security.Principal.Windows.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/System.Security.Principal.Windows.dll rename to Matrix App/bin/Release/PainterlyUNO/System.Security.Principal.Windows.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll b/Matrix App/bin/Release/PainterlyUNO/runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll rename to Matrix App/bin/Release/PainterlyUNO/runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/runtimes/win/lib/netcoreapp2.0/System.Management.dll b/Matrix App/bin/Release/PainterlyUNO/runtimes/win/lib/netcoreapp2.0/System.Management.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/runtimes/win/lib/netcoreapp2.0/System.Management.dll rename to Matrix App/bin/Release/PainterlyUNO/runtimes/win/lib/netcoreapp2.0/System.Management.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll b/Matrix App/bin/Release/PainterlyUNO/runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll rename to Matrix App/bin/Release/PainterlyUNO/runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll b/Matrix App/bin/Release/PainterlyUNO/runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll rename to Matrix App/bin/Release/PainterlyUNO/runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll b/Matrix App/bin/Release/PainterlyUNO/runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll rename to Matrix App/bin/Release/PainterlyUNO/runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/runtimes/win/lib/netstandard2.0/System.IO.Ports.dll b/Matrix App/bin/Release/PainterlyUNO/runtimes/win/lib/netstandard2.0/System.IO.Ports.dll similarity index 100% rename from Matrix App/bin/Release/netcoreapp3.1/runtimes/win/lib/netstandard2.0/System.IO.Ports.dll rename to Matrix App/bin/Release/PainterlyUNO/runtimes/win/lib/netstandard2.0/System.IO.Ports.dll diff --git a/Matrix App/bin/Release/netcoreapp3.1/Matrix App.dll b/Matrix App/bin/Release/netcoreapp3.1/Matrix App.dll deleted file mode 100644 index afc9b8a..0000000 Binary files a/Matrix App/bin/Release/netcoreapp3.1/Matrix App.dll and /dev/null differ diff --git a/Matrix App/bin/Release/netcoreapp3.1/Matrix App.pdb b/Matrix App/bin/Release/netcoreapp3.1/Matrix App.pdb deleted file mode 100644 index a5747d3..0000000 Binary files a/Matrix App/bin/Release/netcoreapp3.1/Matrix App.pdb and /dev/null differ diff --git a/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.csproj.CoreCompileInputs.cache b/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.csproj.CoreCompileInputs.cache index 5c4c3e9..45eb382 100644 --- a/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.csproj.CoreCompileInputs.cache +++ b/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -0e5f843b45897d8b4a3e6250399d748fbf87d606 +8b5c196e3fff81055e69fb849ea66d181b78d0ae diff --git a/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.csproj.GenerateResource.cache b/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.csproj.GenerateResource.cache index 144f2a0..4ec333a 100644 Binary files a/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.csproj.GenerateResource.cache and b/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.csproj.GenerateResource.cache differ diff --git a/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.dll b/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.dll index e55c3a3..b216662 100644 Binary files a/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.dll and b/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.dll differ diff --git a/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.pdb b/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.pdb index bf8aba4..14fb5c6 100644 Binary files a/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.pdb and b/Matrix App/obj/Debug/netcoreapp3.1/Matrix App.pdb differ diff --git a/Matrix App/obj/Debug/netcoreapp3.1/Matrix_App.Properties.Resources.resources b/Matrix App/obj/Debug/netcoreapp3.1/Matrix_App.Properties.Resources.resources index ba39fa7..e2f0e8b 100644 Binary files a/Matrix App/obj/Debug/netcoreapp3.1/Matrix_App.Properties.Resources.resources and b/Matrix App/obj/Debug/netcoreapp3.1/Matrix_App.Properties.Resources.resources differ diff --git a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.GeneratedMSBuildEditorConfig.editorconfig b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..65e3f0f --- /dev/null +++ b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,8 @@ +is_global = true +build_property.TargetFramework = netcoreapp3.1 +build_property.TargetPlatformMinVersion = 7.0 +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.PublishSingleFile = +build_property.IncludeAllContentForSelfExtract = +build_property._SupportedPlatformList = Android,iOS,Linux,macOS,Windows diff --git a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.assets.cache b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.assets.cache index 605ea3a..2c4246a 100644 Binary files a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.assets.cache and b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.assets.cache differ diff --git a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.CoreCompileInputs.cache b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.CoreCompileInputs.cache index 5fc9b46..e929bec 100644 --- a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.CoreCompileInputs.cache +++ b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -d3ff948d4c991bd397c33d4f33adca3dc910573c +d74f4da8e70ffef608fcbd55775b064d0e57aa85 diff --git a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.FileListAbsolute.txt b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.FileListAbsolute.txt index 2413ae2..9a29f83 100644 --- a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.FileListAbsolute.txt +++ b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.FileListAbsolute.txt @@ -59,3 +59,35 @@ F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matri F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5_RC3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.dll F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5_RC3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.pdb F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5_RC3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.genruntimeconfig.cache +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\Matrix App.exe +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\Matrix App.deps.json +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\Matrix App.runtimeconfig.json +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\Matrix App.runtimeconfig.dev.json +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\Matrix App.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\Matrix App.pdb +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\Microsoft.Win32.Registry.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\System.CodeDom.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\System.IO.Ports.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\System.Management.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\System.Security.AccessControl.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\System.Security.Principal.Windows.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\runtimes\win\lib\netstandard2.0\Microsoft.Win32.Registry.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\runtimes\win\lib\netstandard2.0\System.IO.Ports.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\runtimes\win\lib\netcoreapp2.0\System.Management.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\runtimes\win\lib\netcoreapp2.0\System.Security.AccessControl.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\runtimes\unix\lib\netcoreapp2.1\System.Security.Principal.Windows.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\bin\Release\netcoreapp3.1\runtimes\win\lib\netcoreapp2.1\System.Security.Principal.Windows.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.csprojAssemblyReference.cache +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix_App.ColorWheel.resources +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix_App.Matrix.resources +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix_App.MatrixDesignerMain.resources +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix_App.Properties.Resources.resources +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.csproj.GenerateResource.cache +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.GeneratedMSBuildEditorConfig.editorconfig +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.AssemblyInfoInputs.cache +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.AssemblyInfo.cs +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.csproj.CoreCompileInputs.cache +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.csproj.CopyComplete +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.dll +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.pdb +F:\Content\Schule\BBS-T1-Ludwigshafen\Klasse 12\Info Lk\bulli\Neopixel\App\Matrix_App_V3.5.3\Matrix App\obj\Release\netcoreapp3.1\Matrix App.genruntimeconfig.cache diff --git a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.GenerateResource.cache b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.GenerateResource.cache index 828b50f..d36cb09 100644 Binary files a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.GenerateResource.cache and b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csproj.GenerateResource.cache differ diff --git a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csprojAssemblyReference.cache b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csprojAssemblyReference.cache index e2eff0f..e55e4fe 100644 Binary files a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csprojAssemblyReference.cache and b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.csprojAssemblyReference.cache differ diff --git a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.dll b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.dll index afc9b8a..71ca798 100644 Binary files a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.dll and b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.dll differ diff --git a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.genruntimeconfig.cache b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.genruntimeconfig.cache index 3bd1f00..1b224bb 100644 --- a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.genruntimeconfig.cache +++ b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.genruntimeconfig.cache @@ -1 +1 @@ -4853592640e68725119800981d81bdaa9a74ded2 +515eead76ebf0b414116e9f97a694849e0a06bf3 diff --git a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.pdb b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.pdb index a5747d3..d82a2c8 100644 Binary files a/Matrix App/obj/Release/netcoreapp3.1/Matrix App.pdb and b/Matrix App/obj/Release/netcoreapp3.1/Matrix App.pdb differ diff --git a/Matrix App/obj/Release/netcoreapp3.1/Matrix_App.ColorWheel.resources b/Matrix App/obj/Release/netcoreapp3.1/Matrix_App.ColorWheel.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/Matrix App/obj/Release/netcoreapp3.1/Matrix_App.ColorWheel.resources differ diff --git a/Matrix App/obj/Release/netcoreapp3.1/Matrix_App.Properties.Resources.resources b/Matrix App/obj/Release/netcoreapp3.1/Matrix_App.Properties.Resources.resources index 7f4bf7b..c973ec8 100644 Binary files a/Matrix App/obj/Release/netcoreapp3.1/Matrix_App.Properties.Resources.resources and b/Matrix App/obj/Release/netcoreapp3.1/Matrix_App.Properties.Resources.resources differ