home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: OtherApp
/
OtherApp.zip
/
osm2_102.zip
/
bitmap.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-11-09
|
7KB
|
320 lines
/*
* bitmap.c - Load/Dispose Bitmaps
*/
#include <stdio.h>
#include <stdlib.h>
#define INCL_PM
#include <os2.h>
#include "shapewin.h"
#include "osmulti2.h"
#include "osmulres.h"
/*
* Bitmaps to Load
*/
HBITMAP hbmMulNorm = NULLHANDLE ;
HBITMAP hbmMulOhno = NULLHANDLE ;
HBITMAP hbmMulPsyu = NULLHANDLE ;
HBITMAP hbmMulUru1 = NULLHANDLE ;
HBITMAP hbmMulUru2 = NULLHANDLE ;
HBITMAP hbmMulClos = NULLHANDLE ;
/*
* checkLoaded - check if bitmaps loaded
*/
static BOOL checkLoaded(void)
{
if (hbmMulNorm == NULLHANDLE) {
return FALSE ;
}
if (hbmMulOhno == NULLHANDLE) {
return FALSE ;
}
if (hbmMulPsyu == NULLHANDLE) {
return FALSE ;
}
if (hbmMulUru1 == NULLHANDLE) {
return FALSE ;
}
if (hbmMulUru2 == NULLHANDLE) {
return FALSE ;
}
if (hbmMulClos == NULLHANDLE) {
return FALSE ;
}
return TRUE ;
}
/*
* bitmapFree - free bitmaps if exists
*/
void bitmapFree(void)
{
if (hbmMulNorm != NULLHANDLE) {
GpiDeleteBitmap(hbmMulNorm) ;
hbmMulNorm = NULLHANDLE ;
}
if (hbmMulOhno != NULLHANDLE) {
GpiDeleteBitmap(hbmMulOhno) ;
hbmMulOhno = NULLHANDLE ;
}
if (hbmMulPsyu != NULLHANDLE) {
GpiDeleteBitmap(hbmMulPsyu) ;
hbmMulPsyu = NULLHANDLE ;
}
if (hbmMulUru1 != NULLHANDLE) {
GpiDeleteBitmap(hbmMulUru1) ;
hbmMulUru1 = NULLHANDLE ;
}
if (hbmMulUru2 != NULLHANDLE) {
GpiDeleteBitmap(hbmMulUru2) ;
hbmMulUru2 = NULLHANDLE ;
}
if (hbmMulClos != NULLHANDLE) {
GpiDeleteBitmap(hbmMulClos) ;
hbmMulClos = NULLHANDLE ;
}
}
/*
* loadOne - load a Bitmap
*/
static HBITMAP loadOne(HAB hab, int id)
{
HDC hdc ;
HPS hps ;
SIZEL siz ;
HBITMAP hbm ;
siz.cx = siz.cy = 0 ;
hdc = DevOpenDC(hab, OD_MEMORY, "*", 0, NULL, NULLHANDLE) ;
hps = GpiCreatePS(hab, hdc, &siz,
PU_PELS | GPIF_DEFAULT | GPIT_MICRO | GPIA_ASSOC) ;
if (hdc == NULLHANDLE || hps == NULLHANDLE) {
if (hps != NULLHANDLE) GpiDestroyPS(hps) ;
if (hdc != NULLHANDLE) DevCloseDC(hdc) ;
return NULLHANDLE ;
}
hbm = GpiLoadBitmap(hps, NULLHANDLE, id, 0, 0) ;
GpiDestroyPS(hps) ;
DevCloseDC(hdc) ;
TRACE("load bitmap ID %d, HBITMAP %08x\n", id, hbm) ;
return hbm ;
}
/*
* bitmapLoad - load bitmaps
*/
BOOL bitmapLoad(HAB hab)
{
hbmMulNorm = loadOne(hab, ID_MULNORM) ;
hbmMulOhno = loadOne(hab, ID_MULOHNO) ;
hbmMulPsyu = loadOne(hab, ID_MULPSYU) ;
hbmMulUru1 = loadOne(hab, ID_MULURU1) ;
hbmMulUru2 = loadOne(hab, ID_MULURU2) ;
hbmMulClos = loadOne(hab, ID_MULCLOS) ;
if (checkLoaded() != TRUE) {
bitmapFree() ;
return FALSE ;
}
return TRUE ;
}
/*
* Dimensions for Bitmap
*/
#define BITMAP_CX 64 /* bitmap dimension */
#define BITMAP_CY 120
#define FACE_X1 12 /* face area */
#define FACE_Y1 65
#define FACE_X2 52
#define FACE_Y2 96
#define NADE_Y1 92 /* area of 'nadenade' */
#define NADE_Y2 120
#define FUNI_Y1 45 /* area of 'funifuni' */
#define FUNI_Y2 60
/*
* Memory DC/PS & Bitmap for Multi Bitmap
*/
HDC hdcBitmap = NULLHANDLE ;
HPS hpsBitmap = NULLHANDLE ;
HBITMAP hbmBitmap = NULLHANDLE ;
/*
* bitmapDispose - dispose resources related to working Bitmap
*/
void bitmapDispose(void)
{
if (hbmBitmap != NULLHANDLE) {
GpiDeleteBitmap(hbmBitmap) ;
hbmBitmap = NULLHANDLE ;
}
if (hpsBitmap != NULLHANDLE) {
GpiSetBitmap(hpsBitmap, NULLHANDLE) ;
GpiDestroyPS(hpsBitmap) ;
hpsBitmap == NULLHANDLE ;
}
if (hdcBitmap != NULLHANDLE) {
DevCloseDC(hdcBitmap) ;
hdcBitmap = NULLHANDLE ;
}
}
/*
* bitmapCreate - create Memory DC/PS & Bitmap Area for Bitmap
*/
BOOL bitmapCreate(HAB hab)
{
SIZEL siz ;
POINTL apt[4] ;
BITMAPINFOHEADER2 bmi ;
/*
* Create Memory DC/PS for play with Bitmap
*/
hdcBitmap =DevOpenDC(hab, OD_MEMORY, "*", 0, NULL, NULLHANDLE) ;
siz.cx = siz.cy = 0 ;
hpsBitmap = GpiCreatePS(hab, hdcBitmap, &siz,
PU_PELS | GPIF_DEFAULT | GPIT_MICRO | GPIA_ASSOC) ;
if (hdcBitmap == NULLHANDLE || hpsBitmap == NULLHANDLE) {
return FALSE ;
}
/*
* create and associate bitmap for Image Bitmap
*/
memset(&bmi, 0, sizeof(bmi)) ;
bmi.cbFix = sizeof(bmi) ;
bmi.cx = BITMAP_CX ;
bmi.cy = BITMAP_CY ;
bmi.cPlanes = 1 ;
bmi.cBitCount = 24 ;
bmi.ulCompression = 0 ;
bmi.cclrUsed = 0 ;
bmi.cclrImportant = 0 ;
hbmBitmap = GpiCreateBitmap(hpsBitmap, &bmi, 0, NULL, NULL) ;
if (hbmBitmap == NULLHANDLE) {
return FALSE ;
}
GpiSetBitmap(hpsBitmap, hbmBitmap) ;
/*
* draw Initial Image
*/
apt[0].x = 0 ;
apt[0].y = 0 ;
apt[1].x = BITMAP_CX ;
apt[1].y = BITMAP_CY ;
apt[2].x = 0 ;
apt[2].y = 0 ;
apt[3].x = BITMAP_CX ;
apt[3].y = BITMAP_CY ;
GpiWCBitBlt(hpsBitmap, hbmMulNorm, 4, apt, ROP_SRCCOPY, 0) ;
return TRUE ;
}
/*
* Checks Mouse in Nade/Funi Area
*/
BOOL bitmapAtNade(PPOINTL pt)
{
if (pt->y > NADE_Y1 && pt->y < NADE_Y2) {
return TRUE ;
}
return FALSE ;
}
BOOL bitmapAtFuni(PPOINTL pt)
{
if (pt->y > FUNI_Y1 && pt->y < FUNI_Y2) {
return TRUE ;
}
return FALSE ;
}
/*
* bitmapDrawBody - draw entire body
*/
void bitmapDrawBody(HBITMAP hbm)
{
POINTL apt[4] ;
RECTL rect ;
apt[0].x = 0 ;
apt[0].y = 0 ;
apt[1].x = BITMAP_CX ;
apt[1].y = BITMAP_CY ;
apt[2].x = 0 ;
apt[2].y = 0 ;
apt[3].x = BITMAP_CX ;
apt[3].y = BITMAP_CY ;
rect.xLeft = 0 ;
rect.xRight = BITMAP_CX ;
rect.yBottom = 0 ;
rect.yTop = BITMAP_CY ;
GpiWCBitBlt(hpsBitmap, hbm, 4, apt, ROP_SRCCOPY, 0) ;
WinSendMsg(hwndShape, SHAPEWIN_MSG_UPDATE, MPFROMP(&rect), NULL) ;
}
/*
* bitmapDrawFace - draw face only
*/
void bitmapDrawFace(HBITMAP hbm)
{
POINTL apt[4] ;
RECTL rect ;
apt[0].x = FACE_X1 ;
apt[0].y = FACE_Y1 ;
apt[1].x = FACE_X2 ;
apt[1].y = FACE_Y2 ;
apt[2].x = FACE_X1 ;
apt[2].y = FACE_Y1 ;
apt[3].x = FACE_X2 ;
apt[3].y = FACE_Y2 ;
rect.xLeft = FACE_X1 ;
rect.xRight = FACE_Y1 ;
rect.yBottom = FACE_X2 ;
rect.yTop = FACE_Y2 ;
GpiWCBitBlt(hpsBitmap, hbm, 4, apt, ROP_SRCCOPY, 0) ;
WinSendMsg(hwndShape, SHAPEWIN_MSG_UPDATE, MPFROMP(&rect), NULL) ;
}