[Scummvm-cvs-logs] CVS: scummvm/backends/PalmOS/Src init_golcd.cpp,NONE,1.1 init_golcd.h,NONE,1.1

Chris Apers chrilith at users.sourceforge.net
Wed Oct 12 13:44:45 CEST 2005


Update of /cvsroot/scummvm/scummvm/backends/PalmOS/Src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3526

Added Files:
	init_golcd.cpp init_golcd.h 
Log Message:
Added GoLCD support

--- NEW FILE: init_golcd.cpp ---
#include <PalmOS.h>
#include <PalmGoLCD.h>

#include "init_golcd.h"

// you can use this handle directly
MemHandle gGoLcdH;

Err GoLCDInit(MemHandle *goLcdH) {
	if (!goLcdH)
		return sysErrParamErr;

	Err e;
	UInt16 refNum;
	Boolean loaded = false;
	*goLcdH = NULL;
	
	if (e = SysLibFind(goLcdLibName, &refNum))
		loaded = !(e = SysLibLoad(goLcdLibType, goLcdLibCreator, &refNum));

	if (!e)
		if ((e = GoLcdLibOpen(refNum)))
			SysLibRemove(refNum);

	if (!e) {
		MemHandle lcdH = MemHandleNew(sizeof(GoLCDType));
		GoLCDType *lcdP = (GoLCDType *)MemHandleLock(lcdH);
		MemSet(lcdP, MemHandleSize(lcdH), 0);
		lcdP->refNum = refNum;
		lcdP->timeout = GoLcdGetTimeout(refNum, goLcdPenTapMode);
		MemPtrUnlock(lcdP);
		*goLcdH = lcdH;
	}

	return e;
}

Err GoLCDRelease(MemHandle goLcdH) {
	if (!goLcdH)
		return sysErrParamErr;

	Err e;
	GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
	if (lcdP->refNum != sysInvalidRefNum)		
		if (!(e = GoLcdLibClose(lcdP->refNum)))
			e = SysLibRemove(lcdP->refNum);

	MemPtrUnlock(lcdP);
	MemHandleFree(goLcdH);

	return e;
}

Boolean GoLCDPointInBounds(MemHandle goLcdH, Coord x, Coord y) {
	Boolean inBounds = false;

	if (!goLcdH)
		return inBounds;

	GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
	inBounds = (lcdP->active && RctPtInRectangle(x, y, &(lcdP->bounds)));
	MemPtrUnlock(lcdP);

	return inBounds;
}

void GoLCDSetInk(MemHandle goLcdH, RGBColorType *inkP) {
	if (!goLcdH)
		return;

	GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
	MemMove(&(lcdP->ink), inkP, sizeof(RGBColorType));
	MemPtrUnlock(lcdP);
}

void GoLCDSetBounds(MemHandle goLcdH, RectangleType *boundsP) {
	if (!goLcdH)
		return;

	GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
	MemMove(&(lcdP->bounds), boundsP, sizeof(RectangleType));
	MemPtrUnlock(lcdP);
}

void GoLCDActivate(MemHandle goLcdH, Boolean active) {
	if (!goLcdH)
		return;

	GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);

	if (active) {
		if (!lcdP->active) {
			lcdP->active = true;
			GoLcdSetInkState(lcdP->refNum, goLcdInkEnabled, goLcdColorOverride, &(lcdP->ink));
			GoLcdSetBounds(lcdP->refNum, &(lcdP->bounds));
			GoLcdSetGsiState(lcdP->refNum, goLcdGsiNormal, goLcdColorDefault, 0);
			GoLcdSetTimeout(lcdP->refNum, goLcdPenTapMode, lcdP->timeout);
			GoLcdSetStatus(lcdP->refNum, goLcdEnabled);
		}

	} else {
			lcdP->active = false;
			GoLcdSetInkState(lcdP->refNum, goLcdInkDisabled, goLcdColorDefault, 0);
			GoLcdSetStatus(lcdP->refNum, goLcdDisabled);
	}

	MemPtrUnlock(lcdP);
}

Boolean GoLCDToggle(MemHandle goLcdH) {
	if (!goLcdH)
		return;

	Boolean active;
	GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
	active = lcdP->active;
	MemPtrUnlock(lcdP);
	
	GoLCDActivate(goLcdH, !active);
	return (!active);
}

--- NEW FILE: init_golcd.h ---
#ifndef INIT_GOLCD_H
#define INIT_GOLCD_H

typedef struct {
	Boolean active;
	UInt16 refNum;
	RectangleType bounds;
	RGBColorType ink;
	UInt32 timeout;
} GoLCDType;

extern MemHandle gGoLcdH;

Err GoLCDInit(MemHandle *goLcdH);
Err GoLCDRelease(MemHandle goLcdH);
void GoLCDSetInk(MemHandle goLcdH, RGBColorType *inkP);
void GoLCDSetBounds(MemHandle goLcdH, RectangleType *boundsP);
void GoLCDActivate(MemHandle goLcdH, Boolean active);
Boolean GoLCDToggle(MemHandle goLcdH);
Boolean GoLCDPointInBounds(MemHandle goLcdH, Coord x, Coord y);

#endif





More information about the Scummvm-git-logs mailing list