diff options
author | MikalaiR <nikolay.romanovich@narod.ru> | 2015-09-12 12:22:24 +0000 |
---|---|---|
committer | MikalaiR <nikolay.romanovich@narod.ru> | 2015-09-12 12:22:24 +0000 |
commit | 364e8cd84bf31e34a7c3730f814e58acd18e72b8 (patch) | |
tree | 8380991627434f6e83aa75083c7d6270b09822bb /plugins/Toaster/src | |
parent | c9dfef255429860a87b96c44fc40683ad00fa676 (diff) |
Toaster: code optimization
git-svn-id: http://svn.miranda-ng.org/main/trunk@15335 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/Toaster/src')
-rw-r--r-- | plugins/Toaster/src/images.cpp | 32 | ||||
-rw-r--r-- | plugins/Toaster/src/images.h | 66 | ||||
-rw-r--r-- | plugins/Toaster/src/services.cpp | 6 | ||||
-rw-r--r-- | plugins/Toaster/src/toast_event_handler.cpp | 8 |
4 files changed, 66 insertions, 46 deletions
diff --git a/plugins/Toaster/src/images.cpp b/plugins/Toaster/src/images.cpp deleted file mode 100644 index 5ea6779627..0000000000 --- a/plugins/Toaster/src/images.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "stdafx.h"
-
-wchar_t* SaveBitmap(HBITMAP bmp, const char *szId)
-{
- wchar_t wszSavePath[MAX_PATH];
- mir_snwprintf(wszSavePath, L"%s\\MirandaToaster.%s.png", wszTempDir, _A2T(szId));
-
- if (!(GetFileAttributes(wszSavePath) < 0xFFFFFFF))
- {
- IMGSRVC_INFO isi = { sizeof(isi) };
- isi.wszName = mir_wstrdup(wszSavePath);
- isi.hbm = bmp;
- isi.dwMask = IMGI_HBITMAP;
- isi.fif = FREE_IMAGE_FORMAT::FIF_PNG;
- CallService(MS_IMG_SAVE, (WPARAM)&isi, IMGL_WCHAR);
- }
- return mir_wstrdup(wszSavePath);
-}
-
-wchar_t* SaveHIcon(HICON hIcon, const char *szId)
-{
- wchar_t *wszResult = NULL;
- ICONINFO icon;
- if (GetIconInfo(hIcon, &icon))
- {
- wszResult = SaveBitmap(icon.hbmColor, szId);
-
- DeleteObject(icon.hbmMask);
- DeleteObject(icon.hbmColor);
- }
- return wszResult;
-}
\ No newline at end of file diff --git a/plugins/Toaster/src/images.h b/plugins/Toaster/src/images.h index ff8c2e3d1f..cc22359bc9 100644 --- a/plugins/Toaster/src/images.h +++ b/plugins/Toaster/src/images.h @@ -1,5 +1,61 @@ -wchar_t* SaveBitmap(HBITMAP bmp, const char *szId);
-wchar_t* SaveHIcon(HICON hIcon, const char *szId);
-__forceinline wchar_t* ProtoIcon(const char *szProto)
-{ return SaveHIcon(Skin_LoadProtoIcon(szProto, ID_STATUS_ONLINE, 1), szProto);
-}
+extern wchar_t wszTempDir[];
+
+class ToasterImage
+{
+ HBITMAP _hBitmap;
+ ptrT tszId;
+
+public:
+ ToasterImage(HICON hIcon)
+ {
+ ICONINFO icon;
+ if (GetIconInfo(hIcon, &icon))
+ {
+ _hBitmap = icon.hbmColor;
+ DeleteObject(icon.hbmMask);
+ }
+ tszId = CMString(FORMAT, _T("%p"), hIcon).Detach();
+ }
+
+ inline ToasterImage(HBITMAP bmp) : _hBitmap(bmp)
+ {
+ tszId = CMString(FORMAT, _T("%p"), bmp).Detach();
+ }
+
+ ToasterImage(const char *szProto)
+ {
+ ICONINFO icon;
+ if (GetIconInfo(Skin_LoadProtoIcon(szProto, ID_STATUS_ONLINE, 1), &icon))
+ {
+ _hBitmap = icon.hbmColor;
+ DeleteObject(icon.hbmMask);
+ }
+ tszId = mir_a2t(szProto);
+ }
+
+ inline ~ToasterImage()
+ {
+ DeleteObject(_hBitmap);
+ }
+
+ wchar_t* Save()
+ {
+ wchar_t wszSavePath[MAX_PATH];
+ mir_snwprintf(wszSavePath, L"%s\\MirandaToaster.%s.png", wszTempDir, tszId);
+
+ if (!(GetFileAttributes(wszSavePath) < 0xFFFFFFF))
+ {
+ IMGSRVC_INFO isi = { sizeof(isi) };
+ isi.wszName = mir_wstrdup(wszSavePath);
+ isi.hbm = _hBitmap;
+ isi.dwMask = IMGI_HBITMAP;
+ isi.fif = FREE_IMAGE_FORMAT::FIF_PNG;
+ CallService(MS_IMG_SAVE, (WPARAM)&isi, IMGL_WCHAR);
+ }
+ return mir_wstrdup(wszSavePath);
+ }
+
+ inline operator wchar_t*()
+ { return Save();
+ }
+};
\ No newline at end of file diff --git a/plugins/Toaster/src/services.cpp b/plugins/Toaster/src/services.cpp index 81d737525a..02a92f24ab 100644 --- a/plugins/Toaster/src/services.cpp +++ b/plugins/Toaster/src/services.cpp @@ -30,11 +30,11 @@ void __stdcall ShowToastNotification(void* p) {
if ((td->hIcon && td->bForcehIcon) || !szProto)
{
- imagePath = SaveHIcon(td->hIcon, CMStringA(FORMAT, "%p", td->hIcon));
+ imagePath = ToasterImage(td->hIcon);
}
else if (szProto)
{
- imagePath = ProtoIcon(szProto);
+ imagePath = ToasterImage(szProto);
}
}
}
@@ -42,7 +42,7 @@ void __stdcall ShowToastNotification(void* p) {
if (td->hIcon)
{
- imagePath = SaveHIcon(td->hIcon, CMStringA(FORMAT, "%p", td->hIcon));
+ imagePath = ToasterImage(td->hIcon);
}
}
diff --git a/plugins/Toaster/src/toast_event_handler.cpp b/plugins/Toaster/src/toast_event_handler.cpp index 305ca120f7..31c3a97eef 100644 --- a/plugins/Toaster/src/toast_event_handler.cpp +++ b/plugins/Toaster/src/toast_event_handler.cpp @@ -46,12 +46,8 @@ IFACEMETHODIMP ToastEventHandler::QueryInterface(_In_ REFIID riid, _COM_Outptr_ *ppv = (DesktopToastFailedEventHandler*)(this);
else *ppv = nullptr;
- if (*ppv) {
- ((IUnknown*)*ppv)->AddRef();
- return S_OK;
- }
-
- return E_NOINTERFACE;
+ if (*ppv) ((IUnknown*)*ppv)->AddRef();
+ return (*ppv ? S_OK : E_NOINTERFACE);
}
IFACEMETHODIMP ToastEventHandler::Invoke(_In_ IToastNotification * /*sender*/, _In_ IInspectable* /*args*/)
|