ULRE/inc/hgl/platform/Window.h

130 lines
3.8 KiB
C
Raw Normal View History

#ifndef HGL_GRAPH_WINDOW_INCLUDE
#define HGL_GRAPH_WINDOW_INCLUDE
#include<hgl/type/BaseString.h>
2019-04-30 19:01:44 +08:00
#include<hgl/platform/InputDevice.h>
#include<hgl/graph/vulkan/VK.h>
namespace hgl
{
2019-04-30 19:01:44 +08:00
class Window
{
VK_NAMESPACE::Device *device;
virtual VkSurfaceKHR CreateSurface(VkInstance)=0;
2019-04-30 19:01:44 +08:00
protected:
uint width,height;
bool full_screen;
OSString win_name;
bool active;
bool is_close;
bool is_min;
2019-04-30 19:01:44 +08:00
bool key_push[kbRangeSize];
protected:
virtual bool MessageProc()=0;
virtual bool WaitMessage()=0;
public:
virtual void ProcMouseMove (int x,int y) {SafeCallEvent(OnMouseMove, (x,y));}
virtual void ProcMouseWheel (int v,int h,uint mb) {SafeCallEvent(OnMouseWheel, (v,h,mb));}
virtual void ProcMouseDown (int x,int y,uint mb) {SafeCallEvent(OnMouseDown, (x,y,mb));}
virtual void ProcMouseUp (int x,int y,uint mb) {SafeCallEvent(OnMouseUp, (x,y,mb));}
virtual void ProcMouseDblClick (int x,int y,uint mb) {SafeCallEvent(OnMouseDblClick, (x,y,mb));}
//virtual void ProcJoystickDown (uint);
//virtual void ProcJoystickPress (uint);
//virtual void ProcJoystickUp (uint);
virtual void ProcKeyDown (KeyboardButton);
virtual void ProcKeyPress (KeyboardButton kb){SafeCallEvent(OnKeyPress,(kb));}
virtual void ProcKeyUp (KeyboardButton);
virtual void ProcChar (os_char ch){SafeCallEvent(OnChar,(ch));}
virtual void ProcResize (uint,uint);
virtual void ProcActive (bool);
virtual void ProcClose ();
2019-04-30 19:01:44 +08:00
public:
uint GetWidth()const{return width;}
uint GetHeight()const{return height;}
public:
DefEvent(void,OnMouseMove ,(int,int));
DefEvent(void,OnMouseWheel ,(int,int,uint));
DefEvent(void,OnMouseDown ,(int,int,uint));
DefEvent(void,OnMouseUp ,(int,int,uint));
DefEvent(void,OnMouseDblClick ,(int,int,uint));
2019-04-30 19:01:44 +08:00
//DefEvent(void,OnJoystickDown ,(uint));
//DefEvent(void,OnJoystickPress ,(uint));
//DefEvent(void,OnJoystickUp ,(uint));
2019-04-30 19:01:44 +08:00
DefEvent(void,OnKeyDown ,(KeyboardButton));
DefEvent(void,OnKeyPress,(KeyboardButton));
DefEvent(void,OnKeyUp ,(KeyboardButton));
2019-04-30 19:01:44 +08:00
DefEvent(void,OnChar ,(os_char));
2019-04-30 19:01:44 +08:00
DefEvent(void,OnResize ,(uint,uint));
2019-04-30 19:01:44 +08:00
DefEvent(void,OnActive ,(bool));
DefEvent(void,OnClose ,());
2019-04-30 19:01:44 +08:00
public:
Window(const OSString &wn)
{
device=nullptr;
2019-04-30 19:01:44 +08:00
width=height=0;
full_screen=false;
2019-04-30 19:01:44 +08:00
win_name=wn;
active=false;
is_close=true;
is_min=false;
2019-04-30 19:01:44 +08:00
hgl_zero(key_push);
}
virtual ~Window();
2019-04-30 19:01:44 +08:00
virtual bool Create(uint,uint)=0;
virtual bool Create(uint,uint,uint)=0;
virtual void Close()=0;
bool IsMin()const{return is_min;}
2019-04-30 19:01:44 +08:00
bool IsClose()const{return is_close;}
bool IsVisible()const{return (!is_close)&&width&&height;}
2019-04-30 19:01:44 +08:00
virtual void SetCaption(const OSString &)=0;
2019-04-30 19:01:44 +08:00
virtual void Show()=0;
virtual void Hide()=0;
virtual void ToMinWindow()=0;
virtual void ToMaxWindow()=0;
2019-04-30 19:01:44 +08:00
virtual void SetSystemCursor(bool){}
virtual bool Update();
public:
VK_NAMESPACE::Device * CreateRenderDevice(VK_NAMESPACE::Instance *,const VK_NAMESPACE::PhysicalDevice *pd=nullptr);
void CloseRenderDevice();
2019-04-30 19:01:44 +08:00
};//class Window
2019-04-30 19:01:44 +08:00
Window *CreateRenderWindow(const OSString &win_name);
2019-04-30 19:01:44 +08:00
void InitNativeWindowSystem();
}//namespace hgl
#endif//HGL_GRAPH_WINDOW_INCLUDE