// Copyright (C) 2011 Fog Creek Software
//
// 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, see <http://www.gnu.org/licenses/>.
#include "stdafx.h"
#include "TortoiseUtils.h"
#include "IconBitmapUtils.h"
HBITMAP GetTortoiseIconBitmap(const CString& strIconName)
{
CIconBitmapUtils bmpUtils;
typedef CAtlMap<CString, HBITMAP> CBitmapCache;
static CBitmapCache bmpcache;
const CBitmapCache::CPair* p = bmpcache.Lookup(strIconName);
if (p != NULL) return p->m_value;
if (bmpcache.GetCount() > 200)
{
ATLTRACE("**** GetTortoiseIconBitmap: error: too many bitmaps in cache\n");
return 0;
}
HICON hIcon = GetTortoiseIcon(strIconName);
if (!hIcon) return 0;
HBITMAP hBitmap = bmpUtils.IconToBitmapPARGB32(hIcon);
if (!hBitmap)
{
ATLTRACE("**** GetTortoiseIconBitmap: error: something wrong in "
"bmpUtils.ConvertToPARGB32(hIcon)\n");
return 0;
}
bmpcache[strIconName] = hBitmap;
ATLTRACE("GetTortoiseIconBitmap: added '%s' to bmpcache_ (%d bitmaps in cache)\n",
(LPCTSTR)strIconName, bmpcache.GetCount());
return hBitmap;
}
|
Loading...