VirtualBox

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

Last change on this file since 44093 was 42248, checked in by vboxsync, 12 years ago

API change for SetVideoModeHint to be able to disable guest screens and to set the origin of guest screens

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.0 KB
Line 
1/* $Id: DisplayImpl.h 42248 2012-07-20 08:39:45Z vboxsync $ */
2/** @file
3 * VBox frontends: Basic Frontend (BFE):
4 * Declaration of Display class
5 */
6
7/*
8 * Copyright (C) 2006-2007 Oracle Corporation
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 (GPL) as published by the Free Software
14 * Foundation, in version 2 as it comes in the "COPYING" file of the
15 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17 */
18
19#ifndef ____H_DISPLAYIMPL
20#define ____H_DISPLAYIMPL
21
22#include <iprt/semaphore.h>
23#include <VBox/vmm/pdm.h>
24
25#include "Framebuffer.h"
26struct VBVACMDHDR;
27
28class Display
29{
30
31public:
32
33 Display();
34 ~Display();
35
36 // public methods only for internal purposes
37 int handleDisplayResize (int w, int h);
38 void handleDisplayUpdate (int x, int y, int cx, int cy);
39
40 int VideoAccelEnable (bool fEnable, struct VBVAMEMORY *pVbvaMemory);
41 void VideoAccelFlush (void);
42 bool VideoAccelAllowed (void);
43
44 void updatePointerShape(bool fVisible, bool fAlpha, uint32_t xHot, uint32_t yHot, uint32_t width, uint32_t height, void *pShape);
45 void SetVideoModeHint(ULONG aDisplay, BOOL aEnabled, BOOL aChangeOrigin, LONG aOriginX, LONG aOriginY, ULONG aWidth, ULONG aHeight, ULONG aBitsPerPixel);
46
47 static const PDMDRVREG DrvReg;
48
49 uint32_t getWidth();
50 uint32_t getHeight();
51 uint32_t getBitsPerPixel();
52
53 STDMETHODIMP SetFramebuffer(unsigned iScreenID, Framebuffer *Framebuffer);
54 STDMETHODIMP InvalidateAndUpdate();
55 STDMETHODIMP ResizeCompleted();
56 STDMETHODIMP GetScreenResolution(ULONG aScreenId, ULONG *aWidth, ULONG *aHeight, ULONG *aBitsPerPixel);
57 void getFramebufferDimensions(int32_t *px1, int32_t *py1, int32_t *px2,
58 int32_t *py2);
59
60 void resetFramebuffer();
61
62 void setRunning(void) { mfMachineRunning = true; };
63
64
65private:
66
67 void updateDisplayData();
68
69 static DECLCALLBACK(void*) drvQueryInterface(PPDMIBASE pInterface, const char *pszIID);
70 static DECLCALLBACK(int) drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags);
71 static DECLCALLBACK(int) displayResizeCallback(PPDMIDISPLAYCONNECTOR pInterface, uint32_t bpp, void *pvVRAM, uint32_t cbLine, uint32_t cx, uint32_t cy);
72 static DECLCALLBACK(void) displayUpdateCallback(PPDMIDISPLAYCONNECTOR pInterface,
73 uint32_t x, uint32_t y, uint32_t cx, uint32_t cy);
74 static DECLCALLBACK(void) displayRefreshCallback(PPDMIDISPLAYCONNECTOR pInterface);
75 static DECLCALLBACK(void) displayResetCallback(PPDMIDISPLAYCONNECTOR pInterface);
76 static DECLCALLBACK(void) displayLFBModeChangeCallback(PPDMIDISPLAYCONNECTOR pInterface, bool fEnabled);
77 static DECLCALLBACK(void) displayProcessAdapterDataCallback(PPDMIDISPLAYCONNECTOR pInterface, void *pvVRAM, uint32_t u32VRAMSize);
78 static DECLCALLBACK(void) displayProcessDisplayDataCallback(PPDMIDISPLAYCONNECTOR pInterface, void *pvVRAM, unsigned uScreenId);
79
80 static DECLCALLBACK(void) doInvalidateAndUpdate(struct DRVMAINDISPLAY *mpDrv);
81 /** Pointer to the associated display driver. */
82 struct DRVMAINDISPLAY *mpDrv;
83
84 Framebuffer *mFramebuffer;
85 bool mFramebufferOpened;
86
87 ULONG mSupportedAccelOps;
88
89 struct VBVAMEMORY *mpVbvaMemory;
90 bool mfVideoAccelEnabled;
91
92 struct VBVAMEMORY *mpPendingVbvaMemory;
93 bool mfPendingVideoAccelEnable;
94 bool mfMachineRunning;
95
96 uint8_t *mpu8VbvaPartial;
97 uint32_t mcbVbvaPartial;
98
99 bool vbvaFetchCmd (struct VBVACMDHDR **ppHdr, uint32_t *pcbCmd);
100 void vbvaReleaseCmd (struct VBVACMDHDR *pHdr, int32_t cbCmd);
101
102 void handleResizeCompletedEMT (void);
103 volatile uint32_t mu32ResizeStatus;
104
105 enum {
106 ResizeStatus_Void,
107 ResizeStatus_InProgress,
108 ResizeStatus_UpdateDisplayData
109 };
110};
111
112extern Display *gDisplay;
113
114#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