[Spice-devel] [PATCH win-agent 9/9] Resize to arbitrary resolution
Arnon Gilboa
agilboa at redhat.com
Sun May 13 03:58:11 PDT 2012
Alon Levy wrote:
> On Fri, May 11, 2012 at 06:39:18PM +0200, Marc-André Lureau wrote:
>
>> Use QXL_ESCAPE_SET_CUSTOM_DISPLAY to update custom mode,
>> and switch to it.
>> ---
>> vdagent/desktop_layout.cpp | 26 ++++++++++++++++++++++++++
>> 1 file changed, 26 insertions(+)
>>
>> diff --git a/vdagent/desktop_layout.cpp b/vdagent/desktop_layout.cpp
>> index 6e255fc..7564cf6 100644
>> --- a/vdagent/desktop_layout.cpp
>> +++ b/vdagent/desktop_layout.cpp
>> @@ -15,6 +15,7 @@
>> along with this program. If not, see <http://www.gnu.org/licenses/>.
>> */
>>
>> +#include <spice/qxl_windows.h>
>> #include "desktop_layout.h"
>> #include "vdlog.h"
>>
>> @@ -240,6 +241,8 @@ bool DesktopLayout::init_dev_mode(LPCTSTR dev_name, DEVMODE* dev_mode, DisplayMo
>> {
>> DWORD closest_diff = -1;
>> DWORD best = -1;
>> + QXLEscapeSetCustomDisplay custom;
>> + HDC hdc = NULL;
>>
>> ZeroMemory(dev_mode, sizeof(DEVMODE));
>> dev_mode->dmSize = sizeof(DEVMODE);
>> @@ -248,6 +251,29 @@ bool DesktopLayout::init_dev_mode(LPCTSTR dev_name, DEVMODE* dev_mode, DisplayMo
>> dev_mode->dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_POSITION;
>> return true;
>> }
>> +
>> + // Update custom resolution
>> + custom.xres = mode->_width;
>> + custom.yres = mode->_height;
>> + custom.bpp = mode->_depth;
>> + hdc = CreateDC(dev_name, NULL, NULL, NULL);
>> + if (!hdc) {
>> + vd_printf("failed to create DC: %s", dev_name);
>> + } else {
>> + int err = ExtEscape(hdc, QXL_ESCAPE_SET_CUSTOM_DISPLAY,
>> + sizeof(QXLEscapeSetCustomDisplay), (LPCSTR)&custom, 0, NULL);
>> + if (err <= 0) {
>> + vd_printf("can't set custom display, perhaps an old driver");
>> + }
>> + DeleteDC(hdc);
>> + }
>> +
>> + // force refresh mode table
>> + DEVMODE tempDevMode;
>> + ZeroMemory(&tempDevMode, sizeof (tempDevMode));
>> + tempDevMode.dmSize = sizeof(DEVMODE);
>> + EnumDisplaySettings(dev_name, 0xffffff, &tempDevMode);
>>
>
> Missing comment for 0xffffff (you mention this is used to refresh the
> modes list earlier).
>
>
use ENUM_CURRENT_SETTINGS instead
>> +
>> //Find the closest size which will fit within the monitor
>> for (DWORD i = 0; EnumDisplaySettings(dev_name, i, dev_mode); i++) {
>> if (dev_mode->dmPelsWidth > mode->_width ||
>> --
>> 1.7.10.1
>>
>> _______________________________________________
>> Spice-devel mailing list
>> Spice-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>
More information about the Spice-devel
mailing list