VirtualBox

source: vbox/trunk/src/VBox/Frontends/VBoxBFE/DisplayImpl.h@ 3702

Last change on this file since 3702 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: 3.6 KB
Line 
1/** @file
2 *
3 * VBox frontends: Basic Frontend (BFE):
4 * Declaration of VMDisplay class
5 */
6
7/*
8 * Copyright (C) 2006-2007 innotek GmbH
9 *
10 * This file is part of VirtualBox Open Source Edition (OSE), as
11 * available from http://www.virtualbox.org. This file is free software;
12 * you can redistribute it and/or modify it under the terms of the GNU
13 * General Public License as published by the Free Software Foundation,
14 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
15 * distribution. VirtualBox OSE is distributed in the hope that it will
16 * be useful, but WITHOUT ANY WARRANTY of any kind.
17 *
18 * If you received this file as part of a commercial VirtualBox
19 * distribution, then only the terms of your commercial VirtualBox
20 * license agreement apply instead of the previous paragraph.
21 */
22
23#ifndef ____H_DISPLAYIMPL
24#define ____H_DISPLAYIMPL
25
26#include <iprt/semaphore.h>
27#include <VBox/pdm.h>
28
29#include "Framebuffer.h"
30struct _VBVACMDHDR;
31
32class VMDisplay
33{
34
35public:
36
37 VMDisplay();
38 ~VMDisplay();
39
40 // public methods only for internal purposes
41 int handleDisplayResize (int w, int h);
42 void handleDisplayUpdate (int x, int y, int cx, int cy);
43
44 int VideoAccelEnable (bool fEnable, struct _VBVAMEMORY *pVbvaMemory);
45 void VideoAccelFlush (void);
46 bool VideoAccelAllowed (void);
47
48 void updatePointerShape(bool fVisible, bool fAlpha, uint32_t xHot, uint32_t yHot, uint32_t width, uint32_t height, void *pShape);
49 void SetVideoModeHint(ULONG aWidth, ULONG aHeight, ULONG aColorDepth, ULONG aDisplay);
50
51 static const PDMDRVREG DrvReg;
52
53 uint32_t getWidth();
54 uint32_t getHeight();
55 uint32_t getColorDepth();
56
57 STDMETHODIMP RegisterExternalFramebuffer(Framebuffer *Framebuffer);
58 STDMETHODIMP InvalidateAndUpdate();
59 STDMETHODIMP ResizeCompleted();
60
61 void resetFramebuffer();
62
63
64private:
65
66 void updateDisplayData();
67
68 static DECLCALLBACK(void*) drvQueryInterface(PPDMIBASE pInterface, PDMINTERFACE enmInterface);
69 static DECLCALLBACK(int) drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHandle);
70 static DECLCALLBACK(int) displayResizeCallback(PPDMIDISPLAYCONNECTOR pInterface, uint32_t bpp, void *pvVRAM, uint32_t cbLine, uint32_t cx, uint32_t cy);
71 static DECLCALLBACK(void) displayUpdateCallback(PPDMIDISPLAYCONNECTOR pInterface,
72 uint32_t x, uint32_t y, uint32_t cx, uint32_t cy);
73 static DECLCALLBACK(void) displayRefreshCallback(PPDMIDISPLAYCONNECTOR pInterface);
74 static DECLCALLBACK(void) displayResetCallback(PPDMIDISPLAYCONNECTOR pInterface);
75 static DECLCALLBACK(void) displayLFBModeChangeCallback(PPDMIDISPLAYCONNECTOR pInterface, bool fEnabled);
76
77 static DECLCALLBACK(void) doInvalidateAndUpdate(struct DRVMAINDISPLAY *mpDrv);
78 /** Pointer to the associated display driver. */
79 struct DRVMAINDISPLAY *mpDrv;
80
81 Framebuffer *mFramebuffer;
82 bool mInternalFramebuffer, mFramebufferOpened;
83
84 ULONG mSupportedAccelOps;
85 RTSEMEVENTMULTI mUpdateSem;
86
87 struct _VBVAMEMORY *mpVbvaMemory;
88 bool mfVideoAccelEnabled;
89
90 struct _VBVAMEMORY *mpPendingVbvaMemory;
91 bool mfPendingVideoAccelEnable;
92 bool mfMachineRunning;
93
94 uint8_t *mpu8VbvaPartial;
95 uint32_t mcbVbvaPartial;
96
97 bool vbvaFetchCmd (struct _VBVACMDHDR **ppHdr, uint32_t *pcbCmd);
98 void vbvaReleaseCmd (struct _VBVACMDHDR *pHdr, int32_t cbCmd);
99
100 void handleResizeCompletedEMT (void);
101 volatile uint32_t mu32ResizeStatus;
102
103 enum {
104 ResizeStatus_Void,
105 ResizeStatus_InProgress,
106 ResizeStatus_UpdateDisplayData
107 };
108};
109
110extern VMDisplay *gDisplay;
111
112#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