This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/samples/win/life/bitmaps.c

111 lines
2.4 KiB
C

#include <stdlib.h>
#include "life.h"
#include "bitmap.h"
static HBITMAP CellBitMap;
static HDC MemoryDC;
extern void InitBitMap()
/**********************
Initialize the bitmap used to draw cells
*/
{
CellBitMap = LoadBitmap( ThisInst, "CellBitMap" );
NewBitMap();
}
extern void FiniBitMap()
/**********************/
{
if( CellBitMap != (HBITMAP)0 )
DeleteObject( CellBitMap );
}
extern void LoadNewBitmap()
/**************************
Load a new bitmap from disk, and upate accordingly
*/
{
HBITMAP bit_map;
bit_map = RequestBitmapFile();
FlushMouse();
if( bit_map == (HBITMAP)0 )
return;
if( CellBitMap != (HBITMAP)0 )
DeleteObject( CellBitMap );
CellBitMap = bit_map;
NewBitMap();
}
extern void NewBitMap()
/**********************
Process a new bit map for cells, pointed to by CellBitMap
*/
{
HDC dc;
dc = GetDC( WinHandle );
MemoryDC = CreateCompatibleDC( dc );
ReleaseDC( WinHandle, dc );
SelectObject( MemoryDC, CellBitMap );
GetObject( CellBitMap, sizeof( BITMAP ), (LPSTR)&BitInfo );
}
extern void BlitBitMap( HDC dc, pixels x, pixels y )
/***************************************************
Draw a cell at location (x,y)
*/
{
pixels start_x, start_y;
HANDLE old;
if( IsAnIcon ) {
PatBlt( dc, x, y, 1, 1, BLACKNESS );
} else {
start_x = BitInfo.bmWidth*x;
start_y = BitInfo.bmHeight*y;
BitBlt( dc, start_x, start_y, BitInfo.bmWidth, BitInfo.bmHeight,
MemoryDC, 0, 0, SRCCOPY );
if( DrawGrid ) {
old = SelectObject( dc, Brush );
Rectangle( dc, start_x, start_y,
start_x+BitInfo.bmWidth+1, start_y+BitInfo.bmHeight+1 );
SelectObject( dc, old );
}
}
}
extern void UnBlitBitMap( HDC dc, pixels x, pixels y )
/*****************************************************
Erase a cell at location (x,y)
*/
{
pixels start_x, start_y;
if( IsAnIcon ) {
PatBlt( dc, x, y, 1, 1, WHITENESS );
} else {
start_x = BitInfo.bmWidth*x;
start_y = BitInfo.bmHeight*y;
if( DrawGrid ) {
Rectangle( dc, start_x, start_y,
start_x+BitInfo.bmWidth+1, start_y+BitInfo.bmHeight+1 );
} else {
PatBlt( dc, start_x, start_y,
BitInfo.bmWidth, BitInfo.bmHeight, WHITENESS );
}
}
}