Skip to content

Commit

Permalink
Reduce the complexity of for the different mouse types
Browse files Browse the repository at this point in the history
  • Loading branch information
gansm committed Nov 5, 2023
1 parent 5aca1ad commit 90c2ba7
Show file tree
Hide file tree
Showing 3 changed files with 195 additions and 65 deletions.
4 changes: 2 additions & 2 deletions final/fconfig.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#ifndef _FINAL_FCONFIG_H
#define _FINAL_FCONFIG_H 1

/* final/fconfig.h. Generated automatically at end of configure. */
/* config.h. Generated from config.h.in by configure. */
/* config.h.in. Generated from configure.ac by autoheader. */
Expand Down Expand Up @@ -338,6 +338,6 @@
#ifndef F_VERSION
#define F_VERSION "0.9.0"
#endif

/* once: _FINAL_FCONFIG_H */
#endif
242 changes: 180 additions & 62 deletions final/input/fmouse.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -707,10 +707,29 @@ void FMouseX11::setMoveState (const FPoint& mouse_position, int btn) noexcept
}

//----------------------------------------------------------------------
void FMouseX11::setButtonState (const int btn, const TimeValue& time) noexcept
bool FMouseX11::isMouseClickButton (const int btn) const noexcept
{
// Get the x11 mouse button state
return btn == button1_pressed
|| btn == button2_pressed
|| btn == button3_pressed
|| btn == button1_pressed_move
|| btn == button2_pressed_move
|| btn == button3_pressed_move;
}

//----------------------------------------------------------------------
bool FMouseX11::isMouseWheelButton (const int btn) const noexcept
{
return btn == button_up
|| btn == button_down
|| btn == button_left
|| btn == button_right;
}

//----------------------------------------------------------------------
void FMouseX11::handleMouseClickButton ( int btn
, const TimeValue& time) noexcept
{
switch ( btn )
{
case button1_pressed:
Expand All @@ -730,27 +749,31 @@ void FMouseX11::setButtonState (const int btn, const TimeValue& time) noexcept
getButtonState().right_button = State::Pressed;
break;

case all_buttons_released:
handleButtonRelease();
break;
default:
break;
}
}

//----------------------------------------------------------------------
void FMouseX11::handleMouseWheelButton (int btn) noexcept
{
resetMousePressedTime();

switch ( btn )
{
case button_up:
resetMousePressedTime();
getButtonState().wheel_up = true;
break;

case button_down:
resetMousePressedTime();
getButtonState().wheel_down = true;
break;

case button_left:
resetMousePressedTime();
getButtonState().wheel_left = true;
break;

case button_right:
resetMousePressedTime();
getButtonState().wheel_right = true;
break;

Expand All @@ -759,6 +782,25 @@ void FMouseX11::setButtonState (const int btn, const TimeValue& time) noexcept
}
}

//----------------------------------------------------------------------
void FMouseX11::setButtonState (const int btn, const TimeValue& time) noexcept
{
// Get the x11 mouse button state

if ( isMouseClickButton(btn) )
{
handleMouseClickButton (btn, time);
}
else if ( btn == all_buttons_released )
{
handleButtonRelease();
}
else if ( isMouseWheelButton(btn) )
{
handleMouseWheelButton(btn);
}
}

//----------------------------------------------------------------------
void FMouseX11::handleButton1Pressed (const TimeValue& time) noexcept
{
Expand Down Expand Up @@ -947,11 +989,29 @@ void FMouseSGR::setMoveState (const FPoint& mouse_position, int btn) noexcept
}

//----------------------------------------------------------------------
void FMouseSGR::setPressedButtonState ( const int btn
, const TimeValue& time ) noexcept
bool FMouseSGR::isMouseClickButton (const int btn) const noexcept
{
// Gets the extended x11 mouse mode (SGR) status for pressed buttons
return btn == button1
|| btn == button2
|| btn == button3
|| btn == button1_move
|| btn == button2_move
|| btn == button3_move;
}

//----------------------------------------------------------------------
bool FMouseSGR::isMouseWheelButton (const int btn) const noexcept
{
return btn == button_up
|| btn == button_down
|| btn == button_left
|| btn == button_right;
}

