VirtualBox

Ignore:
Timestamp:
Apr 2, 2010 9:12:26 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
59659
Message:

wddm: vboxtray: abstraction display driver API for passing escape codes (using ExtEscape for XPDM & PFND3DKMT stugg for WDDM); WDDM miniport driver: basics for handling autoresize & seamles

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxSeamless.cpp

    r26562 r27955  
    3838    BOOL    (* pfnVBoxRemoveHook)();
    3939
    40     LPRGNDATA lpRgnData;
     40    PVBOXDISPIFESCAPE lpEscapeData;
    4141} VBOXSEAMLESSCONTEXT;
    4242
     
    144144        gCtx.pfnVBoxRemoveHook();
    145145
    146     if (gCtx.lpRgnData)
    147     {
    148         free(gCtx.lpRgnData);
    149         gCtx.lpRgnData = NULL;
     146    if (gCtx.lpEscapeData)
     147    {
     148        free(gCtx.lpEscapeData);
     149        gCtx.lpEscapeData = NULL;
    150150    }
    151151}
     
    238238        if (cbSize)
    239239        {
    240             LPRGNDATA lpRgnData = (LPRGNDATA)malloc(cbSize);
    241             if (lpRgnData)
    242             {
     240            PVBOXDISPIFESCAPE lpEscapeData = (PVBOXDISPIFESCAPE)malloc(VBOXDISPIFESCAPE_SIZE(cbSize));
     241            if (lpEscapeData)
     242            {
     243                lpEscapeData->escapeCode = VBOXESC_SETVISIBLEREGION;
     244                LPRGNDATA lpRgnData = VBOXDISPIFESCAPE_DATA(lpEscapeData, RGNDATA);
    243245                memset(lpRgnData, 0, cbSize);
    244246                cbSize = GetRegionData(param.hrgn, cbSize, lpRgnData);
     
    254256                    }
    255257#endif
    256                     if (    !gCtx.lpRgnData
    257                         ||  (gCtx.lpRgnData->rdh.dwSize + gCtx.lpRgnData->rdh.nRgnSize != cbSize)
    258                         ||  memcmp(gCtx.lpRgnData, lpRgnData, cbSize))
     258                    LPRGNDATA lpCtxRgnData = VBOXDISPIFESCAPE_DATA(gCtx.lpEscapeData, RGNDATA);
     259                    if (    !gCtx.lpEscapeData
     260                        ||  (lpCtxRgnData->rdh.dwSize + lpCtxRgnData->rdh.nRgnSize != cbSize)
     261                        ||  memcmp(lpCtxRgnData, lpRgnData, cbSize))
    259262                    {
    260263                        /* send to display driver */
    261                         ExtEscape(param.hdc, VBOXESC_SETVISIBLEREGION, cbSize, (LPCSTR)lpRgnData, 0, NULL);
    262 
    263                         if (gCtx.lpRgnData)
    264                             free(gCtx.lpRgnData);
    265                         gCtx.lpRgnData = lpRgnData;
     264                        VBoxDispIfEscape(&gCtx.pEnv->dispIf, lpEscapeData, cbSize);
     265
     266                        if (gCtx.lpEscapeData)
     267                            free(gCtx.lpEscapeData);
     268                        gCtx.lpEscapeData = lpEscapeData;
    266269                    }
    267270                    else
    268271                        Log(("Visible rectangles haven't changed; ignore\n"));
    269272                }
    270                 if (lpRgnData != gCtx.lpRgnData)
    271                     free(lpRgnData);
     273                if (lpEscapeData != gCtx.lpEscapeData)
     274                    free(lpEscapeData);
    272275            }
    273276        }
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette