Aspect ratio pixel scaling fixes for Qt GUI. For issue #341.
This commit is contained in:
parent
b825454fee
commit
95aa96a14e
|
@ -853,8 +853,7 @@ QSize ConsoleVideoConfDialog_t::calcNewScreenSize(void)
|
||||||
if ( aspectCbx->isChecked() )
|
if ( aspectCbx->isChecked() )
|
||||||
{
|
{
|
||||||
xscale = xScaleBox->value();
|
xscale = xScaleBox->value();
|
||||||
|
yscale = xscale * (double)nes_shm->video.xyRatio;
|
||||||
yscale = xscale * aspectRatio * (double)nes_shm->video.xyRatio;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -864,6 +863,21 @@ QSize ConsoleVideoConfDialog_t::calcNewScreenSize(void)
|
||||||
rw=(int)((r-l)*xscale);
|
rw=(int)((r-l)*xscale);
|
||||||
rh=(int)((b-t)*yscale);
|
rh=(int)((b-t)*yscale);
|
||||||
|
|
||||||
|
if ( aspectCbx->isChecked() )
|
||||||
|
{
|
||||||
|
double rr;
|
||||||
|
|
||||||
|
rr = (double)rh / (double)rw;
|
||||||
|
|
||||||
|
if ( rr > aspectRatio )
|
||||||
|
{
|
||||||
|
rw = (int)( (((double)rh) / aspectRatio) + 0.50);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rh = (int)( (((double)rw) * aspectRatio) + 0.50);
|
||||||
|
}
|
||||||
|
}
|
||||||
out.setWidth( rw + dw );
|
out.setWidth( rw + dw );
|
||||||
out.setHeight( rh + dh );
|
out.setHeight( rh + dh );
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,8 +206,6 @@ void ConsoleViewGL_t::setScaleXY( double xs, double ys )
|
||||||
|
|
||||||
if ( forceAspect )
|
if ( forceAspect )
|
||||||
{
|
{
|
||||||
xyRatio = xyRatio * aspectRatio;
|
|
||||||
|
|
||||||
if ( (xscale*xyRatio) < yscale )
|
if ( (xscale*xyRatio) < yscale )
|
||||||
{
|
{
|
||||||
yscale = (xscale*xyRatio);
|
yscale = (xscale*xyRatio);
|
||||||
|
@ -340,15 +338,13 @@ void ConsoleViewGL_t::paintGL(void)
|
||||||
|
|
||||||
if ( forceAspect )
|
if ( forceAspect )
|
||||||
{
|
{
|
||||||
xyRatio = xyRatio * aspectRatio;
|
|
||||||
|
|
||||||
if ( (xscaleTmp*xyRatio) < yscaleTmp )
|
if ( (xscaleTmp*xyRatio) < yscaleTmp )
|
||||||
{
|
{
|
||||||
yscaleTmp = (xscaleTmp*xyRatio);
|
yscaleTmp = xscaleTmp * xyRatio;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xscaleTmp = (yscaleTmp/xyRatio);
|
xscaleTmp = yscaleTmp / xyRatio;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,8 +364,45 @@ void ConsoleViewGL_t::paintGL(void)
|
||||||
yscaleTmp = yscale;
|
yscaleTmp = yscale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rw=(int)((r-l)*xscaleTmp);
|
rw=(int)((r-l)*xscaleTmp);
|
||||||
rh=(int)((b-t)*yscaleTmp);
|
rh=(int)((b-t)*yscaleTmp);
|
||||||
|
|
||||||
|
if ( forceAspect )
|
||||||
|
{
|
||||||
|
int iw, ih, ax, ay;
|
||||||
|
|
||||||
|
ax = (int)(aspectX+0.50);
|
||||||
|
ay = (int)(aspectY+0.50);
|
||||||
|
|
||||||
|
iw = rw * ay;
|
||||||
|
ih = rh * ax;
|
||||||
|
|
||||||
|
if ( iw > ih )
|
||||||
|
{
|
||||||
|
rh = (rw * ay) / ax;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rw = (rh * ax) / ay;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( rw > view_width )
|
||||||
|
{
|
||||||
|
rw = view_width;
|
||||||
|
rh = (rw * ay) / ax;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( rh > view_height )
|
||||||
|
{
|
||||||
|
rh = view_height;
|
||||||
|
rw = (rh * ax) / ay;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( rw > view_width ) rw = view_width;
|
||||||
|
if ( rh > view_height) rh = view_height;
|
||||||
|
|
||||||
sx=(view_width-rw)/2;
|
sx=(view_width-rw)/2;
|
||||||
sy=(view_height-rh)/2;
|
sy=(view_height-rh)/2;
|
||||||
|
|
||||||
|
|
|
@ -124,8 +124,6 @@ void ConsoleViewSDL_t::setScaleXY( double xs, double ys )
|
||||||
|
|
||||||
if ( forceAspect )
|
if ( forceAspect )
|
||||||
{
|
{
|
||||||
xyRatio = xyRatio * aspectRatio;
|
|
||||||
|
|
||||||
if ( (xscale*xyRatio) < yscale )
|
if ( (xscale*xyRatio) < yscale )
|
||||||
{
|
{
|
||||||
yscale = (xscale*xyRatio);
|
yscale = (xscale*xyRatio);
|
||||||
|
@ -381,8 +379,6 @@ void ConsoleViewSDL_t::render(void)
|
||||||
|
|
||||||
if ( forceAspect )
|
if ( forceAspect )
|
||||||
{
|
{
|
||||||
xyRatio = xyRatio * aspectRatio;
|
|
||||||
|
|
||||||
if ( (xscaleTmp*xyRatio) < yscaleTmp )
|
if ( (xscaleTmp*xyRatio) < yscaleTmp )
|
||||||
{
|
{
|
||||||
yscaleTmp = (xscaleTmp*xyRatio);
|
yscaleTmp = (xscaleTmp*xyRatio);
|
||||||
|
@ -412,6 +408,42 @@ void ConsoleViewSDL_t::render(void)
|
||||||
|
|
||||||
rw=(int)(nesWidth*xscaleTmp);
|
rw=(int)(nesWidth*xscaleTmp);
|
||||||
rh=(int)(nesHeight*yscaleTmp);
|
rh=(int)(nesHeight*yscaleTmp);
|
||||||
|
|
||||||
|
if ( forceAspect )
|
||||||
|
{
|
||||||
|
int iw, ih, ax, ay;
|
||||||
|
|
||||||
|
ax = (int)(aspectX+0.50);
|
||||||
|
ay = (int)(aspectY+0.50);
|
||||||
|
|
||||||
|
iw = rw * ay;
|
||||||
|
ih = rh * ax;
|
||||||
|
|
||||||
|
if ( iw > ih )
|
||||||
|
{
|
||||||
|
rh = (rw * ay) / ax;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rw = (rh * ax) / ay;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( rw > view_width )
|
||||||
|
{
|
||||||
|
rw = view_width;
|
||||||
|
rh = (rw * ay) / ax;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( rh > view_height )
|
||||||
|
{
|
||||||
|
rh = view_height;
|
||||||
|
rw = (rh * ax) / ay;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( rw > view_width ) rw = view_width;
|
||||||
|
if ( rh > view_height) rh = view_height;
|
||||||
|
|
||||||
sx=(view_width-rw)/2;
|
sx=(view_width-rw)/2;
|
||||||
sy=(view_height-rh)/2;
|
sy=(view_height-rh)/2;
|
||||||
|
|
||||||
|
|
|
@ -314,13 +314,29 @@ QSize consoleWin_t::calcRequiredSize(void)
|
||||||
|
|
||||||
if ( forceAspect )
|
if ( forceAspect )
|
||||||
{
|
{
|
||||||
yscale = xscale * aspectRatio * (double)nes_shm->video.xyRatio;
|
yscale = xscale * (double)nes_shm->video.xyRatio;
|
||||||
}
|
}
|
||||||
rw=(int)((r-l)*xscale);
|
rw=(int)((r-l)*xscale);
|
||||||
rh=(int)((b-t)*yscale);
|
rh=(int)((b-t)*yscale);
|
||||||
|
|
||||||
//printf("view %i x %i \n", rw, rh );
|
//printf("view %i x %i \n", rw, rh );
|
||||||
|
|
||||||
|
if ( forceAspect )
|
||||||
|
{
|
||||||
|
double rr;
|
||||||
|
|
||||||
|
rr = (double)rh / (double)rw;
|
||||||
|
|
||||||
|
if ( rr > aspectRatio )
|
||||||
|
{
|
||||||
|
rw = (int)( (((double)rh) / aspectRatio) + 0.50);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rh = (int)( (((double)rw) * aspectRatio) + 0.50);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
out.setWidth( rw + dw );
|
out.setWidth( rw + dw );
|
||||||
out.setHeight( rh + dh );
|
out.setHeight( rh + dh );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue