示例#1
0
const GuiEvent MenuButton::handleInput(const sf::Event& event)
{
	if(!this->visible)
	{
		return GuiEvent::noEvent;
	}

	for(Component* lpComponent: this->lp_children)
	{
		GuiEvent guiEvent = lpComponent->handleInput(event);
		if(guiEvent.type != GuiEvent::None)
		{
			return guiEvent;
		}
	}

	if(event.type == sf::Event::MouseButtonPressed)
	{
		sf::Vector2f mousePos(event.mouseButton.x, event.mouseButton.y);
		if(Utils::length(mousePos - this->getAbsPosition()) <= this->radius)
		{
			//sf::Sound sound;
			//sound.setBuffer(assetsInstance.sounds.select);
			//sound.play();
			assetsInstance.sounds.select.play();
			GuiEvent guiEvent;
			guiEvent.type = GuiEvent::ButtonEvent;
			guiEvent.click.id = this->mId;
			guiEvent.click.mouseButton = event.mouseButton.button;
			return guiEvent;
		}
		else
		{
			return GuiEvent::noEvent;
		}
	}
	else if(event.type == sf::Event::MouseMoved)
	{
		sf::Vector2f mousePos(event.mouseMove.x, event.mouseMove.y);
		if(Utils::length(mousePos - this->getAbsPosition()) <= this->radius)
		{
			if(this->state != OVER) assetsInstance.sounds.over.play();
			this->state = OVER;
		}
		else
		{
			this->state = NORMAL;
		}
		return GuiEvent::noEvent;
	}
	return GuiEvent::noEvent;
}
PlayerState* PlayerAttackState::handleEvent(const sf::Event& event,
	const sf::RenderWindow& renderWindow)
{
	MeleeRectComponent* meleeRectComp = mPlayer->comp<MeleeRectComponent>();

	if (meleeRectComp->meleeRectIsDelaying() || 
		mIsAttackCommandQueue)
		return nullptr;

	/*if (event.key.code == sf::Keyboard::Up)
		mIsAttackCommandQueue = true;*/
	
	SpiritCoreComponent* spiritCoreComp = mPlayer->nonCreateComp<SpiritCoreComponent>();

	if (event.type == sf::Event::MouseButtonPressed &&
		event.mouseButton.button == sf::Mouse::Left 
		&& (!spiritCoreComp || (!spiritCoreComp->isRestoring() &&
		!spiritCoreComp->noSpiritCoreLeft())))
	{
		mIsAttackCommandQueue = true;
		sf::Vector2f mousePos(renderWindow.mapPixelToCoords(sf::Mouse::getPosition(renderWindow)));
		sf::Vector2f entityWorldPos = mPlayer->comp<TransformableComponent>()->getWorldPosition(true);

		mLatestAttackDir = Utility::unitVector(mousePos - entityWorldPos);
		return nullptr;
	}

	if (event.type == sf::Event::MouseButtonPressed &&
		event.mouseButton.button == sf::Mouse::Right &&
		(!spiritCoreComp || (!spiritCoreComp->isRestoring() &&
		!spiritCoreComp->noSpiritCoreLeft())))
	{
		sf::Vector2f mousePos(renderWindow.mapPixelToCoords(sf::Mouse::getPosition(renderWindow)));
		sf::Vector2f entityWorldPos = mPlayer->comp<TransformableComponent>()->getWorldPosition(true);
		
		return new PlayerFireBallState(mPlayer, mPlayerStateTable);
		//return new PlayerAimRangeState(mPlayer, mPlayerStateTable);
	}

	/*if (event.type == sf::Event::MouseButtonPressed &&
		event.mouseButton.button == sf::Mouse::Right)
	{
		sf::Vector2f mousePos(renderWindow.mapPixelToCoords(sf::Mouse::getPosition(renderWindow)));
		sf::Vector2f entityWorldPos = mPlayer->comp<TransformableComponent>()->getWorldPosition(true);

		return new PlayerSpiritState(mPlayer, Utility::unitVector(mousePos - entityWorldPos), mPlayerStateTable);
	}*/


	return nullptr;
}
示例#3
0
文件: Client.cpp 项目: southor/planet
	Angle Client::calcPlayerObjAngle(Vec2<int> mouseScreenPos)
	{
		if (worldModel.getPlayerObjs().exists(playerId))
		{
			PlayerObj *playerObj = (worldModel.getPlayerObjs())[playerId];

			float angle;
			Pos mousePos(viewportHandler.screenToGame(worldRenderer.getRenderArea(playerObj), mouseScreenPos));
			Vec aimVec = mousePos - playerObj->pos;
			aimVec.normalize();
			if ((aimVec.x > 0.5) || (aimVec.x < 0.5f))
			{
				angle = asin(aimVec.y);
				if (aimVec.x < 0.0f) angle = PI_F - angle;
			}
			else
			{
				angle = acos(aimVec.x);
				if (aimVec.y < 0.0f) angle = -angle;
			}

			return angle;
		}
		
		return 0.0f;
	}
