This commit is contained in:
2023-07-05 14:23:27 +08:00
9 changed files with 268 additions and 103 deletions

View File

@@ -1,4 +1,4 @@
#ifndef HGL_EVENT_PROC_INCLUDE
#ifndef HGL_EVENT_PROC_INCLUDE
#define HGL_EVENT_PROC_INCLUDE
#include<hgl/type/Queue.h>
@@ -6,7 +6,7 @@
namespace hgl
{
/**
* <EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 事件基类
*/
class EventProc
{
@@ -21,7 +21,7 @@ namespace hgl
using EventProcQueue=Queue<EventProc *>;
/**
* ִ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
* 执行一个事件
*/
inline bool UpdateEvent(EventProcQueue *epq)
{
@@ -42,9 +42,9 @@ namespace hgl
}
/**
* ˢ<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param epq <EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param max_count <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD>¸<EFBFBD><EFBFBD><EFBFBD>(-1<><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
* 刷新执行事件队列
* @param epq 事件队列
* @param max_count 最大刷新个数(-1表示无限制)
*/
inline int UpdateEventQueue(EventProcQueue *epq,int max_count=-1)
{

View File

@@ -1,4 +1,4 @@
#ifndef HGL_IO_INPUT_EVENT_INCLUDE
#ifndef HGL_IO_INPUT_EVENT_INCLUDE
#define HGL_IO_INPUT_EVENT_INCLUDE
#include<hgl/type/SortedSets.h>
@@ -9,15 +9,15 @@ namespace hgl
{
struct EventHeader
{
uint8 type; ///<<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 index; ///<<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ͬһ<CDAC><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>)
uint16 id; ///<<EFBFBD>¼<EFBFBD>id
uint8 type; ///<输入源类型
uint8 index; ///<输入源索引(比如同一设备有多个)
uint16 id; ///<事件id
};
constexpr size_t EventHeaderBytes=sizeof(EventHeader);
/**
* <EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 事件处理结果
*/
enum class EventProcResult
{
@@ -101,4 +101,4 @@ namespace hgl
};//class InputEvent
}//namespace io
}//namespace hgl
#endif//HGL_IO_INPUT_EVENT_INCLUDE
#endif//HGL_IO_INPUT_EVENT_INCLUDE

View File

@@ -1,4 +1,4 @@
#ifndef HGL_IO_DEVICE_MOUSE_EVENT_INCLUDE
#ifndef HGL_IO_DEVICE_MOUSE_EVENT_INCLUDE
#define HGL_IO_DEVICE_MOUSE_EVENT_INCLUDE
#include<hgl/TypeFunc.h>
@@ -7,7 +7,7 @@ namespace hgl
namespace io
{
/**
* <EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD>
* 手柄按键枚举
*/
enum class JoystickButton
{
@@ -33,10 +33,10 @@ namespace hgl
Left =JoystickButton::Left,
Right =JoystickButton::Right,
Fork =JoystickButton::_0, // <EFBFBD><EFBFBD>
Circle =JoystickButton::_1, // Բ
Square =JoystickButton::_2, // <EFBFBD><EFBFBD>
Triangle =JoystickButton::_3, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Fork =JoystickButton::_0, //
Circle =JoystickButton::_1, //
Square =JoystickButton::_2, //
Triangle =JoystickButton::_3, // 三角
L1 =JoystickButton::_6, L2 =JoystickButton::_4,
R1 =JoystickButton::_7, R2 =JoystickButton::_5,
@@ -54,7 +54,7 @@ namespace hgl
// R=JoystickButton::_5,
// //XBOX/XBOX360
// //XBOX, //<EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>
// //XBOX, //西瓜键
//};
}//namespace io
}//namespace hgl

View File

@@ -1,4 +1,4 @@
#ifndef HGL_IO_KEYBOARD_EVENT_INCLUDE
#ifndef HGL_IO_KEYBOARD_EVENT_INCLUDE
#define HGL_IO_KEYBOARD_EVENT_INCLUDE
#include<hgl/io/event/InputEvent.h>
@@ -7,15 +7,15 @@ namespace hgl
namespace io
{
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD>ٶ<EFBFBD><EFBFBD><EFBFBD>
* 按键枚举定义
*/
enum class KeyboardButton
{
NONE=0,
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//主键盘区
Esc, ///<ESC
//F<EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD>
//F功能键
F1, ///<F1
F2, ///<F2
F3, ///<F3
@@ -29,26 +29,26 @@ namespace hgl
F11, ///<F11
F12, ///<F12
Grave, //<`<EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>1<EFBFBD><31><EFBFBD>ߵİ<DFB5>ť)
Grave, //<`号(主键盘数字键1左边的按钮)
//10<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
_0, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>0
_1, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>1
_2, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>2
_3, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>3
_4, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>4
_5, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>5
_6, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>6
_7, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>7
_8, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>8
_9, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>9
//10个数字
_0, ///<数字键0
_1, ///<数字键1
_2, ///<数字键2
_3, ///<数字键3
_4, ///<数字键4
_5, ///<数字键5
_6, ///<数字键6
_7, ///<数字键7
_8, ///<数字键8
_9, ///<数字键9
Minus, ///< - (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
Equals, ///< = (<EFBFBD>Ⱥ<EFBFBD>)
BackSlash, ///< \ (<EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>)
BackSpace, ///< <EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD>
Minus, ///< - (减号)
Equals, ///< = (等号)
BackSlash, ///< \ (反斜杠)
BackSpace, ///< 退格键
Tab, ///<Tab<EFBFBD><EFBFBD>
Tab, ///<Tab
A, ///<A
B, ///<B
@@ -80,66 +80,66 @@ namespace hgl
LeftBracket, ///<[
RightBracket, ///<]
CapsLock, ///<<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CapsLock, ///<大写锁定键
Semicolon, ///<; (<EFBFBD>ֺ<EFBFBD>)
Apostrophe, ///<' (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
Enter, ///<<EFBFBD>س<EFBFBD><EFBFBD><EFBFBD>
Semicolon, ///<; (分号)
Apostrophe, ///<' (单引号)
Enter, ///<回车键
LeftShift, ///<<EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>Shift<EFBFBD><EFBFBD>
LeftShift, ///<左边的Shift
Comma, ///<, (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
Period, ///<. (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
Slash, ///</ (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
RightShift, ///<<EFBFBD>ұߵ<EFBFBD>Shift<EFBFBD><EFBFBD>
Comma, ///<, (逗号)
Period, ///<. (句号)
Slash, ///</ (除号)
RightShift, ///<右边的Shift
LeftCtrl, ///<<EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>Ctrl<EFBFBD><EFBFBD>
LeftOS, ///<<EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>OS<EFBFBD><EFBFBD>(Win/Apple<EFBFBD><EFBFBD>)
LeftAlt, ///<<EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>Alt<EFBFBD><EFBFBD>
Space, ///<<EFBFBD>ո<EFBFBD><EFBFBD><EFBFBD>
RightAlt, ///<<EFBFBD>ұߵ<EFBFBD>Alt<EFBFBD><EFBFBD>
RightOS, ///<<EFBFBD>ұߵ<EFBFBD>OS<EFBFBD><EFBFBD>(Win/Apple<EFBFBD><EFBFBD>)
RightMenu, ///<<EFBFBD>ұߵ<EFBFBD>Menu<EFBFBD><EFBFBD>
RightCtrl, ///<<EFBFBD>ұߵ<EFBFBD>Ctrl<EFBFBD><EFBFBD>
LeftCtrl, ///<左边的Ctrl
LeftOS, ///<左边的OS键(Win/Apple)
LeftAlt, ///<左边的Alt
Space, ///<空格键
RightAlt, ///<右边的Alt
RightOS, ///<右边的OS键(Win/Apple)
RightMenu, ///<右边的Menu
RightCtrl, ///<右边的Ctrl
//<EFBFBD>м<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PrintScreen, ///<<EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>
ScrollLock, ///<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Pause, ///<<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD>
//中键盘区
PrintScreen, ///<打印屏幕键
ScrollLock, ///<滚动锁定键
Pause, ///<暂停键
Insert, ///<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Delete, ///<ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Home, ///<<EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD>
End, ///<<EFBFBD><EFBFBD>β<EFBFBD><EFBFBD>
PageUp, ///<<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
PageDown, ///<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
Insert, ///<插入键
Delete, ///<删除键
Home, ///<行首键
End, ///<行尾键
PageUp, ///<向前翻页键
PageDown, ///<向后翻页键
Up, ///<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Down, ///<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Left, ///<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Right, ///<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Up, ///<↑光标键
Down, ///<↓光标键
Left, ///<←光标键
Right, ///<→光标键
//С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NumLock, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//小键盘区
NumLock, ///<小键盘 数字锁定键
NumAdd, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> +
NumSubtract, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> -
NumMultiply, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
NumDivide, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> /
NumAdd, ///<小键盘 +
NumSubtract, ///<小键盘 -
NumMultiply, ///<小键盘 *
NumDivide, ///<小键盘 /
Num0, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
Num1, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1
Num2, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2
Num3, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3
Num4, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4
Num5, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5
Num6, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6
Num7, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7
Num8, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8
Num9, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 9
Num0, ///<小键盘 0
Num1, ///<小键盘 1
Num2, ///<小键盘 2
Num3, ///<小键盘 3
Num4, ///<小键盘 4
Num5, ///<小键盘 5
Num6, ///<小键盘 6
Num7, ///<小键盘 7
Num8, ///<小键盘 8
Num9, ///<小键盘 9
NumDecimal, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> . (С<><D0A1><EFBFBD><EFBFBD><><C9BE><EFBFBD><EFBFBD>)
NumEnter, ///<С<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>س<EFBFBD><D8B3><EFBFBD>
NumDecimal, ///<小键盘 . (小数点/删除键)
NumEnter, ///<小键盘 回车键
ENUM_CLASS_RANGE(NONE,NumEnter)
};//enum KeyboardButton
@@ -227,7 +227,7 @@ namespace hgl
public:
/**
* ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* 某按键是否按下状态
*/
const bool HasPressed(const KeyboardButton &kb)const
{
@@ -237,7 +237,7 @@ namespace hgl
}
/**
* <EFBFBD><EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD>
* 设定当前时间
*/
void SetCurTime(const double &ct)
{
@@ -245,7 +245,7 @@ namespace hgl
}
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>ʱ<EFBFBD><EFBFBD>
* 获取按键按下的时间
*/
const double GetPressedTime(const KeyboardButton &kb)const
{

144
inc/hgl/type/Gradient.h Normal file
View File

@@ -0,0 +1,144 @@
#pragma once
#include<hgl/type/DataType.h>
#include<hgl/type/List.h>
#include<hgl/util/sort/Sort.h>
namespace hgl
{
template<typename P,typename T> struct GradientStop
{
P pos;
T data;
};
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
template<typename P,typename T> class Gradient
{
using GS=GradientStop<P,T>;
List<GS> stop_list;
bool dirty;
protected:
void Sort()
{
if(!dirty||stop_list.GetCount()<2)
return;
Comparator<GS> comp;
hgl::Sort(stop_list,&comp);
dirty=false;
}
public:
Gradient()
{
dirty=true;
}
void Add(const P &pos,const T &data)
{
GS gs;
gs.pos=pos;
gs.data=data;
stop_list.Add(gs);
dirty=true;
}
void Clear()
{
stop_list.Clear();
dirty=true;
}
const bool GetLowest(P &pos)const
{
GS gs;
if(stop_list.First(gs))
{
pos=gs.pos;
return(true);
}
return false;
}
const bool GetHighest(P &pos)const
{
GS gs;
if(stop_list.Last(gs))
{
pos=gs.pos;
return(true);
}
return false;
}
virtual void Get(T &reuslt,const T &start,const T &end,const float &pos)
{
result=start+(end-start)*pos;
}
const void Get(T &result,const P &pos)
{
const uint count=stop_list.GetCount();
if(count<=0)
return;
Sort();
GS *cp=stop_list.GetData();
GS *pp;
if(count<2||pos<=cp->pos)
{
result=cp->data;
return;
}
if(pos>=cp[count-1].pos)
{
result=cp[count-1].data;
return;
}
pp=cp;
++cp;
for(uint i=1;i<count;i++)
{
if(pos<=cp->pos)
{
Get(result,pp->data,cp->data,float(pos-pp->pos)/float(cp->pos-pp->pos));
return;
}
++pp;
++cp;
}
}
};//class Gradient
#define HGL_GRADIENT_DEFINE(name,P,T) using name=Gradient<P,T>; \
using name##Stop=GradientStop<P,T>; \
\
int Comparator<name##Stop>::compare(const name##Stop &a,const name##Stop &b)const \
{ \
return a.pos-b.pos; \
} \
\
template<> void name::Get(T &result,const T &start,const T &end,const float &pos)
}//namespace hgl

View File

@@ -24,7 +24,7 @@ namespace hgl
}
template<typename T>
bool List<T>::Begin(T &ti)const
bool List<T>::First(T &ti)const
{
if(!items||count<=0)
return(false);
@@ -34,7 +34,7 @@ namespace hgl
}
template<typename T>
bool List<T>::End(T &ti)const
bool List<T>::Last(T &ti)const
{
if(!items||count<=0)
return(false);

View File

@@ -83,8 +83,8 @@ namespace hgl
void Set(int,const T &); ///<设置指定索引处的数据
bool Rand(T &)const; ///<随机取得一个数据
virtual bool Begin(T &)const; ///<取第一个数据
virtual bool End(T &)const; ///<取最后一个数据
virtual bool First(T &)const; ///<取第一个数据
virtual bool Last(T &)const; ///<取最后一个数据
virtual void Enum(void (*enum_func)(int,T &)) ///<枚举所有数据成员
{

View File

@@ -51,7 +51,7 @@ namespace hgl
virtual int Release(const K &,bool zero_clear=false); ///<释放一个数据
virtual int Release(V *,bool zero_clear=false); ///<释放一个数据
};//template<typename F,typename T> class ResManage
};//template<typename K,typename V> class ResManage
/**
* 使用int类做数标致的资源管理器
@@ -82,7 +82,10 @@ namespace hgl
return id_count++;
}
};//template<typename F,typename T> class IDResManage:public ResManage<F,T>
};//template<typename K,typename V> class IDResManage:public ResManage<K,V>
template<typename V> using ID32ResManage=IDResManage<uint32,V>;
template<typename V> using ID64ResManage=IDResManage<uint64,V>;
}//namespace hgl
#include<hgl/type/ResManage.cpp>
#endif//HGL_RES_MANAGE_INCLUDE

View File

@@ -130,11 +130,29 @@ namespace hgl
BASE_STRING_NUMBER_CONSTRUCT(int64, itos);
BASE_STRING_NUMBER_CONSTRUCT(uint64,utos);
BASE_STRING_NUMBER_CONSTRUCT(float, ftos);
BASE_STRING_NUMBER_CONSTRUCT(double,ftos);
#undef BASE_STRING_NUMBER_CONSTRUCT
#define BASE_STRING_FLOAT_CONSTRUCT(type,func) \
String(const type num)=delete; \
static String<T> floatOf(const type value,const uint frac_num) \
{ \
StringInstance<T> *si=new StringInstance<T>(); \
\
const int len=8*sizeof(type); \
\
T *tmp_str=new T[len]; \
\
func(tmp_str,len,frac_num,value); \
si->InitFromInstance(tmp_str,hgl::strlen(tmp_str)); \
\
return String<T>(si); \
}
BASE_STRING_FLOAT_CONSTRUCT(float, ftos);
BASE_STRING_FLOAT_CONSTRUCT(double,ftos);
#undef BASE_STRING_FLOAT_CONSTRUCT
String(const int *value,int N)=delete;
static String<T> numberOf(const int *value,int N)
@@ -246,7 +264,7 @@ namespace hgl
}
/**
* 根据一个C指针风格字符串设置当前字符串内容
* 根据一个C指针风格字符串设置当前字符串内容(当前字符串指针的数据会被复制创建)
* @param str 字符串内容在len<0的情况下需以0为结尾
* @param len 字符串长度如果str以0为结尾可以为负值将启用自动计算长度
*/
@@ -263,7 +281,7 @@ namespace hgl
}
/**
* 根据一个C指针风格字符串设置当前字符串内容
* 根据一个C指针风格字符串设置当前字符串内容(基于一块已经分配好的内存,初始化后当前指针的内存会被使用)
* @param str 字符串内容在len<0的情况下需以0为结尾
* @param len 字符串长度
*/