diff --git a/CHANGES b/CHANGES index a76c5c7af..8e995f274 100644 --- a/CHANGES +++ b/CHANGES @@ -55,6 +55,7 @@ Misc: - Qt: Add optional emulation-related information on reset (closes mgba.io/i/1780) - Qt: Add QOpenGLWidget cross-thread codepath for macOS (fixes mgba.io/i/1754) - Qt: Enable -b for Boot BIOS menu option (fixes mgba.io/i/2074) + - Qt: Add tile range selection to tile viewer (closes mgba.io/i/2455) - Windows: Attach to console if present 0.9.3: (2021-12-17) diff --git a/src/platform/qt/TileView.cpp b/src/platform/qt/TileView.cpp index 1c16b79c6..3e8e58155 100644 --- a/src/platform/qt/TileView.cpp +++ b/src/platform/qt/TileView.cpp @@ -29,6 +29,9 @@ TileView::TileView(std::shared_ptr controller, QWidget* parent) connect(m_ui.tiles, &TilePainter::needsRedraw, this, [this]() { updateTiles(true); }); + connect(m_ui.tilesSelector, qOverload(&QButtonGroup::buttonClicked), this, [this]() { + updateTiles(true); + }); connect(m_ui.paletteId, static_cast(&QSpinBox::valueChanged), this, &TileView::updatePalette); switch (m_controller->platform()) { @@ -39,6 +42,9 @@ TileView::TileView(std::shared_ptr controller, QWidget* parent) #endif #ifdef M_CORE_GB case mPLATFORM_GB: + m_ui.tilesBg->setEnabled(false); + m_ui.tilesObj->setEnabled(false); + m_ui.tilesBoth->setEnabled(false); m_ui.palette256->setEnabled(false); m_ui.tile->setBoundary(1024, 0, 0); break; @@ -107,43 +113,69 @@ TileView::TileView(std::shared_ptr controller, QWidget* parent) #ifdef M_CORE_GBA void TileView::updateTilesGBA(bool force) { if (m_ui.palette256->isChecked()) { - m_ui.tiles->setTileCount(1536); - mTileCache* cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 1); - for (int i = 0; i < 1024; ++i) { - const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i, 0); - if (data) { - m_ui.tiles->setTile(i, data); - } else if (force) { - m_ui.tiles->setTile(i, mTileCacheGetTile(cache, i, 0)); + if (m_ui.tilesBg->isChecked()) { + m_ui.tiles->setTileCount(1024); + } else if (m_ui.tilesObj->isChecked()) { + m_ui.tiles->setTileCount(512); + } else { + m_ui.tiles->setTileCount(1536); + } + mTileCache* cache; + int objOffset = 1024; + if (!m_ui.tilesObj->isChecked()) { + objOffset = 0; + cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 1); + for (int i = 0; i < 1024; ++i) { + const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i, 0); + if (data) { + m_ui.tiles->setTile(i, data); + } else if (force) { + m_ui.tiles->setTile(i, mTileCacheGetTile(cache, i, 0)); + } } } - cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 3); - for (int i = 1024; i < 1536; ++i) { - const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i - 1024, 0); - if (data) { - m_ui.tiles->setTile(i, data); - } else if (force) { - m_ui.tiles->setTile(i, mTileCacheGetTile(cache, i - 1024, 0)); + if (!m_ui.tilesBg->isChecked()) { + cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 3); + for (int i = 1024; i < 1536; ++i) { + const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i - 1024, 0); + if (data) { + m_ui.tiles->setTile(i - objOffset, data); + } else if (force) { + m_ui.tiles->setTile(i - objOffset, mTileCacheGetTile(cache, i - 1024, 0)); + } } } } else { - mTileCache* cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 0); - m_ui.tiles->setTileCount(3072); - for (int i = 0; i < 2048; ++i) { - const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i, m_paletteId); - if (data) { - m_ui.tiles->setTile(i, data); - } else if (force) { - m_ui.tiles->setTile(i, mTileCacheGetTile(cache, i, m_paletteId)); + if (m_ui.tilesBg->isChecked()) { + m_ui.tiles->setTileCount(2048); + } else if (m_ui.tilesObj->isChecked()) { + m_ui.tiles->setTileCount(1024); + } else { + m_ui.tiles->setTileCount(3072); + } + mTileCache* cache; + int objOffset = 2048; + if (!m_ui.tilesObj->isChecked()) { + objOffset = 0; + cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 0); + for (int i = 0; i < 2048; ++i) { + const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i, m_paletteId); + if (data) { + m_ui.tiles->setTile(i, data); + } else if (force) { + m_ui.tiles->setTile(i, mTileCacheGetTile(cache, i, m_paletteId)); + } } } - cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 2); - for (int i = 2048; i < 3072; ++i) { - const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i - 2048, m_paletteId); - if (data) { - m_ui.tiles->setTile(i, data); - } else if (force) { - m_ui.tiles->setTile(i, mTileCacheGetTile(cache, i - 2048, m_paletteId)); + if (!m_ui.tilesBg->isChecked()) { + cache = mTileCacheSetGetPointer(&m_cacheSet->tiles, 2); + for (int i = 2048; i < 3072; ++i) { + const color_t* data = mTileCacheGetTileIfDirty(cache, &m_tileStatus[16 * i], i - 2048, m_paletteId); + if (data) { + m_ui.tiles->setTile(i - objOffset, data); + } else if (force) { + m_ui.tiles->setTile(i - objOffset, mTileCacheGetTile(cache, i - 2048, m_paletteId)); + } } } } diff --git a/src/platform/qt/TileView.ui b/src/platform/qt/TileView.ui index 41b2eeb32..01eb168cf 100644 --- a/src/platform/qt/TileView.ui +++ b/src/platform/qt/TileView.ui @@ -6,119 +6,188 @@ 0 0 - 748 - 823 + 680 + 450 Tiles - - - - - Export Selected - - - - - - - Export All - - - + - + + + + + + + + + 15 + + + + + + + Palette + + + + + + + 256 colors + + + + + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + × + + + 1 + + + 8 + + + + + + + Magnification + + + + + + + false + + + 1 + + + 64 + + + 32 + + + + + + + Tiles per row + + + + + + + Fit to window + + + true + + + + + + + + + + + + + Displayed tiles + + + + + + Only BG tiles + + + tilesSelector + + + + + + + Only OBJ tiles + + + tilesSelector + + + + + + + Both + + + true + + + tilesSelector + + + + + + + + - - - 15 - - - - - + - 256 colors + Copy Selected - - - - 0 - 0 - + + + Export Selected - - × - - - 1 - - - 8 + + + + + + Copy All - + - Magnification - - - - - - - false - - - 1 - - - 64 - - - 32 - - - - - - - Tiles per row - - - - - - - Fit to window - - - true + Export All - - - - Qt::Vertical - - - - 0 - 0 - - - - - + @@ -137,7 +206,7 @@ 0 0 - 480 + 441 768 @@ -183,23 +252,6 @@ - - - - - - - Copy Selected - - - - - - - Copy All - - - @@ -219,6 +271,21 @@ + + paletteId + palette256 + magnification + tilesPerRow + tileFit + tilesBg + tilesObj + tilesBoth + copyOne + copyAll + exportOne + exportAll + scrollArea + @@ -270,4 +337,7 @@ + + +