pic.c
上传用户:ghostdhl
上传日期:2010-03-30
资源大小:69k
文件大小:18k
源码类别:

BREW编程

开发平台:

Visual C++

  1. /*===========================================================================
  2. FILE: PicApp.c
  3. SERVICES: Reference User Application
  4. GENERAL DESCRIPTION: User App Main Control Program
  5. INITIALIZATION AND SEQUENCING REQUIREMENTS:
  6. BREW must be initialized. 
  7. (c) COPYRIGHT 2003,2004 Hisense Incorporated.
  8.                    All Rights Reserved.
  9.                    Hisense Proprietary
  10. ===========================================================================*/
  11. /*===============================================================================
  12.   $DateTime: 2003/12/19 16:00:00 $
  13.   $Author: whb $
  14.   $Change: 000001 $
  15.                       EDIT HISTORY FOR FILE
  16.   This section contains comments describing changes made to the module.
  17.   Notice that changes are listed in reverse chronological order.
  18. when         who     what, where, why
  19. ----------   ---     ---------------------------------------------------------
  20. 12/19/2003   whb     Initial Version
  21. =============================================================================== */
  22. /*===============================================================================
  23. INCLUDES DEFINITIONS
  24. =============================================================================== */
  25. #include "AEEModGen.h"
  26. #include "AEEAppGen.h"
  27. #include "AEEShell.h"
  28. #include "AEEStdlib.h"
  29. #include "pic.bid"  //save app id
  30. #include "AEENet.h"
  31. #include "AEEFile.h"
  32. #include "string.h"
  33. //#include "PicApp_res.h" //necessary resource
  34. //...
  35. /*===============================================================================
  36. Macro definitions
  37. =============================================================================== */
  38. #define GLASS_WIDTH 60
  39. #define GLASS_HEIGHT 60
  40. #define GLASS_COLOR 0x07FF
  41. #define RGB565TORGB555(rgb565) 
  42.                            (rgb565 & 0x001f) | 
  43.                            ((rgb565 & 0x07E0) >>1) | 
  44.                            ((rgb565 & 0xf800) >> 1)
  45. /*===============================================================================
  46. structure definitions
  47. =============================================================================== */
  48. typedef struct _PicApp_type
  49. {
  50. AEEApplet  a;
  51. AEERect    m_nClntAreaRect;
  52. AEERect    m_nSoftkeyAreaRect;
  53. uint16     m_nScrWidth;
  54. uint16     m_nScrHeight;
  55. uint16     m_nLineHeight;       //Normal font
  56. uint16     m_nLargeLineHeight;  //Larege font
  57. uint16     m_x;
  58. uint16     m_y;
  59. }CPicApp; 
  60. typedef unsigned char U8; /* unsigned 8 bit integer */
  61. typedef unsigned short U16; /* unsigned 16 bit integer */
  62. typedef unsigned long U32; /* unsigned 32 bit integer */
  63. typedef signed char S8; /* signed 8 bit integer */
  64. typedef signed short S16; /* signed 16 bit integer */
  65. typedef signed long S32; /* signed 32 bit integer */
  66. #pragma  pack(push)  
  67. #pragma pack(1)
  68. typedef struct tagBITMAPFILEHEADER_
  69. {
  70. U32 bfSize;
  71. U32 bfRsv;
  72. U32 bfOffBits;
  73. }BitmapFileHeader_Type;
  74. #pragma  pack(pop)
  75. #pragma  pack(push)  
  76. #pragma pack(1)
  77. typedef struct tagBITMAPINFOHEADER_
  78. {
  79. U32 biSize;
  80. U32 biWidth;
  81. U32 biHeight;
  82. U16 biPlanes;
  83. U16 biBitCount;
  84. U32 biCompression;
  85. U32 biSizeImage;
  86. U32 biXPelsPerMeter;
  87. U32 biYPelsPerMeter;
  88. U32 biClrUsed;
  89. U32 biClrImportant;
  90. }BitmapInfoHeader_Type;
  91. #pragma  pack(pop)
  92. typedef struct tagRGBQUAD_
  93. {
  94. U8 rgbBlue;
  95. U8 rgbGreen;
  96. U8 rgbRed;
  97. U8 rgbReserved;
  98. }RGBQUAD_Type;
  99. typedef struct tagIF_
  100. {
  101. U8 header1;
  102. U8 header2;
  103. U8 width;
  104. U8 height;
  105. }BMP_IF_Type;
  106. /*===============================================================================
  107. Function Prototypes
  108. =============================================================================== */
  109. static boolean PicApp_HandleEvent(CPicApp * pApp, 
  110.    AEEEvent eCode, 
  111.                                    uint16 wParam, 
  112.                                    uint32 dwParam);
  113. static boolean PicApp_InitAppData(CPicApp * pApp);
  114. static void    PicApp_FreeAppData(CPicApp * pApp);
  115. static void    PicApp_ReleaseObj(void ** ppObj);
  116. static boolean PicApp_Start(CPicApp * pApp);
  117. static boolean PicApp_DrawBMP(IDisplay *pIdisp, U8 *imagedata,int x, int y);
  118. static int PicApp_SaveScreen(IDisplay *pIdisp, const char *filename);
  119. static boolean PicApp_DrawRect(IDisplay *pIdisp, const AEERect *pRect,U16 transpCLR);
  120. static boolean PicApp_HandleKey(CPicApp * pApp, uint16 w, uint32 dw);
  121. /*===========================================================================
  122.                       STATIC/LOCAL DATA
  123. ===========================================================================*/
  124. /* GENERATED BY binary2c.pl */
  125. unsigned char bmpimage[500*1024];
  126. IFile* UpStoOpenFile(const char *fname, OpenFileMode mode)
  127. {
  128. IFileMgr*   pIFileMgr = NULL;
  129. IFile* pIFile = NULL;
  130. if(!fname)
  131. {
  132. return NULL;
  133. }
  134. if(SUCCESS != ISHELL_CreateInstance(((AEEApplet *)GETAPPINSTANCE())->m_pIShell,AEECLSID_FILEMGR, (void**)(&pIFileMgr)) )
  135. {
  136. return NULL;
  137. }
  138. pIFile = IFILEMGR_OpenFile(pIFileMgr,(const char *)fname,mode);
  139. IFILEMGR_Release(pIFileMgr);
  140. pIFileMgr = NULL;
  141. return pIFile;
  142. }
  143. /* read the data with the size of len from the file fname to buf 
  144.  if SUCCESS, return the size read
  145.  Otherwise, return 0
  146. */
  147. int UpStoReadFile(IFile *pIFile, unsigned long ofs, void* buf, unsigned long len)
  148. {
  149. int bytesRead = 0;
  150. if(!pIFile || !buf)
  151. {
  152. return 0;
  153. }
  154. if(SUCCESS != IFILE_Seek(pIFile,_SEEK_START,ofs))
  155. {
  156. return 0;
  157. }
  158. bytesRead = IFILE_Read(pIFile,buf,len);
  159. return bytesRead;
  160. }
  161. int UpStoWriteFile(IFile *pIFile, unsigned long ofs, const void* buf, unsigned long len)
  162. {
  163. int bytesWritten = 0;
  164. if(NULL == pIFile|| NULL == buf)
  165. {
  166. return 0;
  167. }
  168. if(SUCCESS != IFILE_Seek(pIFile,_SEEK_START,ofs))
  169. {
  170. return 0;
  171. }
  172. bytesWritten = IFILE_Write(pIFile,buf,len);
  173. return bytesWritten;
  174. }
  175. void UpStoCloseFile(IFile* pIFile)
  176. {
  177. IFILE_Release(pIFile);
  178. }
  179. unsigned long UpStoGetFileSize(const char *filename)
  180. {
  181. FileInfo nInfo;
  182. IFileMgr*   pIFileMgr = NULL;
  183. if(NULL == filename)
  184. return 0;
  185. if(SUCCESS != ISHELL_CreateInstance(((AEEApplet *)GETAPPINSTANCE())->m_pIShell,AEECLSID_FILEMGR, (void**)(&pIFileMgr)) )
  186. {
  187. return NULL;
  188. }
  189. /*Note: the last parameter is a true pointer, instead of a virtual pointer, because some info will be pass to it*/
  190. if(SUCCESS != IFILEMGR_GetInfo(pIFileMgr,filename, &nInfo))
  191. {
  192. IFILEMGR_Release(pIFileMgr);
  193. pIFileMgr = NULL;
  194. return 0;
  195. }
  196. IFILEMGR_Release(pIFileMgr);
  197. pIFileMgr = NULL;
  198. return nInfo.dwSize;
  199. }
  200. /*===========================================================================
  201. FUNCTION: AEEClsCreateInstance
  202. DESCRIPTION
  203. This function is invoked while the app is being loaded. All Modules must provide this 
  204. function. Ensure to retain the same name and parameters for this function.
  205. In here, the module must verify the ClassID and then invoke the AEEApplet_New() function
  206. that has been provided in AEEAppGen.c. 
  207.    After invoking AEEApplet_New(), this function can do app specific initialization. In this
  208.    example, a generic structure is provided so that app developers need not change app specific
  209.    initialization section every time except for a call to IDisplay_InitAppData(). 
  210.    This is done as follows: InitAppData() is called to initialize AppletData 
  211.    instance. It is app developers responsibility to fill-in app data initialization 
  212.    code of InitAppData(). App developer is also responsible to release memory 
  213.    allocated for data contained in AppletData -- this can be done in 
  214.    IDisplay_FreeAppData().
  215. PROTOTYPE:
  216.    int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
  217. PARAMETERS:
  218. clsID: [in]: Specifies the ClassID of the applet which is being loaded
  219. pIShell: [in]: Contains pointer to the IShell object. 
  220. pIModule: pin]: Contains pointer to the IModule object to the current module to which
  221. this app belongs
  222. ppObj: [out]: On return, *ppObj must point to a valid IApplet structure. Allocation
  223. of memory for this structure and initializing the base data members is done by AEEApplet_New().
  224. DEPENDENCIES
  225.   none
  226. RETURN VALUE
  227.   AEE_SUCCESS: If the app needs to be loaded and if AEEApplet_New() invocation was
  228.      successful
  229.   EFAILED: If the app does not need to be loaded or if errors occurred in 
  230.      AEEApplet_New(). If this function returns FALSE, the app will not be loaded.
  231. SIDE EFFECTS
  232.   none
  233. ===========================================================================*/
  234. int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
  235. {
  236.    CPicApp *pApp;
  237.    *ppObj = NULL;
  238.    if(ClsId == AEECLSID_PIC)
  239.    {
  240.       if(AEEApplet_New( sizeof(CPicApp), 
  241. ClsId, 
  242. pIShell,
  243. po,
  244. (IApplet**)ppObj,
  245. (AEEHANDLER)PicApp_HandleEvent,
  246. (PFNFREEAPPDATA)PicApp_FreeAppData)
  247.           == TRUE)
  248.       {
  249.  
  250. pApp=(CPicApp *)*ppObj;
  251. if (!PicApp_InitAppData( pApp ) ) 
  252. {
  253. IAPPLET_Release( (IApplet*) pApp );
  254. *ppObj = NULL;
  255. return EFAILED;
  256. }
  257.           return (AEE_SUCCESS);
  258.       }
  259.    }
  260.    return (EFAILED);
  261. }
  262. /*===========================================================================
  263. FUNCTION PicApp_HandleEvent
  264. DESCRIPTION
  265. This is the EventHandler for this app. All events to this app are handled in this
  266. function. All APPs must supply an Event Handler.
  267. PROTOTYPE:
  268. boolean PicApp_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
  269. PARAMETERS:
  270. pi: Pointer to the AEEApplet structure. This structure contains information specific
  271. to this applet. It was initialized during the AEEClsCreateInstance() function.
  272. ecode: Specifies the Event sent to this applet
  273.    wParam, dwParam: Event specific data.
  274. DEPENDENCIES
  275.   none
  276. RETURN VALUE
  277.   TRUE: If the app has processed the event
  278.   FALSE: If the app did not process the event
  279. SIDE EFFECTS
  280.   none
  281. ===========================================================================*/
  282. static boolean PicApp_HandleEvent(CPicApp * pApp, AEEEvent evt, uint16 w, uint32 dw)
  283. {  
  284.    
  285.    switch (evt) 
  286.    {
  287.       case EVT_APP_START:                             
  288.       
  289.            return PicApp_Start(pApp);
  290.   case EVT_KEY:
  291.    return PicApp_HandleKey(pApp,w,dw);
  292.                           
  293.       default:
  294.          break;
  295.    }
  296.    return FALSE;
  297. }
  298. static boolean PicApp_InitAppData(CPicApp * pApp)
  299. {
  300. /*get the device information*/        
  301. AEEDeviceInfo  deviceInfo;
  302. ISHELL_GetDeviceInfo(pApp->a.m_pIShell, &deviceInfo);
  303.         /*get the height of font*/
  304.         
  305. pApp->m_nLineHeight = IDISPLAY_GetFontMetrics(pApp->a.m_pIDisplay,
  306. AEE_FONT_NORMAL,
  307. NULL,
  308. NULL);
  309. pApp->m_nLargeLineHeight = IDISPLAY_GetFontMetrics(pApp->a.m_pIDisplay,
  310. AEE_FONT_LARGE,
  311. NULL,
  312. NULL);
  313. SETAEERECT(&pApp->m_nClntAreaRect,
  314.    0,
  315.    0,
  316.    deviceInfo.cxScreen,
  317.    deviceInfo.cyScreen-pApp->m_nLargeLineHeight);
  318.    
  319. SETAEERECT(&pApp->m_nSoftkeyAreaRect,
  320.    pApp->m_nClntAreaRect.x,
  321.    pApp->m_nClntAreaRect.y+pApp->m_nClntAreaRect.dy,
  322.    pApp->m_nClntAreaRect.dx,
  323.    pApp->m_nLargeLineHeight);
  324.     pApp->m_nScrHeight = deviceInfo.cyScreen;
  325. pApp->m_nScrWidth = deviceInfo.cxScreen;
  326. pApp->m_x = (pApp->m_nScrWidth - GLASS_WIDTH)/2;
  327. pApp->m_y = (pApp->m_nScrHeight - GLASS_HEIGHT)/2;
  328. return TRUE;
  329. }
  330. static void    PicApp_FreeAppData(CPicApp * pApp)
  331. {
  332.   
  333. }
  334. static void    PicApp_ReleaseObj(void ** ppObj)
  335. {
  336.   if ( ppObj && *ppObj ) 
  337.   {
  338.     (void) IBASE_Release( ( (IBase *) *ppObj ) );
  339.     *ppObj = NULL;
  340.   }
  341. }
  342. static boolean PicApp_Start(CPicApp * pApp)
  343. {
  344. IFile *pIFile = NULL;
  345. unsigned long fileLen = 0;
  346. const char *filename = "wallpaper.bmp";
  347. AEERect nRect;
  348. fileLen = UpStoGetFileSize(filename);
  349. if(NULL != (pIFile = UpStoOpenFile(filename,_OFM_READ)))
  350. {
  351. UpStoReadFile(pIFile, 0, bmpimage,fileLen);
  352. UpStoCloseFile(pIFile);
  353. pIFile = NULL;
  354. PicApp_DrawBMP(pApp->a.m_pIDisplay, (U8 *)bmpimage,0,0);
  355. if(pApp->m_x > pApp->m_nScrWidth || pApp->m_x<1) pApp->m_x = 1;
  356. if(pApp->m_y > pApp->m_nScrHeight || pApp->m_y<1) pApp->m_y = 1;
  357. if(pApp->m_x + GLASS_WIDTH > pApp->m_nScrWidth) pApp->m_x = pApp->m_nScrWidth - GLASS_WIDTH;
  358. if(pApp->m_y + GLASS_HEIGHT > pApp->m_nScrHeight) pApp->m_y = pApp->m_nScrHeight - GLASS_HEIGHT;
  359. SETAEERECT(&nRect,
  360.    pApp->m_x,
  361.    pApp->m_y,
  362.    GLASS_WIDTH,
  363.    GLASS_HEIGHT);
  364. PicApp_DrawRect(pApp->a.m_pIDisplay, (const AEERect *)&nRect,GLASS_COLOR);
  365. IDISPLAY_Update(pApp->a.m_pIDisplay);
  366. PicApp_SaveScreen(pApp->a.m_pIDisplay, "test.bmp");
  367. return TRUE;
  368. }
  369. return FALSE;
  370. }
  371. static boolean PicApp_Stop(CPicApp * pApp)
  372. {
  373. return TRUE;
  374. }
  375. /*all Bitmap Data has been placed into imagedata */
  376. static boolean PicApp_DrawBMP(IDisplay *pIdisp, U8 *imagedata,int x, int y)
  377. {
  378. BitmapFileHeader_Type *pbmpfileheader = NULL;
  379. BitmapInfoHeader_Type *pbmpinfoheader = NULL;
  380. U8 *pbitmapinfo;
  381. int bytesPerRow;
  382. IDIB *pdib=NULL;
  383.     U8 *pbmpinfo=imagedata;
  384. if(NULL == imagedata) return FALSE;
  385. if(!('B'==*imagedata && 'M'==*(imagedata+1)) ) return FALSE;
  386. pbmpfileheader = (BitmapFileHeader_Type *)(pbmpinfo+2);
  387. pbmpinfoheader=(BitmapInfoHeader_Type *)(pbmpinfo+2+sizeof(BitmapFileHeader_Type));
  388. pbitmapinfo = pbmpinfo+pbmpfileheader->bfOffBits;
  389.     bytesPerRow = ((pbmpinfoheader->biWidth*pbmpinfoheader->biBitCount+31)/32)*4;
  390. if(SUCCESS!=IDISPLAY_CreateDIBitmap(pIdisp,
  391. (IDIB **)&pdib,
  392. (uint8)pbmpinfoheader->biBitCount,
  393. 0,
  394. 0
  395. ))
  396. return FALSE;
  397.     pdib->pBmp = pbitmapinfo+bytesPerRow*(pbmpinfoheader->biHeight-1);
  398. pdib->pRGB = (U32 *)(pbmpinfo+14+pbmpinfoheader->biSize);
  399. pdib->ncTransparent = 0;  // 32-bit native color value
  400.     pdib->cx = (uint16)pbmpinfoheader->biWidth; // number of pixels in width
  401.     pdib->cy = (uint16)pbmpinfoheader->biHeight; // number of pixels in height
  402.     pdib->nPitch = -bytesPerRow; // offset from one row to the next
  403.     pdib->cntRGB = (uint16)(pbmpfileheader->bfOffBits-pbmpinfoheader->biSize-14)>>2;         // number of palette entries
  404.     pdib->nDepth = (uint8)pbmpinfoheader->biBitCount; // size of pixel in bits
  405.     pdib->nColorScheme = IDIB_COLORSCHEME_888;   // IDIB_COLORSCHEME_... 
  406. /* Do work for starting app */
  407. IDISPLAY_BitBlt( pIdisp, 
  408.           x, 
  409.           y, 
  410.           pdib->cx, 
  411.           pdib->cy, 
  412.           IDIB_TO_IBITMAP(pdib), 
  413.           0, 
  414.           0, 
  415.           AEE_RO_COPY );
  416. IDIB_Release(pdib);
  417. return TRUE;
  418. }
  419. static int PicApp_SaveScreen(IDisplay *pIdisp, const char *filename)
  420. {
  421. IBitmap *pDevBmp = NULL;
  422. IDIB *pDib = NULL;
  423. const char *BMPFLAG = "BM";
  424. int index = 0;
  425. int byteswriten = 0;
  426. BitmapFileHeader_Type FileHeader;
  427. BitmapInfoHeader_Type InfoHeader;
  428. MEMSET(&FileHeader,0, sizeof(BitmapFileHeader_Type));
  429. MEMSET(&InfoHeader,0, sizeof(BitmapInfoHeader_Type));
  430. if(SUCCESS == IDISPLAY_GetDeviceBitmap(pIdisp, &pDevBmp))
  431. {
  432. IFile *pIFile = NULL;
  433. pDib = (IDIB *)pDevBmp;
  434. FileHeader.bfOffBits = 2 + sizeof(BitmapFileHeader_Type) + sizeof(BitmapInfoHeader_Type) + pDib->cntRGB *sizeof(U32);
  435. FileHeader.bfSize = FileHeader.bfOffBits + pDib->cy*pDib->nPitch;
  436. InfoHeader.biSize = sizeof(BitmapInfoHeader_Type);
  437. InfoHeader.biWidth = pDib->cx;
  438. InfoHeader.biHeight = pDib->cy;
  439. InfoHeader.biBitCount = pDib->nDepth;
  440. InfoHeader.biXPelsPerMeter = 0;
  441. InfoHeader.biYPelsPerMeter = 0;
  442. InfoHeader.biClrUsed = pDib->cntRGB;
  443. InfoHeader.biPlanes = 1;
  444. InfoHeader.biSizeImage = pDib->cy*pDib->nPitch;
  445. if(NULL != (pIFile = UpStoOpenFile(filename,_OFM_CREATE)))
  446. {
  447. byteswriten = UpStoWriteFile(pIFile, index, BMPFLAG,STRLEN(BMPFLAG));
  448. index += byteswriten;
  449. byteswriten = UpStoWriteFile(pIFile, index, &FileHeader,sizeof(BitmapFileHeader_Type));
  450. index += byteswriten;
  451. byteswriten = UpStoWriteFile(pIFile, index, &InfoHeader,sizeof(BitmapInfoHeader_Type));
  452. index += byteswriten;
  453. if(pDib->cntRGB > 0)
  454. {
  455. byteswriten = UpStoWriteFile(pIFile, index, pDib->pRGB,pDib->cntRGB *sizeof(U32));
  456. index += byteswriten;
  457. }
  458. {
  459. U8 *pSrc = pDib->pBmp + pDib->nPitch*(pDib->cy-1);
  460. U32 row = pDib->cy;
  461. U8 *tmp = NULL;
  462. U8 *pDest = NULL;
  463. tmp = MALLOC(pDib->nPitch*pDib->cy);
  464. if(tmp)
  465. {
  466. pDest = tmp;
  467. while(row--)
  468. {
  469. MEMCPY(pDest,pSrc,pDib->nPitch);
  470. if(16 == pDib->nDepth)
  471. {
  472. U32 col = pDib->cx;
  473. U16 *p = (U16 *)pDest;
  474. while(col--)
  475. {
  476. *p = RGB565TORGB555(*p);
  477. p++;
  478. }
  479. }
  480. pDest += pDib->nPitch;
  481. pSrc -= pDib->nPitch;
  482. }
  483. byteswriten = UpStoWriteFile(pIFile, index, tmp,pDib->nPitch*pDib->cy);
  484. index += byteswriten;
  485. }
  486. else
  487. {
  488. while(row--)
  489. {
  490. byteswriten = UpStoWriteFile(pIFile, index, pSrc,pDib->nPitch);
  491. pSrc -= pDib->nPitch;
  492. index += byteswriten;
  493. }
  494. }
  495. }
  496. UpStoCloseFile(pIFile);
  497. }
  498. IBITMAP_Release(pDevBmp);
  499. }
  500. return -1;
  501. }
  502. static boolean PicApp_DrawRect(IDisplay *pIdisp, const AEERect *pRect, U16 transpCLR)
  503. {
  504. IBitmap *pDevBmp = NULL;
  505. IDIB *pDib = NULL;
  506. if(SUCCESS == IDISPLAY_GetDeviceBitmap(pIdisp, &pDevBmp))
  507. {
  508. pDib = (IDIB *)pDevBmp;
  509. if(16 == pDib->nDepth)
  510. {
  511. U8 *pDest = (U8 *)pDib->pBmp;
  512. int x = 0, y = 0;
  513. pDest += pDib->nPitch * (pRect->y-1) + ((pRect->x)<<1);
  514. for(y=0; y< pRect->dy;y++)
  515. {
  516. U16 *pBmp = (U16 *)pDest;
  517. for(x=0; x<pRect->dx;x++)
  518. {
  519. *pBmp = *pBmp & transpCLR;
  520. pBmp++;
  521. }
  522. pDest += pDib->nPitch;
  523. }
  524. }
  525. IBITMAP_Release(pDevBmp);
  526. }
  527. return TRUE;
  528. }
  529. static boolean PicApp_HandleKey(CPicApp * pApp, uint16 w, uint32 dw)
  530. {
  531. AEERect nRect;
  532. switch(w)
  533. {
  534. case AVK_UP:
  535. pApp->m_y--;
  536. break;
  537. case AVK_DOWN:
  538. pApp->m_y++;
  539. break;
  540. case AVK_LEFT:
  541. pApp->m_x--;
  542. break;
  543. case AVK_RIGHT:
  544. pApp->m_x++;
  545. break;
  546. default:
  547. return FALSE;
  548. }
  549. PicApp_DrawBMP(pApp->a.m_pIDisplay, (U8 *)bmpimage,0,0);
  550. if(pApp->m_x > pApp->m_nScrWidth || pApp->m_x<1) pApp->m_x = 1;
  551. if(pApp->m_y > pApp->m_nScrHeight || pApp->m_y<1) pApp->m_y = 1;
  552. if(pApp->m_x + GLASS_WIDTH > pApp->m_nScrWidth) pApp->m_x = pApp->m_nScrWidth - GLASS_WIDTH;
  553. if(pApp->m_y + GLASS_HEIGHT > pApp->m_nScrHeight) pApp->m_y = pApp->m_nScrHeight - GLASS_HEIGHT;
  554. SETAEERECT(&nRect,
  555.    pApp->m_x,
  556.    pApp->m_y,
  557.    GLASS_WIDTH,
  558.    GLASS_HEIGHT);
  559. PicApp_DrawRect(pApp->a.m_pIDisplay, (const AEERect *)&nRect,GLASS_COLOR);
  560. IDISPLAY_Update(pApp->a.m_pIDisplay);
  561. return TRUE;
  562. }