Exemple #1
0
    void Gui::handleMouseInput()
    {
        while (!mInput->isMouseQueueEmpty())
         {
             MouseInput mouseInput = mInput->dequeueMouseInput();

             // Save the current mouse state. It will be needed if modal focus
             // changes or modal mouse input focus changes.
             mLastMouseX = mouseInput.getX();
             mLastMouseY = mouseInput.getY();

             switch (mouseInput.getType())
             {
               case MouseInput::PRESSED:
                   handleMousePressed(mouseInput);
                   break;
               case MouseInput::RELEASED:
                   handleMouseReleased(mouseInput);
                   break;
               case MouseInput::MOVED:
                   handleMouseMoved(mouseInput);
                   break;
               case MouseInput::WHEEL_MOVED_DOWN:
                   handleMouseWheelMovedDown(mouseInput);
                   break;
               case MouseInput::WHEEL_MOVED_UP:
                   handleMouseWheelMovedUp(mouseInput);
                   break;
               default:
                   throw GCN_EXCEPTION("Unknown mouse input type.");
                   break;
             }
         }
    }
Exemple #2
0
    void Widget::_mouseInputMessage(const MouseInput& mouseInput)
    {
        if (mFocusHandler == NULL)
        {
            //throw GCN_EXCEPTION("No focushandler set (did you add the widget to the gui?).");
            assert(!"No focushandler set (did you add the widget to the gui?).");
        }

        if (!mEnabled || (mFocusHandler->getModalFocused() != NULL &&
                          !hasModalFocus()))
        {
            return;
        }

        int x = mouseInput.x;
        int y = mouseInput.y;
        int b = mouseInput.getButton();
        int ts = mouseInput.getTimeStamp();

        MouseListenerIterator iter;

        switch(mouseInput.getType())
        {
          case MouseInput::MOTION:
              for (iter = mMouseListeners.begin(); iter != mMouseListeners.end(); ++iter)
              {
                  (*iter)->mouseMotion(x, y);
              }
              break;

          case MouseInput::PRESS:
              if (hasMouse())
              {
                  requestFocus();
                  mFocusHandler->requestDrag(this);
              }

              if (b != MouseInput::WHEEL_UP && b != MouseInput::WHEEL_DOWN)
              {

                  for (iter = mMouseListeners.begin(); iter != mMouseListeners.end(); ++iter)
                  {
                      (*iter)->mousePress(x, y, b);
                  }

                  if (hasMouse())
                  {
                      if (ts - mClickTimeStamp < 300 && mClickButton == b)
                      {
                          mClickCount++;
                      }
                      else
                      {
                          mClickCount = 0;
                      }
                      mClickButton = b;
                      mClickTimeStamp = ts;
                  }
                  else
                  {
                      mClickButton = 0;
                  }
              }
              else if (b == MouseInput::WHEEL_UP)
              {
                  for (iter = mMouseListeners.begin(); iter != mMouseListeners.end(); ++iter)
                  {
                      (*iter)->mouseWheelUp(x, y);
                  }
              }
              else
              {
                  for (iter = mMouseListeners.begin(); iter != mMouseListeners.end(); ++iter)
                  {
                      (*iter)->mouseWheelDown(x, y);
                  }
              }
              setDirty(true);
              break;

          case MouseInput::RELEASE:
              if (isDragged())
              {
                  mFocusHandler->dragNone();
              }

              if (b != MouseInput::WHEEL_UP && b != MouseInput::WHEEL_DOWN)
              {
                  for (iter = mMouseListeners.begin(); iter != mMouseListeners.end(); ++iter)
                  {
                      (*iter)->mouseRelease(x, y, b);
                  }
              }

              if (mHasMouse)
              {
                  if (b == mClickButton)
                  {
                      for (iter = mMouseListeners.begin(); iter != mMouseListeners.end(); ++iter)
                      {
                          (*iter)->mouseClick(x, y, b, mClickCount + 1);
                      }
                  }
                  else
                  {
                      mClickButton = 0;
                      mClickCount = 0;
                  }
              }
              else
              {
                  mClickCount = 0;
                  mClickTimeStamp = 0;
              }
              setDirty(true);
              break;
        }
    }