xref: /MusicPlayer2/MusicPlayer2/IconMgr.h (revision 52ac3cc4b8aba52ef010f9b81f6e6b7af65e4edb)
1 #pragma once
2 class IconMgr
3 {
4 public:
5     IconMgr();
6     ~IconMgr();
7 
8     enum IconType
9     {   // 命名以其(点击时的)功能为准
10         IT_App,                     // 应用图标
11         IT_App_Monochrome,          // 应用图标(单色)
12         IT_Stop,                    // 停止
13         IT_Play,                    // 播放
14         IT_Pause,                   // 暂停
15         IT_Play_Pause,              // 播放/暂停
16         IT_Previous,                // 上一曲
17         IT_Next,                    // 下一曲
18         IT_Favorite_On,             // 添加到我喜欢的音乐(空心♥)
19         IT_Favorite_Off,            // 从我喜欢的音乐移除(实心♥)
20         IT_Media_Lib,               // 媒体库
21         IT_Playlist,                // 播放列表
22 
23         IT_Menu,                    // 菜单
24         IT_Full_Screen_On,          // 进入全屏
25         IT_Full_Screen_Off,         // 退出全屏
26         IT_Minimize,                // 最小化
27         IT_Maxmize_On,              // 进入最大化
28         IT_Maxmize_Off,             // 退出最大化
29         IT_Close,                   // 关闭
30 
31         IT_Play_Order,              // 顺序播放
32         IT_Loop_Playlist,           // 列表循环
33         IT_Loop_Track,              // 单曲循环
34         IT_Play_Shuffle,            // 无序播放
35         IT_Play_Random,             // 随机播放
36         IT_Play_Track,              // 单曲播放
37         IT_Setting,                 // 设置
38         IT_Equalizer,               // 均衡器
39         IT_Skin,                    // 切换界面(皮肤)
40         IT_Mini_On,                 // 进入迷你模式
41         IT_Mini_Off,                // 退出迷你模式
42         IT_Info,                    // 曲目信息
43         IT_Find,                    // 查找歌曲
44         IT_Dark_Mode_On,            // 进入深色模式(月亮)
45         IT_Dark_Mode_Off,           // 退出深色模式(太阳)
46         IT_Volume0,                 // 音量: 静音
47         IT_Volume1,                 // 音量: )
48         IT_Volume2,                 // 音量: ))
49         IT_Volume3,                 // 音量: )))
50         IT_Switch_Display,          // 切换显示(xml界面堆栈元素)
51 
52         IT_Folder,                  // 文件夹
53         IT_Music,                   // 音符/打开文件
54         IT_Link,                    // 曲别针/链接
55         IT_Exit,                    // 退出
56         IT_Rewind,                  // 快退
57         IT_Fast_Forward,            // 快进
58         IT_Speed_Up,                // 加速播放
59         IT_Slow_Down,               // 减速播放
60         IT_Add,                     // 添加
61         IT_Save,                    // 保存
62         IT_Save_As,                 // 另存为
63         IT_Sort_Mode,               // 排序模式
64         IT_Playlist_Display_Mode,   // 播放列表显示方式
65         IT_Locate,                  // 定位
66         IT_Lyric,                   // 歌词
67         IT_Copy,                    // 复制
68         IT_Edit,                    // 编辑
69         IT_Unlink,                  // 取消关联
70         IT_Folder_Explore,          // 文件夹浏览/搜索
71         IT_Internal_Lyric,          // 内嵌歌词
72         IT_Download,                // 下载
73         IT_Download_Batch,          // 批量下载
74         IT_Playlist_Dock,           // 停靠播放列表/视图
75         IT_Playlist_Float,          // 浮动播放列表
76         IT_Pin,                     // 图钉/置顶
77         IT_Convert,                 // 格式转换
78         IT_Online,                  // 在线查看
79         IT_Shortcut,                // 快捷方式
80         IT_Album_Cover,             // 专辑封面
81         IT_Statistics,              // 统计
82         IT_File_Relate,             // 文件关联
83         IT_Help,                    // 帮助
84         IT_Fix,                     // 扳手/修复
85         IT_Star,                    // 星星/分级
86         IT_Artist,                  // 艺术家
87         IT_Album,                   // 专辑
88         IT_Genre,                   // 流派
89         IT_Year,                    // 年份
90         IT_Bitrate,                 // 比特率
91         IT_History,                 // 最近播放
92         IT_Key_Board,               // 快捷键
93         IT_Reverb,                  // 混响
94         IT_Double_Line,             // 双行
95         IT_Lock,                    // 锁/桌面歌词锁定
96         IT_Play_As_Next,            // 下一首播放
97         IT_Rename,                  // 重命名
98         IT_Play_In_Playlist,        // 添加到新播放列表并播放
99         IT_Play_In_Folder,          // 在文件夹模式中播放
100         IT_Tag,                     // 标签
101         IT_More,                    // 更多
102         IT_NowPlaying,              // 正在播放
103         IT_Karaoke,                 // 歌词卡拉OK效果
104         IT_Refresh,                 // 刷新
105         IT_NewFolder,               // 添加新文件夹
106         IT_Background,              // 背景穿透
107 
108         IT_Le_Tag_Insert,           // Le 插入时间标签
109         IT_Le_Tag_Replace,          // Le 替换时间标签
110         IT_Le_Tag_Delete,           // Le 删除时间标签
111         IT_Le_Save,                 // Le 保存
112         IT_Le_Find,                 // Le 文本查找
113         IT_Le_Replace,              // Le 文本替换
114 
115         IT_Triangle_Left,           // 向左三角形
116         IT_Triangle_Up,             // 向上三角形
117         IT_Triangle_Right,          // 向右三角形
118         IT_Triangle_Down,           // 向下三角形
119 
120         IT_Ok,                      // 圆/确认
121         IT_Cancel,                  // 叉/取消
122 
123         IT_TreeCollapsed,           // 折叠的树节点
124         IT_TreeExpanded,            // 展开的树节点
125 
126         IT_Default_Cover_Playing,   // 默认封面(播放中)
127         IT_Default_Cover_Stopped,   // 默认封面(已停止)
128 
129         IT_NO_ICON,
130     };
131 
132     enum IconStyle
133     {
134         IS_Auto,
135         IS_OutlinedDark,            // 深色的图标(浅色模式用)
136         IS_OutlinedLight,           // 浅色的图标(深色模式用)
137         IS_Filled,
138         IS_Color,
139     };
140 
141     enum IconSize
142     {
143         IS_DPI_16,
144         IS_DPI_16_Full_Screen,
145         IS_DPI_20,
146         IS_DPI_20_Full_Screen,
147         IS_DPI_32,
148         IS_DPI_32_Full_Screen,
149         IS_ORG_512,
150         IS_ALL,
151     };
152 
153     // 获取需要的图标,不要在代码中大量直接调用
154     // 请为同类调用提供一层包装以免之后修改困难
155     HICON GetHICON(IconType type, IconStyle style, IconSize size);
156 
GetIconSize(IconSize size)157     static CSize GetIconSize(IconSize size)
158     {
159         int width = GetIconWidth(size);
160         return CSize(width, width);
161     }
162     static int GetIconWidth(IconSize size);
163 
164 private:
165 
MakeKey(IconType type,IconStyle style,IconSize size)166     int MakeKey(IconType type, IconStyle style, IconSize size)
167     {
168         ASSERT(style < 10 && size < 10);
169         return type * 100 + style * 10 + size;
170     }
171     std::tuple<UINT, UINT, UINT, UINT> GetIconID(IconType type);
172 
173     std::map<int, HICON> m_icon_map;
174     std::shared_mutex m_shared_mutex;   // 线程同步对象
175 };
176 
177