Show
Ignore:
Timestamp:
05/17/08 11:34:28 (8 months ago)
Author:
Frank Benoit <benoit@tionex.de>
branch:
default
Message:

Update to SWT 3.4M7

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • dwt/dnd/TreeDragSourceEffect.d

    r194 r213  
    1515import dwt.DWT; 
    1616import dwt.graphics.Image; 
     17import dwt.graphics.ImageData; 
     18import dwt.graphics.PaletteData; 
    1719import dwt.graphics.Rectangle; 
    1820import dwt.internal.win32.OS; 
     
    8789        if (dragSourceImage !is null) dragSourceImage.dispose(); 
    8890        dragSourceImage = null; 
     91        if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) { 
     92            SHDRAGIMAGE shdi; 
     93            int DI_GETDRAGIMAGE = OS.RegisterWindowMessage ("ShellGetDragImage"w.ptr); //$NON-NLS-1$ 
     94            if (OS.SendMessage (control.handle, DI_GETDRAGIMAGE, 0, &shdi) !is 0) { 
     95                event.x += shdi.ptOffset.x; 
     96                event.y += shdi.ptOffset.y; 
     97                auto hImage = shdi.hbmpDragImage; 
     98                if (hImage !is null) { 
     99                    BITMAP bm; 
     100                    OS.GetObject (hImage, BITMAP.sizeof, &bm); 
     101                    int srcWidth = bm.bmWidth; 
     102                    int srcHeight = bm.bmHeight; 
     103 
     104                    /* Create resources */ 
     105                    auto hdc = OS.GetDC (null); 
     106                    auto srcHdc = OS.CreateCompatibleDC (hdc); 
     107                    auto oldSrcBitmap = OS.SelectObject (srcHdc, hImage); 
     108                    auto memHdc = OS.CreateCompatibleDC (hdc); 
     109                    BITMAPINFOHEADER bmiHeader; 
     110                    bmiHeader.biSize = BITMAPINFOHEADER.sizeof; 
     111                    bmiHeader.biWidth = srcWidth; 
     112                    bmiHeader.biHeight = -srcHeight; 
     113                    bmiHeader.biPlanes = 1; 
     114                    bmiHeader.biBitCount = 32; 
     115                    bmiHeader.biCompression = OS.BI_RGB; 
     116                    void* pBits; 
     117                    auto memDib = OS.CreateDIBSection (null, cast(BITMAPINFO*)&bmiHeader, OS.DIB_RGB_COLORS, &pBits, null, 0); 
     118                    if (memDib is null) DWT.error (DWT.ERROR_NO_HANDLES); 
     119                    auto oldMemBitmap = OS.SelectObject (memHdc, memDib); 
     120 
     121                    BITMAP dibBM; 
     122                    OS.GetObject (memDib, BITMAP.sizeof, &dibBM); 
     123                    int sizeInBytes = dibBM.bmWidthBytes * dibBM.bmHeight; 
     124 
     125                    /* Get the foreground pixels */ 
     126                    OS.BitBlt (memHdc, 0, 0, srcWidth, srcHeight, srcHdc, 0, 0, OS.SRCCOPY); 
     127                    byte[] srcData = (cast(byte*)dibBM.bmBits)[ 0 .. sizeInBytes ]; 
     128 
     129                    PaletteData palette = new PaletteData(0xFF00, 0xFF0000, 0xFF000000); 
     130                    ImageData data = new ImageData(srcWidth, srcHeight, bm.bmBitsPixel, palette, bm.bmWidthBytes, srcData); 
     131                    data.transparentPixel = shdi.crColorKey << 8; 
     132                    dragSourceImage = new Image (control.getDisplay (), data); 
     133                    OS.SelectObject (memHdc, oldMemBitmap); 
     134                    OS.DeleteDC (memHdc); 
     135                    OS.DeleteObject (memDib); 
     136                    OS.SelectObject (srcHdc, oldSrcBitmap); 
     137                    OS.DeleteDC (srcHdc); 
     138                    OS.ReleaseDC (null, hdc); 
     139                    return dragSourceImage; 
     140                } 
     141            } 
     142            return null; 
     143        } 
     144 
    89145        Tree tree = cast(Tree) control; 
     146        //TEMPORARY CODE 
     147        if (tree.isListening (DWT.EraseItem) || tree.isListening (DWT.PaintItem)) return null; 
    90148        TreeItem[] selection = tree.getSelection(); 
    91149        if (selection.length is 0) return null; 
    92         int treeImageList = OS.SendMessage (tree.handle, OS.TVM_GETIMAGELIST, OS.TVSIL_NORMAL, 0); 
     150        auto treeImageList = OS.SendMessage (tree.handle, OS.TVM_GETIMAGELIST, OS.TVSIL_NORMAL, 0); 
    93151        if (treeImageList !is 0) { 
    94152            int count = Math.min(selection.length, 10);