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/TableDragSourceEffect.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; 
     
    8890        if (dragSourceImage !is null) dragSourceImage.dispose(); 
    8991        dragSourceImage = null; 
     92        if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) { 
     93            SHDRAGIMAGE shdi; 
     94            int DI_GETDRAGIMAGE = OS.RegisterWindowMessage ( "ShellGetDragImage"w.ptr ); //$NON-NLS-1$ 
     95            if (OS.SendMessage (control.handle, DI_GETDRAGIMAGE, 0, &shdi) !is 0) { 
     96                event.x += shdi.ptOffset.x; 
     97                event.y += shdi.ptOffset.y; 
     98                auto hImage = shdi.hbmpDragImage; 
     99                if (hImage !is null) { 
     100                    BITMAP bm; 
     101                    OS.GetObject (hImage, BITMAP.sizeof, &bm); 
     102                    int srcWidth = bm.bmWidth; 
     103                    int srcHeight = bm.bmHeight; 
     104 
     105                    /* Create resources */ 
     106                    auto hdc = OS.GetDC (null); 
     107                    auto srcHdc = OS.CreateCompatibleDC (hdc); 
     108                    auto oldSrcBitmap = OS.SelectObject (srcHdc, hImage); 
     109                    auto memHdc = OS.CreateCompatibleDC (hdc); 
     110                    BITMAPINFOHEADER bmiHeader; 
     111                    bmiHeader.biSize = BITMAPINFOHEADER.sizeof; 
     112                    bmiHeader.biWidth = srcWidth; 
     113                    bmiHeader.biHeight = -srcHeight; 
     114                    bmiHeader.biPlanes = 1; 
     115                    bmiHeader.biBitCount = 32; 
     116                    bmiHeader.biCompression = OS.BI_RGB; 
     117                    void* pBits; 
     118                    auto memDib = OS.CreateDIBSection (null, cast(BITMAPINFO*)&bmiHeader, OS.DIB_RGB_COLORS, &pBits, null, 0); 
     119                    if (memDib is null) DWT.error (DWT.ERROR_NO_HANDLES); 
     120                    auto oldMemBitmap = OS.SelectObject (memHdc, memDib); 
     121 
     122                    BITMAP dibBM; 
     123                    OS.GetObject (memDib, BITMAP.sizeof, &dibBM); 
     124                    int sizeInBytes = dibBM.bmWidthBytes * dibBM.bmHeight; 
     125 
     126                    /* Get the foreground pixels */ 
     127                    OS.BitBlt (memHdc, 0, 0, srcWidth, srcHeight, srcHdc, 0, 0, OS.SRCCOPY); 
     128                    //byte[] srcData = new byte [sizeInBytes]; 
     129                    //OS.MoveMemory (srcData, dibBM.bmBits, sizeInBytes); 
     130                    byte[] srcData = (cast(byte*) dibBM.bmBits)[ 0 .. BITMAPINFOHEADER.sizeof ]; 
     131 
     132                    byte[] alphaData = new byte[srcWidth * srcHeight]; 
     133                    int spinc = dibBM.bmWidthBytes - srcWidth * 4; 
     134                    int ap = 0, sp = 3; 
     135                    for (int y = 0; y < srcHeight; ++y) { 
     136                        for (int x = 0; x < srcWidth; ++x) { 
     137                            alphaData [ap++] = srcData [sp]; 
     138                            sp += 4; 
     139                        } 
     140                        sp += spinc; 
     141                    } 
     142                    PaletteData palette = new PaletteData(0xFF00, 0xFF0000, 0xFF000000); 
     143                    ImageData data = new ImageData(srcWidth, srcHeight, bm.bmBitsPixel, palette, bm.bmWidthBytes, srcData); 
     144                    data.alphaData = alphaData; 
     145                    data.transparentPixel = shdi.crColorKey; 
     146                    dragSourceImage = new Image(control.getDisplay(), data); 
     147                    OS.SelectObject (memHdc, oldMemBitmap); 
     148                    OS.DeleteDC (memHdc); 
     149                    OS.DeleteObject (memDib); 
     150                    OS.SelectObject (srcHdc, oldSrcBitmap); 
     151                    OS.DeleteDC (srcHdc); 
     152                    OS.ReleaseDC (null, hdc); 
     153                    return dragSourceImage; 
     154                } 
     155            } 
     156            return null; 
     157        } 
    90158        Table table = cast(Table) control; 
     159        //TEMPORARY CODE 
     160        if (table.isListening (DWT.EraseItem) || table.isListening (DWT.PaintItem)) return null; 
    91161        TableItem[] selection = table.getSelection(); 
    92162        if (selection.length is 0) return null; 
    93         int tableImageList = OS.SendMessage (table.handle, OS.LVM_GETIMAGELIST, OS.LVSIL_SMALL, 0); 
     163        int /*long*/ tableImageList = OS.SendMessage (table.handle, OS.LVM_GETIMAGELIST, OS.LVSIL_SMALL, 0); 
    94164        if (tableImageList !is 0) { 
    95165            int count = Math.min(selection.length, 10);