QSize UIMachineViewScale::calculateMaxGuestSize() const { /* 1) The calculation below is not reliable on some (X11) platforms until we * have been visible for a fraction of a second, so so the best we can * otherwise. * 2) We also get called early before "machineWindow" has been fully * initialised, at which time we can't perform the calculation. */ if (!isVisible()) return workingArea().size() * 0.95; /* The area taken up by the machine window on the desktop, including window * frame, title, menu bar and status bar. */ QSize windowSize = machineWindow()->frameGeometry().size(); /* The window shouldn't be allowed to expand beyond the working area * unless it already does. In that case the guest shouldn't expand it * any further though. */ QSize maximumSize = workingArea().size().expandedTo(windowSize); /* The current size of the machine display. */ QSize centralWidgetSize = machineWindow()->centralWidget()->size(); /* To work out how big the guest display can get without the window going * over the maximum size we calculated above, we work out how much space * the other parts of the window (frame, menu bar, status bar and so on) * take up and subtract that space from the maximum window size. The * central widget shouldn't be bigger than the window, but we bound it for * sanity (or insanity) reasons. */ return maximumSize - (windowSize - centralWidgetSize.boundedTo(windowSize)); }
void UIMachineViewSeamless::normalizeGeometry(bool /* fAdjustPosition */) { /* Check if we should adjust guest to new size: */ if ((int)frameBuffer()->width() != workingArea().size().width() || (int)frameBuffer()->height() != workingArea().size().height()) if (uisession()->isGuestSupportsGraphics()) sltPerformGuestResize(workingArea().size()); }
void UIMachineViewFullscreen::sltAdditionsStateChanged() { /* Check if we should restrict minimum size: */ maybeRestrictMinimumSize(); /* Check if we should resize guest to fullscreen */ if ((int)frameBuffer()->width() != workingArea().size().width() || (int)frameBuffer()->height() != workingArea().size().height()) if (m_bIsGuestAutoresizeEnabled && uisession()->isGuestSupportsGraphics()) sltPerformGuestResize(workingArea().size()); }
void UIMachineViewFullscreen::sltAdditionsStateChanged() { /* Check if we should restrict minimum size: */ maybeRestrictMinimumSize(); /* Check if we should resize guest to fullscreen, all the * required features will be tested in sltPerformGuestResize(...): */ if ((int)frameBuffer()->width() != workingArea().size().width() || (int)frameBuffer()->height() != workingArea().size().height()) sltPerformGuestResize(workingArea().size()); }
bool UIMachineViewSeamless::eventFilter(QObject *pWatched, QEvent *pEvent) { if (pWatched != 0 && pWatched == machineWindow()) { switch (pEvent->type()) { case QEvent::Resize: { /* Send guest-resize hint only if top window resizing to required dimension: */ QResizeEvent *pResizeEvent = static_cast<QResizeEvent*>(pEvent); if (pResizeEvent->size() != workingArea().size()) break; /* Recalculate max guest size: */ setMaxGuestSize(); /* And resize guest to that size: */ if (uisession()->isGuestSupportsGraphics()) QTimer::singleShot(0, this, SLOT(sltPerformGuestResize())); break; } default: break; } } return UIMachineView::eventFilter(pWatched, pEvent); }
bool UIMachineViewFullscreen::eventFilter(QObject *pWatched, QEvent *pEvent) { /* Who are we watching? */ QMainWindow *pMainDialog = machineWindowWrapper() && machineWindowWrapper()->machineWindow() ? qobject_cast<QMainWindow*>(machineWindowWrapper()->machineWindow()) : 0; if (pWatched != 0 && pWatched == pMainDialog) { switch (pEvent->type()) { case QEvent::Resize: { /* Send guest-resize hint only if top window resizing to required dimension: */ QResizeEvent *pResizeEvent = static_cast<QResizeEvent*>(pEvent); if (pResizeEvent->size() != workingArea().size()) break; /* Set the "guest needs to resize" hint. * This hint is acted upon when (and only when) the autoresize property is "true": */ m_fShouldWeDoResize = uisession()->isGuestSupportsGraphics(); if (m_bIsGuestAutoresizeEnabled && m_fShouldWeDoResize) QTimer::singleShot(0, this, SLOT(sltPerformGuestResize())); break; } default: break; } } return UIMachineView::eventFilter(pWatched, pEvent); }
void UIMachineViewFullscreen::calculateDesktopGeometry() { /* This method should not get called until we have initially set up the desktop geometry type: */ Assert((desktopGeometryType() != DesktopGeo_Invalid)); /* If we are not doing automatic geometry calculation then there is nothing to do: */ if (desktopGeometryType() == DesktopGeo_Automatic) m_desktopGeometry = workingArea().size(); }
void UIMachineViewSeamless::adjustGuestScreenSize() { /* Acquire working-area size: */ const QSize workingAreaSize = workingArea().size(); /* Acquire frame-buffer size: */ QSize frameBufferSize(frameBuffer()->width(), frameBuffer()->height()); /* Take the scale-factor(s) into account: */ frameBufferSize = scaledForward(frameBufferSize); /* Check if we should adjust guest-screen to new size: */ if (frameBuffer()->isAutoEnabled() || frameBufferSize != workingAreaSize) if (uisession()->isGuestSupportsGraphics() && uisession()->isScreenVisible(screenId())) { frameBuffer()->setAutoEnabled(false); sltPerformGuestResize(workingArea().size()); } }
void UIMachineViewScale::calculateDesktopGeometry() { /* This method should not get called until we have initially set up the desktop geometry type: */ Assert((desktopGeometryType() != DesktopGeo_Invalid)); /* If we are not doing automatic geometry calculation then there is nothing to do: */ if (desktopGeometryType() == DesktopGeo_Automatic) { /* The area taken up by the machine window on the desktop, * including window frame, title, menu bar and status bar: */ QRect windowGeo = machineWindowWrapper()->machineWindow()->frameGeometry(); /* The area taken up by the machine central widget, so excluding all decorations: */ QRect centralWidgetGeo = static_cast<QMainWindow*>(machineWindowWrapper()->machineWindow())->centralWidget()->geometry(); /* To work out how big we can make the console window while still fitting on the desktop, * we calculate workingArea() - (windowGeo - centralWidgetGeo). * This works because the difference between machine window and machine central widget * (or at least its width and height) is a constant. */ m_desktopGeometry = QSize(workingArea().width() - (windowGeo.width() - centralWidgetGeo.width()), workingArea().height() - (windowGeo.height() - centralWidgetGeo.height())); } }
QSize UIMachineViewNormal::calculateMaxGuestSize() const { /* The area taken up by the machine window on the desktop, including window * frame, title, menu bar and status bar. */ QSize windowSize = machineWindow()->frameGeometry().size(); /* The window shouldn't be allowed to expand beyond the working area * unless it already does. In that case the guest shouldn't expand it * any further though. */ QSize maximumSize = workingArea().size().expandedTo(windowSize); /* The current size of the machine display. */ QSize centralWidgetSize = machineWindow()->centralWidget()->size(); /* To work out how big the guest display can get without the window going * over the maximum size we calculated above, we work out how much space * the other parts of the window (frame, menu bar, status bar and so on) * take up and subtract that space from the maximum window size. The * central widget shouldn't be bigger than the window, but we bound it for * sanity (or insanity) reasons. */ return maximumSize - (windowSize - centralWidgetSize.boundedTo(windowSize)); }
bool UIMachineViewFullscreen::eventFilter(QObject *pWatched, QEvent *pEvent) { if (pWatched != 0 && pWatched == machineWindow()) { switch (pEvent->type()) { case QEvent::Resize: { /* Send guest-resize hint only if top window resizing to required dimension: */ QResizeEvent *pResizeEvent = static_cast<QResizeEvent*>(pEvent); if (pResizeEvent->size() != workingArea().size()) break; if (m_bIsGuestAutoresizeEnabled && uisession()->isGuestSupportsGraphics()) QTimer::singleShot(0, this, SLOT(sltPerformGuestResize())); break; } default: break; } } return UIMachineView::eventFilter(pWatched, pEvent); }
QSize UIMachineViewFullscreen::calculateMaxGuestSize() const { return workingArea().size(); }
void UIMachineViewFullscreen::normalizeGeometry(bool /* fAdjustPosition */) { sltPerformGuestResize(workingArea().size()); }
QSize UIMachineViewSeamless::calculateMaxGuestSize() const { return workingArea().size(); }
void UIMachineViewFullscreen::adjustGuestScreenSize() { /* Should we adjust guest-screen size? Logging paranoia is required here to reveal the truth. */ LogRel(("GUI: UIMachineViewFullscreen::adjustGuestScreenSize: Adjust guest-screen size if necessary.\n")); bool fAdjust = false; /* Step 1: Was the guest-screen enabled automatically? */ if (!fAdjust) { if (frameBuffer()->isAutoEnabled()) { LogRel2(("GUI: UIMachineViewFullscreen::adjustGuestScreenSize: Guest-screen was enabled automatically, adjustment is required.\n")); fAdjust = true; } } /* Step 2: Is the guest-screen of another size than necessary? */ if (!fAdjust) { /* Acquire frame-buffer size: */ QSize frameBufferSize(frameBuffer()->width(), frameBuffer()->height()); /* Take the scale-factor(s) into account: */ frameBufferSize = scaledForward(frameBufferSize); /* Acquire working-area size: */ const QSize workingAreaSize = workingArea().size(); if (frameBufferSize != workingAreaSize) { LogRel2(("GUI: UIMachineViewFullscreen::adjustGuestScreenSize: Guest-screen is of another size than necessary, adjustment is required.\n")); fAdjust = true; } } /* Step 3: Is guest-additions supports graphics? */ if (fAdjust) { if (!uisession()->isGuestSupportsGraphics()) { LogRel2(("GUI: UIMachineViewFullscreen::adjustGuestScreenSize: Guest-additions are not supporting graphics, adjustment is omitted.\n")); fAdjust = false; } } /* Step 4: Is guest-screen visible? */ if (fAdjust) { if (!uisession()->isScreenVisible(screenId())) { LogRel2(("GUI: UIMachineViewFullscreen::adjustGuestScreenSize: Guest-screen is not visible, adjustment is omitted.\n")); fAdjust = false; } } /* Step 5: Is guest-screen auto-resize enabled? */ if (fAdjust) { if (!m_bIsGuestAutoresizeEnabled) { LogRel2(("GUI: UIMachineViewFullscreen::adjustGuestScreenSize: Guest-screen auto-resize is disabled, adjustment is omitted.\n")); fAdjust = false; } } /* Final step: Adjust if requested/allowed. */ if (fAdjust) { frameBuffer()->setAutoEnabled(false); sltPerformGuestResize(workingArea().size()); /* And remember the size to know what we are resizing out of when we exit: */ uisession()->setLastFullScreenSize(screenId(), scaledForward(scaledBackward(workingArea().size()))); } }