Ignore:
Timestamp:
May 15, 2003, 4:25:14 PM (22 years ago)
Author:
sandervl
Message:

Wine resync

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/comctl32/animate.c

    r8382 r10097  
    2929 */
    3030
     31#define COM_NO_WINDOWS_H
    3132#include <string.h>
    3233#include "winbase.h"
     
    7980   int                  currFrame;
    8081   /* tranparency info*/
    81    COLORREF             transparentColor;   
     82   COLORREF             transparentColor;
    8283   HBRUSH               hbrushBG;
    8384   HBITMAP              hbmPrevFrame;
     
    8990static void ANIMATE_Notify(ANIMATE_INFO* infoPtr, UINT notif)
    9091{
    91     SendMessageA(GetParent(infoPtr->hWnd), WM_COMMAND, 
    92                  MAKEWPARAM(GetDlgCtrlID(infoPtr->hWnd), notif), 
     92    SendMessageA(GetParent(infoPtr->hWnd), WM_COMMAND,
     93                 MAKEWPARAM(GetDlgCtrlID(infoPtr->hWnd), notif),
    9394                 (LPARAM)infoPtr->hWnd);
    9495}
     
    99100    MMIOINFO    mminfo;
    100101    LPVOID      lpAvi;
    101    
     102
    102103    hrsrc = FindResourceA(hInst, lpName, "AVI");
    103104    if (!hrsrc)
    104105        return FALSE;
    105    
     106
    106107    infoPtr->hRes = LoadResource(hInst, hrsrc);
    107108    if (!infoPtr->hRes)
    108109        return FALSE;
    109    
     110
    110111    lpAvi = LockResource(infoPtr->hRes);
    111112    if (!lpAvi)
    112113        return FALSE;
    113    
     114
    114115    memset(&mminfo, 0, sizeof(mminfo));
    115116    mminfo.fccIOProc = FOURCC_MEM;
     
    130131    infoPtr->hMMio = mmioOpenA((LPSTR)lpName, NULL,
    131132                               MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE);
    132    
     133
    133134    if (!infoPtr->hMMio)
    134135        return FALSE;
    135    
     136
    136137    return TRUE;
    137138}
     
    143144
    144145    /* should stop playing */
    145     if (infoPtr->hThread) 
     146    if (infoPtr->hThread)
    146147    {
    147148        if (!TerminateThread(infoPtr->hThread,0))
     
    205206        infoPtr->hWnd = 0;
    206207        infoPtr->hMMio = 0;
    207        
     208
    208209        memset(&infoPtr->mah, 0, sizeof(infoPtr->mah));
    209210        memset(&infoPtr->ash, 0, sizeof(infoPtr->ash));
    210211        infoPtr->nFromFrame = infoPtr->nToFrame = infoPtr->nLoop = infoPtr->currFrame = 0;
    211212    }
    212     infoPtr->transparentColor = ANIMATE_COLOR_NONE;   
     213    infoPtr->transparentColor = ANIMATE_COLOR_NONE;
    213214}
    214215
    215216static void ANIMATE_TransparentBlt(ANIMATE_INFO* infoPtr, HDC hdcDest, HDC hdcSource)
    216 {       
     217{
    217218    HDC hdcMask;
    218219    HBITMAP hbmMask;
    219     HBITMAP hbmOld;           
    220    
     220    HBITMAP hbmOld;
     221
    221222    /* create a transparency mask */
    222223    hdcMask = CreateCompatibleDC(hdcDest);
    223     hbmMask = CreateBitmap(infoPtr->inbih->biWidth, infoPtr->inbih->biHeight, 1,1,NULL);   
    224     hbmOld = SelectObject(hdcMask, hbmMask);             
     224    hbmMask = CreateBitmap(infoPtr->inbih->biWidth, infoPtr->inbih->biHeight, 1,1,NULL);
     225    hbmOld = SelectObject(hdcMask, hbmMask);
    225226
    226227    SetBkColor(hdcSource,infoPtr->transparentColor);
    227228    BitBlt(hdcMask,0,0,infoPtr->inbih->biWidth, infoPtr->inbih->biHeight,hdcSource,0,0,SRCCOPY);
    228            
     229
    229230    /* mask the source bitmap */
    230     SetBkColor(hdcSource, RGB(0,0,0));         
    231     SetTextColor(hdcSource, RGB(255,255,255)); 
     231    SetBkColor(hdcSource, RGB(0,0,0));
     232    SetTextColor(hdcSource, RGB(255,255,255));
    232233    BitBlt(hdcSource, 0, 0, infoPtr->inbih->biWidth, infoPtr->inbih->biHeight, hdcMask, 0, 0, SRCAND);
    233234
    234235    /* mask the destination bitmap */
    235     SetBkColor(hdcDest, RGB(255,255,255));   
    236     SetTextColor(hdcDest, RGB(0,0,0));         
     236    SetBkColor(hdcDest, RGB(255,255,255));
     237    SetTextColor(hdcDest, RGB(0,0,0));
    237238    BitBlt(hdcDest, 0, 0, infoPtr->inbih->biWidth, infoPtr->inbih->biHeight, hdcMask, 0, 0, SRCAND);
    238239
     
    268269
    269270        nWidth = infoPtr->outbih->biWidth;
    270         nHeight = infoPtr->outbih->biHeight; 
     271        nHeight = infoPtr->outbih->biHeight;
    271272    } else
    272     { 
     273    {
    273274        pBitmapData = infoPtr->indata;
    274275        pBitmapInfo = (LPBITMAPINFO)infoPtr->inbih;
    275276
    276277        nWidth = infoPtr->inbih->biWidth;
    277         nHeight = infoPtr->inbih->biHeight; 
    278     } 
     278        nHeight = infoPtr->inbih->biHeight;
     279    }
    279280
    280281    if(!infoPtr->hbmPrevFrame)
     
    283284    }
    284285
    285     SetDIBits(hDC, infoPtr->hbmPrevFrame, 0, nHeight, pBitmapData, (LPBITMAPINFO)pBitmapInfo, DIB_RGB_COLORS); 
    286    
     286    SetDIBits(hDC, infoPtr->hbmPrevFrame, 0, nHeight, pBitmapData, (LPBITMAPINFO)pBitmapInfo, DIB_RGB_COLORS);
     287
    287288    hdcMem = CreateCompatibleDC(hDC);
    288289    hbmOld = SelectObject(hdcMem, infoPtr->hbmPrevFrame);
    289290
    290     /* 
    291      * we need to get the transparent color even without ACS_TRANSPARENT, 
     291    /*
     292     * we need to get the transparent color even without ACS_TRANSPARENT,
    292293     * because the style can be changed later on and the color should always
    293      * be obtained in the first frame 
     294     * be obtained in the first frame
    294295     */
    295296    if(infoPtr->transparentColor == ANIMATE_COLOR_NONE)
    296297    {
    297298        infoPtr->transparentColor = GetPixel(hdcMem,0,0);
    298     } 
    299 
    300     if(GetWindowLongA(infoPtr->hWnd, GWL_STYLE) & ACS_TRANSPARENT) 
    301     { 
     299    }
     300
     301    if(GetWindowLongA(infoPtr->hWnd, GWL_STYLE) & ACS_TRANSPARENT)
     302    {
    302303        HDC hdcFinal = CreateCompatibleDC(hDC);
    303304        HBITMAP hbmFinal = CreateCompatibleBitmap(hDC,nWidth, nHeight);
    304305        HBITMAP hbmOld2 = SelectObject(hdcFinal, hbmFinal);
    305306        RECT rect;
    306        
     307
    307308        rect.left = 0;
    308309        rect.top = 0;
    309310        rect.right = nWidth;
    310311        rect.bottom = nHeight;
    311        
     312
    312313        if(!infoPtr->hbrushBG)
    313314            infoPtr->hbrushBG = GetCurrentObject(hDC, OBJ_BRUSH);
     
    322323        infoPtr->hbmPrevFrame = hbmFinal;
    323324         }
    324    
    325     if (GetWindowLongA(infoPtr->hWnd, GWL_STYLE) & ACS_CENTER) 
    326     {
    327        RECT rect;   
     325
     326    if (GetWindowLongA(infoPtr->hWnd, GWL_STYLE) & ACS_CENTER)
     327    {
     328       RECT rect;
    328329
    329330       GetWindowRect(infoPtr->hWnd, &rect);
    330        nOffsetX = ((rect.right - rect.left) - nWidth)/2; 
    331        nOffsetY = ((rect.bottom - rect.top) - nHeight)/2; 
    332     }
    333     BitBlt(hDC, nOffsetX, nOffsetY, nWidth, nHeight, hdcMem, 0, 0, SRCCOPY);   
     331       nOffsetX = ((rect.right - rect.left) - nWidth)/2;
     332       nOffsetY = ((rect.bottom - rect.top) - nHeight)/2;
     333    }
     334    BitBlt(hDC, nOffsetX, nOffsetY, nWidth, nHeight, hdcMem, 0, 0, SRCCOPY);
    334335
    335336    SelectObject(hdcMem, hbmOld);
     
    348349    mmioSeek(infoPtr->hMMio, infoPtr->lpIndex[infoPtr->currFrame], SEEK_SET);
    349350    mmioRead(infoPtr->hMMio, infoPtr->indata, infoPtr->ash.dwSuggestedBufferSize);
    350    
     351
    351352    if (infoPtr->hic &&
    352         fnIC.fnICDecompress(infoPtr->hic, 0, infoPtr->inbih, infoPtr->indata, 
     353        fnIC.fnICDecompress(infoPtr->hic, 0, infoPtr->inbih, infoPtr->indata,
    353354                     infoPtr->outbih, infoPtr->outdata) != ICERR_OK) {
    354355        LeaveCriticalSection(&infoPtr->cs);
     
    379380    ANIMATE_INFO*       infoPtr = (ANIMATE_INFO*)ptr_;
    380381    HDC hDC;
    381    
     382
    382383    if(!infoPtr)
    383384    {
     
    387388
    388389    while(1)
    389     {   
    390         if(GetWindowLongA(infoPtr->hWnd, GWL_STYLE) & ACS_TRANSPARENT) 
     390    {
     391        if(GetWindowLongA(infoPtr->hWnd, GWL_STYLE) & ACS_TRANSPARENT)
    391392        {
    392393            hDC = GetDC(infoPtr->hWnd);
    393394            /* sometimes the animation window will be destroyed in between
    394395             * by the main program, so a ReleaseDC() error msg is possible */
    395             infoPtr->hbrushBG = SendMessageA(GetParent(infoPtr->hWnd),WM_CTLCOLORSTATIC,hDC, infoPtr->hWnd);
     396            infoPtr->hbrushBG = (HBRUSH)SendMessageA(GetParent(infoPtr->hWnd),
     397                                             WM_CTLCOLORSTATIC, (WPARAM)hDC,
     398                                             (LPARAM)infoPtr->hWnd);
    396399            ReleaseDC(infoPtr->hWnd,hDC);
    397400        }
    398        
     401
    399402        EnterCriticalSection(&infoPtr->cs);
    400403        ANIMATE_DrawFrame(infoPtr);
    401404        LeaveCriticalSection(&infoPtr->cs);
    402    
     405
    403406        /* time is in microseconds, we should convert it to milliseconds */
    404407        Sleep((infoPtr->mah.dwMicroSecPerFrame+500)/1000);
     
    427430        infoPtr->nToFrame = infoPtr->mah.dwTotalFrames - 1;
    428431
    429     TRACE("(repeat=%d from=%d to=%d);\n", 
     432    TRACE("(repeat=%d from=%d to=%d);\n",
    430433          infoPtr->nLoop, infoPtr->nFromFrame, infoPtr->nToFrame);
    431434
     
    444447
    445448        TRACE("Using an animation thread\n");
    446         infoPtr->hThread = CreateThread(0,0,ANIMATE_AnimationThread,(LPVOID)infoPtr,0,0 &threadID);
     449        infoPtr->hThread = CreateThread(0,0,ANIMATE_AnimationThread,(LPVOID)infoPtr, 0, &threadID);
    447450        if(!infoPtr->hThread)
    448451        {
     
    450453           return FALSE;
    451454    }
    452        
    453     }
    454        
     455
     456    }
     457
    455458    ANIMATE_Notify(infoPtr, ACN_START);
    456459
     
    520523    mmioRead(infoPtr->hMMio, (LPSTR)&infoPtr->ash, sizeof(infoPtr->ash));
    521524
    522     TRACE("ash.fccType='%c%c%c%c'\n",           LOBYTE(LOWORD(infoPtr->ash.fccType)), 
    523                                                 HIBYTE(LOWORD(infoPtr->ash.fccType)), 
    524                                                 LOBYTE(HIWORD(infoPtr->ash.fccType)), 
     525    TRACE("ash.fccType='%c%c%c%c'\n",           LOBYTE(LOWORD(infoPtr->ash.fccType)),
     526                                                HIBYTE(LOWORD(infoPtr->ash.fccType)),
     527                                                LOBYTE(HIWORD(infoPtr->ash.fccType)),
    525528                                                HIBYTE(HIWORD(infoPtr->ash.fccType)));
    526     TRACE("ash.fccHandler='%c%c%c%c'\n",        LOBYTE(LOWORD(infoPtr->ash.fccHandler)), 
    527                                                 HIBYTE(LOWORD(infoPtr->ash.fccHandler)), 
    528                                                 LOBYTE(HIWORD(infoPtr->ash.fccHandler)), 
     529    TRACE("ash.fccHandler='%c%c%c%c'\n",        LOBYTE(LOWORD(infoPtr->ash.fccHandler)),
     530                                                HIBYTE(LOWORD(infoPtr->ash.fccHandler)),
     531                                                LOBYTE(HIWORD(infoPtr->ash.fccHandler)),
    529532                                                HIBYTE(HIWORD(infoPtr->ash.fccHandler)));
    530533    TRACE("ash.dwFlags=%ld\n",                  infoPtr->ash.dwFlags);
     
    539542    TRACE("ash.dwQuality=%ld\n",                infoPtr->ash.dwQuality);
    540543    TRACE("ash.dwSampleSize=%ld\n",             infoPtr->ash.dwSampleSize);
    541     TRACE("ash.rcFrame=(%d,%d,%d,%d)\n",        infoPtr->ash.rcFrame.top, infoPtr->ash.rcFrame.left, 
     544    TRACE("ash.rcFrame=(%d,%d,%d,%d)\n",        infoPtr->ash.rcFrame.top, infoPtr->ash.rcFrame.left,
    542545          infoPtr->ash.rcFrame.bottom, infoPtr->ash.rcFrame.right);
    543546
     
    573576
    574577    mmioAscend(infoPtr->hMMio, &mmckList, 0);
    575    
     578
    576579#if 0
    577580    /* an AVI has 0 or 1 video stream, and to be animated should not contain
    578      * an audio stream, so only one strl is allowed 
     581     * an audio stream, so only one strl is allowed
    579582     */
    580583    mmckList.fccType = mmioFOURCC('s', 't', 'r', 'l');
     
    597600    /* FIXME: should handle the 'rec ' LIST when present */
    598601
    599     infoPtr->lpIndex = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 
     602    infoPtr->lpIndex = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
    600603                                 infoPtr->mah.dwTotalFrames * sizeof(DWORD));
    601604    if (!infoPtr->lpIndex) {
     
    605608
    606609    numFrame = insize = 0;
    607     while (mmioDescend(infoPtr->hMMio, &mmckInfo, &mmckList, 0) == 0 && 
     610    while (mmioDescend(infoPtr->hMMio, &mmckInfo, &mmckList, 0) == 0 &&
    608611           numFrame < infoPtr->mah.dwTotalFrames) {
    609612        infoPtr->lpIndex[numFrame] = mmckInfo.dwDataOffset;
     
    641644       (infoPtr->ash.fccHandler == mmioFOURCC(0, 0, 0, 0)))
    642645    {
    643         infoPtr->hic = 0;             
     646        infoPtr->hic = 0;
    644647        return TRUE;
    645648    }
     
    651654        return FALSE;
    652655    }
    653    
    654     outSize = fnIC.fnICSendMessage(infoPtr->hic, ICM_DECOMPRESS_GET_FORMAT, 
     656
     657    outSize = fnIC.fnICSendMessage(infoPtr->hic, ICM_DECOMPRESS_GET_FORMAT,
    655658                            (DWORD)infoPtr->inbih, 0L);
    656659
     
    661664    }
    662665
    663     if (fnIC.fnICSendMessage(infoPtr->hic, ICM_DECOMPRESS_GET_FORMAT, 
    664                       (DWORD)infoPtr->inbih, (DWORD)infoPtr->outbih) != ICERR_OK) {
     666    if (fnIC.fnICSendMessage(infoPtr->hic, ICM_DECOMPRESS_GET_FORMAT,
     667                      (DWORD)infoPtr->inbih, (DWORD)infoPtr->outbih) != outSize) {
    665668        WARN("Can't get output BIH\n");
    666669        return FALSE;
     
    673676    }
    674677
    675     if (fnIC.fnICSendMessage(infoPtr->hic, ICM_DECOMPRESS_BEGIN, 
     678    if (fnIC.fnICSendMessage(infoPtr->hic, ICM_DECOMPRESS_BEGIN,
    676679                      (DWORD)infoPtr->inbih, (DWORD)infoPtr->outbih) != ICERR_OK) {
    677680        WARN("Can't begin decompression\n");
     
    692695    if (!lParam) {
    693696        TRACE("Closing avi!\n");
    694         return TRUE;
    695     }
    696    
     697        /* installer of thebat! v1.62 requires FALSE here */
     698        return (infoPtr->hMMio != 0);
     699    }
     700
    697701    if (!hInstance)
    698        hInstance = GetWindowLongA(hWnd, GWL_HINSTANCE);
     702       hInstance = (HINSTANCE)GetWindowLongA(hWnd, GWL_HINSTANCE);
    699703
    700704    if (HIWORD(lParam)) {
     
    794798
    795799    InitializeCriticalSection(&infoPtr->cs);
    796    
     800
    797801    return 0;
    798802}
     
    818822{
    819823    RECT rect;
    820     HBRUSH hBrush = 0;       
    821 
    822     if(GetWindowLongA(hWnd, GWL_STYLE) & ACS_TRANSPARENT)
    823     {
    824         hBrush = SendMessageA(GetParent(hWnd),WM_CTLCOLORSTATIC,(HDC)wParam, hWnd);   
     824    HBRUSH hBrush = 0;
     825
     826    if(GetWindowLongA(hWnd, GWL_STYLE) & ACS_TRANSPARENT)
     827    {
     828        hBrush = (HBRUSH)SendMessageA(GetParent(hWnd),WM_CTLCOLORSTATIC,
     829                                      wParam, (LPARAM)hWnd);
    825830    }
    826831
     
    841846static LRESULT WINAPI ANIMATE_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    842847{
    843     TRACE("hwnd=%x msg=%x wparam=%x lparam=%lx\n", hWnd, uMsg, wParam, lParam);
     848    TRACE("hwnd=%p msg=%x wparam=%x lparam=%lx\n", hWnd, uMsg, wParam, lParam);
    844849    if (!ANIMATE_GetInfoPtr(hWnd) && (uMsg != WM_NCCREATE))
    845850        return DefWindowProcA(hWnd, uMsg, wParam, lParam);
     
    848853    case ACM_OPENA:
    849854        return ANIMATE_OpenA(hWnd, wParam, lParam);
    850        
     855
    851856        /*      case ACM_OPEN32W: FIXME!! */
    852857        /*          return ANIMATE_Open32W(hWnd, wParam, lParam); */
    853        
     858
    854859    case ACM_PLAY:
    855860        return ANIMATE_Play(hWnd, wParam, lParam);
    856        
     861
    857862    case ACM_STOP:
    858863        return ANIMATE_Stop(hWnd, wParam, lParam);
    859        
     864
    860865    case WM_NCCREATE:
    861866        ANIMATE_Create(hWnd, wParam, lParam);
    862867        return DefWindowProcA(hWnd, uMsg, wParam, lParam);
    863        
     868
    864869    case WM_NCHITTEST:
    865870        return HTTRANSPARENT;
     
    868873        ANIMATE_Destroy(hWnd, wParam, lParam);
    869874        return DefWindowProcA(hWnd, uMsg, wParam, lParam);
    870        
     875
    871876    case WM_ERASEBKGND:
    872877        ANIMATE_EraseBackground(hWnd, wParam, lParam);
     
    879884        {
    880885            ANIMATE_INFO* infoPtr = ANIMATE_GetInfoPtr(hWnd);
    881             infoPtr->hbrushBG = SendMessageA(GetParent(hWnd),WM_CTLCOLORSTATIC,(HDC)wParam, hWnd);
     886            infoPtr->hbrushBG = (HBRUSH)SendMessageA(GetParent(hWnd),
     887                                                     WM_CTLCOLORSTATIC,
     888                                                     wParam, (LPARAM)hWnd);
    882889        }
    883890        return ANIMATE_DrawFrame(ANIMATE_GetInfoPtr(hWnd));
    884        
     891
    885892    case WM_CLOSE:
    886893        ANIMATE_Free(ANIMATE_GetInfoPtr(hWnd));
     
    890897        {
    891898            ANIMATE_INFO* infoPtr = ANIMATE_GetInfoPtr(hWnd);
    892                
     899
    893900            /* the animation isn't playing, don't paint */
    894901            if(!infoPtr->uTimer && !infoPtr->hThread)
    895902                /* default paint handling */
    896903                return DefWindowProcA(hWnd, uMsg, wParam, lParam);
    897            
     904
    898905            if (GetWindowLongA(hWnd, GWL_STYLE) & ACS_TRANSPARENT)
    899                 infoPtr->hbrushBG = SendMessageA(GetParent(hWnd), WM_CTLCOLORSTATIC,
    900                                                  (HDC)wParam, hWnd);
    901    
     906                infoPtr->hbrushBG = (HBRUSH)SendMessageA(GetParent(hWnd),
     907                                                         WM_CTLCOLORSTATIC,
     908                                                         wParam, (LPARAM)hWnd);
     909
    902910            if (wParam)
    903911            {
     
    914922                ANIMATE_PaintFrame(infoPtr, hDC);
    915923                LeaveCriticalSection(&infoPtr->cs);
    916    
     924
    917925                EndPaint(hWnd, &ps);
    918926            }
     
    925933
    926934    default:
    927         if (uMsg >= WM_USER)
     935        if ((uMsg >= WM_USER) && (uMsg < WM_APP))
    928936            ERR("unknown msg %04x wp=%08x lp=%08lx\n", uMsg, wParam, lParam);
    929        
     937
    930938        return DefWindowProcA(hWnd, uMsg, wParam, lParam);
    931939    }
     
    945953    wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
    946954    wndClass.lpszClassName = ANIMATE_CLASSA;
    947  
     955
    948956    RegisterClassA(&wndClass);
    949957}
     
    952960void ANIMATE_Unregister(void)
    953961{
    954     UnregisterClassA(ANIMATE_CLASSA, (HINSTANCE)NULL);
    955 }
    956 
     962    UnregisterClassA(ANIMATE_CLASSA, NULL);
     963}
Note: See TracChangeset for help on using the changeset viewer.