00001 00002 // 00003 // Copyright (C) 2006 James M. Lawrence. All rights reserved. 00004 // 00005 // software: esve-1.0.3 00006 // file: esve/components/dimn/Supermouse_Motion_Handler.hxx 00007 // 00008 // Redistribution and use in source and binary forms, with or without 00009 // modification, are permitted provided that the following conditions 00010 // are met: 00011 // 00012 // 1. Redistributions of source code must retain the above copyright 00013 // notice, this list of conditions and the following disclaimer. 00014 // 00015 // 2. The origin of this software must not be misrepresented; you must 00016 // not claim that you wrote the original software. If you use this 00017 // software in a product, an acknowledgment in the product 00018 // documentation would be appreciated but is not required. 00019 // 00020 // 3. Altered source versions must be plainly marked as such, and must 00021 // not be misrepresented as being the original software. 00022 // 00023 // 4. The name of the author may not be used to endorse or promote 00024 // products derived from this software without specific prior written 00025 // permission. 00026 // 00027 // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY, 00028 // AND WITH NO CLAIM AS TO ITS SUITABILITY FOR ANY PURPOSE. IN NO EVENT 00029 // SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM WHATSOEVER MADE IN CONNECTION 00030 // TO THIS SOFTWARE. 00031 // 00033 00034 #ifndef esve_components_dimn_Supermouse_Motion_Handler_hxx 00035 #define esve_components_dimn_Supermouse_Motion_Handler_hxx 00036 00037 #include <esve/components/dimn/Motion_Handler.hxx> 00038 #include <esve/components/dimn/Inertial_Motion_Handler.hxx> 00039 #include <esve/components/dimn/Supermouse_Handler.hxx> 00040 #include <esve/types/pure.hxx> 00041 #include <memory> 00042 00043 namespace esve { namespace components { namespace dimn { 00044 00053 00054 class Supermouse_Motion_Handler 00055 : virtual public Inertial_Motion_Handler, 00056 public components::dimn::Motion_Handler, 00057 public Supermouse_Handler 00058 { 00059 public: 00060 types::real sensitivity() const ; 00061 void sensitivity( types::real ) ; 00062 00063 ~Supermouse_Motion_Handler() ; 00064 00065 protected: 00066 // rotation units 00067 static const types::real RADIANS_PER_PIXEL ; 00068 00069 // in milliradians per pixel 00070 static const types::real DEFAULT_SENSITIVITY ; 00071 00072 // Upon button release, if less than this amount of time has 00073 // passed (in seconds) since the last drag, then start motion. 00074 static const types::real MOTION_TRIGGER_TIME ; 00075 00076 Supermouse_Motion_Handler() ; 00077 00079 const types::pure & u() const ; 00080 00082 const types::pure & du_dt() const ; 00083 00085 const types::pure & d2u_dt2() const ; 00086 00088 const types::pure & du_dt( Button b ) const ; 00089 00091 const types::pure & d2u_dt2( Button b ) const ; 00092 00093 bool handle_supermouse_move( const Supermouse & ) ; 00094 bool handle_supermouse_push( Button, 00095 const Supermouse & ) ; 00096 bool handle_supermouse_release( Button, 00097 const Supermouse & ) ; 00098 00099 void update() ; 00100 void update( double dt ) ; 00101 00102 private: 00103 Supermouse_Motion_Handler( const Supermouse_Motion_Handler & ) ; 00104 Supermouse_Motion_Handler & 00105 operator=( const Supermouse_Motion_Handler & ) ; 00106 00107 class Private ; 00108 const std::auto_ptr<Private> m ; 00109 } ; 00110 00111 }}} // namespace esve::components::dimn 00112 00113 #endif
1.3.4