lsnes/ui/settings/video.cpp
2013-05-03 17:47:34 +03:00

107 lines
4.4 KiB
C++
Executable file

VideoSettings *videoSettings = 0;
VideoSlider::VideoSlider() {
append(name, { 75, 0 });
append(value, { 75, 0 });
append(slider, { ~0, 0 });
}
VideoSettings::VideoSettings() {
title.setFont(application->titleFont);
title.setText("Video Settings");
colorAdjustment.setFont(application->boldFont);
colorAdjustment.setText("Color adjustment:");
brightness.name.setText("Brightness:");
brightness.slider.setLength(201);
contrast.name.setText("Contrast:");
contrast.slider.setLength(201);
gamma.name.setText("Gamma:");
gamma.slider.setLength(101);
overscanAdjustment.setFont(application->boldFont);
overscanAdjustment.setText("Overscan mask:");
overscanHorizontal.name.setText("Horizontal:");
overscanHorizontal.slider.setLength(17);
overscanVertical.name.setText("Vertical:");
overscanVertical.slider.setLength(17);
fullScreenMode.setFont(application->boldFont);
fullScreenMode.setText("Fullscreen mode:");
fullScreen[0].setText("Center");
fullScreen[1].setText("Scale");
fullScreen[2].setText("Stretch");
RadioBox::group(fullScreen[0], fullScreen[1], fullScreen[2]);
compositorLabel.setText("Disable window compositor:");
compositorLabel.setFont(application->boldFont);
compositor[0].setText("Never");
compositor[1].setText("Fullscreen");
compositor[2].setText("Always");
RadioBox::group(compositor[0], compositor[1], compositor[2]);
append(title, { ~0, 0 }, 5);
append(colorAdjustment, { ~0, 0 }, 0);
append(brightness, { ~0, 0 }, 0);
append(contrast, { ~0, 0 }, 0);
append(gamma, { ~0, 0 }, 5);
append(overscanAdjustment, { ~0, 0 }, 0);
append(overscanHorizontal, { ~0, 0 }, 0);
append(overscanVertical, { ~0, 0 }, 5);
append(fullScreenMode, { ~0, 0 }, 0);
append(fullScreenLayout, { ~0, 0 }, 5);
fullScreenLayout.append(fullScreen[0], { ~0, 0 }, 5);
fullScreenLayout.append(fullScreen[1], { ~0, 0 }, 5);
fullScreenLayout.append(fullScreen[2], { ~0, 0 }, 0);
append(compositorLabel, { ~0, 0 }, 0);
append(compositorLayout, { ~0, 0 }, 0);
compositorLayout.append(compositor[0], { ~0, 0 }, 5);
compositorLayout.append(compositor[1], { ~0, 0 }, 5);
compositorLayout.append(compositor[2], { ~0, 0 }, 0);
brightness.slider.setPosition(config->video.brightness);
contrast.slider.setPosition(config->video.contrast);
gamma.slider.setPosition(config->video.gamma);
overscanHorizontal.slider.setPosition(config->video.maskOverscanHorizontal);
overscanVertical.slider.setPosition(config->video.maskOverscanVertical);
fullScreen[config->video.fullScreenMode].setChecked();
compositor[config->video.compositionMode].setChecked();
synchronize();
brightness.slider.onChange = contrast.slider.onChange = gamma.slider.onChange =
overscanHorizontal.slider.onChange = overscanVertical.slider.onChange =
{ &VideoSettings::synchronize, this };
fullScreen[0].onActivate = [&] { config->video.fullScreenMode = 0; };
fullScreen[1].onActivate = [&] { config->video.fullScreenMode = 1; };
fullScreen[2].onActivate = [&] { config->video.fullScreenMode = 2; };
compositor[0].onActivate = [&] {
config->video.compositionMode = 0;
compositor::enable(application->compositionEnable);
};
compositor[1].onActivate = [&] {
config->video.compositionMode = 1;
compositor::enable(application->compositionEnable && mainWindow->fullScreen() == false);
};
compositor[2].onActivate = [&] {
config->video.compositionMode = 2;
compositor::enable(false);
};
}
void VideoSettings::synchronize() {
config->video.brightness = brightness.slider.position();
config->video.contrast = contrast.slider.position();
config->video.gamma = gamma.slider.position();
config->video.maskOverscanHorizontal = overscanHorizontal.slider.position();
config->video.maskOverscanVertical = overscanVertical.slider.position();
brightness.value.setText({ config->video.brightness, "%" });
contrast.value.setText({ config->video.contrast, "%" });
gamma.value.setText({ 100 + config->video.gamma, "%" });
overscanHorizontal.value.setText({ config->video.maskOverscanHorizontal, "px" });
overscanVertical.value.setText({ config->video.maskOverscanVertical, "px" });
palette.update();
}