[Deinterlace-checkins] SF.net SVN: deinterlace:[4743] trunk/DScaler/DScaler
Brought to you by:
adcockj,
dschmelzer
From: <ad...@us...> - 2010-04-08 11:36:27
|
Revision: 4743 http://deinterlace.svn.sourceforge.net/deinterlace/?rev=4743&view=rev Author: adcockj Date: 2010-04-08 11:36:20 +0000 (Thu, 08 Apr 2010) Log Message: ----------- Fixes for GDI leaks and other issues identified using boundschecker Modified Paths: -------------- trunk/DScaler/DScaler/Audio.cpp trunk/DScaler/DScaler/Bitmap.cpp trunk/DScaler/DScaler/Bitmap.h trunk/DScaler/DScaler/BitmapAsButton.h trunk/DScaler/DScaler/LibraryCache.cpp trunk/DScaler/DScaler/MixerDevClasses.cpp trunk/DScaler/DScaler/OverlayOutput.cpp trunk/DScaler/DScaler/SettingsMaster.cpp trunk/DScaler/DScaler/Splash.cpp trunk/DScaler/DScaler/ToolbarWindow.cpp trunk/DScaler/DScaler/ToolbarWindow.h trunk/DScaler/DScaler/Toolbars.cpp trunk/DScaler/DScaler/Toolbars.h trunk/DScaler/DScaler/WindowBorder.cpp trunk/DScaler/DScaler/WindowBorder.h trunk/DScaler/DScaler/dshowsource/DSSource.cpp trunk/DScaler/DScaler/events.cpp trunk/DScaler/DScaler/events.h Modified: trunk/DScaler/DScaler/Audio.cpp =================================================================== --- trunk/DScaler/DScaler/Audio.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Audio.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -27,9 +27,10 @@ #include "Status.h" #include "MixerDev.h" #include "Providers.h" +#include "ProtectCode.h" #include "DebugLog.h" -CRITICAL_SECTION AudioMuteCriticalSection; +CCanLock AudioMuteLocker; DWORD dwTimerProcThreadId = 0; BYTE AudioMuteStatus = 0; BOOL bUserMute = FALSE; @@ -43,11 +44,6 @@ void Initialize_Mute() { - // This critical section isn't needed but may - // be in future if Audio_Mute/Unmute are going - // to be used asynchronously. - InitializeCriticalSection(&AudioMuteCriticalSection); - // Set the timer proc to only be called on this thread dwTimerProcThreadId = GetCurrentThreadId(); @@ -63,7 +59,7 @@ void Audio_Mute(DWORD PostMuteDelay) { - EnterCriticalSection(&AudioMuteCriticalSection); + CProtectCode inScope(&AudioMuteLocker); // Multi-state muting and the handling PostMuteDelay // and PreMuteDelay within these two simple @@ -89,15 +85,13 @@ } } - LeaveCriticalSection(&AudioMuteCriticalSection); - LOG(2, _T(" Mute Called Status on Exit %d"), AudioMuteStatus); } void Audio_Unmute(DWORD PreUnmuteDelay) { - EnterCriticalSection(&AudioMuteCriticalSection); + CProtectCode inScope(&AudioMuteLocker); if(AudioMuteStatus > 0) { @@ -136,7 +130,6 @@ } } - LeaveCriticalSection(&AudioMuteCriticalSection); LOG(2, _T(" UnMute Called Status on Exit %d"), AudioMuteStatus); } Modified: trunk/DScaler/DScaler/Bitmap.cpp =================================================================== --- trunk/DScaler/DScaler/Bitmap.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Bitmap.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -177,8 +177,8 @@ BITMAP bm; ::GetObject(hBmpMask, sizeof(bm), &bm); - HDC hDC = ::CreateCompatibleDC(NULL); - SmartHandle<HBITMAP> h((HBITMAP)::SelectObject(hDC, hBmpMask)); + HDC hDC = CreateCompatibleDC(NULL); + HBITMAP hOld =(HBITMAP)SelectObject(hDC, hBmpMask); for (int y = 0; y < bm.bmHeight; y++) { @@ -209,8 +209,8 @@ // Go to next row (remember, the bitmap is inverted vertically) } - ::SelectObject(hDC, h); - ::DeleteDC(hDC); + SelectObject(hDC, hOld); + DeleteDC(hDC); return TRUE; } @@ -226,23 +226,20 @@ if (NumRects == 0) return NULL; do { - Num = 2000; //win98 gets confused if number of rects gets large - if (NumRects < Num) { Num = NumRects; } + Num = min(2000, NumRects); //win98 gets confused if number of rects gets large - HANDLE hData = ::GlobalAlloc(GMEM_MOVEABLE, sizeof(RGNDATAHEADER) + (sizeof(RECT) * Num)); - RGNDATA *pData = (RGNDATA *)::GlobalLock(hData); + HLOCAL hData = LocalAlloc(LMEM_MOVEABLE, sizeof(RGNDATAHEADER) + (sizeof(RECT) * Num)); + RGNDATA *pData = (RGNDATA *)LocalLock(hData); pData->rdh.dwSize = sizeof(RGNDATAHEADER); pData->rdh.iType = RDH_RECTANGLES; pData->rdh.nCount = Num; pData->rdh.nRgnSize = 0; pData->rdh.rcBound = rcBound; - //::SetRect(&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0); RECT *prDest = (RECT *)&pData->Buffer; for (int i = 0; i < Num; i++) { - RECT prSource = RegionList[i]; - *prDest = prSource; + *prDest = RegionList[i]; if (pPosition != NULL) { prDest->left += pPosition->x; @@ -253,19 +250,20 @@ prDest++; } - HRGN h = ::ExtCreateRegion(NULL, sizeof(RGNDATAHEADER) + (sizeof(RECT) * Num), pData); + HRGN h = ExtCreateRegion(NULL, sizeof(RGNDATAHEADER) + (sizeof(RECT) * Num), pData); if (hRgn != NULL) { - ::CombineRgn(hRgn, hRgn, h, RGN_OR); - ::DeleteObject(h); + CombineRgn(hRgn, hRgn, h, RGN_OR); + DeleteObject(h); } else { hRgn = h; } - ::GlobalFree(hData); + LocalUnlock(hData); + LocalFree(hData); NumRects -= Num; } while (NumRects>0); @@ -279,7 +277,7 @@ if(!hbmp) return; HDC memdc; memdc = ::CreateCompatibleDC(hDC); - ::SelectObject(memdc,hbmp); + HGDIOBJ oldBmp = SelectObject(memdc,hbmp); int startbmx = 0; int startbmy = 0; int startx; @@ -288,7 +286,7 @@ int x,y,z; BITMAP bm; - ::GetObject (hbmp, sizeof (bm), & bm); + GetObject (hbmp, sizeof (bm), & bm); int bx = bm.bmWidth; int by = bm.bmHeight; int drawy = by; @@ -302,16 +300,21 @@ drawy = by-startbmy; } - for (y = 0; y < h ; y += drawy){ + for (y = 0; y < h ; y += drawy) + { if ((y+drawy)>h) drawy=h-y; startx=startbmx; z=bx-startx; - for (x = 0 ; x < w ; x += z){ - if ((x+z)>w) { + for (x = 0 ; x < w ; x += z) + { + if ((x+z)>w) + { z=w-x; BitBlt(hDC, r->left + x, r->top + y, z, drawy, memdc, startx, startbmy, SRCCOPY); //LOG(2,_T("DrawBM: (%d,%d,%dx%d) (bm: %d,%d)"),r->left+x,r->top+y,z,by,startx,startbmy); - } else { + } + else + { BitBlt(hDC, r->left + x, r->top + y, z, drawy, memdc, startx, startbmy, SRCCOPY); //LOG(2,_T("DrawBM: (%d,%d,%dx%d) (bm: %d,%d)"),r->left+x,r->top+y,z,by,startx,startbmy); } @@ -325,7 +328,8 @@ } } - ::DeleteDC(memdc); + SelectObject(memdc, oldBmp); + DeleteDC(memdc); } void CBitmapHolder::BitmapDraw(HDC hDC, SmartHandle<HBITMAP> hbmp, SmartHandle<HBITMAP> hmask, POINT * bmstart, LPRECT r, int DrawMode) @@ -351,28 +355,32 @@ int cx=r->right - r->left; int cy=r->bottom - r->top; HDC dcBmp, dcMask; - dcBmp = ::CreateCompatibleDC(hDC); - ::SelectObject(dcBmp, hbmp); + dcBmp = CreateCompatibleDC(hDC); + HGDIOBJ oldBmp = SelectObject(dcBmp, hbmp); - if (hmask!=NULL){ - dcMask = ::CreateCompatibleDC(hDC); - ::SelectObject(dcMask, hmask); + if (hmask!=NULL) + { + dcMask = CreateCompatibleDC(hDC); + SelectObject(dcMask, hmask); HDC hdcMem; - hdcMem = ::CreateCompatibleDC(hDC); + hdcMem = CreateCompatibleDC(hDC); HBITMAP hBitmap; - hBitmap = ::CreateCompatibleBitmap(hDC,cx,cy); - ::SelectObject(hdcMem, hBitmap); + hBitmap = CreateCompatibleBitmap(hDC,cx,cy); + SelectObject(hdcMem, hBitmap); BitBlt(hdcMem,r->left,r->top,cx,cy,hDC,startbmx,startbmy,SRCCOPY); - if(!DrawMode){ + if(!DrawMode) + { BitBlt(hdcMem,r->left,r->top,cx,cy,dcBmp,startbmx,startbmy,SRCINVERT); BitBlt(hdcMem,r->left,r->top,cx,cy,dcMask,startbmx,startbmy,SRCAND); BitBlt(hdcMem,r->left,r->top,cx,cy,dcBmp,startbmx,startbmy,SRCINVERT); - } else { + } + else + { BITMAP bm; - ::GetObject (hbmp, sizeof (bm), & bm); + GetObject (hbmp, sizeof (bm), & bm); int bx = bm.bmWidth; int by = bm.bmHeight; @@ -385,23 +393,31 @@ BitBlt(hDC, r->left,r->top,cx,cy,hdcMem,0,0,SRCCOPY); - ::DeleteDC(hdcMem); - ::DeleteObject(hBitmap); + DeleteDC(hdcMem); + DeleteObject(hBitmap); - ::DeleteDC(dcMask); - } else { + DeleteDC(dcMask); + } + else + { //LOG(2,_T("DrawBM: to (%d,%d,%dx%d) (bm %d,%d)"),r->left,r->top,cx,cy,startbmx,startbmy); - if(!DrawMode){ + if(!DrawMode) + { BitBlt(hDC, r->left,r->top,cx,cy,dcBmp,startbmx,startbmy,SRCCOPY); - } else { + } + else + { BITMAP bm; - ::GetObject (hbmp, sizeof (bm), & bm); + GetObject (hbmp, sizeof (bm), & bm); int bx = bm.bmWidth; int by = bm.bmHeight; StretchBlt(hDC, r->left,r->top,cx,cy,dcBmp,startbmx,startbmy,bx,by,SRCCOPY); } } - ::DeleteDC(dcBmp); + + SelectObject(dcBmp, oldBmp); + + DeleteDC(dcBmp); } SmartHandle<HBITMAP> CBitmapHolder::BitmapCopyPieceRGB(HDC hdestDC, HDC hsrcDC, LPRECT lpRect) @@ -413,80 +429,17 @@ 1, 32, BI_RGB, 0,0,0,0, 0}; void *pvBits; - SmartHandle<HBITMAP> hNewBmp(::CreateDIBSection(hdestDC,(BITMAPINFO *)&bmi,DIB_RGB_COLORS,&pvBits,NULL,0)); + SmartHandle<HBITMAP> hNewBmp(CreateDIBSection(hdestDC,(BITMAPINFO *)&bmi,DIB_RGB_COLORS,&pvBits,NULL,0)); - ::SelectObject(hdestDC, hNewBmp); - ::BitBlt(hdestDC, 0,0, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top, hsrcDC, lpRect->left, lpRect->top, SRCCOPY); + HGDIOBJ oldBmp = SelectObject(hdestDC, hNewBmp); - return hNewBmp; -} + BitBlt(hdestDC, 0,0, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top, hsrcDC, lpRect->left, lpRect->top, SRCCOPY); + SelectObject(hdestDC, oldBmp); -///\todo: Doesn't work? fix it -// load *.bmp, *.jpg, *.gif, *.ico, *.emf, or *.wmf files -SmartHandle<HBITMAP> CBitmapHolder::BitmapLoadFromFile(const TCHAR* szFile) -{ - SmartHandle<HBITMAP> ret; - - LPPICTURE gpPicture; - // open file - HANDLE hFile = CreateFile(szFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); - if (INVALID_HANDLE_VALUE == hFile) return ret; - - // get file size - DWORD dwFileSize = GetFileSize(hFile, NULL); - if (-1 != dwFileSize) - { - LPVOID pvData = NULL; - // alloc memory based on file size - HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); - if (NULL != hGlobal) - { - - pvData = GlobalLock(hGlobal); - if (NULL != pvData) - { - DWORD dwBytesRead = 0; - // read file and store in global memory - BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL); - if (bRead != FALSE) - { - LPSTREAM pstm = NULL; - // create IStream* from global memory - HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm); - if (SUCCEEDED(hr) && pstm) - { - // Create IPicture from image file - hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture); - if (SUCCEEDED(hr) && gpPicture) - { - pstm->Release(); - - OLE_HANDLE m_picHandle; - - gpPicture->get_Handle(&m_picHandle); - - HDC hdc = CreateCompatibleDC(NULL); - - SelectObject(hdc, (HGDIOBJ) m_picHandle); - - ret = (HBITMAP)GetCurrentObject(hdc, OBJ_BITMAP); - - DeleteDC(hdc); - } - } - - } - GlobalUnlock(hGlobal); - } - } - - } - CloseHandle(hFile); - return ret; + return hNewBmp; } - //////////////////////////////////////////////////////////////////////////////// // Cache for bitmaps from disk ///////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -494,11 +447,7 @@ { if(m_CacheList.find(szFileName) == m_CacheList.end()) { - SmartHandle<HBITMAP> hBmp = CBitmapHolder::BitmapLoadFromFile(szFileName); - if (!hBmp) - { - hBmp = (HBITMAP)::LoadImage(NULL,szFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE); - } + SmartHandle<HBITMAP> hBmp((HBITMAP)LoadImage(NULL,szFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE)); m_CacheList[szFileName] = hBmp; return hBmp; } @@ -596,11 +545,11 @@ } BITMAP bm1; BITMAP bm2; - if(::GetObject (hMainBmp, sizeof (bm1), & bm1) == 0) + if(GetObject (hMainBmp.GetRawHandle(), sizeof (bm1), & bm1) == 0) { return -5; } - if(::GetObject (hMainBmpMask, sizeof (bm2), & bm2) == 0) + if(GetObject (hMainBmpMask.GetRawHandle(), sizeof (bm2), & bm2) == 0) { return -5; } @@ -651,18 +600,20 @@ && (right>left) && (bottom>top)) { RECT rc; - ::SetRect(&rc,left,top,right,bottom); - ::SelectObject(hsrcDC, hMainBmp); + SetRect(&rc,left,top,right,bottom); + HGDIOBJ oldBmp = SelectObject(hsrcDC, hMainBmp); hBmp = CBitmapHolder::BitmapCopyPieceRGB(hdestDC, hsrcDC, &rc); if (hMainBmpMask != NULL) { - ::SelectObject(hsrcDC, hMainBmpMask); + SelectObject(hsrcDC, hMainBmpMask); hBmpMask = CBitmapHolder::BitmapCopyPieceRGB(hdestDC, hsrcDC, &rc); } (*it).second = SmartPtr<CBitmapState>(new CBitmapState(hBmp, hBmpMask)); (*it).second->m_ExtraInfo = szExtra; Result = 0; + + SelectObject(hsrcDC, oldBmp); } else { @@ -679,8 +630,8 @@ } } - ::DeleteDC(hsrcDC); - ::DeleteDC(hdestDC); + DeleteDC(hsrcDC); + DeleteDC(hdestDC); return Result; } Modified: trunk/DScaler/DScaler/Bitmap.h =================================================================== --- trunk/DScaler/DScaler/Bitmap.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Bitmap.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -71,9 +71,6 @@ static HRGN CreateWindowRegion(RECT& rcBound, std::vector<RECT>& RegionList, POINT* pPosition = NULL); static BOOL BitmapToRegionList(SmartHandle<HBITMAP> hBmpMask, std::vector<RECT>& RegionList); - static SmartHandle<HBITMAP> BitmapLoadFromFile(const TCHAR* szFile); - //static void BitmapLoad_Free(HBITMAP hBm); - protected: BOOL MakeRegionList(); Modified: trunk/DScaler/DScaler/BitmapAsButton.h =================================================================== --- trunk/DScaler/DScaler/BitmapAsButton.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/BitmapAsButton.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -74,8 +74,41 @@ ... */ -class CBitmapAsButton { +class CBitmapAsButton +{ +public: + CBitmapAsButton(eBitmapAsButtonType ButtonType); + ~CBitmapAsButton(); + + HWND hWnd() { if (bFailed) return NULL; return hWndButton; } + int Width() { return ButtonWidth; } + int Height() { return ButtonHeight; } + tstring GetID() { return sID; } + + void AddBitmap(int State, SmartPtr<CBitmapState> BitmapState); + + HRGN SetRegion(); + + void SetProcessMessage(void *pThis, BUTTONPROC* pfnButtonProc) + { + this->pfnButtonProc_pThis = pThis; + this->pfnButtonProc = pfnButtonProc; + } + + BOOL Create(tstring sID, HWND hWndParent, int x, int y, HINSTANCE hInst); + BOOL TakeOver(HWND hWnd, tstring sID, HWND hWndParent); + BOOL RestoreBack(HWND hWnd = NULL); + protected: + + void Draw(HDC hDC, LPRECT lpRect); + void SetWindowRegion(); + + LRESULT ButtonProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); + + static LRESULT CALLBACK StaticButtonProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); + +protected: tstring sID; eBitmapAsButtonType ButtonType; @@ -108,36 +141,6 @@ int SliderPos; int SliderRangeMin; int SliderRangeMax; -protected: - - void Draw(HDC hDC, LPRECT lpRect); - void SetWindowRegion(); - - LRESULT ButtonProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); - - static LRESULT CALLBACK StaticButtonProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -public: - CBitmapAsButton(eBitmapAsButtonType ButtonType); - ~CBitmapAsButton(); - - HWND hWnd() { if (bFailed) return NULL; return hWndButton; } - int Width() { return ButtonWidth; } - int Height() { return ButtonHeight; } - tstring GetID() { return sID; } - - void AddBitmap(int State, SmartPtr<CBitmapState> BitmapState); - - HRGN SetRegion(); - - void SetProcessMessage(void *pThis, BUTTONPROC* pfnButtonProc) - { - this->pfnButtonProc_pThis = pThis; - this->pfnButtonProc = pfnButtonProc; - } - - BOOL Create(tstring sID, HWND hWndParent, int x, int y, HINSTANCE hInst); - BOOL TakeOver(HWND hWnd, tstring sID, HWND hWndParent); - BOOL RestoreBack(HWND hWnd = NULL); }; Modified: trunk/DScaler/DScaler/LibraryCache.cpp =================================================================== --- trunk/DScaler/DScaler/LibraryCache.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/LibraryCache.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -22,7 +22,10 @@ void LibraryCache::Unload(LibraryMap::value_type& MapValueToUnload) { - FreeLibrary(MapValueToUnload.second); + if(MapValueToUnload.second != NULL) + { + FreeLibrary(MapValueToUnload.second); + } } HMODULE LibraryCache::GetLibraryHandle(const TCHAR* LibaryName) Modified: trunk/DScaler/DScaler/MixerDevClasses.cpp =================================================================== --- trunk/DScaler/DScaler/MixerDevClasses.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/MixerDevClasses.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -34,6 +34,8 @@ # if VER_PRODUCTMAJORVERSION > 5 # include "Mmdeviceapi.h" # define __IKsJackDescription_INTERFACE_DEFINED__ +# define __IKsJackDescription2_INTERFACE_DEFINED__ +# define __IKsJackSinkInformation_INTERFACE_DEFINED__ # include "Endpointvolume.h" # define _DO_NEW_MIXER_CODE_ #else Modified: trunk/DScaler/DScaler/OverlayOutput.cpp =================================================================== --- trunk/DScaler/DScaler/OverlayOutput.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/OverlayOutput.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -88,7 +88,7 @@ //----------------------------------------------------------------------------- BOOL COverlayOutput::ListMonitors(HWND hWnd) { - static DynamicFunctionS3<HRESULT, LPDDENUMCALLBACKEX, LPVOID, DWORD> lpDDEnumEx(_T("ddraw.lib"), ADD_API_LETTER(DirectDrawEnumerateEx)); + static DynamicFunctionS3<HRESULT, LPDDENUMCALLBACKEX, LPVOID, DWORD> lpDDEnumEx(_T("ddraw.dll"), ADD_API_LETTER(DirectDrawEnumerateEx)); BOOL RetVal = TRUE; // Retrieve the function from the DirectDraw DLL Modified: trunk/DScaler/DScaler/SettingsMaster.cpp =================================================================== --- trunk/DScaler/DScaler/SettingsMaster.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/SettingsMaster.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -406,7 +406,7 @@ Providers_WriteToIni(bOptimizeFileAccess); // These two lines flushes current INI file to disk (in case of abrupt poweroff shortly afterwards) - WritePrivateProfileString(NULL, NULL, NULL, m_sIniFile.c_str()); + WritePrivateProfileString(NULL, NULL, NULL, NULL); //BeautifyIniFile(m_sIniFile.c_str()); } Modified: trunk/DScaler/DScaler/Splash.cpp =================================================================== --- trunk/DScaler/DScaler/Splash.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Splash.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -74,7 +74,6 @@ BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY); SelectObject(hMemDC, hOldBm); DeleteDC(hMemDC); - DeleteDC(hdc); EndPaint(hDlg, &wps); return TRUE; break; Modified: trunk/DScaler/DScaler/ToolbarWindow.cpp =================================================================== --- trunk/DScaler/DScaler/ToolbarWindow.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/ToolbarWindow.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -116,12 +116,7 @@ { if (vChildList[i].pChild != NULL) { - ::SetWindowLongPtr(vChildList[i].pChild->GethWnd(), GWLP_USERDATA, NULL); - - - //Doesn't work. - //Is 'pure virtual function call', somehow fix this.. - //delete vChildList[i].pChild; + delete vChildList[i].pChild; } } vChildList.clear(); @@ -887,6 +882,19 @@ { int i; + if (m_BgBrush != NULL) + { + DeleteObject(m_BgBrush); + } + if (m_hPen3DShadow != NULL) + { + DeleteObject(m_hPen3DShadow); + } + if (m_hPen3DLight != NULL) + { + DeleteObject(m_hPen3DLight); + } + for (i = 0; i < Buttons.size(); i++) { if (Buttons[i] != NULL) @@ -1224,17 +1232,17 @@ LPRECT lpRect = &pDrawItem->rcItem; if ((m_hPen3DShadow != NULL) && (m_hPen3DLight!=NULL)) { - HPEN hPenOld = (HPEN)::SelectObject(pDrawItem->hDC, m_hPen3DShadow); + HPEN hPenOld = (HPEN)SelectObject(pDrawItem->hDC, m_hPen3DShadow); MoveToEx(pDrawItem->hDC, lpRect->left, lpRect->bottom-1, NULL); LineTo(pDrawItem->hDC, lpRect->left, lpRect->top); LineTo(pDrawItem->hDC, lpRect->right-1, lpRect->top); - ::SelectObject(pDrawItem->hDC, m_hPen3DLight); + SelectObject(pDrawItem->hDC, m_hPen3DLight); LineTo(pDrawItem->hDC, lpRect->right-1, lpRect->bottom-1); LineTo(pDrawItem->hDC, lpRect->left, lpRect->bottom-1); - ::SelectObject(pDrawItem->hDC, hPenOld); + SelectObject(pDrawItem->hDC, hPenOld); } } if (hIcon != NULL) @@ -1247,7 +1255,7 @@ if (GetIconInfo(hIcon, &IconInfo)) //try to align icon { BITMAP bm; - if (::GetObject (IconInfo.hbmColor, sizeof (bm), & bm)) + if (GetObject (IconInfo.hbmColor, sizeof (bm), & bm)) { int BmWidth = bm.bmWidth; int BmHeight = bm.bmHeight; @@ -1271,6 +1279,8 @@ X += pDrawItem->rcItem.left; Y += pDrawItem->rcItem.top; } + DeleteObject(IconInfo.hbmMask); + DeleteObject(IconInfo.hbmColor); } if (pDrawItem->itemState & ODS_SELECTED) Modified: trunk/DScaler/DScaler/ToolbarWindow.h =================================================================== --- trunk/DScaler/DScaler/ToolbarWindow.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/ToolbarWindow.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -105,7 +105,7 @@ BOOL Add(CToolbarChild *pChild, eToolbarRowAlign Align, int Order, int Row); void Remove(CToolbarChild *pChild); CToolbarWindow(HWND hWndParent, HINSTANCE hInst, int Child); - ~CToolbarWindow(); + virtual ~CToolbarWindow(); BOOL Visible() { return IsToolbarVisible; } void AdjustArea(RECT *ar, int Crop); @@ -137,26 +137,10 @@ class CToolbarChild { -protected: - HWND hWnd; - HINSTANCE hResourceInst; - CToolbarWindow *m_pToolbar; - std::vector<CBitmapAsButton*> Buttons; - CBitmapsFromIniSection BitmapsFromIniSection; +public: + CToolbarChild(CToolbarWindow *pToolbar); + virtual ~CToolbarChild(); - virtual LRESULT ToolbarChildProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) = 0; - - int m_PosX; - int m_PosY; - int m_PosW; - int m_PosH; - - HBRUSH m_BgBrush; - HPEN m_hPen3DShadow; - HPEN m_hPen3DLight; - - int m_Visible; -public: int Visible(); BOOL Show(); @@ -176,9 +160,6 @@ virtual void UpdateWindow() {;}; - CToolbarChild(CToolbarWindow *pToolbar); - ~CToolbarChild(); - virtual HWND Create(LPCTSTR szClassName, HINSTANCE hResourceInst); virtual HWND CreateFromDialog(LPCTSTR lpTemplate, HINSTANCE hResourceInst); @@ -193,6 +174,26 @@ static LRESULT CALLBACK StaticToolbarChildProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK StaticToolbarChildDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); static LRESULT StaticToolbarChildButtonProc(tstring sID, void *pThis, HWND hWndParent, UINT MouseFlags, HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); + +protected: + HWND hWnd; + HINSTANCE hResourceInst; + CToolbarWindow *m_pToolbar; + std::vector<CBitmapAsButton*> Buttons; + CBitmapsFromIniSection BitmapsFromIniSection; + + virtual LRESULT ToolbarChildProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) = 0; + + int m_PosX; + int m_PosY; + int m_PosW; + int m_PosH; + + HBRUSH m_BgBrush; + HPEN m_hPen3DShadow; + HPEN m_hPen3DLight; + + int m_Visible; }; #endif Modified: trunk/DScaler/DScaler/Toolbars.cpp =================================================================== --- trunk/DScaler/DScaler/Toolbars.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Toolbars.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -80,17 +80,29 @@ { if (m_hIconChannelUp != NULL) { - ::DestroyIcon(m_hIconChannelUp); + if(!DestroyIcon(m_hIconChannelUp)) + { + DeleteObject(m_hIconChannelUp); + } m_hIconChannelUp = NULL; } if (m_hIconChannelDown != NULL) { - ::DestroyIcon(m_hIconChannelDown); + if(!DestroyIcon(m_hIconChannelDown)) + { + DeleteObject(m_hIconChannelDown); + } m_hIconChannelDown = NULL; } if (m_hIconChannelPrevious != NULL) { - ::DestroyIcon(m_hIconChannelPrevious); + if(!DestroyIcon(m_hIconChannelPrevious)) + { + if(!(DeleteObject(m_hIconChannelPrevious))) + { + MessageBox(NULL, _T("Help"), _T("Help"), MB_OK); + } + } m_hIconChannelPrevious = NULL; } } Modified: trunk/DScaler/DScaler/Toolbars.h =================================================================== --- trunk/DScaler/DScaler/Toolbars.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/Toolbars.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -34,7 +34,7 @@ { public: CToolbarChannels(CToolbarWindow *pToolbar); - ~CToolbarChannels(); + virtual ~CToolbarChannels(); HWND CreateFromDialog(LPCTSTR lpTemplate, HINSTANCE hResourceInst); void Reset(); @@ -62,7 +62,7 @@ { public: CToolbarVolume(CToolbarWindow *pToolbar); - ~CToolbarVolume(); + virtual ~CToolbarVolume(); LRESULT ToolbarChildProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); @@ -138,7 +138,7 @@ HBITMAP hBmp; public: CToolbar1Bar(CToolbarWindow *pToolbar); - ~CToolbar1Bar(); + virtual ~CToolbar1Bar(); HWND Create(LPCTSTR lpClassName, HINSTANCE hResourceInst); LRESULT ToolbarChildProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); BOOL LoadSkin(const TCHAR* szSkinIniFile, const TCHAR* szSection, std::vector<int> *Results); Modified: trunk/DScaler/DScaler/WindowBorder.cpp =================================================================== --- trunk/DScaler/DScaler/WindowBorder.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/WindowBorder.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -91,13 +91,13 @@ //Width of bitmap at border position 'Pos' int CWindowBorder::BmpWidth(int Pos) { - if (!Bitmaps[Pos].IsValid()) return 0; + if (Bitmaps.size() < WINDOWBORDER_LASTONE || !Bitmaps[Pos].IsValid()) return 0; return Bitmaps[Pos]->Width(); } int CWindowBorder::BmpHeight(int Pos) { - if (!Bitmaps[Pos].IsValid()) return 0; + if (Bitmaps.size() < WINDOWBORDER_LASTONE || !Bitmaps[Pos].IsValid()) return 0; return Bitmaps[Pos]->Height(); } @@ -240,14 +240,8 @@ if (bBitmapsChanged) { bBitmapsChanged = FALSE; + Bitmaps.resize(WINDOWBORDER_LASTONE); - if (Bitmaps.size() == 0) { - for (int Pos = 0; Pos < WINDOWBORDER_LASTONE; Pos++) - { - Bitmaps.push_back(SmartPtr<CBitmapHolder>()); - } - } - #define ADJUSTWIDTH(Pos) \ if ((Bitmaps[(Pos)].IsValid()) && (Bitmaps[(Pos)]->Width() > MaxWidth)) { MaxWidth = Bitmaps[(Pos)]->Width(); } #define ADJUSTHEIGHT(Pos) \ @@ -540,16 +534,16 @@ } } - POINT *pRowList = NULL; + std::vector<POINT> pRowList; POINT *p; - int *pRowListSize = NULL; + std::vector<int> pRowListSize; //LPRECT lpRc; //Process top lines if (TopSize > 0) { - vector<POINT> pRowList(TopSize * (TotalWidth+2)); - vector<int> pRowListSize(TopSize); + pRowList.resize(TopSize * (TotalWidth+2)); + pRowListSize.resize(TopSize); int h; for (h = 0; h < TopSize; h++) @@ -618,8 +612,10 @@ //Process bottom lines if (BottomSize > 0) { - pRowList = new POINT[BottomSize * (TotalWidth+2)]; - pRowListSize = new int[BottomSize]; + pRowList.clear(); + pRowListSize.clear(); + pRowList.resize(BottomSize * (TotalWidth+2)); + pRowListSize.resize(BottomSize); int h; for (h = 0; h < BottomSize; h++) { @@ -737,11 +733,9 @@ //LOG(2,_T("Skin: 0x%08x: Update area (%d,%d,%d,%d) at (%d,%d)"),this->hWnd,lpRect->left,lpRect->top,lpRect->right,lpRect->bottom,(pPShift==NULL)?0:pPShift->x,(pPShift==NULL)?0:pPShift->y); - if (Bitmaps.size() == 0) { - for (int Pos = 0; Pos < WINDOWBORDER_LASTONE; Pos++) - { - Bitmaps.push_back(SmartPtr<CBitmapHolder>()); - } + if (Bitmaps.size() == 0) + { + Bitmaps.resize(WINDOWBORDER_LASTONE); } RECT rcPaint; @@ -1007,6 +1001,7 @@ void CWindowBorder::ClearSkin() { Bitmaps.clear(); + bBitmapsChanged = TRUE; Buttons.clear(); Modified: trunk/DScaler/DScaler/WindowBorder.h =================================================================== --- trunk/DScaler/DScaler/WindowBorder.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/WindowBorder.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -128,7 +128,7 @@ static const TCHAR* szBorderNames[]; public: CWindowBorder(HWND hWnd, HINSTANCE hInst, BOOL (*CustomGetClientRect)(HWND hWnd, LPRECT lpRect) = NULL); - ~CWindowBorder(); + virtual ~CWindowBorder(); void AdjustArea(RECT *ar, int Crop); Modified: trunk/DScaler/DScaler/dshowsource/DSSource.cpp =================================================================== --- trunk/DScaler/DScaler/dshowsource/DSSource.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/dshowsource/DSSource.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -449,7 +449,7 @@ m_VideoFmt.push_back(fmt); } - delete pcData; + delete [] pcData; } ReadFromIni(); Modified: trunk/DScaler/DScaler/events.cpp =================================================================== --- trunk/DScaler/DScaler/events.cpp 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/events.cpp 2010-04-08 11:36:20 UTC (rev 4743) @@ -152,7 +152,7 @@ { if (m_EventObjects[i].EventList != NULL) { - delete m_EventObjects[i].EventList; + delete [] m_EventObjects[i].EventList; } } else { NewList.push_back(m_EventObjects[i]); @@ -183,7 +183,7 @@ { if (m_EventObjects[i].EventList != NULL) { - delete m_EventObjects[i].EventList; + delete [] m_EventObjects[i].EventList; } } else { NewList.push_back(m_EventObjects[i]); @@ -431,7 +431,7 @@ RaiseScheduledEvent(ei.pEventObject, ei.Event, ei.OldValue, ei.NewValue, ei.ComingUp); if (ei.ComingUp != NULL) { - delete[] ei.ComingUp; + delete [] ei.ComingUp; } } else Modified: trunk/DScaler/DScaler/events.h =================================================================== --- trunk/DScaler/DScaler/events.h 2010-03-12 13:32:37 UTC (rev 4742) +++ trunk/DScaler/DScaler/events.h 2010-04-08 11:36:20 UTC (rev 4743) @@ -66,7 +66,7 @@ { public: CEventObject(); - ~CEventObject(); + virtual ~CEventObject(); virtual void OnEvent(CEventObject *pEventObject, eEventType Event, long OldValue, long NewValue, eEventType *ComingUp) {;} }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |