コード例 #1
0
void LayerEditScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    if(!event->buttons() & Qt::LeftButton) {
        return;
    }

    if((event->scenePos() - _dragStartPosition).manhattanLength() < QApplication::startDragDistance()) {
        return;
    }

    qDebug() << "LayerEditScene::mouseMoveEvent - Starting a drag";

    // Get the pixmap item related to the start of the drag.
    QGraphicsItem *item = itemAt(_dragStartPosition, QTransform());
    if(item == 0) {
        // Couldn't find an item at the location for some reason.
        qDebug() << "LayerEditScene::mouseMoveEvent - Could not find a sprite at the drag location.";
        return;
    }

    // Static cast is safe because this scene only adds QGraphicsPixmapItem
    QGraphicsPixmapItem *pixmapItem = static_cast<QGraphicsPixmapItem *>(item);

    // Remove item from scene
    Sprite sprite = _pixmapToSprite[pixmapItem]; // Save sprite before it's removed.
    qDebug() << "LayerEditScene::mouseMoveEvent - Dragging " << sprite.getFileInfo().fileName();

    int index = _previews.indexOf(pixmapItem);
    if(index != -1) {
        removeSprite(index);
        recalculatePositions();
    }

    // Create a new drag event and put the source image into the mime data.
    QDrag *drag = new QDrag((QObject *)event->widget());
    QMimeData *data = new QMimeData();
    data->setImageData(sprite.getTexture());
    data->setText(sprite.getFileInfo().absoluteFilePath());
    drag->setMimeData(data);

    // Put the pixmap that was selected onto the cursor
    QPixmap pixmap = pixmapItem->pixmap();
    drag->setPixmap(pixmap);
    drag->setHotSpot(QPoint(pixmap.width() / 2, pixmap.height() / 2));

    // Execute the drag with a move action.
    qDebug() << "LayerEditScene::mouseMoveEvent - Executing drag as MoveAction";
    Qt::DropAction action = drag->exec(Qt::MoveAction, Qt::MoveAction);

    if(action != Qt::MoveAction) {
        // Put sprite back
        qDebug() << "LayerEditScene::mouseMoveEvent - Move action failed, putting sprite back where it was.";
        insertSprite(index, sprite);
        recalculatePositions();
    } else {
        // Delete the old item
        qDebug() << "LayerEditScene::mouseMoveEvent - Move succeeded, deleting old sprite.";
        delete pixmapItem;
    }
}
コード例 #2
0
ファイル: glv_ProfileEdit.cpp プロジェクト: auxilius/glv
void ProfileEdit::startAddingNew() {
	active = true;
	editing = false;
	profileBeingEdited = -1;
	editText = "";
	recalculatePositions();
};
コード例 #3
0
ファイル: glv_ProfileEdit.cpp プロジェクト: auxilius/glv
void ProfileEdit::startEditing(int profileId) {
	active = true;
	editing = true;
	profileBeingEdited = profileId;	
	editText = profiles->getName(profileId);
	recalculatePositions();
};
コード例 #4
0
void LayerEditScene::setLayer(Layer *layer)
{
    _layer = layer;
    if(_layer != 0) {
        resizeImages(QSize());
        recalculatePositions();
    }
}
コード例 #5
0
void Palette::setSprites(const QList<Sprite> &sprites)
{
    _sprites = sprites;

    qSort(_sprites.begin(), _sprites.end(), compareBySize);
    resizeImages(QSize(), _previewSize);

    recalculatePositions();
}
コード例 #6
0
void LayerEditScene::keyPressEvent(QKeyEvent *event)
{
    // Remove all selected items when the delete key is pressed.
    if(event->key() == Qt::Key_Delete) {
        QList<QGraphicsPixmapItem *> remove;
        for(int i = 0; i < items().size(); i++) {
            if(items().at(i)->isSelected()) {
                remove.append(static_cast<QGraphicsPixmapItem *>(items().at(i)));
            }
        }
        for(int i = 0; i < remove.size(); i++) {
            removeSprite(_previews.indexOf(remove.at(i)));
            recalculatePositions();
        }
    }
}
コード例 #7
0
void LayerEditScene::dropEvent(QGraphicsSceneDragDropEvent *event)
{
    qDebug() << "LayerEditScene::dropEvent - Receiving drop event";
    // Make sure the drop is a sprite
    if(event->mimeData()->hasImage() && event->mimeData()->hasText()) {
        QString filename = event->mimeData()->text();
        QImage image = event->mimeData()->imageData().value<QImage>();

        // Make a sprite
        Sprite sprite(image, filename);

        // Insert sprite into scene
        int index = mapPointToIndex(event->scenePos());
        insertSprite(index, sprite);
        recalculatePositions();

        event->acceptProposedAction();
    } else {
        qDebug() << "LayerEditScene::dropEvent - Mime data does not contain image AND text, ignoring.";
        event->ignore();
    }
}
コード例 #8
0
void Palette::setPreviewSize(const QSize &size)
{
    resizeImages(_previewSize, size);
    _previewSize = size;
    recalculatePositions();
}
コード例 #9
0
void Palette::setNumberOfColumns(int columns)
{
    _numberOfColumns = columns;
    recalculatePositions();
}
コード例 #10
0
void GfxTextBuffer::addFormattedString (const std::string &text,
                                        const Vector3 &top_colour, float top_alpha,
                                        const Vector3 &bot_colour, float bot_alpha)
{
    Vector3 ansi_colour[] = {
        Vector3(0,0,0), Vector3(.8,0,0), Vector3(0,.8,0), Vector3(.8,.8,0),
        Vector3(0,0,.93), Vector3(.8,0,.8), Vector3(0,.8,.8), Vector3(.75,.75,.75),
    };
    Vector3 ansi_bold_colour[] = {
        Vector3(0.5,0.5,0.5), Vector3(1,0,0), Vector3(0,1,0), Vector3(1,1,0),
        Vector3(.36,.36,1), Vector3(1,0,1), Vector3(0,1,1), Vector3(1,1,1),
    };

    ColouredChar c(0, top_colour, top_alpha, bot_colour, bot_alpha);

    unsigned long original_size = colouredText.size();

    bool bold = false;
    unsigned default_colour = 7; // FIXME: this assumes a 'white on black' console
    unsigned last_colour = default_colour;
    for (size_t i=0 ; i<text.length() ; ++i) {
        GfxFont::codepoint_t cp = decode_utf8(text, i);
        if (cp == UNICODE_ESCAPE_CODEPOINT) {
            if (++i >= text.length()) break;
            cp = decode_utf8(text, i);
            if (cp == '[') {
                // continue until 'm'
                unsigned code = 0;
                do {
                    if (++i >= text.length()) break;
                    cp = decode_utf8(text, i);
                    if (cp == 'm' || cp == ';') {
                        // act on code
                        if (code == 0) {
                            bold = false;
                            last_colour = default_colour;
                            c.topColour = top_colour;
                            c.bottomColour = bot_colour;
                        } else if (code == 1) {
                            bold = true;
                            Vector3 col = bold ? ansi_bold_colour[last_colour] : ansi_colour[last_colour];
                            c.topColour = col;
                            c.bottomColour = col;
                        } else if (code == 22) {
                            bold = false;
                            Vector3 col = bold ? ansi_bold_colour[last_colour] : ansi_colour[last_colour];
                            c.topColour = col;
                            c.bottomColour = col;
                        } else if (code >= 30 && code <= 37) {
                            last_colour = code - 30;
                            Vector3 col = bold ? ansi_bold_colour[last_colour] : ansi_colour[last_colour];
                            c.topColour = col;
                            c.bottomColour = col;
                        }
                        code = 0;
                    }
                    if (cp == 'm') break;
                    if (cp >= '0' && cp <= '9') {
                        unsigned digit = cp - '0';
                        code = 10*code + digit;
                    }
                } while (true);
                if (cp == 'm') continue;
            }
        }
        
        // This char is not part of an ansi terminal colour code.
        c.cp = cp;
        colouredText.push_back(c);
    }

    recalculatePositions(original_size);
}