Package libavg :: Module AVGMTAppStarter'

Source Code for Module libavg.AVGMTAppStarter'

  1  # libavg - Media Playback Engine. 
  2  # Copyright (C) 2003-2008 Ulrich von Zadow 
  3  # 
  4  # This library is free software; you can redistribute it and/or 
  5  # modify it under the terms of the GNU Lesser General Public 
  6  # License as published by the Free Software Foundation; either 
  7  # version 2 of the License, or (at your option) any later version. 
  8  # 
  9  # This library is distributed in the hope that it will be useful, 
 10  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 11  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
 12  # Lesser General Public License for more details. 
 13  # 
 14  # You should have received a copy of the GNU Lesser General Public 
 15  # License along with this library; if not, write to the Free Software 
 16  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 17  # 
 18  # Current versions can be found at www.libavg.de 
 19  # 
 20  # Original author of this file is Martin Heistermann <mh at sponc dot de> 
 21  # 
 22   
 23  import os 
 24  import math 
 25  from libavg import avg 
 26  from AVGAppStarter import AVGAppStarter 
 27   
 28  try: 
 29      from alib.calibrator.CamCalibrator import Calibrator 
 30  except ImportError: 
 31      from .camcalibrator import CamCalibrator as Calibrator 
 32       
 33  try: 
 34      from alib.clicktest import ClickTest 
 35  except ImportError: 
 36      ClickTest = None 
 37   
 38  g_player = avg.Player.get() 
 39   
40 -class AVGMTAppStarter (AVGAppStarter):
41 - def __init__(self, *args, **kwargs):
42 AVGMTAppStarter.instance = self 43 super(AVGMTAppStarter, self).__init__(*args, **kwargs)
44
45 - def toggleTrackerImage(self):
46 if self.__showTrackerImage: 47 self.hideTrackerImage() 48 else: 49 self.showTrackerImage()
50
51 - def showTrackerImage(self):
52 if self.__showTrackerImage: 53 return 54 self.__showTrackerImage = True 55 self.__updateTrackerImageInterval = \ 56 g_player.setOnFrameHandler(self.__updateTrackerImage) 57 self.__trackerImageNode.opacity = 1 58 self.tracker.setDebugImages(False, True)
59
60 - def hideTrackerImage(self):
61 if not self.__showTrackerImage: 62 return 63 self.__showTrackerImage = False 64 if self.__updateTrackerImageInterval: 65 g_player.clearInterval(self.__updateTrackerImageInterval) 66 self.__updateTrackerImageInterval = None 67 self.__trackerImageNode.opacity = 0 68 self.tracker.setDebugImages(False, False)
69
70 - def __updateTrackerImage(self):
71 def transformPos((x,y)): 72 if self.trackerFlipX: 73 x = 1 - x 74 if self.trackerFlipY: 75 y = 1 - y 76 return (x, y)
77 78 fingerBitmap = self.tracker.getImage(avg.IMG_FINGERS) 79 node = self.__trackerImageNode 80 node.setBitmap(fingerBitmap) 81 node.size = g_player.getRootNode().size 82 83 grid = node.getOrigVertexCoords() 84 grid = [ [ transformPos(pos) for pos in line ] for line in grid] 85 node.setWarpedVertexCoords(grid)
86
87 - def _onBeforePlay(self):
88 # we must add the tracker first, calibrator depends on it 89 self.tracker = g_player.addTracker() 90 91 if Calibrator: 92 self.__calibratorNode = g_player.createNode('div',{ 93 'opacity': 0, 94 'active': False, 95 }) 96 rootNode = g_player.getRootNode() 97 rootNode.appendChild(self.__calibratorNode) 98 self.__calibratorNode.size = rootNode.size 99 self.__calibrator = Calibrator(self.__calibratorNode, appStarter=self) 100 self.__calibrator.setOnCalibrationSuccess(self.__onCalibrationSuccess) 101 self.__calibrator.init() 102 else: 103 self.__calibrator = None 104 105 self.__showTrackerImage = False 106 self.__updateTrackerImageInterval = None 107 self.__trackerImageNode = g_player.createNode('image', {'sensitive': False}) 108 g_player.getRootNode().appendChild(self.__trackerImageNode) 109 110 self.__updateTrackerImageFixup() 111 112 self.bindKey('h', self.tracker.resetHistory, 'RESET tracker history') 113 self.bindKey('d', self.toggleTrackerImage, 'toggle tracker image') 114 115 if self.__calibrator: 116 self.bindKey('c', self.__enterCalibrator, 'enter calibrator')
117
118 - def _initClickTest(self):
119 if ClickTest: 120 self._clickTest = ClickTest(self._appNode, multiClick=True) 121 else: 122 self._clickTest = None
123
124 - def __updateTrackerImageFixup(self):
125 # finger bitmap might need to be rotated/flipped 126 trackerAngle = float(self.tracker.getParam('/transform/angle/@value')) 127 angle = round(trackerAngle/math.pi) * math.pi 128 self.__trackerImageNode.angle = angle 129 self.trackerFlipX = float(self.tracker.getParam('/transform/displayscale/@x')) < 0 130 self.trackerFlipY = float(self.tracker.getParam('/transform/displayscale/@y')) < 0
131
132 - def __onCalibrationSuccess(self):
133 self.__updateTrackerImageFixup()
134
135 - def __enterCalibrator(self):
136 def leaveCalibrator(): 137 138 self.unbindKey('e') 139 self._activeApp = self._appInstance 140 self._appInstance.enter() 141 self.__calibrator.leave() 142 self._appNode.opacity = 1 143 self._appNode.active = True 144 self.__calibratorNode.opacity = 0 145 self.__calibratorNode.active = False
146 147 if self.__calibrator.isRunning(): 148 print "calibrator already running!" 149 return 150 151 self._activeApp = self.__calibrator 152 self.__calibrator.enter() 153 self.bindKey('e', leaveCalibrator, 'leave Calibrator') 154 self._appInstance.leave() 155 self.__calibratorNode.opacity = 1 156 self.__calibratorNode.active = True 157 self._appNode.opacity = 0 158 self._appNode.active = False 159 160 AVGMTAppStarter.instance = None 161