a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * Copyright © 2006-2011 Simon Thum simon dot thum at gmx dot de
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * Permission is hereby granted, free of charge, to any person obtaining a
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * copy of this software and associated documentation files (the "Software"),
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * to deal in the Software without restriction, including without limitation
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * the rights to use, copy, modify, merge, publish, distribute, sublicense,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * and/or sell copies of the Software, and to permit persons to whom the
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * Software is furnished to do so, subject to the following conditions:
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * The above copyright notice and this permission notice (including the next
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * paragraph) shall be included in all copies or substantial portions of the
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * Software.
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * DEALINGS IN THE SOFTWARE.
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync/* constants for acceleration profiles */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * returns actual acceleration depending on velocity, acceleration control,...
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync (DeviceIntPtr dev, struct _DeviceVelocityRec * vel,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync double velocity, double threshold, double accelCoeff);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * a motion history, with just enough information to
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * calc mean velocity and decide which motion was along
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * a more or less straight line
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync double dx, dy; /* accumulated delta for each axis */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * Contains all data needed to implement mouse ballistics
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync double velocity; /* velocity as guessed by algorithm */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync double last_velocity; /* previous velocity estimate */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync double last_dy; /* phase of last/current estimate */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync double corr_mul; /* config: multiply this into velocity */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync double const_acceleration; /* config: (recipr.) const deceleration */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync double min_acceleration; /* config: minimum acceleration */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync short reset_time; /* config: reset non-visible state after # ms */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync short use_softening; /* config: use softening of mouse values */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync double max_rel_diff; /* config: max. relative difference */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync int initial_range; /* config: max. offset used as initial velocity */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync Bool average_accel; /* config: average acceleration over velocity */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync PointerAccelerationProfileFunc deviceSpecificProfile;
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync void *profile_private; /* extended data, see SetAccelerationProfile() */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync struct { /* to be able to query this information */
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * contains the run-time data for the predictable scheme, that is, a
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync * DeviceVelocityPtr and the property handlers.
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync} PredictableAccelSchemeRec, *PredictableAccelSchemePtr;
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncProcessVelocityData2D(DeviceVelocityPtr vel, double dx, double dy, int time);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncBasicComputeAcceleration(DeviceIntPtr dev, DeviceVelocityPtr vel,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncSetAccelerationProfile(DeviceVelocityPtr vel, int profile_num);
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncSetDeviceSpecificAccelerationProfile(DeviceVelocityPtr vel,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncacceleratePointerPredictable(DeviceIntPtr dev, ValuatorMask *val,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsyncacceleratePointerLightweight(DeviceIntPtr dev, ValuatorMask *val,
a3f3701cea1ba388e7c877955252bb7375eedebdvboxsync#endif /* POINTERVELOCITY_H */