UI: Add Accessibility menu to settings
This change introduces an accessibility menu to settings, along with options for overriding the colors used by OBS in the mixer and in the preview to be more color blind friendly than the options provided by the current theme.
This commit is contained in:
parent
9299a3dbce
commit
77694d76e8
@ -247,6 +247,7 @@ target_sources(
|
||||
window-basic-properties.hpp
|
||||
window-basic-settings.cpp
|
||||
window-basic-settings.hpp
|
||||
window-basic-settings-a11y.cpp
|
||||
window-basic-settings-stream.cpp
|
||||
window-basic-source-select.cpp
|
||||
window-basic-source-select.hpp
|
||||
|
@ -1060,6 +1060,23 @@ Basic.Settings.Audio.LowLatencyBufferingWarning="Low latency audio buffering mod
|
||||
Basic.Settings.Audio.LowLatencyBufferingWarning.Title="Enable low latency audio buffering mode?"
|
||||
Basic.Settings.Audio.LowLatencyBufferingWarning.Confirm="Are you sure you want to enable low latency audio buffering mode?"
|
||||
|
||||
# basic mode 'accessibility' settings
|
||||
Basic.Settings.Accessibility="Accessibility"
|
||||
Basic.Settings.Accessibility.ColorOverrides="Use Different Colors"
|
||||
Basic.Settings.Accessibility.ColorOverrides.SelectRed="Source Border (Selection)"
|
||||
Basic.Settings.Accessibility.ColorOverrides.SelectGreen="Source Border (Crop)"
|
||||
Basic.Settings.Accessibility.ColorOverrides.SelectBlue="Source Border (Hover)"
|
||||
Basic.Settings.Accessibility.ColorOverrides.MixerGreen="Mixer Volume Band (-60 to -20dB)"
|
||||
Basic.Settings.Accessibility.ColorOverrides.MixerYellow="Mixer Volume Band (-20 to -9dB)"
|
||||
Basic.Settings.Accessibility.ColorOverrides.MixerRed="Mixer Volume Band (-9 to 0dB)"
|
||||
Basic.Settings.Accessibility.ColorOverrides.MixerGreenActive="Mixer Volume Band (-60 to -20dB) (active)"
|
||||
Basic.Settings.Accessibility.ColorOverrides.MixerYellowActive="Mixer Volume Band (-20 to -9dB) (active)"
|
||||
Basic.Settings.Accessibility.ColorOverrides.MixerRedActive="Mixer Volume Band (-9 to 0dB) (active)"
|
||||
Basic.Settings.Accessibility.ColorOverrides.Preset="Color Preset"
|
||||
Basic.Settings.Accessibility.ColorOverrides.Preset.Default="Default"
|
||||
Basic.Settings.Accessibility.ColorOverrides.Preset.Custom="Custom"
|
||||
Basic.Settings.Accessibility.ColorOverrides.Preset.ColorBlind1="Color Blind Alternative"
|
||||
|
||||
# basic mode 'advanced' settings
|
||||
Basic.Settings.Advanced="Advanced"
|
||||
Basic.Settings.Advanced.General.ConfirmOnExit="Show active outputs warning on exit"
|
||||
|
@ -737,6 +737,7 @@ OBSBasicSettings {
|
||||
qproperty-audioIcon: url(./Dark/settings/audio.svg);
|
||||
qproperty-videoIcon: url(./Dark/settings/video.svg);
|
||||
qproperty-hotkeysIcon: url(./Dark/settings/hotkeys.svg);
|
||||
qproperty-accessibilityIcon: url(./Dark/settings/accessibility.svg);
|
||||
qproperty-advancedIcon: url(./Dark/settings/advanced.svg);
|
||||
}
|
||||
|
||||
|
1
UI/data/themes/Dark/settings/accessibility.svg
Normal file
1
UI/data/themes/Dark/settings/accessibility.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><g fill="#d2d2d2"><path d="M64,0C28.65,0,0,28.65,0,64c0,35.35,28.65,64,64,64s64-28.65,64-64C128,28.65,99.35,0,64,0z M64,17c5.52,0,10,4.48,10,10c0,5.52-4.48,10-10,10s-10-4.48-10-10C54,21.48,58.48,17,64,17z M92.86,42.33L71,54.95c0,0.02,0,0.03,0,0.05v21.77l15.33,26.55c1.38,2.39,0.56,5.45-1.83,6.83c-2.39,1.38-5.45,0.56-6.83-1.83L64,84.64l-13.67,23.68c-1.38,2.39-4.44,3.21-6.83,1.83c-2.39-1.38-3.21-4.44-1.83-6.83L57,76.77V55c0-0.02,0-0.03,0-0.05L35.14,42.33c-2.39-1.38-3.21-4.44-1.83-6.83c1.38-2.39,4.44-3.21,6.83-1.83L64,47.44l23.86-13.77c2.39-1.38,5.45-0.56,6.83,1.83C96.07,37.89,95.25,40.95,92.86,42.33z"/></g></svg>
|
After Width: | Height: | Size: 694 B |
@ -1022,6 +1022,7 @@ OBSBasicSettings {
|
||||
qproperty-audioIcon: url(./Dark/settings/audio.svg);
|
||||
qproperty-videoIcon: url(./Dark/settings/video.svg);
|
||||
qproperty-hotkeysIcon: url(./Dark/settings/hotkeys.svg);
|
||||
qproperty-accessibilityIcon: url(./Dark/settings/accessibility.svg);
|
||||
qproperty-advancedIcon: url(./Dark/settings/advanced.svg);
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
1
UI/forms/images/settings/accessibility.svg
Normal file
1
UI/forms/images/settings/accessibility.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><g fill="#000000"><path d="M64,0C28.65,0,0,28.65,0,64c0,35.35,28.65,64,64,64s64-28.65,64-64C128,28.65,99.35,0,64,0z M64,17c5.52,0,10,4.48,10,10c0,5.52-4.48,10-10,10s-10-4.48-10-10C54,21.48,58.48,17,64,17z M92.86,42.33L71,54.95c0,0.02,0,0.03,0,0.05v21.77l15.33,26.55c1.38,2.39,0.56,5.45-1.83,6.83c-2.39,1.38-5.45,0.56-6.83-1.83L64,84.64l-13.67,23.68c-1.38,2.39-4.44,3.21-6.83,1.83c-2.39-1.38-3.21-4.44-1.83-6.83L57,76.77V55c0-0.02,0-0.03,0-0.05L35.14,42.33c-2.39-1.38-3.21-4.44-1.83-6.83c1.38-2.39,4.44-3.21,6.83-1.83L64,47.44l23.86-13.77c2.39-1.38,5.45-0.56,6.83,1.83C96.07,37.89,95.25,40.95,92.86,42.33z"/></g></svg>
|
After Width: | Height: | Size: 694 B |
@ -70,5 +70,6 @@
|
||||
<file>images/settings/audio.svg</file>
|
||||
<file>images/settings/general.svg</file>
|
||||
<file>images/settings/hotkeys.svg</file>
|
||||
<file>images/settings/accessibility.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -336,9 +336,18 @@ VolControl::~VolControl()
|
||||
contextMenu->close();
|
||||
}
|
||||
|
||||
static inline QColor color_from_int(long long val)
|
||||
{
|
||||
QColor color(val & 0xff, (val >> 8) & 0xff, (val >> 16) & 0xff,
|
||||
(val >> 24) & 0xff);
|
||||
color.setAlpha(255);
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
QColor VolumeMeter::getBackgroundNominalColor() const
|
||||
{
|
||||
return backgroundNominalColor;
|
||||
return p_backgroundNominalColor;
|
||||
}
|
||||
|
||||
QColor VolumeMeter::getBackgroundNominalColorDisabled() const
|
||||
@ -348,7 +357,15 @@ QColor VolumeMeter::getBackgroundNominalColorDisabled() const
|
||||
|
||||
void VolumeMeter::setBackgroundNominalColor(QColor c)
|
||||
{
|
||||
backgroundNominalColor = std::move(c);
|
||||
p_backgroundNominalColor = std::move(c);
|
||||
|
||||
if (config_get_bool(GetGlobalConfig(), "Accessibility",
|
||||
"OverrideColors")) {
|
||||
backgroundNominalColor = color_from_int(config_get_int(
|
||||
GetGlobalConfig(), "Accessibility", "MixerGreen"));
|
||||
} else {
|
||||
backgroundNominalColor = p_backgroundNominalColor;
|
||||
}
|
||||
}
|
||||
|
||||
void VolumeMeter::setBackgroundNominalColorDisabled(QColor c)
|
||||
@ -358,7 +375,7 @@ void VolumeMeter::setBackgroundNominalColorDisabled(QColor c)
|
||||
|
||||
QColor VolumeMeter::getBackgroundWarningColor() const
|
||||
{
|
||||
return backgroundWarningColor;
|
||||
return p_backgroundWarningColor;
|
||||
}
|
||||
|
||||
QColor VolumeMeter::getBackgroundWarningColorDisabled() const
|
||||
@ -368,7 +385,15 @@ QColor VolumeMeter::getBackgroundWarningColorDisabled() const
|
||||
|
||||
void VolumeMeter::setBackgroundWarningColor(QColor c)
|
||||
{
|
||||
backgroundWarningColor = std::move(c);
|
||||
p_backgroundWarningColor = std::move(c);
|
||||
|
||||
if (config_get_bool(GetGlobalConfig(), "Accessibility",
|
||||
"OverrideColors")) {
|
||||
backgroundWarningColor = color_from_int(config_get_int(
|
||||
GetGlobalConfig(), "Accessibility", "MixerYellow"));
|
||||
} else {
|
||||
backgroundWarningColor = p_backgroundWarningColor;
|
||||
}
|
||||
}
|
||||
|
||||
void VolumeMeter::setBackgroundWarningColorDisabled(QColor c)
|
||||
@ -378,7 +403,7 @@ void VolumeMeter::setBackgroundWarningColorDisabled(QColor c)
|
||||
|
||||
QColor VolumeMeter::getBackgroundErrorColor() const
|
||||
{
|
||||
return backgroundErrorColor;
|
||||
return p_backgroundErrorColor;
|
||||
}
|
||||
|
||||
QColor VolumeMeter::getBackgroundErrorColorDisabled() const
|
||||
@ -388,7 +413,15 @@ QColor VolumeMeter::getBackgroundErrorColorDisabled() const
|
||||
|
||||
void VolumeMeter::setBackgroundErrorColor(QColor c)
|
||||
{
|
||||
backgroundErrorColor = std::move(c);
|
||||
p_backgroundErrorColor = std::move(c);
|
||||
|
||||
if (config_get_bool(GetGlobalConfig(), "Accessibility",
|
||||
"OverrideColors")) {
|
||||
backgroundErrorColor = color_from_int(config_get_int(
|
||||
GetGlobalConfig(), "Accessibility", "MixerRed"));
|
||||
} else {
|
||||
backgroundErrorColor = p_backgroundErrorColor;
|
||||
}
|
||||
}
|
||||
|
||||
void VolumeMeter::setBackgroundErrorColorDisabled(QColor c)
|
||||
@ -398,7 +431,7 @@ void VolumeMeter::setBackgroundErrorColorDisabled(QColor c)
|
||||
|
||||
QColor VolumeMeter::getForegroundNominalColor() const
|
||||
{
|
||||
return foregroundNominalColor;
|
||||
return p_foregroundNominalColor;
|
||||
}
|
||||
|
||||
QColor VolumeMeter::getForegroundNominalColorDisabled() const
|
||||
@ -408,7 +441,16 @@ QColor VolumeMeter::getForegroundNominalColorDisabled() const
|
||||
|
||||
void VolumeMeter::setForegroundNominalColor(QColor c)
|
||||
{
|
||||
foregroundNominalColor = std::move(c);
|
||||
p_foregroundNominalColor = std::move(c);
|
||||
|
||||
if (config_get_bool(GetGlobalConfig(), "Accessibility",
|
||||
"OverrideColors")) {
|
||||
foregroundNominalColor = color_from_int(
|
||||
config_get_int(GetGlobalConfig(), "Accessibility",
|
||||
"MixerGreenActive"));
|
||||
} else {
|
||||
foregroundNominalColor = p_foregroundNominalColor;
|
||||
}
|
||||
}
|
||||
|
||||
void VolumeMeter::setForegroundNominalColorDisabled(QColor c)
|
||||
@ -418,7 +460,7 @@ void VolumeMeter::setForegroundNominalColorDisabled(QColor c)
|
||||
|
||||
QColor VolumeMeter::getForegroundWarningColor() const
|
||||
{
|
||||
return foregroundWarningColor;
|
||||
return p_foregroundWarningColor;
|
||||
}
|
||||
|
||||
QColor VolumeMeter::getForegroundWarningColorDisabled() const
|
||||
@ -428,7 +470,16 @@ QColor VolumeMeter::getForegroundWarningColorDisabled() const
|
||||
|
||||
void VolumeMeter::setForegroundWarningColor(QColor c)
|
||||
{
|
||||
foregroundWarningColor = std::move(c);
|
||||
p_foregroundWarningColor = std::move(c);
|
||||
|
||||
if (config_get_bool(GetGlobalConfig(), "Accessibility",
|
||||
"OverrideColors")) {
|
||||
foregroundWarningColor = color_from_int(
|
||||
config_get_int(GetGlobalConfig(), "Accessibility",
|
||||
"MixerYellowActive"));
|
||||
} else {
|
||||
foregroundWarningColor = p_foregroundWarningColor;
|
||||
}
|
||||
}
|
||||
|
||||
void VolumeMeter::setForegroundWarningColorDisabled(QColor c)
|
||||
@ -438,7 +489,7 @@ void VolumeMeter::setForegroundWarningColorDisabled(QColor c)
|
||||
|
||||
QColor VolumeMeter::getForegroundErrorColor() const
|
||||
{
|
||||
return foregroundErrorColor;
|
||||
return p_foregroundErrorColor;
|
||||
}
|
||||
|
||||
QColor VolumeMeter::getForegroundErrorColorDisabled() const
|
||||
@ -448,7 +499,15 @@ QColor VolumeMeter::getForegroundErrorColorDisabled() const
|
||||
|
||||
void VolumeMeter::setForegroundErrorColor(QColor c)
|
||||
{
|
||||
foregroundErrorColor = std::move(c);
|
||||
p_foregroundErrorColor = std::move(c);
|
||||
|
||||
if (config_get_bool(GetGlobalConfig(), "Accessibility",
|
||||
"OverrideColors")) {
|
||||
foregroundErrorColor = color_from_int(config_get_int(
|
||||
GetGlobalConfig(), "Accessibility", "MixerRedActive"));
|
||||
} else {
|
||||
foregroundErrorColor = p_foregroundErrorColor;
|
||||
}
|
||||
}
|
||||
|
||||
void VolumeMeter::setForegroundErrorColorDisabled(QColor c)
|
||||
@ -518,6 +577,20 @@ void VolumeMeter::setMeterFontScaling(qreal v)
|
||||
recalculateLayout = true;
|
||||
}
|
||||
|
||||
void VolControl::refreshColors()
|
||||
{
|
||||
volMeter->setBackgroundNominalColor(
|
||||
volMeter->getBackgroundNominalColor());
|
||||
volMeter->setBackgroundWarningColor(
|
||||
volMeter->getBackgroundWarningColor());
|
||||
volMeter->setBackgroundErrorColor(volMeter->getBackgroundErrorColor());
|
||||
volMeter->setForegroundNominalColor(
|
||||
volMeter->getForegroundNominalColor());
|
||||
volMeter->setForegroundWarningColor(
|
||||
volMeter->getForegroundWarningColor());
|
||||
volMeter->setForegroundErrorColor(volMeter->getForegroundErrorColor());
|
||||
}
|
||||
|
||||
qreal VolumeMeter::getMinimumLevel() const
|
||||
{
|
||||
return minimumLevel;
|
||||
|
@ -168,6 +168,13 @@ private:
|
||||
qreal peakHoldDuration;
|
||||
qreal inputPeakHoldDuration;
|
||||
|
||||
QColor p_backgroundNominalColor;
|
||||
QColor p_backgroundWarningColor;
|
||||
QColor p_backgroundErrorColor;
|
||||
QColor p_foregroundNominalColor;
|
||||
QColor p_foregroundWarningColor;
|
||||
QColor p_foregroundErrorColor;
|
||||
|
||||
uint64_t lastRedrawTime = 0;
|
||||
int channels = 0;
|
||||
bool clipping = false;
|
||||
@ -322,4 +329,6 @@ public:
|
||||
|
||||
void EnableSlider(bool enable);
|
||||
inline void SetContextMenu(QMenu *cm) { contextMenu = cm; }
|
||||
|
||||
void refreshColors();
|
||||
};
|
||||
|
@ -623,6 +623,13 @@ void OBSBasic::ClearVolumeControls()
|
||||
volumes.clear();
|
||||
}
|
||||
|
||||
void OBSBasic::RefreshVolumeColors()
|
||||
{
|
||||
for (VolControl *vol : volumes) {
|
||||
vol->refreshColors();
|
||||
}
|
||||
}
|
||||
|
||||
obs_data_array_t *OBSBasic::SaveSceneListOrder()
|
||||
{
|
||||
obs_data_array_t *sceneOrder = obs_data_array_create();
|
||||
@ -10099,3 +10106,42 @@ void OBSBasic::SetDisplayAffinity(QWindow *window)
|
||||
UNUSED_PARAMETER(hideFromCapture);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline QColor color_from_int(long long val)
|
||||
{
|
||||
return QColor(val & 0xff, (val >> 8) & 0xff, (val >> 16) & 0xff,
|
||||
(val >> 24) & 0xff);
|
||||
}
|
||||
|
||||
QColor OBSBasic::GetSelectionColor() const
|
||||
{
|
||||
if (config_get_bool(GetGlobalConfig(), "Accessibility",
|
||||
"OverrideColors")) {
|
||||
return color_from_int(config_get_int(
|
||||
GetGlobalConfig(), "Accessibility", "SelectRed"));
|
||||
} else {
|
||||
return QColor::fromRgb(255, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
QColor OBSBasic::GetCropColor() const
|
||||
{
|
||||
if (config_get_bool(GetGlobalConfig(), "Accessibility",
|
||||
"OverrideColors")) {
|
||||
return color_from_int(config_get_int(
|
||||
GetGlobalConfig(), "Accessibility", "SelectGreen"));
|
||||
} else {
|
||||
return QColor::fromRgb(0, 255, 0);
|
||||
}
|
||||
}
|
||||
|
||||
QColor OBSBasic::GetHoverColor() const
|
||||
{
|
||||
if (config_get_bool(GetGlobalConfig(), "Accessibility",
|
||||
"OverrideColors")) {
|
||||
return color_from_int(config_get_int(
|
||||
GetGlobalConfig(), "Accessibility", "SelectBlue"));
|
||||
} else {
|
||||
return QColor::fromRgb(0, 127, 255);
|
||||
}
|
||||
}
|
||||
|
@ -624,6 +624,14 @@ private:
|
||||
void CenterSelectedSceneItems(const CenterType ¢erType);
|
||||
void ShowMissingFilesDialog(obs_missing_files_t *files);
|
||||
|
||||
QColor selectionColor;
|
||||
QColor cropColor;
|
||||
QColor hoverColor;
|
||||
|
||||
QColor GetSelectionColor() const;
|
||||
QColor GetCropColor() const;
|
||||
QColor GetHoverColor() const;
|
||||
|
||||
public slots:
|
||||
void DeferSaveBegin();
|
||||
void DeferSaveEnd();
|
||||
@ -866,6 +874,8 @@ public:
|
||||
void AddVCamButton();
|
||||
void ResetOutputs();
|
||||
|
||||
void RefreshVolumeColors();
|
||||
|
||||
void ResetAudioDevice(const char *sourceId, const char *deviceId,
|
||||
const char *deviceDesc, int channel);
|
||||
|
||||
|
@ -1829,13 +1829,22 @@ bool OBSBasicPreview::DrawSelectedItem(obs_scene_t *scene,
|
||||
{{{1.f, 1.f, 0.f}}},
|
||||
};
|
||||
|
||||
main->GetCameraIcon();
|
||||
|
||||
QColor selColor = main->GetSelectionColor();
|
||||
QColor cropColor = main->GetCropColor();
|
||||
QColor hoverColor = main->GetHoverColor();
|
||||
|
||||
vec4 red;
|
||||
vec4 green;
|
||||
vec4 blue;
|
||||
|
||||
vec4_set(&red, 1.0f, 0.0f, 0.0f, 1.0f);
|
||||
vec4_set(&green, 0.0f, 1.0f, 0.0f, 1.0f);
|
||||
vec4_set(&blue, 0.0f, 0.5f, 1.0f, 1.0f);
|
||||
vec4_set(&red, selColor.redF(), selColor.greenF(), selColor.blueF(),
|
||||
1.0f);
|
||||
vec4_set(&green, cropColor.redF(), cropColor.greenF(),
|
||||
cropColor.blueF(), 1.0f);
|
||||
vec4_set(&blue, hoverColor.redF(), hoverColor.greenF(),
|
||||
hoverColor.blueF(), 1.0f);
|
||||
|
||||
bool visible = std::all_of(
|
||||
std::begin(bounds), std::end(bounds), [&](const vec3 &b) {
|
||||
@ -1869,6 +1878,8 @@ bool OBSBasicPreview::DrawSelectedItem(obs_scene_t *scene,
|
||||
gs_effect_t *eff = gs_get_effect();
|
||||
gs_eparam_t *colParam = gs_effect_get_param_by_name(eff, "color");
|
||||
|
||||
gs_effect_set_vec4(colParam, &red);
|
||||
|
||||
if (info.bounds_type == OBS_BOUNDS_NONE && crop_enabled(&crop)) {
|
||||
#define DRAW_SIDE(side, x1, y1, x2, y2) \
|
||||
if (hovered && !selected) { \
|
||||
@ -2003,10 +2014,6 @@ void OBSBasicPreview::DrawSceneEditing()
|
||||
gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
|
||||
gs_technique_t *tech = gs_effect_get_technique(solid, "Solid");
|
||||
|
||||
vec4 color;
|
||||
vec4_set(&color, 1.0f, 0.0f, 0.0f, 1.0f);
|
||||
gs_effect_set_vec4(gs_effect_get_param_by_name(solid, "color"), &color);
|
||||
|
||||
gs_technique_begin(tech);
|
||||
gs_technique_begin_pass(tech, 0);
|
||||
|
||||
|
398
UI/window-basic-settings-a11y.cpp
Normal file
398
UI/window-basic-settings-a11y.cpp
Normal file
@ -0,0 +1,398 @@
|
||||
#include "window-basic-settings.hpp"
|
||||
#include "window-basic-main.hpp"
|
||||
#include "obs-frontend-api.h"
|
||||
#include "obs-app.hpp"
|
||||
#include "qt-wrappers.hpp"
|
||||
#include <QColorDialog>
|
||||
|
||||
#define I18nStr(str) QTStr(str).toStdString().c_str()
|
||||
|
||||
enum ColorPreset {
|
||||
COLOR_PRESET_DEFAULT,
|
||||
COLOR_PRESET_COLOR_BLIND_1,
|
||||
COLOR_PRESET_CUSTOM = 99,
|
||||
};
|
||||
|
||||
static inline bool WidgetChanged(QWidget *widget)
|
||||
{
|
||||
return widget->property("changed").toBool();
|
||||
}
|
||||
|
||||
static inline QColor color_from_int(long long val)
|
||||
{
|
||||
return QColor(val & 0xff, (val >> 8) & 0xff, (val >> 16) & 0xff,
|
||||
(val >> 24) & 0xff);
|
||||
}
|
||||
|
||||
static inline long long color_to_int(QColor color)
|
||||
{
|
||||
auto shift = [&](unsigned val, int shift) {
|
||||
return ((val & 0xff) << shift);
|
||||
};
|
||||
|
||||
return shift(color.red(), 0) | shift(color.green(), 8) |
|
||||
shift(color.blue(), 16) | shift(color.alpha(), 24);
|
||||
}
|
||||
|
||||
QColor OBSBasicSettings::GetColor(uint32_t colorVal, QString label)
|
||||
{
|
||||
QColorDialog::ColorDialogOptions options;
|
||||
|
||||
#ifndef _WIN32
|
||||
options |= QColorDialog::DontUseNativeDialog;
|
||||
#endif
|
||||
|
||||
QColor color = color_from_int(colorVal);
|
||||
|
||||
return QColorDialog::getColor(color, this, label, options);
|
||||
}
|
||||
|
||||
void OBSBasicSettings::LoadA11ySettings(bool presetChange)
|
||||
{
|
||||
config_t *config = GetGlobalConfig();
|
||||
|
||||
if (!presetChange) {
|
||||
preset = config_get_int(config, "Accessibility", "ColorPreset");
|
||||
|
||||
bool block = ui->colorPreset->blockSignals(true);
|
||||
ui->colorPreset->setCurrentIndex(std::min(
|
||||
preset, (uint32_t)ui->colorPreset->count() - 1));
|
||||
ui->colorPreset->blockSignals(block);
|
||||
|
||||
bool checked = config_get_bool(config, "Accessibility",
|
||||
"OverrideColors");
|
||||
|
||||
ui->colorsGroupBox->setChecked(checked);
|
||||
}
|
||||
|
||||
if (preset == COLOR_PRESET_DEFAULT) {
|
||||
ResetDefaultColors();
|
||||
SetDefaultColors();
|
||||
} else if (preset == COLOR_PRESET_COLOR_BLIND_1) {
|
||||
ResetDefaultColors();
|
||||
|
||||
mixerGreenActive = 0x742E94;
|
||||
mixerGreen = 0x4A1A60;
|
||||
mixerYellowActive = 0x3349F9;
|
||||
mixerYellow = 0x1F2C97;
|
||||
mixerRedActive = 0xBEAC63;
|
||||
mixerRed = 0x675B28;
|
||||
|
||||
selectRed = 0x3349F9;
|
||||
selectGreen = 0xFF56C9;
|
||||
selectBlue = 0xB09B44;
|
||||
|
||||
SetDefaultColors();
|
||||
} else if (preset == COLOR_PRESET_CUSTOM) {
|
||||
SetDefaultColors();
|
||||
|
||||
selectRed =
|
||||
config_get_int(config, "Accessibility", "SelectRed");
|
||||
selectGreen =
|
||||
config_get_int(config, "Accessibility", "SelectGreen");
|
||||
selectBlue =
|
||||
config_get_int(config, "Accessibility", "SelectBlue");
|
||||
|
||||
mixerGreen =
|
||||
config_get_int(config, "Accessibility", "MixerGreen");
|
||||
mixerYellow =
|
||||
config_get_int(config, "Accessibility", "MixerYellow");
|
||||
mixerRed = config_get_int(config, "Accessibility", "MixerRed");
|
||||
|
||||
mixerGreenActive = config_get_int(config, "Accessibility",
|
||||
"MixerGreenActive");
|
||||
mixerYellowActive = config_get_int(config, "Accessibility",
|
||||
"MixerYellowActive");
|
||||
mixerRedActive = config_get_int(config, "Accessibility",
|
||||
"MixerRedActive");
|
||||
}
|
||||
|
||||
UpdateA11yColors();
|
||||
}
|
||||
|
||||
void OBSBasicSettings::SaveA11ySettings()
|
||||
{
|
||||
config_t *config = GetGlobalConfig();
|
||||
|
||||
config_set_bool(config, "Accessibility", "OverrideColors",
|
||||
ui->colorsGroupBox->isChecked());
|
||||
config_set_int(config, "Accessibility", "ColorPreset", preset);
|
||||
|
||||
config_set_int(config, "Accessibility", "SelectRed", selectRed);
|
||||
config_set_int(config, "Accessibility", "SelectGreen", selectGreen);
|
||||
config_set_int(config, "Accessibility", "SelectBlue", selectBlue);
|
||||
config_set_int(config, "Accessibility", "MixerGreen", mixerGreen);
|
||||
config_set_int(config, "Accessibility", "MixerYellow", mixerYellow);
|
||||
config_set_int(config, "Accessibility", "MixerRed", mixerRed);
|
||||
config_set_int(config, "Accessibility", "MixerGreenActive",
|
||||
mixerGreenActive);
|
||||
config_set_int(config, "Accessibility", "MixerYellowActive",
|
||||
mixerYellowActive);
|
||||
config_set_int(config, "Accessibility", "MixerRedActive",
|
||||
mixerRedActive);
|
||||
|
||||
main->RefreshVolumeColors();
|
||||
}
|
||||
|
||||
#define SetStyle(label, colorVal) \
|
||||
color = color_from_int(colorVal); \
|
||||
color.setAlpha(255); \
|
||||
palette = QPalette(color); \
|
||||
label->setFrameStyle(QFrame::Sunken | QFrame::Panel); \
|
||||
label->setText(color.name(QColor::HexRgb)); \
|
||||
label->setPalette(palette); \
|
||||
label->setStyleSheet(QString("background-color: %1; color: %2;") \
|
||||
.arg(palette.color(QPalette::Window) \
|
||||
.name(QColor::HexRgb)) \
|
||||
.arg(palette.color(QPalette::WindowText) \
|
||||
.name(QColor::HexRgb))); \
|
||||
label->setAutoFillBackground(true); \
|
||||
label->setAlignment(Qt::AlignCenter);
|
||||
|
||||
void OBSBasicSettings::UpdateA11yColors()
|
||||
{
|
||||
QPalette palette;
|
||||
QColor color;
|
||||
|
||||
SetStyle(ui->color1, selectRed);
|
||||
SetStyle(ui->color2, selectGreen);
|
||||
SetStyle(ui->color3, selectBlue);
|
||||
SetStyle(ui->color4, mixerGreen);
|
||||
SetStyle(ui->color5, mixerYellow);
|
||||
SetStyle(ui->color6, mixerRed);
|
||||
SetStyle(ui->color7, mixerGreenActive);
|
||||
SetStyle(ui->color8, mixerYellowActive);
|
||||
SetStyle(ui->color9, mixerRedActive);
|
||||
}
|
||||
|
||||
void OBSBasicSettings::SetDefaultColors()
|
||||
{
|
||||
config_t *config = GetGlobalConfig();
|
||||
config_set_default_int(config, "Accessibility", "SelectRed", selectRed);
|
||||
config_set_default_int(config, "Accessibility", "SelectGreen",
|
||||
selectGreen);
|
||||
config_set_default_int(config, "Accessibility", "SelectBlue",
|
||||
selectBlue);
|
||||
|
||||
config_set_default_int(config, "Accessibility", "MixerGreen",
|
||||
mixerGreen);
|
||||
config_set_default_int(config, "Accessibility", "MixerYellow",
|
||||
mixerYellow);
|
||||
config_set_default_int(config, "Accessibility", "MixerRed", mixerRed);
|
||||
|
||||
config_set_default_int(config, "Accessibility", "MixerGreenActive",
|
||||
mixerGreenActive);
|
||||
config_set_default_int(config, "Accessibility", "MixerYellowActive",
|
||||
mixerYellowActive);
|
||||
config_set_default_int(config, "Accessibility", "MixerRedActive",
|
||||
mixerRedActive);
|
||||
}
|
||||
|
||||
void OBSBasicSettings::ResetDefaultColors()
|
||||
{
|
||||
selectRed = 0x0000FF;
|
||||
selectGreen = 0x00FF00;
|
||||
selectBlue = 0xFF7F00;
|
||||
mixerGreen = 0x267f26;
|
||||
mixerYellow = 0x267f7f;
|
||||
mixerRed = 0x26267f;
|
||||
mixerGreenActive = 0x4cff4c;
|
||||
mixerYellowActive = 0x4cffff;
|
||||
mixerRedActive = 0x4c4cff;
|
||||
}
|
||||
|
||||
void OBSBasicSettings::on_colorPreset_currentIndexChanged(int idx)
|
||||
{
|
||||
preset = idx == ui->colorPreset->count() - 1 ? COLOR_PRESET_CUSTOM
|
||||
: idx;
|
||||
LoadA11ySettings(true);
|
||||
}
|
||||
|
||||
void OBSBasicSettings::on_choose1_clicked()
|
||||
{
|
||||
QColor color = GetColor(
|
||||
selectRed,
|
||||
QTStr("Basic.Settings.Accessibility.ColorOverrides.SelectRed"));
|
||||
|
||||
if (!color.isValid())
|
||||
return;
|
||||
|
||||
selectRed = color_to_int(color);
|
||||
|
||||
preset = COLOR_PRESET_CUSTOM;
|
||||
bool block = ui->colorPreset->blockSignals(true);
|
||||
ui->colorPreset->setCurrentIndex(ui->colorPreset->count() - 1);
|
||||
ui->colorPreset->blockSignals(block);
|
||||
|
||||
A11yChanged();
|
||||
|
||||
UpdateA11yColors();
|
||||
}
|
||||
|
||||
void OBSBasicSettings::on_choose2_clicked()
|
||||
{
|
||||
QColor color = GetColor(
|
||||
selectGreen,
|
||||
QTStr("Basic.Settings.Accessibility.ColorOverrides.SelectGreen"));
|
||||
|
||||
if (!color.isValid())
|
||||
return;
|
||||
|
||||
selectGreen = color_to_int(color);
|
||||
|
||||
preset = COLOR_PRESET_CUSTOM;
|
||||
bool block = ui->colorPreset->blockSignals(true);
|
||||
ui->colorPreset->setCurrentIndex(ui->colorPreset->count() - 1);
|
||||
ui->colorPreset->blockSignals(block);
|
||||
|
||||
A11yChanged();
|
||||
|
||||
UpdateA11yColors();
|
||||
}
|
||||
|
||||
void OBSBasicSettings::on_choose3_clicked()
|
||||
{
|
||||
QColor color = GetColor(
|
||||
selectBlue,
|
||||
QTStr("Basic.Settings.Accessibility.ColorOverrides.SelectBlue"));
|
||||
|
||||
if (!color.isValid())
|
||||
return;
|
||||
|
||||
selectBlue = color_to_int(color);
|
||||
|
||||
preset = COLOR_PRESET_CUSTOM;
|
||||
bool block = ui->colorPreset->blockSignals(true);
|
||||
ui->colorPreset->setCurrentIndex(ui->colorPreset->count() - 1);
|
||||
ui->colorPreset->blockSignals(block);
|
||||
|
||||
A11yChanged();
|
||||
|
||||
UpdateA11yColors();
|
||||
}
|
||||
|
||||
void OBSBasicSettings::on_choose4_clicked()
|
||||
{
|
||||
QColor color = GetColor(
|
||||
mixerGreen,
|
||||
QTStr("Basic.Settings.Accessibility.ColorOverrides.MixerGreen"));
|
||||
|
||||
if (!color.isValid())
|
||||
return;
|
||||
|
||||
mixerGreen = color_to_int(color);
|
||||
|
||||
preset = COLOR_PRESET_CUSTOM;
|
||||
bool block = ui->colorPreset->blockSignals(true);
|
||||
ui->colorPreset->setCurrentIndex(ui->colorPreset->count() - 1);
|
||||
ui->colorPreset->blockSignals(block);
|
||||
|
||||
A11yChanged();
|
||||
|
||||
UpdateA11yColors();
|
||||
}
|
||||
|
||||
void OBSBasicSettings::on_choose5_clicked()
|
||||
{
|
||||
QColor color = GetColor(
|
||||
mixerYellow,
|
||||
QTStr("Basic.Settings.Accessibility.ColorOverrides.MixerYellow"));
|
||||
|
||||
if (!color.isValid())
|
||||
return;
|
||||
|
||||
mixerYellow = color_to_int(color);
|
||||
|
||||
preset = COLOR_PRESET_CUSTOM;
|
||||
bool block = ui->colorPreset->blockSignals(true);
|
||||
ui->colorPreset->setCurrentIndex(ui->colorPreset->count() - 1);
|
||||
ui->colorPreset->blockSignals(block);
|
||||
|
||||
A11yChanged();
|
||||
|
||||
UpdateA11yColors();
|
||||
}
|
||||
|
||||
void OBSBasicSettings::on_choose6_clicked()
|
||||
{
|
||||
QColor color = GetColor(
|
||||
mixerRed,
|
||||
QTStr("Basic.Settings.Accessibility.ColorOverrides.MixerRed"));
|
||||
|
||||
if (!color.isValid())
|
||||
return;
|
||||
|
||||
mixerRed = color_to_int(color);
|
||||
|
||||
preset = COLOR_PRESET_CUSTOM;
|
||||
bool block = ui->colorPreset->blockSignals(true);
|
||||
ui->colorPreset->setCurrentIndex(ui->colorPreset->count() - 1);
|
||||
ui->colorPreset->blockSignals(block);
|
||||
|
||||
A11yChanged();
|
||||
|
||||
UpdateA11yColors();
|
||||
}
|
||||
|
||||
void OBSBasicSettings::on_choose7_clicked()
|
||||
{
|
||||
QColor color = GetColor(
|
||||
mixerGreenActive,
|
||||
QTStr("Basic.Settings.Accessibility.ColorOverrides.MixerGreenActive"));
|
||||
|
||||
if (!color.isValid())
|
||||
return;
|
||||
|
||||
mixerGreenActive = color_to_int(color);
|
||||
|
||||
preset = COLOR_PRESET_CUSTOM;
|
||||
bool block = ui->colorPreset->blockSignals(true);
|
||||
ui->colorPreset->setCurrentIndex(ui->colorPreset->count() - 1);
|
||||
ui->colorPreset->blockSignals(block);
|
||||
|
||||
A11yChanged();
|
||||
|
||||
UpdateA11yColors();
|
||||
}
|
||||
|
||||
void OBSBasicSettings::on_choose8_clicked()
|
||||
{
|
||||
QColor color = GetColor(
|
||||
mixerYellowActive,
|
||||
QTStr("Basic.Settings.Accessibility.ColorOverrides.MixerYellowActive"));
|
||||
|
||||
if (!color.isValid())
|
||||
return;
|
||||
|
||||
mixerYellowActive = color_to_int(color);
|
||||
|
||||
preset = COLOR_PRESET_CUSTOM;
|
||||
bool block = ui->colorPreset->blockSignals(true);
|
||||
ui->colorPreset->setCurrentIndex(ui->colorPreset->count() - 1);
|
||||
ui->colorPreset->blockSignals(block);
|
||||
|
||||
A11yChanged();
|
||||
|
||||
UpdateA11yColors();
|
||||
}
|
||||
|
||||
void OBSBasicSettings::on_choose9_clicked()
|
||||
{
|
||||
QColor color = GetColor(
|
||||
mixerRedActive,
|
||||
QTStr("Basic.Settings.Accessibility.ColorOverrides.MixerRedActive"));
|
||||
|
||||
if (!color.isValid())
|
||||
return;
|
||||
|
||||
mixerRedActive = color_to_int(color);
|
||||
|
||||
preset = COLOR_PRESET_CUSTOM;
|
||||
bool block = ui->colorPreset->blockSignals(true);
|
||||
ui->colorPreset->setCurrentIndex(ui->colorPreset->count() - 1);
|
||||
ui->colorPreset->blockSignals(block);
|
||||
|
||||
A11yChanged();
|
||||
|
||||
UpdateA11yColors();
|
||||
}
|
@ -350,6 +350,7 @@ void OBSBasicSettings::HookWidget(QWidget *widget, const char *signal,
|
||||
#define VIDEO_RESTART SLOT(VideoChangedRestart())
|
||||
#define VIDEO_RES SLOT(VideoChangedResolution())
|
||||
#define VIDEO_CHANGED SLOT(VideoChanged())
|
||||
#define A11Y_CHANGED SLOT(A11yChanged())
|
||||
#define ADV_CHANGED SLOT(AdvancedChanged())
|
||||
#define ADV_RESTART SLOT(AdvancedChangedRestart())
|
||||
/* clang-format on */
|
||||
@ -528,6 +529,8 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
|
||||
HookWidget(ui->fpsInteger, SCROLL_CHANGED, VIDEO_CHANGED);
|
||||
HookWidget(ui->fpsNumerator, SCROLL_CHANGED, VIDEO_CHANGED);
|
||||
HookWidget(ui->fpsDenominator, SCROLL_CHANGED, VIDEO_CHANGED);
|
||||
HookWidget(ui->colorsGroupBox, CHECK_CHANGED, A11Y_CHANGED);
|
||||
HookWidget(ui->colorPreset, COMBO_CHANGED, A11Y_CHANGED);
|
||||
HookWidget(ui->renderer, COMBO_CHANGED, ADV_RESTART);
|
||||
HookWidget(ui->adapter, COMBO_CHANGED, ADV_RESTART);
|
||||
HookWidget(ui->colorFormat, COMBO_CHANGED, ADV_CHANGED);
|
||||
@ -3026,6 +3029,8 @@ void OBSBasicSettings::LoadSettings(bool changedOnly)
|
||||
LoadVideoSettings();
|
||||
if (!changedOnly || hotkeysChanged)
|
||||
LoadHotkeySettings();
|
||||
if (!changedOnly || a11yChanged)
|
||||
LoadA11ySettings();
|
||||
if (!changedOnly || advancedChanged)
|
||||
LoadAdvancedSettings();
|
||||
}
|
||||
@ -3806,6 +3811,8 @@ void OBSBasicSettings::SaveSettings()
|
||||
SaveVideoSettings();
|
||||
if (hotkeysChanged)
|
||||
SaveHotkeySettings();
|
||||
if (a11yChanged)
|
||||
SaveA11ySettings();
|
||||
if (advancedChanged)
|
||||
SaveAdvancedSettings();
|
||||
|
||||
@ -3830,6 +3837,8 @@ void OBSBasicSettings::SaveSettings()
|
||||
AddChangedVal(changed, "video");
|
||||
if (hotkeysChanged)
|
||||
AddChangedVal(changed, "hotkeys");
|
||||
if (a11yChanged)
|
||||
AddChangedVal(changed, "a11y");
|
||||
if (advancedChanged)
|
||||
AddChangedVal(changed, "advanced");
|
||||
|
||||
@ -4544,6 +4553,15 @@ void OBSBasicSettings::ReloadHotkeys(obs_hotkey_id ignoreKey)
|
||||
LoadHotkeySettings(ignoreKey);
|
||||
}
|
||||
|
||||
void OBSBasicSettings::A11yChanged()
|
||||
{
|
||||
if (!loading) {
|
||||
a11yChanged = true;
|
||||
sender()->setProperty("changed", QVariant(true));
|
||||
EnableApplyButton(true);
|
||||
}
|
||||
}
|
||||
|
||||
void OBSBasicSettings::AdvancedChanged()
|
||||
{
|
||||
if (!loading) {
|
||||
@ -5278,6 +5296,11 @@ QIcon OBSBasicSettings::GetHotkeysIcon() const
|
||||
return hotkeysIcon;
|
||||
}
|
||||
|
||||
QIcon OBSBasicSettings::GetAccessibilityIcon() const
|
||||
{
|
||||
return accessibilityIcon;
|
||||
}
|
||||
|
||||
QIcon OBSBasicSettings::GetAdvancedIcon() const
|
||||
{
|
||||
return advancedIcon;
|
||||
@ -5313,11 +5336,16 @@ void OBSBasicSettings::SetHotkeysIcon(const QIcon &icon)
|
||||
ui->listWidget->item(5)->setIcon(icon);
|
||||
}
|
||||
|
||||
void OBSBasicSettings::SetAdvancedIcon(const QIcon &icon)
|
||||
void OBSBasicSettings::SetAccessibilityIcon(const QIcon &icon)
|
||||
{
|
||||
ui->listWidget->item(6)->setIcon(icon);
|
||||
}
|
||||
|
||||
void OBSBasicSettings::SetAdvancedIcon(const QIcon &icon)
|
||||
{
|
||||
ui->listWidget->item(7)->setIcon(icon);
|
||||
}
|
||||
|
||||
int OBSBasicSettings::CurrentFLVTrack()
|
||||
{
|
||||
if (ui->flvTrack1->isChecked())
|
||||
|
@ -97,6 +97,8 @@ class OBSBasicSettings : public QDialog {
|
||||
DESIGNABLE true)
|
||||
Q_PROPERTY(QIcon hotkeysIcon READ GetHotkeysIcon WRITE SetHotkeysIcon
|
||||
DESIGNABLE true)
|
||||
Q_PROPERTY(QIcon accessibilityIcon READ GetAccessibilityIcon WRITE
|
||||
SetAccessibilityIcon DESIGNABLE true)
|
||||
Q_PROPERTY(QIcon advancedIcon READ GetAdvancedIcon WRITE SetAdvancedIcon
|
||||
DESIGNABLE true)
|
||||
|
||||
@ -113,6 +115,7 @@ private:
|
||||
bool audioChanged = false;
|
||||
bool videoChanged = false;
|
||||
bool hotkeysChanged = false;
|
||||
bool a11yChanged = false;
|
||||
bool advancedChanged = false;
|
||||
int pageIndex = 0;
|
||||
bool loading = true;
|
||||
@ -194,7 +197,7 @@ private:
|
||||
{
|
||||
return generalChanged || outputsChanged || stream1Changed ||
|
||||
audioChanged || videoChanged || advancedChanged ||
|
||||
hotkeysChanged;
|
||||
hotkeysChanged || a11yChanged;
|
||||
}
|
||||
|
||||
inline void EnableApplyButton(bool en)
|
||||
@ -210,6 +213,7 @@ private:
|
||||
audioChanged = false;
|
||||
videoChanged = false;
|
||||
hotkeysChanged = false;
|
||||
a11yChanged = false;
|
||||
advancedChanged = false;
|
||||
EnableApplyButton(false);
|
||||
}
|
||||
@ -240,6 +244,7 @@ private:
|
||||
void LoadVideoSettings();
|
||||
void
|
||||
LoadHotkeySettings(obs_hotkey_id ignoreKey = OBS_INVALID_HOTKEY_ID);
|
||||
void LoadA11ySettings(bool presetChange = false);
|
||||
void LoadAdvancedSettings();
|
||||
void LoadSettings(bool changedOnly);
|
||||
|
||||
@ -306,12 +311,29 @@ private:
|
||||
void LoadResolutionLists();
|
||||
void LoadFPSData();
|
||||
|
||||
/* a11y */
|
||||
void UpdateA11yColors();
|
||||
void SetDefaultColors();
|
||||
void ResetDefaultColors();
|
||||
QColor GetColor(uint32_t colorVal, QString label);
|
||||
uint32_t preset = 0;
|
||||
uint32_t selectRed = 0x0000FF;
|
||||
uint32_t selectGreen = 0x00FF00;
|
||||
uint32_t selectBlue = 0xFF7F00;
|
||||
uint32_t mixerGreen = 0x267f26;
|
||||
uint32_t mixerYellow = 0x267f7f;
|
||||
uint32_t mixerRed = 0x26267f;
|
||||
uint32_t mixerGreenActive = 0x4cff4c;
|
||||
uint32_t mixerYellowActive = 0x4cffff;
|
||||
uint32_t mixerRedActive = 0x4c4cff;
|
||||
|
||||
void SaveGeneralSettings();
|
||||
void SaveStream1Settings();
|
||||
void SaveOutputSettings();
|
||||
void SaveAudioSettings();
|
||||
void SaveVideoSettings();
|
||||
void SaveHotkeySettings();
|
||||
void SaveA11ySettings();
|
||||
void SaveAdvancedSettings();
|
||||
void SaveSettings();
|
||||
|
||||
@ -334,6 +356,7 @@ private:
|
||||
QIcon audioIcon;
|
||||
QIcon videoIcon;
|
||||
QIcon hotkeysIcon;
|
||||
QIcon accessibilityIcon;
|
||||
QIcon advancedIcon;
|
||||
|
||||
QIcon GetGeneralIcon() const;
|
||||
@ -342,6 +365,7 @@ private:
|
||||
QIcon GetAudioIcon() const;
|
||||
QIcon GetVideoIcon() const;
|
||||
QIcon GetHotkeysIcon() const;
|
||||
QIcon GetAccessibilityIcon() const;
|
||||
QIcon GetAdvancedIcon() const;
|
||||
|
||||
int CurrentFLVTrack();
|
||||
@ -380,6 +404,17 @@ private slots:
|
||||
|
||||
void on_disableOSXVSync_clicked();
|
||||
|
||||
void on_choose1_clicked();
|
||||
void on_choose2_clicked();
|
||||
void on_choose3_clicked();
|
||||
void on_choose4_clicked();
|
||||
void on_choose5_clicked();
|
||||
void on_choose6_clicked();
|
||||
void on_choose7_clicked();
|
||||
void on_choose8_clicked();
|
||||
void on_choose9_clicked();
|
||||
void on_colorPreset_currentIndexChanged(int idx);
|
||||
|
||||
void GeneralChanged();
|
||||
void HideOBSWindowWarning(int state);
|
||||
void AudioChanged();
|
||||
@ -397,6 +432,7 @@ private slots:
|
||||
void HotkeysChanged();
|
||||
bool ScanDuplicateHotkeys(QFormLayout *layout);
|
||||
void ReloadHotkeys(obs_hotkey_id ignoreKey = OBS_INVALID_HOTKEY_ID);
|
||||
void A11yChanged();
|
||||
void AdvancedChanged();
|
||||
void AdvancedChangedRestart();
|
||||
|
||||
@ -426,6 +462,7 @@ private slots:
|
||||
void SetAudioIcon(const QIcon &icon);
|
||||
void SetVideoIcon(const QIcon &icon);
|
||||
void SetHotkeysIcon(const QIcon &icon);
|
||||
void SetAccessibilityIcon(const QIcon &icon);
|
||||
void SetAdvancedIcon(const QIcon &icon);
|
||||
|
||||
void UseStreamKeyAdvClicked();
|
||||
|
Loading…
x
Reference in New Issue
Block a user