2025-06-27 00:32:57 +08:00
|
|
|
|
#include "mywin_inc.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
#define WIN_WINDOW_TYPE "WIN_WindowStruct"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
static WIN_Struct g_win_struct={0};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int WIN_Init (void)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_InitCfg();
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>Ļ<EFBFBD><C4BB>ʼ<EFBFBD><CABC>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_GetWinStruct()->lcd->Init();
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_GetWinStruct()->baseWin.x=0;
|
|
|
|
|
WIN_GetWinStruct()->baseWin.y=0;
|
|
|
|
|
WIN_GetWinStruct()->baseWin.x_size=WIN_GetWinStruct()->lcd->getLcdSizeX();
|
|
|
|
|
WIN_GetWinStruct()->baseWin.y_size=WIN_GetWinStruct()->lcd->getLcdSizeY();
|
|
|
|
|
WIN_GetWinStruct()->baseWin.baseWin=0;
|
|
|
|
|
WIN_GetWinStruct()->baseWin.chidWinMaxSize=WIN_CHIDWIN_MAXNUM;
|
|
|
|
|
WIN_GetWinStruct()->baseWin.id= WIN_GetWinStruct()->winId++;
|
2025-07-05 19:47:28 +08:00
|
|
|
|
WIN_GetWinStruct()->baseWin.winType=WIN_WINDOW_TYPE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
u16 color=WIN_GetWinStruct()->lcd->getLcdBkColor();
|
|
|
|
|
WIN_GetWinStruct()->baseWin.color=COLOR565TO888(color);
|
|
|
|
|
color=WIN_GetWinStruct()->lcd->getLcdBkColor();
|
|
|
|
|
WIN_GetWinStruct()->baseWin.bkcolor=COLOR565TO888(color);
|
|
|
|
|
WIN_GetWinStruct()->baseWin.msgLoop=WIN_DefaultMsgLoop;
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
QUEUE_Init (&WIN_GetWinStruct()->baseWin.winMsgQueue ,sizeof (WIN_MsgStruct),50);
|
|
|
|
|
WIN_MsgStruct msg={0};
|
|
|
|
|
msg.msg=WIN_MSG_INIT;
|
|
|
|
|
WIN_SendMsg(0,&WIN_GetWinStruct()->baseWin,&msg);
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
QUEUE_Init (&WIN_GetWinStruct()->touchQueue,sizeof (WIN_TouchStruct),50);
|
|
|
|
|
QUEUE_Init (&WIN_GetWinStruct()->keyQueue,sizeof (WIN_KeyStruct),50);
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_ShowWindow(&WIN_GetWinStruct()->baseWin);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>ش<EFBFBD><D8B4>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_Struct *WIN_GetWinStruct (void)
|
|
|
|
|
{
|
|
|
|
|
return &g_win_struct;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void *WIN_SetRunCallBack (void (*callback)(void))
|
|
|
|
|
{
|
|
|
|
|
void *ret=g_win_struct.runCallBack;
|
|
|
|
|
if (callback)
|
|
|
|
|
g_win_struct.runCallBack=callback;
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>ȡ<EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>ָ<EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>е<EFBFBD><D0B5><EFBFBD>,
|
|
|
|
|
//<2F><>ȡ֮<C8A1><D6AE>Ҫ<EFBFBD>ͷ<EFBFBD>g_win_struct.ExtData ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void *WIN_GetExtData (u32 *datasize)
|
|
|
|
|
{
|
|
|
|
|
WIN_IRQ_DISABLE();
|
|
|
|
|
void *ret=g_win_struct.ExtData;
|
|
|
|
|
*datasize=g_win_struct.ExtDataSize;
|
|
|
|
|
g_win_struct.ExtData=0;
|
|
|
|
|
g_win_struct.ExtDataSize=0;
|
|
|
|
|
WIN_IRQ_ENABLE();
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̻߳<DFB3><CCBB>ж<EFBFBD><D0B6>е<EFBFBD><D0B5><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_PlaceExtData (void *data,u32 size)
|
|
|
|
|
{
|
|
|
|
|
int ret=-1;
|
|
|
|
|
void *buff=mymalloc (size);
|
|
|
|
|
mymemcpy (buff,data,size);
|
|
|
|
|
WIN_IRQ_DISABLE();
|
|
|
|
|
if (g_win_struct.ExtData==0)
|
|
|
|
|
{
|
|
|
|
|
g_win_struct.ExtData=buff;
|
|
|
|
|
g_win_struct.ExtDataSize=size;
|
|
|
|
|
ret=0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{ret=-1;myfree(buff);}
|
|
|
|
|
WIN_IRQ_ENABLE();
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĺ<D0B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>߳<EFBFBD>֮<EFBFBD><D6AE>֪ͨ<CDA8><D6AA><EFBFBD>ڵ<EFBFBD><DAB5>ú<EFBFBD><C3BA><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_RunInWindow(const char *title,void (*fun)(void *ptr),void *ptr)
|
|
|
|
|
{
|
|
|
|
|
int ret=-1;
|
|
|
|
|
WIN_IRQ_DISABLE();
|
|
|
|
|
WIN_WindowStruct *win=WIN_GetWinByTitle (0,(char *)title);
|
|
|
|
|
if(win)
|
|
|
|
|
{
|
|
|
|
|
WIN_MsgStruct msg={0};
|
|
|
|
|
msg.msg=WIN_MSG_RUN;
|
|
|
|
|
msg.data.p=fun;
|
|
|
|
|
msg.data2.p=ptr;
|
|
|
|
|
ret=WIN_SendMsg(0,win,&msg);
|
|
|
|
|
}
|
|
|
|
|
WIN_IRQ_ENABLE();
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD> ,<2C><><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ϣѭ<CFA2><D1AD><EFBFBD>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_RunMsgFunction(WIN_MsgStruct *msg)
|
|
|
|
|
{
|
|
|
|
|
int ret=-1;
|
|
|
|
|
if(msg->msg==WIN_MSG_RUN)
|
|
|
|
|
{
|
|
|
|
|
if(msg->data.p)
|
|
|
|
|
{
|
|
|
|
|
((void (*)(void *t))msg->data.p)(msg->data2.p);
|
|
|
|
|
ret=0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ڶ<EFBFBD><DAB6>д<EFBFBD><D0B4><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ش<EFBFBD><D8B4>ڵ<EFBFBD>ָ<EFBFBD><D6B8>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_WindowStruct *WIN_CreatWindow(WIN_WindowStruct *base,
|
|
|
|
|
void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg),
|
|
|
|
|
int x,int y,int x_size,int y_size)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
if (base==0) base=WIN_GetBaseWindow();//û<>и<EFBFBD><D0B8><EFBFBD><EFBFBD>ڣ<EFBFBD>Ĭ<EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_WindowStruct*ret=mymalloc (sizeof (WIN_WindowStruct));
|
|
|
|
|
mymemset(ret,0,sizeof(WIN_WindowStruct));
|
|
|
|
|
u16 color=WIN_GetWinStruct()->lcd->getLcdBkColor();
|
|
|
|
|
ret->bkcolor=COLOR565TO888(color);
|
|
|
|
|
color=WIN_GetWinStruct()->lcd->getLcdColor();
|
|
|
|
|
ret->color=COLOR565TO888(color);
|
|
|
|
|
ret->chidWinMaxSize=WIN_CHIDWIN_MAXNUM;
|
|
|
|
|
ret->x=x;
|
|
|
|
|
ret->y=y;
|
|
|
|
|
ret->x_size=x_size;
|
|
|
|
|
ret->y_size=y_size;
|
2025-07-05 19:47:28 +08:00
|
|
|
|
ret->id=WIN_GetWinStruct()->winId++; //<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ΨһID
|
|
|
|
|
ret->winType=WIN_WINDOW_TYPE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ret->baseWin=base; //ע<>Ḹ<EFBFBD><E1B8B8><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if (msgLoop)
|
2025-07-05 19:47:28 +08:00
|
|
|
|
ret->msgLoop=msgLoop;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
else
|
2025-07-05 19:47:28 +08:00
|
|
|
|
ret->msgLoop=WIN_DefaultMsgLoop;//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ret->deleteWindow=WIN_DeleteWindow;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٺ<EFBFBD><D9BA><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if (WIN_AddToChidList(base,ret)==0)
|
|
|
|
|
{
|
|
|
|
|
QUEUE_Init (&ret->winMsgQueue ,sizeof (WIN_MsgStruct),50);
|
|
|
|
|
WIN_MsgStruct msg={0};
|
|
|
|
|
msg.msg=WIN_MSG_INIT;
|
|
|
|
|
WIN_SendMsg(0,ret,&msg);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
myfree(ret);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>,<2C><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_CreatWindowExt(WIN_WindowStruct *win,WIN_WindowStruct *base,
|
|
|
|
|
void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg),
|
|
|
|
|
int x,int y,int x_size,int y_size)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
if (base==0) base=WIN_GetBaseWindow();//û<>и<EFBFBD><D0B8><EFBFBD><EFBFBD>ڣ<EFBFBD>Ĭ<EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
mymemset(win,0,sizeof(WIN_WindowStruct));
|
|
|
|
|
u16 color=WIN_GetWinStruct()->lcd->getLcdBkColor();
|
|
|
|
|
win->bkcolor=COLOR565TO888(color);
|
|
|
|
|
color=WIN_GetWinStruct()->lcd->getLcdColor();
|
|
|
|
|
win->color=COLOR565TO888(color);
|
|
|
|
|
win->chidWinMaxSize=WIN_CHIDWIN_MAXNUM;
|
|
|
|
|
win->x=x;
|
|
|
|
|
win->y=y;
|
|
|
|
|
win->x_size=x_size;
|
|
|
|
|
win->y_size=y_size;
|
2025-07-05 19:47:28 +08:00
|
|
|
|
win->id=WIN_GetWinStruct()->winId++; //<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ΨһID
|
|
|
|
|
win->winType=WIN_WINDOW_TYPE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
win->baseWin=base; //ע<>Ḹ<EFBFBD><E1B8B8><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if (msgLoop)
|
2025-07-05 19:47:28 +08:00
|
|
|
|
win->msgLoop=msgLoop;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
else
|
2025-07-05 19:47:28 +08:00
|
|
|
|
win->msgLoop=WIN_DefaultMsgLoop;//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
win->deleteWindow=WIN_DeleteWindow;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٺ<EFBFBD><D9BA><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if (WIN_AddToChidList(base,win)==0)
|
|
|
|
|
{
|
|
|
|
|
QUEUE_Init (&win->winMsgQueue ,sizeof (WIN_MsgStruct),50);
|
|
|
|
|
WIN_MsgStruct msg={0};
|
|
|
|
|
msg.msg=WIN_MSG_INIT;
|
|
|
|
|
WIN_SendMsg(0,win,&msg);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_DeleteWindow (WIN_WindowStruct *win)
|
|
|
|
|
{
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ٺ<EFBFBD><D9BA><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
// for (int i=0;i<win->chidWinNum;i++)
|
|
|
|
|
// {
|
|
|
|
|
// (win->chidWin[i])->deleteWindow(win->chidWin[i]);
|
|
|
|
|
// }
|
|
|
|
|
while(win->chidWinNum)
|
|
|
|
|
{
|
|
|
|
|
(win->chidWin[0])->deleteWindow(win->chidWin[0]);
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD>ڵĴ<DAB5><C4B4><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_DelFromChidList(win->baseWin,win);
|
|
|
|
|
|
|
|
|
|
WIN_MsgStruct msg={0};
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>֪<EFBFBD><D6AA><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
msg.msg=WIN_MSG_CHID;
|
|
|
|
|
msg.data.v=CHID_DELETE;
|
|
|
|
|
msg.data2.v =win->id;
|
|
|
|
|
WIN_SendMsg (win,win->baseWin,&msg);
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_ClearMsgQueue (win);
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>delete<74><65>Ϣ
|
2025-06-27 00:32:57 +08:00
|
|
|
|
msg.msg=WIN_MSG_DELETE;
|
|
|
|
|
WIN_SendMsg (0,win,&msg);
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣѭ<CFA2><D1AD><EFBFBD>ô<EFBFBD><C3B4>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_Working (win);
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ػ<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_SetInvalidRect(win->baseWin,win->x,win->y,win->x_size,win->y_size);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>ʱ<EFBFBD><CAB1>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_WinDeleteTimer(win);
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ȡ<><C8A1><EFBFBD>ö<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_ResetAsTopWin (win);
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
QUEUE_Delete (&win->winMsgQueue);
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if (g_win_struct.BlockWin[0]==win)
|
|
|
|
|
{
|
|
|
|
|
WIN_SetBlockWinReturn(-1,0,0);
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if (win->invald)
|
|
|
|
|
{win->invald=0;g_win_struct.numOfWindowToPrint--;}
|
|
|
|
|
|
|
|
|
|
//printf ("deleteWin:%s\r\n",win->winType);
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڴ<EFBFBD><DAB4>ڵ<EFBFBD><DAB5><EFBFBD>Ϣѭ<CFA2><D1AD><EFBFBD><EFBFBD><EFA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if (win->msgLoopEnter)
|
|
|
|
|
{ win->memFree=myfree; }
|
|
|
|
|
else{myfree(win);}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ö<EFBFBD>,<2C><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>ӳɹ<D3B3>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_SetAsTopWin (WIN_WindowStruct *win)
|
|
|
|
|
{
|
|
|
|
|
int i=0;
|
|
|
|
|
//for (i=0;g_win_struct.TopWin[i];i++);
|
|
|
|
|
i=g_win_struct.TopWinNum;
|
|
|
|
|
if (i<WIN_TOP_MAXNUM)
|
|
|
|
|
{
|
|
|
|
|
g_win_struct.TopWin[i]=win;
|
|
|
|
|
g_win_struct.TopWinNum++;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ɹ<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_ResetAsTopWin (WIN_WindowStruct *win)
|
|
|
|
|
{
|
|
|
|
|
int i=0;
|
|
|
|
|
for (i=0;i<g_win_struct.TopWinNum;i++)
|
|
|
|
|
{
|
|
|
|
|
if (g_win_struct.TopWin[i]==win)
|
|
|
|
|
{
|
|
|
|
|
g_win_struct.TopWin[i]=0;
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
g_win_struct.TopWinNum--;
|
|
|
|
|
for (;i<g_win_struct.TopWinNum;i++)
|
|
|
|
|
{
|
|
|
|
|
g_win_struct.TopWin[i]=g_win_struct.TopWin[i+1];
|
|
|
|
|
}
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>id<69>Ż<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_WindowStruct *WIN_GetWindowStructById (WIN_WindowStruct *win,u32 id)
|
|
|
|
|
{
|
|
|
|
|
WIN_WindowStruct *ret=0;
|
|
|
|
|
if (win==0) win=WIN_GetBaseWindow();
|
|
|
|
|
if (win->id==id)
|
|
|
|
|
{return win;}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for (int i=win->chidWinNum;i>0;i--)
|
|
|
|
|
{
|
|
|
|
|
if (ret=WIN_GetWindowStructById(win->chidWin[i-1],id),ret)
|
|
|
|
|
{
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_DelFromChidList (WIN_WindowStruct *win,WIN_WindowStruct *chidWin)
|
|
|
|
|
{
|
|
|
|
|
for (int i=0;i<win->chidWinNum;i++)
|
|
|
|
|
{
|
|
|
|
|
if (win->chidWin[i]==chidWin)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
win->chidWin[i]=0;//ɾ<><C9BE><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
for (;i<win->chidWinNum-1;i++)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
{
|
|
|
|
|
win->chidWin[i]=win->chidWin[i+1];
|
|
|
|
|
}
|
2025-07-05 19:47:28 +08:00
|
|
|
|
win->chidWinNum--;//<2F>Ӵ<EFBFBD><D3B4>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD>һ
|
2025-06-27 00:32:57 +08:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>ָ<EFBFBD><D6B8><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_SetChidWinTop (WIN_WindowStruct *win,WIN_WindowStruct *chidWin)
|
|
|
|
|
{
|
|
|
|
|
WIN_WindowStruct *t=0;
|
|
|
|
|
for (int i=0;i<win->chidWinNum;i++)
|
|
|
|
|
{
|
|
|
|
|
if (win->chidWin[i]==chidWin)
|
|
|
|
|
{
|
|
|
|
|
t=win->chidWin[i];
|
2025-07-05 19:47:28 +08:00
|
|
|
|
win->chidWin[i]=0;//ɾ<><C9BE><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
for (;i<win->chidWinNum;i++)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
{
|
|
|
|
|
win->chidWin[i]=win->chidWin[i+1];
|
|
|
|
|
}
|
2025-07-05 19:47:28 +08:00
|
|
|
|
win->chidWin[win->chidWinNum-1]=t;//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>Ӵ<EFBFBD><D3B4>ڵ<EFBFBD><DAB5>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_AddToChidList (WIN_WindowStruct *win,WIN_WindowStruct *chidWin)
|
|
|
|
|
{
|
|
|
|
|
if (win->chidWinNum<win->chidWinMaxSize)
|
|
|
|
|
{
|
|
|
|
|
win->chidWin[win->chidWinNum]=chidWin;
|
|
|
|
|
win->chidWinNum++;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ж<EFBFBD>Ŀ<EFBFBD>괰<EFBFBD><EAB4B0><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4>ڣ<EFBFBD><DAA3>Ƿ<EFBFBD><C7B7><EFBFBD>1
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_CheckChidWin (WIN_WindowStruct *win,WIN_WindowStruct *chid)
|
|
|
|
|
{
|
|
|
|
|
for (int i=0;i<win->chidWinNum;i++)
|
|
|
|
|
{
|
|
|
|
|
if (win->chidWin[i]==chid)
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ҵ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>С
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_GetWinPosOnLcd (WIN_WindowStruct *win,int *x,int *y,int *x_size,int *y_size)
|
|
|
|
|
{
|
|
|
|
|
*x=0;
|
|
|
|
|
*y=0;
|
|
|
|
|
*x_size=win->x_size;
|
|
|
|
|
*y_size=win->y_size;
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB>ô<EFBFBD><C3B4>ڵ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_WindowStruct *t=win;
|
|
|
|
|
do{
|
|
|
|
|
*x+=t->x;
|
|
|
|
|
*y+=t->y;
|
|
|
|
|
t=t->baseWin;
|
|
|
|
|
}while (t);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>ֵ
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_SetBlockWinReturn (int ret,void *data,int datasize)
|
|
|
|
|
{
|
|
|
|
|
g_win_struct.BlockWinReturn=ret;
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ﶪ<EFBFBD><EFB6AA><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if (g_win_struct.BlockWinData) myfree(g_win_struct.BlockWinData);
|
|
|
|
|
if (data&&datasize)
|
|
|
|
|
{
|
|
|
|
|
g_win_struct.BlockWinData=mymalloc (datasize);
|
|
|
|
|
mymemcpy (g_win_struct.BlockWinData, data,datasize);
|
|
|
|
|
g_win_struct.BlockWinDataSize=datasize;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
g_win_struct.BlockWinData=0;
|
|
|
|
|
g_win_struct.BlockWinDataSize=0;
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>ڷ<F3B4B0BF><DAB7><EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ִ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ջ<EFBFBD><D5BB>ջ
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if (g_win_struct.BlockWinNum)
|
|
|
|
|
{
|
|
|
|
|
g_win_struct.BlockWinNum--;
|
|
|
|
|
for (int i=0;i<g_win_struct.BlockWinNum;i++)
|
|
|
|
|
{
|
|
|
|
|
g_win_struct.BlockWin[i]=g_win_struct.BlockWin[i+1];
|
|
|
|
|
}
|
|
|
|
|
g_win_struct.BlockWin[g_win_struct.BlockWinNum]=0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_GetBlockWinReturn (int *ret,void *buff,int buffsize)
|
|
|
|
|
{
|
|
|
|
|
int size=buffsize;
|
|
|
|
|
if (size>g_win_struct.BlockWinDataSize)
|
|
|
|
|
size=g_win_struct.BlockWinDataSize;
|
|
|
|
|
*ret=g_win_struct.BlockWinReturn;
|
|
|
|
|
if (g_win_struct.BlockWinData)
|
|
|
|
|
{
|
|
|
|
|
mymemcpy (buff,g_win_struct.BlockWinData,size);
|
|
|
|
|
myfree(g_win_struct.BlockWinData);
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>free(g_win_struct.BlockWinData)֮<><D6AE><EFBFBD>ں<EFBFBD><DABA><EFBFBD>WIN_SetBlockWinReturn<72>ٴ<EFBFBD>free<65><65>bug
|
2025-06-27 00:32:57 +08:00
|
|
|
|
//2020.8.3
|
|
|
|
|
g_win_struct.BlockWinData=0;
|
|
|
|
|
}
|
|
|
|
|
return size;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_WindowStruct *WIN_GetBaseWindow(void)
|
|
|
|
|
{
|
|
|
|
|
return &WIN_GetWinStruct()->baseWin;
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>еĴ<D0B5><C4B4><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_WindowStruct *WIN_GetCurrentWindow(void)
|
|
|
|
|
{
|
|
|
|
|
return WIN_GetWinStruct()->winCurrent;
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>˿ɿش<C9BF><D8B4><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_WindowStruct *WIN_FindTopWin(WIN_WindowStruct *win)
|
|
|
|
|
{
|
|
|
|
|
WIN_WindowStruct *ret=0;
|
|
|
|
|
|
|
|
|
|
if (win&&(win->chidWinNum))
|
|
|
|
|
{
|
|
|
|
|
for (int i=win->chidWinNum;i>0;i--)
|
|
|
|
|
{
|
|
|
|
|
ret=WIN_FindTopWin (win->chidWin[i-1]);
|
|
|
|
|
if (ret) return ret;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if (win&&(win->keyShield==0)&&(win->keyChid==0))
|
|
|
|
|
return win;
|
|
|
|
|
else return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>win<69>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD>1
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_FindBlock(WIN_WindowStruct *win)
|
|
|
|
|
{
|
|
|
|
|
RECT_Struct r1={0};
|
|
|
|
|
RECT_Struct r2={0};
|
|
|
|
|
WIN_WindowStruct *top=0;
|
|
|
|
|
WIN_WindowStruct *base=win->baseWin;
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1>ڵ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4>ں<EFBFBD><DABA><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
for (int i=0;i<win->chidWinNum;i++)
|
|
|
|
|
{
|
|
|
|
|
top=win->chidWin[i];
|
|
|
|
|
if ((top->keyShield==1)||(top->keyChid==1))
|
|
|
|
|
continue;
|
|
|
|
|
r1.x=0;r1.y=0;r1.x_size=win->x_size;r1.y_size=win->y_size;
|
|
|
|
|
r2.x=top->x;r2.y=top->y;r2.x_size=top->x_size;r2.y_size=top->y_size;
|
|
|
|
|
if(POS_RectIntersection(&r1,&r1,&r2))
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
while(base)
|
|
|
|
|
{
|
|
|
|
|
for (int i=base->chidWinNum;i>0;i--)
|
|
|
|
|
{
|
|
|
|
|
top=base->chidWin[i-1];
|
|
|
|
|
if(top==win)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ֻ<>Ƚ<EFBFBD><C8BD>ڴ˴<DAB4><CBB4><EFBFBD>֮ǰ<D6AE>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|
|
|
|
//<2F><>û<EFBFBD>б<EFBFBD><D0B1>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>丸<EFBFBD><E4B8B8><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
win=base;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
WIN_GetWinPosOnLcd(top, &r1.x, &r1.y, &r1.x_size, &r1.y_size);
|
|
|
|
|
WIN_GetWinPosOnLcd(win, &r2.x, &r2.y, &r2.x_size, &r2.y_size);
|
|
|
|
|
if(POS_RectIntersection(&r1,&r1,&r2))
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
base=base->baseWin;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>κͽӴ<CDBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4>ڵİ<DAB5><C4B0><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int WIN_SetChildWinkeyShield (WIN_WindowStruct *win,int power)
|
|
|
|
|
{
|
|
|
|
|
for (int i=win->chidWinNum-1;i>=0;i--)
|
|
|
|
|
{
|
|
|
|
|
win->chidWin[i]->keyShield=power;
|
|
|
|
|
}
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ͨ<><CDA8>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>˿ɿصĴ<D8B5><C4B4><EFBFBD>,û<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>0
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_WindowStruct *WIN_FindTopWinByPos (WIN_WindowStruct *win,int x,int y)
|
|
|
|
|
{
|
|
|
|
|
WIN_WindowStruct *ret=win;
|
|
|
|
|
int win_x_s=0;
|
|
|
|
|
int win_y_s=0;
|
|
|
|
|
int x_size=win->x_size;
|
|
|
|
|
int y_size=win->y_size;
|
|
|
|
|
|
|
|
|
|
WIN_GetWinPosOnLcd (win,&win_x_s,&win_y_s,&x_size,&y_size);
|
|
|
|
|
|
|
|
|
|
WIN_WindowStruct *t=0;
|
|
|
|
|
if (((x>=win_x_s)&&(x<win_x_s+x_size))&&
|
|
|
|
|
((y>=win_y_s)&&(y<win_y_s+y_size))&&(win->keyShield==0))
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ң<EFBFBD><D2A3><EFBFBD>ΪԽ<CEAA><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>Խǰ<D4BD><C7B0>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
for (int i=win->chidWinNum-1;i>=0;i--)
|
|
|
|
|
{
|
|
|
|
|
t=WIN_FindTopWinByPos (win->chidWin[i],x,y);
|
|
|
|
|
if (t)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
ret=t;//<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ָ<><D6B8><EFBFBD>㲻<EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
ret=0;
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĹ<DAB5>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>û<EFBFBD>й<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>0
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_WindowStruct *WIN_FindPrent (WIN_WindowStruct *win1,WIN_WindowStruct *win2)
|
|
|
|
|
{
|
|
|
|
|
while ((win1)&&(win2))
|
|
|
|
|
{
|
|
|
|
|
if (win1==win2) return win1;
|
|
|
|
|
win1=win1->baseWin;
|
|
|
|
|
win2=win2->baseWin;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_SetWinTitle (WIN_WindowStruct *win,char *title)
|
|
|
|
|
{
|
|
|
|
|
int len=strlen(title);
|
|
|
|
|
if (len>WIN_WINTITLE_MAXLEN-1)
|
|
|
|
|
{
|
|
|
|
|
len=WIN_WINTITLE_MAXLEN-1;
|
|
|
|
|
}
|
|
|
|
|
mymemcpy (win->winTitle,title,len);
|
|
|
|
|
win->winTitle[len]=0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>ݴ<EFBFBD><DDB4>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_WindowStruct *WIN_GetWinByTitle (WIN_WindowStruct *win,char *title)
|
|
|
|
|
{
|
|
|
|
|
WIN_WindowStruct *ret=0;
|
|
|
|
|
if (win==0) win=WIN_GetBaseWindow();
|
|
|
|
|
|
|
|
|
|
if (strcmp (win->winTitle,title)==0)
|
|
|
|
|
{
|
|
|
|
|
ret=win;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for (int i=0;i<win->chidWinNum;i++)
|
|
|
|
|
{
|
|
|
|
|
if (ret=WIN_GetWinByTitle (win->chidWin[i],title),ret)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LCD<43>Ļ<C4BB><EEB6AF><EFBFBD><EFBFBD>,<2C><><EFBFBD>л<EFBFBD><D0BB>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_EnterPaint (WIN_WindowStruct *win)
|
|
|
|
|
{
|
|
|
|
|
int x=0;
|
|
|
|
|
int y=0;
|
|
|
|
|
int x_size=win->x_size;
|
|
|
|
|
int y_size=win->y_size;
|
|
|
|
|
|
|
|
|
|
WIN_GetWinPosOnLcd (win,&x,&y,&x_size,&y_size);
|
|
|
|
|
|
|
|
|
|
WIN_GetWinStruct()->lcd->setWindow(x,y,x_size,y_size);
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3>˾<EFBFBD><CBBE>λᱻ<CEBB><E1B1BB><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>֮<EFBFBD><D6AE>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_SetWinInvalidRect (WIN_WindowStruct *win,RECT_Struct *r)
|
|
|
|
|
{
|
|
|
|
|
if (r==0) r=&win->invaldRect;
|
|
|
|
|
RECT_Struct out={0};
|
|
|
|
|
POS_RectIntersection(&out,r,&win->invaldRect);
|
|
|
|
|
int x=out.x;
|
|
|
|
|
int y=out.y;
|
|
|
|
|
int x_size=out.x_size;
|
|
|
|
|
int y_size=out.y_size;
|
|
|
|
|
|
|
|
|
|
g_win_struct.Invalid_x=x;
|
|
|
|
|
g_win_struct.Invalid_y=y;
|
|
|
|
|
g_win_struct.Invalid_x_size=x_size;
|
|
|
|
|
g_win_struct.Invalid_y_size=y_size;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_GetWinInvalidRect (WIN_WindowStruct *win,RECT_Struct *r)
|
|
|
|
|
{
|
|
|
|
|
r->x=g_win_struct.Invalid_x;
|
|
|
|
|
r->y=g_win_struct.Invalid_y;
|
|
|
|
|
r->x_size=g_win_struct.Invalid_x_size;
|
|
|
|
|
r->y_size=g_win_struct.Invalid_y_size;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ڴ<EFBFBD><DAB4>ڻ<EFBFBD><DABB><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD><D0B6>費<EFBFBD><E8B2BB>Ҫ<EFBFBD><D2AA><EFBFBD>ƶ<EFBFBD><C6B6>˴<EFBFBD><CBB4><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_TopWinPaint (WIN_WindowStruct *win)
|
|
|
|
|
{
|
|
|
|
|
RECT_Struct r1={0};
|
|
|
|
|
RECT_Struct r2={0};
|
|
|
|
|
RECT_Struct rout={0};
|
|
|
|
|
WIN_GetWinPosOnLcd (win,&r1.x,&r1.y,&r1.x_size,&r1.y_size);
|
|
|
|
|
for (int i=0;i<g_win_struct.TopWinNum;i++)
|
|
|
|
|
{
|
|
|
|
|
WIN_GetWinPosOnLcd (g_win_struct.TopWin[i],&r2.x,&r2.y,&r2.x_size,&r2.y_size);
|
|
|
|
|
if (POS_RectIntersection (&rout,&r1,&r2)==1)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>Ҫˢ<D2AA>¶<EFBFBD><C2B6>˴<EFBFBD><CBB4><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_SetInvalidRect (g_win_struct.TopWin[i],rout.x-r2.x,rout.y-r2.y,rout.x_size,rout.y_size);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵĻ<CFB5><C4BB>ƺ<EFBFBD><C6BA><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_DefaultPaint (WIN_WindowStruct *win)
|
|
|
|
|
{
|
|
|
|
|
WIN_PaintBackGround (win);
|
|
|
|
|
// WIN_SetLcdColor (win->color);
|
|
|
|
|
// WIN_Clear();
|
|
|
|
|
// WIN_DrawHLine(0,0,LCD_GetWindowSizeX()-1);
|
|
|
|
|
// WIN_DrawVLine(0,0,LCD_GetWindowSizeY()-1);
|
|
|
|
|
// WIN_DrawHLine(0,LCD_GetWindowSizeY()-1,LCD_GetWindowSizeX()-1);
|
|
|
|
|
// WIN_DrawVLine(LCD_GetWindowSizeX()-1,0,LCD_GetWindowSizeY()-1);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_ShowWindow (WIN_WindowStruct *win)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ч<EFBFBD><D0A7>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_SetInvalid (win);
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣѭ<CFA2><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
2025-06-27 00:32:57 +08:00
|
|
|
|
// WIN_Working (win);
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_PaintBackGround (WIN_WindowStruct *win)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>ʾͼƬ
|
2025-06-27 00:32:57 +08:00
|
|
|
|
WIN_SetLcdBkColor(win->bkcolor);
|
|
|
|
|
WIN_PicStruct *pic=0;
|
|
|
|
|
|
|
|
|
|
if (win->drawBackPic)
|
|
|
|
|
{
|
|
|
|
|
win->drawBackPic();
|
|
|
|
|
}
|
|
|
|
|
else if(pic=WIN_GetPicNoAlpha(win->pic_path),pic)
|
|
|
|
|
{
|
|
|
|
|
WIN_DrawPic(pic,0,0,((WIN_WindowStruct *)win)->x_size,((WIN_WindowStruct *)win)->y_size);
|
|
|
|
|
}
|
|
|
|
|
else if (WIN_DrawPic(&win->pic,0,0,((WIN_WindowStruct *)win)->x_size,((WIN_WindowStruct *)win)->y_size))
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
WIN_Clear();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void WIN_SetColor (WIN_WindowStruct *win,u32 color)
|
|
|
|
|
{
|
|
|
|
|
win->color=color;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void WIN_SetBkColor (WIN_WindowStruct *win,u32 bkcolor)
|
|
|
|
|
{
|
|
|
|
|
win->bkcolor=bkcolor;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ͼƬ·<C6AC><C2B7>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_SetBackPicPath (WIN_WindowStruct *win,char *path)
|
|
|
|
|
{
|
|
|
|
|
if (path)
|
|
|
|
|
{
|
|
|
|
|
int len=strlen(path);
|
|
|
|
|
if(len+1>WIN_FILE_PATH_MAXLEN)
|
|
|
|
|
printf("%s:err,pic path too long\r\n",__func__);
|
|
|
|
|
|
|
|
|
|
mymemcpy(&win->pic_path,path,len+1);
|
|
|
|
|
WIN_PicStruct *pic=WIN_GetPic(win->pic_path);
|
|
|
|
|
if(pic)
|
|
|
|
|
mymemcpy(&win->pic,pic,sizeof(WIN_PicStruct));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int len=strlen(path);
|
|
|
|
|
mymemset(&win->pic_path,0,len+1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ͼƬ
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void WIN_SetBackPic (WIN_WindowStruct *win)
|
|
|
|
|
{
|
|
|
|
|
WIN_PicStruct pic={0};
|
|
|
|
|
WIN_WindowStruct *base=win->baseWin;
|
|
|
|
|
WIN_PicStruct *pic_base=WIN_GetPic(base->pic_path);
|
|
|
|
|
if (pic_base)
|
|
|
|
|
{
|
|
|
|
|
int x=win->x;
|
|
|
|
|
int y=win->y;
|
|
|
|
|
if((y<pic_base->ysize)&&(x<pic_base->xsize))
|
|
|
|
|
{
|
|
|
|
|
pic.data=pic_base->data+pic_base->xsize*y+x;
|
|
|
|
|
pic.xsize=pic_base->xsize;
|
|
|
|
|
pic.ysize=pic_base->ysize-y-1;
|
|
|
|
|
}
|
|
|
|
|
mymemcpy(&win->pic,&pic,sizeof(WIN_PicStruct));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mymemset(&win->pic,0,sizeof(WIN_PicStruct));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void *WIN_SetBackFun (WIN_WindowStruct *win,void (*fun)(void))
|
|
|
|
|
{
|
|
|
|
|
void *ret=win->drawBackPic;
|
|
|
|
|
if (fun)
|
|
|
|
|
{
|
|
|
|
|
win->drawBackPic=fun;
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|