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/images.h | |
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/images.h')
-rw-r--r-- | plugins/Toaster/src/images.h | 66 |
1 files changed, 61 insertions, 5 deletions
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 |