Implemented first cut at sprite preview area.

This commit is contained in:
mjbudd77 2021-04-17 06:11:42 -04:00
parent 9d138bd8eb
commit 53047762c4
2 changed files with 72 additions and 5 deletions

View File

@ -2723,7 +2723,7 @@ spriteViewerDialog_t::spriteViewerDialog_t(QWidget *parent)
frame->setLayout( vbox );
hbox1->addWidget( frame );
vbox->addWidget( preView );
frame->hide(); // TODO Hide until preview code is ready
//frame->hide(); // TODO Hide until preview code is ready
updateTimer = new QTimer( this );
@ -2807,6 +2807,7 @@ void spriteViewerDialog_t::periodicUpdate(void)
tileView->setIndex(idx);
tileView->setIndex(idx);
palView->setIndex(idx);
preView->setIndex(idx);
oamView->update();
tileView->update();
@ -3279,6 +3280,11 @@ oamPreview_t::oamPreview_t(QWidget *parent)
oamPreview_t::~oamPreview_t(void)
{
}
//----------------------------------------------------
void oamPreview_t::setIndex(int val)
{
selSprite = val;
}
//----------------------------------------------------
int oamPreview_t::heightForWidth(int w) const
@ -3294,13 +3300,15 @@ void oamPreview_t::resizeEvent(QResizeEvent *event)
//----------------------------------------------------
void oamPreview_t::paintEvent(QPaintEvent *event)
{
int w,h;
int w,h,i,j,x,y,xx,yy,nt;
QPainter painter(this);
//QColor color;
//QPen pen;
QColor bgColor(0, 0, 0);
QPen pen;
//char showSelector;
char spriteRendered[64];
struct oamSpriteData_t *spr;
//pen = painter.pen();
pen = painter.pen();
viewWidth = event->rect().width();
viewHeight = event->rect().height();
@ -3317,5 +3325,62 @@ void oamPreview_t::paintEvent(QPaintEvent *event)
w = h;
}
if ( palo != NULL )
{
int p = palcache[0];
bgColor.setRed( palo[p].r );
bgColor.setGreen( palo[p].g );
bgColor.setBlue( palo[p].b );
}
painter.fillRect( 0, 0, w*256, h*240, bgColor );
nt = ( oamPattern.mode8x16 ) ? 2 : 1;
for (i=63; i>=0; i--)
{
spr = &oamPattern.sprite[i];
spriteRendered[i] = 0;
//printf("Sprite: (%i,%i) -> (%02X,%02X) \n", spr->x, spr->y, spr->x, spr->y );
// Check if sprite is off screen
if ( spr->y >= 0xEF )
{
continue;
}
yy = spr->y * h;
for (j=0; j<nt; j++)
{
for (y=0; y<8; y++)
{
xx = spr->x * w;
for (x=0; x < 8; x++)
{
painter.fillRect( xx, yy, w, h, spr->tile[j].pixel[y][x].color );
xx += w;
}
yy += h;
}
}
spriteRendered[i] = 1;
}
if ( spriteRendered[ selSprite ] )
{
spr = &oamPattern.sprite[selSprite];
pen.setWidth( 1 );
pen.setColor( QColor(128,128,128) );
painter.setPen( pen );
yy = spr->y * h;
xx = spr->x * w;
painter.drawRect( xx, yy, w*8, h*nt*8 );
}
}
//----------------------------------------------------

View File

@ -402,6 +402,7 @@ class oamPreview_t : public QWidget
oamPreview_t( QWidget *parent = 0);
~oamPreview_t(void);
void setIndex(int val);
protected:
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
@ -410,6 +411,7 @@ class oamPreview_t : public QWidget
private:
int viewWidth;
int viewHeight;
int selSprite;
};
class spriteViewerDialog_t : public QDialog