📄 iplay.c
字号:
#include "IPlay.h"
#include "Winmine.bid"
#include "AEEAppGen.h"
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
#define MOVE_STEP 10
static void IMINEPLAY_TimerHdl(IMinePlay* pCtl);
static void IMINEPLAY_InitImage(IMinePlay* pCtl);
static void IMINEPLAY_FreeImage(IMinePlay* pCtl);
static void IMINEPLAY_Draw(IMinePlay* pCtl,AEERect* rt);
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
IMinePlay* IMINEPLAY_CreateInstance(AEERect *rt)
{
AEEApplet* pApp=(AEEApplet*)GETAPPINSTANCE();
IMinePlay* p=NULL;
IFileMgr* pMgr=NULL;
TVedioElement* pName;
FileInfo Info;
if(NULL==rt||NULL==pApp) return NULL;
p=MALLOCREC(IMinePlay);
if(p)
{
p->m_rt=*rt;
p->m_pImage=NULL;
p->m_pIDisplay=pApp->m_pIDisplay;
p->m_pIShell=pApp->m_pIShell;
p->m_pNameList=NULL;
p->m_ListSize=0;
if (SUCCESS==ISHELL_CreateInstance(p->m_pIShell, AEECLSID_FILEMGR, (void **)&pMgr))
{
if(SUCCESS==IFILEMGR_EnumInit(pMgr,"image",FALSE))
{
while(IFILEMGR_EnumNext(pMgr, &Info))
{
pName=MALLOCREC(TVedioElement);
if(pName)
{
pName->m_pData=STRDUP(Info.szName);
pName->m_pNext=p->m_pNameList;
p->m_pNameList=pName;
p->m_ListSize++;
}
}
}
IFILEMGR_Release(pMgr);
}
}
return p;
}
boolean IMINEPLAY_Release(IMinePlay* pCtl)
{
TVedioElement* p;
if(pCtl)
{
IMINEPLAY_FreeImage(pCtl);
p=pCtl->m_pNameList;
while(p)
{
pCtl->m_pNameList=p->m_pNext;
FREEIF(p->m_pData);
FREE(p);
p=pCtl->m_pNameList;
}
FREEIF(pCtl);
}
return TRUE;
}
boolean IMINEPLAY_Start(IMinePlay* pCtl)
{
if(!pCtl) return FALSE;
IMINEPLAY_FreeImage(pCtl);
IMINEPLAY_InitImage(pCtl);
pCtl->m_ShowPoint=MOVE_STEP;
IMINEPLAY_TimerHdl(pCtl);
return TRUE;
}
boolean IMINEPLAY_Stop(IMinePlay* pCtl)
{
if(!pCtl) return FALSE;
IMINEPLAY_FreeImage(pCtl);
return TRUE;
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
static void IMINEPLAY_TimerHdl(IMinePlay* pCtl)
{
AEERect rt;
int32 sec;
pCtl->m_ShowPoint--;
ISHELL_CancelTimer(pCtl->m_pIShell,(PFNNOTIFY) IMINEPLAY_TimerHdl, pCtl);
if(pCtl->m_ShowPoint<0)
{
if(pCtl->m_pImage)
{
IIMAGE_Release(pCtl->m_pImage);
pCtl->m_pImage=NULL;
}
ISHELL_PostEvent(pCtl->m_pIShell, AEECLSID_WINMINE, EVT_USER, CMD_RESTART, (uint32) 0);
return;
}
rt.dx=pCtl->m_rt.dx*(MOVE_STEP-pCtl->m_ShowPoint)/MOVE_STEP;
rt.dy=pCtl->m_rt.dy*(MOVE_STEP-pCtl->m_ShowPoint)/MOVE_STEP;
rt.x=pCtl->m_rt.x+(pCtl->m_rt.dx-rt.dx)/2;
rt.y=pCtl->m_rt.y+(pCtl->m_rt.dy-rt.dy)/2;
IMINEPLAY_Draw(pCtl,&rt);
sec=((0==pCtl->m_ShowPoint)?800:200);
ISHELL_SetTimer(pCtl->m_pIShell,sec,(PFNNOTIFY) IMINEPLAY_TimerHdl, pCtl);
}
static void IMINEPLAY_InitImage(IMinePlay* pCtl)
{
char* pName=NULL;
byte data;
AEEImageInfo pi;
TVedioElement* pp=pCtl->m_pNameList;
if(1==pCtl->m_ListSize)
pName=pp->m_pData;
else if(pCtl->m_ListSize>1)
{
GETRAND(&data,1);
data=pCtl->m_ListSize*data/256;
while((data--)>0)
pp=pp->m_pNext;
pName=pp->m_pData;
}
if(pName)
pCtl->m_pImage=ISHELL_LoadImage(pCtl->m_pIShell,pName);
if(pCtl->m_pImage)
{
IIMAGE_GetInfo(pCtl->m_pImage,&pi);
pCtl->m_Imagedx=pi.cx;
pCtl->m_Imagedy=pi.cy;
}
}
static void IMINEPLAY_FreeImage(IMinePlay* pCtl)
{
ISHELL_CancelTimer(pCtl->m_pIShell,(PFNNOTIFY)IMINEPLAY_TimerHdl, pCtl);
if(pCtl->m_pImage)
{
IIMAGE_Release(pCtl->m_pImage);
pCtl->m_pImage=NULL;
}
}
static void IMINEPLAY_Draw(IMinePlay* pCtl,AEERect* rt)
{
AEERect rect;
int offsetx=0;
int offsety=0;
int x=rt->x;
int y=rt->y;
int dx=rt->dx;
int dy=rt->dy;
if(!pCtl->m_pImage) return;
if(pCtl->m_Imagedx<rt->dx)
{
dx=pCtl->m_Imagedx;
x=rt->x+(rt->dx-pCtl->m_Imagedx)/2;
}
else
offsetx=(pCtl->m_Imagedx-rt->dx)/2;
if(pCtl->m_Imagedy<rt->dy)
{
dy=pCtl->m_Imagedy;
y=rt->y+(rt->dy-pCtl->m_Imagedy)/2;
}
else
offsety=(pCtl->m_Imagedy-rt->dy)/2;
rect.x=x;
rect.y=y;
rect.dx=dx;
rect.dy=dy;
IIMAGE_SetParm(pCtl->m_pImage, IPARM_OFFSET,offsetx,offsety);
IIMAGE_SetParm(pCtl->m_pImage, IPARM_SIZE,dx,dy);
IIMAGE_Draw(pCtl->m_pImage,x,y);
IDISPLAY_FrameRect(pCtl->m_pIDisplay,&rect);
IDISPLAY_Update(pCtl->m_pIDisplay);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -