http://blog.csdn.net/NetMicrobe/archive/2006/09/23/1269326.aspx
最近在移植一个J2ME的游戏到BREW平台,和java比较BREW相对接近底层,没有Java那么周到,一些功能还是得自己动手开始写。
我有封装一个能够支持方便一直的库的想法,不过没有太多时间,现在还在被那个烂程序折磨,程序写成那样折磨自己也就罢了,还拿出来害人,真可恶!二来,能够对现有的一些比较好的库的研究后,写出来的会更实用更健壮些。
现在先做些基础工作吧。如果有人已经开始这么做了,不建议我很菜的话,我很乐意加入呢。
声明:下面的代码仅供学习研究,作者不为使用者造成的任何后果负责。
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION : File I/O
* RETURN :
*******************************************************************************************************************************************/
boolean CApp::dataSave( void* pData, int nsz, char* pszFile )
{
IFileMgr* pFMgr = NULL;
IFile* pFile = NULL;
boolean bResult = FALSE;
// File Mgr create
if(ISHELL_CreateInstance( m_pIShell, AEECLSID_FILEMGR, (void**)&pFMgr ) == SUCCESS )
{
// if szFile exist
if(IFILEMGR_Test(pFMgr,pszFile) == SUCCESS)
{
// DELETE
if(IFILEMGR_Remove(pFMgr,pszFile) == EFAILED)
{
IFILEMGR_Release(pFMgr);
return FALSE;
}
}
//////////////////////////////////
// check EFS space
// TODO...
//////////////////////////////////
// CREATE
pFile = IFILEMGR_OpenFile(pFMgr,pszFile,_OFM_CREATE);
if(pFile != NULL)
{
// WRITE
if(IFILE_Write(pFile, pData, nsz))
{
bResult = TRUE;
}
IFILE_Release(pFile);
}
IFILEMGR_Release(pFMgr);
}
return bResult;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
boolean CApp::dataLoad( void* pData, int nsz, char* pszFile )
{
IFileMgr* pFMgr = NULL;
IFile* pFile = NULL;
boolean bResult = FALSE;
// File Mgr create.
if(ISHELL_CreateInstance( m_pIShell, AEECLSID_FILEMGR, (void**)&pFMgr ) == SUCCESS)
{
// if szFile exist
if(IFILEMGR_Test(pFMgr, pszFile) == SUCCESS)
{
// OPEN
pFile = IFILEMGR_OpenFile(pFMgr, pszFile, _OFM_READ);
if(pFile != NULL)
{
// READ
if(IFILE_Read(pFile, pData, nsz))
{
bResult = TRUE;
}
IFILE_Release(pFile);
}
}
IFILEMGR_Release(pFMgr);
}
return bResult;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
int CApp::dataLoad( char* pszFile, uint8** ppData )
{
int ret = 0;
IFileMgr* pFMgr = NULL;
IFile* pFile = NULL;
// File Mgr create.
if(ISHELL_CreateInstance( m_pIShell, AEECLSID_FILEMGR, (void**)&pFMgr ) == SUCCESS)
{
// if szFile exist
if(IFILEMGR_Test(pFMgr, pszFile) == SUCCESS)
{
// OPEN
pFile = IFILEMGR_OpenFile(pFMgr, pszFile, _OFM_READ);
if(pFile != NULL)
{
// GET FILE INFO
AEEFileInfo fi;
if( IFILE_GetInfo( pFile, &fi ) == SUCCESS && fi.dwSize > 0 )
{
// create buffer
*ppData = (uint8*)MALLOC( fi.dwSize );
// READ
ret = IFILE_Read( pFile, *ppData, fi.dwSize );
}
IFILE_Release(pFile);
}
}
IFILEMGR_Release(pFMgr);
}
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
boolean CApp::fileExists( char* pszFile )
{
boolean ret = FALSE;
IFileMgr* pFMgr = NULL;
IFile* pFile = NULL;
// File Mgr create.
if(ISHELL_CreateInstance( m_pIShell, AEECLSID_FILEMGR, (void**)&pFMgr ) == SUCCESS)
{
// if szFile exist
if(IFILEMGR_Test(pFMgr, pszFile) == SUCCESS)
{
ret = TRUE;
}
IFILEMGR_Release(pFMgr);
}
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
boolean CApp::dataReplace( int nStart, int nsz, void* pData, char* pszFile )
{
IFileMgr* pFMgr = NULL;
IFile* pFile = NULL;
boolean bResult = FALSE;
// File Mgr create.
if(ISHELL_CreateInstance(m_pIShell,AEECLSID_FILEMGR,(void**)&pFMgr) == SUCCESS)
{
//////////////////////////////////
// check EFS space
// TODO...
//////////////////////////////////
// if szFile exist
if(IFILEMGR_Test(pFMgr,pszFile) == SUCCESS)
{
// OPEN
pFile = IFILEMGR_OpenFile(pFMgr,pszFile,_OFM_READWRITE);
}
else
{
// CREATE
pFile = IFILEMGR_OpenFile( pFMgr, pszFile, _OFM_CREATE );
}
if(pFile != NULL)
{
// MODIFY
if( IFILE_Seek( pFile, _SEEK_START, nStart ) == SUCCESS )
{
if ( IFILE_Write( pFile, pData, nsz ) > 0 )
{
bResult = TRUE;
}
}
IFILE_Release(pFile);
}
IFILEMGR_Release(pFMgr);
}
return bResult;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION : String
* RETURN :
*******************************************************************************************************************************************/
AECHAR* CApp::SubString( AECHAR* psz, int bi, int ei )
{
AECHAR* ret = NULL;
int len = ei - bi;
if ( ( len > 0 ) && ( bi <= WSTRLEN(psz) ) )
{
ret = new AECHAR[len];
MEMCPY( (void*)ret, (void*)(psz + bi), len * sizeof(AECHAR) );
}
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
AECHAR* CApp::SubString( AECHAR* psz, int bi )
{
return SubString( psz, bi, WSTRLEN(psz) );
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN : -1,if not found target
*******************************************************************************************************************************************/
int CApp::IndexOf( AECHAR* source, AECHAR* target )
{
int sourceCount=WSTRLEN(source);
int targetCount=WSTRLEN(target);
if (sourceCount<=0) {
return -1;
}
if (targetCount == 0) {
return -1;
}
AECHAR first = target[0];
int i = 0;
int max = (sourceCount - targetCount);
startSearchForFirstChar:
while (true) {
/* Look for first character. */
while (i <= max && source[i] != first) {
i++;
}
if (i > max) {
return -1;
}
/* Found first character, now look at the rest of v2 */
int j = i + 1;
int end = j + targetCount - 1;
int k = 1;
while (j < end) {
if (source[j++] != target[k++]) {
i++;
/* Look for str's first char again. */
goto startSearchForFirstChar;
}
}
return i ; /* Found whole string. */
}
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
int CApp::IndexOf( AECHAR* source, AECHAR target )
{
int sourceCount=WSTRLEN(source);
int i;
for ( i=0; i<sourceCount; i++ )
{
if ( source[i] == target )
{
return i;
}
}
return -1;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
AECHAR* CApp::Trim( AECHAR* psz )
{
int count = WSTRLEN(psz);
int len = count;
int st = 0;
while ((st < len) && (psz[st] <= ' ')) {
st++;
}
while ((st < len) && (psz[len - 1] <= ' ')) {
len--;
}
AECHAR* ret = NULL;
if ( (st > 0) || (len < count) )
{
ret = SubString( psz, st, len );
delete[] psz;
psz = NULL;
}
else
{
ret = psz;
}
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
int CApp::ParseInt( AECHAR* psz )
{
char numBuf[12];
WSTRTOSTR( psz, (char*)numBuf, 12 );
int len = STRLEN( numBuf );
for ( int i=0; i<len; i++ )
{
if ( ( numBuf[i] < '0' ) || ( numBuf[i] > '9' ) )
{
return 0;
}
}
return ATOI( (char*)numBuf );
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::AppendWChar( AECHAR* psz, AECHAR c )
{
int len = WSTRLEN( psz );
psz[len] = c;
psz[len+1] = '\0';
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
uint32 CApp::loadStringFromResource( AECHAR** ppsz, uint16 nResID )
{
uint32 size = 0;
if(*ppsz == NULL)
{
ISHELL_GetResSize( m_pIShell, CULD_BS_RES_FILE, nResID, RESTYPE_STRING, &size );
*ppsz = (AECHAR*)MALLOC(size * sizeof(AECHAR));
if(*ppsz != NULL)
{
ISHELL_LoadResString(m_pIShell,CULD_BS_RES_FILE,nResID,*ppsz,size * sizeof(AECHAR));
}
}
return size;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION : STREAM
* RETURN :
*******************************************************************************************************************************************/
AECHAR* CApp::ReadUTF( uint8** pdis )
{
int utflen = ((*pdis)[0] << 8) | (*pdis)[1];
(*pdis) += 2;
AECHAR* str = new AECHAR[utflen];
str[0] = '\0';
uint8* bytearr = new uint8[utflen];
uint32 c, char2, char3;
int count = 0;
MEMMOVE( bytearr, (*pdis), utflen );
(*pdis) += utflen;
while (count < utflen)
{
c = bytearr[count];
switch (c >> 4)
{
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
/* 0xxxxxxx*/
count++;
//str.append((char)c);
CApp::AppendWChar( str, (AECHAR)c );
break;
case 12: case 13:
/* 110x xxxx 10xx xxxx*/
count += 2;
if (count > utflen)
goto READ_UTF_END;
char2 = bytearr[count-1];
if ((char2 & 0xC0) != 0x80)
goto READ_UTF_END;
//str.append((char)(((c & 0x1F) << 6) | (char2 & 0x3F)));
CApp::AppendWChar( str, (AECHAR)(((c & 0x1F) << 6) | (char2 & 0x3F)) );
break;
case 14:
/* 1110 xxxx 10xx xxxx 10xx xxxx */
count += 3;
if (count > utflen)
goto READ_UTF_END;
char2 = bytearr[count-2];
char3 = bytearr[count-1];
if (((char2 & 0xC0) != 0x80) || ((char3 & 0xC0) != 0x80))
goto READ_UTF_END;
//str.append((char)(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)));
CApp::AppendWChar( str, (AECHAR)(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)) );
break;
default:
/* 10xx xxxx, 1111 xxxx */
goto READ_UTF_END;
}
}
READ_UTF_END:
// The number of chars produced may be less than utflen
AECHAR* ret = NULL;
int strLen = WSTRLEN( str );
if ( strLen <= 0 )
{
ret = NULL;
}
else
{
ret = new AECHAR[strLen];
WSTRCPY( ret, str );
}
if ( str )
{
delete[] str;
str = NULL;
}
if ( bytearr )
{
delete[] bytearr;
bytearr = NULL;
}
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
int CApp::WriteUTF( uint8** pdos, AECHAR* psz )
{
int i;
int strlen = WSTRLEN(psz);
int utflen = 0;
int c, count = 0;
for ( i = 0; i < strlen; i++)
{
c = psz[i];
if ((c >= 0x0001) && (c <= 0x007F))
{
utflen++;
}
else if (c > 0x07FF)
{
utflen += 3;
}
else
{
utflen += 2;
}
}
if (utflen > 65535)
return 0;
(*pdos)[0] = (uint8)(((uint32)utflen) >> 8);
(*pdos)[1] = (uint8)utflen;
(*pdos) += 2;
for ( i = 0; i < strlen; i++)
{
c = psz[i];
if ((c >= 0x0001) && (c <= 0x007F))
{
(*pdos)[0] = (byte) c;
(*pdos) += 1;
}
else if (c > 0x07FF)
{
(*pdos)[0] = (uint8) (0xE0 | ((c >> 12) & 0x0F));
(*pdos)[1] = (uint8) (0x80 | ((c >> 6) & 0x3F));
(*pdos)[2] = (uint8) (0x80 | ((c >> 0) & 0x3F));
(*pdos) += 3;
}
else
{
(*pdos)[0] = (uint8) (0xC0 | ((c >> 6) & 0x1F));
(*pdos)[1] = (uint8) (0x80 | ((c >> 0) & 0x3F));
(*pdos) += 2;
}
}
return utflen + 2;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
int CApp::ReadInt( uint8** pdis )
{
int ret = ((*pdis)[0] << 24) | ((*pdis)[1] << 16) | ((*pdis)[2] << 8) | (*pdis)[3];
(*pdis) += 4;
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::WriteInt( uint8** pdos, int n )
{
(*pdos)[0] = (uint8)(((uint32)n) >> 24);
(*pdos)[1] = (uint8)(((uint32)n) >> 16);
(*pdos)[2] = (uint8)(((uint32)n) >> 8);
(*pdos)[3] = (uint8)n;
(*pdos) += 4;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
short CApp::ReadShort( uint8** pdis )
{
short ret = ((*pdis)[0] << 8) | (*pdis)[1];
(*pdis) += 2;
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::WriteShort ( uint8** pdos, short n )
{
(*pdos)[0] = (uint8)(((uint16)n) >> 8);
(*pdos)[1] = (uint8)n;
(*pdos) += 2;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
byte CApp::ReadByte( uint8** pdis )
{
byte ret = (*pdis)[0];
(*pdis) += 1;
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::WriteByte( uint8** pdos, byte n )
{
(*pdos)[0] = (uint8)n;
(*pdos) += 1;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::Read( uint8** pdis, uint8* pDst, int ofs, int len )
{
MEMMOVE( pDst+ofs, *pdis, len );
(*pdis) += len;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::Write( uint8** pdos, uint8* pSrc, int ofs, int len )
{
MEMMOVE( *pdos, pSrc+ofs, len );
(*pdos) += len;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION : Random
* RETURN :
*******************************************************************************************************************************************/
int CApp::GetRand2( int max )
{
int r;
GETRAND( (byte*)&r, 4 );
r &= 0x7fffffff;
r %= max;
return r;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
int CApp::GetRandInt()
{
int r;
GETRAND( (byte*)&r, 4 );
return r;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
int CApp::GetRand2( int min, int max )
{
if( min < max ) {
int r;
GETRAND( (byte*)&r, 4 );
r &= 0x7fffffff;
return ( r % ( max - min ) + min );
} else {
return min;
}
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION : IMAGE
* RETURN :
*******************************************************************************************************************************************/
IBitmap* CApp::getBitmap( IImage* pIImg )
{
IBitmap* ret = NULL;
IBitmap* pDes = NULL;
AEEImageInfo imginfo;
if ( pIImg )
{
// GET Display Destination
pDes = IDISPLAY_GetDestination( m_pIDisplay );
if ( pDes )
{
IIMAGE_GetInfo( pIImg, &imginfo );
if( IBITMAP_CreateCompatibleBitmap( pDes, &ret, imginfo.cx, imginfo.cy ) == SUCCESS )
{
// SET Display Destination
IDISPLAY_SetDestination( m_pIDisplay, ret );
// DRAW At ret Bitmap
IIMAGE_Draw( pIImg, 0, 0 );
// RESTORE Display Destination
IDISPLAY_SetDestination( m_pIDisplay, pDes );
}
IBITMAP_Release( pDes );
}
}
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
IBitmap* CApp::getBitmap( IImage* pIImg, RGBVAL transCol )
{
IBitmap* ret = NULL;
IBitmap* pDes = NULL;
AEEImageInfo imginfo;
if ( pIImg )
{
// GET Display Destination
pDes = IDISPLAY_GetDestination( m_pIDisplay );
if ( pDes )
{
IIMAGE_GetInfo( pIImg, &imginfo );
if( IBITMAP_CreateCompatibleBitmap( pDes, &ret, imginfo.cx, imginfo.cy ) == SUCCESS )
{
// SET Display Destination
IDISPLAY_SetDestination( m_pIDisplay, ret );
// FILL ret with transparent color
AEERect rect;
SETAEERECT( &rect, 0, 0, imginfo.cx, imginfo.cy );
IDISPLAY_FillRect( m_pIDisplay, &rect, transCol );
// DRAW At ret Bitmap
IIMAGE_Draw( pIImg, 0, 0 );
// SET ret transparent color
IBITMAP_SetTransparencyColor( ret, IBITMAP_RGBToNative( ret, transCol ) );
// RESTORE Display Destination
IDISPLAY_SetDestination( m_pIDisplay, pDes );
}
IBITMAP_Release( pDes );
}
}
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
IBitmap* CApp::createPNGBitmap( uint8* data, int dataSz )
{
IBitmap* ret = NULL;
IMemAStream* p_memStream = NULL;
IImage* pIImg = NULL;
if ( data != NULL && dataSz > 0 )
{
if ( ISHELL_CreateInstance( m_pIShell, AEECLSID_MEMASTREAM, (void**)&p_memStream ) == SUCCESS )
{
// IMemAStream Instance CREATED
byte* p_memData = (uint8*)MALLOC(dataSz);
if( p_memData )
{
MEMMOVE( p_memData, data, dataSz );
IMEMASTREAM_Set( p_memStream, p_memData, dataSz, 0, FALSE );
ret = createPNGBitmap( p_memStream );
}
// RLEASE IMemAStream
if( p_memStream )
IMEMASTREAM_Release( p_memStream );
}
}
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
IBitmap* CApp::createPNGBitmap( IMemAStream* pMemStream )
{
IBitmap* ret = NULL;
IImage* pIImg = NULL;
if ( ISHELL_CreateInstance( m_pIShell, AEECLSID_PNG, (void**)&pIImg ) == SUCCESS )
{
// IImage-PNG CREATED.
// SET MEM_STREAM
IIMAGE_SetStream( pIImg, (IAStream*)pMemStream );
// CREATE ret
ret = getBitmap( pIImg );
// RELEASE IImage_PNG
IIMAGE_Release( pIImg );
//p_memStream = NULL;
}
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
IBitmap* CApp::createPNGBitmap( IMemAStream* pMemStream, RGBVAL transCol )
{
IBitmap* ret = NULL;
IImage* pIImg = NULL;
if ( ISHELL_CreateInstance( m_pIShell, AEECLSID_PNG, (void**)&pIImg ) == SUCCESS )
{
// IImage-PNG CREATED.
// SET MEM_STREAM
IIMAGE_SetStream( pIImg, (IAStream*)pMemStream );
// CREATE ret
ret = getBitmap( pIImg, transCol );
// RELEASE IImage_PNG
IIMAGE_Release( pIImg );
//p_memStream = NULL;
}
return ret;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
int CApp::GetImageW( IBitmap* pbmp )
{
if ( pbmp == NULL ) return 0;
AEEBitmapInfo bi;
IBITMAP_GetInfo( pbmp, &bi, sizeof(bi) );
return bi.cx;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
int CApp::GetImageH( IBitmap* pbmp )
{
if ( pbmp == NULL ) return 0;
AEEBitmapInfo bi;
IBITMAP_GetInfo( pbmp, &bi, sizeof(bi) );
return bi.cy;
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::drawRegion( IBitmap* pSrc, int xSrc, int ySrc, int w, int h, int transform, int xDes, int yDes )
{
if ( transform != TRANS_MIRROR )
{
// NO Transform
IDISPLAY_BitBlt( m_pIDisplay, xDes, yDes, w, h, pSrc, xSrc, ySrc, AEE_RO_TRANSPARENT );
}
else
{
// MIRROR Transform
ITRANSFORM_TransformBltSimple( pTransform, xDes, yDes, pSrc, xSrc, ySrc, w, h, TRANSFORM_FLIP_X | TRANSFORM_ROTATE_180, COMPOSITE_KEYCOLOR );
}
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::setColor( int color )
{
IGRAPHICS_SetColor( pGraphics, GET_R(color), GET_G(color), GET_B(color), 0 );
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
RGBVAL CApp::getColor()
{
uint8 r,g,b,alpha;
IGRAPHICS_GetColor( pGraphics, &r, &g, &b, &alpha );
return MAKE_RGB( r, g, b );
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::drawRect( int x, int y, int w, int h )
{
AEERect rect;
SETAEERECT( &rect, x, y, w, h );
IDISPLAY_DrawRect( m_pIDisplay, &rect, getColor(), RGB_NONE, IDF_RECT_FRAME );
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::drawRect( int x, int y, int w, int h, RGBVAL color )
{
AEERect rect;
SETAEERECT( &rect, x, y, w, h );
IDISPLAY_DrawRect( m_pIDisplay, &rect, color, RGB_NONE, IDF_RECT_FRAME );
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::fillRect( int x, int y, int w, int h )
{
AEERect rect;
SETAEERECT( &rect, x, y, w, h );
IDISPLAY_FillRect( m_pIDisplay, &rect, getColor() );
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::fillRect( int x, int y, int w, int h, RGBVAL color )
{
AEERect rect;
SETAEERECT( &rect, x, y, w, h );
IDISPLAY_FillRect( m_pIDisplay, &rect, color );
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
void CApp::drawLine( int x1, int y1, int x2, int y2 )
{
AEELine line;
line.sx = x1; line.sy = y1;
line.ex = x2; line.ey = y2;
IGRAPHICS_DrawLine( pGraphics, &line );
}
/*******************************************************************************************************************************************
* FUNCTION :
* DESCRIPTION :
* RETURN :
*******************************************************************************************************************************************/
IBitmap* CApp::createImage( int w, int h )
{
IBitmap* ret = NULL;
IBitmap* dev = NULL;
IDISPLAY_GetDeviceBitmap( m_pIDisplay, &dev );
if ( dev )
{
IBITMAP_CreateCompatibleBitmap( dev, &ret, w, h );
IBITMAP_Release( dev );
dev = NULL;
}
return ret;
}