Framework Update

A few changes, mostly to update the .NET framework version.
This commit is contained in:
JacobTech 2023-12-22 11:11:51 -05:00
parent f479409fe9
commit ecf4e808ea
8 changed files with 177 additions and 68 deletions

View File

@ -36,7 +36,7 @@ public class ContextMenu : Window
BackgroundColor = new(0, 0, 0, 0); BackgroundColor = new(0, 0, 0, 0);
} }
private Task ItemsOnControlAdded(IRenderObject arg) private Task ItemsOnControlAdded(int index, IRenderObject arg)
{ {
arg.Clicked += ArgOnClicked; arg.Clicked += ArgOnClicked;
this.Context.MakeCurrent(); this.Context.MakeCurrent();

View File

@ -4,6 +4,7 @@ public enum TextureDisplay : byte
{ {
Clamped, Clamped,
HorizontalCenter, HorizontalCenter,
TextureHorizontalCenter,
VerticalCenter, VerticalCenter,
Center, Center,
ProgressHorizontalCenter, ProgressHorizontalCenter,

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<FileVersion>1.0.0.0</FileVersion> <FileVersion>1.0.0.0</FileVersion>
@ -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.7-alpha48</Version> <Version>1.0.7-alpha69</Version>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">

View File

@ -24,6 +24,8 @@ public interface IWindow : IParent
public string ClipboardString { get; set; } public string ClipboardString { get; set; }
public string Title { get; set; }
public Vector2 MousePosition { get; set; } public Vector2 MousePosition { get; set; }
public ContextMenu? ActiveMenu { get; set; } public ContextMenu? ActiveMenu { get; set; }

View File

@ -18,7 +18,7 @@ public class ControlList
public int Length => _internal.Count; public int Length => _internal.Count;
internal event Func<IRenderObject, Task>? ControlAdded; internal event Func<int, IRenderObject, Task>? ControlAdded;
internal event Func<Task>? ControlRemoved; internal event Func<Task>? ControlRemoved;
public void Remove(IRenderObject item, bool purge = true) public void Remove(IRenderObject item, bool purge = true)
@ -32,16 +32,22 @@ public class ControlList
GC.Collect(); GC.Collect();
if (ControlRemoved is not null && !Clearing) _ = ControlRemoved.Invoke(); if (ControlRemoved is not null && !Clearing) _ = ControlRemoved.Invoke();
} }
public void MoveControlToEnd(IRenderObject item)
{
_internal.Remove(item);
_internal.Add(item);
}
public void Add(IRenderObject item) public void Add(IRenderObject item)
{ {
if (ControlAdded is not null) ControlAdded.Invoke(item).Wait(); if (ControlAdded is not null) ControlAdded.Invoke(_internal.Count, item).Wait();
_internal.Add(item); _internal.Add(item);
} }
public void Insert(int index, IRenderObject item) public void Insert(int index, IRenderObject item)
{ {
if (ControlAdded is not null) ControlAdded.Invoke(item).Wait(); if (ControlAdded is not null) ControlAdded.Invoke(index, item).Wait();
_internal.Insert(index, item); _internal.Insert(index, item);
} }

View File

@ -117,9 +117,21 @@ public class FlowLayout : ParentBase
return Task.CompletedTask; return Task.CompletedTask;
} }
private Task ControlsOnControlAdded(IRenderObject arg) private Task ControlsOnControlAdded(int index, IRenderObject arg)
{ {
if (Controls.Length > 0) arg.Location = new(0, Controls[Controls.Length - 1].Location.Y + Controls[Controls.Length - 1].Size.Y, arg.Location.Z); if (Controls.Length > 0)
{
if (index < Controls.Length)
{
arg.Location = Controls[index].Location;
Controls[index].Location = new(arg.Location.X, arg.Location.Y + arg.Size.Y, arg.Location.Z);
for (int i = index + 1; i < Controls.Length; i++)
{
Controls[i].Location = new(0, Controls[i - 1].Location.Y + Controls[i - 1].Size.Y, arg.Location.Z);
}
}
else arg.Location = new(0, Controls[Controls.Length - 1].Location.Y + Controls[Controls.Length - 1].Size.Y, arg.Location.Z);
}
else arg.Location = new(0); else arg.Location = new(0);
if (arg is IParent par2) if (arg is IParent par2)
{ {

View File

@ -1,4 +1,5 @@
using GraphicsManager.Enums; using System.Diagnostics;
using GraphicsManager.Enums;
using GraphicsManager.Interfaces; using GraphicsManager.Interfaces;
using GraphicsManager.Objects.Core; using GraphicsManager.Objects.Core;
using OpenTK.Graphics.OpenGL4; using OpenTK.Graphics.OpenGL4;
@ -18,6 +19,34 @@ public class Rectangle : ITextureObject
public ObjectAnchor Anchor { get; set; } = ObjectAnchor.Left | ObjectAnchor.Top; public ObjectAnchor Anchor { get; set; } = ObjectAnchor.Left | ObjectAnchor.Top;
public Vector3i GetWindowLocation()
{
if (!Loaded) return Location;
Vector3i loc = Location;
IParent? p = Parent;
while (p is not null)
{
loc += p.Position;
p = p.Parent;
}
return loc;
}
public Vector3i GetParentLocation(IParent par)
{
if (!Loaded) return Location;
Vector3i loc = Location;
IParent? p = Parent;
while (p is not null && p != par)
{
loc += p.Position;
p = p.Parent;
}
return loc;
}
public List<Texture> Textures { get; set; } = new(); public List<Texture> Textures { get; set; } = new();
public ContextMenu? ContextMenu { get; set; } = null; public ContextMenu? ContextMenu { get; set; } = null;
public event Func<string[], Task>? FilesDroped; public event Func<string[], Task>? FilesDroped;
@ -63,12 +92,13 @@ public class Rectangle : ITextureObject
} }
public Action? OnDrawAction; public Action? OnDrawAction;
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)
{ {
if (Visible && Loaded) if (Visible && Loaded)
{ {
if (OnDrawAction is not null) OnDrawAction.Invoke();
if (!Window!.Context.IsCurrent) Window.Context.MakeCurrent(); if (!Window!.Context.IsCurrent) Window.Context.MakeCurrent();
foreach (Texture tex in Textures) foreach (Texture tex in Textures)
{ {
@ -132,6 +162,17 @@ public class Rectangle : ITextureObject
if (WindowLoaded is not null) WindowLoaded.Invoke(this); if (WindowLoaded is not null) WindowLoaded.Invoke(this);
} }
public void TransferOwners(IWindow w, IParent p)
{
if (Parent is not null)
{
Parent.Controls._internal.Remove(this);
Window = w;
Parent = p;
}
p.Controls.Add(this);
}
private void WindowOnFileDrop(FileDropEventArgs obj) private void WindowOnFileDrop(FileDropEventArgs obj)
{ {
if (!MouseInside) return; if (!MouseInside) return;
@ -279,12 +320,25 @@ public class Rectangle : ITextureObject
default: default:
switch (value) switch (value)
{ {
case TextureDisplay.HorizontalCenter or TextureDisplay.ProgressHorizontalCenter: case TextureDisplay.Clamped:
Points = new float[]
{
saf.X, laf.Y, 0, Textures[0].MaxText.X, Textures[0].MaxText.Y,
saf.X, saf.Y, 0, Textures[0].MaxText.X, 0,
laf.X, saf.Y, 0, 0, 0,
laf.X, laf.Y, 0, 0, Textures[0].MaxText.Y,
};
break;
case TextureDisplay.HorizontalCenter or TextureDisplay.ProgressHorizontalCenter or TextureDisplay.TextureHorizontalCenter:
float per = (float)Textures[0].RawSize!.Value.Y / Textures[0].RawSize!.Value.X; float per = (float)Textures[0].RawSize!.Value.Y / Textures[0].RawSize!.Value.X;
float diff = 0; float diff = 0;
if (Window is not null) if (Window is not null)
{ {
diff = Window.IntToFloat(Size.Y) + 1; diff = Window.IntToFloat(Size.Y) + 1;
if (value == TextureDisplay.TextureHorizontalCenter)
{
diff = Window.IntToFloat(Textures[0].RawSize!.Value.Y);
}
} }
Points = new float[] Points = new float[]
{ {
@ -326,7 +380,15 @@ public class Rectangle : ITextureObject
if (Window is null || Parent is null) return; if (Window is null || Parent is null) return;
Parent.ReportSizeUpdate(this); Parent.ReportSizeUpdate(this);
//float[] temp = Points; //float[] temp = Points;
float[] temp = Textures.Count == 0 ? new float[12] : (TextureDisplay == TextureDisplay.Center ? new float[20] : new float[40]); float[] temp = Textures.Count == 0
? new float[12]
: TextureDisplay switch
{
TextureDisplay.Clamped => new float[20],
TextureDisplay.HorizontalCenter or TextureDisplay.ProgressHorizontalCenter
or TextureDisplay.Center or TextureDisplay.TextureHorizontalCenter => new float[40],
_ => new float[20]
};
saf = new Vector2(Parent.IntToFloat(value.X + loc_.X, false), Parent.IntToFloat(value.Y + loc_.Y, true)); saf = new Vector2(Parent.IntToFloat(value.X + loc_.X, false), Parent.IntToFloat(value.Y + loc_.Y, true));
temp[2] = Location.Z; temp[2] = Location.Z;
temp[(!Textures.Any() ? 5 : 7)] = Location.Z; temp[(!Textures.Any() ? 5 : 7)] = Location.Z;
@ -347,8 +409,16 @@ public class Rectangle : ITextureObject
Vector2i s = value; Vector2i s = value;
float diff = Window.IntToFloat(s.Y) + 1; float diff = Window.IntToFloat(s.Y) + 1;
float per = (float)Textures[0].RawSize!.Value.Y / Textures[0].RawSize!.Value.X; 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);
switch (TextureDisplay) switch (TextureDisplay)
{ {
case TextureDisplay.Clamped:
temp[3] = Textures[0].MaxText.X;
temp[4] = Textures[0].MaxText.Y;
temp[8] = Textures[0].MaxText.X;
temp[19] = Textures[0].MaxText.Y;
break;
case TextureDisplay.HorizontalCenter: case TextureDisplay.HorizontalCenter:
temp[3] = Textures[0].MaxText.X; temp[3] = Textures[0].MaxText.X;
temp[4] = Textures[0].MaxText.Y; temp[4] = Textures[0].MaxText.Y;
@ -413,21 +483,21 @@ public class Rectangle : ITextureObject
} }
else else
{ {
temp[3] = (0.666666f + ((s.X - s.Y) / s.Y)) * Textures[0].MaxText.X; temp[3] = (0.666666f + (((s.X - s.Y) / (float)s.Y)* per)) * Textures[0].MaxText.X;
temp[4] = (0.666666f + ((s.X - s.Y) / s.Y)) * Textures[0].MaxText.Y; temp[4] = Textures[0].MaxText.Y;
temp[8] = (0.666666f + ((s.X - s.Y) / s.Y)) * Textures[0].MaxText.X; temp[8] = temp[3];
temp[19] = (0.666666f + ((s.X - s.Y) / s.Y)) * Textures[0].MaxText.Y; temp[19] = Textures[0].MaxText.Y;
//start last 33% of texture //start last 33% of texture
temp[20] =laf.X + diff; // top r temp[20] = saf.X; // top r
temp[21] = laf.Y; temp[21] = laf.Y;
temp[22] = 0; temp[22] = 0;
temp[23] = per; temp[23] = temp[3];
temp[24] = 1; temp[24] = 1;
temp[25] = laf.X + diff; // bot r temp[25] = saf.X; // bot r
temp[26] = saf.Y; temp[26] = saf.Y;
temp[27] = 0; temp[27] = 0;
temp[28] = per; temp[28] = temp[3];
temp[29] = 0; temp[29] = 0;
temp[30] = laf.X + diff; // bot l temp[30] = laf.X + diff; // bot l
@ -446,33 +516,33 @@ public class Rectangle : ITextureObject
else else
{ {
//first 33% of texture //first 33% of texture
temp[3] = (s.X/(s.Y*3)); temp[3] = ((s.X/(float)s.Y)*per);
temp[4] = Textures[0].MaxText.Y; temp[4] = Textures[0].MaxText.Y;
temp[8] = (s.X/(s.Y*3)); temp[8] = temp[3];
temp[19] = Textures[0].MaxText.Y; temp[19] = Textures[0].MaxText.Y;
temp[20] = laf.X; // top r temp[20] = saf.X; // top r
temp[21] = laf.Y; temp[21] = laf.Y;
temp[22] = 0; temp[22] = 0;
temp[23] = (s.X/(s.Y*3)); temp[23] = temp[3];
temp[24] = 1; temp[24] = Textures[0].MaxText.Y;
temp[25] = saf.X; // bot r temp[25] = saf.X; // bot r
temp[26] = saf.Y; temp[26] = saf.Y;
temp[27] = 0; temp[27] = 0;
temp[28] = (s.X/(s.Y*3)); temp[28] = temp[3];
temp[29] = 0; temp[29] = 0;
temp[30] = saf.X; // bot l temp[30] = saf.X; // bot l
temp[31] = saf.Y; temp[31] = saf.Y;
temp[32] = 0; temp[32] = 0;
temp[33] = (s.X/(s.Y*3)); temp[33] = temp[3];
temp[34] = 0; temp[34] = 0;
temp[35] = laf.X; // top l temp[35] = saf.X; // top l
temp[36] = laf.Y; temp[36] = laf.Y;
temp[37] = 0; temp[37] = 0;
temp[38] = (s.X/(s.Y*3)); temp[38] = temp[3];
temp[39] = 1; temp[39] = Textures[0].MaxText.Y;
} }
break; break;
} }
@ -492,7 +562,15 @@ public class Rectangle : ITextureObject
{ {
loc_ = value; loc_ = value;
if (Window is null || Parent is null) return; if (Window is null || Parent is null) return;
float[] temp = Textures.Count == 0 ? new float[12] : (TextureDisplay == TextureDisplay.Center ? new float[20] : new float[40]); float[] temp = Textures.Count == 0
? new float[12]
: TextureDisplay switch
{
TextureDisplay.Clamped => new float[20],
TextureDisplay.HorizontalCenter or TextureDisplay.ProgressHorizontalCenter
or TextureDisplay.Center => new float[40],
_ => new float[20]
};
laf = new Vector2(Parent.IntToFloat(value.X, false), Parent.IntToFloat(value.Y, true)); laf = new Vector2(Parent.IntToFloat(value.X, false), Parent.IntToFloat(value.Y, true));
temp[2] = value.Z; temp[2] = value.Z;
temp[(!Textures.Any() ? 5 : 7)] = value.Z; temp[(!Textures.Any() ? 5 : 7)] = value.Z;
@ -515,6 +593,12 @@ public class Rectangle : ITextureObject
float per = (float)Textures[0].RawSize!.Value.Y / Textures[0].RawSize!.Value.X; float per = (float)Textures[0].RawSize!.Value.Y / Textures[0].RawSize!.Value.X;
switch (TextureDisplay) switch (TextureDisplay)
{ {
case TextureDisplay.Clamped:
temp[3] = Textures[0].MaxText.X;
temp[4] = Textures[0].MaxText.Y;
temp[8] = Textures[0].MaxText.X;
temp[19] = Textures[0].MaxText.Y;
break;
case TextureDisplay.HorizontalCenter: case TextureDisplay.HorizontalCenter:
temp[3] = Textures[0].MaxText.X; temp[3] = Textures[0].MaxText.X;
temp[4] = Textures[0].MaxText.Y; temp[4] = Textures[0].MaxText.Y;
@ -579,21 +663,21 @@ public class Rectangle : ITextureObject
} }
else else
{ {
temp[3] = (0.666666f + ((s.X - s.Y) / s.Y)) * Textures[0].MaxText.X; temp[3] = (0.666666f + (((s.X - s.Y) / (float)s.Y)* per)) * Textures[0].MaxText.X;
temp[4] = (0.666666f + ((s.X - s.Y) / s.Y)) * Textures[0].MaxText.Y; temp[4] = Textures[0].MaxText.Y;
temp[8] = (0.666666f + ((s.X - s.Y) / s.Y)) * Textures[0].MaxText.X; temp[8] = temp[3];
temp[19] = (0.666666f + ((s.X - s.Y) / s.Y)) * Textures[0].MaxText.Y; temp[19] = Textures[0].MaxText.Y;
//start last 33% of texture //start last 33% of texture
temp[20] =laf.X + diff; // top r temp[20] = saf.X; // top r
temp[21] = laf.Y; temp[21] = laf.Y;
temp[22] = 0; temp[22] = 0;
temp[23] = per; temp[23] = temp[3];
temp[24] = 1; temp[24] = 1;
temp[25] = laf.X + diff; // bot r temp[25] = saf.X; // bot r
temp[26] = saf.Y; temp[26] = saf.Y;
temp[27] = 0; temp[27] = 0;
temp[28] = per; temp[28] = temp[3];
temp[29] = 0; temp[29] = 0;
temp[30] = laf.X + diff; // bot l temp[30] = laf.X + diff; // bot l
@ -612,33 +696,33 @@ public class Rectangle : ITextureObject
else else
{ {
//first 33% of texture //first 33% of texture
temp[3] = (s.X/(s.Y*3)); temp[3] = ((s.X/(float)s.Y)*per);
temp[4] = Textures[0].MaxText.Y; temp[4] = Textures[0].MaxText.Y;
temp[8] = (s.X/(s.Y*3)); temp[8] = temp[3];
temp[19] = Textures[0].MaxText.Y; temp[19] = Textures[0].MaxText.Y;
temp[20] = laf.X; // top r temp[20] = saf.X; // top r
temp[21] = laf.Y; temp[21] = laf.Y;
temp[22] = 0; temp[22] = 0;
temp[23] = (s.X/(s.Y*3)); temp[23] = temp[3];
temp[24] = 1; temp[24] = Textures[0].MaxText.Y;
temp[25] = saf.X; // bot r temp[25] = saf.X; // bot r
temp[26] = saf.Y; temp[26] = saf.Y;
temp[27] = 0; temp[27] = 0;
temp[28] = (s.X/(s.Y*3)); temp[28] = temp[3];
temp[29] = 0; temp[29] = 0;
temp[30] = saf.X; // bot l temp[30] = saf.X; // bot l
temp[31] = saf.Y; temp[31] = saf.Y;
temp[32] = 0; temp[32] = 0;
temp[33] = (s.X/(s.Y*3)); temp[33] = temp[3];
temp[34] = 0; temp[34] = 0;
temp[35] = laf.X; // top l temp[35] = saf.X; // top l
temp[36] = laf.Y; temp[36] = laf.Y;
temp[37] = 0; temp[37] = 0;
temp[38] = (s.X/(s.Y*3)); temp[38] = temp[3];
temp[39] = 1; temp[39] = Textures[0].MaxText.Y;
} }
break; break;
} }

View File

@ -13,7 +13,6 @@ public class TexturedTextBox : Rectangle
{ {
private Label _label; private Label _label;
private Label _watermark; private Label _watermark;
public ContextMenu? ContextMenu { get; set; }
public TextLocation TextLocation { get; set; } = TextLocation.TopLeft; public TextLocation TextLocation { get; set; } = TextLocation.TopLeft;
@ -23,13 +22,15 @@ public class TexturedTextBox : Rectangle
base.HoverMouse = MouseCursor.IBeam; base.HoverMouse = MouseCursor.IBeam;
_label = new Label(LabelFam) _label = new Label(LabelFam)
{ {
HoverMouse = MouseCursor.IBeam HoverMouse = MouseCursor.IBeam,
IgnoreHover = true
}; };
TextureDisplay = TextureDisplay.HorizontalCenter; TextureDisplay = TextureDisplay.HorizontalCenter;
_watermark = new(WaterFam) _watermark = new(WaterFam)
{ {
Color = new(128, 128, 128, 255), Color = new(128, 128, 128, 255),
HoverMouse = MouseCursor.IBeam HoverMouse = MouseCursor.IBeam,
IgnoreHover = true
}; };
} }
@ -52,13 +53,15 @@ public class TexturedTextBox : Rectangle
base.HoverMouse = MouseCursor.IBeam; base.HoverMouse = MouseCursor.IBeam;
_label = new Label(LabelFam) _label = new Label(LabelFam)
{ {
HoverMouse = MouseCursor.IBeam HoverMouse = MouseCursor.IBeam,
IgnoreHover = true
}; };
TextureDisplay = TextureDisplay.HorizontalCenter; TextureDisplay = TextureDisplay.HorizontalCenter;
_watermark = new(WaterFam) _watermark = new(WaterFam)
{ {
Color = new(128, 128, 128, 255), Color = new(128, 128, 128, 255),
HoverMouse = MouseCursor.IBeam HoverMouse = MouseCursor.IBeam,
IgnoreHover = true
}; };
} }
@ -212,28 +215,29 @@ public class TexturedTextBox : Rectangle
{ {
if (!Visible || !Loaded) return; if (!Visible || !Loaded) return;
int nx = x, ny = y, nw = w, nh = h; int nx = x, ny = y, nw = w, nh = h;
if (Location.X + Border > nw) if (Location.X > nw)
return; return;
else else
{ {
nx += (Location.X + Border); nx += Location.X;
nw -= (Location.X + Border); nw -= Location.X;
if (Size.X - Border < nw) if (Size.X < nw)
nw = Size.X - Border; nw = Size.X;
} }
if (Location.Y + Border > nh) if (Location.Y > nh)
return; return;
else else
{ {
ny += (Location.Y + Border); ny += Location.Y;
nh -= (Location.Y + Border); nh -= Location.Y;
if (Size.Y - Border < nh) if (Size.Y < nh)
nh = Size.Y - Border; nh = Size.Y;
} }
if (nh < 1 || nw < 1) return; if (nw == 0 || nh == 0) return;
GL.Scissor(nx,ny,nw,nh); GL.Scissor(nx, Window!.Size.Y - ny - nh, nw, nh);
base.Draw(nx,ny,nw,nh); base.Draw(nx,ny,nw,nh);
GL.Scissor(nx, Window!.Size.Y - ny - nh, nw, nh);
if (!string.IsNullOrEmpty(_label.Text)) _label.Draw(nx,ny,nw,nh); if (!string.IsNullOrEmpty(_label.Text)) _label.Draw(nx,ny,nw,nh);
else _watermark.Draw(nx,ny,nw,nh); else _watermark.Draw(nx,ny,nw,nh);
} }