private Color SelectColorMask(bool isProxyEnabled, bool isGlobalProxy) { Color colorMask = Color.White; Utils.WindowsThemeMode currentWindowsThemeMode = Utils.GetWindows10SystemThemeSetting(controller.GetCurrentConfiguration().isVerboseLogging); if (isProxyEnabled) { if (isGlobalProxy) // global { colorMask = colorMaskBlue; } else // PAC { if (currentWindowsThemeMode == Utils.WindowsThemeMode.Light) { colorMask = colorMaskEclipse; } } } else // disabled { if (currentWindowsThemeMode == Utils.WindowsThemeMode.Light) { colorMask = colorMaskDarkSilver; } else { colorMask = colorMaskLightSilver; } } return(colorMask); }
private void UpdateTrayIcon() { int dpi; Graphics graphics = Graphics.FromHwnd(IntPtr.Zero); dpi = (int)graphics.DpiX; graphics.Dispose(); icon_baseBitmap = null; if (dpi < 97) { // dpi = 96; icon_baseBitmap = Resources.ss16; } else if (dpi < 121) { // dpi = 120; icon_baseBitmap = Resources.ss20; } else { icon_baseBitmap = Resources.ss24; } Configuration config = controller.GetConfigurationCopy(); bool enabled = config.enabled; bool global = config.global; // set Windows 10 Theme color (1903+) currentWindowsThemeMode = Utils.GetWindows10SystemThemeSetting(); if (currentWindowsThemeMode == Utils.WindowsThemeMode.Light) { if (!global || !enabled) { icon_baseBitmap = getDarkTrayIcon(icon_baseBitmap); } } icon_baseBitmap = getTrayIconByState(icon_baseBitmap, enabled, global); icon_base = Icon.FromHandle(icon_baseBitmap.GetHicon()); targetIcon = icon_base; icon_in = Icon.FromHandle(AddBitmapOverlay(icon_baseBitmap, Resources.ssIn24).GetHicon()); icon_out = Icon.FromHandle(AddBitmapOverlay(icon_baseBitmap, Resources.ssOut24).GetHicon()); icon_both = Icon.FromHandle(AddBitmapOverlay(icon_baseBitmap, Resources.ssIn24, Resources.ssOut24).GetHicon()); _notifyIcon.Icon = targetIcon; string serverInfo = null; if (controller.GetCurrentStrategy() != null) { serverInfo = controller.GetCurrentStrategy().Name; } else { serverInfo = config.GetCurrentServer().FriendlyName(); } // show more info by hacking the P/Invoke declaration for NOTIFYICONDATA inside Windows Forms string text = I18N.GetString("Shadowsocks") + " " + UpdateChecker.Version + "\n" + (enabled ? I18N.GetString("System Proxy On: ") + (global ? I18N.GetString("Global") : I18N.GetString("PAC")) : I18N.GetString("Running: Port {0}", config.localPort)) // this feedback is very important because they need to know Shadowsocks is running + "\n" + serverInfo; if (text.Length > 127) { text = text.Substring(0, 126 - 3) + "..."; } ViewUtils.SetNotifyIconText(_notifyIcon, text); }