void SelectionTool::mouseMoveEvent(MouseState mouse, QImage *layer, QImage *hud, QImage *selection, bool *useSelection)
{
    if(m_moving){
        hud->fill(Qt::transparent);

        QPainter painter(hud);
        painter.setOpacity(.6);
        painter.drawImage(mouse.delta(), m_movingSelection);
    }
    else if(m_drawing){
        hud->fill(Qt::transparent);

        QPixmap temp(hud->size());
        temp.fill(Qt::transparent);

        QPainter painter(&temp);
        painter.setPen(Qt::NoPen);
        painter.setBrush(QBrush(GREEN_SELECTION));

        this->paintSelection(mouse, &painter);

        painter.end();
        painter.begin(hud);
        painter.setOpacity(.6);
        painter.drawPixmap(0, 0, temp);
    }
    else{
        if(*useSelection && m_selectionMode == "only" && QColor(selection->pixel(mouse.getPos())) == Qt::white)
            this->setCursor(Selection);
        else
            this->setCorrectCursor();
    }
}
void SelectionTool::mouseReleaseEvent(MouseState mouse, QImage *layer, QImage *hud, QImage *selection, bool *useSelection)
{
    if(m_moving){
        m_moving = false;

        selection->fill(Qt::transparent);
        hud->fill(Qt::transparent);

        QPainter painter(selection);
        painter.drawImage(mouse.delta(), m_movingSelection);
        painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
        painter.setPen(Qt::NoPen);
        painter.setBrush(QBrush(Qt::white));
        painter.drawRect(0, 0, layer->width(), layer->height());
    }
    else if(m_drawing){
        m_drawing = false;

        if(m_selectionMode == "only" || *useSelection == false)
            selection->fill(Qt::transparent);

        *useSelection = true;
        hud->fill(Qt::transparent);

        QPixmap temp(layer->size());
        temp.fill(Qt::transparent);

        QPainter painter(&temp);
        painter.setPen(Qt::NoPen);
        painter.setBrush(QBrush(Qt::white));

        this->paintSelection(mouse, &painter);

        painter.end();
        painter.begin(selection);

        if(m_selectionMode == "not")
            painter.setCompositionMode(QPainter::CompositionMode_DestinationOut);

        if(m_selectionMode == "and")
            painter.setCompositionMode(QPainter::CompositionMode_DestinationIn);

        painter.drawPixmap(0, 0, temp);

        if(m_noKeyReleased && m_unmodifiedMode != 0){
            if(m_selectionMode == "or" || m_selectionMode == "and")
                m_keysDown.insert(Qt::Key_Shift);
            if(m_selectionMode == "not" || m_selectionMode == "and")
                m_keysDown.insert(Qt::Key_Alt);
        }

        this->updateMode();
    }

    emit selectionChanged(true);
}