VirtualBox

source: vbox/trunk/src/VBox/Main/include/DisplayImpl.h@ 3117

Last change on this file since 3117 was 3110, checked in by vboxsync, 18 years ago

Added the display index parameter to the SetVideoModeHint (in the guest all hints are still processed only for the primary monitor).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.7 KB
Line 
1/** @file
2 *
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2007 innotek GmbH
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License as published by the Free Software Foundation,
13 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
14 * distribution. VirtualBox OSE is distributed in the hope that it will
15 * be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * If you received this file as part of a commercial VirtualBox
18 * distribution, then only the terms of your commercial VirtualBox
19 * license agreement apply instead of the previous paragraph.
20 */
21
22#ifndef ____H_DISPLAYIMPL
23#define ____H_DISPLAYIMPL
24
25#include "VirtualBoxBase.h"
26#include <iprt/semaphore.h>
27#include <VBox/pdm.h>
28#include <VBox/VBoxGuest.h>
29
30class Console;
31
32class ATL_NO_VTABLE Display :
33 public IConsoleCallback,
34 public VirtualBoxSupportErrorInfoImpl <Display, IDisplay>,
35 public VirtualBoxSupportTranslation <Display>,
36 public VirtualBoxBase,
37 public IDisplay
38{
39
40public:
41
42 DECLARE_NOT_AGGREGATABLE(Display)
43
44 DECLARE_PROTECT_FINAL_CONSTRUCT()
45
46 BEGIN_COM_MAP(Display)
47 COM_INTERFACE_ENTRY(ISupportErrorInfo)
48 COM_INTERFACE_ENTRY(IDisplay)
49 END_COM_MAP()
50
51 NS_DECL_ISUPPORTS
52
53 HRESULT FinalConstruct();
54 void FinalRelease();
55
56 // public initializer/uninitializer for internal purposes only
57 HRESULT init (Console *parent);
58 void uninit();
59
60 // public methods only for internal purposes
61 int handleDisplayResize (uint32_t bpp, void *pvVRAM, uint32_t cbLine, int w, int h);
62 void handleDisplayUpdate (int x, int y, int cx, int cy);
63 IFramebuffer *getFramebuffer()
64 {
65 return mFramebuffer;
66 }
67
68 int VideoAccelEnable (bool fEnable, VBVAMEMORY *pVbvaMemory);
69 void VideoAccelFlush (void);
70
71 bool VideoAccelAllowed (void);
72
73#ifdef VBOX_VRDP
74#ifdef VRDP_MC
75 void VideoAccelVRDP (bool fEnable);
76#else
77 void VideoAccelVRDP (bool fEnable, uint32_t fu32SupportedOrders);
78#endif /* VRDP_MC */
79#endif /* VBOX_VRDP */
80
81 // IConsoleCallback methods
82 STDMETHOD(OnMousePointerShapeChange)(BOOL visible, BOOL alpha, ULONG xHot, ULONG yHot,
83 ULONG width, ULONG height, BYTE *shape)
84 {
85 return S_OK;
86 }
87
88 STDMETHOD(OnMouseCapabilityChange)(BOOL supportsAbsolute, BOOL needsHostCursor)
89 {
90 return S_OK;
91 }
92
93 STDMETHOD(OnStateChange)(MachineState_T machineState);
94
95 STDMETHOD(OnAdditionsStateChange)()
96 {
97 return S_OK;
98 }
99
100 STDMETHOD(OnKeyboardLedsChange)(BOOL fNumLock, BOOL fCapsLock, BOOL fScrollLock)
101 {
102 return S_OK;
103 }
104
105 STDMETHOD(OnUSBDeviceStateChange)(IUSBDevice *device, BOOL attached,
106 IVirtualBoxErrorInfo *message)
107 {
108 return S_OK;
109 }
110
111 STDMETHOD(OnRuntimeError)(BOOL fatal, INPTR BSTR id, INPTR BSTR message)
112 {
113 return S_OK;
114 }
115
116 STDMETHOD(OnCanShowWindow)(BOOL *canShow)
117 {
118 if (canShow)
119 *canShow = TRUE;
120 return S_OK;
121 }
122
123 STDMETHOD(OnShowWindow)(ULONG64 *winId)
124 {
125 if (winId)
126 *winId = 0;
127 return S_OK;
128 }
129
130 // IDisplay properties
131 STDMETHOD(COMGETTER(Width)) (ULONG *width);
132 STDMETHOD(COMGETTER(Height)) (ULONG *height);
133 STDMETHOD(COMGETTER(ColorDepth)) (ULONG *colorDepth);
134
135 // IDisplay methods
136 STDMETHOD(SetupInternalFramebuffer)(ULONG depth);
137 STDMETHOD(LockFramebuffer)(BYTE **address);
138 STDMETHOD(UnlockFramebuffer)();
139 STDMETHOD(RegisterExternalFramebuffer)(IFramebuffer *frameBuf);
140 STDMETHOD(SetVideoModeHint)(ULONG width, ULONG height, ULONG colorDepth, ULONG display);
141 STDMETHOD(TakeScreenShot)(BYTE *address, ULONG width, ULONG height);
142 STDMETHOD(DrawToScreen)(BYTE *address, ULONG x, ULONG y, ULONG width, ULONG height);
143 STDMETHOD(InvalidateAndUpdate)();
144 STDMETHOD(ResizeCompleted)();
145 STDMETHOD(UpdateCompleted)();
146
147 // for VirtualBoxSupportErrorInfoImpl
148 static const wchar_t *getComponentName() { return L"Display"; }
149
150 static const PDMDRVREG DrvReg;
151
152private:
153
154 void updateDisplayData (bool aCheckParams = false);
155
156 static DECLCALLBACK(int) changeFramebuffer (Display *that, IFramebuffer *aFB,
157 bool aInternal);
158
159 static DECLCALLBACK(void*) drvQueryInterface(PPDMIBASE pInterface, PDMINTERFACE enmInterface);
160 static DECLCALLBACK(int) drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHandle);
161 static DECLCALLBACK(void) drvDestruct(PPDMDRVINS pDrvIns);
162 static DECLCALLBACK(int) displayResizeCallback(PPDMIDISPLAYCONNECTOR pInterface, uint32_t bpp, void *pvVRAM, uint32_t cbLine, uint32_t cx, uint32_t cy);
163 static DECLCALLBACK(void) displayUpdateCallback(PPDMIDISPLAYCONNECTOR pInterface,
164 uint32_t x, uint32_t y, uint32_t cx, uint32_t cy);
165 static DECLCALLBACK(void) displayRefreshCallback(PPDMIDISPLAYCONNECTOR pInterface);
166 static DECLCALLBACK(void) displayResetCallback(PPDMIDISPLAYCONNECTOR pInterface);
167 static DECLCALLBACK(void) displayLFBModeChangeCallback(PPDMIDISPLAYCONNECTOR pInterface, bool fEnabled);
168
169 ComObjPtr <Console, ComWeakRef> mParent;
170 /** Pointer to the associated display driver. */
171 struct DRVMAINDISPLAY *mpDrv;
172 /** Pointer to the device instance for the VMM Device. */
173 PPDMDEVINS mpVMMDev;
174 /** Set after the first attempt to find the VMM Device. */
175 bool mfVMMDevInited;
176 bool mInternalFramebuffer;
177 ComPtr<IFramebuffer> mFramebuffer;
178 bool mFramebufferOpened;
179 /** bitmask of acceleration operations supported by current framebuffer */
180 ULONG mSupportedAccelOps;
181 RTSEMEVENTMULTI mUpdateSem;
182
183 /* arguments of the last handleDisplayResize() call */
184 void *mLastAddress;
185 uint32_t mLastLineSize;
186 uint32_t mLastColorDepth;
187 int mLastWidth;
188 int mLastHeight;
189
190 VBVAMEMORY *mpVbvaMemory;
191 bool mfVideoAccelEnabled;
192 bool mfVideoAccelVRDP;
193 uint32_t mfu32SupportedOrders;
194
195 int32_t volatile mcVideoAccelVRDPRefs;
196
197 VBVAMEMORY *mpPendingVbvaMemory;
198 bool mfPendingVideoAccelEnable;
199 bool mfMachineRunning;
200
201 uint8_t *mpu8VbvaPartial;
202 uint32_t mcbVbvaPartial;
203
204 bool vbvaFetchCmd (VBVACMDHDR **ppHdr, uint32_t *pcbCmd);
205 void vbvaReleaseCmd (VBVACMDHDR *pHdr, int32_t cbCmd);
206
207 void handleResizeCompletedEMT (void);
208 volatile uint32_t mu32ResizeStatus;
209
210 enum {
211 ResizeStatus_Void,
212 ResizeStatus_InProgress,
213 ResizeStatus_UpdateDisplayData
214 };
215};
216
217#endif // ____H_DISPLAYIMPL
Note: See TracBrowser for help on using the repository browser.

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