VirtualBox

Changeset 53965 in vbox for trunk/src/VBox/Devices/Graphics


Ignore:
Timestamp:
Jan 26, 2015 8:37:10 PM (10 years ago)
Author:
vboxsync
Message:

Devices/Graphics, Main: optionally send cursor integration toggle and guest cursor position information through the graphics device.

Location:
trunk/src/VBox/Devices/Graphics
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA.cpp

    r53782 r53965  
    60646064#endif
    60656065    pThis->IPort.pfnSendModeHint        = vbvaPortSendModeHint;
     6066    pThis->IPort.pfnReportHostCursorCapabilities
     6067                                        = vbvaPortReportHostCursorCapabilities;
     6068    pThis->IPort.pfnReportHostCursorPosition
     6069                                        = vbvaPortReportHostCursorPosition;
    60666070
    60676071#if defined(VBOX_WITH_HGSMI)
  • trunk/src/VBox/Devices/Graphics/DevVGA.h

    r53788 r53965  
    557557    uint32_t                    fGuestCaps;
    558558    uint32_t                    fScanLineCfg;
    559     uint8_t                     Padding10[4];
     559    uint32_t                    fHostCursorCapabilities;
    560560#  else
    561561    uint8_t                     Padding10[14];
     
    692692                                       uint32_t dy, uint32_t fEnabled,
    693693                                       uint32_t fNotifyGuest);
     694DECLCALLBACK(void) vbvaPortReportHostCursorCapabilities(PPDMIDISPLAYPORT pInterface, uint32_t fCapabilitiesAdded,
     695                                                        uint32_t fCapabilitiesRemoved);
     696DECLCALLBACK(void) vbvaPortReportHostCursorPosition(PPDMIDISPLAYPORT pInterface, uint32_t x, uint32_t y);
    694697
    695698# ifdef VBOX_WITH_VDMA
  • trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp

    r53813 r53965  
    8383    VBVAMOUSESHAPEINFO mouseShapeInfo;
    8484    bool fPaused;
     85    uint32_t xCursor;
     86    uint32_t yCursor;
    8587    VBVAMODEHINT aModeHints[VBOX_VIDEO_MAX_SCREENS];
    8688} VBVACONTEXT;
     
    21792181                pConf32->u32Value = 64*_1K;
    21802182            }
    2181             else if (pConf32->u32Index == VBOX_VBVA_CONF32_MODE_HINT_REPORTING)
     2183            else if (   pConf32->u32Index == VBOX_VBVA_CONF32_MODE_HINT_REPORTING
     2184                     || pConf32->u32Index == VBOX_VBVA_CONF32_GUEST_CURSOR_REPORTING)
    21822185            {
    21832186                pConf32->u32Value = VINF_SUCCESS;
     2187            }
     2188            else if (pConf32->u32Index == VBOX_VBVA_CONF32_CURSOR_CAPABILITIES)
     2189            {
     2190                pConf32->u32Value = pVGAState->fHostCursorCapabilities;
    21842191            }
    21852192            else
     
    24832490                Assert(pbHint - (uint8_t *)pvBuffer <= cbBuffer);
    24842491            }
     2492        } break;
     2493
     2494        case VBVA_REPORT_INPUT_MAPPING:
     2495        {
     2496            if (cbBuffer != sizeof(VBVAREPORTINPUTMAPPING))
     2497            {
     2498                rc = VERR_INVALID_PARAMETER;
     2499                break;
     2500            }
     2501            VBVAREPORTINPUTMAPPING *pReport = (VBVAREPORTINPUTMAPPING *)pvBuffer;
     2502            LogRelFlowFunc(("VBVA_REPORT_INPUT_MAPPING: x=%u, y=%u, cx=%u, cy=%u\n", (unsigned)pReport->x, (unsigned)pReport->y,
     2503                            (unsigned)pReport->cx, (unsigned)pReport->cy));
     2504            pVGAState->pDrv->pfnVBVAInputMappingUpdate(pVGAState->pDrv, pReport->x, pReport->y, pReport->cx, pReport->cy);
     2505        } break;
     2506
     2507        case VBVA_CURSOR_POSITION:
     2508        {
     2509            if (cbBuffer != sizeof(VBVACURSORPOSITION))
     2510            {
     2511                rc = VERR_INVALID_PARAMETER;
     2512                break;
     2513            }
     2514            VBVACURSORPOSITION *pReport
     2515                = (VBVACURSORPOSITION *)pvBuffer;
     2516            LogRelFlowFunc(("VBVA_CURSOR_POSITION: fReportPosition=%RTbool",
     2517                            RT_BOOL(pReport->fReportPosition)));
     2518            if (RT_BOOL(pReport->fReportPosition))
     2519                LogRelFlowFunc(("VBVA_CURSOR_POSITION: fReportPosition=true, x=%u, y=%u\n",
     2520                               (unsigned)pReport->x, (unsigned)pReport->y));
     2521            else
     2522                LogRelFlowFunc(("VBVA_CURSOR_POSITION: fReportPosition=false\n"));
     2523            pReport->x = pCtx->xCursor;
     2524            pReport->y = pCtx->yCursor;
    24852525        } break;
    24862526
     
    26222662}
    26232663
     2664DECLCALLBACK(void) vbvaPortReportHostCursorCapabilities(PPDMIDISPLAYPORT pInterface, uint32_t fCapabilitiesAdded,
     2665                                                        uint32_t fCapabilitiesRemoved)
     2666{
     2667    PVGASTATE pThis = IDISPLAYPORT_2_VGASTATE(pInterface);
     2668    int rc = PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY);
     2669    AssertRC(rc);
     2670    pThis->fHostCursorCapabilities |= fCapabilitiesAdded;
     2671    pThis->fHostCursorCapabilities &= ~fCapabilitiesRemoved;
     2672    if (pThis->fGuestCaps & VBVACAPS_IRQ)
     2673        VBVARaiseIrqNoWait(pThis, HGSMIHOSTFLAGS_CURSOR_CAPABILITIES);
     2674    PDMCritSectLeave(&pThis->CritSect);
     2675}
     2676
     2677DECLCALLBACK(void) vbvaPortReportHostCursorPosition
     2678                       (PPDMIDISPLAYPORT pInterface, uint32_t x, uint32_t y)
     2679{
     2680    PVGASTATE pThis = IDISPLAYPORT_2_VGASTATE(pInterface);
     2681    VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pThis->pHGSMI);
     2682    int rc = PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY);
     2683    AssertRC(rc);
     2684    pCtx->xCursor = x;
     2685    pCtx->yCursor = y;
     2686    PDMCritSectLeave(&pThis->CritSect);
     2687}
     2688
    26242689static HGSMICHANNELHANDLER sOldChannelHandler;
    26252690
     
    26532718             pCtx->fPaused = true;
    26542719             memset(pCtx->aModeHints, ~0, sizeof(*pCtx->aModeHints));
     2720             pVGAState->fHostCursorCapabilities = 0;
    26552721         }
    26562722     }
Note: See TracChangeset for help on using the changeset viewer.

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