@ -23,7 +23,7 @@ constexpr f32 Square(s32 num) {
return static_cast < f32 > ( num * num ) ;
return static_cast < f32 > ( num * num ) ;
}
}
Controller_Gesture : : Controller_Gesture ( Core : : System & system ) : ControllerBase ( system ) { }
Controller_Gesture : : Controller_Gesture ( Core : : System & system _ ) : ControllerBase ( system _ ) { }
Controller_Gesture : : ~ Controller_Gesture ( ) = default ;
Controller_Gesture : : ~ Controller_Gesture ( ) = default ;
void Controller_Gesture : : OnInit ( ) {
void Controller_Gesture : : OnInit ( ) {
@ -211,15 +211,16 @@ void Controller_Gesture::UpdateExistingGesture(GestureProperties& gesture, Touch
}
}
}
}
void Controller_Gesture : : EndGesture ( GestureProperties & gesture , GestureProperties & last_gesture ,
void Controller_Gesture : : EndGesture ( GestureProperties & gesture ,
TouchType & type , Attribute & attributes , f32 time_difference ) {
GestureProperties & last_gesture_props , TouchType & type ,
Attribute & attributes , f32 time_difference ) {
const auto & last_entry =
const auto & last_entry =
shared_memory . gesture_states [ ( shared_memory . header . last_entry_index + 16 ) % 17 ] ;
shared_memory . gesture_states [ ( shared_memory . header . last_entry_index + 16 ) % 17 ] ;
if ( last_gesture . active_points ! = 0 ) {
if ( last_gesture _props . active_points ! = 0 ) {
switch ( last_entry . type ) {
switch ( last_entry . type ) {
case TouchType : : Touch :
case TouchType : : Touch :
if ( enable_press_and_tap ) {
if ( enable_press_and_tap ) {
SetTapEvent ( gesture , last_gesture , type , attributes ) ;
SetTapEvent ( gesture , last_gesture _props , type , attributes ) ;
return ;
return ;
}
}
type = TouchType : : Cancel ;
type = TouchType : : Cancel ;
@ -234,7 +235,7 @@ void Controller_Gesture::EndGesture(GestureProperties& gesture, GesturePropertie
force_update = true ;
force_update = true ;
break ;
break ;
case TouchType : : Pan :
case TouchType : : Pan :
EndPanEvent ( gesture , last_gesture , type , time_difference ) ;
EndPanEvent ( gesture , last_gesture _props , type , time_difference ) ;
break ;
break ;
default :
default :
break ;
break ;
@ -246,10 +247,11 @@ void Controller_Gesture::EndGesture(GestureProperties& gesture, GesturePropertie
}
}
}
}
void Controller_Gesture : : SetTapEvent ( GestureProperties & gesture , GestureProperties & last_gesture ,
void Controller_Gesture : : SetTapEvent ( GestureProperties & gesture ,
TouchType & type , Attribute & attributes ) {
GestureProperties & last_gesture_props , TouchType & type ,
Attribute & attributes ) {
type = TouchType : : Tap ;
type = TouchType : : Tap ;
gesture = last_gesture ;
gesture = last_gesture _props ;
force_update = true ;
force_update = true ;
f32 tap_time_difference =
f32 tap_time_difference =
static_cast < f32 > ( last_update_timestamp - last_tap_timestamp ) / ( 1000 * 1000 * 1000 ) ;
static_cast < f32 > ( last_update_timestamp - last_tap_timestamp ) / ( 1000 * 1000 * 1000 ) ;
@ -259,8 +261,9 @@ void Controller_Gesture::SetTapEvent(GestureProperties& gesture, GestureProperti
}
}
}
}
void Controller_Gesture : : UpdatePanEvent ( GestureProperties & gesture , GestureProperties & last_gesture ,
void Controller_Gesture : : UpdatePanEvent ( GestureProperties & gesture ,
TouchType & type , f32 time_difference ) {
GestureProperties & last_gesture_props , TouchType & type ,
f32 time_difference ) {
auto & cur_entry = shared_memory . gesture_states [ shared_memory . header . last_entry_index ] ;
auto & cur_entry = shared_memory . gesture_states [ shared_memory . header . last_entry_index ] ;
const auto & last_entry =
const auto & last_entry =
shared_memory . gesture_states [ ( shared_memory . header . last_entry_index + 16 ) % 17 ] ;
shared_memory . gesture_states [ ( shared_memory . header . last_entry_index + 16 ) % 17 ] ;
@ -272,13 +275,14 @@ void Controller_Gesture::UpdatePanEvent(GestureProperties& gesture, GesturePrope
last_pan_time_difference = time_difference ;
last_pan_time_difference = time_difference ;
// Promote to pinch type
// Promote to pinch type
if ( std : : abs ( gesture . average_distance - last_gesture . average_distance ) > pinch_threshold ) {
if ( std : : abs ( gesture . average_distance - last_gesture_props . average_distance ) >
pinch_threshold ) {
type = TouchType : : Pinch ;
type = TouchType : : Pinch ;
cur_entry . scale = gesture . average_distance / last_gesture . average_distance ;
cur_entry . scale = gesture . average_distance / last_gesture _props . average_distance ;
}
}
const f32 angle_between_two_lines = std : : atan ( ( gesture . angle - last_gesture . angle ) /
const f32 angle_between_two_lines = std : : atan ( ( gesture . angle - last_gesture _props . angle ) /
( 1 + ( gesture . angle * last_gesture . angle ) ) ) ;
( 1 + ( gesture . angle * last_gesture _props . angle ) ) ) ;
// Promote to rotate type
// Promote to rotate type
if ( std : : abs ( angle_between_two_lines ) > angle_threshold ) {
if ( std : : abs ( angle_between_two_lines ) > angle_threshold ) {
type = TouchType : : Rotate ;
type = TouchType : : Rotate ;
@ -287,8 +291,9 @@ void Controller_Gesture::UpdatePanEvent(GestureProperties& gesture, GesturePrope
}
}
}
}
void Controller_Gesture : : EndPanEvent ( GestureProperties & gesture , GestureProperties & last_gesture ,
void Controller_Gesture : : EndPanEvent ( GestureProperties & gesture ,
TouchType & type , f32 time_difference ) {
GestureProperties & last_gesture_props , TouchType & type ,
f32 time_difference ) {
auto & cur_entry = shared_memory . gesture_states [ shared_memory . header . last_entry_index ] ;
auto & cur_entry = shared_memory . gesture_states [ shared_memory . header . last_entry_index ] ;
const auto & last_entry =
const auto & last_entry =
shared_memory . gesture_states [ ( shared_memory . header . last_entry_index + 16 ) % 17 ] ;
shared_memory . gesture_states [ ( shared_memory . header . last_entry_index + 16 ) % 17 ] ;
@ -301,7 +306,7 @@ void Controller_Gesture::EndPanEvent(GestureProperties& gesture, GestureProperti
// Set swipe event with parameters
// Set swipe event with parameters
if ( curr_vel > swipe_threshold ) {
if ( curr_vel > swipe_threshold ) {
SetSwipeEvent ( gesture , last_gesture , type ) ;
SetSwipeEvent ( gesture , last_gesture _props , type ) ;
return ;
return ;
}
}
@ -312,13 +317,13 @@ void Controller_Gesture::EndPanEvent(GestureProperties& gesture, GestureProperti
force_update = true ;
force_update = true ;
}
}
void Controller_Gesture : : SetSwipeEvent ( GestureProperties & gesture , GestureProperties & last_gesture ,
void Controller_Gesture : : SetSwipeEvent ( GestureProperties & gesture ,
TouchType& type ) {
GestureProperties& last_gesture_props , TouchType& type ) {
auto & cur_entry = shared_memory . gesture_states [ shared_memory . header . last_entry_index ] ;
auto & cur_entry = shared_memory . gesture_states [ shared_memory . header . last_entry_index ] ;
const auto & last_entry =
const auto & last_entry =
shared_memory . gesture_states [ ( shared_memory . header . last_entry_index + 16 ) % 17 ] ;
shared_memory . gesture_states [ ( shared_memory . header . last_entry_index + 16 ) % 17 ] ;
type = TouchType : : Swipe ;
type = TouchType : : Swipe ;
gesture = last_gesture ;
gesture = last_gesture _props ;
force_update = true ;
force_update = true ;
cur_entry . delta_x = last_entry . delta_x ;
cur_entry . delta_x = last_entry . delta_x ;
cur_entry . delta_y = last_entry . delta_y ;
cur_entry . delta_y = last_entry . delta_y ;