Skip to content

Commit

Permalink
Platform/Qt: cleanup palette viewer code
Browse files Browse the repository at this point in the history
  • Loading branch information
fleroviux committed Feb 17, 2024
1 parent 05d213f commit 60f7469
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 55 deletions.
121 changes: 66 additions & 55 deletions src/platform/qt/src/widget/debugger/ppu/tile_viewer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,37 +18,65 @@

TileViewer::TileViewer(nba::CoreBase* core, QWidget* parent) : QWidget(parent) {
QHBoxLayout* hbox = new QHBoxLayout{};

QVBoxLayout* vbox_l = new QVBoxLayout{};
QVBoxLayout* vbox_r = new QVBoxLayout{};
hbox->addLayout(vbox_l);
hbox->addLayout(vbox_r);
hbox->addStretch();
setLayout(hbox);

QGridLayout* grid = new QGridLayout{};
grid->addWidget(new QLabel{tr("Magnification:")}, 0, 0);
grid->addWidget(CreateMagnificationInput(), 0, 1);
grid->addWidget(new QLabel{tr("Palette #:")}, 1, 0);
grid->addWidget(CreatePaletteInput(), 1, 1);
vbox_l->addLayout(grid);

eight_bpp = new QCheckBox{tr("256 color mode (8BPP)")};
vbox_l->addWidget(eight_bpp);

vbox_l->addWidget(CreateTileBaseGroupBox());
vbox_l->addWidget(CreateTileInfoGroupBox());
vbox_l->addStretch();

canvas = new QWidget{};
canvas->installEventFilter(this);
vbox_r->addWidget(canvas);
vbox_r->addStretch();

vram = core->GetVRAM();
pram = (u16*)core->GetPRAM();
image_rgb565 = new u16[256 * 256];

UpdateImpl();
}

TileViewer::~TileViewer() {
delete image_rgb565;
}

QWidget* TileViewer::CreateMagnificationInput() {
magnification_input = new QSpinBox{};
magnification_input->setMinimum(1);
magnification_input->setMaximum(16);
connect(magnification_input, QOverload<int>::of(&QSpinBox::valueChanged), [this](int _) { Update(); });
return magnification_input;
}

QWidget* TileViewer::CreatePaletteInput() {
palette_input = new QSpinBox{};
palette_input->setMinimum(0);
palette_input->setMaximum(15);
return magnification_input;
}

QGridLayout* grid = new QGridLayout{};
grid->addWidget(new QLabel{tr("Magnification:")}, 0, 0);
grid->addWidget(magnification_input, 0, 1);
grid->addWidget(new QLabel{tr("Palette #:")}, 1, 0);
grid->addWidget(palette_input, 1, 1);

vbox_l->addLayout(grid);

eight_bpp = new QCheckBox{tr("256 color mode (8BPP)")};
vbox_l->addWidget(eight_bpp);

QGroupBox* tile_base_group_box = new QGroupBox{};
tile_base_group_box->setTitle(tr("Tile Base"));
QWidget* TileViewer::CreateTileBaseGroupBox() {
QVBoxLayout* vbox = new QVBoxLayout{};

QVBoxLayout* tile_base_vbox = new QVBoxLayout{};
QGroupBox* group_box = new QGroupBox{};
group_box->setTitle(tr("Tile Base"));
group_box->setLayout(vbox);

for(u32 tile_base = 0x06000000u; tile_base <= 0x06010000u; tile_base += 0x4000u) {
QRadioButton* radio_button = new QRadioButton{
Expand All @@ -58,44 +86,44 @@ TileViewer::TileViewer(nba::CoreBase* core, QWidget* parent) : QWidget(parent) {
this->tile_base = tile_base & 0xFFFFFFu;
});

tile_base_vbox->addWidget(radio_button);
vbox->addWidget(radio_button);

if(tile_base == 0x06000000u) radio_button->click();
}

tile_base_group_box->setLayout(tile_base_vbox);

vbox_l->addWidget(tile_base_group_box);
return group_box;
}

