Better Code?
This commit is contained in:
parent
06bc325fbe
commit
31d20221a6
@ -48,6 +48,8 @@ public class FPSWindow : GameWindow , IWindow
|
|||||||
ClientRectangle = new Box2i(num, num2, num + Size.X, num2 + Size.Y);
|
ClientRectangle = new Box2i(num, num2, num + Size.X, num2 + Size.Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Vector2i CS { get; private set; } = new(0, 0);
|
||||||
|
|
||||||
public Matrix4 WindowSizeMatrix { get; private set; }
|
public Matrix4 WindowSizeMatrix { get; private set; }
|
||||||
|
|
||||||
public float IntToWindow(float Point, bool Y = false)
|
public float IntToWindow(float Point, bool Y = false)
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<IncludeSymbols>False</IncludeSymbols>
|
<IncludeSymbols>False</IncludeSymbols>
|
||||||
<RepositoryUrl>https://git.jacobtech.com/JacobTech.com/GraphicsManager</RepositoryUrl>
|
<RepositoryUrl>https://git.jacobtech.com/JacobTech.com/GraphicsManager</RepositoryUrl>
|
||||||
<RepositoryType>git</RepositoryType>
|
<RepositoryType>git</RepositoryType>
|
||||||
<Version>1.0.9-alpha66</Version>
|
<Version>1.0.9-alpha81</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using GraphicsManager.Enums;
|
using GraphicsManager.Enums;
|
||||||
using GraphicsManager.Objects;
|
using GraphicsManager.Objects;
|
||||||
using OpenTK.Mathematics;
|
using OpenTK.Mathematics;
|
||||||
|
using OpenTK.Windowing.Common;
|
||||||
using OpenTK.Windowing.Common.Input;
|
using OpenTK.Windowing.Common.Input;
|
||||||
|
|
||||||
namespace GraphicsManager.Interfaces;
|
namespace GraphicsManager.Interfaces;
|
||||||
@ -21,6 +22,8 @@ public interface IRenderObject
|
|||||||
public void Clean();
|
public void Clean();
|
||||||
public void Focus();
|
public void Focus();
|
||||||
public void UnFocus();
|
public void UnFocus();
|
||||||
|
public void SendKeyEvent(KeyboardKeyEventArgs KeyArgs);
|
||||||
|
public void SendClipEvent(string Text);
|
||||||
public Vector2i Size { get; set; }
|
public Vector2i Size { get; set; }
|
||||||
public Vector3i Location { get; set; }
|
public Vector3i Location { get; set; }
|
||||||
public Vector2 SizeAsFloat { get; }
|
public Vector2 SizeAsFloat { get; }
|
||||||
|
@ -11,7 +11,7 @@ public interface IWindow : IParent
|
|||||||
|
|
||||||
public bool ShowMissingChar { get; }
|
public bool ShowMissingChar { get; }
|
||||||
public Matrix4 WindowSizeMatrix { get; }
|
public Matrix4 WindowSizeMatrix { get; }
|
||||||
public Vector2i ClientSize { get; }
|
public Vector2i CS { get; }
|
||||||
|
|
||||||
public event Action<MouseButtonEventArgs> MouseDown;
|
public event Action<MouseButtonEventArgs> MouseDown;
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ public abstract class ParentBase : Rectangle, IParent
|
|||||||
nh = Size.Y;
|
nh = Size.Y;
|
||||||
}
|
}
|
||||||
if (nw == 0 || nh == 0) return;
|
if (nw == 0 || nh == 0) return;
|
||||||
GL.Scissor(nx, Window!.ClientSize.Y - ny - nh, nw, nh);
|
GL.Scissor(nx, Window!.CS.Y - ny - nh, nw, nh);
|
||||||
base.Draw(nx,ny,nw,nh);
|
base.Draw(nx,ny,nw,nh);
|
||||||
IEnumerable<IRenderObject> needload = Controls.Where(a => a.Loaded == false);
|
IEnumerable<IRenderObject> needload = Controls.Where(a => a.Loaded == false);
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ public abstract class ParentBase : Rectangle, IParent
|
|||||||
for (int i = 0; i < Controls.Length; i++)
|
for (int i = 0; i < Controls.Length; i++)
|
||||||
{
|
{
|
||||||
if (Controls[i].Location.X > Size.X || Controls[i].Location.Y > Size.Y) continue;
|
if (Controls[i].Location.X > Size.X || Controls[i].Location.Y > Size.Y) continue;
|
||||||
GL.Scissor(nx, Window!.ClientSize.Y - ny - nh, nw, nh);
|
GL.Scissor(nx, Window!.CS.Y - ny - nh, nw, nh);
|
||||||
Controls[i].Draw(nx, ny, nw, nh);
|
Controls[i].Draw(nx, ny, nw, nh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,6 +115,12 @@ public class Shader : IDisposable
|
|||||||
GL.UniformMatrix4(_uniformLocations[name], true, ref data);
|
GL.UniformMatrix4(_uniformLocations[name], true, ref data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetMatrixF4(string name, Matrix4 data)
|
||||||
|
{
|
||||||
|
GL.UseProgram(Handle);
|
||||||
|
GL.UniformMatrix4(_uniformLocations[name], false, ref data);
|
||||||
|
}
|
||||||
|
|
||||||
public void Use()
|
public void Use()
|
||||||
{
|
{
|
||||||
GL.UseProgram(Handle);
|
GL.UseProgram(Handle);
|
||||||
|
@ -226,7 +226,7 @@ public class FlowLayout : ParentBase, IFlow
|
|||||||
}
|
}
|
||||||
|
|
||||||
Timer t;
|
Timer t;
|
||||||
private int dist = 0;
|
private int dist;
|
||||||
|
|
||||||
private void WindowOnMouseWheel(MouseWheelEventArgs obj)
|
private void WindowOnMouseWheel(MouseWheelEventArgs obj)
|
||||||
{
|
{
|
||||||
@ -245,7 +245,7 @@ public class FlowLayout : ParentBase, IFlow
|
|||||||
|
|
||||||
public uint HScrollPixels { get; set; } = 30;
|
public uint HScrollPixels { get; set; } = 30;
|
||||||
|
|
||||||
private uint ScrollValueBackEnd { get; set; } = 0;
|
private uint ScrollValueBackEnd { get; set; }
|
||||||
|
|
||||||
public event Func<bool, uint, uint, Task>? FlowUpdate;
|
public event Func<bool, uint, uint, Task>? FlowUpdate;
|
||||||
|
|
||||||
@ -283,7 +283,7 @@ public class FlowLayout : ParentBase, IFlow
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private uint ss = 0;
|
private uint ss;
|
||||||
|
|
||||||
public uint ScrollSum
|
public uint ScrollSum
|
||||||
{
|
{
|
||||||
@ -293,7 +293,7 @@ public class FlowLayout : ParentBase, IFlow
|
|||||||
ss = value;
|
ss = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private bool scroleip = false;
|
private bool scroleip;
|
||||||
private void TOnElapsed(object? sender, ElapsedEventArgs e)
|
private void TOnElapsed(object? sender, ElapsedEventArgs e)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -301,7 +301,7 @@ public class FlowLayout : ParentBase, IFlow
|
|||||||
if (!scroleip && dist != 0)
|
if (!scroleip && dist != 0)
|
||||||
{
|
{
|
||||||
scroleip = true;
|
scroleip = true;
|
||||||
var n = ScrollValue - dist;
|
long n = ScrollValue - dist;
|
||||||
if (n < 0) n = 0;
|
if (n < 0) n = 0;
|
||||||
if (n > MaxScrollValue) n = MaxScrollValue;
|
if (n > MaxScrollValue) n = MaxScrollValue;
|
||||||
Window!.Invoke(() =>ScrollValue = (uint)n);
|
Window!.Invoke(() =>ScrollValue = (uint)n);
|
||||||
|
@ -314,7 +314,17 @@ public class Label : ILabel
|
|||||||
max_x = (xrel + w);
|
max_x = (xrel + w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new((int)max_x, (int)(lines * LineHeight) + (int)(lines * Font.ExtraLinePixels));
|
return new((int)char_x, (int)(lines * LineHeight) + (int)(lines * Font.ExtraLinePixels));
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void SendKeyEvent(KeyboardKeyEventArgs KeyArgs)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void SendClipEvent(string ClipString)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Clean()
|
public void Clean()
|
||||||
@ -349,11 +359,9 @@ public class Label : ILabel
|
|||||||
Shader.Use();
|
Shader.Use();
|
||||||
GL.Enable(EnableCap.Blend);
|
GL.Enable(EnableCap.Blend);
|
||||||
GL.Uniform4(Shader.GetUniformLocation("textColor"), Color);
|
GL.Uniform4(Shader.GetUniformLocation("textColor"), Color);
|
||||||
Matrix4 projectionM = Matrix4.CreateOrthographicOffCenter(0, Window!.Size.X, Window!.Size.Y, 0, -1.0f, 1.0f);
|
|
||||||
projectionM = this.Window.WindowSizeMatrix;
|
|
||||||
GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);
|
GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);
|
||||||
GL.BlendFunc(0, BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
|
GL.BlendFunc(0, BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
|
||||||
GL.UniformMatrix4(1, false, ref projectionM);
|
Shader.SetMatrixF4("projection", Window.WindowSizeMatrix);
|
||||||
|
|
||||||
GL.BindVertexArray(VAO);
|
GL.BindVertexArray(VAO);
|
||||||
|
|
||||||
|
@ -302,6 +302,16 @@ public class RainbowLabel : ILabel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void SendKeyEvent(KeyboardKeyEventArgs KeyArgs)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void SendClipEvent(string ClipString)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
public void ForceDistanceUpdate()
|
public void ForceDistanceUpdate()
|
||||||
{
|
{
|
||||||
|
@ -93,6 +93,15 @@ public class Rectangle : ITextureObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Action? OnDrawAction;
|
public Action? OnDrawAction;
|
||||||
|
public virtual void SendKeyEvent(KeyboardKeyEventArgs KeyArgs)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void SendClipEvent(string ClipString)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
//public Action? OnDrawExitAction;
|
//public Action? OnDrawExitAction;
|
||||||
|
|
||||||
public virtual void Draw(int x, int y, int w, int h)
|
public virtual void Draw(int x, int y, int w, int h)
|
||||||
|
BIN
GraphicsManager/Resources/Textures/BadChar.png
Normal file
BIN
GraphicsManager/Resources/Textures/BadChar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 393 B |
@ -76,6 +76,15 @@ public class Window : NativeWindow , IWindow
|
|||||||
last = WindowState;
|
last = WindowState;
|
||||||
WindowSizeMatrix = Matrix4.CreateOrthographicOffCenter(0.0f, Size.X, Size.Y, 0, 1, -1);
|
WindowSizeMatrix = Matrix4.CreateOrthographicOffCenter(0.0f, Size.X, Size.Y, 0, 1, -1);
|
||||||
KeyDown += OnKeyDownn;
|
KeyDown += OnKeyDownn;
|
||||||
|
TextInput += OnTextInputEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnTextInputEvent(TextInputEventArgs obj)
|
||||||
|
{
|
||||||
|
if (focused is not null)
|
||||||
|
{
|
||||||
|
focused.SendClipEvent(obj.AsString);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private WindowState last;
|
private WindowState last;
|
||||||
@ -84,6 +93,10 @@ public class Window : NativeWindow , IWindow
|
|||||||
public bool CustomF11 = true;
|
public bool CustomF11 = true;
|
||||||
private unsafe void OnKeyDownn(KeyboardKeyEventArgs obj)
|
private unsafe void OnKeyDownn(KeyboardKeyEventArgs obj)
|
||||||
{
|
{
|
||||||
|
if (focused is not null)
|
||||||
|
{
|
||||||
|
focused.SendKeyEvent(obj);
|
||||||
|
}
|
||||||
if (obj.Key != Keys.F11 || WindowBorder == WindowBorder.Fixed) return;
|
if (obj.Key != Keys.F11 || WindowBorder == WindowBorder.Fixed) return;
|
||||||
if (CustomF11)
|
if (CustomF11)
|
||||||
{
|
{
|
||||||
@ -136,91 +149,14 @@ public class Window : NativeWindow , IWindow
|
|||||||
public Color4 BackgroundColor { get; set; } = new Color4(0, 0, 0, 255);
|
public Color4 BackgroundColor { get; set; } = new Color4(0, 0, 0, 255);
|
||||||
|
|
||||||
public ControlList Controls { get; } = new();
|
public ControlList Controls { get; } = new();
|
||||||
#region Cool Math Things
|
|
||||||
public float[] RctToFloat(int x, int y, int Width, int Height, bool hasTexture = false, float z = 0.0f)
|
|
||||||
{
|
|
||||||
if (hasTexture)
|
|
||||||
{
|
|
||||||
return new float[20] {
|
|
||||||
IntToFloat(x + Width), IntToFloat(y, true), z, 1.0f, 1.0f,// top r
|
|
||||||
IntToFloat(x + Width), IntToFloat(y + Height, true), z, 1.0f, 0.0f,//b r
|
|
||||||
IntToFloat(x), IntToFloat(y + Height, true), z, 0.0f, 0.0f,//bot l
|
|
||||||
IntToFloat(x), IntToFloat(y, true), z, 0.0f, 1.0f// top l
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return new float[12] {
|
|
||||||
IntToFloat(x + Width), IntToFloat(y, true), z,// top r
|
|
||||||
IntToFloat(x + Width), IntToFloat(y + Height, true), z, //b r
|
|
||||||
IntToFloat(x), IntToFloat(y + Height, true), z, //bot l
|
|
||||||
IntToFloat(x), IntToFloat(y, true), z,// top l
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Vector3 PointToVector(float x, float y, float z = 0.0f)
|
public Vector2i CS { get; private set; } = new(0, 0);
|
||||||
{
|
|
||||||
return new Vector3(IntToFloat(x), IntToFloat(y, true), z);
|
|
||||||
}
|
|
||||||
|
|
||||||
public float IntToFloat(float p, bool Invert = false)
|
|
||||||
{
|
|
||||||
float Size = (Invert ? this.Size.Y : this.Size.X);
|
|
||||||
double half = Math.Round((double)Size / (double)2, 1);
|
|
||||||
double Per = Math.Round((double)1 / half, 15);
|
|
||||||
if (p == half) return 0.0f;
|
|
||||||
if (Invert)
|
|
||||||
{
|
|
||||||
if (p > half) return (float)(((double)(p - half) * Per) * -1);
|
|
||||||
else return (float)(1 - (p * Per));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (p > half) return (float)((double)(p - half) * Per);
|
|
||||||
else return (float)((1 - (p * Per)) * -1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public float IntToWindow(float p, bool Y = false)
|
public float IntToWindow(float p, bool Y = false)
|
||||||
{
|
{
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float FloatToInt(float p, bool Invert = false)
|
|
||||||
{
|
|
||||||
float Size = (Invert ? this.Size.Y : this.Size.X);
|
|
||||||
double half = Math.Round((double)Size / (double)2, 15);
|
|
||||||
if (p == 0) return (int)half;
|
|
||||||
if (Invert)
|
|
||||||
{
|
|
||||||
if (p < 0)
|
|
||||||
{
|
|
||||||
p *= -1;
|
|
||||||
p++;
|
|
||||||
return (float)(half * p);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return (float)(half - (p * half));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (p < 0)
|
|
||||||
{
|
|
||||||
p *= -1;
|
|
||||||
p++;
|
|
||||||
return (float)(Size - (half * p));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return (float)(p * half + half);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public void ForceUpdate(ResizeEventArgs e)
|
public void ForceUpdate(ResizeEventArgs e)
|
||||||
{
|
{
|
||||||
BlockDraw = true;
|
BlockDraw = true;
|
||||||
@ -237,7 +173,7 @@ public class Window : NativeWindow , IWindow
|
|||||||
int ly = (top ? Controls[i].Location.Y : Size.Y - Controls[i].Distance.Y - Controls[i].Size.Y);
|
int ly = (top ? Controls[i].Location.Y : Size.Y - Controls[i].Distance.Y - Controls[i].Size.Y);
|
||||||
int sy = (bottom ? Size.Y - Controls[i].Distance.Y - ly : Controls[i].Size.Y);
|
int sy = (bottom ? Size.Y - Controls[i].Distance.Y - ly : Controls[i].Size.Y);
|
||||||
int sx = (right ? Size.X - Controls[i].Distance.X - lx : Controls[i].Size.X);
|
int sx = (right ? Size.X - Controls[i].Distance.X - lx : Controls[i].Size.X);
|
||||||
if (Controls[i].Size.X != sx || Controls[i].Size.Y != sy) Controls[i].Size = new(sx, sy);
|
Controls[i].Size = new(sx, sy);
|
||||||
Controls[i].Location = new(lx, ly, Controls[i].Location.Z);
|
Controls[i].Location = new(lx, ly, Controls[i].Location.Z);
|
||||||
if (Controls[i] is IParent parent)
|
if (Controls[i] is IParent parent)
|
||||||
{
|
{
|
||||||
@ -257,6 +193,7 @@ public class Window : NativeWindow , IWindow
|
|||||||
if (e.Width == 0 && e.Height == 0 && WindowState != WindowState.Fullscreen) return;
|
if (e.Width == 0 && e.Height == 0 && WindowState != WindowState.Fullscreen) return;
|
||||||
WindowSizeMatrix = Matrix4.CreateOrthographicOffCenter(0.0f, e.Width, e.Height, 0, 1, -1);
|
WindowSizeMatrix = Matrix4.CreateOrthographicOffCenter(0.0f, e.Width, e.Height, 0, 1, -1);
|
||||||
GL.Viewport(0, 0, e.Width, e.Height);
|
GL.Viewport(0, 0, e.Width, e.Height);
|
||||||
|
CS = e.Size;
|
||||||
ForceUpdate(e);
|
ForceUpdate(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,13 +379,13 @@ public class Window : NativeWindow , IWindow
|
|||||||
}
|
}
|
||||||
BlockDraw = false;
|
BlockDraw = false;
|
||||||
}
|
}
|
||||||
GL.Scissor(0,0,Size.X, Size.Y);
|
GL.Scissor(0,0,CS.X, CS.Y);
|
||||||
GL.Clear(ClearBufferMask.ColorBufferBit);
|
GL.Clear(ClearBufferMask.ColorBufferBit);
|
||||||
for (int i = 0; i < Controls.Length; i++)
|
for (int i = 0; i < Controls.Length; i++)
|
||||||
{
|
{
|
||||||
if (!Controls[i].Loaded) continue;
|
if (!Controls[i].Loaded) continue;
|
||||||
GL.Scissor(0, 0, Size.X, Size.Y);
|
GL.Scissor(0, 0, CS.X, CS.Y);
|
||||||
Controls[i].Draw(0,0,Size.X, ClientSize.Y);
|
Controls[i].Draw(0,0,CS.X, CS.Y);
|
||||||
}
|
}
|
||||||
Context.SwapBuffers();
|
Context.SwapBuffers();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user