예제 #1
0
파일: Dragger.cpp 프로젝트: npapier/vgsdk
void Dragger::logDebug( vgd::Shp< vgd::event::Event > event )
{
	using vgd::event::KeyboardButtonEvent;
	using vgd::event::MouseButtonEvent;
	using vgd::event::Location2Event;
	using vgd::event::MouseWheelEvent;

	vgd::event::KeyboardButtonEvent	*keyboardButtonEvent= dynamic_cast<KeyboardButtonEvent*>(event.get());
	MouseButtonEvent				*mouseButtonEvent	= dynamic_cast<MouseButtonEvent*>(event.get());
	Location2Event					*location2Event		= dynamic_cast<Location2Event*>(event.get());
	MouseWheelEvent					*mouseWheelEvent	= dynamic_cast<MouseWheelEvent*>(event.get());

	if( keyboardButtonEvent != 0 )
	{
		vgLogDebug(
			"KeyboardButtonEvent (%d,%d)",
			keyboardButtonEvent->getButtonID(),
			keyboardButtonEvent->getState()
		);
	}
	else if( mouseButtonEvent != 0 )
	{
		vgLogDebug(
			"MouseButtonEvent (%d,%d)",
			mouseButtonEvent->getButtonID(),
			mouseButtonEvent->getState()
		);
	}
	else if( location2Event != 0 )
	{
		vgLogDebug(
			"Location2Event ( previousLocation(%f,%f), location(%f,%f), size(%f,%f)",
			location2Event->getPreviousLocation()[0],
			location2Event->getPreviousLocation()[1],
			location2Event->getLocation()[0],
			location2Event->getLocation()[1],
			location2Event->getSize()[0],
			location2Event->getSize()[1]
		);
	}
	else if( mouseWheelEvent != 0 )
	{
		vgLogDebug(
			"MouseWheelEvent (%d,%d)",
			mouseWheelEvent->getAxis(),
			mouseWheelEvent->getDelta()
		);
	}
	else
	{
		vgLogDebug("Unknown event");
	}
}
const void AnimationTester::mouseWheelListener(MouseWheelEvent& event){
	if (event.isCancelled()){
		return;
	}
	if (d != NULL){
		if (event.delta() > 0){
			d->scale *= 1.2f;
		}
		else{
			d->scale *= (5.0f / 6.0f);
		}
		if (d->scale < 1.0f){
			d->scale = 1.0f;
		}
		logger::info("Scale: " + to_string(d->scale));
	}
}
 bool NativeScrollBarWin::OnMouseWheel(const MouseWheelEvent& e)
 {
     if(!sb_container_.get())
     {
         return false;
     }
     sb_container_->ScrollWithOffset(e.offset());
     return true;
 }
// Dispatch a mouse wheel event to any registered handlers
void EventDispatcher::handleMouseWheel(MouseWheelEvent& evt)
{
    HANDLE dev = evt.getDeviceHandle();

    {
        // Set the device name if it's available
        ScopedCriticalSection mMutex(&mdLock);
        if(mouseDevices.count(dev) > 0)
        {
            evt.setDeviceInfo(mouseDevices[dev]);
        }
        else
        {
            // It's an unknown device, let's see what we can find out about it.
            ScopedNonCriticalSection unlock(&mdLock);
            MouseInfo *mi = unknownMouseDevice(dev);
            if(mi)
            {
                evt.setDeviceInfo(mi);
            }
        }
    }

    {
        // Run the chain, let someone make a decision about this event
        ScopedCriticalSection mecMutex(&mecLock);
        if(mouseEventChains.count(dev) > 0 && mouseEventChains[dev]->chainSize() > 0)
        {
            // You like me! You really, really like me!
            mouseEventChains[dev]->runMouseWheelEventChain(evt);
        }
        else
        {
            // Zero is the REAL lonliest number. It's the lonliest number
            // since the number one.
        }
    }
}
void SimpleMouseListener::onMouseWheel(const MouseWheelEvent& event)
    {
    cout<<"[MouseWheel]    :  direction="<<event.getDirection()<< " : ";
    printXY(event);
    }
