3030else :
3131 raise Exception ("Unsupported python version: %s" % sys .version )
3232
33+ from pandac .PandaModules import loadPrcFileData
34+ loadPrcFileData ("" , "Panda3D example" )
35+ loadPrcFileData ("" , "fullscreen 0" )
36+ loadPrcFileData ("" , "win-size 1024 768" )
37+
3338import direct .directbase .DirectStart
3439from panda3d .core import *
3540from direct .showbase .DirectObject import DirectObject
@@ -43,12 +48,11 @@ class World(DirectObject):
4348 texture = None
4449 nodePath = None
4550 lastMouseMove = (- 1 , - 1 )
51+ translateKeys = None
52+ keyModifiers = 0
53+ modifierKeys = None
4654
4755 def __init__ (self ):
48- wp = WindowProperties ()
49- wp .setTitle ('Panda3D example' )
50- base .win .requestProperties (wp )
51-
5256 environ = loader .loadModel ("models/environment" )
5357 environ .reparentTo (render )
5458 environ .setScale (0.25 ,0.25 ,0.25 )
@@ -83,14 +87,11 @@ def __init__(self):
8387 # SetFocus needs to be called after browser creation.
8488 if platform .system () == "Windows" :
8589 ctypes .windll .user32 .SetFocus (windowHandle )
90+ self .browser .SendFocusEvent (True )
8691
8792 self .setBrowserSize ()
8893 self .accept ("window-event" , self .setBrowserSize )
8994
90- # Browser methods for sending mouse/keyboard/focus events:
91- # SendKeyEvent(), SendMouseClickEvent(), SendMouseMoveEvent(),
92- # SendMouseWheelEvent(), SendFocusEvent(), SendCaptureLostEvent().
93-
9495 self .initMouseHandlers ()
9596 self .initKeyboardHandlers ()
9697
@@ -104,14 +105,97 @@ def setBrowserSize(self, window=None):
104105 self .browser .SetSize (cefpython .PET_VIEW , width , height )
105106
106107 def initMouseHandlers (self ):
108+ # Browser methods for sending mouse/keyboard/focus events:
109+ # SendKeyEvent(), SendMouseClickEvent(), SendMouseMoveEvent(),
110+ # SendMouseWheelEvent(), SendFocusEvent(), SendCaptureLostEvent().
111+
107112 taskMgr .add (self .onMouseMove , "onMouseMove" )
108113 self .accept ("mouse1" , self .onMouseDown )
109114 self .accept ("mouse1-up" , self .onMouseUp )
110115 self .accept ("wheel_up" , self .onMouseWheelUp )
111116 self .accept ("wheel_down" , self .onMouseWheelDown )
112117
113118 def initKeyboardHandlers (self ):
114- pass
119+ self .translateKeys = {
120+ "f1" : cefpython .VK_F1 , "f2" : cefpython .VK_F2 ,
121+ "f3" : cefpython .VK_F3 , "f4" : cefpython .VK_F4 ,
122+ "f5" : cefpython .VK_F5 , "f6" : cefpython .VK_F6 ,
123+ "f7" : cefpython .VK_F7 , "f8" : cefpython .VK_F8 ,
124+ "f9" : cefpython .VK_F9 , "f10" : cefpython .VK_F10 ,
125+ "f11" : cefpython .VK_F11 , "f12" : cefpython .VK_F12 ,
126+
127+ "arrow_left" : cefpython .VK_LEFT ,
128+ "arrow_up" : cefpython .VK_UP ,
129+ "arrow_down" : cefpython .VK_DOWN ,
130+ "arrow_right" : cefpython .VK_RIGHT ,
131+
132+ "enter" : cefpython .VK_RETURN ,
133+ "tab" : cefpython .VK_TAB ,
134+ "space" : cefpython .VK_SPACE ,
135+ "escape" : cefpython .VK_ESCAPE ,
136+ "backspace" : cefpython .VK_BACK ,
137+ "insert" : cefpython .VK_INSERT ,
138+ "delete" : cefpython .VK_DELETE ,
139+ "home" : cefpython .VK_HOME ,
140+ "end" : cefpython .VK_END ,
141+ "page_up" : cefpython .VK_PAGEUP ,
142+ "page_down" : cefpython .VK_PAGEDOWN ,
143+
144+ "num_lock" : cefpython .VK_NUMLOCK ,
145+ "caps_lock" : cefpython .VK_CAPITAL ,
146+ "scroll_lock" : cefpython .VK_SCROLL ,
147+
148+ "lshift" : cefpython .VK_LSHIFT ,
149+ "rshift" : cefpython .VK_RSHIFT ,
150+ "lcontrol" : cefpython .VK_LCONTROL ,
151+ "rcontrol" : cefpython .VK_RCONTROL ,
152+ "lalt" : cefpython .VK_LMENU ,
153+ "ralt" : cefpython .VK_RMENU ,
154+ }
155+
156+ base .buttonThrowers [0 ].node ().setKeystrokeEvent ('keystroke' )
157+ base .buttonThrowers [0 ].node ().setButtonDownEvent ('button-down' )
158+ base .buttonThrowers [0 ].node ().setButtonUpEvent ('button-up' )
159+ base .buttonThrowers [0 ].node ().setButtonRepeatEvent ('button-repeat' )
160+
161+ self .accept ("keystroke" , self .onKeystroke )
162+ self .accept ("button-down" , self .onButtonDown )
163+ self .accept ("button-up" , self .onButtonUp )
164+ self .accept ("button-repeat" , self .onButtonDown )
165+
166+ self .keyModifiers = 0
167+ self .modifierKeys = {
168+ "shift" : cefpython .KEY_SHIFT ,
169+ "ctrl" : cefpython .KEY_CTRL ,
170+ "alt" : cefpython .KEY_ALT
171+ }
172+
173+ def keyInfo (self , key ):
174+ if platform .system () == "Windows" :
175+ return (key , 0 , 0 )
176+ elif platform .system () == "Darwin" :
177+ return (key , 0 , 0 )
178+ elif platform .system () == "Linux" :
179+ return (key ,)
180+
181+ def onKeystroke (self , key ):
182+ self .browser .SendKeyEvent (cefpython .KEYTYPE_CHAR ,
183+ self .keyInfo (ord (key )), 0 )
184+
185+ def onButtonDownOrUp (self , keyType , key ):
186+ if self .modifierKeys .has_key (key ):
187+ self .keyModifiers |= self .modifierKeys [key ]
188+ else :
189+ if self .translateKeys .has_key (key ):
190+ self .browser .SendKeyEvent (keyType ,
191+ self .keyInfo (self .translateKeys [key ]),
192+ self .keyModifiers )
193+
194+ def onButtonDown (self , key ):
195+ self .onButtonDownOrUp (cefpython .KEYTYPE_KEYDOWN , key )
196+
197+ def onButtonUp (self , key ):
198+ self .onButtonDownOrUp (cefpython .KEYTYPE_KEYUP , key )
115199
116200 def isMouseInsideBrowser (self , mouse ):
117201 if mouse .getX () >= - 0.75 and mouse .getX () <= 0.75 and (
@@ -208,6 +292,15 @@ def OnPaint(self, browser, paintElementType, dirtyRects, buffer):
208292 img = self .texture .modifyRamImage ()
209293 img .setData (buffer .GetString (mode = "bgra" , origin = "bottom-left" ))
210294
295+ def GetViewRect (self , browser , rect ):
296+ print ("GetViewRect()" )
297+
298+ def GetScreenRect (self , browser , rect ):
299+ print ("GetScreenRect()" )
300+
301+ def GetScreenPoint (self , browser , viewX , viewY , screenCoordinates ):
302+ print ("GetScreenPoint()" )
303+
211304 def OnLoadEnd (self , browser , frame , httpStatusCode ):
212305 return
213306 self ._saveImage ()
0 commit comments