QGroupBox* tile_data_group_box = new QGroupBox{};
tile_data_group_box->setTitle(tr("Tile"));
QWidget* TileViewer::CreateTileInfoGroupBox() {
QVBoxLayout* vbox = new QVBoxLayout{};

QVBoxLayout* tile_data_vbox = new QVBoxLayout{};
QGroupBox* group_box = new QGroupBox{};
group_box->setTitle(tr("Tile"));
group_box->setLayout(vbox);

QGridLayout* tile_data_grid = new QGridLayout{};
QGridLayout* grid_1 = new QGridLayout{};
label_tile_number = CreateMonospaceLabel();
label_tile_address = CreateMonospaceLabel();
tile_data_grid->addWidget(new QLabel{tr("Tile #:")}, 0, 0);
tile_data_grid->addWidget(label_tile_number, 0, 1);
tile_data_grid->addWidget(new QLabel{tr("Tile address:")}, 1, 0);
tile_data_grid->addWidget(label_tile_address, 1, 1);
tile_data_vbox->addLayout(tile_data_grid);
grid_1->addWidget(new QLabel{tr("Tile #:")}, 0, 0);
grid_1->addWidget(label_tile_number, 0, 1);
grid_1->addWidget(new QLabel{tr("Tile address:")}, 1, 0);
grid_1->addWidget(label_tile_address, 1, 1);
vbox->addLayout(grid_1);

tile_box = new PaletteBox{8, 8};
tile_data_vbox->addWidget(tile_box);
tile_data_group_box->setLayout(tile_data_vbox);
vbox->addWidget(tile_box);

QGridLayout* color_rgb_grid = new QGridLayout{};
QGridLayout* grid_2 = new QGridLayout{};
label_color_r_component = CreateMonospaceLabel();
label_color_g_component = CreateMonospaceLabel();
label_color_b_component = CreateMonospaceLabel();
color_rgb_grid->addWidget(new QLabel{tr("R:")}, 0, 0);
color_rgb_grid->addWidget(label_color_r_component, 0, 1);
color_rgb_grid->addWidget(new QLabel{tr("G:")}, 1, 0);
color_rgb_grid->addWidget(label_color_g_component, 1, 1);
color_rgb_grid->addWidget(new QLabel{tr("B:")}, 2, 0);
color_rgb_grid->addWidget(label_color_b_component, 2, 1);
tile_data_vbox->addLayout(color_rgb_grid);
grid_2->addWidget(new QLabel{tr("R:")}, 0, 0);
grid_2->addWidget(label_color_r_component, 0, 1);
grid_2->addWidget(new QLabel{tr("G:")}, 1, 0);
grid_2->addWidget(label_color_g_component, 1, 1);
grid_2->addWidget(new QLabel{tr("B:")}, 2, 0);
grid_2->addWidget(label_color_b_component, 2, 1);
vbox->addLayout(grid_2);

connect(tile_box, &PaletteBox::selected, [this](int x, int y) {
const u32 color_rgb32 = tile_box->GetColorAt(x, y);
Expand All @@ -110,24 +138,7 @@ TileViewer::TileViewer(nba::CoreBase* core, QWidget* parent) : QWidget(parent) {
tile_box->SetHighlightedPosition(x, y);
});

vbox_l->addWidget(tile_data_group_box);

vbox_l->addStretch();

canvas = new QWidget{};
canvas->installEventFilter(this);
vbox_r->addWidget(canvas);
vbox_r->addStretch();

vram = core->GetVRAM();
pram = (u16*)core->GetPRAM();
image_rgb565 = new u16[256 * 256];

UpdateImpl();
}

TileViewer::~TileViewer() {
delete image_rgb565;
return group_box;
}

bool TileViewer::eventFilter(QObject* object, QEvent* event) {
Expand Down
5 changes: 5 additions & 0 deletions src/platform/qt/src/widget/debugger/ppu/tile_viewer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ struct TileViewer : QWidget {
void Update();

private:
QWidget* CreateMagnificationInput();
QWidget* CreatePaletteInput();
QWidget* CreateTileBaseGroupBox();
QWidget* CreateTileInfoGroupBox();

void PresentTileMap();
void DrawTileDetail(int tile_x, int tile_y);
void ClearTileSelection();
Expand Down

0 comments on commit 60f7469

Please sign in to comment.