diff options
-rwxr-xr-x | backends/PalmOS/Src/init_golcd.cpp | 121 | ||||
-rwxr-xr-x | backends/PalmOS/Src/init_golcd.h | 22 |
2 files changed, 143 insertions, 0 deletions
diff --git a/backends/PalmOS/Src/init_golcd.cpp b/backends/PalmOS/Src/init_golcd.cpp new file mode 100755 index 0000000000..63cc98e0ab --- /dev/null +++ b/backends/PalmOS/Src/init_golcd.cpp @@ -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); +} diff --git a/backends/PalmOS/Src/init_golcd.h b/backends/PalmOS/Src/init_golcd.h new file mode 100755 index 0000000000..7750a13a52 --- /dev/null +++ b/backends/PalmOS/Src/init_golcd.h @@ -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 |