home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: OtherApp / OtherApp.zip / osm2_102.zip / bitmap.c < prev    next >
C/C++ Source or Header  |  1998-11-09  |  7KB  |  320 lines

  1. /*
  2.  * bitmap.c - Load/Dispose Bitmaps
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. #define INCL_PM
  9. #include <os2.h>
  10.  
  11. #include "shapewin.h"
  12.  
  13. #include "osmulti2.h"
  14. #include "osmulres.h"
  15.  
  16. /*
  17.  * Bitmaps to Load
  18.  */
  19.  
  20. HBITMAP     hbmMulNorm = NULLHANDLE ;
  21. HBITMAP     hbmMulOhno = NULLHANDLE ;
  22. HBITMAP     hbmMulPsyu = NULLHANDLE ;
  23. HBITMAP     hbmMulUru1 = NULLHANDLE ;
  24. HBITMAP     hbmMulUru2 = NULLHANDLE ;
  25. HBITMAP     hbmMulClos = NULLHANDLE ;
  26.  
  27. /*
  28.  * checkLoaded - check if bitmaps loaded
  29.  */
  30.  
  31. static  BOOL    checkLoaded(void)
  32. {
  33.     if (hbmMulNorm == NULLHANDLE) {
  34.         return FALSE ;
  35.     }
  36.     if (hbmMulOhno == NULLHANDLE) {
  37.         return FALSE ;
  38.     }
  39.     if (hbmMulPsyu == NULLHANDLE) {
  40.         return FALSE ;
  41.     }
  42.     if (hbmMulUru1 == NULLHANDLE) {
  43.         return FALSE ;
  44.     }
  45.     if (hbmMulUru2 == NULLHANDLE) {
  46.         return FALSE ;
  47.     }
  48.     if (hbmMulClos == NULLHANDLE) {
  49.         return FALSE ;
  50.     }
  51.     return TRUE ;
  52. }
  53.  
  54. /*
  55.  * bitmapFree - free bitmaps if exists
  56.  */
  57.  
  58. void    bitmapFree(void)
  59. {
  60.     if (hbmMulNorm != NULLHANDLE) {
  61.         GpiDeleteBitmap(hbmMulNorm) ;
  62.     hbmMulNorm = NULLHANDLE ;
  63.     }
  64.     if (hbmMulOhno != NULLHANDLE) {
  65.         GpiDeleteBitmap(hbmMulOhno) ;
  66.     hbmMulOhno = NULLHANDLE ;
  67.     }
  68.     if (hbmMulPsyu != NULLHANDLE) {
  69.         GpiDeleteBitmap(hbmMulPsyu) ;
  70.     hbmMulPsyu = NULLHANDLE ;
  71.     }
  72.     if (hbmMulUru1 != NULLHANDLE) {
  73.         GpiDeleteBitmap(hbmMulUru1) ;
  74.     hbmMulUru1 = NULLHANDLE ;
  75.     }
  76.     if (hbmMulUru2 != NULLHANDLE) {
  77.         GpiDeleteBitmap(hbmMulUru2) ;
  78.     hbmMulUru2 = NULLHANDLE ;
  79.     }
  80.     if (hbmMulClos != NULLHANDLE) {
  81.         GpiDeleteBitmap(hbmMulClos) ;
  82.     hbmMulClos = NULLHANDLE ;
  83.     }
  84. }
  85.  
  86. /*
  87.  * loadOne - load a Bitmap
  88.  */
  89.  
  90. static  HBITMAP loadOne(HAB hab, int id)
  91. {
  92.     HDC     hdc ;
  93.     HPS     hps ;
  94.     SIZEL   siz ;
  95.     HBITMAP hbm ;
  96.     
  97.     siz.cx = siz.cy = 0 ;
  98.  
  99.     hdc = DevOpenDC(hab, OD_MEMORY, "*", 0, NULL, NULLHANDLE) ;
  100.     hps = GpiCreatePS(hab, hdc, &siz,
  101.                 PU_PELS | GPIF_DEFAULT | GPIT_MICRO | GPIA_ASSOC) ;
  102.     if (hdc == NULLHANDLE || hps == NULLHANDLE) {
  103.         if (hps != NULLHANDLE) GpiDestroyPS(hps) ;
  104.         if (hdc != NULLHANDLE) DevCloseDC(hdc)   ;
  105.         return NULLHANDLE ;
  106.     }
  107.  
  108.     hbm = GpiLoadBitmap(hps, NULLHANDLE, id, 0, 0) ;
  109.     
  110.     GpiDestroyPS(hps) ;
  111.     DevCloseDC(hdc) ;
  112.     
  113.     TRACE("load bitmap ID %d, HBITMAP %08x\n", id, hbm) ;
  114.     
  115.     return hbm ;
  116. }
  117.  
  118. /*
  119.  * bitmapLoad - load bitmaps
  120.  */
  121.  
  122. BOOL    bitmapLoad(HAB hab)
  123. {
  124.     hbmMulNorm = loadOne(hab, ID_MULNORM) ;
  125.     hbmMulOhno = loadOne(hab, ID_MULOHNO) ;
  126.     hbmMulPsyu = loadOne(hab, ID_MULPSYU) ;
  127.     hbmMulUru1 = loadOne(hab, ID_MULURU1) ;
  128.     hbmMulUru2 = loadOne(hab, ID_MULURU2) ;
  129.     hbmMulClos = loadOne(hab, ID_MULCLOS) ;
  130.     
  131.     if (checkLoaded() != TRUE) {
  132.         bitmapFree() ;
  133.     return FALSE ;
  134.     }
  135.     return TRUE ;
  136. }
  137.  
  138. /*
  139.  * Dimensions for Bitmap
  140.  */
  141.  
  142. #define BITMAP_CX       64      /* bitmap dimension */
  143. #define BITMAP_CY      120
  144.  
  145. #define FACE_X1         12      /* face area        */
  146. #define FACE_Y1         65
  147. #define FACE_X2         52
  148. #define FACE_Y2         96
  149.  
  150. #define NADE_Y1         92      /* area of 'nadenade'   */
  151. #define NADE_Y2         120
  152. #define FUNI_Y1         45      /* area of 'funifuni'   */
  153. #define FUNI_Y2         60
  154.  
  155. /*
  156.  * Memory DC/PS & Bitmap for Multi Bitmap
  157.  */
  158.  
  159. HDC     hdcBitmap = NULLHANDLE ;
  160. HPS     hpsBitmap = NULLHANDLE ;
  161. HBITMAP hbmBitmap = NULLHANDLE ;
  162.  
  163. /*
  164.  * bitmapDispose - dispose resources related to working Bitmap
  165.  */
  166.  
  167. void    bitmapDispose(void)
  168. {
  169.     if (hbmBitmap != NULLHANDLE) {
  170.         GpiDeleteBitmap(hbmBitmap) ;
  171.     hbmBitmap = NULLHANDLE ;
  172.     }
  173.     if (hpsBitmap != NULLHANDLE) {
  174.         GpiSetBitmap(hpsBitmap, NULLHANDLE) ;
  175.         GpiDestroyPS(hpsBitmap) ;
  176.     hpsBitmap == NULLHANDLE ;
  177.     }
  178.     if (hdcBitmap != NULLHANDLE) {
  179.         DevCloseDC(hdcBitmap) ;
  180.     hdcBitmap = NULLHANDLE ;
  181.     }
  182. }
  183.  
  184. /*
  185.  * bitmapCreate - create Memory DC/PS & Bitmap Area for Bitmap
  186.  */
  187.  
  188. BOOL    bitmapCreate(HAB hab)
  189. {
  190.     SIZEL   siz ;
  191.     POINTL  apt[4] ;
  192.     BITMAPINFOHEADER2   bmi ;
  193.  
  194.     /*
  195.      * Create Memory DC/PS for play with Bitmap
  196.      */
  197.  
  198.     hdcBitmap =DevOpenDC(hab, OD_MEMORY, "*", 0, NULL, NULLHANDLE) ;
  199.     siz.cx = siz.cy = 0 ;
  200.     hpsBitmap = GpiCreatePS(hab, hdcBitmap, &siz,
  201.             PU_PELS | GPIF_DEFAULT | GPIT_MICRO | GPIA_ASSOC) ;
  202.     if (hdcBitmap == NULLHANDLE || hpsBitmap == NULLHANDLE) {
  203.         return FALSE ;
  204.     }
  205.     
  206.     /*
  207.      * create and associate bitmap for Image Bitmap
  208.      */
  209.  
  210.     memset(&bmi, 0, sizeof(bmi)) ;
  211.     bmi.cbFix = sizeof(bmi) ;
  212.     bmi.cx = BITMAP_CX ;
  213.     bmi.cy = BITMAP_CY ;
  214.     bmi.cPlanes       = 1  ;
  215.     bmi.cBitCount     = 24 ;
  216.     bmi.ulCompression = 0  ;
  217.     bmi.cclrUsed      = 0  ;
  218.     bmi.cclrImportant = 0  ;
  219.  
  220.     hbmBitmap = GpiCreateBitmap(hpsBitmap, &bmi, 0, NULL, NULL) ;
  221.     
  222.     if (hbmBitmap == NULLHANDLE) {
  223.         return FALSE ;
  224.     }
  225.     GpiSetBitmap(hpsBitmap, hbmBitmap) ;
  226.     
  227.     /*
  228.      * draw Initial Image
  229.      */
  230.  
  231.     apt[0].x = 0 ;
  232.     apt[0].y = 0 ;
  233.     apt[1].x = BITMAP_CX ;
  234.     apt[1].y = BITMAP_CY ;
  235.     apt[2].x = 0 ;
  236.     apt[2].y = 0 ;
  237.     apt[3].x = BITMAP_CX ;
  238.     apt[3].y = BITMAP_CY ;
  239.  
  240.     GpiWCBitBlt(hpsBitmap, hbmMulNorm, 4, apt, ROP_SRCCOPY, 0) ;
  241.  
  242.     return TRUE ;
  243. }
  244.  
  245. /*
  246.  * Checks Mouse in Nade/Funi Area
  247.  */
  248.  
  249. BOOL    bitmapAtNade(PPOINTL pt)
  250. {
  251.     if (pt->y > NADE_Y1 && pt->y < NADE_Y2) {
  252.         return TRUE ;
  253.     }
  254.     return FALSE ;
  255. }
  256.  
  257. BOOL    bitmapAtFuni(PPOINTL pt)
  258. {
  259.     if (pt->y > FUNI_Y1 && pt->y < FUNI_Y2) {
  260.         return TRUE ;
  261.     }
  262.     return FALSE ;
  263. }
  264.  
  265. /*
  266.  * bitmapDrawBody - draw entire body
  267.  */
  268.  
  269. void    bitmapDrawBody(HBITMAP hbm)
  270. {
  271.     POINTL  apt[4] ;
  272.     RECTL   rect   ;
  273.     
  274.     apt[0].x = 0 ;
  275.     apt[0].y = 0 ;
  276.     apt[1].x = BITMAP_CX ;
  277.     apt[1].y = BITMAP_CY ;
  278.     apt[2].x = 0 ;
  279.     apt[2].y = 0 ;
  280.     apt[3].x = BITMAP_CX ;
  281.     apt[3].y = BITMAP_CY ;
  282.     
  283.     rect.xLeft   = 0 ;
  284.     rect.xRight  = BITMAP_CX ;
  285.     rect.yBottom = 0 ;
  286.     rect.yTop    = BITMAP_CY ;
  287.  
  288.     GpiWCBitBlt(hpsBitmap, hbm, 4, apt, ROP_SRCCOPY, 0) ;
  289.     WinSendMsg(hwndShape, SHAPEWIN_MSG_UPDATE, MPFROMP(&rect), NULL) ;
  290. }
  291.  
  292. /*
  293.  * bitmapDrawFace - draw face only
  294.  */
  295.  
  296. void    bitmapDrawFace(HBITMAP hbm)
  297. {
  298.     POINTL  apt[4] ;
  299.     RECTL   rect   ;
  300.  
  301.     apt[0].x =  FACE_X1 ;
  302.     apt[0].y =  FACE_Y1 ;
  303.     apt[1].x =  FACE_X2 ;
  304.     apt[1].y =  FACE_Y2 ;
  305.     apt[2].x =  FACE_X1 ;
  306.     apt[2].y =  FACE_Y1 ;
  307.     apt[3].x =  FACE_X2 ;
  308.     apt[3].y =  FACE_Y2 ;
  309.  
  310.     rect.xLeft   =  FACE_X1 ;
  311.     rect.xRight  =  FACE_Y1 ;
  312.     rect.yBottom =  FACE_X2 ;
  313.     rect.yTop    =  FACE_Y2 ;
  314.  
  315.     GpiWCBitBlt(hpsBitmap, hbm, 4, apt, ROP_SRCCOPY, 0) ;
  316.     WinSendMsg(hwndShape, SHAPEWIN_MSG_UPDATE, MPFROMP(&rect), NULL) ;
  317. }
  318.  
  319.  
  320.