Updates for the Joystick demo to allow it to funciton on Linux where
the min position values are negative. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27266 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
a800dc50d4
commit
3ba55e8ab7
@ -114,8 +114,21 @@ class JoyGauge(wx.Panel):
|
||||
joyy = float(self.stick.GetPosition().y)
|
||||
|
||||
# Get the joystick range of motion
|
||||
xrange = self.stick.GetXMax() - self.stick.GetXMin()
|
||||
yrange = self.stick.GetYMax() - self.stick.GetYMin()
|
||||
xmin = self.stick.GetXMin()
|
||||
xmax = self.stick.GetXMax()
|
||||
if xmin < 0:
|
||||
xmax += abs(xmin)
|
||||
joyx += abs(xmin)
|
||||
xmin = 0
|
||||
xrange = max(xmax - xmin, 1)
|
||||
|
||||
ymin = self.stick.GetYMin()
|
||||
ymax = self.stick.GetYMax()
|
||||
if ymin < 0:
|
||||
ymax += abs(ymin)
|
||||
joyy += abs(ymin)
|
||||
ymin = 0
|
||||
yrange = max(ymax - ymin, 1)
|
||||
|
||||
# calc a ratio of our range versus the joystick range
|
||||
xratio = float(edgeSize) / xrange
|
||||
@ -123,7 +136,7 @@ class JoyGauge(wx.Panel):
|
||||
|
||||
# calc the displayable value based on position times ratio
|
||||
xval = int(joyx * xratio)
|
||||
yval = int(joyy * xratio)
|
||||
yval = int(joyy * yratio)
|
||||
|
||||
# and normalize the value from our brush's origin
|
||||
x = xval + xorigin
|
||||
@ -131,7 +144,7 @@ class JoyGauge(wx.Panel):
|
||||
|
||||
# Now to draw it.
|
||||
dc.SetPen(wx.Pen(wx.RED, 2))
|
||||
dc.CrossHair((x, y))
|
||||
dc.CrossHair(x, y)
|
||||
|
||||
# Turn off drawing optimization
|
||||
dc.EndDrawing()
|
||||
@ -758,10 +771,8 @@ class Axis(wx.Panel):
|
||||
self.GetMax = eval('stick.Get%sMax' % token)
|
||||
|
||||
# Create our displays and set them up.
|
||||
self.Min = wx.StaticText(self, -1, str(self.GetMin()),
|
||||
size=(40,-1), style=wx.ALIGN_RIGHT | wx.ST_NO_AUTORESIZE)
|
||||
self.Max = wx.StaticText(self, -1, str(self.GetMax()),
|
||||
size=(40,-1), style=wx.ALIGN_LEFT | wx.ST_NO_AUTORESIZE)
|
||||
self.Min = wx.StaticText(self, -1, str(self.GetMin()), style=wx.ALIGN_RIGHT)
|
||||
self.Max = wx.StaticText(self, -1, str(self.GetMax()), style=wx.ALIGN_LEFT)
|
||||
self.bar = AxisBar(self)
|
||||
|
||||
sizer.Add(self.Min, 0, wx.ALL | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 1)
|
||||
@ -813,20 +824,25 @@ class Axis(wx.Panel):
|
||||
else:
|
||||
val = eval('self.stick.Get%sPosition()' % self.token)
|
||||
|
||||
|
||||
#
|
||||
# While we might be able to rely on a range of 0-FFFFFF on Win, that might
|
||||
# not be true of all drivers on all platforms. Thus, calc the actual full
|
||||
# range first.
|
||||
#
|
||||
if min < 0:
|
||||
max += abs(min)
|
||||
val += abs(min)
|
||||
min = 0
|
||||
range = float(max - min)
|
||||
|
||||
|
||||
#
|
||||
# The relative value is used by the derived wx.Gauge since it is a
|
||||
# positive-only control.
|
||||
#
|
||||
relative = 0
|
||||
if range:
|
||||
relative = int(val / range * 1000)
|
||||
relative = int( val / range * 1000)
|
||||
|
||||
#
|
||||
# Pass both the raw and relative values to the derived Gauge
|
||||
@ -941,9 +957,9 @@ class JoystickDemoPanel(wx.Panel):
|
||||
|
||||
# Capture Joystick events (if they happen)
|
||||
self.Bind(wx.EVT_JOYSTICK_EVENTS, self.OnJoystick)
|
||||
|
||||
self.stick.SetMovementThreshold(10)
|
||||
|
||||
|
||||
def Calibrate(self, evt=None):
|
||||
# Do not try this without a stick
|
||||
if not self.stick:
|
||||
@ -954,6 +970,7 @@ class JoystickDemoPanel(wx.Panel):
|
||||
self.pov.Calibrate()
|
||||
self.buttons.Calibrate()
|
||||
|
||||
|
||||
def OnJoystick(self, evt=None):
|
||||
if not self.stick:
|
||||
return
|
||||
@ -961,9 +978,15 @@ class JoystickDemoPanel(wx.Panel):
|
||||
self.axes.Update()
|
||||
self.joy.Update()
|
||||
self.pov.Update()
|
||||
self.buttons.Update()
|
||||
if evt is not None and evt.IsButton():
|
||||
self.buttons.Update()
|
||||
|
||||
|
||||
def ShutdownDemo(self):
|
||||
if self.stick:
|
||||
self.stick.ReleaseCapture()
|
||||
self.stick = None
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
|
Loading…
Reference in New Issue
Block a user