mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-06 18:27:26 +00:00
Added GoLCD support
svn-id: r19049
This commit is contained in:
parent
d9527b601e
commit
bfa7823a5e
121
backends/PalmOS/Src/init_golcd.cpp
Executable file
121
backends/PalmOS/Src/init_golcd.cpp
Executable file
@ -0,0 +1,121 @@
|
||||
#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);
|
||||
}
|
22
backends/PalmOS/Src/init_golcd.h
Executable file
22
backends/PalmOS/Src/init_golcd.h
Executable file
@ -0,0 +1,22 @@
|
||||
#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
|
Loading…
x
Reference in New Issue
Block a user