📄 windowshow.c
字号:
/*
*********************************************************************************************************
* Samsung ARM S3C2410 Software Frame
*
* (c) Copyright 2008-2010, LastRitter
* All Rights Reserved
*
* File :
* By : LastRitter
*********************************************************************************************************
*/
#include "SystemTool.h"
extern window sta_Window[];
#define SW_FRAME_FRONT (EG_BLACK)
#define SW_FRAME_BACK (EG_BLUE|EG_GREEN)
#define SW_CLOSE_BACK (EG_RED)
#define SW_TITLE_BACK (EG_BLUE)
/*
*********************************************************************************************************
*
*
* Description:
*
* Arguments :
*
* Returns :1--in;0--not in.
*
* Note(s) :
*
*********************************************************************************************************
*/
uint16 SW_IsInThisWindow(uint16 uiHandle,uint16 uiX,uint16 uiY)
{
uint16 uiX0,uiY0,uiX1,uiY1;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//Check param.
if(uiHandle==0||uiHandle>=SW_WINDOW_MAX)
{
UART_TextOut("Error Handle !(SW_IsInThisWindow)\n");
return 0;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
uiX0=sta_Window[uiHandle].uiX;
uiY0=sta_Window[uiHandle].uiY;
uiX1=sta_Window[uiHandle].uiWidth+uiX0;
uiY1=sta_Window[uiHandle].uiHigh +uiY0;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if(uiX>=uiX0&&uiY>=uiY0&&uiX<=uiX1&&uiY<=uiY1)
return 1;
else
return 0;
}
/*
*********************************************************************************************************
*
*
* Description:
*
* Arguments :
*
* Returns : 1--Covered;0--Not covered.
*
* Note(s) :
*
*********************************************************************************************************
*/
uint16 SW_IsCovered(uint16 uiAbove,uint16 uiUnder)
{
uint16 uiX0,uiY0,uiX1,uiY1;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//Check param.
if(uiAbove==0||uiAbove>=SW_WINDOW_MAX||uiUnder==0||uiUnder>=SW_WINDOW_MAX)
{
UART_TextOut("Error Handle !(SW_IsCovered)\n");
return 0;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
uiX0=sta_Window[uiAbove].uiX;
uiY0=sta_Window[uiAbove].uiY;
uiX1=sta_Window[uiAbove].uiWidth+uiX0;
uiY1=sta_Window[uiAbove].uiHigh +uiY0;
if(SW_IsInThisWindow(uiUnder,uiX0,uiY0))
return 1;
if(SW_IsInThisWindow(uiUnder,uiX0,uiY1))
return 1;
if(SW_IsInThisWindow(uiUnder,uiX1,uiY0))
return 1;
if(SW_IsInThisWindow(uiUnder,uiX1,uiY1))
return 1;
return 0;
}
/*
*********************************************************************************************************
*
*
* Description:
*
* Arguments :
*
* Returns : 1--Covered;0--Not covered.
*
* Note(s) :
*
*********************************************************************************************************
*/
uint16 SW_GetEffectArea(uint16 uiHandle,paintarea *pstArea)
{
uint16 uiX0=sta_Window[uiHandle].uiX;
uint16 uiY0=sta_Window[uiHandle].uiY;
uint16 uiX1=sta_Window[uiHandle].uiX+sta_Window[uiHandle].uiWidth;
uint16 uiY1=sta_Window[uiHandle].uiY+sta_Window[uiHandle].uiHigh;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//Check param.
if(uiHandle==0||uiHandle>=SW_WINDOW_MAX||sta_Window[uiHandle].uiHandle!=uiHandle)
{
UART_TextOut("Error Handle !(SW_GetEffectArea)\n");
return 1;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
switch(sta_Window[uiHandle].uiStyple)
{
case SW_STYPLE_FULL:
pstArea->uiX0=0;
pstArea->uiY0=0;
pstArea->uiX1=SW_XMAX;
pstArea->uiY1=SW_YMAX;
break;
case SW_STYPLE_MAIN:
pstArea->uiX0=0;
pstArea->uiY0=0;
pstArea->uiX1=SW_DESK_XMAX;
pstArea->uiY1=SW_DESK_YMAX;
break;
case SW_STYPLE_CUSTOM:
pstArea->uiX0=uiX0;
pstArea->uiY0=uiY0;
pstArea->uiX1=uiX1;
pstArea->uiY1=uiY1;
break;
case SW_STYPLE_TASKBAR:
pstArea->uiX0=uiX0+SW_DEF_FRAME_WIDTH;
pstArea->uiY0=uiY0+SW_DEF_FRAME_WIDTH;
pstArea->uiX1=uiX1-SW_DEF_FRAME_WIDTH;
pstArea->uiY1=uiY1-SW_DEF_FRAME_WIDTH;
break;
case SW_STYPLE_NORMAL:
pstArea->uiX0=uiX0+SW_DEF_FRAME_WIDTH;
pstArea->uiY0=uiY0+SW_DEF_TITLE_HIGH+SW_DEF_FRAME_WIDTH-1;
pstArea->uiX1=uiX1-SW_DEF_FRAME_WIDTH;
pstArea->uiY1=uiY1-SW_DEF_FRAME_WIDTH;
break;
default:break;
}
return 0;
}
/*
*********************************************************************************************************
*
*
* Description:
*
* Arguments :
*
* Returns :
*
* Note(s) :
*
*********************************************************************************************************
*/
static SW_PaintNormal(uint16 uiHandle)
{
uint16 uiX0=sta_Window[uiHandle].uiX;
uint16 uiY0=sta_Window[uiHandle].uiY;
uint16 uiX1=uiX0+sta_Window[uiHandle].uiWidth;
uint16 uiY1=uiY0+sta_Window[uiHandle].uiHigh;
char * scTitle=sta_Window[uiHandle].scTitle;
char * pscTemp;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//Check param.
/* if(uiX0>=SW_XMAX||uiY0>=SW_YMAX||uiX1>SW_XMAX||uiY1>SW_YMAX);
{
UART_TextOut("Param is out of range!(SW_PaintNormal)\n");
return 1;
} */
//******************************************************************************************************
//Frame back ground.
if(EG_RectFill(uiX0,uiY0,uiX1,uiY1,sta_Window[uiHandle].stBack))
return 1;
//Title back ground.
if(EG_RectFill(uiX0 ,uiY0,
uiX1-SW_DEF_CLOSE_WIDTH ,uiY0+SW_DEF_TITLE_HIGH,SW_TITLE_BACK))
return 1;
//Close button back ground.
if(EG_RectFill(uiX1-SW_DEF_CLOSE_WIDTH ,uiY0+1,
uiX1 ,uiY0+SW_DEF_TITLE_HIGH,SW_CLOSE_BACK))
return 1;
if(EG_Rect(uiX0 ,uiY0 ,uiX1 ,uiY1 ,SW_FRAME_FRONT))return 1;
if(EG_Rect(uiX0+1 ,uiY0+1 ,uiX1-1 ,uiY1-1 ,SW_FRAME_FRONT))return 1;
if(EG_Rect(uiX0+2 ,uiY0+2 ,uiX1-2 ,uiY1-2 ,SW_FRAME_FRONT))return 1;
//******************************************************************************************************
//Title
if(EG_LineEx(uiX0,uiY0+SW_DEF_TITLE_HIGH,uiX1,uiY0+SW_DEF_TITLE_HIGH,
SW_DEF_FRAME_WIDTH,SW_FRAME_FRONT))
return 1;
EG_SetFontColour(SW_FRAME_FRONT);
EG_SetFontBkColour(SW_FRAME_BACK);
pscTemp=EG_TextOutCut(uiX0+SW_DEF_FRAME_WIDTH+SW_DEF_FONT_YSPACE,
uiY0+SW_DEF_FRAME_WIDTH+SW_DEF_FONT_YSPACE,
(uiX1-uiX0-SW_DEF_CLOSE_WIDTH-SW_DEF_FONT_WIDTH)/SW_DEF_FONT_WIDTH*2,scTitle);
if(pscTemp)
{
EG_TextOutEx(uiX1-SW_DEF_CLOSE_WIDTH-25,
(uiY0+SW_DEF_FRAME_WIDTH+SW_DEF_FONT_YSPACE),"...");
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//Close Button
if(EG_LineEx(uiX1-SW_DEF_CLOSE_WIDTH,uiY0,
uiX1-SW_DEF_CLOSE_WIDTH,uiY0+SW_DEF_TITLE_HIGH,
SW_DEF_FRAME_WIDTH,SW_FRAME_FRONT))
return 1;
if(EG_LineEx(uiX1-SW_DEF_CLOSE_WIDTH ,uiY0+1,
uiX1 ,uiY0+SW_DEF_TITLE_HIGH,
SW_DEF_FRAME_WIDTH-1,SW_FRAME_FRONT))
return 1;
if(EG_LineEx(uiX1 ,uiY0+1,
uiX1-SW_DEF_CLOSE_WIDTH ,uiY0+SW_DEF_TITLE_HIGH,
SW_DEF_FRAME_WIDTH-1,SW_FRAME_FRONT))
return 1;
return 0;
}
/*
*********************************************************************************************************
*
*
* Description:
*
* Arguments :
*
* Returns :
*
* Note(s) :
*
*********************************************************************************************************
*/
static uint16 SW_PaintSpeical(uint16 uiHandle)
{
uint16 uiX0=sta_Window[uiHandle].uiX;
uint16 uiY0=sta_Window[uiHandle].uiY;
uint16 uiX1=uiX0+sta_Window[uiHandle].uiWidth;
uint16 uiY1=uiY0+sta_Window[uiHandle].uiHigh;
uint16 uiStyple =sta_Window[uiHandle].uiStyple;
colour stFront =sta_Window[uiHandle].stFront;
colour stBack =sta_Window[uiHandle].stBack;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//Check param.
/* if(uiX0>SW_XMAX||uiY0>SW_YMAX||uiX1>SW_XMAX||uiY1>SW_YMAX);
{
UART_TextOut("%d %d %d %d \n",uiX0,uiY0,uiX1,uiY1);
UART_TextOut("Param is out of range!(SW_PaintSpeical)\n");
return 1;
} */
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
switch(uiStyple)
{
case SW_STYPLE_FULL:
case SW_STYPLE_MAIN:
case SW_STYPLE_ADJUST:
EG_ScreenFill(stBack);
break;
case SW_STYPLE_CUSTOM:
EG_RectFill(uiX0,uiY0,uiX1,uiY1,stBack);
break;
case SW_STYPLE_TASKBAR:
EG_RectFill(uiX0,uiY0,uiX1,uiY1,stBack);
EG_Rect(uiX0 ,uiY0 ,uiX1 ,uiY1 ,stFront);
EG_Rect(uiX0+1 ,uiY0+1 ,uiX1-1 ,uiY1-1 ,stFront);
EG_Rect(uiX0+2 ,uiY0+2 ,uiX1-2 ,uiY1-2 ,stFront);
break;
default:break;
}
return 0;
}
/*
*********************************************************************************************************
*
*
* Description:
*
* Arguments :
*
* Returns :
*
* Note(s) :
*
*********************************************************************************************************
*/
static uint16 SW_PaintCustom(uint16 uiHandle)
{
sta_Window[uiHandle].CallBack(uiHandle,0,0,SW_WINDOW_PAINT);
return 0;
}
/*
*********************************************************************************************************
*
*
* Description:
*
* Arguments :
*
* Returns :
*
* Note(s) :
*
*********************************************************************************************************
*/
static uint16 SW_PaintWindow(uint16 uiHandle)
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if(sta_Window[uiHandle].uiStyple==SW_STYPLE_NORMAL)
{
if(SW_PaintNormal(uiHandle))
return 1;
}
else
{
if(SW_PaintSpeical(uiHandle))
return 1;
}
//******************************************************************************************************
//Set colour
EG_SetFontColour(sta_Window[uiHandle].stFront);
EG_SetFontBkColour(sta_Window[uiHandle].stBack);
return SW_PaintCustom(uiHandle);
}
/*
*********************************************************************************************************
*
*
* Description:
*
* Arguments :
*
* Returns :
*
* Note(s) :
*
*********************************************************************************************************
*/
uint16 SW_ShowWindow(uint16 uiHandle)
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//Check param.
if(uiHandle==0||uiHandle>=SW_WINDOW_MAX||sta_Window[uiHandle].uiHandle!=uiHandle)
{
UART_TextOut("Error Handle !(SW_ShowWindow)\n");
return 1;
}
sta_Window[uiHandle].uiState=SW_STATE_SHOW;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SW_MoveToTop(uiHandle);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
return SW_PaintWindow(uiHandle);
}
/*
*********************************************************************************************************
*
*
* Description:
*
* Arguments :
*
* Returns :
*
* Note(s) :
*
*********************************************************************************************************
*/
uint16 SW_HideWindow(uint16 uiHandle)
{
uint16 uiCount;
uint16 uiHandleTemp;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SW_MoveToBottom(uiHandle);
uiHandleTemp=sta_Window[SW_WINDOW_TAIL].uiAbove;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EG_StartVS();
EG_CopyToVS();
for(uiCount=1;uiCount<SW_WINDOW_MAX;uiCount++)
{
if(sta_Window[uiHandleTemp].uiHandle)
{
// if(SW_IsCovered(uiHandle,uiHandleTemp))
{
SW_PaintWindow(uiHandleTemp);
}
}
uiHandleTemp=sta_Window[uiHandleTemp].uiAbove;
}
EG_CopyToVRAM();
EG_EndVS();
sta_Window[uiHandle].uiState=SW_STATE_HIDE;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
return 0;
}
/*
*********************************************************************************************************
*
*
* Description:
*
* Arguments :
*
* Returns :
*
* Note(s) :
*
*********************************************************************************************************
*/
uint16 SW_RefreshWindow(void)
{
uint16 uiCount;
uint16 uiHandleTemp;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
uiHandleTemp=sta_Window[SW_WINDOW_TAIL].uiAbove;
EG_StartVS();
EG_CopyToVS();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
for(uiCount=1;uiCount<SW_WINDOW_MAX;uiCount++)
{
if(sta_Window[uiHandleTemp].uiHandle)
{
SW_PaintWindow(uiHandleTemp);
}
uiHandleTemp=sta_Window[uiHandleTemp].uiAbove;
}
EG_CopyToVRAM();
EG_EndVS();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -