aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Apers2005-10-12 20:43:30 +0000
committerChris Apers2005-10-12 20:43:30 +0000
commitbfa7823a5e5c0c8044de9a1085bac4fc7d6b79d3 (patch)
treee27282389b041f50d6d01de6209c40ece7880dad
parentd9527b601e26d6cf918302f9f4255ddfcb7a7974 (diff)
downloadscummvm-rg350-bfa7823a5e5c0c8044de9a1085bac4fc7d6b79d3.tar.gz
scummvm-rg350-bfa7823a5e5c0c8044de9a1085bac4fc7d6b79d3.tar.bz2
scummvm-rg350-bfa7823a5e5c0c8044de9a1085bac4fc7d6b79d3.zip
Added GoLCD support
svn-id: r19049
-rwxr-xr-xbackends/PalmOS/Src/init_golcd.cpp121
-rwxr-xr-xbackends/PalmOS/Src/init_golcd.h22
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