예제 #6
0
const void Editor::mouseWheelListener(MouseWheelEvent event){
	cout << event.delta() << endl;
}
예제 #7
0
std::string mitk::EventFactory::EventToXML(mitk::InteractionEvent *event)
{

  InternalEvent* ie = dynamic_cast<InternalEvent*> (event);
  if (ie != NULL)
    return "";

  std::string eventClass = event->GetNameOfClass();
  std::string eventXML = "<" + InteractionEventConst::xmlTagEventVariant() +  " " + InteractionEventConst::xmlParameterEventClass() + "=\"";

  std::transform(eventClass.cbegin(), eventClass.cend(), eventClass.begin(), ::toupper);

  eventXML += eventClass + "\" >\n";
  // here follow event specific attributes
  if (eventClass == "MOUSEPRESSEVENT" || eventClass == "MOUSERELEASEEVENT" || eventClass == "MOUSEDOUBLECLICKEVENT" || eventClass == "MOUSEMOVEEVENT" || eventClass == "MOUSEWHEELEVENT")
  {
    if (!(eventClass == "MOUSEMOVEEVENT") && !(eventClass == "MOUSEWHEELEVENT"))
    {
      // EventButton
      eventXML += " <" + InteractionEventConst::xmlTagAttribute() +" " + InteractionEventConst::xmlParameterName() + "=\"" + InteractionEventConst::xmlEventPropertyEventButton() + "\" ";
      eventXML += InteractionEventConst::xmlParameterValue() + "=\"";
      eventXML += GetEventButton(event);
      eventXML += "\"/>\n";
    }
    // ButtonState
    if (GetButtonState(event) != "")
    {
      eventXML += " <" + InteractionEventConst::xmlTagAttribute() +" " + InteractionEventConst::xmlParameterName() + "=\"" + InteractionEventConst::xmlEventPropertyButtonState() + "\" ";
      eventXML += InteractionEventConst::xmlParameterValue() + "=\"";
      eventXML += GetButtonState(event);
      eventXML += "\"/>\n";
    }

    // Modifiers
    if (GetModifierState(event) != "")
    {
      eventXML += " <" + InteractionEventConst::xmlTagAttribute() +" " + InteractionEventConst::xmlParameterName() + "=\"" + InteractionEventConst::xmlEventPropertyModifier() + "\" ";
      eventXML += InteractionEventConst::xmlParameterValue() + "=\"";
      eventXML += GetModifierState(event);
      eventXML += "\"/>\n";
    }

    // Position on Screen
    eventXML += " <" + InteractionEventConst::xmlTagAttribute() +" " + InteractionEventConst::xmlParameterName() + "=\"" + InteractionEventConst::xmlEventPropertyPositionOnScreen() + "\" ";
    eventXML += InteractionEventConst::xmlParameterValue() + "=\"";
    eventXML += GetPositionOnScreen(event);
    eventXML += "\"/>\n";

    // Position in World
    eventXML += " <" + InteractionEventConst::xmlTagAttribute() +" " + InteractionEventConst::xmlParameterName() + "=\"" + InteractionEventConst::xmlEventPropertyPositionInWorld() + "\" ";
    eventXML += InteractionEventConst::xmlParameterValue() + "=\"";
    eventXML += GetPositionInWorld(event);
    eventXML += "\"/>\n";
  }
  else if (eventClass == "INTERACTIONKEYEVENT")
  {
    mitk::InteractionKeyEvent* ke = dynamic_cast<mitk::InteractionKeyEvent*>(event);

    // key
    eventXML += " <" + InteractionEventConst::xmlTagAttribute() +" " + InteractionEventConst::xmlParameterName() + "=\"" + InteractionEventConst::xmlEventPropertyKey() + "\" ";
    eventXML += InteractionEventConst::xmlParameterValue() + "=\"";
    eventXML += ke->GetKey();
    eventXML += "\"/>\n";
  }
  else
  {
    MITK_WARN << "Event not recognized, discarding event of type " << event->GetNameOfClass();
  }
  if (eventClass == "MOUSEWHEELEVENT")
  {
    MouseWheelEvent* we = dynamic_cast<MouseWheelEvent*> (event);
    int delta = we->GetWheelDelta();

    std::stringstream ss;
    ss << delta;

    eventXML += " <" + InteractionEventConst::xmlTagAttribute() +" " + InteractionEventConst::xmlParameterName() + "=\"" + InteractionEventConst::xmlEventPropertyWheelDelta() + "\" ";
    eventXML += InteractionEventConst::xmlParameterValue() + "=\"";
    eventXML += ss.str();
    eventXML += "\"/>\n";

    eventXML += " <" + InteractionEventConst::xmlTagAttribute() +" " + InteractionEventConst::xmlParameterName() + "=\"" + InteractionEventConst::xmlEventPropertyScrollDirection() + "\" ";
    eventXML += InteractionEventConst::xmlParameterValue() + "=\"";
    eventXML += delta < 0 ? "DOWN" : "UP";
    eventXML += "\"/>\n";
  }

  // Renderer name
  eventXML += " <" + InteractionEventConst::xmlTagAttribute() +" " + InteractionEventConst::xmlParameterName() + "=\"" + InteractionEventConst::xmlEventPropertyRendererName() + "\" ";
  eventXML += InteractionEventConst::xmlParameterValue() + "=\"";
  eventXML += event->GetSender()->GetName();
  eventXML += "\"/>\n";

  // closing tag:
  eventXML += "</" + InteractionEventConst::xmlTagEventVariant() +  ">";
  return eventXML;
}
예제 #8
0
void Widget::processEvent(Event* event, PassKey<Widget, WindowSystemPrivate>)
{
	switch(event->type()) {
	case Event::kFocusIn: {
		if(isAcceptsFocus_) {
			Widget* widget = first_;
			Widget* next = widget;

			while(next) {
				widget = next;

				if(widget->isAcceptsFocus_ && widget->first_ && widget->isVisible()
				   && widget->isEnabled()) {
					next = widget->first_;
				}
				else {
					next = next->next_;
				}
			}

			if(focus_)
				focus_->hasFocus_ = false;

			focus_ = widget;

			if(focus_) {
				focus_->hasFocus_ = true;
				focus_->dispatchEvent(event);
			}
		}

		return; }

	case Event::kFocusOut:
		if(focus_) {
			focus_->hasFocus_ = false;
			focus_->dispatchEvent(event);
		}

		return;

	case Event::kMouseEnter: {
		if(!hasGrab_) {
			MouseEvent* e = static_cast<MouseEvent*>(event);
			dispatchEvent(e);

			updateHoverPoint(e->pos());
		}

		return; }

	case Event::kMouseLeave: {
		if(!hasGrab_)
			sendMouseLeave();

		return; }

	case Event::kMouseMove: {
		MouseEvent* e = static_cast<MouseEvent*>(event);
		Widget* widget;
		Point<int> pos;

		if(hasGrab_) {
			std::tie(widget, pos) = hoveredWidget();

			e->setPos(e->windowPos() - pos, {});
			widget->processMouseEvent(e);
		}
		else {
			std::tie(widget, pos) = updateHoverPoint(e->pos());

			e->setPos(pos, {});
			widget->dispatchEvent(e);
		}

		return; }

	case Event::kMousePress: {
		MouseEvent* e = static_cast<MouseEvent*>(event);
		hasGrab_ = true;

		Widget* widget;
		Point<int> pos;
		std::tie(widget, pos) = hoveredWidget();

		widget->updateFocus(this);

		e->setPos(e->windowPos() - pos, {});
		widget->processMouseEvent(e);
		return; }

	case Event::kMouseRelease: {
		MouseEvent* e = static_cast<MouseEvent*>(event);

		Widget* widget;
		Point<int> pos;
		std::tie(widget, pos) = hoveredWidget();

		Point<int> eventPos = e->pos();
		e->setPos(e->windowPos() - pos, {});
		widget->processMouseEvent(e);

		if(e->buttons() == MouseButton::kNone) {
			hasGrab_ = false;
			updateHoverPoint(eventPos);
		}

		Duration duration = widget->timeCounter_.restart();
		if(duration <= 300_ms && e->button() != MouseButton::kNone
		   && e->button() == widget->lastButton_) {
			MouseEvent ev(Event::kMouseDoubleClick);
			ev.setTimestamp(e->timestamp(), {});
			ev.setModifiers(e->modifiers(), {});
			ev.setPos(e->pos(), {});
			ev.setWindowPos(e->windowPos(), {});
			ev.setGlobalPos(e->globalPos(), {});
			ev.setButton(e->button(), {});
			ev.setButtons(e->buttons(), {});
			widget->processEvent(&ev, {});

			widget->lastButton_ = MouseButton::kNone;
		}
		else {
			widget->lastButton_ = e->button();
		}

		return; }

	case Event::kMouseWheel: {
		MouseWheelEvent* e = static_cast<MouseWheelEvent*>(event);

		Widget* widget;
		Point<int> pos;
		std::tie(widget, pos) = hoveredWidget();

		e->setPos(e->windowPos() - pos, {});
		widget->processMouseEvent(e);
		return; }

	case Event::kKeyPress: {
		Widget* widget = focus_;
		while(focus_) {
			if(focus_->dispatchEvent(event)) {
				if(event->isAccepted())
					return;
			}

			widget = widget->parent_;
		}

		return; }

	case Event::kKeyRelease: {
		Widget* widget = focus_;
		while(focus_) {
			if(focus_->dispatchEvent(event)) {
				if(event->isAccepted())
					return;
			}

			widget = widget->parent_;
		}

		return; }

	case Event::kShow: {
		show();
		break; }

	case Event::kHide: {
		hide();
		break; }

	case Event::kEnable: {
		enable();
		break; }

	case Event::kDisable: {
		disable();
		break; }

	case Event::kClose : {
		if(dispatchEvent(event) && event->isAccepted()) {
			hide();
		}

		return; }

	case Event::kPaint: {
		repaint(static_cast<PaintEvent*>(event));

		// repaint() calls the dispatchEvent() by itself so we don't need to call it one
		// more time
		return; }

	case Event::kMove: {
		MoveEvent* e = static_cast<MoveEvent*>(event);
		pos_ = e->pos();
		break; }

	case Event::kResize: {
		ResizeEvent* e = static_cast<ResizeEvent*>(event);
		size_ = e->size();
		break; }

	default:
		break;
	}

	dispatchEvent(event);

	if(event->type() == Event::kResize && layout_) {
		layout_->setGeometry(rect());
	}
}