You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
git_read/NppDarkMode.h

251 lines
8.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// This file is part of Notepad++ project
// Copyright (c) 2021 adzm / Adam D. Walling
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// at your option any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#pragma once
#include <windows.h>
#include "Common.h" // for generic_string
//这段代码定义了一个名为NppDarkMode的命名空间其中包含了一些结构体和函数。
namespace NppDarkMode
{
struct Colors
{
// 定义颜色结构体Colors包括背景颜色、柔和背景颜色、热点背景颜色、纯背景颜色、错误背景颜色、文本颜色、深色文本颜色、禁用文本颜色、链接文本颜色、边缘颜色、热点边缘颜色、禁用边缘颜色
COLORREF background = 0;
COLORREF softerBackground = 0;
COLORREF hotBackground = 0;
COLORREF pureBackground = 0;
COLORREF errorBackground = 0;
COLORREF text = 0;
COLORREF darkerText = 0;
COLORREF disabledText = 0;
COLORREF linkText = 0;
COLORREF edge = 0;
COLORREF hotEdge = 0;
COLORREF disabledEdge = 0;
};
struct Options
{
// 定义Options结构体用于存储暗黑模式的选项
bool enable = false;
bool enableMenubar = false;
bool enablePlugin = false;
};
struct NppDarkModeParams
{
// 定义NppDarkModeParams结构体用于存储暗黑模式的参数
const wchar_t* _themeClassName = nullptr;
bool _subclass = false;
bool _theme = false;
};
enum class ToolTipsType
{
// 定义ToolTipsType枚举用于标识不同类型的工具提示
tooltip,
toolbar,
listview,
treeview,
tabbar
};
enum ColorTone {
// 定义ColorTone枚举用于标识不同的颜色调
blackTone = 0,
redTone = 1,
greenTone = 2,
blueTone = 3,
purpleTone = 4,
cyanTone = 5,
oliveTone = 6,
customizedTone = 32
};
enum class TreeViewStyle
{
// 定义TreeViewStyle枚举用于标识不同的树形视图样式
classic = 0,
light = 1,
dark = 2
};
struct AdvOptDefaults
{
// 定义AdvOptDefaults结构体用于存储高级选项的默认值
generic_string _xmlFileName;
int _toolBarIconSet = -1;
int _tabIconSet = -1;
bool _tabUseTheme = false;
};
struct AdvancedOptions
{
// 定义AdvancedOptions结构体用于存储高级选项
bool _enableWindowsMode = false;
NppDarkMode::AdvOptDefaults _darkDefaults{ L"DarkModeDefault.xml", 0, 2, false };
NppDarkMode::AdvOptDefaults _lightDefaults{ L"", 4, 0, true };
};
void initDarkMode(); // 初始化暗黑模式从NppParameters中获取选项
void refreshDarkMode(HWND hwnd, bool forceRefresh = false); // 尝试应用新的选项发送NPPM_INTERNAL_REFRESHDARKMODE消息到hwnd的顶级父窗口
void initAdvancedOptions(); // 初始化高级选项
bool isEnabled(); // 获取暗黑模式是否启用的状态
bool isDarkMenuEnabled(); // 获取菜单栏是否使用暗黑模式的状态
bool isEnabledForPlugins(); // 获取插件是否使用暗黑模式的状态
bool isExperimentalActive(); // 获取实验性暗黑模式是否启用的状态
bool isExperimentalSupported(); // 获取实验性暗黑模式是否受支持的状态
bool isWindowsModeEnabled(); // 获取Windows模式是否启用的状态
void setWindowsMode(bool enable); // 设置Windows模式是否启用
generic_string getThemeName(); // 获取主题名称
void setThemeName(const generic_string& newThemeName); // 设置主题名称
int getToolBarIconSet(bool useDark); // 获取工具栏图标集
void setToolBarIconSet(int state2Set, bool useDark); // 设置工具栏图标集
int getTabIconSet(bool useDark); // 获取选项卡图标集
void setTabIconSet(bool useAltIcons, bool useDark); // 设置选项卡图标集
bool useTabTheme(); // 获取选项卡主题是否启用
void setAdvancedOptions(); // 设置高级选项
bool isWindows10(); // 获取Windows是否为10版本
bool isWindows11(); // 获取Windows是否为11版本
DWORD getWindowsBuildNumber(); // 获取Windows的构建版本号
COLORREF invertLightness(COLORREF c); // 反转颜色的亮度
COLORREF invertLightnessSofter(COLORREF c); // 反转柔和颜色的亮度
double calculatePerceivedLighness(COLORREF c); // 计算颜色的亮度
void setDarkTone(ColorTone colorToneChoice); // 设置暗黑模式的颜色调
COLORREF getBackgroundColor(); // 获取背景颜色
COLORREF getSofterBackgroundColor(); // 获取柔和背景颜色
COLORREF getHotBackgroundColor(); // 获取热点背景颜色
COLORREF getDarkerBackgroundColor(); // 获取深色背景颜色
COLORREF getErrorBackgroundColor(); // 获取错误背景颜色
COLORREF getTextColor(); // 获取文本颜色
COLORREF getDarkerTextColor(); // 获取深色文本颜色
COLORREF getDisabledTextColor(); // 获取禁用文本颜色
COLORREF getLinkTextColor(); // 获取链接文本颜色
COLORREF getEdgeColor(); // 获取边缘颜色
COLORREF getHotEdgeColor(); // 获取热点边缘颜色
COLORREF getDisabledEdgeColor(); // 获取禁用边缘颜色
HBRUSH getBackgroundBrush(); // 获取背景画刷
HBRUSH getDarkerBackgroundBrush(); // 获取深色背景画刷
HBRUSH getSofterBackgroundBrush(); // 获取柔和背景画刷
HBRUSH getHotBackgroundBrush(); // 获取热点背景画刷
HBRUSH getErrorBackgroundBrush(); // 获取错误背景画刷
HBRUSH getEdgeBrush(); // 获取边缘画刷
HBRUSH getHotEdgeBrush(); // 获取热点边缘画刷
HBRUSH getDisabledEdgeBrush(); // 获取禁用边缘画刷
COLORREF getIndividualTabColour(int colourIndex, bool themeDependant, bool saturated);
void setBackgroundColor(COLORREF c);
void setSofterBackgroundColor(COLORREF c);
void setHotBackgroundColor(COLORREF c);
void setDarkerBackgroundColor(COLORREF c);
void setErrorBackgroundColor(COLORREF c);
void setTextColor(COLORREF c);
void setDarkerTextColor(COLORREF c);
void setDisabledTextColor(COLORREF c);
void setLinkTextColor(COLORREF c);
void setEdgeColor(COLORREF c);
void setHotEdgeColor(COLORREF c);
void setDisabledEdgeColor(COLORREF c);
Colors getDarkModeDefaultColors();
void changeCustomTheme(const Colors& colors);
// handle events
void handleSettingChange(HWND hwnd, LPARAM lParam, bool isFromBtn = false);
bool isDarkModeReg();
// processes messages related to UAH / custom menubar drawing.
// return true if handled, false to continue with normal processing in your wndproc
bool runUAHWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT* lr);
void drawUAHMenuNCBottomLine(HWND hWnd);
// from DarkMode.h
void initExperimentalDarkMode();
void setDarkMode(bool useDark, bool fixDarkScrollbar);
void allowDarkModeForApp(bool allow);
bool allowDarkModeForWindow(HWND hWnd, bool allow);
void setTitleBarThemeColor(HWND hWnd);
// enhancements to DarkMode.h
void enableDarkScrollBarForWindowAndChildren(HWND hwnd);
inline void paintRoundFrameRect(HDC hdc, const RECT rect, const HPEN hpen, int width = 0, int height = 0);
void subclassButtonControl(HWND hwnd);
void subclassGroupboxControl(HWND hwnd);
void subclassTabControl(HWND hwnd);
void subclassComboBoxControl(HWND hwnd);
bool subclassTabUpDownControl(HWND hwnd);
void subclassAndThemeButton(HWND hwnd, NppDarkModeParams p);
void subclassAndThemeComboBox(HWND hwnd, NppDarkModeParams p);
void subclassAndThemeListBoxOrEditControl(HWND hwnd, NppDarkModeParams p, bool isListBox);
void subclassAndThemeListView(HWND hwnd, NppDarkModeParams p);
void themeTreeView(HWND hwnd, NppDarkModeParams p);
void themeToolbar(HWND hwnd, NppDarkModeParams p);
void themeRichEdit(HWND hwnd, NppDarkModeParams p);
void autoSubclassAndThemeChildControls(HWND hwndParent, bool subclass = true, bool theme = true);
void autoThemeChildControls(HWND hwndParent);
LRESULT darkToolBarNotifyCustomDraw(LPARAM lParam);
LRESULT darkListViewNotifyCustomDraw(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool isPlugin);
LRESULT darkTreeViewNotifyCustomDraw(LPARAM lParam);
void autoSubclassAndThemePluginDockWindow(HWND hwnd);
ULONG autoSubclassAndThemePlugin(HWND hwnd, ULONG dmFlags);
void autoSubclassAndThemeWindowNotify(HWND hwnd);
void setDarkTitleBar(HWND hwnd);
void setDarkExplorerTheme(HWND hwnd);
void setDarkScrollBar(HWND hwnd);
void setDarkTooltips(HWND hwnd, ToolTipsType type);
void setDarkLineAbovePanelToolbar(HWND hwnd);
void setDarkListView(HWND hwnd);
void disableVisualStyle(HWND hwnd, bool doDisable);
void calculateTreeViewStyle();
void setTreeViewStyle(HWND hwnd);
bool isThemeDark();
void setBorder(HWND hwnd, bool border = true);
BOOL CALLBACK enumAutocompleteProc(HWND hwnd, LPARAM lParam);
void setDarkAutoCompletion();
LRESULT onCtlColor(HDC hdc);
LRESULT onCtlColorSofter(HDC hdc);
LRESULT onCtlColorDarker(HDC hdc);
LRESULT onCtlColorError(HDC hdc);
LRESULT onCtlColorDarkerBGStaticText(HDC hdc, bool isTextEnabled);
INT_PTR onCtlColorListbox(WPARAM wParam, LPARAM lParam);
}
//这些函数主要用于初始化和管理Notepad++的暗黑模式,包括颜色设置、主题样式、窗口控件的主题化等功能。