コード例 #1
0
void Menu::itemReleased(TriggeredSource source) {
	if (_pressed >= 0 && _pressed < _actions.size()) {
		auto pressed = _pressed;
		setPressed(-1);
		if (source == TriggeredSource::Mouse && _actionsData[pressed].ripple) {
			_actionsData[pressed].ripple->lastStop();
		}
		if (pressed == _selected && _triggeredCallback) {
			_triggeredCallback(_actions[_selected], itemTop(_selected), source);
		}
	}
}
コード例 #2
0
ファイル: button.cpp プロジェクト: benjaminum/age
void __AGE Button::update(float dt)
{
  Entity::update(dt);

  Input& input = Input::instance();


  if( transformationDirty )
  {
    // make sure the text passes the z test
    textEntity->setZ(z()+1e-3);
    computeClickBoundingBox();
  }

  // update state
  switch( state )
  {
  case 0:
  case 1:
    {
      for( int id = 0; id < MOUSE_POINTERS; ++id )
      {
        Eigen::Vector2f pos;
        input.mouseXY(pos.x(), pos.y(),id);
        bool inside_bb = isInside(pos, clickBoundingBoxMin, clickBoundingBoxMax);
        if( inside_bb )
        {
          if( input.mouseJustPressed(0,0,id) )
          {
            state = 2;
            mouse_id = id;
          }
          else
          {
#ifdef __ANDROID__
            state = 0; // no hover on touch devices
#else
            state = 1; // hover
#endif
          }
          break;
        }
        else
          state = 0;
      }

    }
    break;
  case 2:
    {
      Eigen::Vector2f pos;
      input.mouseXY(pos.x(), pos.y(),mouse_id);
      if( input.mouseJustReleased(0,0,mouse_id) )
      {
        bool inside_bb = isInside(pos, clickBoundingBoxMin, clickBoundingBoxMax);
        if( inside_bb )
        {
          _triggeredCallback(dt);
        }
        state = 0;
      }
    }
    break;
  }

}