void JavascriptInvocation::leftClick(int x, int y) {
  QPoint mousePos(x, y);

  JavascriptInvocation::mouseEvent(QEvent::MouseMove, mousePos, Qt::NoButton);
  JavascriptInvocation::mouseEvent(QEvent::MouseButtonPress, mousePos, Qt::LeftButton);
  JavascriptInvocation::mouseEvent(QEvent::MouseButtonRelease, mousePos, Qt::LeftButton);
}
示例#5
0
void Player::draw(sf::RenderWindow &render) const
{
    View view(sf::FloatRect(0, 0, m_drawDim.x*(m_zooms[m_controller.getZoom()]), m_drawDim.y*m_zooms[m_controller.getZoom()]));
    view.setCenter(m_controller.getViewCenter());
    view.setViewport(sf::FloatRect(m_drawPos.x/m_resolution.x, m_drawPos.y/m_resolution.y, m_drawDim.x/m_resolution.x, m_drawDim.y/m_resolution.y));
    render.setView(view);
    std::vector<Entity*> toDraw = m_world.getEntitiesInRect(screenToWorld(Vec(0, 0)), screenToWorld(m_drawDim));
    //m_world.draw(render);
    for(int i=0; i<toDraw.size(); i++)
    {
        toDraw[i]->draw(render);
    }
    for(int i=0; i<m_selection.size(); i++)
    {
        m_selection[i]->drawSelected(render);
    }
    draw::drawRect(render, Vec(0, 0), Vec(m_world.getDim()), sf::Color::White);

    for(int i=0; i<toDraw.size(); i++)
    {
        toDraw[i]->drawForeground(render, screenToWorld(mousePos()));
    }
    view.reset(sf::FloatRect(0, 0, m_drawDim.x, m_drawDim.y));
    render.setView(view);
    if(m_selecting)
    {
        draw::drawRect(render, worldToScreen(m_A), worldToScreen(m_B)-worldToScreen(m_A), sf::Color(50, 100, 255, 100), 3);
        draw::drawRect(render, worldToScreen(m_A), worldToScreen(m_B)-worldToScreen(m_A), sf::Color(50, 100, 255, 100));
    }
    m_gui->drawChildren(render, Vec(0, 0), m_drawDim);


    Displayer::instance.draw(render);
    draw::drawRect(render, Vec(1, 1), m_drawDim-Vec(1, 1)*2, sf::Color::White);
}
示例#6
0
文件: main.c 项目: Aiur/Airtab
void mouseup(char btn) {
    CGEventType eventType;
    CGMouseButton button;
    switch (btn) {
        case 'l':
            eventType = kCGEventLeftMouseDown;
            button = kCGMouseButtonLeft;
            break;
        case 'r':
            eventType = kCGEventRightMouseDown;
            button = kCGMouseButtonRight;
            break;
        case 'm':
            eventType = kCGEventOtherMouseDown;
            button = kCGMouseButtonCenter;
            break;
        default:
            eventType = kCGEventNull;
            break;
    }
    
    if (eventType != kCGEventNull) {
        CGEventRef event = CGEventCreateMouseEvent(NULL, eventType, mousePos(), button);
        CGEventPost(kCGHIDEventTap, event);
        CFRelease(event);
    }
}
示例#7
0
/**
**  Called if the mouse is moved
**
**  @param callbacks  Callback structure for events.
**  @param ticks      Denotes time-stamp of video-system
**  @param x          X movement
**  @param y          Y movement
*/
void InputMouseMove(const EventCallback &callbacks,
					unsigned ticks, int x, int y)
{
	PixelPos mousePos(x, y);
	// Don't reset the mouse state unless we really moved
#ifdef USE_TOUCHSCREEN
	const int buff = 32;
	const PixelDiff diff = LastMousePos - mousePos;

	if (abs(diff.x) > buff || abs(diff.y) > buff) {
		MouseState = InitialMouseState;
		LastMouseTicks = ticks;
		// Reset rectangle select cursor state if we moved by a lot
		// - rectangle select should be a drag, not a tap
		if (CursorState == CursorStateRectangle
			&& (abs(diff.x) > 2 * buff || abs(diff.y) > 2 * buff)) {
			CursorState = CursorStatePoint;
		}
	}
	LastMousePos = mousePos;
#else
	if (LastMousePos != mousePos) {
		MouseState = InitialMouseState;
		LastMouseTicks = ticks;
		LastMousePos = mousePos;
	}
#endif
	callbacks.MouseMoved(mousePos);
}
示例#8
0
void Player::sendOrder()
{
    if(m_selection.size() > 0)
    {
        if(m_selection[0]->getType() == BALL)
        {
            if(m_controller.pressed(ORDER))
            {
                std::vector<Ball*> balls;
                for(int i=0; i<m_selection.size(); i++)
                {
                    Ball* ball = (Ball*)m_selection[i];
                    balls.push_back(ball);
                    m_world.stopMovement(ball);
                }
                MovementHandler *handler = new MovementHandler(balls, m_controller);
                m_world.addMovement(handler);
            }
            else if(m_controller.down(ORDER))
            {
                m_world.updateTarget((Ball*)m_selection[0], screenToWorld(mousePos()));
            }
        }
        else if(m_selection[0]->getType() == BUILDING)
        {
            Building* building = (Building*)m_selection[0];
            building->receiveOrder(m_controller);
        }
    }
}
示例#9
0
void PlayState::processEvents(sf::Event event)
{
	switch (event.type)
	{
	case sf::Event::KeyPressed:
		handlePlayerInput(event.key.code, true);
		break;

	case sf::Event::KeyReleased:
		handlePlayerInput(event.key.code, false);
		break;
	}

	sf::Vector2i mousePos(event.mouseButton.x, event.mouseButton.y);
	if (exitButton.getGlobalBounds().contains((float)mousePos.x, (float)mousePos.y))
	{
		GameStateManager::Instance()->clean();
	}
	else if (menuButton.getGlobalBounds().contains((float)mousePos.x, (float)mousePos.y))
	{
		GameStateManager::Instance()->changeGameState(new MainMenuState);
	}

	/*if ((mousePos.x > menuButton.getPosition().x - menuButton.getLocalBounds().width / 2) &&
		(mousePos.x < menuButton.getPosition().x + menuButton.getLocalBounds().width / 2) &&
		(mousePos.y > menuButton.getPosition().y - menuButton.getLocalBounds().height / 2) &&
		(mousePos.y < menuButton.getPosition().y + menuButton.getLocalBounds().height / 2))
		{
		}*/
}
示例#10
0
void FlowField::addCircularForce(float x, float y, float radius, float strength) {
    
    float pctX = x / fieldWidth;
    float pctY = y / fieldWidth;
    
    int cols = fieldWidth / resolution;
    int rows = fieldHeight / resolution;
    
    int xVal = pctX * cols;
    int yVal = pctY * rows;
    
    ofVec2f mousePos(x, y);
    
    for( int y=0; y<flowList.size(); y++){
        for( int x=0; x<flowList[y].size(); x++){
            ofVec2f np( x*resolution, y*resolution );
            
            if( np.distance(mousePos) < radius ){
                float pct = 1 - (np.distance(mousePos) / radius);
                
                // add strength towards the mouse
                ofVec2f dir = (np - mousePos);
                flowList[y][x].x -= dir.normalized().y * strength;
                flowList[y][x].y += dir.normalized().x * strength;
            }
        }
    }
}
示例#11
0
Ray Camera::ScreenPointToRay(vec3 _position) {
    float nxPos = _position.x / Window::width;
    float nyPos = _position.y / Window::height;

    float sxPos = nxPos - 0.5f;
    float syPos = nyPos - 0.5f;

    float fxPos = sxPos;
    float fyPos = syPos;

    if (!orthographic) {
        fxPos *= 2;
        fyPos *= -2;
    } else {
        fxPos *= orthographicSize / 2;
        fyPos *= -orthographicSize / 2;
    }

    mat4 invViewProj = glm::inverse(projectionMatrix * viewMatrix);
    vec4 mousePos(fxPos, fyPos, -1, 1);
    vec4 worldScreenPoint = invViewProj * mousePos;
    worldScreenPoint /= worldScreenPoint.w;

    vec3 rayOrigin;
    vec3 dir;

    rayOrigin = transform->worldMatrix[3].xyz();
    if (!orthographic) {
        rayOrigin = transform->worldMatrix[3].xyz();
    }

    dir = rayOrigin - worldScreenPoint.xyz;

    return Ray(rayOrigin, dir);
}
示例#12
0
bool TicTacToe::handleEvent(const sf::Event& event, const sf::Window& relativeTo)
{
    if(event.type == sf::Event::MouseMoved)
        m_lastPointerLoc = sf::Vector2f(sf::Mouse::getPosition(relativeTo).x, sf::Mouse::getPosition(relativeTo).y);

    if(m_multi || (!m_multi && m_turn != m_iaColor))
    {
        if(event.type == sf::Event::MouseButtonReleased && event.mouseButton.button == sf::Mouse::Left )
        {
            sf::Vector2f mousePos(sf::Mouse::getPosition(relativeTo).x, sf::Mouse::getPosition(relativeTo).y);
            if(mousePos.x > OFFSET_X && mousePos.x < OFFSET_X + GRID_SIZE*CASE_SIZE
               && mousePos.y > OFFSET_Y && mousePos.y < OFFSET_Y + GRID_SIZE*CASE_SIZE)
            {
                int caseX = (mousePos.x - OFFSET_X) / CASE_SIZE;
                int caseY = (mousePos.y - OFFSET_Y) / CASE_SIZE;

                if(m_grid[caseY][caseX] == NONE)
                {
                    m_grid[caseY][caseX] = m_turn;
                    switchTurn();
                }
            }
        }
    }


    return false;
}
示例#13
0
bool Inventory::HandleEvent(sf::Event& e)
{
    bool Modification = false;

    if (e.type == sf::Event::KeyPressed)
    {
        if ((e.key.code == sf::Keyboard::B && sf::Keyboard::isKeyPressed(sf::Keyboard::LShift)) ||
        (e.key.code == sf::Keyboard::LShift && sf::Keyboard::isKeyPressed(sf::Keyboard::B)))
        {
            m_IsAllOpen = !m_IsAllOpen;
            Modification = true;
        }
    }

    if (e.type == sf::Event::MouseButtonPressed)
    {
        sf::Vector2i mousePos(e.mouseButton.x, e.mouseButton.y);

        for (int iBag = 0 ; iBag < 4 ; ++iBag)
        {
            // TODO: Check if function is correct
            if (m_Bags[iBag]->IsInArea(mousePos))
            {
                m_IsBagOpen[iBag] = true;
                Modification = true;
                break;
            }
        }
    }

    return Modification;
}
示例#14
0
void DDADisplay::mouseMoveEvent(QMouseEvent *event)
{
    qDebug() << event->pos();
    int y = 400 - event->pos().y();
    int x = event->pos().x() - 600;
    emit mousePos(QPoint(x, y));
}
示例#15
0
void FlowField::addRepelForce(float x, float y, float radius, float strength) {
    
    float pctX = x / fieldWidth;
    float pctY = y / fieldWidth;
    
    int cols = fieldWidth / resolution;
    int rows = fieldHeight / resolution;
    
    int xVal = pctX * cols;
    int yVal = pctY * rows;
    
    
    ofVec2f mousePos(x, y);
    
    for( int y=0; y<flowList.size(); y++){
        for( int x=0; x<flowList[y].size(); x++){
            ofVec2f np( x*resolution, y*resolution );
            
            if( np.distance(mousePos) < radius ){
                float pct = 1 - (np.distance(mousePos) / radius);
                
                // add strength in the direction it's already moving in
//                flowList[y][x] += flowList[y][x].normalized() * strength;
                
                // add strength away from the mouse
                ofVec2f dir = (np - mousePos);
                flowList[y][x] += dir.normalized() * strength;
            }
        }
    }
}
示例#16
0
void human::startSelect()
{
    if (m_select)
        stopSelect();
    sf::Vector2f pos = mousePos(m_rw);
    m_select = new sf::Shape();
    *m_select = sf::Shape::Rectangle(pos.x+0, pos.y+0, pos.x+1, pos.y+1, sf::Color(255, 0, 0, 50), 2.0f, sf::Color::Green);
}
示例#17
0
文件: AppMenu.cpp 项目: Dzzirt/OOP
bool CAppMenu::OnEvent(const sf::Event &event)
{
    bool handled = false;
    switch (event.type)
    {
    case sf::Event::MouseButtonPressed:
    {
        const auto &data = event.mouseButton;
		sf::Vector2f mousePos(float(data.x), float(data.y));
        m_mousePressCaptured = m_frame.contains(mousePos)
                || (m_isOpen && GetPopupFrame().contains(mousePos));
        break;
    }
    case sf::Event::MouseButtonReleased:
    {
        const auto &data = event.mouseButton;
		sf::Vector2f mousePos(float(data.x), float(data.y));
        if (m_mousePressCaptured)
        {
            if (m_frame.contains(mousePos))
            {
                OnMenuClicked();
                handled = true;
            }
            else if (m_isOpen)
            {
                sf::FloatRect popupFrame = GetPopupFrame();
                if (popupFrame.contains(mousePos))
                {
                    OnPopupClicked(mousePos.x - popupFrame.left, mousePos.y - popupFrame.top);
                    handled = true;
                }
                else
                {
                    m_isOpen = false;
                }
            }
        }
        m_mousePressCaptured = false;
        break;
    }
    default:
        break;
    }
    return handled;
}
示例#18
0
//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button){
	ofVec2f mousePos(x-center.x, y-center.y);
	if (mousePos.length()<radius ) {
		angle = -mousePos.angleRad(ofVec2f(radius,0));
		if (angle<0) {
			angle+=TWO_PI;
		}
	}
}
    void CameraController::adjustYawPitch(int mouseX, int mouseY)
    {
        glm::ivec2 windowCenter = m_window->getSize() / 2;
        glm::ivec2 mousePos(mouseX, mouseY);

        m_pitch += (mousePos.y - windowCenter.y) * m_lookSpeed;
        m_pitch = std::max(-90.f, std::min(m_pitch, 90.f));

        m_yaw += (windowCenter.x - mousePos.x) * m_lookSpeed;
    }