//----------------------------------------------------------------------
void FMouseSGR::handleMouseClickButton ( int btn
, const TimeValue& time) noexcept
{
switch ( btn )
{
case button1:
Expand All @@ -971,23 +1031,31 @@ void FMouseSGR::setPressedButtonState ( const int btn
getButtonState().right_button = State::Pressed;
break;

default:
break;
}
}

//----------------------------------------------------------------------
void FMouseSGR::handleMouseWheelButton (int btn) noexcept
{
resetMousePressedTime();

switch ( btn )
{
case button_up:
resetMousePressedTime();
getButtonState().wheel_up = true;
break;

case button_down:
resetMousePressedTime();
getButtonState().wheel_down = true;
break;

case button_left:
resetMousePressedTime();
getButtonState().wheel_left = true;
break;

case button_right:
resetMousePressedTime();
getButtonState().wheel_right = true;
break;

Expand All @@ -996,6 +1064,22 @@ void FMouseSGR::setPressedButtonState ( const int btn
}
}

//----------------------------------------------------------------------
void FMouseSGR::setPressedButtonState ( const int btn
, const TimeValue& time ) noexcept
{
// Gets the extended x11 mouse mode (SGR) status for pressed buttons

if ( isMouseClickButton(btn) )
{
handleMouseClickButton (btn, time);
}
else if ( isMouseWheelButton(btn) )
{
handleMouseWheelButton(btn);
}
}

//----------------------------------------------------------------------
void FMouseSGR::handleButton1Pressed (const TimeValue& time) noexcept
{
Expand Down Expand Up @@ -1202,93 +1286,127 @@ void FMouseUrxvt::setMoveState (const FPoint& mouse_position, int btn) noexcept
}

//----------------------------------------------------------------------
void FMouseUrxvt::setButtonState (const int btn, const TimeValue& time) noexcept
bool FMouseUrxvt::isMouseClickButton (const int btn) const noexcept
{
// Get the urxvt mouse button state
return btn == button1_pressed
|| btn == button2_pressed
|| btn == button3_pressed
|| btn == button1_pressed_move
|| btn == button2_pressed_move
|| btn == button3_pressed_move;
}

//----------------------------------------------------------------------
bool FMouseUrxvt::isMouseWheelButton (const int btn) const noexcept
{
return btn == button_up
|| btn == button_down
|| btn == button_left
|| btn == button_right;
}

//----------------------------------------------------------------------
void FMouseUrxvt::handleMouseClickButton ( int btn
, const TimeValue& time) noexcept
{
const auto& mouse_position = getPos();

switch ( btn )
if ( btn == button1_pressed || btn == button1_pressed_move )
{
if ( mouse_position == getNewPos()
&& urxvt_button_state == all_buttons_released
&& ! isDblclickTimeout(getMousePressedTime()) )
{
resetMousePressedTime();
getButtonState().left_button = State::DoubleClick;
}
else
{
setMousePressedTime(time); // save click time
getButtonState().left_button = State::Pressed;
}
}
else if ( btn == button2_pressed || btn == button2_pressed_move )
{
resetMousePressedTime();
getButtonState().middle_button = State::Pressed;
}
else if ( btn == button3_pressed || btn == button3_pressed_move )
{
resetMousePressedTime();
getButtonState().right_button = State::Pressed;
}
}

//----------------------------------------------------------------------
void FMouseUrxvt::handleButtonRelease() noexcept
{
switch ( urxvt_button_state & button_mask )
{
case button1_pressed:
case button1_pressed_move:
if ( mouse_position == getNewPos()
&& urxvt_button_state == all_buttons_released
&& ! isDblclickTimeout(getMousePressedTime()) )
{
resetMousePressedTime();
getButtonState().left_button = State::DoubleClick;
}
else
{
setMousePressedTime (time); // save click time
getButtonState().left_button = State::Pressed;
}
getButtonState().left_button = State::Released;
break;

case button2_pressed:
case button2_pressed_move:
resetMousePressedTime();
getButtonState().middle_button = State::Pressed;
getButtonState().middle_button = State::Released;
break;

case button3_pressed:
case button3_pressed_move:
resetMousePressedTime();
getButtonState().right_button = State::Pressed;
getButtonState().right_button = State::Released;
break;

case all_buttons_released:
handleButtonRelease();
default:
break;
}
}

//----------------------------------------------------------------------
void FMouseUrxvt::handleMouseWheelButton (int btn) noexcept
{
resetMousePressedTime();

switch ( btn )
{
case button_up:
resetMousePressedTime();
getButtonState().wheel_up = true;
break;

case button_down:
resetMousePressedTime();
getButtonState().wheel_down = true;
break;

case button_left:
resetMousePressedTime();
getButtonState().wheel_left = true;
break;

case button_right:
resetMousePressedTime();
getButtonState().wheel_right = true;
break;

default:
break;
default:
break;
}
}

//----------------------------------------------------------------------
void FMouseUrxvt::handleButtonRelease() noexcept
void FMouseUrxvt::setButtonState (const int btn, const TimeValue& time) noexcept
{
switch ( urxvt_button_state & button_mask )
{
case button1_pressed:
case button1_pressed_move:
getButtonState().left_button = State::Released;
break;

case button2_pressed:
case button2_pressed_move:
getButtonState().middle_button = State::Released;
break;

case button3_pressed:
case button3_pressed_move:
getButtonState().right_button = State::Released;
break;
// Get the urxvt mouse button state

default:
break;
if ( isMouseClickButton(btn) )
{
handleMouseClickButton (btn, time);
}
else if ( btn == all_buttons_released )
{
handleButtonRelease();
}
else if ( isMouseWheelButton(btn) )
{
handleMouseWheelButton(btn);
}
}

Expand Down
Loading

0 comments on commit 90c2ba7

Please sign in to comment.