diff --git a/GraphicsManager/FPSWindow.cs b/GraphicsManager/FPSWindow.cs
index 4ff49ac..cd8899a 100755
--- a/GraphicsManager/FPSWindow.cs
+++ b/GraphicsManager/FPSWindow.cs
@@ -48,6 +48,12 @@ public class FPSWindow : GameWindow , IWindow
ClientRectangle = new Box2i(num, num2, num + Size.X, num2 + Size.Y);
}
+ public Matrix4 WindowSizeMatrix { get; private set; }
+
+ public float IntToWindow(float Point, bool Y = false)
+ {
+ return Point;
+ }
public IParent? Parent { get; } = null;
public MouseCursor HoverMouse { get; set; } = MouseCursor.Default;
public Vector2 LocationAsFloat { get; } = new Vector2(0f, 0f);
diff --git a/GraphicsManager/GraphicsManager.csproj b/GraphicsManager/GraphicsManager.csproj
index 803fe6b..1a5603a 100644
--- a/GraphicsManager/GraphicsManager.csproj
+++ b/GraphicsManager/GraphicsManager.csproj
@@ -10,7 +10,7 @@
False
https://git.jacobtech.com/JacobTech.com/GraphicsManager
git
- 1.0.9-alpha29
+ 1.0.9-alpha66
diff --git a/GraphicsManager/Interfaces/IParent.cs b/GraphicsManager/Interfaces/IParent.cs
index 443c986..55545d9 100755
--- a/GraphicsManager/Interfaces/IParent.cs
+++ b/GraphicsManager/Interfaces/IParent.cs
@@ -12,12 +12,9 @@ public interface IParent
public IParent? Parent { get; }
public Vector2i Size { get; }
public void ParentResize(ResizeEventArgs e);
- public float[] RctToFloat(int x, int y, int Width, int Height, bool hasTexture = false, float z = 0.0f);
- public Vector3 PointToVector(float x, float y, float z = 0.0f);
- public float IntToFloat(float p, bool Invert = false);
+ public float IntToWindow(float p, bool Y = false);
public void TryDraw();
public void ReportSizeUpdate(IRenderObject Control);
- public float FloatToInt(float p, bool Invert = false);
public Vector3i Position { get; }
public MouseCursor HoverMouse { get; set; }
}
diff --git a/GraphicsManager/Interfaces/IWindow.cs b/GraphicsManager/Interfaces/IWindow.cs
index b77c6c7..d9284b0 100644
--- a/GraphicsManager/Interfaces/IWindow.cs
+++ b/GraphicsManager/Interfaces/IWindow.cs
@@ -10,6 +10,8 @@ public interface IWindow : IParent
public IGLFWGraphicsContext Context { get; }
public bool ShowMissingChar { get; }
+ public Matrix4 WindowSizeMatrix { get; }
+ public Vector2i ClientSize { get; }
public event Action MouseDown;
diff --git a/GraphicsManager/Objects/Core/ParentBase.cs b/GraphicsManager/Objects/Core/ParentBase.cs
index 293b350..153faa4 100644
--- a/GraphicsManager/Objects/Core/ParentBase.cs
+++ b/GraphicsManager/Objects/Core/ParentBase.cs
@@ -83,7 +83,7 @@ public abstract class ParentBase : Rectangle, IParent
nh = Size.Y;
}
if (nw == 0 || nh == 0) return;
- GL.Scissor(nx, Window!.Size.Y - ny - nh, nw, nh);
+ GL.Scissor(nx, Window!.ClientSize.Y - ny - nh, nw, nh);
base.Draw(nx,ny,nw,nh);
IEnumerable 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++)
{
if (Controls[i].Location.X > Size.X || Controls[i].Location.Y > Size.Y) continue;
- GL.Scissor(nx, Window!.Size.Y - ny - nh, nw, nh);
+ GL.Scissor(nx, Window!.ClientSize.Y - ny - nh, nw, nh);
Controls[i].Draw(nx, ny, nw, nh);
}
}
@@ -147,98 +147,8 @@ public abstract class ParentBase : Rectangle, IParent
}
}
- #region Cool Math Things
- public float[] RctToFloat(int x, int y, int Width, int Height, bool hasTexture = false, float z = 0.0f)
+ public float IntToWindow(float p, bool Y = false)
{
- if (hasTexture)
- {
- return new [] {
- 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 [] {
- 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
- };
- }
+ return Parent!.IntToWindow((Y ? this.Location.Y : Location.X), Y) + p;
}
-
- public Vector3 PointToVector(float x, float y, float z = 0.0f)
- {
- return new Vector3(IntToFloat(x), IntToFloat(y, true), z);
- }
-
- public float IntToFloat(float p, bool Invert = false)
- {
- p += (Invert ? Location.Y : Location.X);
- IParent? TempParentObject = Parent;
- while (TempParentObject is not null)
- {
- p += (Invert ? TempParentObject.Position.Y : TempParentObject.Position.X);
- TempParentObject = TempParentObject.Parent;
- }
- float Size = (Invert ? Window!.Size.Y : Window!.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 FloatToInt(float p, bool Invert = false)
- {
- p += (Invert ? LocationAsFloat.Y : LocationAsFloat.X);
- IParent? tempp = Parent;
- while (tempp is not null)
- {
- p += (Invert ? tempp.LocationAsFloat.Y : tempp.LocationAsFloat.X);
- tempp = tempp.Parent;
- }
-
- float Size = (Invert ? Window!.Size.Y : Window!.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
}
\ No newline at end of file
diff --git a/GraphicsManager/Objects/Core/Shader.cs b/GraphicsManager/Objects/Core/Shader.cs
index 120269d..c072cf9 100755
--- a/GraphicsManager/Objects/Core/Shader.cs
+++ b/GraphicsManager/Objects/Core/Shader.cs
@@ -1,5 +1,6 @@
using OpenTK.Graphics.OpenGL4;
using System.Reflection;
+using OpenTK.Mathematics;
namespace GraphicsManager.Objects.Core;
@@ -85,6 +86,33 @@ public class Shader : IDisposable
GL.DetachShader(Handle, FragmentShader);
GL.DeleteShader(FragmentShader);
GL.DeleteShader(VertexShader);
+
+ GL.GetProgram(Handle, GetProgramParameterName.ActiveUniforms, out var numberOfUniforms);
+
+ // Next, allocate the dictionary to hold the locations.
+ _uniformLocations = new Dictionary();
+
+ // Loop over all the uniforms,
+ for (var i = 0; i < numberOfUniforms; i++)
+ {
+ // get the name of this uniform,
+ var key = GL.GetActiveUniform(Handle, i, out _, out _);
+
+ // get the location,
+ var location = GL.GetUniformLocation(Handle, key);
+
+ // and then add it to the dictionary.
+ _uniformLocations.Add(key, location);
+ }
+ }
+
+ private readonly Dictionary _uniformLocations;
+
+
+ public void SetMatrix4(string name, Matrix4 data)
+ {
+ GL.UseProgram(Handle);
+ GL.UniformMatrix4(_uniformLocations[name], true, ref data);
}
public void Use()
diff --git a/GraphicsManager/Objects/Label.cs b/GraphicsManager/Objects/Label.cs
index 02b0e3d..c37231d 100755
--- a/GraphicsManager/Objects/Label.cs
+++ b/GraphicsManager/Objects/Label.cs
@@ -350,6 +350,7 @@ public class Label : ILabel
GL.Enable(EnableCap.Blend);
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(0, BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
GL.UniformMatrix4(1, false, ref projectionM);
@@ -358,7 +359,7 @@ public class Label : ILabel
float angle_rad = (float)Math.Atan2(DIR.Y, DIR.X);
Matrix4 rotateM = Matrix4.CreateRotationZ(angle_rad);
- Matrix4 transOriginM = Matrix4.CreateTranslation(new Vector3(loc_.X + Window.FloatToInt(Parent!.IntToFloat(0)), loc_.Y + (Font.PixelHeight * Scale) + Window.FloatToInt(Parent!.IntToFloat(0, true), true), 0f));
+ Matrix4 transOriginM = Matrix4.CreateTranslation(new Vector3(loc_.X + Parent!.IntToWindow(0), loc_.Y + (Font.PixelHeight * Scale) + Parent!.IntToWindow(0, true), 0f));
float char_x = 0.0f;
GL.PixelStore(PixelStoreParameter.UnpackAlignment, 1);
diff --git a/GraphicsManager/Objects/RainbowLabel.cs b/GraphicsManager/Objects/RainbowLabel.cs
index 90c705a..1b3e6c9 100755
--- a/GraphicsManager/Objects/RainbowLabel.cs
+++ b/GraphicsManager/Objects/RainbowLabel.cs
@@ -239,7 +239,7 @@ public class RainbowLabel : ILabel
float angle_rad = (float)Math.Atan2(DIR.Y, DIR.X);
Matrix4 rotateM = Matrix4.CreateRotationZ(angle_rad);
- Matrix4 transOriginM = Matrix4.CreateTranslation(new Vector3(loc_.X + Window.FloatToInt(Parent!.IntToFloat(0)), loc_.Y + (Font.PixelHeight * Scale) + Window.FloatToInt(Parent!.IntToFloat(0, true), true), 0f));
+ Matrix4 transOriginM = Matrix4.CreateTranslation(new Vector3(loc_.X + Parent!.IntToWindow(0), loc_.Y + (Font.PixelHeight * Scale) + Parent!.IntToWindow(0, true), 0f));
float char_x = 0.0f;
GL.PixelStore(PixelStoreParameter.UnpackAlignment, 1);
diff --git a/GraphicsManager/Objects/Rectangle.cs b/GraphicsManager/Objects/Rectangle.cs
index 69ca350..a7fe5e1 100755
--- a/GraphicsManager/Objects/Rectangle.cs
+++ b/GraphicsManager/Objects/Rectangle.cs
@@ -1,5 +1,6 @@
using System.Diagnostics;
using GraphicsManager.Enums;
+using GraphicsManager.Globals;
using GraphicsManager.Interfaces;
using GraphicsManager.Objects.Core;
using OpenTK.Graphics.OpenGL4;
@@ -105,6 +106,7 @@ public class Rectangle : ITextureObject
tex.Use();
}
Shader.Use();
+ Shader.SetMatrix4("windowMatrix", Window.WindowSizeMatrix);
if (!Textures.Any() || Shader.Handle == DefaultAlphaShader[Window!.Context].Handle)
{
GL.Uniform4(0, BackgroundColor);
@@ -274,8 +276,9 @@ public class Rectangle : ITextureObject
add = 5;
GL.EnableVertexAttribArray(Textures.First().Location);
GL.VertexAttribPointer(Textures.First().Location, 2, VertexAttribPointerType.Float, false, 5 * sizeof(float), 3 * sizeof(float));
-
+ if (PrintPoints) EXT.PrintArray(value, "Points", 5);
}
+ else if (PrintPoints) EXT.PrintArray(value, "Points", 3);
GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, add * sizeof(float), 0);
GL.EnableVertexAttribArray(0);
GL.BindBuffer(BufferTarget.ArrayBuffer, BufferObject);
@@ -284,6 +287,7 @@ public class Rectangle : ITextureObject
GL.BindBuffer(BufferTarget.ElementArrayBuffer, ElementBufferObject);
GL.BufferData(BufferTarget.ElementArrayBuffer, Indexs.Length * sizeof(ushort), Indexs, Hint);
if (Window is not null && Window.CanControleUpdate && Loaded) Parent!.TryDraw();
+
}
}
catch (AccessViolationException v)
@@ -338,10 +342,10 @@ public class Rectangle : ITextureObject
if (Window is not null)
{
- diff = Window.IntToFloat(Size.Y) + 1;
+ diff = Window.IntToWindow(Size.Y) + 1;
if (value == TextureDisplay.TextureHorizontalCenter)
{
- diff = Window.IntToFloat(Textures[0].RawSize!.Value.Y);
+ diff = Window.IntToWindow(Textures[0].RawSize!.Value.Y);
}
}
Points = new float[]
@@ -372,9 +376,9 @@ public class Rectangle : ITextureObject
if (Window is not null)
{
if (Size.X > Textures[0].RawSize!.Value.X)
- diff = (Window.IntToFloat(Textures[0].RawSize!.Value.X) + 1) / 3;
+ diff = (Window.IntToWindow(Textures[0].RawSize!.Value.X) + 1) / 3;
else
- diff = (Window.IntToFloat(Size.X) + 1) / 3;
+ diff = (Window.IntToWindow(Size.X) + 1) / 3;
}
Points = new float[]
{
@@ -423,6 +427,8 @@ public class Rectangle : ITextureObject
if (Parent is not null) Parent.TryDraw();
}
}
+
+ public bool PrintPoints = false;
private static void SetPoint(float[] temp, int start, float X, float Y, float Z, float Tx, float Ty)
{
@@ -454,7 +460,7 @@ public class Rectangle : ITextureObject
TextureDisplay.Center => new float[80],
_ => new float[20]
};
- saf = new Vector2(Parent.IntToFloat(value.X + loc_.X, false), Parent.IntToFloat(value.Y + loc_.Y, true));
+ saf = new Vector2(Parent.IntToWindow(value.X + loc_.X, false), Parent.IntToWindow(value.Y + loc_.Y, true));
temp[2] = Location.Z;
temp[(!Textures.Any() ? 5 : 7)] = Location.Z;
temp[(!Textures.Any() ? 8 : 12)] = Location.Z;
@@ -472,16 +478,16 @@ public class Rectangle : ITextureObject
if (Textures.Count > 0)
{
Vector2i s = value;
- float diff = Window.IntToFloat(s.Y) + 1;
+ float diff = Window.IntToWindow(s.Y) + 1;
float per = (float)Textures[0].RawSize!.Value.Y / Textures[0].RawSize!.Value.X;
if (TextureDisplay == TextureDisplay.TextureHorizontalCenter)
- diff = Window.IntToFloat(Textures[0].RawSize!.Value.Y);
+ diff = Window.IntToWindow(Textures[0].RawSize!.Value.Y);
if (TextureDisplay == TextureDisplay.Center)
{
if (s.X > Textures[0].RawSize!.Value.X)
- diff = (Window.IntToFloat(Textures[0].RawSize!.Value.X) + 1) / 3;
+ diff = (Window.IntToWindow(Textures[0].RawSize!.Value.X) + 1) / 3;
else
- diff = (Window.IntToFloat(s.X) + 1) / 3;
+ diff = (Window.IntToWindow(s.X) + 1) / 3;
per = Textures[0].MaxText.X / 3;
}
@@ -541,13 +547,13 @@ public class Rectangle : ITextureObject
if (dy > dx) dy = dx;
else dx = dy;
- float diffy = (Window.IntToFloat(Window.Size.Y - dy, true) + 1) / 3;
- diff = (Window.IntToFloat(dx) + 1) / 3;
+ float diffy = (dy + 1) / (float)3;
+ diff = (dx + 1) / (float)3;
per = Textures[0].MaxText.X / 3;
- SetPoint(temp, 20, temp[0], temp[1] - diffy, temp[2], temp[3], temp[4] - (temp[4]*per));
- SetPoint(temp, 25, temp[0], temp[6] + diffy, temp[2], temp[3], temp[4] * per);
+ SetPoint(temp, 20, temp[0], temp[1] + diffy, temp[2], temp[3], temp[4] - (temp[4]*per));
+ SetPoint(temp, 25, temp[0], temp[6] - diffy, temp[2], temp[3], temp[4] * per);
SetPoint(temp, 30, temp[5] - diff, temp[6], temp[2], temp[3] - (temp[3]*per), temp[9]);
SetPoint(temp, 35, temp[10] + diff, temp[6], temp[2], temp[3] * per, temp[9]);
SetPoint(temp, 40, temp[10], temp[26], temp[2], temp[13], temp[29]);
@@ -683,7 +689,7 @@ public class Rectangle : ITextureObject
TextureDisplay.Center => new float[80],
_ => new float[20]
};
- laf = new Vector2(Parent.IntToFloat(value.X, false), Parent.IntToFloat(value.Y, true));
+ laf = new Vector2(Parent.IntToWindow(value.X, false), Parent.IntToWindow(value.Y, true));
temp[2] = value.Z;
temp[(!Textures.Any() ? 5 : 7)] = value.Z;
temp[(!Textures.Any() ? 8 : 12)] = value.Z;
@@ -693,7 +699,7 @@ public class Rectangle : ITextureObject
temp[(!Textures.Any() ? 9 : 15)] = laf.X;
temp[1] = laf.Y;
temp[(!Textures.Any() ? 10 : 16)] = laf.Y;
- saf = new Vector2(Parent.IntToFloat(Size.X + value.X, false), Parent.IntToFloat(Size.Y + value.Y, true));
+ saf = new Vector2(Parent.IntToWindow(Size.X + value.X, false), Parent.IntToWindow(Size.Y + value.Y, true));
temp[0] = saf.X;
temp[(!Textures.Any() ? 3 : 5)] = saf.X;
temp[(!Textures.Any() ? 4 : 6)] = saf.Y;
@@ -701,14 +707,14 @@ public class Rectangle : ITextureObject
if (Textures.Count > 0)
{
Vector2i s = Size;
- float diff = Window.IntToFloat(s.Y) + 1;
+ float diff = Window.IntToWindow(s.Y) + 1;
float per = (float)Textures[0].RawSize!.Value.Y / Textures[0].RawSize!.Value.X;
if (TextureDisplay == TextureDisplay.Center)
{
if (s.X > Textures[0].RawSize!.Value.X)
- diff = (Window.IntToFloat(Textures[0].RawSize!.Value.X) + 1) / 3;
+ diff = (Window.IntToWindow(Textures[0].RawSize!.Value.X) + 1) / 3;
else
- diff = (Window.IntToFloat(s.X) + 1) / 3;
+ diff = (Window.IntToWindow(s.X) + 1) / 3;
per = Textures[0].MaxText.X / 3;
}
switch (TextureDisplay)
@@ -767,11 +773,11 @@ public class Rectangle : ITextureObject
if (dy > dx) dy = dx;
else dx = dy;
- float diffy = (Window.IntToFloat(Window.Size.Y - dy, true) + 1) / 3;
- diff = (Window.IntToFloat(dx) + 1) / 3;
+ float diffy = (dy + 1) / (float)3;
+ diff = (dx + 1) / (float)3;
- SetPoint(temp, 20, temp[0], temp[1] - diffy, temp[2], temp[3], temp[4] - (temp[4]*per));
- SetPoint(temp, 25, temp[0], temp[6] + diffy, temp[2], temp[3], temp[4] * per);
+ SetPoint(temp, 20, temp[0], temp[1] + diffy, temp[2], temp[3], temp[4] - (temp[4]*per));
+ SetPoint(temp, 25, temp[0], temp[6] - diffy, temp[2], temp[3], temp[4] * per);
SetPoint(temp, 30, temp[5] - diff, temp[6], temp[2], temp[3] - (temp[3]*per), temp[9]);
SetPoint(temp, 35, temp[10] + diff, temp[6], temp[2], temp[3] * per, temp[9]);
SetPoint(temp, 40, temp[10], temp[26], temp[2], temp[13], temp[29]);
diff --git a/GraphicsManager/Resources/Shaders/AlphaChannel.vert b/GraphicsManager/Resources/Shaders/AlphaChannel.vert
index b436dab..9d7af87 100755
--- a/GraphicsManager/Resources/Shaders/AlphaChannel.vert
+++ b/GraphicsManager/Resources/Shaders/AlphaChannel.vert
@@ -4,9 +4,12 @@ layout(location = 1) in vec2 aTexCoord;
out vec2 texCoord;
out vec4 vertexColor;
uniform vec4 objColor;
+
+uniform mat4 windowMatrix;
+
void main(void)
{
texCoord = aTexCoord;
- gl_Position = vec4(aPosition, 1.0);
+ gl_Position = vec4(aPosition, 1.0) * windowMatrix;
vertexColor = objColor;
}
\ No newline at end of file
diff --git a/GraphicsManager/Resources/Shaders/AlphaChannelTexture.vert b/GraphicsManager/Resources/Shaders/AlphaChannelTexture.vert
index 013d06b..652dbab 100755
--- a/GraphicsManager/Resources/Shaders/AlphaChannelTexture.vert
+++ b/GraphicsManager/Resources/Shaders/AlphaChannelTexture.vert
@@ -2,8 +2,11 @@
layout(location = 0) in vec3 aPosition;
layout(location = 1) in vec2 aTexCoord;
out vec2 texCoord;
+
+uniform mat4 windowMatrix;
+
void main(void)
{
texCoord = aTexCoord;
- gl_Position = vec4(aPosition, 1.0);
+ gl_Position = vec4(aPosition, 1.0) * windowMatrix;
}
\ No newline at end of file
diff --git a/GraphicsManager/Resources/Shaders/Rectangle.vert b/GraphicsManager/Resources/Shaders/Rectangle.vert
index 280766f..f322276 100755
--- a/GraphicsManager/Resources/Shaders/Rectangle.vert
+++ b/GraphicsManager/Resources/Shaders/Rectangle.vert
@@ -3,8 +3,10 @@ layout (location = 0) in vec3 aPos;
uniform vec4 objColor;
out vec4 vertexColor;
+uniform mat4 windowMatrix;
+
void main()
{
- gl_Position = vec4(aPos, 1.0);
+ gl_Position = vec4(aPos, 1.0) * windowMatrix;
vertexColor = objColor;
}
\ No newline at end of file
diff --git a/GraphicsManager/Resources/Shaders/RectangleTexture.vert b/GraphicsManager/Resources/Shaders/RectangleTexture.vert
index 013d06b..f0d4f75 100755
--- a/GraphicsManager/Resources/Shaders/RectangleTexture.vert
+++ b/GraphicsManager/Resources/Shaders/RectangleTexture.vert
@@ -2,8 +2,11 @@
layout(location = 0) in vec3 aPosition;
layout(location = 1) in vec2 aTexCoord;
out vec2 texCoord;
+
+uniform mat4 windowMatrix;
+
void main(void)
{
texCoord = aTexCoord;
- gl_Position = vec4(aPosition, 1.0);
+ gl_Position = vec4(aPosition, 1.0) * windowMatrix;
}
\ No newline at end of file
diff --git a/GraphicsManager/Window.cs b/GraphicsManager/Window.cs
index 58796d1..7a656a2 100755
--- a/GraphicsManager/Window.cs
+++ b/GraphicsManager/Window.cs
@@ -74,6 +74,7 @@ public class Window : NativeWindow , IWindow
}
if (!Label._characters.ContainsKey(Context)) Label._characters.Add(Context, new());
last = WindowState;
+ WindowSizeMatrix = Matrix4.CreateOrthographicOffCenter(0.0f, Size.X, Size.Y, 0, 1, -1);
KeyDown += OnKeyDownn;
}
@@ -180,6 +181,11 @@ public class Window : NativeWindow , IWindow
else return (float)((1 - (p * Per)) * -1);
}
}
+
+ public float IntToWindow(float p, bool Y = false)
+ {
+ return p;
+ }
public float FloatToInt(float p, bool Invert = false)
{
@@ -231,7 +237,7 @@ public class Window : NativeWindow , IWindow
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 sx = (right ? Size.X - Controls[i].Distance.X - lx : Controls[i].Size.X);
- Controls[i].Size = new(sx, sy);
+ if (Controls[i].Size.X != sx || Controls[i].Size.Y != sy) Controls[i].Size = new(sx, sy);
Controls[i].Location = new(lx, ly, Controls[i].Location.Z);
if (Controls[i] is IParent parent)
{
@@ -241,16 +247,16 @@ public class Window : NativeWindow , IWindow
DrawFrame();
BlockDraw = false;
}
+
+ public Matrix4 WindowSizeMatrix { get; set; }
public void ParentResize(ResizeEventArgs e)
{
base.OnResize(e);
-
-
if (e.Width == 0 && e.Height == 0 && WindowState != WindowState.Fullscreen) return;
+ WindowSizeMatrix = Matrix4.CreateOrthographicOffCenter(0.0f, e.Width, e.Height, 0, 1, -1);
GL.Viewport(0, 0, e.Width, e.Height);
- Matrix4.CreateOrthographicOffCenter(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f);
ForceUpdate(e);
}
@@ -442,7 +448,7 @@ public class Window : NativeWindow , IWindow
{
if (!Controls[i].Loaded) continue;
GL.Scissor(0, 0, Size.X, Size.Y);
- Controls[i].Draw(0,0,Size.X, Size.Y);
+ Controls[i].Draw(0,0,Size.X, ClientSize.Y);
}
Context.SwapBuffers();