Capture UI Theme change events

試したところ思ったより単純なコードになりました。afterInvokeがきっちり環境設定を閉じた後実行されるためです。

次のコードのgetColorThemeを,環境設定メニューのすべてのMenuItemのafterInvokeイベントで実行することで実現できました。

The code became simpler than I expected when I tried it. Because afterInvoke is executed exactly after closing the preferences.

I was able to achieve by executing getColorTheme on the afterInvoke event of all menu items in the preferences menu.

/**
  * Returns color theme name from brightness number
  * @param {Number} brightness 0.0-1.0
  * @returns { 'darkest'|'dark'|'light'|'lightest' } 
*/
export const brightnessToColorTheme = (brightness) => {
  let res = 'light' ;

  if(brightness <= 0) {
    res = 'darkest' ;
  } else if( (0 < brightness) && (brightness <= 0.5) ) {
    res = 'dark' ;
  } else if( (0.5 < brightness) && (brightness < 1.0) ) {
    res = 'light' ;
  } else if(brightness === 1.0) {
    res = 'lightest' ;
  }
  
  return res ;
} ;

/**
  * Get uiBrightnessPreference and return color theme name 
  * @return { 'darkest'|'dark'|'light'|'lightest' } 
*/
export const getColorTheme = () => {
  const res = brightnessToColorTheme(app.generalPreferences.uiBrightnessPreference) ;
  return res ;
} ;