UIMachineWindowScale.cpp revision 8bf8c6b1914c9e7e60b1547888400668f1774497
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync/* $Id$ */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync/** @file
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync *
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync * VBox frontends: Qt GUI ("VirtualBox"):
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync * UIMachineWindowScale class implementation
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync */
c58f1213e628a545081c70e26c6b67a841cff880vboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync/*
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync * Copyright (C) 2010-2012 Oracle Corporation
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync *
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync * available from http://www.virtualbox.org. This file is free software;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync * you can redistribute it and/or modify it under the terms of the GNU
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync * General Public License (GPL) as published by the Free Software
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync/* Qt includes: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#include <QDesktopWidget>
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#include <QMenu>
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#include <QTimer>
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#include <QSpacerItem>
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#include <QResizeEvent>
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#ifdef Q_WS_MAC
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync# include <QMenuBar>
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#endif /* Q_WS_MAC */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync/* GUI includes: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#include "UISession.h"
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#include "UIMachineLogic.h"
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#include "UIMachineWindowScale.h"
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#ifdef Q_WS_WIN
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync# include "UIMachineView.h"
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#endif /* Q_WS_WIN */
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync#ifdef Q_WS_MAC
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync# include "VBoxUtils.h"
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync# include "VBoxGlobal.h"
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync# include "UIImageTools.h"
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#endif /* Q_WS_MAC */
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync/* COM includes: */
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync#include "CMachine.h"
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync
8c445fc3caadda324a8225aeff14e69d576d9122vboxsyncUIMachineWindowScale::UIMachineWindowScale(UIMachineLogic *pMachineLogic, ulong uScreenId)
8c445fc3caadda324a8225aeff14e69d576d9122vboxsync : UIMachineWindow(pMachineLogic, uScreenId)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync , m_pMainMenu(0)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync{
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync}
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsyncvoid UIMachineWindowScale::sltPopupMainMenu()
8c445fc3caadda324a8225aeff14e69d576d9122vboxsync{
8c445fc3caadda324a8225aeff14e69d576d9122vboxsync /* Popup main-menu if present: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (m_pMainMenu && !m_pMainMenu->isEmpty())
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
943753b96ed892c047b92ff6eb00bb100de8d6d2vboxsync m_pMainMenu->popup(geometry().center());
943753b96ed892c047b92ff6eb00bb100de8d6d2vboxsync QTimer::singleShot(0, m_pMainMenu, SLOT(sltSelectFirstAction()));
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync }
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync}
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsyncvoid UIMachineWindowScale::prepareMainLayout()
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync{
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Call to base-class: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync UIMachineWindow::prepareMainLayout();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Strict spacers to hide them, they are not necessary for scale-mode: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync m_pTopSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync m_pBottomSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync m_pLeftSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync m_pRightSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync}
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsyncvoid UIMachineWindowScale::prepareMenu()
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync{
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Call to base-class: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync UIMachineWindow::prepareMenu();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#ifdef Q_WS_MAC
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync setMenuBar(uisession()->newMenuBar());
94d8af34a7773eba6a53e3dcbf2b363a6639d867vboxsync#endif /* Q_WS_MAC */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync m_pMainMenu = uisession()->newMenu();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync}
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#ifdef Q_WS_MAC
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsyncvoid UIMachineWindowScale::prepareVisualState()
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync{
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Call to base-class: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync UIMachineWindow::prepareVisualState();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Install the resize delegate for keeping the aspect ratio. */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync ::darwinInstallResizeDelegate(this);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Beta label? */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (vboxGlobal().isBeta())
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync QPixmap betaLabel = ::betaLabel(QSize(100, 16));
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync ::darwinLabelWindow(this, &betaLabel, true);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync }
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync}
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#endif /* Q_WS_MAC */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsyncvoid UIMachineWindowScale::loadSettings()
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync{
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Call to base-class: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync UIMachineWindow::loadSettings();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Load scale window settings: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync CMachine m = machine();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Load extra-data settings: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync QString strPositionAddress = m_uScreenId == 0 ? QString("%1").arg(VBoxDefs::GUI_LastScaleWindowPosition) :
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync QString("%1%2").arg(VBoxDefs::GUI_LastScaleWindowPosition).arg(m_uScreenId);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync QStringList strPositionSettings = m.GetExtraDataStringList(strPositionAddress);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync bool ok = !strPositionSettings.isEmpty(), max = false;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync int x = 0, y = 0, w = 0, h = 0;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (ok && strPositionSettings.size() > 0)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync x = strPositionSettings[0].toInt(&ok);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync else ok = false;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (ok && strPositionSettings.size() > 1)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync y = strPositionSettings[1].toInt(&ok);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync else ok = false;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (ok && strPositionSettings.size() > 2)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync w = strPositionSettings[2].toInt(&ok);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync else ok = false;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (ok && strPositionSettings.size() > 3)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync h = strPositionSettings[3].toInt(&ok);
8c445fc3caadda324a8225aeff14e69d576d9122vboxsync else ok = false;
8c445fc3caadda324a8225aeff14e69d576d9122vboxsync if (ok && strPositionSettings.size() > 4)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync max = strPositionSettings[4] == VBoxDefs::GUI_LastWindowState_Max;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync QRect ar = ok ? QApplication::desktop()->availableGeometry(QPoint(x, y)) :
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync QApplication::desktop()->availableGeometry(this);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* If previous parameters were read correctly: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (ok)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Restore window size and position: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync m_normalGeometry = QRect(x, y, w, h);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync setGeometry(m_normalGeometry);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Maximize if needed: */
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync if (max)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync setWindowState(windowState() | Qt::WindowMaximized);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync }
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync else
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Resize to default size: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync resize(640, 480);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync qApp->processEvents();
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync /* Move newly created window to the screen center: */
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync m_normalGeometry = geometry();
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync m_normalGeometry.moveCenter(ar.center());
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync setGeometry(m_normalGeometry);
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync }
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync }
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync}
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync
dc077b46399b3ef751ebd282053f0e9725518e1evboxsyncvoid UIMachineWindowScale::saveSettings()
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync{
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync /* Get machine: */
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync CMachine m = machine();
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync /* Save extra-data settings: */
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync {
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync QString strWindowPosition = QString("%1,%2,%3,%4")
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync .arg(m_normalGeometry.x()).arg(m_normalGeometry.y())
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync .arg(m_normalGeometry.width()).arg(m_normalGeometry.height());
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync if (isMaximizedChecked())
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync strWindowPosition += QString(",%1").arg(VBoxDefs::GUI_LastWindowState_Max);
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync QString strPositionAddress = m_uScreenId == 0 ? QString("%1").arg(VBoxDefs::GUI_LastScaleWindowPosition) :
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync QString("%1%2").arg(VBoxDefs::GUI_LastScaleWindowPosition).arg(m_uScreenId);
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync m.SetExtraData(strPositionAddress, strWindowPosition);
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync }
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync
dc077b46399b3ef751ebd282053f0e9725518e1evboxsync /* Call to base-class: */
18241d54e51ea1bf7390d5ca6eea3d3a88a2f9bcvboxsync UIMachineWindow::saveSettings();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync}
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#ifdef Q_WS_MAC
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsyncvoid UIMachineWindowScale::cleanupVisualState()
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync{
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Uninstall the resize delegate for keeping the aspect ratio. */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync ::darwinUninstallResizeDelegate(this);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Call to base-class: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync UIMachineWindow::cleanupVisualState();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync}
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#endif /* Q_WS_MAC */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
395d92a7732aad3c0b9baecedfabba5113b84485vboxsyncvoid UIMachineWindowScale::cleanupMenu()
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync{
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Cleanup menu: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync delete m_pMainMenu;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync m_pMainMenu = 0;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Call to base-class: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync UIMachineWindow::cleanupMenu();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync}
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsyncvoid UIMachineWindowScale::showInNecessaryMode()
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync{
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Show window if we have to: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (uisession()->isScreenVisible(m_uScreenId))
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync show();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Else hide window: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync else
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync hide();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync}
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
395d92a7732aad3c0b9baecedfabba5113b84485vboxsyncbool UIMachineWindowScale::event(QEvent *pEvent)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync{
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync switch (pEvent->type())
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync case QEvent::Resize:
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync QResizeEvent *pResizeEvent = static_cast<QResizeEvent*>(pEvent);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (!isMaximizedChecked())
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync m_normalGeometry.setSize(pResizeEvent->size());
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#ifdef VBOX_WITH_DEBUGGER_GUI
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Update debugger window position: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync updateDbgWindows();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#endif /* VBOX_WITH_DEBUGGER_GUI */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync }
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync break;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync }
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync case QEvent::Move:
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (!isMaximizedChecked())
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync m_normalGeometry.moveTo(geometry().x(), geometry().y());
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#ifdef VBOX_WITH_DEBUGGER_GUI
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Update debugger window position: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync updateDbgWindows();
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#endif /* VBOX_WITH_DEBUGGER_GUI */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync }
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync break;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync }
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync default:
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync break;
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync }
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync return UIMachineWindow::event(pEvent);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync}
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync#ifdef Q_WS_WIN
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsyncbool UIMachineWindowScale::winEvent(MSG *pMessage, long *pResult)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync{
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync /* Try to keep aspect ratio during window resize if:
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync * 1. machine view exists and 2. event-type is WM_SIZING and 3. shift key is NOT pressed: */
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (machineView() && pMessage->message == WM_SIZING && !(QApplication::keyboardModifiers() & Qt::ShiftModifier))
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync if (double dAspectRatio = machineView()->aspectRatio())
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync RECT *pRect = reinterpret_cast<RECT*>(pMessage->lParam);
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync switch (pMessage->wParam)
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync case WMSZ_LEFT:
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync case WMSZ_RIGHT:
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync {
73bef7f249418907cb1dc8dce51319772a3dbeeevboxsync pRect->bottom = pRect->top + (double)(pRect->right - pRect->left) / dAspectRatio;
break;
}
case WMSZ_TOP:
case WMSZ_BOTTOM:
{
pRect->right = pRect->left + (double)(pRect->bottom - pRect->top) * dAspectRatio;
break;
}
case WMSZ_BOTTOMLEFT:
case WMSZ_BOTTOMRIGHT:
{
pRect->bottom = pRect->top + (double)(pRect->right - pRect->left) / dAspectRatio;
break;
}
case WMSZ_TOPLEFT:
case WMSZ_TOPRIGHT:
{
pRect->top = pRect->bottom - (double)(pRect->right - pRect->left) / dAspectRatio;
break;
}
default:
break;
}
}
}
/* Call to base-class: */
return UIMachineWindow::winEvent(pMessage, pResult);
}
#endif /* Q_WS_WIN */
bool UIMachineWindowScale::isMaximizedChecked()
{
#ifdef Q_WS_MAC
/* On the Mac the WindowStateChange signal doesn't seems to be delivered
* when the user get out of the maximized state. So check this ourself. */
return ::darwinIsWindowMaximized(this);
#else /* Q_WS_MAC */
return isMaximized();
#endif /* !Q_WS_MAC */
}