From 680873487c4a7987012606119a744e5ca725ad30 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 13 Apr 2019 20:22:59 +0300 Subject: merge with trunk --- src/core/stdmsg/src/chat_options.cpp | 91 +++--- src/core/stdmsg/src/chat_window.cpp | 12 +- src/core/stdmsg/src/msgs.cpp | 16 +- src/core/stdmsg/src/stdafx.h | 2 - src/core/stdmsg/src/tabs.cpp | 2 +- src/mir_app/src/CMPluginBase.cpp | 36 ++- src/mir_app/src/clistmod.cpp | 2 +- src/mir_app/src/descbutton.cpp | 2 - src/mir_app/src/ei_baseIcon.cpp | 21 +- src/mir_app/src/ei_callbackIcon.cpp | 2 +- src/mir_app/src/ei_defaulticons.cpp | 8 +- src/mir_app/src/ei_groupIcon.cpp | 8 +- src/mir_app/src/ei_icolibIcon.cpp | 2 +- src/mir_app/src/ei_options.cpp | 11 +- src/mir_app/src/ei_services.cpp | 14 +- src/mir_app/src/extraicons.h | 24 +- src/mir_app/src/findadd.cpp | 2 +- src/mir_app/src/headerbar.cpp | 31 +-- src/mir_app/src/hotkey_opts.cpp | 16 +- src/mir_app/src/icolib.cpp | 3 + src/mir_app/src/iconheader.cpp | 525 ----------------------------------- src/mir_app/src/ignore.cpp | 16 +- src/mir_app/src/menu_utils.cpp | 2 +- src/mir_app/src/mir_app.def | 10 +- src/mir_app/src/mir_app64.def | 10 +- src/mir_app/src/miranda.h | 3 - src/mir_app/src/modules.cpp | 2 - src/mir_app/src/newplugins.cpp | 6 +- src/mir_app/src/pluginopts.cpp | 4 +- src/mir_app/src/skinicons.cpp | 25 +- src/mir_app/src/visibility.cpp | 6 +- 31 files changed, 191 insertions(+), 723 deletions(-) delete mode 100644 src/mir_app/src/iconheader.cpp (limited to 'src') diff --git a/src/core/stdmsg/src/chat_options.cpp b/src/core/stdmsg/src/chat_options.cpp index ded9c7b1c7..0248407244 100644 --- a/src/core/stdmsg/src/chat_options.cpp +++ b/src/core/stdmsg/src/chat_options.cpp @@ -137,67 +137,52 @@ static INT CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM p static IconItem iconList1[] = { - { LPGEN("Window icon"), "chat_window", IDI_CHANMGR, 0 }, - { LPGEN("Text color"), "chat_fgcol", IDI_COLOR, 0 }, - { LPGEN("Background color"), "chat_bkgcol", IDI_BKGCOLOR, 0 }, - { LPGEN("Bold"), "chat_bold", IDI_BBOLD, 0 }, - { LPGEN("Italics"), "chat_italics", IDI_BITALICS, 0 }, - { LPGEN("Underlined"), "chat_underline", IDI_BUNDERLINE, 0 }, - { LPGEN("Smiley button"), "chat_smiley", IDI_BSMILEY, 0 }, - { LPGEN("Room history"), "chat_history", IDI_HISTORY, 0 }, - { LPGEN("Room settings"), "chat_settings", IDI_TOPICBUT, 0 }, - { LPGEN("Event filter disabled"), "chat_filter", IDI_FILTER, 0 }, - { LPGEN("Event filter enabled"), "chat_filter2", IDI_FILTER2, 0 }, - { LPGEN("Hide nick list"), "chat_nicklist", IDI_NICKLIST, 0 }, - { LPGEN("Show nick list"), "chat_nicklist2", IDI_NICKLIST2, 0 }, - { LPGEN("Icon overlay"), "chat_overlay", IDI_OVERLAY, 0 }, - { LPGEN("Close"), "chat_close", IDI_CLOSE, 0 }, - - { LPGEN("Status 1 (10x10)"), "chat_status0", IDI_STATUS0, 10 }, - { LPGEN("Status 2 (10x10)"), "chat_status1", IDI_STATUS1, 10 }, - { LPGEN("Status 3 (10x10)"), "chat_status2", IDI_STATUS2, 10 }, - { LPGEN("Status 4 (10x10)"), "chat_status3", IDI_STATUS3, 10 }, - { LPGEN("Status 5 (10x10)"), "chat_status4", IDI_STATUS4, 10 }, - { LPGEN("Status 6 (10x10)"), "chat_status5", IDI_STATUS5, 10 } + { LPGEN("Window icon"), "window", IDI_CHANMGR }, + { LPGEN("Text color"), "fgcol", IDI_COLOR }, + { LPGEN("Background color"), "bkgcol", IDI_BKGCOLOR }, + { LPGEN("Bold"), "bold", IDI_BBOLD }, + { LPGEN("Italics"), "italics", IDI_BITALICS }, + { LPGEN("Underlined"), "underline", IDI_BUNDERLINE }, + { LPGEN("Smiley button"), "smiley", IDI_BSMILEY }, + { LPGEN("Room history"), "history", IDI_HISTORY }, + { LPGEN("Room settings"), "settings", IDI_TOPICBUT }, + { LPGEN("Event filter disabled"), "filter", IDI_FILTER }, + { LPGEN("Event filter enabled"), "filter2", IDI_FILTER2 }, + { LPGEN("Hide nick list"), "nicklist", IDI_NICKLIST }, + { LPGEN("Show nick list"), "nicklist2", IDI_NICKLIST2 }, + { LPGEN("Icon overlay"), "overlay", IDI_OVERLAY }, + { LPGEN("Close"), "close", IDI_CLOSE }, + + { LPGEN("Status 1 (10x10)"), "status0", IDI_STATUS0, 10 }, + { LPGEN("Status 2 (10x10)"), "status1", IDI_STATUS1, 10 }, + { LPGEN("Status 3 (10x10)"), "status2", IDI_STATUS2, 10 }, + { LPGEN("Status 4 (10x10)"), "status3", IDI_STATUS3, 10 }, + { LPGEN("Status 5 (10x10)"), "status4", IDI_STATUS4, 10 }, + { LPGEN("Status 6 (10x10)"), "status5", IDI_STATUS5, 10 } }; static IconItem iconList2[] = { - { LPGEN("Message in (10x10)"), "chat_log_message_in", IDI_MESSAGE, 10 }, - { LPGEN("Message out (10x10)"), "chat_log_message_out", IDI_MESSAGEOUT, 10 }, - { LPGEN("Action (10x10)"), "chat_log_action", IDI_ACTION, 10 }, - { LPGEN("Add status (10x10)"), "chat_log_addstatus", IDI_ADDSTATUS, 10 }, - { LPGEN("Remove status (10x10)"), "chat_log_removestatus", IDI_REMSTATUS, 10 }, - { LPGEN("Join (10x10)"), "chat_log_join", IDI_JOIN, 10 }, - { LPGEN("Leave (10x10)"), "chat_log_part", IDI_PART, 10 }, - { LPGEN("Quit (10x10)"), "chat_log_quit", IDI_QUIT, 10 }, - { LPGEN("Kick (10x10)"), "chat_log_kick", IDI_KICK, 10 }, - { LPGEN("Nick change (10x10)"), "chat_log_nick", IDI_NICK, 10 }, - { LPGEN("Notice (10x10)"), "chat_log_notice", IDI_NOTICE, 10 }, - { LPGEN("Topic (10x10)"), "chat_log_topic", IDI_TOPIC, 10 }, - { LPGEN("Highlight (10x10)"), "chat_log_highlight", IDI_HIGHLIGHT, 10 }, - { LPGEN("Information (10x10)"), "chat_log_info", IDI_INFO, 10 } + { LPGEN("Message in (10x10)"), "log_message_in", IDI_MESSAGE, 10 }, + { LPGEN("Message out (10x10)"), "log_message_out", IDI_MESSAGEOUT, 10 }, + { LPGEN("Action (10x10)"), "log_action", IDI_ACTION, 10 }, + { LPGEN("Add status (10x10)"), "log_addstatus", IDI_ADDSTATUS, 10 }, + { LPGEN("Remove status (10x10)"), "log_removestatus", IDI_REMSTATUS, 10 }, + { LPGEN("Join (10x10)"), "log_join", IDI_JOIN, 10 }, + { LPGEN("Leave (10x10)"), "log_part", IDI_PART, 10 }, + { LPGEN("Quit (10x10)"), "log_quit", IDI_QUIT, 10 }, + { LPGEN("Kick (10x10)"), "log_kick", IDI_KICK, 10 }, + { LPGEN("Nick change (10x10)"), "log_nick", IDI_NICK, 10 }, + { LPGEN("Notice (10x10)"), "log_notice", IDI_NOTICE, 10 }, + { LPGEN("Topic (10x10)"), "log_topic", IDI_TOPIC, 10 }, + { LPGEN("Highlight (10x10)"), "log_highlight", IDI_HIGHLIGHT, 10 }, + { LPGEN("Information (10x10)"), "log_info", IDI_INFO, 10 } }; void AddIcons(void) { - g_plugin.registerIcon(LPGEN("Messaging") "/" LPGEN("Group chats"), iconList1); - g_plugin.registerIcon(LPGEN("Messaging") "/" LPGEN("Group chats log"), iconList2); -} - -// load icons from the skinning module if available -HICON LoadIconEx(const char *pszIcoLibName, bool big) -{ - char szTemp[256]; - mir_snprintf(szTemp, "chat_%s", pszIcoLibName); - return IcoLib_GetIcon(szTemp, big); -} - -HANDLE GetIconHandle(const char *pszIcoLibName) -{ - char szTemp[256]; - mir_snprintf(szTemp, "chat_%s", pszIcoLibName); - return IcoLib_GetIconHandle(szTemp); + g_plugin.registerIcon(LPGEN("Messaging") "/" LPGEN("Group chats"), iconList1, "chat"); + g_plugin.registerIcon(LPGEN("Messaging") "/" LPGEN("Group chats log"), iconList2, "chat"); } ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/core/stdmsg/src/chat_window.cpp b/src/core/stdmsg/src/chat_window.cpp index 1ea4206a6d..02662b6d9a 100644 --- a/src/core/stdmsg/src/chat_window.cpp +++ b/src/core/stdmsg/src/chat_window.cpp @@ -113,7 +113,7 @@ void CChatRoomDlg::onClick_Filter(CCtrlButton *pButton) return; m_bFilterEnabled = !m_bFilterEnabled; - m_btnFilter.SendMsg(BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx(m_bFilterEnabled ? "filter" : "filter2", FALSE)); + m_btnFilter.SendMsg(BM_SETIMAGE, IMAGE_ICON, (LPARAM)g_plugin.getIcon(m_bFilterEnabled ? IDI_FILTER : IDI_FILTER2, FALSE)); if (m_bFilterEnabled && db_get_b(0, CHAT_MODULE, "RightClickFilter", 0) == 0) ShowFilterMenu(); else @@ -126,7 +126,7 @@ void CChatRoomDlg::onClick_NickList(CCtrlButton *pButton) return; m_bNicklistEnabled = !m_bNicklistEnabled; - pButton->SendMsg(BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx(m_bNicklistEnabled ? "nicklist" : "nicklist2", FALSE)); + pButton->SendMsg(BM_SETIMAGE, IMAGE_ICON, (LPARAM)g_plugin.getIcon(m_bNicklistEnabled ? IDI_NICKLIST : IDI_NICKLIST2, FALSE)); ScrollToBottom(); Resize(); @@ -271,8 +271,8 @@ void CChatRoomDlg::UpdateNickList() void CChatRoomDlg::UpdateOptions() { - m_btnNickList.SendMsg(BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx(m_bNicklistEnabled ? "nicklist" : "nicklist2", FALSE)); - m_btnFilter.SendMsg(BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx(m_bFilterEnabled ? "filter" : "filter2", FALSE)); + m_btnNickList.SendMsg(BM_SETIMAGE, IMAGE_ICON, (LPARAM)g_plugin.getIcon(m_bNicklistEnabled ? IDI_NICKLIST : IDI_NICKLIST2, FALSE)); + m_btnFilter.SendMsg(BM_SETIMAGE, IMAGE_ICON, (LPARAM)g_plugin.getIcon(m_bFilterEnabled ? IDI_FILTER : IDI_FILTER2, FALSE)); MODULEINFO *mi = m_si->pMI; EnableWindow(m_btnBold.GetHwnd(), mi->bBold); @@ -291,7 +291,7 @@ void CChatRoomDlg::UpdateOptions() SendMessage(m_pOwner->m_hwndStatus, SB_SETICON, 0, (LPARAM)hIcon); - Window_SetIcon_IcoLib(m_pOwner->GetHwnd(), GetIconHandle("window")); + Window_SetIcon_IcoLib(m_pOwner->GetHwnd(), g_plugin.getIconHandle(IDI_CHANMGR)); m_log.SendMsg(EM_SETBKGNDCOLOR, 0, g_Settings.crLogBackground); @@ -1141,7 +1141,7 @@ INT_PTR CChatRoomDlg::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) break; case DM_UPDATETITLE: - if (lParam == 0 || lParam == m_hContact) + if (lParam == 0 || lParam == (LPARAM)m_hContact) UpdateTitle(); break; diff --git a/src/core/stdmsg/src/msgs.cpp b/src/core/stdmsg/src/msgs.cpp index ac88cf3e9c..84fad84fba 100644 --- a/src/core/stdmsg/src/msgs.cpp +++ b/src/core/stdmsg/src/msgs.cpp @@ -387,35 +387,35 @@ int RegisterToolbarIcons(WPARAM, LPARAM) bbd.bbbFlags = BBBF_ISPUSHBUTTON | BBBF_ISCHATBUTTON | BBBF_CREATEBYID; bbd.dwButtonID = IDC_SRMM_BOLD; bbd.dwDefPos = 10; - bbd.hIcon = GetIconHandle("bold"); + bbd.hIcon = g_plugin.getIconHandle(IDI_BBOLD); bbd.pwszText = LPGENW("&Bold"); bbd.pwszTooltip = LPGENW("Make the text bold (Ctrl+B)"); Srmm_AddButton(&bbd, &g_plugin); bbd.dwButtonID = IDC_SRMM_ITALICS; bbd.dwDefPos = 15; - bbd.hIcon = GetIconHandle("italics"); + bbd.hIcon = g_plugin.getIconHandle(IDI_BITALICS); bbd.pwszText = LPGENW("&Italic"); bbd.pwszTooltip = LPGENW("Make the text italicized (Ctrl+I)"); Srmm_AddButton(&bbd, &g_plugin); bbd.dwButtonID = IDC_SRMM_UNDERLINE; bbd.dwDefPos = 20; - bbd.hIcon = GetIconHandle("underline"); + bbd.hIcon = g_plugin.getIconHandle(IDI_BUNDERLINE); bbd.pwszText = LPGENW("&Underline"); bbd.pwszTooltip = LPGENW("Make the text underlined (Ctrl+U)"); Srmm_AddButton(&bbd, &g_plugin); bbd.dwButtonID = IDC_SRMM_COLOR; bbd.dwDefPos = 25; - bbd.hIcon = GetIconHandle("fgcol"); + bbd.hIcon = g_plugin.getIconHandle(IDI_COLOR); bbd.pwszText = LPGENW("&Color"); bbd.pwszTooltip = LPGENW("Select a foreground color for the text (Ctrl+K)"); Srmm_AddButton(&bbd, &g_plugin); bbd.dwButtonID = IDC_SRMM_BKGCOLOR; bbd.dwDefPos = 30; - bbd.hIcon = GetIconHandle("bkgcol"); + bbd.hIcon = g_plugin.getIconHandle(IDI_BKGCOLOR); bbd.pwszText = LPGENW("&Background color"); bbd.pwszTooltip = LPGENW("Select a background color for the text (Ctrl+L)"); Srmm_AddButton(&bbd, &g_plugin); @@ -423,21 +423,21 @@ int RegisterToolbarIcons(WPARAM, LPARAM) bbd.bbbFlags = BBBF_ISCHATBUTTON | BBBF_ISRSIDEBUTTON | BBBF_CREATEBYID; bbd.dwButtonID = IDC_SRMM_CHANMGR; bbd.dwDefPos = 30; - bbd.hIcon = GetIconHandle("settings"); + bbd.hIcon = g_plugin.getIconHandle(IDI_TOPICBUT); bbd.pwszText = LPGENW("&Room settings"); bbd.pwszTooltip = LPGENW("Control this room (Ctrl+O)"); Srmm_AddButton(&bbd, &g_plugin); bbd.dwButtonID = IDC_SRMM_SHOWNICKLIST; bbd.dwDefPos = 20; - bbd.hIcon = GetIconHandle("nicklist"); + bbd.hIcon = g_plugin.getIconHandle(IDI_NICKLIST); bbd.pwszText = LPGENW("&Show/hide nick list"); bbd.pwszTooltip = LPGENW("Show/hide the nick list (Ctrl+N)"); Srmm_AddButton(&bbd, &g_plugin); bbd.dwButtonID = IDC_SRMM_FILTER; bbd.dwDefPos = 10; - bbd.hIcon = GetIconHandle("filter"); + bbd.hIcon = g_plugin.getIconHandle(IDI_FILTER); bbd.pwszText = LPGENW("&Filter"); bbd.pwszTooltip = LPGENW("Enable/disable the event filter (Ctrl+F)"); Srmm_AddButton(&bbd, &g_plugin); diff --git a/src/core/stdmsg/src/stdafx.h b/src/core/stdmsg/src/stdafx.h index 37e5664275..b24778cf89 100644 --- a/src/core/stdmsg/src/stdafx.h +++ b/src/core/stdmsg/src/stdafx.h @@ -134,8 +134,6 @@ SESSION_INFO* SM_GetNextWindow(SESSION_INFO *si); // options.cpp void AddIcons(void); -HICON LoadIconEx(const char *pszIcoLibName, bool big); -HANDLE GetIconHandle(const char *pszIcolibName); // tools.cpp void SetButtonsPos(HWND hwndDlg, bool bIsChat); diff --git a/src/core/stdmsg/src/tabs.cpp b/src/core/stdmsg/src/tabs.cpp index f295a01338..a5f12c1c1b 100644 --- a/src/core/stdmsg/src/tabs.cpp +++ b/src/core/stdmsg/src/tabs.cpp @@ -279,7 +279,7 @@ void CTabbedWindow::FixTabIcons(CMsgDialog *pDlg) if (g_dat.bUseStatusWinIcon) Window_SetProtoIcon_IcoLib(m_hwnd, pDlg->GetProto(), pDlg->GetStatus()); else if (pDlg->isChat()) - Window_SetIcon_IcoLib(m_hwnd, GetIconHandle("window")); + Window_SetIcon_IcoLib(m_hwnd, g_plugin.getIconHandle(IDI_CHANMGR)); else Window_SetSkinIcon_IcoLib(m_hwnd, SKINICON_EVENT_MESSAGE); } diff --git a/src/mir_app/src/CMPluginBase.cpp b/src/mir_app/src/CMPluginBase.cpp index 062d89471e..3ced1cf459 100644 --- a/src/mir_app/src/CMPluginBase.cpp +++ b/src/mir_app/src/CMPluginBase.cpp @@ -24,6 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" #include "plugins.h" +#include "IcoLib.h" static int sttFakeID = -100; @@ -111,9 +112,15 @@ EXTERN_C MIR_APP_DLL(void) UnregisterPlugin(CMPluginBase *pPlugin) ///////////////////////////////////////////////////////////////////////////////////////// +static int CompareIcons(const IcolibItem *p1, const IcolibItem *p2) +{ + return p1->default_indx - p2->default_indx; +} + CMPluginBase::CMPluginBase(const char *moduleName, const PLUGININFOEX &pInfo) : m_szModuleName(moduleName), - m_pInfo(pInfo) + m_pInfo(pInfo), + m_arIcons(10, CompareIcons) { if (m_hInst != nullptr) g_arPlugins.insert(this); @@ -272,6 +279,33 @@ void CMPluginBase::debugLogW(LPCWSTR wszFormat, ...) ///////////////////////////////////////////////////////////////////////////////////////// +int CMPluginBase::addImgListIcon(HIMAGELIST himl, int iconId) +{ + HICON hIcon = getIcon(iconId); + int ret = ::ImageList_AddIcon(himl, hIcon); + IcoLib_ReleaseIcon(hIcon); + return ret; +} + +HICON CMPluginBase::getIcon(int iconId, bool big) +{ + return IcoLib_GetIconByHandle(getIconHandle(iconId), big); +} + +HANDLE CMPluginBase::getIconHandle(int iconId) +{ + IcolibItem *p = (IcolibItem*)alloca(sizeof(IcolibItem)); + p->default_indx = -iconId; + return m_arIcons.find(p); +} + +void CMPluginBase::releaseIcon(int iconId, bool big) +{ + IcoLib_ReleaseIcon(getIcon(iconId), big); +} + +///////////////////////////////////////////////////////////////////////////////////////// + void CMPluginBase::RegisterProtocol(int type, pfnInitProto fnInit, pfnUninitProto fnUninit) { if (isPluginBanned(m_pInfo.uuid)) diff --git a/src/mir_app/src/clistmod.cpp b/src/mir_app/src/clistmod.cpp index e56308f232..ed4c445e2a 100644 --- a/src/mir_app/src/clistmod.cpp +++ b/src/mir_app/src/clistmod.cpp @@ -135,7 +135,7 @@ MIR_APP_DLL(int) Clist_GetContactIcon(MCONTACT hContact) static void AddProtoIconIndex(PROTOACCOUNT *pa) { for (auto &it : g_statuses) { - int iImg = ImageList_AddIcon_ProtoIconLibLoaded(hCListImages, pa->szModuleName, it.iStatus); + int iImg = ImageList_AddProtoIcon(hCListImages, pa->szModuleName, it.iStatus); if (it.iStatus == ID_STATUS_OFFLINE) pa->iIconBase = iImg; } diff --git a/src/mir_app/src/descbutton.cpp b/src/mir_app/src/descbutton.cpp index 965024ff65..0e737c2d33 100644 --- a/src/mir_app/src/descbutton.cpp +++ b/src/mir_app/src/descbutton.cpp @@ -26,8 +26,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" #include "m_descbutton.h" -extern HINSTANCE hInst; - //////////////////////////////////////////////////////////////////////////////////// // Internals diff --git a/src/mir_app/src/ei_baseIcon.cpp b/src/mir_app/src/ei_baseIcon.cpp index bc60215be9..0cca055e09 100644 --- a/src/mir_app/src/ei_baseIcon.cpp +++ b/src/mir_app/src/ei_baseIcon.cpp @@ -23,13 +23,16 @@ Boston, MA 02111-1307, USA. #include "extraicons.h" -BaseExtraIcon::BaseExtraIcon(const char *name, const wchar_t *description, const char *descIcon, MIRANDAHOOKPARAM OnClick, LPARAM param) : +BaseExtraIcon::BaseExtraIcon(const char *name, const wchar_t *description, HANDLE descIcon, MIRANDAHOOKPARAM OnClick, LPARAM param) : ExtraIcon(name), m_OnClick(OnClick), m_onClickParam(param), m_tszDescription(mir_wstrdup(description)), - m_szDescIcon(mir_strdup(descIcon)) + m_hDescIcon(descIcon) { + if (!IcoLib_IsManaged((HICON)descIcon)) + m_hDescIcon = IcoLib_GetIconHandle((const char *)descIcon); + m_id = registeredExtraIcons.getCount() + 1; } @@ -48,19 +51,9 @@ const wchar_t* BaseExtraIcon::getDescription() const return TranslateW_LP(m_tszDescription, m_pPlugin); } -void BaseExtraIcon::setDescription(const wchar_t *desc) -{ - m_tszDescription = mir_wstrdup(desc); -} - -const char* BaseExtraIcon::getDescIcon() const -{ - return m_szDescIcon; -} - -void BaseExtraIcon::setDescIcon(const char *icon) +HANDLE BaseExtraIcon::getDescIcon() const { - m_szDescIcon = mir_strdup(icon); + return m_hDescIcon; } void BaseExtraIcon::onClick(MCONTACT hContact) diff --git a/src/mir_app/src/ei_callbackIcon.cpp b/src/mir_app/src/ei_callbackIcon.cpp index 262ccc347d..2eb223c121 100644 --- a/src/mir_app/src/ei_callbackIcon.cpp +++ b/src/mir_app/src/ei_callbackIcon.cpp @@ -23,7 +23,7 @@ Boston, MA 02111-1307, USA. #include "extraicons.h" -CallbackExtraIcon::CallbackExtraIcon(const char *_name, const wchar_t *_description, const char *_descIcon, +CallbackExtraIcon::CallbackExtraIcon(const char *_name, const wchar_t *_description, HANDLE _descIcon, MIRANDAHOOK _RebuildIcons, MIRANDAHOOK _ApplyIcon, MIRANDAHOOKPARAM _OnClick, LPARAM _param) : BaseExtraIcon(_name, _description, _descIcon, _OnClick, _param), m_pfnRebuildIcons(_RebuildIcons), m_pfnApplyIcon(_ApplyIcon), m_needToRebuild(true) diff --git a/src/mir_app/src/ei_defaulticons.cpp b/src/mir_app/src/ei_defaulticons.cpp index 39cb7c273a..300e36bcdd 100644 --- a/src/mir_app/src/ei_defaulticons.cpp +++ b/src/mir_app/src/ei_defaulticons.cpp @@ -290,17 +290,17 @@ static int ProtocolOnClick(WPARAM wParam, LPARAM, LPARAM) void DefaultExtraIcons_Load() { hExtraChat = ExtraIcon_RegisterIcolib("chat_activity", LPGEN("Chat activity"), "ChatActivity"); - hExtraVisibility = ExtraIcon_RegisterIcolib("visibility", "Visibility", Skin_GetIconName(SKINICON_OTHER_VISIBLE_ALL)); + hExtraVisibility = ExtraIcon_RegisterIcolib("visibility", "Visibility", Skin_GetIconHandle(SKINICON_OTHER_VISIBLE_ALL)); hExtraGender = ExtraIcon_RegisterIcolib("gender", "Gender", "gender_male", nullptr, 0, EIF_DISABLED_BY_DEFAULT); - hExtraProto = ExtraIcon_RegisterCallback("protocol", "Account", Skin_GetIconName(SKINICON_OTHER_ACCMGR), + hExtraProto = ExtraIcon_RegisterCallback("protocol", "Account", Skin_GetIconHandle(SKINICON_OTHER_ACCMGR), &ProtocolRebuildIcons, &ProtocolApplyIcon, &ProtocolOnClick, 0, EIF_DISABLED_BY_DEFAULT); for (auto &p : infos) { p.hIcolib = Skin_GetIconHandle(p.iSkinIcon); if (p.OnClick) - p.hExtraIcon = ExtraIcon_RegisterIcolib(p.name, p.desc, Skin_GetIconName(p.iSkinIcon), DefaultOnClick, (LPARAM)&p, p.flags); + p.hExtraIcon = ExtraIcon_RegisterIcolib(p.name, p.desc, Skin_GetIconHandle(p.iSkinIcon), DefaultOnClick, (LPARAM)&p, p.flags); else - p.hExtraIcon = ExtraIcon_RegisterIcolib(p.name, p.desc, Skin_GetIconName(p.iSkinIcon), nullptr, 0, p.flags); + p.hExtraIcon = ExtraIcon_RegisterIcolib(p.name, p.desc, Skin_GetIconHandle(p.iSkinIcon), nullptr, 0, p.flags); } for (auto &hContact : Contacts()) { diff --git a/src/mir_app/src/ei_groupIcon.cpp b/src/mir_app/src/ei_groupIcon.cpp index fffea046f7..0f1313d297 100644 --- a/src/mir_app/src/ei_groupIcon.cpp +++ b/src/mir_app/src/ei_groupIcon.cpp @@ -177,13 +177,13 @@ const wchar_t* ExtraIconGroup::getDescription() const return m_tszDescription; } -const char *ExtraIconGroup::getDescIcon() const +HANDLE ExtraIconGroup::getDescIcon() const { for (auto &p : m_items) - if (!IsEmpty(p->getDescIcon())) - return p->getDescIcon(); + if (HANDLE ret = p->getDescIcon()) + return ret; - return ""; + return nullptr; } int ExtraIconGroup::getType() const diff --git a/src/mir_app/src/ei_icolibIcon.cpp b/src/mir_app/src/ei_icolibIcon.cpp index df9b33da05..bdb3b16125 100644 --- a/src/mir_app/src/ei_icolibIcon.cpp +++ b/src/mir_app/src/ei_icolibIcon.cpp @@ -26,7 +26,7 @@ Boston, MA 02111-1307, USA. #include "IcoLib.h" -IcolibExtraIcon::IcolibExtraIcon(const char *_name, const wchar_t *_description, const char *_descIcon, MIRANDAHOOKPARAM _OnClick, LPARAM _param) : +IcolibExtraIcon::IcolibExtraIcon(const char *_name, const wchar_t *_description, HANDLE _descIcon, MIRANDAHOOKPARAM _OnClick, LPARAM _param) : BaseExtraIcon(_name, _description, _descIcon, _OnClick, _param) { db_set_resident(EI_MODULE_NAME, _name); diff --git a/src/mir_app/src/ei_options.cpp b/src/mir_app/src/ei_options.cpp index 64137ece40..12621029be 100644 --- a/src/mir_app/src/ei_options.cpp +++ b/src/mir_app/src/ei_options.cpp @@ -117,7 +117,7 @@ class CExtraIconOptsDlg : public CDlgBase BaseExtraIcon *extra = registeredExtraIcons[group.data[i] - 1]; ids->add(extra->getID()); - if (img == 0 && !IsEmpty(extra->getDescIcon())) + if (img == 0 && extra->getDescIcon() != nullptr) img = extra->getID(); if (i > 0) @@ -414,23 +414,20 @@ public: void BuildIconList() { HIMAGELIST hImageList = ImageList_Create(g_iIconSX, g_iIconSX, ILC_COLOR32 | ILC_MASK, 2, 2); - - HICON hBlankIcon = (HICON)LoadImage(g_plugin.getInst(), MAKEINTRESOURCE(IDI_BLANK), IMAGE_ICON, g_iIconSX, g_iIconSX, 0); - ImageList_AddIcon(hImageList, hBlankIcon); + ImageList_AddIcon_NotShared(hImageList, MAKEINTRESOURCE(IDI_BLANK)); for (auto &extra : registeredExtraIcons) { extra->setID(registeredExtraIcons.indexOf(&extra)+1); - HICON hIcon = IcoLib_GetIcon(extra->getDescIcon()); + HICON hIcon = IcoLib_GetIconByHandle(extra->getDescIcon()); if (hIcon == nullptr) - ImageList_AddIcon(hImageList, hBlankIcon); + ImageList_AddIcon_NotShared(hImageList, MAKEINTRESOURCE(IDI_BLANK)); else { ImageList_AddIcon(hImageList, hIcon); IcoLib_ReleaseIcon(hIcon); } } m_tree.SetImageList(hImageList, TVSIL_NORMAL); - DestroyIcon(hBlankIcon); for (auto &extra : extraIconsBySlot) { if (extra->getType() == EXTRAICON_TYPE_GROUP) { diff --git a/src/mir_app/src/ei_services.cpp b/src/mir_app/src/ei_services.cpp index 65cab195c6..ab09af39ca 100644 --- a/src/mir_app/src/ei_services.cpp +++ b/src/mir_app/src/ei_services.cpp @@ -350,9 +350,8 @@ static void EI_PostCreate(BaseExtraIcon *extra, const char *name, int flags) } } -EXTERN_C MIR_APP_DLL(HANDLE) ExtraIcon_RegisterCallback(const char *name, const char *description, const char *descIcon, - MIRANDAHOOK RebuildIcons, MIRANDAHOOK ApplyIcon, - MIRANDAHOOKPARAM OnClick, LPARAM onClickParam, int flags) +EXTERN_C MIR_APP_DLL(HANDLE) ExtraIcon_RegisterCallback(const char *name, const char *description, HANDLE descIcon, + MIRANDAHOOK RebuildIcons, MIRANDAHOOK ApplyIcon, MIRANDAHOOKPARAM OnClick, LPARAM onClickParam, int flags) { // EXTRAICON_TYPE_CALLBACK if (IsEmpty(name) || IsEmpty(description)) @@ -367,14 +366,13 @@ EXTERN_C MIR_APP_DLL(HANDLE) ExtraIcon_RegisterCallback(const char *name, const ptrW tszDesc(mir_a2u(description)); - BaseExtraIcon *extra = new CallbackExtraIcon(name, tszDesc, descIcon == nullptr ? "" : descIcon, RebuildIcons, ApplyIcon, OnClick, onClickParam); + BaseExtraIcon *extra = new CallbackExtraIcon(name, tszDesc, descIcon, RebuildIcons, ApplyIcon, OnClick, onClickParam); extra->m_pPlugin = &GetPluginByInstance(GetInstByAddress(RebuildIcons)); EI_PostCreate(extra, name, flags); return extra; } -EXTERN_C MIR_APP_DLL(HANDLE) ExtraIcon_RegisterIcolib(const char *name, const char *description, const char *descIcon, - MIRANDAHOOKPARAM OnClick, LPARAM onClickParam, int flags) +EXTERN_C MIR_APP_DLL(HANDLE) ExtraIcon_RegisterIcolib(const char *name, const char *description, HANDLE descIcon, MIRANDAHOOKPARAM OnClick, LPARAM onClickParam, int flags) { if (IsEmpty(name) || IsEmpty(description)) return nullptr; @@ -387,7 +385,7 @@ EXTERN_C MIR_APP_DLL(HANDLE) ExtraIcon_RegisterIcolib(const char *name, const ch return nullptr; // Found one, now merge it - if (!IsEmpty(descIcon)) + if (descIcon) extra->setDescIcon(descIcon); if (OnClick != nullptr) @@ -401,7 +399,7 @@ EXTERN_C MIR_APP_DLL(HANDLE) ExtraIcon_RegisterIcolib(const char *name, const ch } } else { - extra = new IcolibExtraIcon(name, tszDesc, descIcon == nullptr ? "" : descIcon, OnClick, onClickParam); + extra = new IcolibExtraIcon(name, tszDesc, descIcon, OnClick, onClickParam); extra->m_pPlugin = &GetPluginByInstance(GetInstByAddress((void*)name)); EI_PostCreate(extra, name, flags); } diff --git a/src/mir_app/src/extraicons.h b/src/mir_app/src/extraicons.h index 9c72dc3bad..67838ebdf0 100644 --- a/src/mir_app/src/extraicons.h +++ b/src/mir_app/src/extraicons.h @@ -60,7 +60,7 @@ public: virtual const char *getName() const; virtual const wchar_t *getDescription() const = 0; - virtual const char *getDescIcon() const = 0; + virtual HANDLE getDescIcon() const = 0; virtual int getType() const = 0; virtual int getSlot() const; @@ -91,13 +91,19 @@ protected: class BaseExtraIcon : public ExtraIcon { public: - BaseExtraIcon(const char *name, const wchar_t *description, const char *descIcon, MIRANDAHOOKPARAM OnClick, LPARAM param); + BaseExtraIcon(const char *name, const wchar_t *description, HANDLE descIcon, MIRANDAHOOKPARAM OnClick, LPARAM param); virtual ~BaseExtraIcon(); virtual const wchar_t* getDescription() const; - virtual void setDescription(const wchar_t *desc); - virtual const char* getDescIcon() const; - virtual void setDescIcon(const char *icon); + virtual void setDescription(const wchar_t *desc) { + m_tszDescription = mir_wstrdup(desc); + } + + virtual HANDLE getDescIcon() const; + void setDescIcon(HANDLE icon) { + m_hDescIcon = icon; + } + virtual int getType() const = 0; virtual void onClick(MCONTACT hContact); @@ -107,7 +113,7 @@ public: protected: ptrW m_tszDescription; - ptrA m_szDescIcon; + HANDLE m_hDescIcon; MIRANDAHOOKPARAM m_OnClick; LPARAM m_onClickParam; }; @@ -118,7 +124,7 @@ protected: class CallbackExtraIcon : public BaseExtraIcon { public: - CallbackExtraIcon(const char *name, const wchar_t *description, const char *descIcon, + CallbackExtraIcon(const char *name, const wchar_t *description, HANDLE descIcon, MIRANDAHOOK RebuildIcons, MIRANDAHOOK ApplyIcon, MIRANDAHOOKPARAM OnClick, LPARAM param); virtual ~CallbackExtraIcon(); @@ -143,7 +149,7 @@ private: class IcolibExtraIcon : public BaseExtraIcon { public: - IcolibExtraIcon(const char *name, const wchar_t *description, const char *descIcon, MIRANDAHOOKPARAM OnClick, LPARAM param); + IcolibExtraIcon(const char *name, const wchar_t *description, HANDLE descIcon, MIRANDAHOOKPARAM OnClick, LPARAM param); virtual ~IcolibExtraIcon(); virtual int getType() const; @@ -175,7 +181,7 @@ public: virtual int setIconByName(MCONTACT hContact, const char *icon); virtual const wchar_t* getDescription() const; - virtual const char* getDescIcon() const; + virtual HANDLE getDescIcon() const; virtual int getType() const; virtual int getPosition() const; diff --git a/src/mir_app/src/findadd.cpp b/src/mir_app/src/findadd.cpp index fdd69d0ef4..aca9b86624 100644 --- a/src/mir_app/src/findadd.cpp +++ b/src/mir_app/src/findadd.cpp @@ -390,7 +390,7 @@ static INT_PTR CALLBACK DlgProcFindAdd(HWND hwndDlg, UINT msg, WPARAM wParam, LP GetTextExtentPoint32(hdc, cbei.pszText, (int)mir_wstrlen(cbei.pszText), &textSize); if (textSize.cx > cbwidth) cbwidth = textSize.cx; - cbei.iImage = cbei.iSelectedImage = ImageList_AddIcon_IconLibLoaded(dat->himlComboIcons, SKINICON_OTHER_SEARCHALL); + cbei.iImage = cbei.iSelectedImage = ImageList_AddSkinIcon(dat->himlComboIcons, SKINICON_OTHER_SEARCHALL); cbei.lParam = 0; SendDlgItemMessage(hwndDlg, IDC_PROTOLIST, CBEM_INSERTITEM, 0, (LPARAM)&cbei); cbei.iItem++; diff --git a/src/mir_app/src/headerbar.cpp b/src/mir_app/src/headerbar.cpp index 1257f67144..d317b789ed 100644 --- a/src/mir_app/src/headerbar.cpp +++ b/src/mir_app/src/headerbar.cpp @@ -24,9 +24,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "stdafx.h" -#include "m_iconheader.h" - -extern HINSTANCE hInst; static BOOL IsAeroMode() { @@ -42,8 +39,6 @@ static BOOL IsVSMode() //////////////////////////////////////////////////////////////////////////////////// // Internals -static LRESULT CALLBACK MHeaderbarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); - // structure is used for storing list of tab info struct MHeaderbarCtrl : public MZeroedObject { @@ -68,19 +63,6 @@ struct MHeaderbarCtrl : public MZeroedObject HFONT hFont; }; -int LoadHeaderbarModule() -{ - WNDCLASSEX wc = { 0 }; - wc.cbSize = sizeof(wc); - wc.lpszClassName = L"MHeaderbarCtrl"; - wc.lpfnWndProc = MHeaderbarWndProc; - wc.hCursor = LoadCursor(nullptr, IDC_ARROW); - wc.cbWndExtra = sizeof(MHeaderbarCtrl*); - wc.style = CS_GLOBALCLASS|CS_SAVEBITS; - RegisterClassEx(&wc); - return 0; -} - static void MHeaderbar_SetupColors(MHeaderbarCtrl *dat) { COLORREF cl = GetSysColor(COLOR_WINDOW); @@ -342,3 +324,16 @@ static LRESULT CALLBACK MHeaderbarWndProc(HWND hwndDlg, UINT msg, WPARAM wParam } return DefWindowProc(hwndDlg, msg, wParam, lParam); } + +int LoadHeaderbarModule() +{ + WNDCLASSEX wc = { 0 }; + wc.cbSize = sizeof(wc); + wc.lpszClassName = L"MHeaderbarCtrl"; + wc.lpfnWndProc = MHeaderbarWndProc; + wc.hCursor = LoadCursor(nullptr, IDC_ARROW); + wc.cbWndExtra = sizeof(MHeaderbarCtrl*); + wc.style = CS_GLOBALCLASS | CS_SAVEBITS; + RegisterClassEx(&wc); + return 0; +} diff --git a/src/mir_app/src/hotkey_opts.cpp b/src/mir_app/src/hotkey_opts.cpp index ac1e2b23c4..58d07e1e5c 100644 --- a/src/mir_app/src/hotkey_opts.cpp +++ b/src/mir_app/src/hotkey_opts.cpp @@ -472,14 +472,14 @@ static INT_PTR CALLBACK sttOptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, Hotkey_Subclass(GetDlgItem(hwndDlg, IDC_HOTKEY)); { HIMAGELIST hIml = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 3, 1); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_WINDOWS); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_MIRANDA); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_WINDOW); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_ADDCONTACT); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_DELETE); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_UNDO); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_GROUPOPEN); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_GROUPSHUT); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_WINDOWS); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_MIRANDA); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_WINDOW); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_ADDCONTACT); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_DELETE); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_UNDO); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_GROUPOPEN); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_GROUPSHUT); ListView_SetImageList(hwndHotkey, hIml, LVSIL_SMALL); } ListView_SetExtendedListViewStyle(hwndHotkey, LVS_EX_CHECKBOXES | LVS_EX_SUBITEMIMAGES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER | LVS_EX_INFOTIP); diff --git a/src/mir_app/src/icolib.cpp b/src/mir_app/src/icolib.cpp index e8605688c4..6069202925 100644 --- a/src/mir_app/src/icolib.cpp +++ b/src/mir_app/src/icolib.cpp @@ -522,6 +522,9 @@ MIR_APP_DLL(HANDLE) IcoLib_AddIcon(const SKINICONDESC *sid, HPLUGIN pPlugin) if (item->section) item->section->flags = sid->flags & SIDF_SORTED; + if (pPlugin && item->default_indx) + ((CMPluginBase*)pPlugin)->addIcolib(item); + return item; } diff --git a/src/mir_app/src/iconheader.cpp b/src/mir_app/src/iconheader.cpp deleted file mode 100644 index 4ded67b2d9..0000000000 --- a/src/mir_app/src/iconheader.cpp +++ /dev/null @@ -1,525 +0,0 @@ -/* - -Miranda NG: the free IM client for Microsoft* Windows* - -Copyright (C) 2012-19 Miranda NG team (https://miranda-ng.org), -Copyright (c) 2000-12 Miranda IM project, -Copyright (c) 2007 Artem Shpynov -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -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 2 -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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "stdafx.h" -#include "m_iconheader.h" - -extern HINSTANCE hInst; - -static BOOL IsAeroMode() -{ - BOOL result; - return dwmIsCompositionEnabled && (dwmIsCompositionEnabled(&result) == S_OK) && result; -} - -static BOOL IsVSMode() -{ - return IsWinVerVistaPlus() && IsThemeActive(); -} - -//////////////////////////////////////////////////////////////////////////////////// -// Internals - -#define ITC_BORDER_SIZE 3 - -// structure is used for storing list of tab info -struct MIcoTabCtrl : public MZeroedObject -{ - MIcoTabCtrl() : pList(1) {} - - HWND hwnd; - int nSelectedIdx, nHotIdx; - LIST pList; - - // UI info - BOOL bMouseInside; - RECT rc; - int width, height; - int itemWidth, itemHeight; - - //background bitmap - HBITMAP hBkgBmp; - HBITMAP hBkgOldBmp; - HDC hBkgDC; - SIZE BkgSize; - - // control colors - RGBQUAD rgbBkgTop, rgbBkgBottom; - RGBQUAD rgbSelTop, rgbSelBottom; - RGBQUAD rgbHotTop, rgbHotBottom; - COLORREF clText; - COLORREF clSelText, clSelBorder; - COLORREF clHotText, clHotBorder; - - // fonts - HFONT hFont; -}; - -typedef void (*ItemDestuctor)(void*); - -static void MITListDestructor(void * adr) -{ - MIcoTab *mit = (MIcoTab *)adr; - mir_free(mit->tcsName); - if (mit->hIcon && !(mit->flag&MITCF_SHAREDICON)) - DestroyIcon(mit->hIcon); - mir_free(adr); -} - -void li_ListDestruct(LIST &pList, ItemDestuctor pItemDestructor) -{ - for (auto &p : pList) - pItemDestructor(p); - pList.destroy(); -} - -static void MIcoTab_SetupColors(MIcoTabCtrl *dat) -{ - COLORREF cl = GetSysColor(COLOR_WINDOW); - dat->rgbBkgBottom.rgbRed = (dat->rgbBkgTop.rgbRed = GetRValue(cl)) * .95; - dat->rgbBkgBottom.rgbGreen = (dat->rgbBkgTop.rgbGreen = GetGValue(cl)) * .95; - dat->rgbBkgBottom.rgbBlue = (dat->rgbBkgTop.rgbBlue = GetBValue(cl)) * .95; - - cl = GetSysColor(COLOR_HIGHLIGHT); - dat->rgbSelTop.rgbRed = (dat->rgbSelBottom.rgbRed = GetRValue(cl)) * .75; - dat->rgbSelTop.rgbGreen = (dat->rgbSelBottom.rgbGreen = GetGValue(cl)) * .75; - dat->rgbSelTop.rgbBlue = (dat->rgbSelBottom.rgbBlue = GetBValue(cl)) * .75; - - dat->rgbHotTop.rgbRed = (dat->rgbSelTop.rgbRed + 255) / 2; - dat->rgbHotTop.rgbGreen = (dat->rgbSelTop.rgbGreen + 255) / 2; - dat->rgbHotTop.rgbBlue = (dat->rgbSelTop.rgbBlue + 255) / 2; - - dat->rgbHotBottom.rgbRed = (dat->rgbSelBottom.rgbRed + 255) / 2; - dat->rgbHotBottom.rgbGreen = (dat->rgbSelBottom.rgbGreen + 255) / 2; - dat->rgbHotBottom.rgbBlue = (dat->rgbSelBottom.rgbBlue + 255) / 2; - - dat->clText = GetSysColor(COLOR_WINDOWTEXT); - dat->clSelText = GetSysColor(COLOR_HIGHLIGHTTEXT); - dat->clSelBorder = RGB(dat->rgbSelTop.rgbRed, dat->rgbSelTop.rgbGreen, dat->rgbSelTop.rgbBlue); - dat->clHotBorder = RGB(dat->rgbHotTop.rgbRed, dat->rgbHotTop.rgbGreen, dat->rgbHotTop.rgbBlue); - - if (!dat->hFont) - dat->hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); -} - -static void MIcoTab_FillRect(HDC hdc, int x, int y, int width, int height, COLORREF cl) -{ - int oldMode = SetBkMode(hdc, OPAQUE); - COLORREF oldColor = SetBkColor(hdc, cl); - - RECT rc; SetRect(&rc, x, y, x + width, y + height); - ExtTextOutA(hdc, 0, 0, ETO_OPAQUE, &rc, "", 0, nullptr); - - SetBkMode(hdc, oldMode); - SetBkColor(hdc, oldColor); -} - -static void MIcoTab_DrawGradient(HDC hdc, int x, int y, int width, int height, RGBQUAD *rgb0, RGBQUAD *rgb1) -{ - int oldMode = SetBkMode(hdc, OPAQUE); - COLORREF oldColor = SetBkColor(hdc, 0); - - RECT rc; - SetRect(&rc, x, 0, x + width, 0); - - for (int i = y + height; --i >= y;) { - COLORREF color = RGB( - ((height - i - 1)*rgb0->rgbRed + i*rgb1->rgbRed) / height, - ((height - i - 1)*rgb0->rgbGreen + i*rgb1->rgbGreen) / height, - ((height - i - 1)*rgb0->rgbBlue + i*rgb1->rgbBlue) / height); - rc.top = rc.bottom = i; - ++rc.bottom; - SetBkColor(hdc, color); - ExtTextOutA(hdc, 0, 0, ETO_OPAQUE, &rc, "", 0, nullptr); - } - - SetBkMode(hdc, oldMode); - SetBkColor(hdc, oldColor); -} - -static void MIcoTab_DrawItem(HWND hwnd, HDC hdc, MIcoTabCtrl *dat, MIcoTab *tab, int i) -{ - int iTopSpace = IsAeroMode() ? 0 : ITC_BORDER_SIZE; - int itemX = ITC_BORDER_SIZE + dat->itemWidth * i; - int iconTop = iTopSpace + 5; - int textTop = iconTop + 32 + 3; - - HFONT hFntSave = nullptr; - - if (dat->nSelectedIdx == i) { - LOGFONT lf; - GetObject(GetCurrentObject(hdc, OBJ_FONT), sizeof(lf), &lf); - lf.lfWeight = FW_BOLD; - hFntSave = (HFONT)SelectObject(hdc, CreateFontIndirect(&lf)); - - if (IsVSMode()) { - RECT rc; - rc.left = itemX; - rc.top = iTopSpace; - rc.right = itemX + dat->itemWidth; - rc.bottom = iTopSpace + dat->itemHeight; - HANDLE hTheme = OpenThemeData(hwnd, L"ListView"); - if (dat->nHotIdx == i || GetFocus() == hwnd) - DrawThemeBackground(hTheme, hdc, LVP_LISTITEM, LISS_HOTSELECTED, &rc, nullptr); - else - DrawThemeBackground(hTheme, hdc, LVP_LISTITEM, LISS_SELECTED, &rc, nullptr); - - CloseThemeData(hTheme); - } - else { - MIcoTab_FillRect(hdc, itemX, ITC_BORDER_SIZE, dat->itemWidth, dat->itemHeight, dat->clSelBorder); - MIcoTab_DrawGradient(hdc, itemX + 1, ITC_BORDER_SIZE + 1, dat->itemWidth - 2, dat->itemHeight - 2, &dat->rgbSelTop, &dat->rgbSelBottom); - } - SetTextColor(hdc, dat->clSelText); - } - else if (dat->nHotIdx == i) { - if (IsVSMode()) { - RECT rc; - rc.left = itemX; - rc.top = iTopSpace; - rc.right = itemX + dat->itemWidth; - rc.bottom = iTopSpace + dat->itemHeight; - SetWindowTheme(hwnd, L"explorer", nullptr); - HANDLE hTheme = OpenThemeData(hwnd, L"ListView"); - DrawThemeBackground(hTheme, hdc, LVP_LISTITEM, LISS_HOT, &rc, nullptr); - CloseThemeData(hTheme); - } - else { - MIcoTab_FillRect(hdc, itemX, ITC_BORDER_SIZE, dat->itemWidth, dat->itemHeight, dat->clHotBorder); - MIcoTab_DrawGradient(hdc, itemX + 1, ITC_BORDER_SIZE + 1, dat->itemWidth - 2, dat->itemHeight - 2, &dat->rgbHotTop, &dat->rgbHotBottom); - } - SetTextColor(hdc, dat->clHotText); - } - else SetTextColor(hdc, dat->clText); - - RECT textRect; - textRect.left = itemX; - textRect.right = itemX + dat->itemWidth; - textRect.top = textTop; - textRect.bottom = iconTop + dat->itemHeight; - DrawIcon(hdc, itemX + dat->itemWidth / 2 - 16, iconTop, tab->hIcon); - - if (IsVSMode()) { - DTTOPTS dto = { 0 }; - dto.dwSize = sizeof(dto); - dto.dwFlags = DTT_COMPOSITED | DTT_GLOWSIZE; - dto.iGlowSize = 10; - HANDLE hTheme = OpenThemeData(hwnd, L"Window"); - drawThemeTextEx(hTheme, hdc, WP_CAPTION, CS_ACTIVE, tab->tcsName, -1, DT_VCENTER | DT_CENTER | DT_END_ELLIPSIS, &textRect, &dto); - CloseThemeData(hTheme); - } - else DrawText(hdc, tab->tcsName, -1, &textRect, DT_VCENTER | DT_CENTER | DT_END_ELLIPSIS); - - if (hFntSave) - DeleteObject(SelectObject(hdc, hFntSave)); -} - -static LRESULT MIcoTab_OnPaint(HWND hwndDlg, MIcoTabCtrl *mit) -{ - PAINTSTRUCT ps; - - HDC hdc = BeginPaint(hwndDlg, &ps); - HDC tempDC = CreateCompatibleDC(hdc); - - BITMAPINFO bmi = { 0 }; - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmi.bmiHeader.biWidth = mit->width; - bmi.bmiHeader.biHeight = -mit->height; // we need this for DrawThemeTextEx - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biBitCount = 32; - bmi.bmiHeader.biCompression = BI_RGB; - HBITMAP hBmp = CreateDIBSection(tempDC, &bmi, DIB_RGB_COLORS, nullptr, nullptr, 0); - - HBITMAP hOldBmp = (HBITMAP)SelectObject(tempDC, hBmp); - - if (IsAeroMode()) { - RECT temprc; - temprc.left = 0; - temprc.right = mit->width; - temprc.top = 0; - temprc.bottom = mit->width; - FillRect(tempDC, &temprc, (HBRUSH)GetStockObject(BLACK_BRUSH)); - } - else { - if (mit->hBkgBmp) - StretchBlt(tempDC, 0, 0, mit->width, mit->height, mit->hBkgDC, 0, 0, mit->BkgSize.cx, mit->BkgSize.cy, SRCCOPY); - else { - if (IsVSMode()) - MIcoTab_FillRect(tempDC, 0, 0, mit->width, mit->height, GetSysColor(COLOR_WINDOW)); - else - MIcoTab_DrawGradient(tempDC, 0, 0, mit->width, mit->height, &mit->rgbBkgTop, &mit->rgbBkgBottom); - - MIcoTab_FillRect(tempDC, 0, mit->height - 2, mit->width, 1, GetSysColor(COLOR_BTNSHADOW)); - MIcoTab_FillRect(tempDC, 0, mit->height - 1, mit->width, 1, GetSysColor(COLOR_BTNHIGHLIGHT)); - } - } - - //Draw Items - HFONT hFont = mit->hFont; - HFONT hOldFont = (HFONT)SelectObject(tempDC, hFont); - SetBkMode(tempDC, TRANSPARENT); - - for (int i = 0; i < mit->pList.getCount(); i++) - MIcoTab_DrawItem(hwndDlg, tempDC, mit, mit->pList[i], i); - - //Copy to output - BitBlt(hdc, mit->rc.left, mit->rc.top, mit->width, mit->height, tempDC, 0, 0, SRCCOPY); - SelectObject(tempDC, hOldBmp); - DeleteObject(hBmp); - SelectObject(tempDC, hOldFont); - DeleteDC(tempDC); - - EndPaint(hwndDlg, &ps); - - return TRUE; -} - -static LRESULT CALLBACK MIcoTabWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - MIcoTabCtrl* itc = (MIcoTabCtrl *)GetWindowLongPtr(hwndDlg, 0); - switch (uMsg) { - case WM_NCCREATE: - itc = new MIcoTabCtrl; //(MIcoTabCtrl*)mir_alloc(sizeof(MIcoTabCtrl)); - itc->nSelectedIdx = -1; - itc->nHotIdx = -1; - itc->bMouseInside = FALSE; - SetWindowLongPtr(hwndDlg, 0, (LONG_PTR)itc); - MIcoTab_SetupColors(itc); - - if (IsAeroMode()) { - RECT rc; - GetWindowRect(hwndDlg, &rc); - - MARGINS margins = { 0, 0, rc.bottom - rc.top, 0 }; - dwmExtendFrameIntoClientArea(GetParent(hwndDlg), &margins); - } - - return TRUE; - - case WM_SETFONT: - itc->hFont = (HFONT)wParam; - break; - - case WM_SIZE: - GetClientRect(hwndDlg, &itc->rc); - itc->width = itc->rc.right - itc->rc.left; - itc->height = itc->rc.bottom - itc->rc.top; - - if (itc->pList.getCount()) { - itc->itemWidth = (itc->width - 2 * ITC_BORDER_SIZE) / itc->pList.getCount(); - itc->itemHeight = itc->height - 2 * ITC_BORDER_SIZE - 2; - } - else itc->itemWidth = itc->itemHeight = 0; - return TRUE; - - case WM_THEMECHANGED: - case WM_STYLECHANGED: - MIcoTab_SetupColors(itc); - return TRUE; - - case WM_MOUSEMOVE: - if (!itc->bMouseInside) { - TRACKMOUSEEVENT tme = { 0 }; - tme.cbSize = sizeof(tme); - tme.dwFlags = TME_LEAVE; - tme.hwndTrack = hwndDlg; - _TrackMouseEvent(&tme); - itc->bMouseInside = TRUE; - } - - itc->nHotIdx = -1; - if (itc->itemWidth != 0) { - int idx = (LOWORD(lParam) - ITC_BORDER_SIZE) / itc->itemWidth; - if (idx >= itc->pList.getCount()) - itc->nHotIdx = idx; - } - RedrawWindow(hwndDlg, nullptr, nullptr, RDW_INVALIDATE); - return 0; - - case WM_MOUSELEAVE: - itc->bMouseInside = FALSE; - itc->nHotIdx = -1; - RedrawWindow(hwndDlg, nullptr, nullptr, RDW_INVALIDATE); - return 0; - - case WM_LBUTTONUP: - if ((itc->nHotIdx >= 0) && (itc->nHotIdx != itc->nSelectedIdx)) { - itc->nSelectedIdx = itc->nHotIdx; - SetWindowText(hwndDlg, itc->pList[itc->nSelectedIdx]->tcsName); - RedrawWindow(hwndDlg, nullptr, nullptr, RDW_INVALIDATE); - SendMessage(GetParent(hwndDlg), WM_COMMAND, - MAKEWPARAM(GetWindowLongPtr(hwndDlg, GWL_ID), ITCN_SELCHANGED), - itc->nSelectedIdx); - } - return 0; - - case WM_SETFOCUS: - case WM_KILLFOCUS: - RedrawWindow(hwndDlg, nullptr, nullptr, RDW_INVALIDATE); - break; - - case WM_MOUSEACTIVATE: - SetFocus(hwndDlg); - return MA_ACTIVATE; - - case WM_GETDLGCODE: - if (lParam) { - MSG *msg = (MSG *)lParam; - if (msg->message == WM_KEYDOWN) { - if (msg->wParam == VK_TAB) - return 0; - if (msg->wParam == VK_ESCAPE) - return 0; - } - else if (msg->message == WM_CHAR) { - if (msg->wParam == '\t') - return 0; - if (msg->wParam == 27) - return 0; - } - } - return DLGC_WANTMESSAGE; - - case WM_KEYDOWN: - { - int newIdx = itc->nSelectedIdx; - switch (wParam) { - case VK_NEXT: - case VK_RIGHT: - newIdx++; - break; - case VK_PRIOR: - case VK_LEFT: - newIdx--; - break; - } - if (newIdx >= 0 && newIdx < itc->pList.getCount() && newIdx != itc->nSelectedIdx) { - itc->nSelectedIdx = newIdx; - SetWindowText(hwndDlg, itc->pList[itc->nSelectedIdx]->tcsName); - RedrawWindow(hwndDlg, nullptr, nullptr, RDW_INVALIDATE); - SendMessage(GetParent(hwndDlg), WM_COMMAND, - MAKEWPARAM(GetWindowLongPtr(hwndDlg, GWL_ID), ITCN_SELCHANGEDKBD), - itc->nSelectedIdx); - } - } - return 0; - - case WM_ERASEBKGND: - return 1; - - case WM_NCPAINT: - InvalidateRect(hwndDlg, nullptr, FALSE); - break; - - case WM_PAINT: - MIcoTab_OnPaint(hwndDlg, itc); - break; - - case ITCM_SETBACKGROUND: - itc->hBkgBmp = (HBITMAP)lParam; - if (!itc->hBkgDC) - itc->hBkgDC = CreateCompatibleDC(nullptr); - itc->hBkgOldBmp = (HBITMAP)SelectObject(itc->hBkgDC, itc->hBkgBmp); - { - BITMAPINFO bmp; - GetObject(itc->hBkgBmp, sizeof(bmp), &bmp); - itc->BkgSize.cx = bmp.bmiHeader.biWidth; - itc->BkgSize.cy = bmp.bmiHeader.biHeight; - } - return TRUE; - - case ITCM_ADDITEM: - { - MIcoTab* pMit = (MIcoTab *)wParam; - if (!pMit) - return FALSE; - - MIcoTab* pListMit = (MIcoTab *)mir_calloc(sizeof(MIcoTab)); - pListMit->flag = pMit->flag; - pListMit->data = pMit->data; - if (pMit->flag & MITCF_UNICODE) - pListMit->tcsName = mir_wstrdup(pMit->lpwzName); - else - pListMit->tcsName = mir_a2u(pMit->lpzName); - if (pMit->hIcon) { - if (pListMit->flag&MITCF_SHAREDICON) - pListMit->hIcon = pMit->hIcon; - else - pListMit->hIcon = CopyIcon(pMit->hIcon); - } - itc->pList.insert(pListMit); - - itc->itemWidth = (itc->width - 2 * ITC_BORDER_SIZE) / itc->pList.getCount(); - itc->itemHeight = itc->height - 2 * ITC_BORDER_SIZE - 2; - - RedrawWindow(hwndDlg, nullptr, nullptr, RDW_INVALIDATE); - } - return TRUE; - - case ITCM_SETSEL: - if ((int)wParam >= 0 && (int)wParam < itc->pList.getCount()) { - itc->nSelectedIdx = wParam; - SetWindowText(hwndDlg, itc->pList[itc->nSelectedIdx]->tcsName); - RedrawWindow(hwndDlg, nullptr, nullptr, RDW_INVALIDATE); - SendMessage(GetParent(hwndDlg), WM_COMMAND, - MAKEWPARAM(GetWindowLongPtr(hwndDlg, GWL_ID), ITCN_SELCHANGED), - itc->nSelectedIdx); - } - return TRUE; - - case ITCM_GETSEL: - return itc->nSelectedIdx; - - case ITCM_GETITEMDATA: - if ((int)wParam >= 0 && (int)wParam < itc->pList.getCount()) - return ((MIcoTab *)itc->pList[wParam])->data; - return 0; - - case WM_DESTROY: - if (itc->hBkgDC) { - SelectObject(itc->hBkgDC, itc->hBkgOldBmp); - DeleteDC(itc->hBkgDC); - } - li_ListDestruct(itc->pList, MITListDestructor); - delete itc; - return TRUE; - } - return DefWindowProc(hwndDlg, uMsg, wParam, lParam); -} - -///////////////////////////////////////////////////////////////////////////////////////// - -int LoadIcoTabsModule() -{ - WNDCLASSEX wc = {}; - wc.cbSize = sizeof(wc); - wc.lpszClassName = MIRANDAICOTABCLASS; - wc.lpfnWndProc = MIcoTabWndProc; - wc.hCursor = LoadCursor(nullptr, IDC_ARROW); - wc.cbWndExtra = sizeof(MIcoTabCtrl*); - wc.style = CS_GLOBALCLASS; - RegisterClassEx(&wc); - return 0; -} diff --git a/src/mir_app/src/ignore.cpp b/src/mir_app/src/ignore.cpp index 10ee55d64e..82a3772d17 100644 --- a/src/mir_app/src/ignore.cpp +++ b/src/mir_app/src/ignore.cpp @@ -208,14 +208,14 @@ static INT_PTR CALLBACK DlgProcIgnoreOpts(HWND hwndDlg, UINT msg, WPARAM, LPARAM TranslateDialogDefault(hwndDlg); { HIMAGELIST hIml = ImageList_Create(g_iIconSX, g_iIconSY, ILC_COLOR32 | ILC_MASK, 3 + IGNOREEVENT_MAX, 3 + IGNOREEVENT_MAX); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_SMALLDOT); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_FILLEDBLOB); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_EMPTYBLOB); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_EVENT_MESSAGE); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_EVENT_FILE); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_USERONLINE); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_AUTH_REQUEST); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_TYPING); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_SMALLDOT); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_FILLEDBLOB); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_EMPTYBLOB); + ImageList_AddSkinIcon(hIml, SKINICON_EVENT_MESSAGE); + ImageList_AddSkinIcon(hIml, SKINICON_EVENT_FILE); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_USERONLINE); + ImageList_AddSkinIcon(hIml, SKINICON_AUTH_REQUEST); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_TYPING); SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_SETEXTRAIMAGELIST, 0, (LPARAM)hIml); for (int i = 0; i < _countof(hIcons); i++) diff --git a/src/mir_app/src/menu_utils.cpp b/src/mir_app/src/menu_utils.cpp index b2328884d0..56681136af 100644 --- a/src/mir_app/src/menu_utils.cpp +++ b/src/mir_app/src/menu_utils.cpp @@ -1240,7 +1240,7 @@ static int MO_RegisterIcon(TMO_IntMenuItem *pmi, void*) sid.pszName = iconame; sid.description.w = descr; sid.hDefaultIcon = hIcon; - pmi->hIcolibItem = IcoLib_AddIcon(&sid, 0); + pmi->hIcolibItem = IcoLib_AddIcon(&sid, pmi->mi.pPlugin); Safe_DestroyIcon(hIcon); if (hIcon = IcoLib_GetIcon(iconame)) { diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index b99133764f..c04d269389 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -14,7 +14,7 @@ IcoLib_GetIconHandle @12 IcoLib_IsManaged @13 IcoLib_ReleaseIcon @14 Window_FreeIcon_IcoLib @15 -Window_SetSkinIcon_IcoLib @16 +Window_SetSkinIcon_IcoLib @16 Window_SetProtoIcon_IcoLib @17 ProtoServiceExists @18 mir_main @19 @@ -22,7 +22,6 @@ IcoLib_RemoveIcon @20 IcoLib_RemoveIconByHandle @21 IcoLib_Release @22 IcoLib_AddRef @23 -Skin_GetIconName @24 ??0CProtoIntDlgBase@@QAE@ABV0@@Z @25 NONAME ??0CProtoIntDlgBase@@QAE@PAUPROTO_INTERFACE@@H@Z @26 NONAME ??0PROTO_INTERFACE@@QAE@ABU0@@Z @27 NONAME @@ -675,3 +674,10 @@ Popup_Add @764 Popup_Change @765 Skin_GetProtoIcon @766 Srmm_SetIconFlags @767 +?addIcolib@CMPluginBase@@QAEXPAX@Z @768 NONAME +?getIcon@CMPluginBase@@QAEPAUHICON__@@H_N@Z @769 NONAME +?getIconHandle@CMPluginBase@@QAEPAXH@Z @770 NONAME +?releaseIcon@CMPluginBase@@QAEXH_N@Z @771 NONAME +?addImgListIcon@CMPluginBase@@QAEHPAU_IMAGELIST@@H@Z @772 NONAME +ImageList_AddProtoIcon @773 +ImageList_AddSkinIcon @774 diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 9b8928ccae..06c417483d 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -14,7 +14,7 @@ IcoLib_GetIconHandle @12 IcoLib_IsManaged @13 IcoLib_ReleaseIcon @14 Window_FreeIcon_IcoLib @15 -Window_SetSkinIcon_IcoLib @16 +Window_SetSkinIcon_IcoLib @16 Window_SetProtoIcon_IcoLib @17 ProtoServiceExists @18 mir_main @19 @@ -22,7 +22,6 @@ IcoLib_RemoveIcon @20 IcoLib_RemoveIconByHandle @21 IcoLib_Release @22 IcoLib_AddRef @23 -Skin_GetIconName @24 ??0CProtoIntDlgBase@@QEAA@AEBV0@@Z @25 NONAME ??0CProtoIntDlgBase@@QEAA@PEAUPROTO_INTERFACE@@H@Z @26 NONAME ??0PROTO_INTERFACE@@QEAA@AEBU0@@Z @27 NONAME @@ -675,3 +674,10 @@ Popup_Add @764 Popup_Change @765 Skin_GetProtoIcon @766 Srmm_SetIconFlags @767 +?addIcolib@CMPluginBase@@QEAAXPEAX@Z @768 NONAME +?getIcon@CMPluginBase@@QEAAPEAUHICON__@@H_N@Z @769 NONAME +?getIconHandle@CMPluginBase@@QEAAPEAXH@Z @770 NONAME +?releaseIcon@CMPluginBase@@QEAAXH_N@Z @771 NONAME +?addImgListIcon@CMPluginBase@@QEAAHPEAU_IMAGELIST@@H@Z @772 NONAME +ImageList_AddProtoIcon @773 +ImageList_AddSkinIcon @774 diff --git a/src/mir_app/src/miranda.h b/src/mir_app/src/miranda.h index 0a737d81c7..cd25f39443 100644 --- a/src/mir_app/src/miranda.h +++ b/src/mir_app/src/miranda.h @@ -103,10 +103,7 @@ extern int g_iIconX, g_iIconY, g_iIconSX, g_iIconSY; HICON LoadIconEx(HINSTANCE hInstance, LPCTSTR lpIconName, BOOL bShared); int ImageList_AddIcon_NotShared(HIMAGELIST hIml, LPCTSTR szResource); -int ImageList_ReplaceIcon_NotShared(HIMAGELIST hIml, int iIndex, HINSTANCE hInstance, LPCTSTR szResource); -int ImageList_AddIcon_IconLibLoaded(HIMAGELIST hIml, int iconId); -int ImageList_AddIcon_ProtoIconLibLoaded(HIMAGELIST hIml, const char *szProto, int iconId); int ImageList_ReplaceIcon_IconLibLoaded(HIMAGELIST hIml, int nIndex, HICON hIcon); #define Safe_DestroyIcon(hIcon) if (hIcon) DestroyIcon(hIcon) diff --git a/src/mir_app/src/modules.cpp b/src/mir_app/src/modules.cpp index 1f66b311f5..8bc7678013 100644 --- a/src/mir_app/src/modules.cpp +++ b/src/mir_app/src/modules.cpp @@ -76,7 +76,6 @@ void UnloadSkinHotkeys(void); void UnloadSrmmModule(void); void UnloadUtilsModule(void); -int LoadIcoTabsModule(); int LoadHeaderbarModule(); int LoadDescButtonModule(); @@ -87,7 +86,6 @@ int LoadDefaultModules(void) if (LoadLangPackModule()) return 1; // langpack will be a system module in the new order so this is moved here if (CheckRestart()) return 1; if (LoadUtilsModule()) return 1; - if (LoadIcoTabsModule()) return 1; if (LoadHeaderbarModule()) return 1; if (LoadDbintfModule()) return 1; diff --git a/src/mir_app/src/newplugins.cpp b/src/mir_app/src/newplugins.cpp index 4164f19ecc..72014fb9b7 100644 --- a/src/mir_app/src/newplugins.cpp +++ b/src/mir_app/src/newplugins.cpp @@ -528,11 +528,11 @@ static bool loadClistModule(wchar_t *exe, pluginEntry *p) // now all core skin icons are loaded via icon lib. so lets release them for (auto &it : g_statuses) - ImageList_AddIcon_IconLibLoaded(hCListImages, it.iSkinIcon); + ImageList_AddSkinIcon(hCListImages, it.iSkinIcon); // see IMAGE_GROUP... in clist.h if you add more images above here - ImageList_AddIcon_IconLibLoaded(hCListImages, SKINICON_OTHER_GROUPOPEN); - ImageList_AddIcon_IconLibLoaded(hCListImages, SKINICON_OTHER_GROUPSHUT); + ImageList_AddSkinIcon(hCListImages, SKINICON_OTHER_GROUPOPEN); + ImageList_AddSkinIcon(hCListImages, SKINICON_OTHER_GROUPSHUT); if (p->load() == 0) { p->bLoaded = true; diff --git a/src/mir_app/src/pluginopts.cpp b/src/mir_app/src/pluginopts.cpp index d7248a08b4..226fe9a9b2 100644 --- a/src/mir_app/src/pluginopts.cpp +++ b/src/mir_app/src/pluginopts.cpp @@ -290,8 +290,8 @@ public: bool OnInitDialog() override { HIMAGELIST hIml = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 4, 0); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_UNICODE); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_ANSI); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_UNICODE); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_ANSI); m_plugList.SetImageList(hIml, LVSIL_SMALL); LVCOLUMN col; diff --git a/src/mir_app/src/skinicons.cpp b/src/mir_app/src/skinicons.cpp index 8daff88fa2..5c5c4b5a2b 100644 --- a/src/mir_app/src/skinicons.cpp +++ b/src/mir_app/src/skinicons.cpp @@ -159,7 +159,7 @@ int ImageList_AddIcon_NotShared(HIMAGELIST hIml, LPCTSTR szResource) return res; } -int ImageList_AddIcon_IconLibLoaded(HIMAGELIST hIml, int iconId) +MIR_APP_DLL(int) ImageList_AddSkinIcon(HIMAGELIST hIml, int iconId) { HICON hIcon = Skin_LoadIcon(iconId); int res = ImageList_AddIcon(hIml, hIcon); @@ -167,7 +167,7 @@ int ImageList_AddIcon_IconLibLoaded(HIMAGELIST hIml, int iconId) return res; } -int ImageList_AddIcon_ProtoIconLibLoaded(HIMAGELIST hIml, const char *szProto, int iconId) +MIR_APP_DLL(int) ImageList_AddProtoIcon(HIMAGELIST hIml, const char *szProto, int iconId) { HICON hIcon = Skin_LoadProtoIcon(szProto, iconId); int res = ImageList_AddIcon(hIml, hIcon); @@ -175,14 +175,6 @@ int ImageList_AddIcon_ProtoIconLibLoaded(HIMAGELIST hIml, const char *szProto, i return res; } -int ImageList_ReplaceIcon_NotShared(HIMAGELIST hIml, int iIndex, HINSTANCE hInstance, LPCTSTR szResource) -{ - HICON hTempIcon = LoadIconEx(hInstance, szResource, 0); - int res = ImageList_ReplaceIcon(hIml, iIndex, hTempIcon); - Safe_DestroyIcon(hTempIcon); - return res; -} - int ImageList_ReplaceIcon_IconLibLoaded(HIMAGELIST hIml, int nIndex, HICON hIcon) { int res = ImageList_ReplaceIcon(hIml, nIndex, hIcon); @@ -357,19 +349,6 @@ MIR_APP_DLL(HANDLE) Skin_GetIconHandle(int idx) return nullptr; } -MIR_APP_DLL(char*) Skin_GetIconName(int idx) -{ - static char szIconName[100]; - - for (int i = 0; i < _countof(mainIcons); i++) { - if (idx == mainIcons[i].id) { - mir_snprintf(szIconName, "%s%d", mainIconsFmt, i); - return szIconName; - } - } - return nullptr; -} - MIR_APP_DLL(HICON) Skin_LoadIcon(int idx, bool big) { // Query for global status icons diff --git a/src/mir_app/src/visibility.cpp b/src/mir_app/src/visibility.cpp index e4bc479b61..f3a36df1de 100644 --- a/src/mir_app/src/visibility.cpp +++ b/src/mir_app/src/visibility.cpp @@ -139,9 +139,9 @@ static INT_PTR CALLBACK DlgProcVisibilityOpts(HWND hwndDlg, UINT msg, WPARAM, LP TranslateDialogDefault(hwndDlg); hIml = ImageList_Create(g_iIconSX, g_iIconSY, ILC_COLOR32 | ILC_MASK, 3, 3); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_SMALLDOT); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_VISIBLE_ALL); - ImageList_AddIcon_IconLibLoaded(hIml, SKINICON_OTHER_INVISIBLE_ALL); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_SMALLDOT); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_VISIBLE_ALL); + ImageList_AddSkinIcon(hIml, SKINICON_OTHER_INVISIBLE_ALL); SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_SETEXTRAIMAGELIST, 0, (LPARAM)hIml); hVisibleIcon = ImageList_GetIcon(hIml, 1, ILD_NORMAL); SendDlgItemMessage(hwndDlg, IDC_VISIBLEICON, STM_SETICON, (WPARAM)hVisibleIcon, 0); -- cgit v1.2.3