DisplayImpl.h revision 46cc6e9e479435fa4657adc406d6cacd50e84aee
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync/* $Id$ */
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync/** @file
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync *
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync * VirtualBox COM class implementation
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync */
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync/*
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync * Copyright (C) 2006-2008 Sun Microsystems, Inc.
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync *
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * available from http://www.virtualbox.org. This file is free software;
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync *
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * additional information or have any questions.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync */
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#ifndef ____H_DISPLAYIMPL
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync#define ____H_DISPLAYIMPL
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync#include "VirtualBoxBase.h"
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync#include "SchemaDefs.h"
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync#include <iprt/semaphore.h>
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync#include <VBox/pdmdrv.h>
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync#include <VBox/VBoxGuest.h>
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync#include <VBox/VBoxVideo.h>
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsyncclass Console;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsyncenum {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync ResizeStatus_Void,
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync ResizeStatus_InProgress,
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync ResizeStatus_UpdateDisplayData
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync};
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsynctypedef struct _DISPLAYFBINFO
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync{
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync uint32_t u32Offset;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync uint32_t u32MaxFramebufferSize;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync uint32_t u32InformationSize;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync ComPtr<IFramebuffer> pFramebuffer;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync LONG xOrigin;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync LONG yOrigin;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync ULONG w;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync ULONG h;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync VBOXVIDEOINFOHOSTEVENTS *pHostEvents;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
b34f0f200ed0778053a2a1d93381c2c6b60cb2d5vboxsync volatile uint32_t u32ResizeStatus;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync /* The Framebuffer has default format and must be updates immediately. */
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync bool fDefaultFormat;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync struct {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync /* The rectangle that includes all dirty rectangles. */
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync int32_t xLeft;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync int32_t xRight;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync int32_t yTop;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync int32_t yBottom;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync } dirtyRect;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync struct {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync bool fPending;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync ULONG pixelFormat;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync void *pvVRAM;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync uint32_t bpp;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync uint32_t cbLine;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync int w;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync int h;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync } pendingResize;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync} DISPLAYFBINFO;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsyncclass ATL_NO_VTABLE Display :
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync public VirtualBoxBaseNEXT,
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync VBOX_SCRIPTABLE_IMPL(IConsoleCallback),
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync public VirtualBoxSupportErrorInfoImpl <Display, IDisplay>,
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync public VirtualBoxSupportTranslation <Display>,
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync VBOX_SCRIPTABLE_IMPL(IDisplay)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync{
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsyncpublic:
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (Display)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync DECLARE_NOT_AGGREGATABLE(Display)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync BEGIN_COM_MAP(Display)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
d10ad42fb05bd7b430357b2cf30fd9a367c2b7d1vboxsync COM_INTERFACE_ENTRY(IDisplay)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync COM_INTERFACE_ENTRY2(IDispatch,IDisplay)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync END_COM_MAP()
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync NS_DECL_ISUPPORTS
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync DECLARE_EMPTY_CTOR_DTOR (Display)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync HRESULT FinalConstruct();
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync void FinalRelease();
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync // public initializer/uninitializer for internal purposes only
b34f0f200ed0778053a2a1d93381c2c6b60cb2d5vboxsync HRESULT init (Console *aParent);
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync void uninit();
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync int registerSSM(PVM pVM);
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync // public methods only for internal purposes
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync int handleDisplayResize (unsigned uScreenId, uint32_t bpp, void *pvVRAM, uint32_t cbLine, int w, int h);
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync void handleDisplayUpdate (int x, int y, int cx, int cy);
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync#ifdef VBOX_WITH_VIDEOHWACCEL
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync void handleVHWACommandProcess(PPDMIDISPLAYCONNECTOR pInterface, PVBOXVHWACMD pCommand);
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync#endif
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync IFramebuffer *getFramebuffer()
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return maFramebuffers[VBOX_VIDEO_PRIMARY_SCREEN].pFramebuffer;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync }
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync int VideoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory);
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync void VideoAccelFlush (void);
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync bool VideoAccelAllowed (void);
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync#ifdef VBOX_WITH_VRDP
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync void VideoAccelVRDP (bool fEnable);
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync#endif /* VBOX_WITH_VRDP */
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync // IConsoleCallback methods
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync STDMETHOD(OnMousePointerShapeChange)(BOOL visible, BOOL alpha, ULONG xHot, ULONG yHot,
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync ULONG width, ULONG height, BYTE *shape)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return S_OK;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync }
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync STDMETHOD(OnMouseCapabilityChange)(BOOL supportsAbsolute, BOOL needsHostCursor)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return S_OK;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync }
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync STDMETHOD(OnKeyboardLedsChange)(BOOL fNumLock, BOOL fCapsLock, BOOL fScrollLock)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return S_OK;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync }
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync STDMETHOD(OnStateChange)(MachineState_T machineState);
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync STDMETHOD(OnAdditionsStateChange)()
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return S_OK;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync }
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync STDMETHOD(OnDVDDriveChange)()
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync return S_OK;
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync }
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync STDMETHOD(OnFloppyDriveChange)()
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return S_OK;
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync }
20444475973550995eb2369162a5a899fb6e3994vboxsync
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync STDMETHOD(OnNetworkAdapterChange) (INetworkAdapter *aNetworkAdapter)
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync {
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync return S_OK;
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync }
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync STDMETHOD(OnSerialPortChange) (ISerialPort *aSerialPort)
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync {
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync return S_OK;
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync }
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync STDMETHOD(OnParallelPortChange) (IParallelPort *aParallelPort)
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync {
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync return S_OK;
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync }
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync STDMETHOD(OnStorageControllerChange) ()
56665b35e85d3cd7d4232957d09b488ab44d81cfvboxsync {
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync return S_OK;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync }
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync STDMETHOD(OnVRDPServerChange)()
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return S_OK;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync }
b34f0f200ed0778053a2a1d93381c2c6b60cb2d5vboxsync
b34f0f200ed0778053a2a1d93381c2c6b60cb2d5vboxsync STDMETHOD(OnUSBControllerChange)()
b34f0f200ed0778053a2a1d93381c2c6b60cb2d5vboxsync {
b34f0f200ed0778053a2a1d93381c2c6b60cb2d5vboxsync return S_OK;
b34f0f200ed0778053a2a1d93381c2c6b60cb2d5vboxsync }
b34f0f200ed0778053a2a1d93381c2c6b60cb2d5vboxsync
b34f0f200ed0778053a2a1d93381c2c6b60cb2d5vboxsync STDMETHOD(OnUSBDeviceStateChange)(IUSBDevice *device, BOOL attached,
b34f0f200ed0778053a2a1d93381c2c6b60cb2d5vboxsync IVirtualBoxErrorInfo *message)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return S_OK;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync }
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync STDMETHOD(OnSharedFolderChange) (Scope_T aScope)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return S_OK;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync }
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync STDMETHOD(OnRuntimeError)(BOOL fatal, IN_BSTR id, IN_BSTR message)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return S_OK;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync }
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync STDMETHOD(OnCanShowWindow)(BOOL *canShow)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync if (canShow)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync *canShow = TRUE;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return S_OK;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync }
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync STDMETHOD(OnShowWindow)(ULONG64 *winId)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync {
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync if (winId)
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync *winId = 0;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync return S_OK;
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync }
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync // IDisplay properties
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync STDMETHOD(COMGETTER(Width)) (ULONG *width);
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync STDMETHOD(COMGETTER(Height)) (ULONG *height);
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync STDMETHOD(COMGETTER(BitsPerPixel)) (ULONG *bitsPerPixel);
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync // IDisplay methods
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync STDMETHOD(SetFramebuffer)(ULONG aScreenId, IFramebuffer *aFramebuffer);
727cf0d6c794dffee1023d2bbb6e94eda7f35ca9vboxsync STDMETHOD(GetFramebuffer)(ULONG aScreenId, IFramebuffer **aFramebuffer, LONG *aXOrigin, LONG *aYOrigin);
STDMETHOD(SetVideoModeHint)(ULONG width, ULONG height, ULONG bitsPerPixel, ULONG display);
STDMETHOD(TakeScreenShot)(BYTE *address, ULONG width, ULONG height);
STDMETHOD(DrawToScreen)(BYTE *address, ULONG x, ULONG y, ULONG width, ULONG height);
STDMETHOD(InvalidateAndUpdate)();
STDMETHOD(ResizeCompleted)(ULONG aScreenId);
STDMETHOD(UpdateCompleted)();
STDMETHOD(SetSeamlessMode)(BOOL enabled);
STDMETHOD(CompleteVHWACommand)(BYTE *pCommand);
// for VirtualBoxSupportErrorInfoImpl
static const wchar_t *getComponentName() { return L"Display"; }
static const PDMDRVREG DrvReg;
private:
void updateDisplayData (bool aCheckParams = false);
static DECLCALLBACK(int) changeFramebuffer (Display *that, IFramebuffer *aFB,
unsigned uScreenId);
static DECLCALLBACK(void*) drvQueryInterface(PPDMIBASE pInterface, PDMINTERFACE enmInterface);
static DECLCALLBACK(int) drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHandle);
static DECLCALLBACK(void) drvDestruct(PPDMDRVINS pDrvIns);
static DECLCALLBACK(int) displayResizeCallback(PPDMIDISPLAYCONNECTOR pInterface, uint32_t bpp, void *pvVRAM, uint32_t cbLine, uint32_t cx, uint32_t cy);
static DECLCALLBACK(void) displayUpdateCallback(PPDMIDISPLAYCONNECTOR pInterface,
uint32_t x, uint32_t y, uint32_t cx, uint32_t cy);
static DECLCALLBACK(void) displayRefreshCallback(PPDMIDISPLAYCONNECTOR pInterface);
static DECLCALLBACK(void) displayResetCallback(PPDMIDISPLAYCONNECTOR pInterface);
static DECLCALLBACK(void) displayLFBModeChangeCallback(PPDMIDISPLAYCONNECTOR pInterface, bool fEnabled);
static DECLCALLBACK(void) displayProcessAdapterDataCallback(PPDMIDISPLAYCONNECTOR pInterface, void *pvVRAM, uint32_t u32VRAMSize);
static DECLCALLBACK(void) displayProcessDisplayDataCallback(PPDMIDISPLAYCONNECTOR pInterface, void *pvVRAM, unsigned uScreenId);
#ifdef VBOX_WITH_VIDEOHWACCEL
static DECLCALLBACK(void) displayVHWACommandProcess(PPDMIDISPLAYCONNECTOR pInterface, PVBOXVHWACMD pCommand);
#endif
static DECLCALLBACK(void) displaySSMSave (PSSMHANDLE pSSM, void *pvUser);
static DECLCALLBACK(int) displaySSMLoad (PSSMHANDLE pSSM, void *pvUser, uint32_t u32Version);
const ComObjPtr <Console, ComWeakRef> mParent;
/** Pointer to the associated display driver. */
struct DRVMAINDISPLAY *mpDrv;
/** Pointer to the device instance for the VMM Device. */
PPDMDEVINS mpVMMDev;
/** Set after the first attempt to find the VMM Device. */
bool mfVMMDevInited;
unsigned mcMonitors;
DISPLAYFBINFO maFramebuffers[SchemaDefs::MaxGuestMonitors];
bool mFramebufferOpened;
/* arguments of the last handleDisplayResize() call */
void *mLastAddress;
uint32_t mLastBytesPerLine;
uint32_t mLastBitsPerPixel;
int mLastWidth;
int mLastHeight;
VBVAMEMORY *mpVbvaMemory;
bool mfVideoAccelEnabled;
bool mfVideoAccelVRDP;
uint32_t mfu32SupportedOrders;
int32_t volatile mcVideoAccelVRDPRefs;
VBVAMEMORY *mpPendingVbvaMemory;
bool mfPendingVideoAccelEnable;
bool mfMachineRunning;
uint8_t *mpu8VbvaPartial;
uint32_t mcbVbvaPartial;
bool vbvaFetchCmd (VBVACMDHDR **ppHdr, uint32_t *pcbCmd);
void vbvaReleaseCmd (VBVACMDHDR *pHdr, int32_t cbCmd);
void handleResizeCompletedEMT (void);
};
#endif // ____H_DISPLAYIMPL
/* vi: set tabstop=4 shiftwidth=4 expandtab: */