home *** CD-ROM | disk | FTP | other *** search
- #include "MultiMonitorController.h"
-
- #include <LowMem.h>
- #include <string.h>
-
- MultiMonitorController * MultiMonitorController::sMMController = NULL;
- TMTask MultiMonitorController::sTimerTask;
- TimerUPP MultiMonitorController::sTimerRoutineDescriptor = NewTimerProc(MultiMonitorController::CursorTimer);
-
- // Do it 60fps
- const UInt32 kScreenMillisecondUpdate = 1000 / 60;
-
- // ---------------------------------------------------------------------------
- // • MultiMonitorController
- // ---------------------------------------------------------------------------
-
- MultiMonitorController::MultiMonitorController()
- {
- sMMController = this;
- mCapturedDevice = NULL;
-
- memset(mVirtualDevices, 0, sizeof(mVirtualDevices));
-
- mCapturedDevice = NEW CapturedGDevice();
-
- for (UInt32 monitor = 0; monitor < kMultiMonitorCount; monitor++)
- mVirtualDevices[monitor] = NEW VirtualGDevice();
- }
-
-
- // ---------------------------------------------------------------------------
- // • ~MultiMonitorController
- // ---------------------------------------------------------------------------
-
- MultiMonitorController::~MultiMonitorController()
- {
- sMMController = NULL;
-
- if (mCapturedDevice != NULL)
- {
- mCapturedDevice->UncaptureDevice();
- delete mCapturedDevice;
- mCapturedDevice = NULL;
- }
-
- for (UInt32 monitor = 0; monitor < kMultiMonitorCount; monitor++)
- {
- delete mVirtualDevices[monitor];
- mVirtualDevices[monitor] = NULL;
- }
- }
-
-
- // ---------------------------------------------------------------------------
- // • Enable
- // ---------------------------------------------------------------------------
-
- void
- MultiMonitorController::Enable()
- {
- mCapturedDevice->CaptureDevice(
- ::GetMainDevice(),
- mVirtualDevices,
- kMultiMonitorCount);
-
- SetEffectsType(kEffectsTypeNormal);
-
- memset(&sTimerTask, 0, sizeof(sTimerTask));
- sTimerTask.tmAddr = MultiMonitorController::sTimerRoutineDescriptor;
-
- ::InsTime((QElemPtr)&sTimerTask);
- ::PrimeTime((QElemPtr)&sTimerTask, kScreenMillisecondUpdate);
- }
-
-
- // ---------------------------------------------------------------------------
- // • Disable
- // ---------------------------------------------------------------------------
-
- void
- MultiMonitorController::Disable()
- {
- ::RmvTime((QElemPtr)&sTimerTask);
-
- mCapturedDevice->UncaptureDevice();
- }
-
-
- // ---------------------------------------------------------------------------
- // • CursorTimer
- // ---------------------------------------------------------------------------
-
- void
- MultiMonitorController::CursorTimer(
- TMTaskPtr inTimerTaskPtr)
- {
- // Call through to jCrsrTask to keep the mouse alive
- if (!LMGetCrsrBusy())
- CallUniversalProc(*(UniversalProcPtr *)0x08EE, 0);
-
- // Just update the captured screen
- MultiMonitorController::GetInstance().mCapturedDevice->UpdateCapturedScreen();
-
- ::PrimeTime((QElemPtr)inTimerTaskPtr, kScreenMillisecondUpdate);
- }
-
-
- // ---------------------------------------------------------------------------
- // • SetEffectsType
- // ---------------------------------------------------------------------------
-
- void
- MultiMonitorController::SetEffectsType(
- MultiMonitorEffectT inEffect)
- {
- if (mEffectType != inEffect)
- {
- GraphicBlendEffect * blendEffect = NULL;
-
- switch (inEffect)
- {
- case kEffectsTypeNormal:
- blendEffect = NEW SimpleBlendEffect();
- break;
-
- case kEffectsTypeThrob:
- blendEffect = NEW ThrobEffect();
- break;
-
- case kEffectsTypeDontThrob:
- blendEffect = NEW DontThrobEffect();
- break;
- }
-
- if (blendEffect != NULL)
- {
- if (blendEffect->Initialize())
- {
- mCapturedDevice->SetGraphicBlendEffect(blendEffect);
- }
- else
- {
- // fix me - report error to user
- delete blendEffect;
- }
- }
-
- mEffectType = inEffect;
- }
- }
-
-
- // ---------------------------------------------------------------------------
- // • SetEffectsValue
- // ---------------------------------------------------------------------------
-
- void
- MultiMonitorController::SetEffectsValue(
- UInt32 inValueIndex,
- double inValue)
- {
- mCapturedDevice->SetGraphicBlendValue(inValueIndex, inValue);
- }
-
-
-