From 1edd32235230a318f4c8a9e44e913018a7390363 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Thu, 5 Dec 2019 23:38:51 -0600 Subject: [PATCH] [nostalgia/core/studio] Add support for dragging cursor around tile sheet editor --- src/nostalgia/core/studio/Pixel.qml | 5 -- src/nostalgia/core/studio/Tile.qml | 5 ++ src/nostalgia/core/studio/TileSheetEditor.qml | 51 +++++++++++++------ src/nostalgia/core/studio/tilesheeteditor.cpp | 10 ++-- 4 files changed, 47 insertions(+), 24 deletions(-) diff --git a/src/nostalgia/core/studio/Pixel.qml b/src/nostalgia/core/studio/Pixel.qml index b991d4b4..40daa807 100644 --- a/src/nostalgia/core/studio/Pixel.qml +++ b/src/nostalgia/core/studio/Pixel.qml @@ -27,9 +27,4 @@ Rectangle { anchors.bottom: pixel.bottom } - MouseArea { - anchors.fill: parent - onClicked: sheetData.updatePixels([pixel]) - } - } diff --git a/src/nostalgia/core/studio/Tile.qml b/src/nostalgia/core/studio/Tile.qml index 225d8af0..14ccb97f 100644 --- a/src/nostalgia/core/studio/Tile.qml +++ b/src/nostalgia/core/studio/Tile.qml @@ -17,7 +17,12 @@ Rectangle { y: parent.height / 2 - tile.height / 2 color: '#000000' + function pixelAt(x, y) { + return tileGrid.childAt(x, y); + } + Grid { + id: tileGrid width: tile.width height: tile.height rows: 8 diff --git a/src/nostalgia/core/studio/TileSheetEditor.qml b/src/nostalgia/core/studio/TileSheetEditor.qml index 39b5464a..4eb8d84d 100644 --- a/src/nostalgia/core/studio/TileSheetEditor.qml +++ b/src/nostalgia/core/studio/TileSheetEditor.qml @@ -13,21 +13,42 @@ Rectangle { id: tileSheetEditor color: '#717d7e' - Grid { - id: tileGrid - property int baseTileSize: Math.min(parent.width / tileGrid.columns, parent.height / tileGrid.rows) - width: tileGrid.columns * tileGrid.baseTileSize * 0.90 - height: tileGrid.rows * tileGrid.baseTileSize * 0.90 - anchors.horizontalCenter: tileSheetEditor.horizontalCenter - anchors.verticalCenter: tileSheetEditor.verticalCenter - rows: sheetData.rows - columns: sheetData.columns - Repeater { - model: tileGrid.rows * tileGrid.columns - Tile { - tileNumber: index - width: tileGrid.width / tileGrid.columns - height: tileGrid.height / tileGrid.rows + MouseArea { + id: mouseArea + anchors.fill: parent + acceptedButtons: Qt.LeftButton + onPositionChanged: { + var gridX = mouseX - tileGrid.x; + var gridY = mouseY - tileGrid.y; + var tile = tileGrid.childAt(gridX, gridY); + if (tile === null) { + return; + } + var tileX = gridX - tile.x; + var tileY = gridY - tile.y; + var pixel = tile.pixelAt(tileX, tileY); + if (pixel === null) { + return; + } + sheetData.updatePixels([pixel]); + } + + Grid { + id: tileGrid + property int baseTileSize: Math.min(parent.width / tileGrid.columns, parent.height / tileGrid.rows) + width: tileGrid.columns * tileGrid.baseTileSize * 0.90 + height: tileGrid.rows * tileGrid.baseTileSize * 0.90 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + rows: sheetData.rows + columns: sheetData.columns + Repeater { + model: tileGrid.rows * tileGrid.columns + Tile { + tileNumber: index + width: tileGrid.width / tileGrid.columns + height: tileGrid.height / tileGrid.rows + } } } } diff --git a/src/nostalgia/core/studio/tilesheeteditor.cpp b/src/nostalgia/core/studio/tilesheeteditor.cpp index dcf7c1d0..7631f32a 100644 --- a/src/nostalgia/core/studio/tilesheeteditor.cpp +++ b/src/nostalgia/core/studio/tilesheeteditor.cpp @@ -61,11 +61,13 @@ class UpdatePixelsCommand: public QUndoCommand { m_newColorId = newColorId; cmdIdx = cmdIdx; for (auto &pi : pixelItems) { - PixelUpdate pu; auto p = qobject_cast(pi.value()); - pu.item = p; - pu.oldColorId = m_palette.indexOf(p->property("color").toString()); - m_pixelUpdates.insert(pu); + if (p) { + PixelUpdate pu; + pu.item = p; + pu.oldColorId = m_palette.indexOf(p->property("color").toString()); + m_pixelUpdates.insert(pu); + } } }