refactored VideoDialog using enhanced SliderWidget

This commit is contained in:
thrust26 2018-01-27 11:47:56 +01:00
parent 868df2cb22
commit 9c9abc125d
2 changed files with 29 additions and 137 deletions

View File

@ -112,45 +112,37 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent,
// Aspect ratio (NTSC mode)
myNAspectRatio =
new SliderWidget(myTab, font, xpos, ypos-1, swidth, lineHeight,
"NTSC Aspect ", lwidth, kNAspectRatioChanged);
"NTSC Aspect ", lwidth, 0,
fontWidth * 3);
myNAspectRatio->setMinValue(80); myNAspectRatio->setMaxValue(120);
wid.push_back(myNAspectRatio);
myNAspectRatioLabel =
new StaticTextWidget(myTab, font, xpos + myNAspectRatio->getWidth() + 4,
ypos + 1, fontWidth * 3, fontHeight, "");
ypos += lineHeight + VGAP;
// Aspect ratio (PAL mode)
myPAspectRatio =
new SliderWidget(myTab, font, xpos, ypos-1, swidth, lineHeight,
"PAL Aspect ", lwidth, kPAspectRatioChanged);
new SliderWidget(myTab, font, xpos, ypos-1, swidth, lineHeight,
"PAL Aspect ", lwidth, 0,
fontWidth * 3);
myPAspectRatio->setMinValue(80); myPAspectRatio->setMaxValue(120);
wid.push_back(myPAspectRatio);
myPAspectRatioLabel =
new StaticTextWidget(myTab, font, xpos + myPAspectRatio->getWidth() + 4,
ypos + 1, fontWidth * 3, fontHeight, "");
ypos += lineHeight + VGAP;
// Framerate
myFrameRate =
new SliderWidget(myTab, font, xpos, ypos-1, swidth, lineHeight,
"Framerate ", lwidth, kFrameRateChanged);
"Framerate ", lwidth, 0, fontWidth * 4);
myFrameRate->setMinValue(0); myFrameRate->setMaxValue(900);
myFrameRate->setStepValue(10);
wid.push_back(myFrameRate);
myFrameRateLabel =
new StaticTextWidget(myTab, font, xpos + myFrameRate->getWidth() + 4,
ypos + 1, fontWidth * 4, fontHeight, "");
// Add message concerning usage
const GUI::Font& infofont = instance().frameBuffer().infoFont();
ypos = myTab->getHeight() - 5 - fontHeight - infofont.getFontHeight() - 10;
new StaticTextWidget(myTab, infofont, 10, ypos,
font.getStringWidth("(*) Requires application restart"), fontHeight,
"(*) Requires application restart", TextAlign::Left);
"(*) Requires application restart");
// Move over to the next column
xpos += myFrameRate->getWidth() + 4 + myFrameRateLabel->getWidth() + 28;
xpos += myFrameRate->getWidth() + 28;
ypos = VBORDER;
// Fullscreen
@ -203,7 +195,7 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent,
tabID = myTab->addTab(" TV Effects ");
xpos = HBORDER;
ypos = VBORDER;
swidth = font.getMaxCharWidth() * 9 - 4;
swidth = font.getMaxCharWidth() * 8 - 4;
// TV Mode
items.clear();
@ -222,22 +214,18 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent,
ypos += lineHeight + VGAP;
// Custom adjustables (using macro voodoo)
xpos += fontWidth * 2; ypos += 0;
xpos += INDENT; ypos += 0;
pwidth = lwidth;
lwidth = font.getStringWidth("Saturation ");
#define CREATE_CUSTOM_SLIDERS(obj, desc) \
myTV ## obj = \
new SliderWidget(myTab, font, xpos, ypos-1, pwidth, lineHeight, \
desc, lwidth, kTV ## obj ##Changed); \
new SliderWidget(myTab, font, xpos, ypos-1, swidth, lineHeight, \
desc, lwidth, 0, fontWidth*3); \
myTV ## obj->setMinValue(0); myTV ## obj->setMaxValue(100); \
wid.push_back(myTV ## obj); \
myTV ## obj ## Label = \
new StaticTextWidget(myTab, font, xpos+myTV ## obj->getWidth()+4, \
ypos+1, fontWidth*3, fontHeight, "", TextAlign::Left);\
ypos += lineHeight + VGAP;
pwidth = swidth;
CREATE_CUSTOM_SLIDERS(Contrast, "Contrast ");
CREATE_CUSTOM_SLIDERS(Bright, "Brightness ");
CREATE_CUSTOM_SLIDERS(Hue, "Hue ");
@ -249,7 +237,7 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent,
CREATE_CUSTOM_SLIDERS(Fringe, "Fringing ");
CREATE_CUSTOM_SLIDERS(Bleed, "Bleeding ");
xpos += myTVContrast->getWidth() + 4 + myTVContrastLabel->getWidth() + 32;
xpos += myTVContrast->getWidth() + 28;
ypos = VBORDER;
lwidth = font.getStringWidth("Intensity ");
@ -261,28 +249,25 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent,
VarList::push_back(items, "Per-ROM", "byrom");
myTVPhosphor = new PopUpWidget(myTab, font, xpos, ypos,
font.getStringWidth("Per-ROM"), lineHeight, items,
"TV Phosphor ", font.getStringWidth("TV Phosphor "));
"TV Phosphor ");
wid.push_back(myTVPhosphor);
ypos += lineHeight + VGAP;
// TV Phosphor default level
xpos += INDENT;
pwidth = swidth;
swidth = font.getMaxCharWidth() * 10;
CREATE_CUSTOM_SLIDERS(PhosLevel, "Default ");
ypos += 6;
// Scanline intensity and interpolation
xpos -= INDENT;
myTVScanLabel =
new StaticTextWidget(myTab, font, xpos, ypos, font.getStringWidth("Scanline settings"),
fontHeight, "Scanline settings", TextAlign::Left);
myTVScanLabel = new StaticTextWidget(myTab, font, xpos, ypos, "Scanline settings");
ypos += lineHeight;
xpos += INDENT;
CREATE_CUSTOM_SLIDERS(ScanIntense, "Intensity ");
myTVScanInterpolate = new CheckboxWidget(myTab, font, xpos, ypos,
"Interpolation");
myTVScanInterpolate = new CheckboxWidget(myTab, font, xpos, ypos, "Interpolation");
wid.push_back(myTVScanInterpolate);
ypos += lineHeight + 6;
@ -349,15 +334,13 @@ void VideoDialog::loadConfig()
// Aspect ratio setting (NTSC and PAL)
myNAspectRatio->setValue(instance().settings().getInt("tia.aspectn"));
myNAspectRatioLabel->setLabel(instance().settings().getString("tia.aspectn"));
myPAspectRatio->setValue(instance().settings().getInt("tia.aspectp"));
myPAspectRatioLabel->setLabel(instance().settings().getString("tia.aspectp"));
// Framerate (0 or -1 means automatic framerate calculation)
int rate = instance().settings().getInt("framerate");
myFrameRate->setValue(rate < 0 ? 0 : rate);
myFrameRateLabel->setLabel(rate <= 0 ? "Auto" :
instance().settings().getString("framerate"));
myFrameRate->setValueLabel(rate <= 0 ? "Auto" :
instance().settings().getString("framerate"));
// Fullscreen
myFullscreen->setState(instance().settings().getBool("fullscreen"));
@ -397,11 +380,9 @@ void VideoDialog::loadConfig()
// TV phosphor blend
myTVPhosLevel->setValue(instance().settings().getInt("tv.phosblend"));
myTVPhosLevelLabel->setLabel(instance().settings().getString("tv.phosblend"));
// TV scanline intensity and interpolation
myTVScanIntense->setValue(instance().settings().getInt("tv.scanlines"));
myTVScanIntenseLabel->setLabel(instance().settings().getString("tv.scanlines"));
myTVScanInterpolate->setState(instance().settings().getBool("tv.scaninter"));
myTab->loadConfig();
@ -432,8 +413,8 @@ void VideoDialog::saveConfig()
myTIAInterpolate->getSelectedTag().toString() == "linear" ? true : false);
// Aspect ratio setting (NTSC and PAL)
instance().settings().setValue("tia.aspectn", myNAspectRatioLabel->getLabel());
instance().settings().setValue("tia.aspectp", myPAspectRatioLabel->getLabel());
instance().settings().setValue("tia.aspectn", myNAspectRatio->getValueLabel());
instance().settings().setValue("tia.aspectp", myPAspectRatio->getValueLabel());
// Framerate
int f = myFrameRate->getValue();
@ -492,11 +473,11 @@ void VideoDialog::saveConfig()
myTVPhosphor->getSelectedTag().toString());
// TV phosphor blend
instance().settings().setValue("tv.phosblend", myTVPhosLevelLabel->getLabel());
Properties::setDefault(Display_PPBlend, myTVPhosLevelLabel->getLabel());
instance().settings().setValue("tv.phosblend", myTVPhosLevel->getValueLabel());
Properties::setDefault(Display_PPBlend, myTVPhosLevel->getValueLabel());
// TV scanline intensity and interpolation
instance().settings().setValue("tv.scanlines", myTVScanIntenseLabel->getLabel());
instance().settings().setValue("tv.scanlines", myTVScanIntense->getValueLabel());
instance().settings().setValue("tv.scaninter", myTVScanInterpolate->getState());
// Finally, issue a complete framebuffer re-initialization
@ -515,12 +496,9 @@ void VideoDialog::setDefaults()
myTIAPalette->setSelected("standard", "");
myFrameTiming->setSelected("sleep", "");
myTIAInterpolate->setSelected("nearest", "");
myNAspectRatio->setValue(90);
myNAspectRatioLabel->setLabel("91");
myPAspectRatio->setValue(100);
myPAspectRatioLabel->setLabel("109");
myNAspectRatio->setValue(91);
myPAspectRatio->setValue(109);
myFrameRate->setValue(0);
myFrameRateLabel->setLabel("Auto");
myFullscreen->setState(false);
//myFullScreenMode->setSelectedIndex(0);
@ -542,11 +520,9 @@ void VideoDialog::setDefaults()
// TV phosphor blend
myTVPhosLevel->setValue(50);
myTVPhosLevelLabel->setLabel("50");
// TV scanline intensity and interpolation
myTVScanIntense->setValue(25);
myTVScanIntenseLabel->setLabel("25");
myTVScanInterpolate->setState(true);
// Make sure that mutually-exclusive items are not enabled at the same time
@ -566,25 +542,15 @@ void VideoDialog::handleTVModeChange(NTSCFilter::Preset preset)
bool scanenable = preset != NTSCFilter::PRESET_OFF;
myTVSharp->setEnabled(enable);
myTVSharpLabel->setEnabled(enable);
myTVHue->setEnabled(enable);
myTVHueLabel->setEnabled(enable);
myTVRes->setEnabled(enable);
myTVResLabel->setEnabled(enable);
myTVArtifacts->setEnabled(enable);
myTVArtifactsLabel->setEnabled(enable);
myTVFringe->setEnabled(enable);
myTVFringeLabel->setEnabled(enable);
myTVBleed->setEnabled(enable);
myTVBleedLabel->setEnabled(enable);
myTVBright->setEnabled(enable);
myTVBrightLabel->setEnabled(enable);
myTVContrast->setEnabled(enable);
myTVContrastLabel->setEnabled(enable);
myTVSatur->setEnabled(enable);
myTVSaturLabel->setEnabled(enable);
myTVGamma->setEnabled(enable);
myTVGammaLabel->setEnabled(enable);
myCloneComposite->setEnabled(enable);
myCloneSvideo->setEnabled(enable);
myCloneRGB->setEnabled(enable);
@ -593,7 +559,6 @@ void VideoDialog::handleTVModeChange(NTSCFilter::Preset preset)
myTVScanLabel->setEnabled(scanenable);
myTVScanIntense->setEnabled(scanenable);
myTVScanIntenseLabel->setEnabled(scanenable);
myTVScanInterpolate->setEnabled(scanenable);
_dirty = true;
@ -606,25 +571,15 @@ void VideoDialog::loadTVAdjustables(NTSCFilter::Preset preset)
instance().frameBuffer().tiaSurface().ntsc().getAdjustables(
adj, NTSCFilter::Preset(preset));
myTVSharp->setValue(adj.sharpness);
myTVSharpLabel->setValue(adj.sharpness);
myTVHue->setValue(adj.hue);
myTVHueLabel->setValue(adj.hue);
myTVRes->setValue(adj.resolution);
myTVResLabel->setValue(adj.resolution);
myTVArtifacts->setValue(adj.artifacts);
myTVArtifactsLabel->setValue(adj.artifacts);
myTVFringe->setValue(adj.fringing);
myTVFringeLabel->setValue(adj.fringing);
myTVBleed->setValue(adj.bleed);
myTVBleedLabel->setValue(adj.bleed);
myTVBright->setValue(adj.brightness);
myTVBrightLabel->setValue(adj.brightness);
myTVContrast->setValue(adj.contrast);
myTVContrastLabel->setValue(adj.contrast);
myTVSatur->setValue(adj.saturation);
myTVSaturLabel->setValue(adj.saturation);
myTVGamma->setValue(adj.gamma);
myTVGammaLabel->setValue(adj.gamma);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -642,48 +597,15 @@ void VideoDialog::handleCommand(CommandSender* sender, int cmd,
setDefaults();
break;
case kNAspectRatioChanged:
myNAspectRatioLabel->setValue(myNAspectRatio->getValue());
break;
case kPAspectRatioChanged:
myPAspectRatioLabel->setValue(myPAspectRatio->getValue());
break;
case kFrameRateChanged:
if(myFrameRate->getValue() == 0)
myFrameRateLabel->setLabel("Auto");
else
myFrameRateLabel->setValue(myFrameRate->getValue());
myFrameRate->setValueLabel("Auto");
break;
case kTVModeChanged:
handleTVModeChange(NTSCFilter::Preset(myTVMode->getSelectedTag().toInt()));
break;
case kTVSharpChanged: myTVSharpLabel->setValue(myTVSharp->getValue());
break;
case kTVHueChanged: myTVHueLabel->setValue(myTVHue->getValue());
break;
case kTVResChanged: myTVResLabel->setValue(myTVRes->getValue());
break;
case kTVArtifactsChanged: myTVArtifactsLabel->setValue(myTVArtifacts->getValue());
break;
case kTVFringeChanged: myTVFringeLabel->setValue(myTVFringe->getValue());
break;
case kTVBleedChanged: myTVBleedLabel->setValue(myTVBleed->getValue());
break;
case kTVBrightChanged: myTVBrightLabel->setValue(myTVBright->getValue());
break;
case kTVContrastChanged: myTVContrastLabel->setValue(myTVContrast->getValue());
break;
case kTVSaturChanged: myTVSaturLabel->setValue(myTVSatur->getValue());
break;
case kTVGammaChanged: myTVGammaLabel->setValue(myTVGamma->getValue());
break;
case kTVPhosLevelChanged: myTVPhosLevelLabel->setValue(myTVPhosLevel->getValue());
break;
case kTVScanIntenseChanged: myTVScanIntenseLabel->setValue(myTVScanIntense->getValue());
break;
case kCloneCompositeCmd: loadTVAdjustables(NTSCFilter::PRESET_COMPOSITE);
break;
case kCloneSvideoCmd: loadTVAdjustables(NTSCFilter::PRESET_SVIDEO);

View File

@ -57,12 +57,9 @@ class VideoDialog : public Dialog
PopUpWidget* myFrameTiming;
PopUpWidget* myTIAInterpolate;
SliderWidget* myNAspectRatio;
StaticTextWidget* myNAspectRatioLabel;
SliderWidget* myPAspectRatio;
StaticTextWidget* myPAspectRatioLabel;
SliderWidget* myFrameRate;
StaticTextWidget* myFrameRateLabel;
CheckboxWidget* myFullscreen;
//PopUpWidget* myFullScreenMode;
CheckboxWidget* myUseStretch;
@ -75,35 +72,23 @@ class VideoDialog : public Dialog
// TV effects adjustables (custom mode)
PopUpWidget* myTVMode;
SliderWidget* myTVSharp;
StaticTextWidget* myTVSharpLabel;
SliderWidget* myTVHue;
StaticTextWidget* myTVHueLabel;
SliderWidget* myTVRes;
StaticTextWidget* myTVResLabel;
SliderWidget* myTVArtifacts;
StaticTextWidget* myTVArtifactsLabel;
SliderWidget* myTVFringe;
StaticTextWidget* myTVFringeLabel;
SliderWidget* myTVBleed;
StaticTextWidget* myTVBleedLabel;
SliderWidget* myTVBright;
StaticTextWidget* myTVBrightLabel;
SliderWidget* myTVContrast;
StaticTextWidget* myTVContrastLabel;
SliderWidget* myTVSatur;
StaticTextWidget* myTVSaturLabel;
SliderWidget* myTVGamma;
StaticTextWidget* myTVGammaLabel;
// TV phosphor effect
PopUpWidget* myTVPhosphor;
SliderWidget* myTVPhosLevel;
StaticTextWidget* myTVPhosLevelLabel;
// TV scanline intensity and interpolation
StaticTextWidget* myTVScanLabel;
SliderWidget* myTVScanIntense;
StaticTextWidget* myTVScanIntenseLabel;
CheckboxWidget* myTVScanInterpolate;
// TV effects adjustables presets (custom mode)
@ -114,24 +99,9 @@ class VideoDialog : public Dialog
ButtonWidget* myCloneCustom;
enum {
kNAspectRatioChanged = 'VDan',
kPAspectRatioChanged = 'VDap',
kFrameRateChanged = 'VDfr',
kTVModeChanged = 'VDtv',
kTVSharpChanged = 'TVsh',
kTVHueChanged = 'TVhu',
kTVResChanged = 'TVrs',
kTVArtifactsChanged = 'TVar',
kTVFringeChanged = 'TVfr',
kTVBleedChanged = 'TVbl',
kTVBrightChanged = 'TVbr',
kTVContrastChanged = 'TVct',
kTVSaturChanged = 'TVsa',
kTVGammaChanged = 'TVga',
kTVScanIntenseChanged= 'TVsc',
kTVPhosLevelChanged = 'TVpl',
kCloneCompositeCmd = 'CLcp',
kCloneSvideoCmd = 'CLsv',