Window platform implementation now via extension

This commit is contained in:
Simon Lübeß
2020-11-16 21:44:53 +01:00
parent ebd56e54b1
commit 7b81339889
5 changed files with 26 additions and 44 deletions
-1
View File
@@ -1,6 +1,5 @@
using System; using System;
using GlitchyEngine.Events; using GlitchyEngine.Events;
using GlitchyEngine.Platform.Windows;
using GlitchyEngine.Platform.DX11; using GlitchyEngine.Platform.DX11;
using GlitchyEngine.ImGui; using GlitchyEngine.ImGui;
@@ -12,7 +12,7 @@ namespace GlitchyEngine
/// Windows (WinApi) specific implementation of the Input-class /// Windows (WinApi) specific implementation of the Input-class
extension Input extension Input
{ {
/// Represents the state of the input devices on the windows plattform (WinApi that is). /// Represents the state of the input devices on the windows platform (WinApi that is).
struct WindowsInputState struct WindowsInputState
{ {
public int8[256] KeyStates; public int8[256] KeyStates;
@@ -1,3 +1,4 @@
#if GE_WINDOWS
using System; using System;
using DirectX.Common; using DirectX.Common;
using DirectX.Windows; using DirectX.Windows;
@@ -12,20 +13,8 @@ using static System.Windows;
namespace GlitchyEngine namespace GlitchyEngine
{ {
#if GE_WINDOWS /// The windows specific Window implementation
public extension Window public extension Window
{
public static override Window CreateWindow(WindowDescription description)
{
return new GlitchyEngine.Platform.Windows.WindowsWindow(description);
}
}
#endif
}
namespace GlitchyEngine.Platform.Windows
{
public class WindowsWindow : Window
{ {
private Windows.HInstance _instanceHandle; private Windows.HInstance _instanceHandle;
private Windows.HWnd _windowHandle; private Windows.HWnd _windowHandle;
@@ -135,8 +124,6 @@ namespace GlitchyEngine.Platform.Windows
} }
} }
public override StringView Title public override StringView Title
{ {
get get
@@ -158,7 +145,7 @@ namespace GlitchyEngine.Platform.Windows
public override void* NativeWindow => (void*)(int)_windowHandle; public override void* NativeWindow => (void*)(int)_windowHandle;
public this(WindowDescription desc) public override this(WindowDescription desc)
{ {
_minMaxInfo.MaximumTrackingSize.x = int32.MaxValue; _minMaxInfo.MaximumTrackingSize.x = int32.MaxValue;
_minMaxInfo.MaximumTrackingSize.y = int32.MaxValue; _minMaxInfo.MaximumTrackingSize.y = int32.MaxValue;
@@ -215,7 +202,7 @@ namespace GlitchyEngine.Platform.Windows
private static LRESULT MessageHandler(HWND hwnd, uint32 uMsg, WPARAM wParam, LPARAM lParam) private static LRESULT MessageHandler(HWND hwnd, uint32 uMsg, WPARAM wParam, LPARAM lParam)
{ {
void* windowPtr = (void*)GetWindowLongPtrW(hwnd, GWL_USERDATA); void* windowPtr = (void*)GetWindowLongPtrW(hwnd, GWL_USERDATA);
WindowsWindow window = (WindowsWindow)Internal.UnsafeCastToObject(windowPtr); Window window = (Window)Internal.UnsafeCastToObject(windowPtr);
if (window == null) if (window == null)
{ {
@@ -472,3 +459,4 @@ namespace GlitchyEngine.Platform.Windows
} }
} }
} }
#endif
-3
View File
@@ -1,9 +1,6 @@
using System; using System;
using GlitchLog; using GlitchLog;
using System.Diagnostics; using System.Diagnostics;
using GlitchyEngine.Platform.Windows;
//using imgui_beef;
namespace GlitchyEngine namespace GlitchyEngine
{ {
+20 -22
View File
@@ -28,70 +28,73 @@ namespace GlitchyEngine
} }
} }
public abstract class Window public class Window
{ {
public delegate void EventCallback(Event e); public delegate void EventCallback(Event e);
protected EventCallback _eventCallback ~ delete _; protected EventCallback _eventCallback ~ delete _;
public extern this(WindowDescription windowDescription);
/** /**
* Gets or Sets the minimum width of the window. * Gets or Sets the minimum width of the window.
*/ */
public abstract int32 MinWidth {get; set;} public extern int32 MinWidth {get; set;}
/** /**
* Gets or Sets the minimum height of the window. * Gets or Sets the minimum height of the window.
*/ */
public abstract int32 MinHeight {get; set;} public extern int32 MinHeight {get; set;}
/** /**
* Gets or Sets the maximum width of the window. * Gets or Sets the maximum width of the window.
*/ */
public abstract int32 MaxWidth {get; set;} public extern int32 MaxWidth {get; set;}
/** /**
* Gets or Sets the maximum height of the window. * Gets or Sets the maximum height of the window.
*/ */
public abstract int32 MaxHeight {get; set;} public extern int32 MaxHeight {get; set;}
/** /**
* Gets or Sets the width and height of the window. * Gets or Sets the width and height of the window.
*/ */
public abstract Point Size {get; set;} public extern Point Size {get; set;}
/** /**
* Gets or Sets the width of the window. * Gets or Sets the width of the window.
*/ */
public abstract int32 Width {get; set;} public extern int32 Width {get; set;}
/** /**
* Gets or Sets the height of the window. * Gets or Sets the height of the window.
*/ */
public abstract int32 Height {get; set;} public extern int32 Height {get; set;}
/** /**
* Gets or Sets the position of the upper-left corner of the client area of the window. * Gets or Sets the position of the upper-left corner of the client area of the window.
*/ */
public abstract Point Position {get; set;} public extern Point Position {get; set;}
/** /**
* Gets or Sets the x-coordinate of the upper-left corner of the client area of the window. * Gets or Sets the x-coordinate of the upper-left corner of the client area of the window.
*/ */
public abstract int32 PositionX {get; set;} public extern int32 PositionX {get; set;}
/** /**
* Gets or Sets the y-coordinate of the upper-left corner of the client area of the window. * Gets or Sets the y-coordinate of the upper-left corner of the client area of the window.
*/ */
public abstract int32 PositionY {get; set;} public extern int32 PositionY {get; set;}
/** /**
* Gets or Sets the windows title. * Gets or Sets the windows title.
*/ */
public abstract StringView Title {get; set;} public extern StringView Title {get; set;}
/** /**
* Gets or Sets whether or not the application uses VSync * Gets or Sets whether or not the application uses VSync
*/ */
public abstract bool IsVSync {get; set;} public extern bool IsVSync {get; set;}
/**
* Gets a pointer to the platform specific window representation.
public abstract void* NativeWindow {get;} */
public extern void* NativeWindow {get;}
public EventCallback EventCallback public EventCallback EventCallback
{ {
@@ -99,11 +102,6 @@ namespace GlitchyEngine
set => _eventCallback = value; set => _eventCallback = value;
} }
public abstract void Update(); public extern void Update();
/**
* Function used to create a platform specific window.
*/
public static extern Window CreateWindow(WindowDescription description);
} }
} }