Changeset 84728 in vbox for trunk/src/VBox/Additions
- Timestamp:
- Jun 8, 2020 5:52:03 PM (5 years ago)
- Location:
- trunk/src/VBox/Additions/WINNT/VBoxTray
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.cpp
r84452 r84728 1773 1773 BOOL VBoxDispIfResizeDisplayWin7(PCVBOXDISPIF const pIf, uint32_t cDispDef, const VMMDevDisplayDef *paDispDef) 1774 1774 { 1775 const VMMDevDisplayDef *pDispDef;1775 const VMMDevDisplayDef *pDispDef; 1776 1776 uint32_t i; 1777 1777 … … 1798 1798 Size.cy = pDispDef->cy; 1799 1799 1800 vboxDispIfUpdateModesWDDM(&Op, pDispDef->idDisplay, &Size); 1800 winEr = vboxDispIfUpdateModesWDDM(&Op, pDispDef->idDisplay, &Size); 1801 if (winEr != ERROR_SUCCESS) 1802 break; 1801 1803 } 1802 1804 } 1803 1805 1804 1806 vboxDispIfOpEnd(&Op); 1807 1808 if (winEr != ERROR_SUCCESS) 1809 return (winEr == ERROR_SUCCESS); 1805 1810 1806 1811 VBOXDISPIF_WDDM_DISPCFG DispCfg; … … 2044 2049 } 2045 2050 2046 BOOL VBoxDispIfResizeDisplayVista(PCVBOXDISPIF const pIf, uint32_t cDispDef, const VMMDevDisplayDef *paDispDef)2047 {2048 const VMMDevDisplayDef* pDispDef;2049 VBOXDISPIF_OP Op;2050 DWORD winEr = ERROR_SUCCESS;2051 uint32_t id;2052 DISPLAY_DEVICE *paDisplayDevices;2053 DEVMODE *paDisplayModes;2054 RECTL *paRects;2055 DWORD DevNum = 0;2056 DWORD DevPrimaryNum = 0;2057 DWORD status;2058 DISPLAY_DEVICE *pDev;2059 DEVMODE *pMode;2060 DWORD cDisplays;2061 2062 // if (!pCtx->fAnyX)2063 // Width &= 0xFFF8;2064 2065 cDisplays = VBoxDisplayGetCount();2066 2067 paDisplayDevices = (DISPLAY_DEVICE *)alloca(sizeof(DISPLAY_DEVICE) * cDisplays);2068 paDisplayModes = (DEVMODE *)alloca(sizeof(DEVMODE) * cDisplays);2069 paRects = (RECTL *)alloca(sizeof(RECTL) * cDisplays);2070 2071 status = VBoxDisplayGetConfig(cDisplays, &DevPrimaryNum, &DevNum, paDisplayDevices, paDisplayModes);2072 if (status != NO_ERROR)2073 {2074 LogFlowFunc(("ResizeDisplayDevice: VBoxGetDisplayConfig failed, %d\n", status));2075 return FALSE;2076 }2077 2078 if (cDisplays != DevNum)2079 LogFlowFunc(("ResizeDisplayDevice: NumDevices(%d) != DevNum(%d)\n", cDisplays, DevNum));2080 2081 if (cDisplays != cDispDef)2082 {2083 LogFlowFunc(("ResizeDisplayDevice: cDisplays(%d) != cModeHints(%d)\n", cDisplays, cDispDef));2084 return FALSE;2085 }2086 2087 vboxDispIfOpBegin(pIf, &Op);2088 if (winEr != ERROR_SUCCESS)2089 {2090 WARN(("VBoxTray: vboxDispIfOpBegin failed winEr 0x%x", winEr));2091 return (winEr == ERROR_SUCCESS);2092 }2093 2094 for (id = 0; id < cDispDef; ++id)2095 {2096 pDispDef = &paDispDef[id];2097 2098 if (RT_BOOL(pDispDef->fDisplayFlags & VMMDEV_DISPLAY_DISABLED))2099 continue;2100 2101 if ( RT_BOOL(pDispDef->fDisplayFlags & VMMDEV_DISPLAY_CX)2102 && RT_BOOL(pDispDef->fDisplayFlags & VMMDEV_DISPLAY_CY))2103 {2104 RTRECTSIZE Size;2105 Size.cx = pDispDef->cx;2106 Size.cy = pDispDef->cy;2107 2108 vboxDispIfUpdateModesWDDM(&Op, id, &Size);2109 }2110 }2111 2112 vboxDispIfOpEnd(&Op);2113 2114 for (id = 0; id < cDispDef; id++)2115 {2116 DEVMODE tempDevMode;2117 2118 ZeroMemory (&tempDevMode, sizeof (tempDevMode));2119 tempDevMode.dmSize = sizeof(DEVMODE);2120 2121 EnumDisplaySettings((LPSTR)paDisplayDevices[id].DeviceName, 0xffffff, &tempDevMode);2122 }2123 2124 for (id = 0; id < cDispDef; ++id)2125 {2126 pDev = &paDisplayDevices[id];2127 pMode = &paDisplayModes[id];2128 pDispDef = &paDispDef[id];2129 2130 if (pDev->StateFlags & DISPLAY_DEVICE_ACTIVE)2131 {2132 if (!(pDispDef->fDisplayFlags & VMMDEV_DISPLAY_DISABLED))2133 {2134 pMode->dmFields = 0;2135 2136 if (pMode->dmPosition.x != pDispDef->xOrigin || pMode->dmPosition.y != pDispDef->yOrigin)2137 {2138 pMode->dmPosition.x = pDispDef->xOrigin;2139 pMode->dmPosition.y = pDispDef->yOrigin;2140 pMode->dmFields |= DM_POSITION;2141 }2142 2143 if (pMode->dmBitsPerPel != pDispDef->cBitsPerPixel)2144 {2145 pMode->dmBitsPerPel = pDispDef->cBitsPerPixel;2146 pMode->dmFields |= DM_BITSPERPEL;2147 }2148 2149 if (pMode->dmPelsWidth != pDispDef->cx)2150 {2151 pMode->dmPelsWidth = pDispDef->cx;2152 pMode->dmFields |= DM_PELSWIDTH;2153 }2154 2155 if (pMode->dmPelsHeight != pDispDef->cy)2156 {2157 pMode->dmPelsHeight = pDispDef->cy;2158 pMode->dmFields |= DM_PELSHEIGHT;2159 }2160 2161 if (pMode->dmFields)2162 status = pIf->modeData.wddm.pfnChangeDisplaySettingsEx((LPSTR)pDev->DeviceName, pMode, NULL, CDS_NORESET | CDS_UPDATEREGISTRY, NULL);2163 }2164 else2165 {2166 DEVMODE tmpDevMode;2167 2168 ZeroMemory(&tmpDevMode, sizeof(DEVMODE));2169 tmpDevMode.dmSize = sizeof(DEVMODE);2170 tmpDevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_POSITION | DM_DISPLAYFREQUENCY | DM_DISPLAYFLAGS;2171 2172 status = pIf->modeData.wddm.pfnChangeDisplaySettingsEx(pDev->DeviceName, &tmpDevMode, NULL, CDS_UPDATEREGISTRY | CDS_NORESET, NULL);2173 }2174 }2175 else2176 {2177 pMode->dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_POSITION | DM_DISPLAYFREQUENCY | DM_DISPLAYFLAGS;2178 2179 pMode->dmPosition.x = pDispDef->xOrigin;2180 pMode->dmPosition.y = pDispDef->yOrigin;2181 pMode->dmBitsPerPel = pDispDef->cBitsPerPixel;2182 pMode->dmPelsWidth = pDispDef->cx;2183 pMode->dmPelsHeight = pDispDef->cy;2184 2185 status = pIf->modeData.wddm.pfnChangeDisplaySettingsEx((LPSTR)pDev->DeviceName, pMode, NULL, CDS_NORESET | CDS_UPDATEREGISTRY, NULL);2186 }2187 }2188 2189 pIf->modeData.wddm.pfnChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL);2190 2191 return (winEr == ERROR_SUCCESS);2192 }2193 2194 2051 static DWORD vboxDispIfWddmResizeDisplay2(PCVBOXDISPIF const pIf, DISPLAY_DEVICE *paDisplayDevices, DEVMODE *paDeviceModes, UINT devModes) 2195 2052 { -
trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.h
r82968 r84728 89 89 90 90 BOOL VBoxDispIfResizeDisplayWin7(PCVBOXDISPIF const pIf, uint32_t cDispDef, const VMMDevDisplayDef *paDispDef); 91 BOOL VBoxDispIfResizeDisplayVista(PCVBOXDISPIF const pIf, uint32_t cDispDef, const VMMDevDisplayDef *paDispDef);92 91 93 92 typedef struct VBOXDISPIF_SEAMLESS
Note:
See TracChangeset
for help on using the changeset viewer.