Настройки высокого контраста с использованием Electron и Linux Ubuntu

Вопрос или проблема

Я запускаю приложение Electron с React на Linux Ubuntu и использую настройки доступности системы Ubuntu. Настройки высокого и инвертированного контраста не имеют эффекта для приложения, но работают в других приложениях, а также в Mac OS и Windows. Я где-то читал, что параметры Electron “nativeTheme.shouldUseHighContrast” & “shouldUseInvertedContrast”, которые определяют настройки темы по всей системе, не поддерживаются в Linux, так что это значит, что они не будут иметь эффекта? И если да, есть ли возможное решение?

Ответ или решение

К сожалению, в текущий момент Electron не поддерживает системные настройки высококонтрастной темы и инвертированного контраста на платформе Linux, включая Ubuntu. Это означает, что свойства nativeTheme.shouldUseHighContrast и nativeTheme.shouldUseInvertedContrast не будут работать, как это происходит на Windows и Mac OS. Поэтому приложение, созданное с использованием Electron, не будет автоматически подстраиваться под эти системные настройки, что может привести к проблемам с доступностью.

Обходные пути

Хотя полную интеграцию системных настроек высококонтрастной темы в Electron на Linux достигнуть нельзя, вы можете рассмотреть следующие подходы для улучшения доступности вашего приложения:

  1. Создание пользовательских настроек темы:

    • Включите в ваше приложение возможность переключения тем, включая высококонтрастные варианты. Это можно реализовать через состояния (states) в вашем компоненте React.
    • Храните выбор пользователя в localStorage, чтобы сохранять его между сессиями.
    // Пример переключения темы
    const [isHighContrast, setIsHighContrast] = useState(false);
    
    useEffect(() => {
       const theme = localStorage.getItem('theme');
       if (theme === 'high-contrast') {
           setIsHighContrast(true);
       }
    }, []);
    
    const toggleHighContrast = () => {
       const newTheme = !isHighContrast ? 'high-contrast' : 'default';
       localStorage.setItem('theme', newTheme);
       setIsHighContrast(!isHighContrast);
    };
    
    return (
       <button onClick={toggleHighContrast}>
           {isHighContrast ? 'Сменить на стандартную тему' : 'Сменить на высококонтрастную тему'}
       </button>
    );
  2. Использование CSS-переменных и медиа-запросов:

    • Вы можете создать специфические CSS-стили для высококонтрастной темы и применять их в зависимости от состояния переключателя.
    • Например, применяйте классы к элементам в зависимости от состояния высококонтрастной темы:
    .high-contrast {
       background-color: black;
       color: white;
    }

    И затем применяйте этот класс динамически:

    <div className={isHighContrast ? 'high-contrast' : ''}>
       {/* Контент приложения */}
    </div>
  3. Пользовательские CSS-превью:

    • Если ваша целевая аудитория нуждается в высококонтрастной теме, вы можете создать кастомизированные стили, специализированные для пользователей с почасовыми потребностями в доступности.
  4. Отправка отзывов команде Electron:
    • Если вы заинтересованы в улучшении ситуации, подавайте отзывы в репозиторий Electron на GitHub. Чем больше людей сообщит о необходимости этой функции, тем выше вероятность её реализации в будущих версиях.

Проявив заботу о доступности, вы сделаете ваше приложение более универсальным и удобным для пользователей с особыми потребностями.

Оцените материал
Добавить комментарий

Капча загружается...