示例#20
0
void EventSenderProxy::mouseMoveTo(double x, double y)
{
    m_position.x = x;
    m_position.y = y;

    QPoint mousePos(m_position.x, m_position.y);
    QMouseEvent* event = new QMouseEvent(QEvent::MouseMove,
        mousePos, mousePos, Qt::NoButton, m_mouseButtons, Qt::NoModifier);

    sendOrQueueEvent(event);
}
示例#21
0
void EventSenderProxy::mouseUp(unsigned button, WKEventModifiers)
{
    Qt::MouseButton mouseButton = getMouseButton(button);
    m_mouseButtons &= ~mouseButton;

    QPoint mousePos(m_position.x, m_position.y);
    QMouseEvent* event = new QMouseEvent(QEvent::MouseButtonRelease,
        mousePos, mousePos, mouseButton, m_mouseButtons, Qt::NoModifier);

    sendOrQueueEvent(event);
}
void JavascriptInvocation::rightClick(int x, int y) {
  QPoint mousePos(x, y);

  m_page->mouseEvent(QEvent::MouseButtonPress, mousePos, Qt::RightButton);

  // swallowContextMenuEvent tries to fire contextmenu event in html page
  QContextMenuEvent *event = new QContextMenuEvent(QContextMenuEvent::Mouse, mousePos);
  m_page->swallowContextMenuEvent(event);

  m_page->mouseEvent(QEvent::MouseButtonRelease, mousePos, Qt::RightButton);
}
示例#23
0
//--------------------------------------------------------------
void ofApp::update(){
    if (leftMouseButtonPressed) {
        ofVec2f mousePos(ofGetMouseX(), ofGetMouseY());
        if (lastPoint.distance(mousePos) >= minDistance) {
            // a.distance(b) calculates the Euclidean distance between point a and b.  It's
            // the length of the straight line distance between the points.
            currentPolyline.curveTo(mousePos);  // Here we are using an ofVec2f with curveTo(...)
            lastPoint = mousePos;
        }
    }
}
示例#24
0
void SDLMouse::update()
{
  SDL_Event event;

	SDL_PumpEvents();

  while ( SDL_PeepEvents(&event, 1, SDL_GETEVENT, ( SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN) | SDL_EVENTMASK(SDL_MOUSEBUTTONUP) | SDL_EVENTMASK(SDL_MOUSEMOTION) ) ) > 0  )
  {
    if ( event.type == SDL_MOUSEBUTTONDOWN ) {
			cout << endl << " [EE] Mouse Pressed";
			if ( gui() != NULL ) {
				cout << " gui";
        gui()->mousePressed( event.button.x, event.button.y, translateMouseButtons( event.button.button ) );
			}
			cout << endl;
      onMousePressed( event.button.x, event.button.y, translateMouseButtons( event.button.button ) );

    } else if ( event.type == SDL_MOUSEBUTTONUP ) {
			cout << " [EE] Mouse Released" << endl << endl;
			if ( gui() != NULL ) {
				cout << " gui";
				gui()->mouseReleased( event.button.x, event.button.y, translateMouseButtons( event.button.button ) );
			}
			cout << endl;
			onMouseReleased( event.button.x, event.button.y, translateMouseButtons( event.button.button ) );

    } else if ( event.type == SDL_MOUSEMOTION ) {
      if ( gui() != NULL )
        gui()->mouseMove( event.button.x, event.button.y, translateMouseButtons( event.button.button ) );
      onMouseMove( event.button.x, event.button.y, translateMouseButtons( event.button.button ) );

    }

  }
	if ( gui() != NULL ) {
		Widget* w = gui()->lastMouseOverWidget();
		if ( w != NULL ) {
			int x, y;
			mousePos( x, y );
			MouseCursor* mc = w->getCursor( x - w->absoluteXPos(), y - w->absoluteYPos() );
			if ( mc != (MouseCursor*)pCursor ) {
				setCursor( mc );
			}
		}
/*		if ( gui()->lastMouseOverWidget() != pLastMouseOver ) {
			pLastMouseOver = gui()->lastMouseOverWidget();
			if ( pLastMouseOver != NULL ) {
				if ( (MouseCursor*)pCursor != pLastMouseOver->cursor() )
					setCursor( pLastMouseOver->cursor() );
			}
	}*/
	}

}
示例#25
0
Window::Window(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle("Bresenham's Circle Algo in Qt");

    QWidget* centralWidget = new QWidget(this);

    drawButton = new QPushButton("Draw", centralWidget);
   // drawStepByStepButton = new QPushButton("Step In", centralWidget);

    connect(drawButton, SIGNAL(clicked()),
            this, SLOT(draw()));

    redraw = new QCheckBox("Redraw Display", centralWidget);
    redraw->setTristate(false);
    redraw->setCheckState(Qt::Checked);

    connect(redraw, SIGNAL(stateChanged(int)),
            this, SLOT(redrawToggle(int)));

    progressBar = new QProgressBar(this);
    progressBar->setValue(0);

    statusBar = new QStatusBar(centralWidget);
    setStatusBar(statusBar);

    infoLabel = new QLabel("Circle Drawing Algorithm, in C++ using Qt. \nAuthor: \nRohit Yadav & Abhishek Kumar \nCSE PartIII, \n2009-2010.", centralWidget);
    infoLabel->setWordWrap(true);

    display = new DisplayWidget(centralWidget);
    connect(display, SIGNAL(updateProgressBar(float)),
            this, SLOT(updateProgressBar(float)));
    connect(display, SIGNAL(mousePos(QPoint)),
            this, SLOT(updateMousePos(QPoint)));

    scrollArea = new QScrollArea(this);
    scrollArea->setBackgroundRole(QPalette::Dark);
    scrollArea->setWidget(display);

    QVBoxLayout *vbox = new QVBoxLayout();
    vbox->addWidget(scrollArea, 10);
    vbox->addWidget(progressBar, 1);

    QVBoxLayout *vbox1 = new QVBoxLayout();
    vbox1->addWidget(redraw,1);
    vbox1->addWidget(drawButton, 1);
    vbox1->addWidget(infoLabel, 1);

    QHBoxLayout *hbox = new QHBoxLayout(centralWidget);
    hbox->addLayout(vbox, 10);
    hbox->addLayout(vbox1, 1);

    setCentralWidget(centralWidget);
}
示例#26
0
// Get the current mouse position
void GraphicsView::mouseMoveEvent(QMouseEvent *e) {

	emit mousePos(e->pos().x(),e->pos().y());

	// Detect click + dragging
	if(buttonpressed)
		mousedragged = true;

	QGraphicsView::mouseMoveEvent(e);


}
	void Canvas::OnEventMouseMoved(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::MouseMoveEvent& event)
	{
		std::size_t bestEntry = InvalidCanvasIndex;
		float bestEntryArea = std::numeric_limits<float>::infinity();

		Nz::Vector3f mousePos(float(event.x), float(event.y), 0.f);
		for (std::size_t i = 0; i < m_widgetEntries.size(); ++i)
		{
			const Nz::Boxf& box = m_widgetEntries[i].box;

			if (box.Contains(mousePos))
			{
				float area = box.width * box.height;
				if (area < bestEntryArea)
				{
					bestEntry = i;
					bestEntryArea = area;
				}
			}
		}

		if (bestEntry != InvalidCanvasIndex)
		{
			if (m_hoveredWidget != bestEntry)
			{
				if (m_hoveredWidget != InvalidCanvasIndex)
				{
					WidgetEntry& previouslyHovered = m_widgetEntries[m_hoveredWidget];
					previouslyHovered.widget->OnMouseExit();
				}

				m_hoveredWidget = bestEntry;
				m_widgetEntries[m_hoveredWidget].widget->OnMouseEnter();

				if (m_cursorController)
					m_cursorController->UpdateCursor(Nz::Cursor::Get(m_widgetEntries[m_hoveredWidget].cursor));
			}

			WidgetEntry& hoveredWidget = m_widgetEntries[m_hoveredWidget];

			int x = static_cast<int>(std::round(event.x - hoveredWidget.box.x));
			int y = static_cast<int>(std::round(event.y - hoveredWidget.box.y));
			hoveredWidget.widget->OnMouseMoved(x, y, event.deltaX, event.deltaY);
		}
		else if (m_hoveredWidget != InvalidCanvasIndex)
		{
			m_widgetEntries[m_hoveredWidget].widget->OnMouseExit();
			m_hoveredWidget = InvalidCanvasIndex;

			if (m_cursorController)
				m_cursorController->UpdateCursor(Nz::Cursor::Get(Nz::SystemCursor_Default));
		}
	}
