aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/PalmOS/Src/init_golcd.cpp
diff options
context:
space:
mode:
authorMax Horn2006-07-06 21:44:48 +0000
committerMax Horn2006-07-06 21:44:48 +0000
commit1d8d9f5510dc5f574e926bd6fadb9d20337daede (patch)
tree5cdcf6c8a233159776be9d90f3f39885222f65eb /backends/platform/PalmOS/Src/init_golcd.cpp
parent9269ebe9f5a281f452594f1e8108e31c88a398fb (diff)
downloadscummvm-rg350-1d8d9f5510dc5f574e926bd6fadb9d20337daede.tar.gz
scummvm-rg350-1d8d9f5510dc5f574e926bd6fadb9d20337daede.tar.bz2
scummvm-rg350-1d8d9f5510dc5f574e926bd6fadb9d20337daede.zip
Moving remaining platform/backends code, as previously threatened
svn-id: r23380
Diffstat (limited to 'backends/platform/PalmOS/Src/init_golcd.cpp')
-rw-r--r--backends/platform/PalmOS/Src/init_golcd.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/backends/platform/PalmOS/Src/init_golcd.cpp b/backends/platform/PalmOS/Src/init_golcd.cpp
new file mode 100644
index 0000000000..63cc98e0ab
--- /dev/null
+++ b/backends/platform/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);
+}