diff --git a/Editor/New SSQE/Font/FontRenderer.cs b/Editor/New SSQE/Font/FontRenderer.cs index d7824214..1411d7c5 100644 --- a/Editor/New SSQE/Font/FontRenderer.cs +++ b/Editor/New SSQE/Font/FontRenderer.cs @@ -14,11 +14,11 @@ internal class FontRenderer {"square", new Tuple(TextureUnit.Texture14, 14) }, {"squareo", new Tuple(TextureUnit.Texture13, 13) } }; - private static readonly Dictionary fonts = new() + private static readonly Dictionary fonts = new() { - {"main", new FtFont("main", FontIndex["main"].Item1) }, - {"square", new FtFont("square", FontIndex["square"].Item1) }, - {"squareo", new FtFont("squareo", FontIndex["squareo"].Item1) } + {"main", new StbFont("main", FontIndex["main"].Item1) }, + {"square", new StbFont("square", FontIndex["square"].Item1) }, + {"squareo", new StbFont("squareo", FontIndex["squareo"].Item1) } }; public static Vector4[] Print(float x, float y, string text, int fontSize, string font) @@ -42,7 +42,7 @@ public static void SetActive(string font) GL.Uniform1i(location, FontIndex[font].Item2); location = GL.GetUniformLocation(Shader.FontTexProgram, "TexLookup"); - GL.Uniform4f(location, FtFont.CharRange, fonts[font].AtlasMetrics); + GL.Uniform4f(location, StbFont.CharRange, fonts[font].AtlasMetrics); location = GL.GetUniformLocation(Shader.FontTexProgram, "CharSize"); GL.Uniform2f(location, fonts[font].CharSize); diff --git a/Editor/New SSQE/Font/FtFont.cs b/Editor/New SSQE/Font/StbFont.cs similarity index 70% rename from Editor/New SSQE/Font/FtFont.cs rename to Editor/New SSQE/Font/StbFont.cs index fec044dc..17f321dd 100644 --- a/Editor/New SSQE/Font/FtFont.cs +++ b/Editor/New SSQE/Font/StbFont.cs @@ -1,136 +1,141 @@ using System; -using System.Linq; using OpenTK.Graphics; using OpenTK.Graphics.OpenGL; using OpenTK.Mathematics; -using SharpFont; using SkiaSharp; +using System.IO; +using StbTrueTypeSharp; +using System.Linq; namespace New_SSQE { - internal class FtFont + internal unsafe class StbFont { // Standard ASCII range: 128 (why was the old editor's range 400) public static readonly int CharRange = 128; // Character size initially rendered to be scaled later // Greater values are smoother but take more memory private static readonly int OriginSize = 128; - // Pixels between each character in rendered layout, needs to be above 0 to ensure no ghost pixels appear while rendering + // Pixels between each character in rendered layout + // Needs to be above 0 to ensure no ghost pixels appear while rendering // Recommended: 4 private static readonly int CharSpacing = 4; private readonly int[] Extents; private readonly int[] Bearings; private readonly int[] YOffsets; + private readonly SKBitmap[] Bitmaps; private readonly SKBitmap Bitmap; - + public Vector2 CharSize; public Vector4[] AtlasMetrics; public VertexArrayHandle VaO; public BufferHandle[] VbOs; public BufferHandle StaticVbO; - private readonly int BmpWidth; - private readonly int BmpHeight; - private readonly int _baseline; + private readonly int _charSize; private readonly TextureHandle _handle; public TextureHandle Handle => _handle; // Change unit to store multiple fonts without having to switch between handles while rendering - // Otherwise extract the handle via FTFont.Handle and manage switching elsewhere - public FtFont(string font, TextureUnit unit = TextureUnit.Texture15) + // Otherwise extract the handle via StbFont.Handle and manage switching elsewhere + public unsafe StbFont(string font, TextureUnit unit = TextureUnit.Texture15) { - Library library = new(); - Face face = new(library, $"assets/fonts/{font}.ttf"); - - SKBitmap[] Bitmaps; - - face.SetCharSize(OriginSize, OriginSize, 96, 96); - face.SetPixelSizes((uint)OriginSize, (uint)OriginSize); + // Some font size discrepancies exist between FreeType and stb_truetype but the majority of the loader is the same - Bitmaps = new SKBitmap[CharRange]; + YOffsets = new int[CharRange]; Extents = new int[CharRange]; Bearings = new int[CharRange]; - YOffsets = new int[CharRange]; + Bitmaps = new SKBitmap[CharRange]; - // Render each character in the given range individually and store its metrics in various arrays - for (uint c = 0; c < CharRange; c++) - { - var index = face.GetCharIndex(c); + AtlasMetrics = new Vector4[CharRange]; + + var fontInfo = StbTrueType.CreateFont(File.ReadAllBytes($"assets/fonts/{font}.ttf"), 0); + var scale = StbTrueType.stbtt_ScaleForPixelHeight(fontInfo, OriginSize); - face.LoadGlyph(index, LoadFlags.Render | LoadFlags.Default, LoadTarget.Normal); + int ascent, descent, lineGap; + StbTrueType.stbtt_GetFontVMetrics(fontInfo, &ascent, &descent, &lineGap); - FTBitmap glyph = face.Glyph.Bitmap; - int size = glyph.Width * glyph.Rows; + // Render each character in the given range individually + for (int i = 0; i < CharRange; i++) + { + int width, height, xoffset, yoffset; + byte* glyph = StbTrueType.stbtt_GetCodepointBitmap(fontInfo, scale, scale, i, &width, &height, &xoffset, &yoffset); - Bitmaps[c] = ConvertToSKBitmap(glyph); - Extents[c] = face.Glyph.Bitmap.Width + face.Glyph.BitmapLeft; - Bearings[c] = face.Glyph.BitmapLeft; + Bitmaps[i] = ConvertToSKBitmap(glyph, width, height); + Extents[i] = width + xoffset; + Bearings[i] = xoffset; - if (size <= 0 && c == 32) - Extents[c] = OriginSize / 4; + if (width * height <= 0 && i == 32) + Extents[i] = OriginSize / 4; else - YOffsets[c] = face.Glyph.BitmapTop; + YOffsets[i] = yoffset; } - _baseline = (int)(face.Size.Metrics.Ascender - face.Size.Metrics.Descender / 2); + _baseline = (int)(scale * ascent); var maxCharX = Extents.Max(); - var maxCharY = face.Glyph.Metrics.VerticalAdvance + YOffsets.Max(); - int px = (int)(maxCharX * maxCharY); + var maxCharY = (int)(scale * (ascent - descent)) + YOffsets.Max(); + int px = maxCharX * maxCharY; + CharSize = new(maxCharX, maxCharY); var texSize = Math.Sqrt(px * CharRange); var texX = (int)(texSize / maxCharX + 1) * (maxCharX + CharSpacing); - var texY = (int)(texSize / maxCharY + 1) * ((int)maxCharY + CharSpacing); + var texY = (int)(texSize / maxCharY + 1) * (maxCharY + CharSpacing); var info = new SKImageInfo(texX + 1, texY); var surface = SKSurface.Create(info); var canvas = surface.Canvas; float currentX = 0; - float currentY = YOffsets.Max(); + float currentY = 0; // Combine each character's bitmap on a main canvas to later store into memory + int charsPerLine = (int)(info.Width / (CharSize.X + CharSpacing)); + float txW = CharSize.X / info.Width; + float txH = CharSize.Y / info.Height; + for (uint c = 0; c < CharRange; c++) { if (currentX + maxCharX > texX) { currentX = 0; - currentY += (int)maxCharY + CharSpacing; + currentY += maxCharY + CharSpacing; } if (Bitmaps[c].ByteCount > 0) - canvas.DrawBitmap(Bitmaps[c], currentX, currentY - YOffsets[c]); + canvas.DrawBitmap(Bitmaps[c], currentX, currentY + _baseline + YOffsets[c]); currentX += maxCharX + CharSpacing; Bitmaps[c].Dispose(); - } - Bitmap = SKBitmap.FromImage(surface.Snapshot()); - GC.KeepAlive(Bitmap); - CharSize = new(maxCharX, (int)maxCharY); + float txX = c % charsPerLine * (CharSize.X + CharSpacing); + float txY = c / charsPerLine * (CharSize.Y + CharSpacing); - BmpWidth = Bitmap.Width; - BmpHeight = Bitmap.Height; + AtlasMetrics[c] = (txX / info.Width, txY / info.Height, txW, txH); + } - // put font texture metrics into array for uploading to a font shader - AtlasMetrics = new Vector4[CharRange]; + _baseline -= (int)(scale * descent); - int charsPerLine = (int)(BmpWidth / (CharSize.X + CharSpacing)); - float txW = CharSize.X / BmpWidth; - float txH = CharSize.Y / BmpHeight; + Bitmap = SKBitmap.FromImage(surface.Snapshot()); + GC.KeepAlive(Bitmap); - for (int i = 0; i < CharRange; i++) - { - float txX = (i % charsPerLine) * (CharSize.X + CharSpacing); - float txY = (i / charsPerLine) * (CharSize.Y + CharSpacing); + fontInfo.Dispose(); - AtlasMetrics[i] = (txX / BmpWidth, txY / BmpHeight, txW, txH); - } + // Store the font texture as a png in the current directory - for debugging + /* + using (var image = surface.Snapshot()) + using (var imgData = image.Encode(SKEncodedImageFormat.Png, 80)) + using (var stream = File.OpenWrite("font_texture.png")) + imgData.SaveTo(stream); + */ - // prep instance data in shader + canvas.Dispose(); + surface.Dispose(); + + // Prep instance data in shader VbOs = new BufferHandle[2]; VaO = GL.GenVertexArray(); @@ -169,42 +174,22 @@ public FtFont(string font, TextureUnit unit = TextureUnit.Texture15) GL.BindBuffer(BufferTargetARB.ArrayBuffer, BufferHandle.Zero); GL.BindVertexArray(VertexArrayHandle.Zero); - - // Store the font texture as a png in the current directory - for debugging - /* - using (var image = surface.Snapshot()) - using (var data = image.Encode(SKEncodedImageFormat.Png, 80)) - using (var stream = File.OpenWrite("font_texture.png")) - data.SaveTo(stream); - */ - - - face.Dispose(); - library.Dispose(); - - // Load the texture into memory _handle = GL.GenTexture(); GL.ActiveTexture(unit); GL.BindTexture(TextureTarget.Texture2d, _handle); - GL.TexImage2D(TextureTarget.Texture2d, 0, InternalFormat.Rgba, BmpWidth, BmpHeight, 0, + GL.TexImage2D(TextureTarget.Texture2d, 0, InternalFormat.Rgba, Bitmap.Width, Bitmap.Height, 0, PixelFormat.Bgra, PixelType.UnsignedByte, Bitmap.GetPixels()); GL.TexParameteri(TextureTarget.Texture2d, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); GL.TexParameteri(TextureTarget.Texture2d, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); - - canvas.Dispose(); - surface.Dispose(); } - // Converts alpha map to RGBa - private static SKBitmap ConvertToSKBitmap(FTBitmap bitmap) + // Converts alpha bitmap to RGBa + private static SKBitmap ConvertToSKBitmap(byte* bytes, int width, int height) { - byte[] bytes = bitmap.Buffer != IntPtr.Zero ? bitmap.BufferData : Array.Empty(); - int width = bitmap.Pitch, height = bitmap.Rows; - var pixels = new SKColor[width * height]; for (int row = 0; row < height; row++) @@ -220,7 +205,7 @@ private static SKBitmap ConvertToSKBitmap(FTBitmap bitmap) } } - return new SKBitmap(bitmap.Pitch, bitmap.Rows) { Pixels = pixels }; + return new SKBitmap(width, height) { Pixels = pixels }; } // Returns baseline of font scaled depending on font size diff --git a/Editor/New SSQE/GUI/GuiWindowCreate.cs b/Editor/New SSQE/GUI/GuiWindowCreate.cs index 7fe725a9..ae034288 100644 --- a/Editor/New SSQE/GUI/GuiWindowCreate.cs +++ b/Editor/New SSQE/GUI/GuiWindowCreate.cs @@ -6,12 +6,12 @@ namespace New_SSQE.GUI { internal class GuiWindowCreate : GuiWindow { - private readonly GuiLabel Label = new(832, 478, 256, 20, "Input Audio ID", 24); - private readonly GuiTextbox IDBox = new(832, 508, 256, 64, "", 24, false); + private readonly GuiLabel Label = new(832, 478, 256, 20, "Input Audio ID", 30); + private readonly GuiTextbox IDBox = new(832, 508, 256, 64, "", 30, false); - private readonly GuiButton CreateButton = new(832, 592, 256, 64, 0, "CREATE", 32); - private readonly GuiButton ImportButton = new(832, 666, 256, 64, 1, "IMPORT FILE", 32); - private readonly GuiButton BackButton = new(832, 740, 256, 64, 2, "BACK", 32); + private readonly GuiButton CreateButton = new(832, 592, 256, 64, 0, "CREATE", 38); + private readonly GuiButton ImportButton = new(832, 666, 256, 64, 1, "IMPORT FILE", 38); + private readonly GuiButton BackButton = new(832, 740, 256, 64, 2, "BACK", 38); public GuiWindowCreate() : base(0, 0, MainWindow.Instance.ClientSize.X, MainWindow.Instance.ClientSize.Y) { diff --git a/Editor/New SSQE/GUI/GuiWindowEditor.cs b/Editor/New SSQE/GUI/GuiWindowEditor.cs index a50836f0..2945872b 100644 --- a/Editor/New SSQE/GUI/GuiWindowEditor.cs +++ b/Editor/New SSQE/GUI/GuiWindowEditor.cs @@ -11,9 +11,9 @@ namespace New_SSQE.GUI { internal class GuiWindowEditor : GuiWindow { - private readonly GuiButton CopyButton = new(0, 0, 301, 42, 0, "COPY MAP DATA", 21, true); - private readonly GuiButton BackButton = new(0, 0, 235, 42, 1, "BACK TO MENU", 21, true); - private readonly GuiButton SaveButton = new(0, 0, 61, 42, 24, "SAVE", 21, true); + private readonly GuiButton CopyButton = new(0, 0, 301, 42, 0, "COPY MAP DATA", 27, true); + private readonly GuiButton BackButton = new(0, 0, 235, 42, 1, "BACK TO MENU", 27, true); + private readonly GuiButton SaveButton = new(0, 0, 61, 42, 24, "SAVE", 27, true); private readonly GuiSlider Tempo = new(0, 0, 0, 0, "tempo", false); private readonly GuiSlider MasterVolume = new(0, 0, 0, 0, "masterVolume", true); @@ -22,106 +22,106 @@ internal class GuiWindowEditor : GuiWindow private readonly GuiSlider QuantumSnapDivisor = new(0, 0, 0, 0, "quantumSnapping", false); public readonly GuiSliderTimeline Timeline = new(0, 0, 0, 0, false); private readonly GuiButtonPlayPause PlayPause = new(0, 0, 0, 0, 2); - private readonly GuiCheckbox AutoAdvance = new(0, 0, 0, 0, "autoAdvance", "Auto-Advance", 25); - - private readonly GuiButton OptionsNav = new(10, 60, 400, 50, 3, "OPTIONS >", 25, false, true); - private readonly GuiCheckbox Autoplay = new(10, 130, 30, 30, "autoplay", "Autoplay", 20, false, true); - private readonly GuiCheckbox ApproachSquares = new(10, 170, 30, 30, "approachSquares", "Approach Squares", 20, false, true); - private readonly GuiCheckbox GridNumbers = new(10, 210, 30, 30, "gridNumbers", "Grid Numbers", 20, false, true); - private readonly GuiCheckbox GridLetters = new(10, 250, 30, 30, "gridLetters", "Grid Letters", 20, false, true); - private readonly GuiCheckbox Quantum = new(10, 290, 30, 30, "enableQuantum", "Quantum", 20, false, true); - private readonly GuiCheckbox Numpad = new(10, 330, 30, 30, "numpad", "Use Numpad", 20, false, true); - private readonly GuiCheckbox QuantumGridLines = new(10, 370, 30, 30, "quantumGridLines", "Quantum Grid Lines", 20, false, true); - private readonly GuiCheckbox QuantumGridSnap = new(10, 410, 30, 30, "quantumGridSnap", "Snap to Grid", 20, false, true); - private readonly GuiCheckbox Metronome = new(10, 450, 30, 30, "metronome", "Metronome", 20, false, true); - private readonly GuiCheckbox SeparateClickTools = new(10, 490, 30, 30, "separateClickTools", "Separate Click Tools", 20, false, true); - private readonly GuiCheckbox JumpOnPaste = new(10, 530, 30, 30, "jumpPaste", "Jump on Paste", 20, false, true); + private readonly GuiCheckbox AutoAdvance = new(0, 0, 0, 0, "autoAdvance", "Auto-Advance", 31); + + private readonly GuiButton OptionsNav = new(10, 60, 400, 50, 3, "OPTIONS >", 31, false, true); + private readonly GuiCheckbox Autoplay = new(10, 130, 30, 30, "autoplay", "Autoplay", 26, false, true); + private readonly GuiCheckbox ApproachSquares = new(10, 170, 30, 30, "approachSquares", "Approach Squares", 26, false, true); + private readonly GuiCheckbox GridNumbers = new(10, 210, 30, 30, "gridNumbers", "Grid Numbers", 26, false, true); + private readonly GuiCheckbox GridLetters = new(10, 250, 30, 30, "gridLetters", "Grid Letters", 26, false, true); + private readonly GuiCheckbox Quantum = new(10, 290, 30, 30, "enableQuantum", "Quantum", 26, false, true); + private readonly GuiCheckbox Numpad = new(10, 330, 30, 30, "numpad", "Use Numpad", 26, false, true); + private readonly GuiCheckbox QuantumGridLines = new(10, 370, 30, 30, "quantumGridLines", "Quantum Grid Lines", 26, false, true); + private readonly GuiCheckbox QuantumGridSnap = new(10, 410, 30, 30, "quantumGridSnap", "Snap to Grid", 26, false, true); + private readonly GuiCheckbox Metronome = new(10, 450, 30, 30, "metronome", "Metronome", 26, false, true); + private readonly GuiCheckbox SeparateClickTools = new(10, 490, 30, 30, "separateClickTools", "Separate Click Tools", 26, false, true); + private readonly GuiCheckbox JumpOnPaste = new(10, 530, 30, 30, "jumpPaste", "Jump on Paste", 26, false, true); private readonly GuiSlider TrackHeight = new(378, 384, 32, 224, "trackHeight", false, false, true); private readonly GuiSlider TrackCursorPos = new(10, 596, 400, 32, "cursorPos", false, false, true); private readonly GuiSlider ApproachRate = new(378, 124, 32, 224, "approachRate", true, false, true); - private readonly GuiButton TimingNav = new(10, 120, 400, 50, 4, "TIMING >", 25, false, true); - private readonly GuiTextbox ExportOffset = new(10, 210, 128, 40, "0", 25, true, false, true, "exportOffset"); - private readonly GuiTextbox SfxOffset = new(10, 285, 128, 40, "0", 25, true, false, true, "sfxOffset"); - private readonly GuiButton UseCurrentMs = new(143, 210, 192, 40, 5, "USE CURRENT MS", 21, false, true); - private readonly GuiButton OpenTimings = new(10, 335, 256, 40, 6, "OPEN BPM SETUP", 21, false, true); - private readonly GuiButton ImportIni = new(10, 385, 256, 40, 16, "IMPORT INI", 21, false, true); - - private readonly GuiButton PatternsNav = new(10, 180, 400, 50, 8, "PATTERNS >", 25, false, true); - private readonly GuiButton HFlip = new(10, 250, 256, 40, 9, "HORIZONTAL FLIP", 21, false, true); - private readonly GuiButton VFlip = new(10, 300, 256, 40, 10, "VERTICAL FLIP", 21, false, true); - private readonly GuiButton StoreNodes = new(10, 360, 256, 40, 11, "STORE NODES", 21, false, true); - private readonly GuiButton ClearNodes = new(10, 410, 256, 40, 12, "CLEAR NODES", 21, false, true); - private readonly GuiCheckbox CurveBezier = new(10, 460, 40, 40, "curveBezier", "Curve Bezier", 25, false, true); - private readonly GuiTextbox BezierBox = new(10, 532, 128, 40, "4", 25, true, false, true, "bezierDivisor"); - private readonly GuiButton BezierButton = new(143, 532, 128, 40, 13, "DRAW", 21, false, true); - public readonly GuiTextbox RotateBox = new(10, 607, 128, 40, "90", 25, true, false, true); - private readonly GuiButton RotateButton = new(143, 607, 128, 40, 14, "ROTATE", 21, false, true); - public readonly GuiTextbox ScaleBox = new(10, 682, 128, 40, "150", 25, true, false, true); - private readonly GuiButton ScaleButton = new(143, 682, 128, 40, 15, "SCALE", 21, false, true); - private readonly GuiCheckbox ApplyOnPaste = new(10, 732, 40, 40, "applyOnPaste", "Apply Rotate/Scale On Paste", 25, false, true); - - private readonly GuiButton ReviewNav = new(10, 240, 400, 50, 19, "REVIEW >", 25, false, true); - private readonly GuiButton OpenBookmarks = new(10, 310, 256, 40, 7, "EDIT BOOKMARKS", 21, false, true); - private readonly GuiButton CopyBookmarks = new(10, 360, 256, 40, 20, "COPY BOOKMARKS", 21, false, true); - private readonly GuiButton PasteBookmarks = new(10, 410, 256, 40, 21, "PASTE BOOKMARKS", 21, false, true); - private readonly GuiButton ExportSSPMButton = new(10, 460, 256, 40, 23, "EXPORT SSPM", 21, false, true); - - private readonly GuiButton PlayerNav = new(10, 300, 400, 50, 17, "PLAYER >", 25, false, true); - private readonly GuiButtonList CameraMode = new(10, 395, 148, 40, "cameraMode", 21, false, true); - private readonly GuiTextbox NoteScale = new(168, 395, 108, 40, "1", 25, true, false, true, "noteScale", "main", false, true); - private readonly GuiTextbox CursorScale = new(285, 395, 108, 40, "1", 25, true, false, true, "cursorScale", "main", false, true); - private readonly GuiCheckbox LockCursor = new(10, 445, 40, 40, "lockCursor", "Lock Cursor Within Grid", 25, false, true); - private readonly GuiTextbox Sensitivity = new(10, 520, 108, 40, "1", 25, true, false, true, "sensitivity", "main", false, true); - private readonly GuiTextbox Parallax = new(128, 520, 108, 40, "1", 25, true, false, true, "parallax", "main", false, true); - private readonly GuiTextbox FieldOfView = new(245, 520, 108, 40, "70", 25, true, false, true, "fov", "main", false, true); - private readonly GuiTextbox ApproachDistance = new(10, 595, 128, 40, "1", 25, true, false, true, "approachDistance", "main", false, true); - private readonly GuiTextbox HitWindow = new(225, 595, 128, 40, "55", 25, true, false, true, "hitWindow", "main", false, true); + private readonly GuiButton TimingNav = new(10, 120, 400, 50, 4, "TIMING >", 31, false, true); + private readonly GuiTextbox ExportOffset = new(10, 210, 128, 40, "0", 31, true, false, true, "exportOffset"); + private readonly GuiTextbox SfxOffset = new(10, 285, 128, 40, "0", 31, true, false, true, "sfxOffset"); + private readonly GuiButton UseCurrentMs = new(143, 210, 192, 40, 5, "USE CURRENT MS", 27, false, true); + private readonly GuiButton OpenTimings = new(10, 335, 256, 40, 6, "OPEN BPM SETUP", 27, false, true); + private readonly GuiButton ImportIni = new(10, 385, 256, 40, 16, "IMPORT INI", 27, false, true); + + private readonly GuiButton PatternsNav = new(10, 180, 400, 50, 8, "PATTERNS >", 31, false, true); + private readonly GuiButton HFlip = new(10, 250, 256, 40, 9, "HORIZONTAL FLIP", 27, false, true); + private readonly GuiButton VFlip = new(10, 300, 256, 40, 10, "VERTICAL FLIP", 27, false, true); + private readonly GuiButton StoreNodes = new(10, 360, 256, 40, 11, "STORE NODES", 27, false, true); + private readonly GuiButton ClearNodes = new(10, 410, 256, 40, 12, "CLEAR NODES", 27, false, true); + private readonly GuiCheckbox CurveBezier = new(10, 460, 40, 40, "curveBezier", "Curve Bezier", 31, false, true); + private readonly GuiTextbox BezierBox = new(10, 532, 128, 40, "4", 31, true, false, true, "bezierDivisor"); + private readonly GuiButton BezierButton = new(143, 532, 128, 40, 13, "DRAW", 27, false, true); + public readonly GuiTextbox RotateBox = new(10, 607, 128, 40, "90", 31, true, false, true); + private readonly GuiButton RotateButton = new(143, 607, 128, 40, 14, "ROTATE", 27, false, true); + public readonly GuiTextbox ScaleBox = new(10, 682, 128, 40, "150", 31, true, false, true); + private readonly GuiButton ScaleButton = new(143, 682, 128, 40, 15, "SCALE", 27, false, true); + private readonly GuiCheckbox ApplyOnPaste = new(10, 732, 40, 40, "applyOnPaste", "Apply Rotate/Scale On Paste", 31, false, true); + + private readonly GuiButton ReviewNav = new(10, 240, 400, 50, 19, "REVIEW >", 31, false, true); + private readonly GuiButton OpenBookmarks = new(10, 310, 256, 40, 7, "EDIT BOOKMARKS", 27, false, true); + private readonly GuiButton CopyBookmarks = new(10, 360, 256, 40, 20, "COPY BOOKMARKS", 27, false, true); + private readonly GuiButton PasteBookmarks = new(10, 410, 256, 40, 21, "PASTE BOOKMARKS", 27, false, true); + private readonly GuiButton ExportSSPMButton = new(10, 460, 256, 40, 23, "EXPORT SSPM", 27, false, true); + + private readonly GuiButton PlayerNav = new(10, 300, 400, 50, 17, "PLAYER >", 31, false, true); + private readonly GuiButtonList CameraMode = new(10, 395, 148, 40, "cameraMode", 27, false, true); + private readonly GuiTextbox NoteScale = new(168, 395, 108, 40, "1", 31, true, false, true, "noteScale", "main", false, true); + private readonly GuiTextbox CursorScale = new(285, 395, 108, 40, "1", 31, true, false, true, "cursorScale", "main", false, true); + private readonly GuiCheckbox LockCursor = new(10, 445, 40, 40, "lockCursor", "Lock Cursor Within Grid", 31, false, true); + private readonly GuiTextbox Sensitivity = new(10, 520, 108, 40, "1", 31, true, false, true, "sensitivity", "main", false, true); + private readonly GuiTextbox Parallax = new(128, 520, 108, 40, "1", 31, true, false, true, "parallax", "main", false, true); + private readonly GuiTextbox FieldOfView = new(245, 520, 108, 40, "70", 31, true, false, true, "fov", "main", false, true); + private readonly GuiTextbox ApproachDistance = new(10, 595, 128, 40, "1", 31, true, false, true, "approachDistance", "main", false, true); + private readonly GuiTextbox HitWindow = new(225, 595, 128, 40, "55", 31, true, false, true, "hitWindow", "main", false, true); private readonly GuiSlider PlayerApproachRate = new(10, 670, 400, 32, "playerApproachRate", false, false, true); - private readonly GuiCheckbox ApproachFade = new(10, 710, 40, 40, "approachFade", "Enable Approach Fade", 25, false, true); - private readonly GuiCheckbox GridGuides = new(10, 760, 40, 40, "gridGuides", "Show Grid Guides", 25, false, true); - private readonly GuiCheckbox FromStart = new(10, 810, 40, 40, "fromStart", "Play From Start", 25, false, true); - private readonly GuiButton PlayMap = new(10, 860, 256, 40, 18, "PLAY MAP", 21, false, true); - - private readonly GuiLabel ToastLabel = new(0, 0, 0, 0, "", 36); - - private readonly GuiLabel ZoomLabel = new(420, 60, 75, 30, "Zoom: ", 24, true, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel ZoomValueLabel = new(495, 60, 75, 30, "", 24, true, true, "main", false, Settings.settings["color2"]); - private readonly GuiLabel ClickModeLabel = new(0, 0, 301, 42, "", 24, true, false, "main", false, Settings.settings["color1"]); - private readonly GuiLabel BeatDivisorLabel = new(0, 0, 0, 30, "", 24, true, true, "main", true, Settings.settings["color1"]); - private readonly GuiLabel SnappingLabel = new(0, 0, 0, 30, "", 24, true, true, "main", true, Settings.settings["color1"]); - - private readonly GuiLabel TempoLabel = new(0, 0, 0, 30, "", 24, true, false, "main", true, Settings.settings["color1"]); - private readonly GuiLabel MusicLabel = new(0, 0, 0, 30, "Music", 18, true, false, "main", true, Settings.settings["color1"]); - private readonly GuiLabel MusicValueLabel = new(0, 0, 0, 30, "", 18, true, false, "main", true, Settings.settings["color1"]); - private readonly GuiLabel SfxLabel = new(0, 0, 0, 30, "SFX", 18, true, false, "main", true, Settings.settings["color1"]); - private readonly GuiLabel SfxValueLabel = new(0, 0, 0, 30, "", 18, true, false, "main", true, Settings.settings["color1"]); - - private readonly GuiLabel CurrentTimeLabel = new(0, 0, 0, 30, "", 20, true, false, "main", true, Settings.settings["color1"]); - private readonly GuiLabel CurrentMsLabel = new(0, 0, 0, 30, "", 20, true, false, "main", true, Settings.settings["color1"]); - private readonly GuiLabel TotalTimeLabel = new(0, 0, 0, 30, "", 20, true, false, "main", true, Settings.settings["color1"]); - private readonly GuiLabel NotesLabel = new(0, 0, 0, 30, "", 24, true, false, "main", true, Settings.settings["color1"]); - - private readonly GuiLabel TrackHeightLabel = new(220, 576, 158, 30, "", 22, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel CursorPosLabel = new(10, 576, 158, 30, "", 22, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel ApproachRateLabel = new(200, 308, 158, 30, "", 22, false, true, "main", false, Settings.settings["color1"]); - - private readonly GuiLabel ExportOffsetLabel = new(10, 183, 158, 30, "Export Offset[ms]:", 24, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel SfxOffsetLabel = new(10, 258, 158, 30, "SFX Offset[ms]:", 24, false, true, "main", false, Settings.settings["color1"]); - - private readonly GuiLabel DrawBezierLabel = new(10, 505, 158, 30, "Draw Bezier with Divisor:", 24, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel RotateLabel = new(10, 580, 158, 30, "Rotate by Degrees:", 24, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel ScaleLabel = new(10, 655, 158, 30, "Scale by Percent:", 24, false, true, "main", false, Settings.settings["color1"]); - - private readonly GuiLabel CameraModeLabel = new(10, 368, 128, 30, "Camera Mode:", 24, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel NoteScaleLabel = new(168, 368, 128, 30, "Note Size:", 24, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel CursorScaleLabel = new(285, 368, 128, 30, "Cursor Size:", 24, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel SensitivityLabel = new(10, 493, 128, 30, "Sensitivity:", 24, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel ParallaxLabel = new(128, 493, 128, 30, "Parallax:", 24, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel FieldOfViewLabel = new(245, 493, 128, 30, "FOV:", 24, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel ApproachDistanceLabel = new(10, 568, 158, 30, "Approach Distance:", 24, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel HitWindowLabel = new(225, 568, 158, 30, "Hit Window[ms]:", 24, false, true, "main", false, Settings.settings["color1"]); - private readonly GuiLabel PlayerApproachRateLabel = new(10, 643, 158, 30, "", 24, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiCheckbox ApproachFade = new(10, 710, 40, 40, "approachFade", "Enable Approach Fade", 31, false, true); + private readonly GuiCheckbox GridGuides = new(10, 760, 40, 40, "gridGuides", "Show Grid Guides", 31, false, true); + private readonly GuiCheckbox FromStart = new(10, 810, 40, 40, "fromStart", "Play From Start", 31, false, true); + private readonly GuiButton PlayMap = new(10, 860, 256, 40, 18, "PLAY MAP", 27, false, true); + + private readonly GuiLabel ToastLabel = new(0, 0, 0, 0, "", 42); + + private readonly GuiLabel ZoomLabel = new(420, 60, 75, 30, "Zoom: ", 30, true, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel ZoomValueLabel = new(495, 60, 75, 30, "", 30, true, true, "main", false, Settings.settings["color2"]); + private readonly GuiLabel ClickModeLabel = new(0, 0, 301, 42, "", 30, true, false, "main", false, Settings.settings["color1"]); + private readonly GuiLabel BeatDivisorLabel = new(0, 0, 0, 30, "", 30, true, true, "main", true, Settings.settings["color1"]); + private readonly GuiLabel SnappingLabel = new(0, 0, 0, 30, "", 30, true, true, "main", true, Settings.settings["color1"]); + + private readonly GuiLabel TempoLabel = new(0, 0, 0, 30, "", 30, true, false, "main", true, Settings.settings["color1"]); + private readonly GuiLabel MusicLabel = new(0, 0, 0, 30, "Music", 24, true, false, "main", true, Settings.settings["color1"]); + private readonly GuiLabel MusicValueLabel = new(0, 0, 0, 30, "", 24, true, false, "main", true, Settings.settings["color1"]); + private readonly GuiLabel SfxLabel = new(0, 0, 0, 30, "SFX", 24, true, false, "main", true, Settings.settings["color1"]); + private readonly GuiLabel SfxValueLabel = new(0, 0, 0, 30, "", 24, true, false, "main", true, Settings.settings["color1"]); + + private readonly GuiLabel CurrentTimeLabel = new(0, 0, 0, 30, "", 26, true, false, "main", true, Settings.settings["color1"]); + private readonly GuiLabel CurrentMsLabel = new(0, 0, 0, 30, "", 26, true, false, "main", true, Settings.settings["color1"]); + private readonly GuiLabel TotalTimeLabel = new(0, 0, 0, 30, "", 26, true, false, "main", true, Settings.settings["color1"]); + private readonly GuiLabel NotesLabel = new(0, 0, 0, 30, "", 30, true, false, "main", true, Settings.settings["color1"]); + + private readonly GuiLabel TrackHeightLabel = new(220, 576, 158, 30, "", 28, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel CursorPosLabel = new(10, 576, 158, 30, "", 28, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel ApproachRateLabel = new(200, 308, 158, 30, "", 28, false, true, "main", false, Settings.settings["color1"]); + + private readonly GuiLabel ExportOffsetLabel = new(10, 183, 158, 30, "Export Offset[ms]:", 30, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel SfxOffsetLabel = new(10, 258, 158, 30, "SFX Offset[ms]:", 30, false, true, "main", false, Settings.settings["color1"]); + + private readonly GuiLabel DrawBezierLabel = new(10, 505, 158, 30, "Draw Bezier with Divisor:", 30, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel RotateLabel = new(10, 580, 158, 30, "Rotate by Degrees:", 30, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel ScaleLabel = new(10, 655, 158, 30, "Scale by Percent:", 30, false, true, "main", false, Settings.settings["color1"]); + + private readonly GuiLabel CameraModeLabel = new(10, 368, 128, 30, "Camera Mode:", 30, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel NoteScaleLabel = new(168, 368, 128, 30, "Note Size:", 30, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel CursorScaleLabel = new(285, 368, 128, 30, "Cursor Size:", 30, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel SensitivityLabel = new(10, 493, 128, 30, "Sensitivity:", 30, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel ParallaxLabel = new(128, 493, 128, 30, "Parallax:", 30, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel FieldOfViewLabel = new(245, 493, 128, 30, "FOV:", 30, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel ApproachDistanceLabel = new(10, 568, 158, 30, "Approach Distance:", 30, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel HitWindowLabel = new(225, 568, 158, 30, "Hit Window[ms]:", 30, false, true, "main", false, Settings.settings["color1"]); + private readonly GuiLabel PlayerApproachRateLabel = new(10, 643, 158, 30, "", 30, false, true, "main", false, Settings.settings["color1"]); private float toastTime = 0f; private string navEnabled = ""; @@ -768,19 +768,19 @@ public override void OnResize(Vector2i size) BeatDivisorLabel.Rect.Location = new PointF(BeatSnapDivisor.Rect.X + BeatSnapDivisor.Rect.Width / 2f, BeatSnapDivisor.Rect.Y - 20f); SnappingLabel.Rect.Location = new PointF(QuantumSnapDivisor.Rect.X + QuantumSnapDivisor.Rect.Width / 2f, QuantumSnapDivisor.Rect.Y - 20f); - TempoLabel.Rect.Location = new PointF(Tempo.Rect.X + Tempo.Rect.Width / 2f, Tempo.Rect.Bottom - 28f); - MusicLabel.Rect.Location = new PointF(MasterVolume.Rect.X + MasterVolume.Rect.Width / 2f, MasterVolume.Rect.Y - 6f); - SfxLabel.Rect.Location = new PointF(SfxVolume.Rect.X + SfxVolume.Rect.Width / 2f, SfxVolume.Rect.Y - 6f); + TempoLabel.Rect.Location = new PointF(Tempo.Rect.X + Tempo.Rect.Width / 2f, Tempo.Rect.Bottom - 32f); + MusicLabel.Rect.Location = new PointF(MasterVolume.Rect.X + MasterVolume.Rect.Width / 2f, MasterVolume.Rect.Y - 10f); + SfxLabel.Rect.Location = new PointF(SfxVolume.Rect.X + SfxVolume.Rect.Width / 2f, SfxVolume.Rect.Y - 10f); MusicValueLabel.Rect.Location = new PointF(MasterVolume.Rect.X + MasterVolume.Rect.Width / 2f, MasterVolume.Rect.Bottom - 20f); SfxValueLabel.Rect.Location = new PointF(SfxVolume.Rect.X + SfxVolume.Rect.Width / 2f, SfxVolume.Rect.Bottom - 20f); var currentTime = Settings.settings["currentTime"]; var progress = currentTime.Value / currentTime.Max; - CurrentTimeLabel.Rect.Location = new PointF(Timeline.Rect.X + Timeline.Rect.Height / 2f, Timeline.Rect.Bottom - 28f); + CurrentTimeLabel.Rect.Location = new PointF(Timeline.Rect.X + Timeline.Rect.Height / 2f, Timeline.Rect.Bottom - 32f); CurrentMsLabel.Rect.Location = new PointF(Timeline.Rect.X + Timeline.Rect.Height / 2f + (Timeline.Rect.Width - Timeline.Rect.Height) * progress, Timeline.Rect.Y - 4f); - TotalTimeLabel.Rect.Location = new PointF(Timeline.Rect.X - Timeline.Rect.Height / 2f + Timeline.Rect.Width, Timeline.Rect.Bottom - 28f); - NotesLabel.Rect.Location = new PointF(Timeline.Rect.X + Timeline.Rect.Width / 2f, Timeline.Rect.Bottom - 28f); + TotalTimeLabel.Rect.Location = new PointF(Timeline.Rect.X - Timeline.Rect.Height / 2f + Timeline.Rect.Width, Timeline.Rect.Bottom - 32f); + NotesLabel.Rect.Location = new PointF(Timeline.Rect.X + Timeline.Rect.Width / 2f, Timeline.Rect.Bottom - 32f); TimingNav.Update(); PatternsNav.Update(); diff --git a/Editor/New SSQE/GUI/GuiWindowKeybinds.cs b/Editor/New SSQE/GUI/GuiWindowKeybinds.cs index 0dfdf56f..08a51599 100644 --- a/Editor/New SSQE/GUI/GuiWindowKeybinds.cs +++ b/Editor/New SSQE/GUI/GuiWindowKeybinds.cs @@ -7,88 +7,88 @@ namespace New_SSQE.GUI { internal class GuiWindowKeybinds : GuiWindow { - private readonly GuiButton BackButton = new(655, 930, 600, 100, 0, "RETURN TO SETTINGS", 48, false, false, "square"); - - private readonly GuiLabel HFlipLabel = new(150, 49, 128, 26, "Horizontal Flip", 24, false, false, "main", false); - private readonly GuiLabel HFlipCAS = new(426, 83, 256, 40, "", 24, false, false, "main", false); - private readonly GuiTextbox HFlipBox = new(150, 75, 128, 40, "", 24, false, false, false, "hFlip", "main", true); - private readonly GuiButton HFlipReset = new(288, 75, 128, 40, 1, "RESET", 24); - - private readonly GuiLabel VFlipLabel = new(150, 119, 128, 26, "Vertical Flip", 24, false, false, "main", false); - private readonly GuiLabel VFlipCAS = new(426, 153, 256, 40, "", 24, false, false, "main", false); - private readonly GuiTextbox VFlipBox = new(150, 145, 128, 40, "", 24, false, false, false, "vFlip", "main", true); - private readonly GuiButton VFlipReset = new(288, 145, 128, 40, 2, "RESET", 24); - - private readonly GuiLabel SwitchClickLabel = new(150, 189, 128, 26, "Switch Click Function", 24, false, false, "main", false); - private readonly GuiLabel SwitchClickCAS = new(426, 223, 256, 40, "", 24, false, false, "main", false); - private readonly GuiTextbox SwitchClickBox = new(150, 215, 128, 40, "", 24, false, false, false, "switchClickTool", "main", true); - private readonly GuiButton SwitchClickReset = new(288, 215, 128, 40, 3, "RESET", 24); - - private readonly GuiLabel ToggleQuantumLabel = new(150, 259, 128, 26, "Toggle Quantum", 24, false, false, "main", false); - private readonly GuiLabel ToggleQuantumCAS = new(426, 293, 256, 40, "", 24, false, false, "main", false); - private readonly GuiTextbox ToggleQuantumBox = new(150, 285, 128, 40, "", 24, false, false, false, "quantum", "main", true); - private readonly GuiButton ToggleQuantumReset = new(288, 285, 128, 40, 4, "RESET", 24); - - private readonly GuiLabel OpenTimingsLabel = new(150, 329, 128, 26, "Open Timings", 24, false, false, "main", false); - private readonly GuiLabel OpenTimingsCAS = new(426, 363, 256, 40, "", 24, false, false, "main", false); - private readonly GuiTextbox OpenTimingsBox = new(150, 355, 128, 40, "", 24, false, false, false, "openTimings", "main", true); - private readonly GuiButton OpenTimingsReset = new(288, 355, 128, 40, 5, "RESET", 24); - - private readonly GuiLabel OpenBookmarksLabel = new(150, 399, 128, 26, "Open Bookmarks", 24, false, false, "main", false); - private readonly GuiLabel OpenBookmarksCAS = new(426, 433, 256, 40, "", 24, false, false, "main", false); - private readonly GuiTextbox OpenBookmarksBox = new(150, 425, 128, 40, "", 24, false, false, false, "openBookmarks", "main", true); - private readonly GuiButton OpenBookmarksReset = new(288, 425, 128, 40, 6, "RESET", 24); - - private readonly GuiLabel StoreNodesLabel = new(150, 469, 128, 26, "Store Bezier Nodes", 24, false, false, "main", false); - private readonly GuiLabel StoreNodesCAS = new(426, 503, 256, 40, "", 24, false, false, "main", false); - private readonly GuiTextbox StoreNodesBox = new(150, 495, 128, 40, "", 24, false, false, false, "storeNodes", "main", true); - private readonly GuiButton StoreNodesReset = new(288, 495, 128, 40, 7, "RESET", 24); - - private readonly GuiLabel DrawBezierLabel = new(150, 539, 128, 26, "Draw Bezier Curve", 24, false, false, "main", false); - private readonly GuiLabel DrawBezierCAS = new(426, 573, 256, 40, "", 24, false, false, "main", false); - private readonly GuiTextbox DrawBezierBox = new(150, 565, 128, 40, "", 24, false, false, false, "drawBezier", "main", true); - private readonly GuiButton DrawBezierReset = new(288, 565, 128, 40, 8, "RESET", 24); - - private readonly GuiLabel AnchorNodeLabel = new(150, 609, 128, 26, "Anchor Bezier Node", 24, false, false, "main", false); - private readonly GuiLabel AnchorNodeCAS = new(426, 643, 256, 40, "", 24, false, false, "main", false); - private readonly GuiTextbox AnchorNodeBox = new(150, 635, 128, 40, "", 24, false, false, false, "anchorNode", "main", true); - private readonly GuiButton AnchorNodeReset = new(288, 635, 128, 40, 9, "RESET", 24); - - private readonly GuiLabel OpenDirectoryLabel = new(150, 679, 128, 26, "Open Directory", 24, false, false, "main", false); - private readonly GuiLabel OpenDirectoryCAS = new(426, 713, 256, 40, "", 24, false, false, "main", false); - private readonly GuiTextbox OpenDirectoryBox = new(150, 705, 128, 40, "", 24, false, false, false, "openDirectory", "main", true); - private readonly GuiButton OpenDirectoryReset = new(288, 705, 128, 40, 10, "RESET", 24); - - private readonly GuiLabel ExportSSPMLabel = new(150, 749, 128, 26, "Export SSPM", 24, false, false, "main", false); - private readonly GuiLabel ExportSSPMCAS = new(426, 783, 256, 40, "", 24, false, false, "main", false); - private readonly GuiTextbox ExportSSPMBox = new(150, 775, 128, 40, "", 24, false, false, false, "exportSSPM", "main", true); - private readonly GuiButton ExportSSPMReset = new(288, 775, 128, 40, 11, "RESET", 24); - - private readonly GuiLabel GridLabel = new(1366, 49, 128, 26, "Grid", 24, false, false, "main", false); - private readonly GuiTextbox GridTLBox = new(1366, 75, 128, 62, "", 24, false, false, false, "gridKey0", "main", true); - private readonly GuiButton GridTLReset = new(1366, 141, 128, 62, 90, "RESET", 32); - private readonly GuiTextbox GridTCBox = new(1504, 75, 128, 62, "", 24, false, false, false, "gridKey1", "main", true); - private readonly GuiButton GridTCReset = new(1504, 141, 128, 62, 91, "RESET", 32); - private readonly GuiTextbox GridTRBox = new(1642, 75, 128, 62, "", 24, false, false, false, "gridKey2", "main", true); - private readonly GuiButton GridTRReset = new(1642, 141, 128, 62, 92, "RESET", 32); - private readonly GuiTextbox GridMLBox = new(1366, 213, 128, 62, "", 24, false, false, false, "gridKey3", "main", true); - private readonly GuiButton GridMLReset = new(1366, 279, 128, 62, 93, "RESET", 32); - private readonly GuiTextbox GridMCBox = new(1504, 213, 128, 62, "", 24, false, false, false, "gridKey4", "main", true); - private readonly GuiButton GridMCReset = new(1504, 279, 128, 62, 94, "RESET", 32); - private readonly GuiTextbox GridMRBox = new(1642, 213, 128, 62, "", 24, false, false, false, "gridKey5", "main", true); - private readonly GuiButton GridMRReset = new(1642, 279, 128, 62, 95, "RESET", 32); - private readonly GuiTextbox GridBLBox = new(1366, 351, 128, 62, "", 24, false, false, false, "gridKey6", "main", true); - private readonly GuiButton GridBLReset = new(1366, 417, 128, 62, 96, "RESET", 32); - private readonly GuiTextbox GridBCBox = new(1504, 351, 128, 62, "", 24, false, false, false, "gridKey7", "main", true); - private readonly GuiButton GridBCReset = new(1504, 417, 128, 62, 97, "RESET", 32); - private readonly GuiTextbox GridBRBox = new(1642, 351, 128, 62, "", 24, false, false, false, "gridKey8", "main", true); - private readonly GuiButton GridBRReset = new(1642, 417, 128, 62, 98, "RESET", 32); - - private readonly GuiCheckbox CtrlIndicator = new(64, 828, 64, 64, "", "CTRL Held", 32); - private readonly GuiCheckbox AltIndicator = new(64, 912, 64, 64, "", "ALT Held", 32); - private readonly GuiCheckbox ShiftIndicator = new(64, 996, 64, 64, "", "SHIFT Held", 32); - - private readonly GuiLabel StaticKeysLabel = new(480, 150, 960, 40, "", 24); + private readonly GuiButton BackButton = new(655, 930, 600, 100, 0, "RETURN TO SETTINGS", 52, false, false, "square"); + + private readonly GuiLabel HFlipLabel = new(150, 49, 128, 26, "Horizontal Flip", 28, false, false, "main", false); + private readonly GuiLabel HFlipCAS = new(426, 83, 256, 40, "", 28, false, false, "main", false); + private readonly GuiTextbox HFlipBox = new(150, 75, 128, 40, "", 28, false, false, false, "hFlip", "main", true); + private readonly GuiButton HFlipReset = new(288, 75, 128, 40, 1, "RESET", 28); + + private readonly GuiLabel VFlipLabel = new(150, 119, 128, 26, "Vertical Flip", 28, false, false, "main", false); + private readonly GuiLabel VFlipCAS = new(426, 153, 256, 40, "", 28, false, false, "main", false); + private readonly GuiTextbox VFlipBox = new(150, 145, 128, 40, "", 28, false, false, false, "vFlip", "main", true); + private readonly GuiButton VFlipReset = new(288, 145, 128, 40, 2, "RESET", 28); + + private readonly GuiLabel SwitchClickLabel = new(150, 189, 128, 26, "Switch Click Function", 28, false, false, "main", false); + private readonly GuiLabel SwitchClickCAS = new(426, 223, 256, 40, "", 28, false, false, "main", false); + private readonly GuiTextbox SwitchClickBox = new(150, 215, 128, 40, "", 28, false, false, false, "switchClickTool", "main", true); + private readonly GuiButton SwitchClickReset = new(288, 215, 128, 40, 3, "RESET", 28); + + private readonly GuiLabel ToggleQuantumLabel = new(150, 259, 128, 26, "Toggle Quantum", 28, false, false, "main", false); + private readonly GuiLabel ToggleQuantumCAS = new(426, 293, 256, 40, "", 28, false, false, "main", false); + private readonly GuiTextbox ToggleQuantumBox = new(150, 285, 128, 40, "", 28, false, false, false, "quantum", "main", true); + private readonly GuiButton ToggleQuantumReset = new(288, 285, 128, 40, 4, "RESET", 28); + + private readonly GuiLabel OpenTimingsLabel = new(150, 329, 128, 26, "Open Timings", 28, false, false, "main", false); + private readonly GuiLabel OpenTimingsCAS = new(426, 363, 256, 40, "", 28, false, false, "main", false); + private readonly GuiTextbox OpenTimingsBox = new(150, 355, 128, 40, "", 28, false, false, false, "openTimings", "main", true); + private readonly GuiButton OpenTimingsReset = new(288, 355, 128, 40, 5, "RESET", 28); + + private readonly GuiLabel OpenBookmarksLabel = new(150, 399, 128, 26, "Open Bookmarks", 28, false, false, "main", false); + private readonly GuiLabel OpenBookmarksCAS = new(426, 433, 256, 40, "", 28, false, false, "main", false); + private readonly GuiTextbox OpenBookmarksBox = new(150, 425, 128, 40, "", 28, false, false, false, "openBookmarks", "main", true); + private readonly GuiButton OpenBookmarksReset = new(288, 425, 128, 40, 6, "RESET", 28); + + private readonly GuiLabel StoreNodesLabel = new(150, 469, 128, 26, "Store Bezier Nodes", 28, false, false, "main", false); + private readonly GuiLabel StoreNodesCAS = new(426, 503, 256, 40, "", 28, false, false, "main", false); + private readonly GuiTextbox StoreNodesBox = new(150, 495, 128, 40, "", 28, false, false, false, "storeNodes", "main", true); + private readonly GuiButton StoreNodesReset = new(288, 495, 128, 40, 7, "RESET", 28); + + private readonly GuiLabel DrawBezierLabel = new(150, 539, 128, 26, "Draw Bezier Curve", 28, false, false, "main", false); + private readonly GuiLabel DrawBezierCAS = new(426, 573, 256, 40, "", 28, false, false, "main", false); + private readonly GuiTextbox DrawBezierBox = new(150, 565, 128, 40, "", 28, false, false, false, "drawBezier", "main", true); + private readonly GuiButton DrawBezierReset = new(288, 565, 128, 40, 8, "RESET", 28); + + private readonly GuiLabel AnchorNodeLabel = new(150, 609, 128, 26, "Anchor Bezier Node", 28, false, false, "main", false); + private readonly GuiLabel AnchorNodeCAS = new(426, 643, 256, 40, "", 28, false, false, "main", false); + private readonly GuiTextbox AnchorNodeBox = new(150, 635, 128, 40, "", 28, false, false, false, "anchorNode", "main", true); + private readonly GuiButton AnchorNodeReset = new(288, 635, 128, 40, 9, "RESET", 28); + + private readonly GuiLabel OpenDirectoryLabel = new(150, 679, 128, 26, "Open Directory", 28, false, false, "main", false); + private readonly GuiLabel OpenDirectoryCAS = new(426, 713, 256, 40, "", 28, false, false, "main", false); + private readonly GuiTextbox OpenDirectoryBox = new(150, 705, 128, 40, "", 28, false, false, false, "openDirectory", "main", true); + private readonly GuiButton OpenDirectoryReset = new(288, 705, 128, 40, 10, "RESET", 28); + + private readonly GuiLabel ExportSSPMLabel = new(150, 749, 128, 26, "Export SSPM", 28, false, false, "main", false); + private readonly GuiLabel ExportSSPMCAS = new(426, 783, 256, 40, "", 28, false, false, "main", false); + private readonly GuiTextbox ExportSSPMBox = new(150, 775, 128, 40, "", 28, false, false, false, "exportSSPM", "main", true); + private readonly GuiButton ExportSSPMReset = new(288, 775, 128, 40, 11, "RESET", 28); + + private readonly GuiLabel GridLabel = new(1366, 49, 128, 26, "Grid", 28, false, false, "main", false); + private readonly GuiTextbox GridTLBox = new(1366, 75, 128, 62, "", 28, false, false, false, "gridKey0", "main", true); + private readonly GuiButton GridTLReset = new(1366, 141, 128, 62, 90, "RESET", 36); + private readonly GuiTextbox GridTCBox = new(1504, 75, 128, 62, "", 28, false, false, false, "gridKey1", "main", true); + private readonly GuiButton GridTCReset = new(1504, 141, 128, 62, 91, "RESET", 36); + private readonly GuiTextbox GridTRBox = new(1642, 75, 128, 62, "", 28, false, false, false, "gridKey2", "main", true); + private readonly GuiButton GridTRReset = new(1642, 141, 128, 62, 92, "RESET", 36); + private readonly GuiTextbox GridMLBox = new(1366, 213, 128, 62, "", 28, false, false, false, "gridKey3", "main", true); + private readonly GuiButton GridMLReset = new(1366, 279, 128, 62, 93, "RESET", 36); + private readonly GuiTextbox GridMCBox = new(1504, 213, 128, 62, "", 28, false, false, false, "gridKey4", "main", true); + private readonly GuiButton GridMCReset = new(1504, 279, 128, 62, 94, "RESET", 36); + private readonly GuiTextbox GridMRBox = new(1642, 213, 128, 62, "", 28, false, false, false, "gridKey5", "main", true); + private readonly GuiButton GridMRReset = new(1642, 279, 128, 62, 95, "RESET", 36); + private readonly GuiTextbox GridBLBox = new(1366, 351, 128, 62, "", 28, false, false, false, "gridKey6", "main", true); + private readonly GuiButton GridBLReset = new(1366, 417, 128, 62, 96, "RESET", 36); + private readonly GuiTextbox GridBCBox = new(1504, 351, 128, 62, "", 28, false, false, false, "gridKey7", "main", true); + private readonly GuiButton GridBCReset = new(1504, 417, 128, 62, 97, "RESET", 36); + private readonly GuiTextbox GridBRBox = new(1642, 351, 128, 62, "", 28, false, false, false, "gridKey8", "main", true); + private readonly GuiButton GridBRReset = new(1642, 417, 128, 62, 98, "RESET", 36); + + private readonly GuiCheckbox CtrlIndicator = new(64, 828, 64, 64, "", "CTRL Held", 36); + private readonly GuiCheckbox AltIndicator = new(64, 912, 64, 64, "", "ALT Held", 36); + private readonly GuiCheckbox ShiftIndicator = new(64, 996, 64, 64, "", "SHIFT Held", 36); + + private readonly GuiLabel StaticKeysLabel = new(480, 150, 960, 40, "", 28); public GuiWindowKeybinds() : base(0, 0, MainWindow.Instance.ClientSize.X, MainWindow.Instance.ClientSize.Y) { diff --git a/Editor/New SSQE/GUI/GuiWindowMenu.cs b/Editor/New SSQE/GUI/GuiWindowMenu.cs index 70513217..035a7aae 100644 --- a/Editor/New SSQE/GUI/GuiWindowMenu.cs +++ b/Editor/New SSQE/GUI/GuiWindowMenu.cs @@ -7,18 +7,18 @@ namespace New_SSQE.GUI { internal class GuiWindowMenu : GuiWindow { - private readonly GuiLabel clLabel = new(60, 195, 200, 40, "CHANGELOG", 40, false, false, "square", false); - private readonly GuiLabel ssLabel = new(35, 0, 750, 100, "SOUND SPACE", 150, false, false, "square", false); - private readonly GuiLabel qeLabel = new(615, 140, 150, 40, "QUANTUM EDITOR", 36, false, false, "square", false); - private readonly GuiLabel ChangelogLabel = new(60, 230, 890, 715, "", 18, false, false, "main", false); + private readonly GuiLabel clLabel = new(60, 195, 200, 40, "CHANGELOG", 42, false, false, "square", false); + private readonly GuiLabel ssLabel = new(35, 0, 750, 100, "SOUND SPACE", 156, false, false, "square", false); + private readonly GuiLabel qeLabel = new(615, 140, 150, 40, "QUANTUM EDITOR", 38, false, false, "square", false); + private readonly GuiLabel ChangelogLabel = new(60, 230, 890, 715, "", 20, false, false, "main", false); - private readonly GuiButton CreateButton = new(1190, 180, 600, 100, 0, "CREATE NEW MAP", 52, false, false, "square"); - private readonly GuiButton LoadButton = new(1190, 295, 600, 100, 1, "LOAD MAP", 52, false, false, "square"); - private readonly GuiButton ImportButton = new(1190, 410, 600, 100, 2, "IMPORT MAP", 52, false, false, "square"); - private readonly GuiButton SettingsButton = new(1190, 525, 600, 100, 3, "SETTINGS", 52, false, false, "square"); + private readonly GuiButton CreateButton = new(1190, 180, 600, 100, 0, "CREATE NEW MAP", 54, false, false, "square"); + private readonly GuiButton LoadButton = new(1190, 295, 600, 100, 1, "LOAD MAP", 54, false, false, "square"); + private readonly GuiButton ImportButton = new(1190, 410, 600, 100, 2, "IMPORT MAP", 54, false, false, "square"); + private readonly GuiButton SettingsButton = new(1190, 525, 600, 100, 3, "SETTINGS", 54, false, false, "square"); - private readonly GuiButton AutosavedButton = new(1190, 640, 600, 100, 4, "AUTOSAVED MAP", 52, false, false, "square"); - private readonly GuiButton LastMapButton = new(1190, 755, 600, 100, 5, "EDIT LAST MAP", 52, false, false, "square"); + private readonly GuiButton AutosavedButton = new(1190, 640, 600, 100, 4, "AUTOSAVED MAP", 54, false, false, "square"); + private readonly GuiButton LastMapButton = new(1190, 755, 600, 100, 5, "EDIT LAST MAP", 54, false, false, "square"); private readonly GuiSlider ChangelogSlider = new(950, 230, 20, 720, "changelogPosition", true); @@ -26,20 +26,20 @@ internal class GuiWindowMenu : GuiWindow private readonly GuiSquare ChangelogBackdrop2 = new(55, 230, 900, 715, Color.FromArgb(50, 0, 0, 0)); public readonly GuiSquare MapSelectBackdrop = new(0, 1040, 1920, 40, Color.FromArgb(50, 0, 0, 0)); - private readonly GuiButton NavLeft = new(0, 1040, 40, 40, 6, "<", 32); - private readonly GuiButton NavRight = new(1880, 1040, 40, 40, 7, ">", 32); - - private readonly GuiButton MapSelect0 = new(40, 1040, 368, 40, 80, "", 18); - private readonly GuiButton MapSelect1 = new(408, 1040, 368, 40, 81, "", 18); - private readonly GuiButton MapSelect2 = new(776, 1040, 368, 40, 82, "", 18); - private readonly GuiButton MapSelect3 = new(1144, 1040, 368, 40, 83, "", 18); - private readonly GuiButton MapSelect4 = new(1512, 1040, 368, 40, 84, "", 18); - - private readonly GuiButton MapClose0 = new(40, 1040, 40, 40, 90, "X", 24); - private readonly GuiButton MapClose1 = new(408, 1040, 40, 40, 91, "X", 24); - private readonly GuiButton MapClose2 = new(776, 1040, 40, 40, 92, "X", 24); - private readonly GuiButton MapClose3 = new(1144, 1040, 40, 40, 93, "X", 24); - private readonly GuiButton MapClose4 = new(1512, 1040, 40, 40, 94, "X", 24); + private readonly GuiButton NavLeft = new(0, 1040, 40, 40, 6, "<", 34); + private readonly GuiButton NavRight = new(1880, 1040, 40, 40, 7, ">", 34); + + private readonly GuiButton MapSelect0 = new(40, 1040, 368, 40, 80, "", 20); + private readonly GuiButton MapSelect1 = new(408, 1040, 368, 40, 81, "", 20); + private readonly GuiButton MapSelect2 = new(776, 1040, 368, 40, 82, "", 20); + private readonly GuiButton MapSelect3 = new(1144, 1040, 368, 40, 83, "", 20); + private readonly GuiButton MapSelect4 = new(1512, 1040, 368, 40, 84, "", 20); + + private readonly GuiButton MapClose0 = new(40, 1040, 40, 40, 90, "X", 26); + private readonly GuiButton MapClose1 = new(408, 1040, 40, 40, 91, "X", 26); + private readonly GuiButton MapClose2 = new(776, 1040, 40, 40, 92, "X", 26); + private readonly GuiButton MapClose3 = new(1144, 1040, 40, 40, 93, "X", 26); + private readonly GuiButton MapClose4 = new(1512, 1040, 40, 40, 94, "X", 26); private readonly List<(GuiButton, GuiButton)> mapSelects; private readonly string?[] prevTexts = new string?[8]; diff --git a/Editor/New SSQE/GUI/GuiWindowSettings.cs b/Editor/New SSQE/GUI/GuiWindowSettings.cs index 40bac5bf..c02956db 100644 --- a/Editor/New SSQE/GUI/GuiWindowSettings.cs +++ b/Editor/New SSQE/GUI/GuiWindowSettings.cs @@ -11,67 +11,67 @@ namespace New_SSQE.GUI { internal class GuiWindowSettings : GuiWindow { - private readonly GuiButton BackButton = new(655, 930, 600, 100, 0, "SAVE AND RETURN", 48, false, false, "square"); - private readonly GuiButton ResetButton = new(700, 865, 500, 50, 1, "RESET TO DEFAULT", 24, false, false, "square"); - private readonly GuiButton OpenDirectoryButton = new(700, 810, 500, 50, 2, "OPEN EDITOR FOLDER", 24, false, false, "square"); - private readonly GuiButton KeybindsButton = new(700, 755, 500, 50, 3, "CHANGE KEYBINDS", 24, false, false, "square"); + private readonly GuiButton BackButton = new(655, 930, 600, 100, 0, "SAVE AND RETURN", 54, false, false, "square"); + private readonly GuiButton ResetButton = new(700, 865, 500, 50, 1, "RESET TO DEFAULT", 30, false, false, "square"); + private readonly GuiButton OpenDirectoryButton = new(700, 810, 500, 50, 2, "OPEN EDITOR FOLDER", 30, false, false, "square"); + private readonly GuiButton KeybindsButton = new(700, 755, 500, 50, 3, "CHANGE KEYBINDS", 30, false, false, "square"); - private readonly GuiButton Color1Picker = new(210, 160, 200, 50, 4, "PICK COLOR", 24, false, false, "square"); - private readonly GuiLabel Color1Label = new(210, 134, 200, 26, "Color 1:", 24, false, false, "main", false); + private readonly GuiButton Color1Picker = new(210, 160, 200, 50, 4, "PICK COLOR", 30, false, false, "square"); + private readonly GuiLabel Color1Label = new(210, 130, 200, 26, "Color 1:", 30, false, false, "main", false); private readonly GuiSquare Color1Square = new(420, 145, 75, 75, Settings.settings["color1"]); - private readonly GuiButton Color2Picker = new(210, 310, 200, 50, 5, "PICK COLOR", 24, false, false, "square"); - private readonly GuiLabel Color2Label = new(210, 284, 200, 26, "Color 2:", 24, false, false, "main", false); + private readonly GuiButton Color2Picker = new(210, 310, 200, 50, 5, "PICK COLOR", 30, false, false, "square"); + private readonly GuiLabel Color2Label = new(210, 280, 200, 26, "Color 2:", 30, false, false, "main", false); private readonly GuiSquare Color2Square = new(420, 295, 75, 75, Settings.settings["color2"]); - private readonly GuiButton Color3Picker = new(210, 460, 200, 50, 6, "PICK COLOR", 24, false, false, "square"); - private readonly GuiLabel Color3Label = new(210, 434, 200, 26, "Color 3:", 24, false, false, "main", false); + private readonly GuiButton Color3Picker = new(210, 460, 200, 50, 6, "PICK COLOR", 30, false, false, "square"); + private readonly GuiLabel Color3Label = new(210, 430, 200, 26, "Color 3:", 30, false, false, "main", false); private readonly GuiSquare Color3Square = new(420, 445, 75, 75, Settings.settings["color3"]); - private readonly GuiButton Color4Picker = new(210, 610, 200, 50, 7, "PICK COLOR", 24, false, false, "square"); - private readonly GuiLabel Color4Label = new(210, 584, 200, 26, "Color 4:", 24, false, false, "main", false); + private readonly GuiButton Color4Picker = new(210, 610, 200, 50, 7, "PICK COLOR", 30, false, false, "square"); + private readonly GuiLabel Color4Label = new(210, 580, 200, 26, "Color 4:", 30, false, false, "main", false); private readonly GuiSquare Color4Square = new(420, 595, 75, 75, Settings.settings["color4"]); - private readonly GuiButton NoteColorPicker = new(210, 760, 200, 50, 8, "ADD COLOR", 24, false, false, "square"); - private readonly GuiLabel NoteColorLabel = new(210, 734, 200, 26, "Note Colors:", 24, false, false, "main", false); - private readonly GuiLabel NoteColorInfo = new(215, 815, 195, 26, "LMB: Remove\nRMB: Move left", 24, false, false, "main", false); + private readonly GuiButton NoteColorPicker = new(210, 760, 200, 50, 8, "ADD COLOR", 30, false, false, "square"); + private readonly GuiLabel NoteColorLabel = new(210, 730, 200, 26, "Note Colors:", 30, false, false, "main", false); + private readonly GuiLabel NoteColorInfo = new(215, 815, 195, 26, "LMB: Remove\nRMB: Move left", 30, false, false, "main", false); private readonly GuiSquare NoteColorHoverSquare = new(0, 0, 0, 0, Color.FromArgb(255, 0, 127, 255), true); - private readonly GuiCheckbox WaveformCheckbox = new(950, 380, 55, 55, "waveform", "Enable Waveform", 28); - private readonly GuiCheckbox ClassicWaveformCheckbox = new(950, 455, 55, 55, "classicWaveform", "Use Classic Waveform", 28); - private readonly GuiCheckbox AutosaveCheckbox = new(950, 155, 55, 55, "enableAutosave", "Enable Autosave", 28); - private readonly GuiCheckbox CorrectOnCopyCheckbox = new(1350, 155, 55, 55, "correctOnCopy", "Correct Errors on Copy", 28); - private readonly GuiCheckbox SkipDownloadCheckbox = new(1350, 230, 55, 55, "skipDownload", "Skip Download from Roblox", 28); - private readonly GuiCheckbox ReverseScrollCheckbox = new(1350, 305, 55, 55, "reverseScroll", "Reverse Scroll Direction", 28); - private readonly GuiCheckbox CheckForUpdatesCheckbox = new(1350, 380, 55, 55, "checkUpdates", "Check For Updates", 28); - private readonly GuiCheckbox UseVSyncCheckbox = new(1350, 455, 55, 55, "useVSync", "Enable VSync", 28); - private readonly GuiCheckbox LimitPlayerFPSCheckbox = new(1350, 605, 55, 55, "limitPlayerFPS", "Limit Player FPS", 28); - private readonly GuiCheckbox FullscreenPlayerCheckbox = new(1350, 680, 55, 55, "fullscreenPlayer", "Open Player in Fullscreen", 28); - - private readonly GuiCheckbox UseRhythia = new(1350, 800, 55, 55, "useRhythia", "Use Rhythia as Player", 28); - private readonly GuiLabel RhythiaPathLabel = new(1350, 880, 200, 26, "", 24, false, false, "main", false); - private readonly GuiButton RhythiaPath = new(1350, 910, 200, 50, 9, "CHANGE PATH", 24); - - private readonly GuiTextbox EditorBGOpacityTextbox = new(560, 160, 200, 50, "", 28, true, false, false, "editorBGOpacity"); - private readonly GuiLabel EditorBGOpacityLabel = new(560, 134, 200, 26, "Editor BG Opacity:", 24, false, false, "main", false); + private readonly GuiCheckbox WaveformCheckbox = new(950, 380, 55, 55, "waveform", "Enable Waveform", 34); + private readonly GuiCheckbox ClassicWaveformCheckbox = new(950, 455, 55, 55, "classicWaveform", "Use Classic Waveform", 34); + private readonly GuiCheckbox AutosaveCheckbox = new(950, 155, 55, 55, "enableAutosave", "Enable Autosave", 34); + private readonly GuiCheckbox CorrectOnCopyCheckbox = new(1350, 155, 55, 55, "correctOnCopy", "Correct Errors on Copy", 34); + private readonly GuiCheckbox SkipDownloadCheckbox = new(1350, 230, 55, 55, "skipDownload", "Skip Download from Roblox", 34); + private readonly GuiCheckbox ReverseScrollCheckbox = new(1350, 305, 55, 55, "reverseScroll", "Reverse Scroll Direction", 34); + private readonly GuiCheckbox CheckForUpdatesCheckbox = new(1350, 380, 55, 55, "checkUpdates", "Check For Updates", 34); + private readonly GuiCheckbox UseVSyncCheckbox = new(1350, 455, 55, 55, "useVSync", "Enable VSync", 34); + private readonly GuiCheckbox LimitPlayerFPSCheckbox = new(1350, 605, 55, 55, "limitPlayerFPS", "Limit Player FPS", 34); + private readonly GuiCheckbox FullscreenPlayerCheckbox = new(1350, 680, 55, 55, "fullscreenPlayer", "Open Player in Fullscreen", 34); + + private readonly GuiCheckbox UseRhythia = new(1350, 800, 55, 55, "useRhythia", "Use Rhythia as Player", 34); + private readonly GuiLabel RhythiaPathLabel = new(1350, 876, 200, 26, "", 30, false, false, "main", false); + private readonly GuiButton RhythiaPath = new(1350, 910, 200, 50, 9, "CHANGE PATH", 30); + + private readonly GuiTextbox EditorBGOpacityTextbox = new(560, 160, 200, 50, "", 34, true, false, false, "editorBGOpacity"); + private readonly GuiLabel EditorBGOpacityLabel = new(560, 130, 200, 26, "Editor BG Opacity:", 30, false, false, "main", false); private readonly GuiSquare EditorBGOpacitySquare = new(770, 145, 75, 75, Color.FromArgb(255, 255, 255, 255)); - private readonly GuiTextbox GridOpacityTextbox = new(560, 310, 200, 50, "", 28, true, false, false, "gridOpacity"); - private readonly GuiLabel GridOpacityLabel = new(560, 284, 200, 26, "Grid Opacity:", 24, false, false, "main", false); + private readonly GuiTextbox GridOpacityTextbox = new(560, 310, 200, 50, "", 34, true, false, false, "gridOpacity"); + private readonly GuiLabel GridOpacityLabel = new(560, 280, 200, 26, "Grid Opacity:", 30, false, false, "main", false); private readonly GuiSquare GridOpacitySquare = new(770, 295, 75, 75, Color.FromArgb(255, 255, 255, 255)); - private readonly GuiTextbox TrackOpacityTextbox = new(560, 460, 200, 50, "", 28, true, false, false, "trackOpacity"); - private readonly GuiLabel TrackOpacityLabel = new(560, 434, 200, 26, "Track Opacity:", 24, false, false, "main", false); + private readonly GuiTextbox TrackOpacityTextbox = new(560, 460, 200, 50, "", 34, true, false, false, "trackOpacity"); + private readonly GuiLabel TrackOpacityLabel = new(560, 430, 200, 26, "Track Opacity:", 30, false, false, "main", false); private readonly GuiSquare TrackOpacitySquare = new(770, 445, 75, 75, Color.FromArgb(255, 255, 255, 255)); - private readonly GuiTextbox AutosaveIntervalTextbox = new(950, 256, 200, 50, "", 28, true, false, false, "autosaveInterval", "main", false, true, true); - private readonly GuiLabel AutosaveIntervalLabel = new(950, 230, 200, 26, "Autosave Interval (min):", 24, false, false, "main", false); + private readonly GuiTextbox AutosaveIntervalTextbox = new(950, 256, 200, 50, "", 34, true, false, false, "autosaveInterval", "main", false, true, true); + private readonly GuiLabel AutosaveIntervalLabel = new(950, 226, 200, 26, "Autosave Interval (min):", 30, false, false, "main", false); - private readonly GuiTextbox WaveformDetailTextbox = new(950, 556, 200, 50, "", 28, true, false, false, "waveformDetail", "main", false, true, true); - private readonly GuiLabel WaveformDetailLabel = new(950, 530, 200, 26, "Waveform Level of Detail:", 24, false, false, "main", false); + private readonly GuiTextbox WaveformDetailTextbox = new(950, 556, 200, 50, "", 34, true, false, false, "waveformDetail", "main", false, true, true); + private readonly GuiLabel WaveformDetailLabel = new(950, 526, 200, 26, "Waveform Level of Detail:", 30, false, false, "main", false); private readonly GuiSlider FPSLimitSlider = new(1350, 500, 400, 55, "fpsLimit", false); - private readonly GuiLabel FPSLimitLabel = new(1350, 555, 400, 55, "FPS Limit: ", 28, false, false, "main", false); + private readonly GuiLabel FPSLimitLabel = new(1350, 551, 400, 55, "FPS Limit: ", 34, false, false, "main", false); private readonly List ColorPickerSquares = new(); private readonly List OpacitySquares = new(); diff --git a/Editor/New SSQE/New SSQE.csproj b/Editor/New SSQE/New SSQE.csproj index f061b487..e54f367a 100644 --- a/Editor/New SSQE/New SSQE.csproj +++ b/Editor/New SSQE/New SSQE.csproj @@ -10,6 +10,7 @@ AnyCPU;x86;x64 Sound Space Quantum Editor bin\x64\Release\net6.0\assets\textures\Icon.ico + true @@ -27,8 +28,7 @@ - - + diff --git a/Editor/New SSQE/Program.cs b/Editor/New SSQE/Program.cs index de357f04..2a8935be 100644 --- a/Editor/New SSQE/Program.cs +++ b/Editor/New SSQE/Program.cs @@ -29,24 +29,29 @@ static Program() ActionLogging.Register("[Error encountered in application]", "ERROR"); var logs = string.Join('\n', ActionLogging.Logs); - var text = @$"// whoops + Exception? ex = e; -{e.Message} + var emsg = ""; -{e.StackTrace ?? "[StackTrace was null]"} + while (ex != null) + { + emsg += $"\n\n{e.Message}\n\n{e.StackTrace ?? "[StackTrace was null]"}"; + ex = ex.InnerException; + } + + var text = @$"// whoops{emsg} |******************| | POSSIBLE FIXES | |******************| -Check if you are running this application in a zipped folder. If so, please extract the entire directory before attempting to run the editor. +Ensure this application is not running inside a zipped folder. Extract the directory if so. -If you are missing a DLL file from the main directory, copy it from the latest release of the editor into the current directory to ensure all required files are present. -If a missing DLL error is thrown but the main directory contains said file, try replacing it with the file from the latest release with the same name so all mentioned files are up to date. +Check if all required DLL files are present and working. If not, add or replace any missing or broken ones with versions from the latest release. -Try updating your graphics driver to the latest version if none of the previous solutions apply to your situation. +Try updating your graphics driver to the latest version. -If none of these work or this error was thrown while the editor was already running, report the error in the official Sound Space Discord server to attempt to resolve the issue if possible. +If none of these work or aren't applicable, report the error in the official Sound Space Discord server. {logs} "; diff --git a/Editor/New SSQE/Properties/AssemblyInfo.cs b/Editor/New SSQE/Properties/AssemblyInfo.cs index 4f4867b5..1e35438c 100644 --- a/Editor/New SSQE/Properties/AssemblyInfo.cs +++ b/Editor/New SSQE/Properties/AssemblyInfo.cs @@ -13,5 +13,5 @@ [assembly: ComVisible(false)] [assembly: Guid("9a405608-105f-473a-8f17-9d8c05f82b19")] -[assembly: AssemblyVersion("2.1.4.4")] -[assembly: AssemblyFileVersion("2.1.4.4")] +[assembly: AssemblyVersion("2.1.5.0")] +[assembly: AssemblyFileVersion("2.1.5.0")] diff --git a/Map Player/SSQE Player/Font/FontRenderer.cs b/Map Player/SSQE Player/Font/FontRenderer.cs index 94194ff1..25fbf78f 100644 --- a/Map Player/SSQE Player/Font/FontRenderer.cs +++ b/Map Player/SSQE Player/Font/FontRenderer.cs @@ -6,7 +6,7 @@ namespace SSQE_Player { internal class FontRenderer { - private static readonly FtFont main = new("main"); + private static readonly StbFont main = new("main"); public static Vector4[] Print(float x, float y, string text, int fontSize) { @@ -31,7 +31,7 @@ public static void Init() GL.Uniform1i(location, 15); location = GL.GetUniformLocation(Shader.FontTexProgram, "TexLookup"); - GL.Uniform4f(location, FtFont.CharRange, main.AtlasMetrics); + GL.Uniform4f(location, StbFont.CharRange, main.AtlasMetrics); location = GL.GetUniformLocation(Shader.FontTexProgram, "CharSize"); GL.Uniform2f(location, main.CharSize); diff --git a/Map Player/SSQE Player/Font/FtFont.cs b/Map Player/SSQE Player/Font/StbFont.cs similarity index 71% rename from Map Player/SSQE Player/Font/FtFont.cs rename to Map Player/SSQE Player/Font/StbFont.cs index 1013a3d3..68b1072f 100644 --- a/Map Player/SSQE Player/Font/FtFont.cs +++ b/Map Player/SSQE Player/Font/StbFont.cs @@ -1,134 +1,141 @@ -using OpenTK.Graphics; +using System; +using OpenTK.Graphics; using OpenTK.Graphics.OpenGL; using OpenTK.Mathematics; -using SharpFont; using SkiaSharp; +using System.IO; +using StbTrueTypeSharp; +using System.Linq; namespace SSQE_Player { - internal class FtFont + internal unsafe class StbFont { // Standard ASCII range: 128 (why was the old editor's range 400) public static readonly int CharRange = 128; // Character size initially rendered to be scaled later // Greater values are smoother but take more memory private static readonly int OriginSize = 128; - // Pixels between each character in rendered layout, needs to be above 0 to ensure no ghost pixels appear while rendering + // Pixels between each character in rendered layout + // Needs to be above 0 to ensure no ghost pixels appear while rendering // Recommended: 4 private static readonly int CharSpacing = 4; private readonly int[] Extents; private readonly int[] Bearings; private readonly int[] YOffsets; + private readonly SKBitmap[] Bitmaps; private readonly SKBitmap Bitmap; - + public Vector2 CharSize; public Vector4[] AtlasMetrics; public VertexArrayHandle VaO; public BufferHandle[] VbOs; public BufferHandle StaticVbO; - private readonly int BmpWidth; - private readonly int BmpHeight; - private readonly int _baseline; + private readonly int _charSize; private readonly TextureHandle _handle; public TextureHandle Handle => _handle; // Change unit to store multiple fonts without having to switch between handles while rendering - // Otherwise extract the handle via FTFont.Handle and manage switching elsewhere - public FtFont(string font, TextureUnit unit = TextureUnit.Texture15) + // Otherwise extract the handle via StbFont.Handle and manage switching elsewhere + public unsafe StbFont(string font, TextureUnit unit = TextureUnit.Texture15) { - Library library = new(); - Face face = new(library, $"assets/fonts/{font}.ttf"); - - SKBitmap[] Bitmaps; - - face.SetCharSize(OriginSize, OriginSize, 96, 96); - face.SetPixelSizes((uint)OriginSize, (uint)OriginSize); + // Some font size discrepancies exist between FreeType and stb_truetype but the majority of the loader is the same - Bitmaps = new SKBitmap[CharRange]; + YOffsets = new int[CharRange]; Extents = new int[CharRange]; Bearings = new int[CharRange]; - YOffsets = new int[CharRange]; + Bitmaps = new SKBitmap[CharRange]; - // Render each character in the given range individually and store its metrics in various arrays - for (uint c = 0; c < CharRange; c++) - { - var index = face.GetCharIndex(c); + AtlasMetrics = new Vector4[CharRange]; - face.LoadGlyph(index, LoadFlags.Render | LoadFlags.Default, LoadTarget.Normal); + var fontInfo = StbTrueType.CreateFont(File.ReadAllBytes($"assets/fonts/{font}.ttf"), 0); + var scale = StbTrueType.stbtt_ScaleForPixelHeight(fontInfo, OriginSize); - FTBitmap glyph = face.Glyph.Bitmap; - int size = glyph.Width * glyph.Rows; + int ascent, descent, lineGap; + StbTrueType.stbtt_GetFontVMetrics(fontInfo, &ascent, &descent, &lineGap); - Bitmaps[c] = ConvertToSKBitmap(glyph); - Extents[c] = face.Glyph.Bitmap.Width + face.Glyph.BitmapLeft; - Bearings[c] = face.Glyph.BitmapLeft; + // Render each character in the given range individually + for (int i = 0; i < CharRange; i++) + { + int width, height, xoffset, yoffset; + byte* glyph = StbTrueType.stbtt_GetCodepointBitmap(fontInfo, scale, scale, i, &width, &height, &xoffset, &yoffset); - if (size <= 0 && c == 32) - Extents[c] = OriginSize / 4; + Bitmaps[i] = ConvertToSKBitmap(glyph, width, height); + Extents[i] = width + xoffset; + Bearings[i] = xoffset; + + if (width * height <= 0 && i == 32) + Extents[i] = OriginSize / 4; else - YOffsets[c] = face.Glyph.BitmapTop; + YOffsets[i] = yoffset; } - _baseline = (int)(face.Size.Metrics.Ascender - face.Size.Metrics.Descender / 2); + _baseline = (int)(scale * ascent); var maxCharX = Extents.Max(); - var maxCharY = face.Glyph.Metrics.VerticalAdvance + YOffsets.Max(); - int px = (int)(maxCharX * maxCharY); + var maxCharY = (int)(scale * (ascent - descent)) + YOffsets.Max(); + int px = maxCharX * maxCharY; + CharSize = new(maxCharX, maxCharY); var texSize = Math.Sqrt(px * CharRange); var texX = (int)(texSize / maxCharX + 1) * (maxCharX + CharSpacing); - var texY = (int)(texSize / maxCharY + 1) * ((int)maxCharY + CharSpacing); + var texY = (int)(texSize / maxCharY + 1) * (maxCharY + CharSpacing); var info = new SKImageInfo(texX + 1, texY); var surface = SKSurface.Create(info); var canvas = surface.Canvas; float currentX = 0; - float currentY = YOffsets.Max(); + float currentY = 0; // Combine each character's bitmap on a main canvas to later store into memory + int charsPerLine = (int)(info.Width / (CharSize.X + CharSpacing)); + float txW = CharSize.X / info.Width; + float txH = CharSize.Y / info.Height; + for (uint c = 0; c < CharRange; c++) { if (currentX + maxCharX > texX) { currentX = 0; - currentY += (int)maxCharY + CharSpacing; + currentY += maxCharY + CharSpacing; } if (Bitmaps[c].ByteCount > 0) - canvas.DrawBitmap(Bitmaps[c], currentX, currentY - YOffsets[c]); + canvas.DrawBitmap(Bitmaps[c], currentX, currentY + _baseline + YOffsets[c]); currentX += maxCharX + CharSpacing; Bitmaps[c].Dispose(); + + float txX = c % charsPerLine * (CharSize.X + CharSpacing); + float txY = c / charsPerLine * (CharSize.Y + CharSpacing); + + AtlasMetrics[c] = (txX / info.Width, txY / info.Height, txW, txH); } + _baseline -= (int)(scale * descent); + Bitmap = SKBitmap.FromImage(surface.Snapshot()); GC.KeepAlive(Bitmap); - CharSize = new(maxCharX, (int)maxCharY); - - BmpWidth = Bitmap.Width; - BmpHeight = Bitmap.Height; - // put font texture metrics into array for uploading to a font shader - AtlasMetrics = new Vector4[CharRange]; - - int charsPerLine = (int)(BmpWidth / (CharSize.X + CharSpacing)); - float txW = CharSize.X / BmpWidth; - float txH = CharSize.Y / BmpHeight; + fontInfo.Dispose(); - for (int i = 0; i < CharRange; i++) - { - float txX = (i % charsPerLine) * (CharSize.X + CharSpacing); - float txY = (i / charsPerLine) * (CharSize.Y + CharSpacing); + // Store the font texture as a png in the current directory - for debugging + /* + using (var image = surface.Snapshot()) + using (var imgData = image.Encode(SKEncodedImageFormat.Png, 80)) + using (var stream = File.OpenWrite("font_texture.png")) + imgData.SaveTo(stream); + */ - AtlasMetrics[i] = (txX / BmpWidth, txY / BmpHeight, txW, txH); - } + canvas.Dispose(); + surface.Dispose(); - // prep instance data in shader + // Prep instance data in shader VbOs = new BufferHandle[2]; VaO = GL.GenVertexArray(); @@ -167,42 +174,22 @@ public FtFont(string font, TextureUnit unit = TextureUnit.Texture15) GL.BindBuffer(BufferTargetARB.ArrayBuffer, BufferHandle.Zero); GL.BindVertexArray(VertexArrayHandle.Zero); - - // Store the font texture as a png in the current directory - for debugging - /* - using (var image = surface.Snapshot()) - using (var imgData = image.Encode(SKEncodedImageFormat.Png, 80)) - using (var stream = File.OpenWrite("font_texture.png")) - imgData.SaveTo(stream); - */ - - - face.Dispose(); - library.Dispose(); - - // Load the texture into memory _handle = GL.GenTexture(); GL.ActiveTexture(unit); GL.BindTexture(TextureTarget.Texture2d, _handle); - GL.TexImage2D(TextureTarget.Texture2d, 0, InternalFormat.Rgba, BmpWidth, BmpHeight, 0, + GL.TexImage2D(TextureTarget.Texture2d, 0, InternalFormat.Rgba, Bitmap.Width, Bitmap.Height, 0, PixelFormat.Bgra, PixelType.UnsignedByte, Bitmap.GetPixels()); GL.TexParameteri(TextureTarget.Texture2d, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); GL.TexParameteri(TextureTarget.Texture2d, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); - - canvas.Dispose(); - surface.Dispose(); } - // Converts alpha map to RGBa - private static SKBitmap ConvertToSKBitmap(FTBitmap bitmap) + // Converts alpha bitmap to RGBa + private static SKBitmap ConvertToSKBitmap(byte* bytes, int width, int height) { - byte[] bytes = bitmap.Buffer != IntPtr.Zero ? bitmap.BufferData : Array.Empty(); - int width = bitmap.Pitch, height = bitmap.Rows; - var pixels = new SKColor[width * height]; for (int row = 0; row < height; row++) @@ -218,7 +205,7 @@ private static SKBitmap ConvertToSKBitmap(FTBitmap bitmap) } } - return new SKBitmap(bitmap.Pitch, bitmap.Rows) { Pixels = pixels }; + return new SKBitmap(width, height) { Pixels = pixels }; } // Returns baseline of font scaled depending on font size diff --git a/Map Player/SSQE Player/GUI/GuiWindowMain.cs b/Map Player/SSQE Player/GUI/GuiWindowMain.cs index a4273a62..34a771e3 100644 --- a/Map Player/SSQE Player/GUI/GuiWindowMain.cs +++ b/Map Player/SSQE Player/GUI/GuiWindowMain.cs @@ -9,14 +9,14 @@ namespace SSQE_Player.GUI { internal class GuiWindowMain : GuiWindow { - private readonly GuiLabel AccuracyLabel = new(930, 10, 60, 24, "", 24, true, Settings.settings["color1"]); - private readonly GuiLabel ComboLabel = new(930, 35, 60, 24, "", 24, true, Settings.settings["color1"]); - private readonly GuiLabel MissesLabel = new(930, 60, 60, 24, "", 24, true, Settings.settings["color2"]); - private readonly GuiLabel InfoLabel = new(10, 10, 100, 50, "QUIT: Escape or R\nRESTART: Tab\nPAUSE: Space\n\nOFFSET: Scroll\nUNFOCUS: CTRL+U\nFOCUS: LMB", 24, false, Settings.settings["color2"]); - private readonly GuiLabel PausedLabel = new(930, 980, 60, 60, "PAUSED", 64, true, Color.FromArgb(0, 127, 255)); - private readonly GuiLabel HitWindowTempoLabel = new(10, 1050, 60, 40, "", 24, false, Settings.settings["color2"]); - private readonly GuiLabel OffsetLabel = new(930, 1040, 60, 40, "", 24, true, Settings.settings["color2"]); - private readonly GuiLabel FPSLabel = new(1800, 1050, 60, 40, "", 24, false, Settings.settings["color2"]); + private readonly GuiLabel AccuracyLabel = new(930, 10, 60, 24, "", 28, true, Settings.settings["color1"]); + private readonly GuiLabel ComboLabel = new(930, 35, 60, 24, "", 28, true, Settings.settings["color1"]); + private readonly GuiLabel MissesLabel = new(930, 60, 60, 24, "", 28, true, Settings.settings["color2"]); + private readonly GuiLabel InfoLabel = new(10, 10, 100, 50, "QUIT: Escape or R\nRESTART: Tab\nPAUSE: Space\n\nOFFSET: Scroll\nUNFOCUS: CTRL+U\nFOCUS: LMB", 28, false, Settings.settings["color2"]); + private readonly GuiLabel PausedLabel = new(930, 980, 60, 60, "PAUSED", 72, true, Color.FromArgb(0, 127, 255)); + private readonly GuiLabel HitWindowTempoLabel = new(10, 1050, 60, 40, "", 28, false, Settings.settings["color2"]); + private readonly GuiLabel OffsetLabel = new(930, 1040, 60, 40, "", 28, true, Settings.settings["color2"]); + private readonly GuiLabel FPSLabel = new(1800, 1050, 60, 40, "", 28, false, Settings.settings["color2"]); private Matrix4 noteScale = Matrix4.CreateScale(1); diff --git a/Map Player/SSQE Player/Properties/AssemblyInfo.cs b/Map Player/SSQE Player/Properties/AssemblyInfo.cs index 27dd763e..c97ca5ef 100644 --- a/Map Player/SSQE Player/Properties/AssemblyInfo.cs +++ b/Map Player/SSQE Player/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.1.2.3")] -[assembly: AssemblyFileVersion("2.1.2.3")] +[assembly: AssemblyVersion("2.1.3.0")] +[assembly: AssemblyFileVersion("2.1.3.0")] diff --git a/Map Player/SSQE Player/SSQE Player.csproj b/Map Player/SSQE Player/SSQE Player.csproj index a0902615..66b50f8f 100644 --- a/Map Player/SSQE Player/SSQE Player.csproj +++ b/Map Player/SSQE Player/SSQE Player.csproj @@ -13,9 +13,8 @@ - - + diff --git a/Map Player/SSQE Player/bin/x64/Debug/net6.0/SSQE Player.deps.json b/Map Player/SSQE Player/bin/x64/Debug/net6.0/SSQE Player.deps.json index 696fcee3..d9825115 100644 --- a/Map Player/SSQE Player/bin/x64/Debug/net6.0/SSQE Player.deps.json +++ b/Map Player/SSQE Player/bin/x64/Debug/net6.0/SSQE Player.deps.json @@ -9,9 +9,8 @@ "SSQE Player/1.0.0": { "dependencies": { "OpenTK": "5.0.0-pre.8", - "SharpFont.Dependencies": "2.6.0", "SkiaSharp": "2.88.1", - "SpaceWizards.SharpFont": "1.0.1", + "StbTrueTypeSharp": "1.26.12", "System.Json": "4.7.1", "Bass.Net": "2.4.17.2" }, @@ -158,7 +157,6 @@ } } }, - "SharpFont.Dependencies/2.6.0": {}, "SkiaSharp/2.88.1": { "dependencies": { "SkiaSharp.NativeAssets.Win32": "2.88.1", @@ -199,11 +197,11 @@ } } }, - "SpaceWizards.SharpFont/1.0.1": { + "StbTrueTypeSharp/1.26.12": { "runtime": { - "lib/netcoreapp3.0/SpaceWizards.SharpFont.dll": { - "assemblyVersion": "1.0.1.0", - "fileVersion": "1.0.1.0" + "lib/netstandard2.0/StbTrueTypeSharp.dll": { + "assemblyVersion": "1.26.12.0", + "fileVersion": "1.26.12.0" } } }, @@ -309,13 +307,6 @@ "path": "opentk.windowing.graphicslibraryframework/5.0.0-pre.8", "hashPath": "opentk.windowing.graphicslibraryframework.5.0.0-pre.8.nupkg.sha512" }, - "SharpFont.Dependencies/2.6.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-MuR0lFIZI1pSw0QAgdzK0teIUkkMjh4Q/3Hm06BQKuOiSmbJCglox5Ny+8XK6VQDkOrw5cuMw85K3HdTEYWk+w==", - "path": "sharpfont.dependencies/2.6.0", - "hashPath": "sharpfont.dependencies.2.6.0.nupkg.sha512" - }, "SkiaSharp/2.88.1": { "type": "package", "serviceable": true, @@ -337,12 +328,12 @@ "path": "skiasharp.nativeassets.win32/2.88.1", "hashPath": "skiasharp.nativeassets.win32.2.88.1.nupkg.sha512" }, - "SpaceWizards.SharpFont/1.0.1": { + "StbTrueTypeSharp/1.26.12": { "type": "package", "serviceable": true, - "sha512": "sha512-DfQE9qUNzaUs6ehhS10bkF+dIDtVAzsK70irZ/c3FiZcuwdhaYxPt9g/uqqr7t9P9ynj2CKCv1g/Us7FjujXoA==", - "path": "spacewizards.sharpfont/1.0.1", - "hashPath": "spacewizards.sharpfont.1.0.1.nupkg.sha512" + "sha512": "sha512-hCc6/OsfcPa5VsLECcEU2m78WOshBrKwK42nAodSm9Z5wH68f7n66SoiRLCdGCkDaqbWz2TlX4zYHIjogj1HJA==", + "path": "stbtruetypesharp/1.26.12", + "hashPath": "stbtruetypesharp.1.26.12.nupkg.sha512" }, "System.Json/4.7.1": { "type": "package", diff --git a/Map Player/SSQE Player/bin/x64/Debug/net6.0/SSQE Player.dll b/Map Player/SSQE Player/bin/x64/Debug/net6.0/SSQE Player.dll index 70319424..c39c1351 100644 Binary files a/Map Player/SSQE Player/bin/x64/Debug/net6.0/SSQE Player.dll and b/Map Player/SSQE Player/bin/x64/Debug/net6.0/SSQE Player.dll differ diff --git a/Map Player/SSQE Player/bin/x64/Debug/net6.0/SpaceWizards.SharpFont.dll b/Map Player/SSQE Player/bin/x64/Debug/net6.0/SpaceWizards.SharpFont.dll deleted file mode 100644 index 7f286f9e..00000000 Binary files a/Map Player/SSQE Player/bin/x64/Debug/net6.0/SpaceWizards.SharpFont.dll and /dev/null differ diff --git a/Map Player/SSQE Player/bin/x64/Debug/net6.0/freetype6.dll b/Map Player/SSQE Player/bin/x64/Debug/net6.0/freetype6.dll deleted file mode 100644 index 480292c4..00000000 Binary files a/Map Player/SSQE Player/bin/x64/Debug/net6.0/freetype6.dll and /dev/null differ diff --git a/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.GeneratedMSBuildEditorConfig.editorconfig b/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.GeneratedMSBuildEditorConfig.editorconfig index c2eaf61b..263923e9 100644 --- a/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.GeneratedMSBuildEditorConfig.editorconfig +++ b/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.GeneratedMSBuildEditorConfig.editorconfig @@ -1,8 +1,4 @@ is_global = true -build_property.EnableAotAnalyzer = -build_property.EnableSingleFileAnalyzer = -build_property.EnableTrimAnalyzer = -build_property.IncludeAllContentForSelfExtract = build_property.TargetFramework = net6.0 build_property.TargetPlatformMinVersion = build_property.UsingMicrosoftNETSdkWeb = diff --git a/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.assets.cache b/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.assets.cache index c925d499..092772a1 100644 Binary files a/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.assets.cache and b/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.assets.cache differ diff --git a/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.csproj.AssemblyReference.cache b/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.csproj.AssemblyReference.cache index 7554fef6..c1fc37f4 100644 Binary files a/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.csproj.AssemblyReference.cache and b/Map Player/SSQE Player/obj/Debug/net6.0/SSQE Player.csproj.AssemblyReference.cache differ diff --git a/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.GeneratedMSBuildEditorConfig.editorconfig b/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.GeneratedMSBuildEditorConfig.editorconfig index c2eaf61b..263923e9 100644 --- a/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.GeneratedMSBuildEditorConfig.editorconfig +++ b/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.GeneratedMSBuildEditorConfig.editorconfig @@ -1,8 +1,4 @@ is_global = true -build_property.EnableAotAnalyzer = -build_property.EnableSingleFileAnalyzer = -build_property.EnableTrimAnalyzer = -build_property.IncludeAllContentForSelfExtract = build_property.TargetFramework = net6.0 build_property.TargetPlatformMinVersion = build_property.UsingMicrosoftNETSdkWeb = diff --git a/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.assets.cache b/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.assets.cache index 03e8c1e1..e927273e 100644 Binary files a/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.assets.cache and b/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.assets.cache differ diff --git a/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.csproj.AssemblyReference.cache b/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.csproj.AssemblyReference.cache index 7554fef6..c1fc37f4 100644 Binary files a/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.csproj.AssemblyReference.cache and b/Map Player/SSQE Player/obj/Release/net6.0/SSQE Player.csproj.AssemblyReference.cache differ diff --git a/Map Player/SSQE Player/obj/SSQE Player.csproj.nuget.dgspec.json b/Map Player/SSQE Player/obj/SSQE Player.csproj.nuget.dgspec.json index bc58223b..bc2bb6e1 100644 --- a/Map Player/SSQE Player/obj/SSQE Player.csproj.nuget.dgspec.json +++ b/Map Player/SSQE Player/obj/SSQE Player.csproj.nuget.dgspec.json @@ -61,17 +61,13 @@ "target": "Package", "version": "[5.0.0-pre.8, )" }, - "SharpFont.Dependencies": { - "target": "Package", - "version": "[2.6.0, )" - }, "SkiaSharp": { "target": "Package", "version": "[2.88.1, )" }, - "SpaceWizards.SharpFont": { + "StbTrueTypeSharp": { "target": "Package", - "version": "[1.0.1, )" + "version": "[1.26.12, )" }, "System.Json": { "target": "Package", diff --git a/Map Player/SSQE Player/obj/SSQE Player.csproj.nuget.g.props b/Map Player/SSQE Player/obj/SSQE Player.csproj.nuget.g.props index 3e76fae5..6dbb4558 100644 --- a/Map Player/SSQE Player/obj/SSQE Player.csproj.nuget.g.props +++ b/Map Player/SSQE Player/obj/SSQE Player.csproj.nuget.g.props @@ -14,7 +14,6 @@ - diff --git a/Map Player/SSQE Player/obj/project.assets.json b/Map Player/SSQE Player/obj/project.assets.json index d2b15c58..fc54dc1a 100644 --- a/Map Player/SSQE Player/obj/project.assets.json +++ b/Map Player/SSQE Player/obj/project.assets.json @@ -201,12 +201,6 @@ } } }, - "SharpFont.Dependencies/2.6.0": { - "type": "package", - "build": { - "build/SharpFont.Dependencies.props": {} - } - }, "SkiaSharp/2.88.1": { "type": "package", "dependencies": { @@ -262,13 +256,13 @@ } } }, - "SpaceWizards.SharpFont/1.0.1": { + "StbTrueTypeSharp/1.26.12": { "type": "package", "compile": { - "lib/netcoreapp3.0/SpaceWizards.SharpFont.dll": {} + "lib/netstandard2.0/StbTrueTypeSharp.dll": {} }, "runtime": { - "lib/netcoreapp3.0/SpaceWizards.SharpFont.dll": {} + "lib/netstandard2.0/StbTrueTypeSharp.dll": {} } }, "System.Json/4.7.1": { @@ -479,12 +473,6 @@ } } }, - "SharpFont.Dependencies/2.6.0": { - "type": "package", - "build": { - "build/SharpFont.Dependencies.props": {} - } - }, "SkiaSharp/2.88.1": { "type": "package", "dependencies": { @@ -523,13 +511,13 @@ "runtimes/win-x64/native/libSkiaSharp.dll": {} } }, - "SpaceWizards.SharpFont/1.0.1": { + "StbTrueTypeSharp/1.26.12": { "type": "package", "compile": { - "lib/netcoreapp3.0/SpaceWizards.SharpFont.dll": {} + "lib/netstandard2.0/StbTrueTypeSharp.dll": {} }, "runtime": { - "lib/netcoreapp3.0/SpaceWizards.SharpFont.dll": {} + "lib/netstandard2.0/StbTrueTypeSharp.dll": {} } }, "System.Json/4.7.1": { @@ -763,26 +751,6 @@ "opentk.windowing.graphicslibraryframework.nuspec" ] }, - "SharpFont.Dependencies/2.6.0": { - "sha512": "MuR0lFIZI1pSw0QAgdzK0teIUkkMjh4Q/3Hm06BQKuOiSmbJCglox5Ny+8XK6VQDkOrw5cuMw85K3HdTEYWk+w==", - "type": "package", - "path": "sharpfont.dependencies/2.6.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "bin/msvc10/x64/freetype6.dll", - "bin/msvc10/x86/freetype6.dll", - "bin/msvc11/x64/freetype6.dll", - "bin/msvc11/x86/freetype6.dll", - "bin/msvc12/x64/freetype6.dll", - "bin/msvc12/x86/freetype6.dll", - "bin/msvc9/x64/freetype6.dll", - "bin/msvc9/x86/freetype6.dll", - "build/SharpFont.Dependencies.props", - "sharpfont.dependencies.2.6.0.nupkg.sha512", - "sharpfont.dependencies.nuspec" - ] - }, "SkiaSharp/2.88.1": { "sha512": "bEgYq0n0kVb/t/3DgQTILBqlXcNjKmz0t8ur9w41UK+pbufBGcEF8QMJQIhdRYohHqhsBwrCF87WUBkeRAuquA==", "type": "package", @@ -908,20 +876,17 @@ "skiasharp.nativeassets.win32.nuspec" ] }, - "SpaceWizards.SharpFont/1.0.1": { - "sha512": "DfQE9qUNzaUs6ehhS10bkF+dIDtVAzsK70irZ/c3FiZcuwdhaYxPt9g/uqqr7t9P9ynj2CKCv1g/Us7FjujXoA==", + "StbTrueTypeSharp/1.26.12": { + "sha512": "hCc6/OsfcPa5VsLECcEU2m78WOshBrKwK42nAodSm9Z5wH68f7n66SoiRLCdGCkDaqbWz2TlX4zYHIjogj1HJA==", "type": "package", - "path": "spacewizards.sharpfont/1.0.1", + "path": "stbtruetypesharp/1.26.12", "files": [ ".nupkg.metadata", ".signature.p7s", - "contentFiles/any/net45/SpaceWizards.SharpFont.dll.config", - "contentFiles/any/net472/SpaceWizards.SharpFont.dll.config", - "lib/net45/SpaceWizards.SharpFont.dll", - "lib/net472/SpaceWizards.SharpFont.dll", - "lib/netcoreapp3.0/SpaceWizards.SharpFont.dll", - "spacewizards.sharpfont.1.0.1.nupkg.sha512", - "spacewizards.sharpfont.nuspec" + "lib/net471/StbTrueTypeSharp.dll", + "lib/netstandard2.0/StbTrueTypeSharp.dll", + "stbtruetypesharp.1.26.12.nupkg.sha512", + "stbtruetypesharp.nuspec" ] }, "System.Json/4.7.1": { @@ -996,9 +961,8 @@ "Microsoft.NET.ILLink.Analyzers >= 7.0.100-1.23211.1", "Microsoft.NET.ILLink.Tasks >= 7.0.100-1.23211.1", "OpenTK >= 5.0.0-pre.8", - "SharpFont.Dependencies >= 2.6.0", "SkiaSharp >= 2.88.1", - "SpaceWizards.SharpFont >= 1.0.1", + "StbTrueTypeSharp >= 1.26.12", "System.Json >= 4.7.1" ] }, @@ -1063,17 +1027,13 @@ "target": "Package", "version": "[5.0.0-pre.8, )" }, - "SharpFont.Dependencies": { - "target": "Package", - "version": "[2.6.0, )" - }, "SkiaSharp": { "target": "Package", "version": "[2.88.1, )" }, - "SpaceWizards.SharpFont": { + "StbTrueTypeSharp": { "target": "Package", - "version": "[1.0.1, )" + "version": "[1.26.12, )" }, "System.Json": { "target": "Package", diff --git a/Map Player/SSQE Player/obj/project.nuget.cache b/Map Player/SSQE Player/obj/project.nuget.cache index 2fbf8e5c..cc7656ac 100644 --- a/Map Player/SSQE Player/obj/project.nuget.cache +++ b/Map Player/SSQE Player/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "v9GNHd8mBDENbIij0XNGFdMJz70sB4QdUBS6DCk48MUSTPcdq19IDcz+j/xaRR2+NRWN48mGq/3f7C3NfxxdQg==", + "dgSpecHash": "6a+YgyqTboF3rGckiFPxSW3hQg2IsXy5NmSV2enKSbczsXfzeDV0Nj7tfutGqYHwsxT/GRtqZsmiJAW7d+/A6Q==", "success": true, "projectFilePath": "F:\\GitHub\\SSQE\\Map Player\\SSQE Player\\SSQE Player.csproj", "expectedPackageFiles": [ @@ -17,11 +17,10 @@ "C:\\Users\\Owner\\.nuget\\packages\\opentk.windowing.common\\5.0.0-pre.8\\opentk.windowing.common.5.0.0-pre.8.nupkg.sha512", "C:\\Users\\Owner\\.nuget\\packages\\opentk.windowing.desktop\\5.0.0-pre.8\\opentk.windowing.desktop.5.0.0-pre.8.nupkg.sha512", "C:\\Users\\Owner\\.nuget\\packages\\opentk.windowing.graphicslibraryframework\\5.0.0-pre.8\\opentk.windowing.graphicslibraryframework.5.0.0-pre.8.nupkg.sha512", - "C:\\Users\\Owner\\.nuget\\packages\\sharpfont.dependencies\\2.6.0\\sharpfont.dependencies.2.6.0.nupkg.sha512", "C:\\Users\\Owner\\.nuget\\packages\\skiasharp\\2.88.1\\skiasharp.2.88.1.nupkg.sha512", "C:\\Users\\Owner\\.nuget\\packages\\skiasharp.nativeassets.macos\\2.88.1\\skiasharp.nativeassets.macos.2.88.1.nupkg.sha512", "C:\\Users\\Owner\\.nuget\\packages\\skiasharp.nativeassets.win32\\2.88.1\\skiasharp.nativeassets.win32.2.88.1.nupkg.sha512", - "C:\\Users\\Owner\\.nuget\\packages\\spacewizards.sharpfont\\1.0.1\\spacewizards.sharpfont.1.0.1.nupkg.sha512", + "C:\\Users\\Owner\\.nuget\\packages\\stbtruetypesharp\\1.26.12\\stbtruetypesharp.1.26.12.nupkg.sha512", "C:\\Users\\Owner\\.nuget\\packages\\system.json\\4.7.1\\system.json.4.7.1.nupkg.sha512", "C:\\Users\\Owner\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\5.0.0\\system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512" ], diff --git a/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.assets.cache b/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.assets.cache index d049c7a8..cc4360d7 100644 Binary files a/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.assets.cache and b/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.assets.cache differ diff --git a/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.AssemblyReference.cache b/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.AssemblyReference.cache index 14c07392..c1fc37f4 100644 Binary files a/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.AssemblyReference.cache and b/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.AssemblyReference.cache differ diff --git a/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.CoreCompileInputs.cache b/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.CoreCompileInputs.cache index 6087d167..1dfe5d3f 100644 --- a/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.CoreCompileInputs.cache +++ b/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -37b1a1268bb4dd728260b14fea48a52d5d954ab62f9b517260149cca58009a83 +8acc06aad4285d59383b84c5f6a9ad45cb7c196393b39daff4fa8a3aff957d98 diff --git a/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.FileListAbsolute.txt b/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.FileListAbsolute.txt index 20cea1ff..a06d9754 100644 --- a/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.FileListAbsolute.txt +++ b/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.csproj.FileListAbsolute.txt @@ -36,7 +36,6 @@ F:\source\repos\SSQE Player\SSQE Player\bin\x64\Debug\net6.0\runtimes\osx\native F:\source\repos\SSQE Player\SSQE Player\bin\x64\Debug\net6.0\runtimes\win-arm64\native\libSkiaSharp.dll F:\source\repos\SSQE Player\SSQE Player\bin\x64\Debug\net6.0\runtimes\win-x64\native\libSkiaSharp.dll F:\source\repos\SSQE Player\SSQE Player\bin\x64\Debug\net6.0\runtimes\win-x86\native\libSkiaSharp.dll -F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\freetype6.dll F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\SSQE Player.exe F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\SSQE Player.deps.json F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\SSQE Player.runtimeconfig.json @@ -52,7 +51,6 @@ F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\OpenTK.Windowing.Comm F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\OpenTK.Windowing.Desktop.dll F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\OpenTK.Windowing.GraphicsLibraryFramework.dll F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\SkiaSharp.dll -F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\SpaceWizards.SharpFont.dll F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\System.Json.dll F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\runtimes\linux-x64\native\libglfw.so.3.3 F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\runtimes\osx-arm64\native\libglfw.3.dylib @@ -75,3 +73,4 @@ F:\GitHub\SSQE\Map Player\SSQE Player\obj\x64\Debug\net6.0\SSQE Player.pdb F:\GitHub\SSQE\Map Player\SSQE Player\obj\x64\Debug\net6.0\SSQE Player.genruntimeconfig.cache F:\GitHub\SSQE\Map Player\SSQE Player\obj\x64\Debug\net6.0\ref\SSQE Player.dll F:\GitHub\SSQE\Map Player\SSQE Player\obj\x64\Debug\net6.0\SSQE Player.sourcelink.json +F:\GitHub\SSQE\Map Player\SSQE Player\bin\x64\Debug\net6.0\StbTrueTypeSharp.dll diff --git a/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.dll b/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.dll index 70319424..c39c1351 100644 Binary files a/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.dll and b/Map Player/SSQE Player/obj/x64/Debug/net6.0/SSQE Player.dll differ diff --git a/Map Player/SSQE Player/obj/x64/Debug/net6.0/ref/SSQE Player.dll b/Map Player/SSQE Player/obj/x64/Debug/net6.0/ref/SSQE Player.dll index caa5ce91..b3b4adf1 100644 Binary files a/Map Player/SSQE Player/obj/x64/Debug/net6.0/ref/SSQE Player.dll and b/Map Player/SSQE Player/obj/x64/Debug/net6.0/ref/SSQE Player.dll differ diff --git a/Map Player/SSQE Player/obj/x64/Debug/net6.0/refint/SSQE Player.dll b/Map Player/SSQE Player/obj/x64/Debug/net6.0/refint/SSQE Player.dll index caa5ce91..b3b4adf1 100644 Binary files a/Map Player/SSQE Player/obj/x64/Debug/net6.0/refint/SSQE Player.dll and b/Map Player/SSQE Player/obj/x64/Debug/net6.0/refint/SSQE Player.dll differ diff --git a/SSQE Player.zip b/SSQE Player.zip index 640c180a..8f26f12c 100644 Binary files a/SSQE Player.zip and b/SSQE Player.zip differ