示例#28
0
void LevelEditor::HandleEvents(sf::Event &event)
{
    if(event.Type == sf::Event::MouseButtonPressed)
    {
        if(event.MouseButton.Button == sf::Mouse::Left)
        {
            Vec2D mousePos((Real)event.MouseButton.X, (Real)event.MouseButton.Y);

            if(!SetTool(mousePos))
            {
                Entity *entity = 0;
                switch(m_currentTool)
                {
                case WALL:
                    entity = new Wall();
                    break;
                case ENEMY_SPAWN_POINT:
                    entity = new EnemySpawnPoint();
                    break;
                };

                if(entity)
                {
                    mousePos += gWorld.m_camera.m_position.Opposite();
                    int cell = gWorld.GetLevel().GetCellFromPoint(mousePos);
                    entity->SetPosition(gWorld.GetLevel().SnapToCenter(mousePos));
                    gWorld.GetLevel().AddEntity(cell, entity);
                }
            }
        }
        else if(event.MouseButton.Button == sf::Mouse::Right)
        {
            Vec2D mousePos((Real)event.MouseButton.X, (Real)event.MouseButton.Y);
            mousePos += gWorld.m_camera.m_position.Opposite();

            int cell = gWorld.GetLevel().GetCellFromPoint(mousePos);
            gWorld.GetLevel().RemoveEntityFromCell(cell);
        }
    }
}
示例#29
0
void QgsMapCanvas::wheelEvent( QWheelEvent *e )
{
  // Zoom the map canvas in response to a mouse wheel event. Moving the
  // wheel forward (away) from the user zooms in

  QgsDebugMsg( "Wheel event delta " + QString::number( e->delta() ) );

  if ( mMapTool )
  {
    mMapTool->wheelEvent( e );
  }

  if ( QgsApplication::keyboardModifiers() )
  {
    // leave the wheel for map tools if any modifier pressed
    return;
  }

  switch ( mWheelAction )
  {
    case WheelZoom:
      // zoom without changing extent
      if ( e->delta() > 0 )
        zoomIn();
      else
        zoomOut();
      break;

    case WheelZoomAndRecenter:
      // zoom and don't change extent
      zoomWithCenter( e->x(), e->y(), e->delta() > 0 );
      break;

    case WheelZoomToMouseCursor:
    {
      // zoom map to mouse cursor
      double scaleFactor = e->delta() > 0 ? 1 / mWheelZoomFactor : mWheelZoomFactor;

      QgsPoint oldCenter = center();
      QgsPoint mousePos( getCoordinateTransform()->toMapPoint( e->x(), e->y() ) );
      QgsPoint newCenter( mousePos.x() + (( oldCenter.x() - mousePos.x() ) * scaleFactor ),
                          mousePos.y() + (( oldCenter.y() - mousePos.y() ) * scaleFactor ) );

      zoomByFactor( scaleFactor, &newCenter );
      break;
    }

    case WheelNothing:
      // well, nothing!
      break;
  }
}
示例#30
0
void DiagramScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    QPointF mousePos(event->buttonDownScenePos(Qt::LeftButton).x(),
                     event->buttonDownScenePos(Qt::LeftButton).y());
    movingItem = itemAt(mousePos.x(), mousePos.y());

    if (movingItem != 0 && event->button() == Qt::LeftButton) {
        oldPos = movingItem->pos();
    }
    
    clearSelection();    
    QGraphicsScene::mousePressEvent(event);
}