? win32_drag.diff Index: src/af/gr/cocoa/gr_CocoaImage.h =================================================================== RCS file: /cvsroot/abi/src/af/gr/cocoa/gr_CocoaImage.h,v retrieving revision 1.6 diff -u -r1.6 gr_CocoaImage.h --- src/af/gr/cocoa/gr_CocoaImage.h 31 Oct 2003 00:19:33 -0000 1.6 +++ src/af/gr/cocoa/gr_CocoaImage.h 1 Nov 2003 03:38:14 -0000 @@ -41,7 +41,7 @@ { public: GR_CocoaImage(const char* pszName); - ~GR_CocoaImage(); + virtual ~GR_CocoaImage(); virtual UT_sint32 getDisplayWidth(void) const; virtual UT_sint32 getDisplayHeight(void) const; Index: src/af/gr/qnx/gr_QNXImage.h =================================================================== RCS file: /cvsroot/abi/src/af/gr/qnx/gr_QNXImage.h,v retrieving revision 1.5 diff -u -r1.5 gr_QNXImage.h --- src/af/gr/qnx/gr_QNXImage.h 19 Oct 2003 09:03:08 -0000 1.5 +++ src/af/gr/qnx/gr_QNXImage.h 1 Nov 2003 03:38:14 -0000 @@ -36,7 +36,7 @@ { public: GR_QNXImage(const char* pszName); - ~GR_QNXImage(); + virtual ~GR_QNXImage(); virtual UT_sint32 getDisplayWidth(void) const; virtual UT_sint32 getDisplayHeight(void) const; Index: src/af/gr/win/gr_Win32Graphics.cpp =================================================================== RCS file: /cvsroot/abi/src/af/gr/win/gr_Win32Graphics.cpp,v retrieving revision 1.168 diff -u -r1.168 gr_Win32Graphics.cpp --- src/af/gr/win/gr_Win32Graphics.cpp 25 Oct 2003 09:10:53 -0000 1.168 +++ src/af/gr/win/gr_Win32Graphics.cpp 1 Nov 2003 03:38:14 -0000 @@ -1563,12 +1563,8 @@ #endif } -void GR_Win32Graphics::saveRectangle(UT_Rect & r, UT_uint32 iIndx) -{ - UT_Rect * oldR = NULL; - m_vSaveRect.setNthItem(iIndx, (void*)new UT_Rect(r),(void **)&oldR); - DELETEP(oldR); - +GR_Image * GR_Win32Graphics::genImageFromRectangle(const UT_Rect & r) +{ UT_uint32 iWidth = tdu(r.width); UT_uint32 iHeight = tdu(r.height); UT_sint32 x = tdu(r.left); @@ -1579,7 +1575,7 @@ x,y, iWidth, iHeight)); #endif - BITMAPINFO bmi; + BITMAPINFO * bmi ; BYTE *imagedata; HDC hMemDC = CreateCompatibleDC(m_hdc); @@ -1602,10 +1598,54 @@ BitBlt(hMemDC, 0, 0, iWidth, iHeight, m_hdc, x, y, SRCCOPY); hBit = (HBITMAP)SelectObject(hMemDC, hOld); DeleteDC(hMemDC); +} + +void GR_Win32Graphics::saveRectangle(UT_Rect & r, UT_uint32 iIndx) +{ + UT_Rect * oldR = NULL; + m_vSaveRect.setNthItem(iIndx, (void*)new UT_Rect(r),(void **)&oldR); + DELETEP(oldR); + + UT_uint32 iWidth = tdu(r.width); + UT_uint32 iHeight = tdu(r.height); + UT_sint32 x = tdu(r.left); + UT_sint32 y = tdu(r.top); + + #ifdef GR_GRAPHICS_DEBUG + UT_DEBUGMSG(("GR_Win32Graphics::saveRectangle %u, %u %u %u %u\n", iIndx, + x,y, iWidth, iHeight)); + #endif + + BITMAPINFO * bmi = (BITMAPINFO*)malloc (sizeof (BITMAPINFO)); + + BYTE *imagedata; + HDC hMemDC = CreateCompatibleDC(m_hdc); + + bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmi->bmiHeader.biWidth = iWidth; + bmi->bmiHeader.biHeight = iHeight; + bmi->bmiHeader.biPlanes = 1; + bmi->bmiHeader.biBitCount = 24; // as we want true-color + bmi->bmiHeader.biCompression = BI_RGB; // no compression + bmi->bmiHeader.biSizeImage = (((iWidth * bmi.bmiHeader.biBitCount + 31) & ~31) >> 3) * iHeight; + bmi->bmiHeader.biXPelsPerMeter = 0; + bmi->bmiHeader.biYPelsPerMeter = 0; + bmi->bmiHeader.biClrImportant = 0; + bmi->bmiHeader.biClrUsed = 0; // we are not using palette + + HBITMAP hBit = CreateDIBSection(hMemDC,bmi,DIB_RGB_COLORS,(void**)&imagedata,0,0); + GdiFlush(); + + HBITMAP hOld = (HBITMAP) SelectObject(hMemDC, hBit); + BitBlt(hMemDC, 0, 0, iWidth, iHeight, m_hdc, x, y, SRCCOPY); + hBit = (HBITMAP)SelectObject(hMemDC, hOld); + DeleteDC(hMemDC); + DeleteObject(hBit); + + GR_Win32Image * pImg = new GR_Win32Image ("Screenshot"); + pImg->setDIB (bmi); - HBITMAP hBitOld = NULL; - m_vSaveRectBuf.setNthItem(iIndx, (void*)hBit,(void **)&hBitOld); - DeleteObject(hBitOld); + return pImg; } void GR_Win32Graphics::restoreRectangle(UT_uint32 iIndx) Index: src/af/gr/win/gr_Win32Graphics.h =================================================================== RCS file: /cvsroot/abi/src/af/gr/win/gr_Win32Graphics.h,v retrieving revision 1.76 diff -u -r1.76 gr_Win32Graphics.h --- src/af/gr/win/gr_Win32Graphics.h 1 Nov 2003 03:26:58 -0000 1.76 +++ src/af/gr/win/gr_Win32Graphics.h 1 Nov 2003 03:38:14 -0000 @@ -173,7 +173,7 @@ virtual UT_uint32 getFontDescent(GR_Font *); virtual UT_uint32 getFontHeight(GR_Font *); - virtual GR_Image * genImageFromRectangle(const UT_Rect & r) { return NULL;} + virtual GR_Image * genImageFromRectangle(const UT_Rect & r); virtual void saveRectangle(UT_Rect & r, UT_uint32 iIndx); virtual void restoreRectangle(UT_uint32 iIndx); Index: src/af/gr/win/gr_Win32Image.h =================================================================== RCS file: /cvsroot/abi/src/af/gr/win/gr_Win32Image.h,v retrieving revision 1.8 diff -u -r1.8 gr_Win32Image.h --- src/af/gr/win/gr_Win32Image.h 6 Feb 2001 22:54:05 -0000 1.8 +++ src/af/gr/win/gr_Win32Image.h 1 Nov 2003 03:38:14 -0000 @@ -30,7 +30,7 @@ { public: GR_Win32Image(const char* szName); - ~GR_Win32Image(); + virtual ~GR_Win32Image(); virtual bool convertToBuffer(UT_ByteBuf** ppBB) const; virtual bool convertFromBuffer(const UT_ByteBuf* pBB, UT_sint32 iDisplayWidth, UT_sint32 iDisplayHeight);