mirror of https://github.com/stella-emu/stella.git
refactored VideoDialog using enhanced SliderWidget
This commit is contained in:
parent
868df2cb22
commit
9c9abc125d
|
@ -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);
|
||||
|
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue