Changeset 51484 in vbox for trunk/src/VBox
- Timestamp:
- Jun 2, 2014 10:41:25 AM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 94086
- Location:
- trunk/src/VBox/Frontends/VirtualBox
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
r51474 r51484 80 80 VirtualBox_DEFS = 81 81 VirtualBox_DEFS.debug = VBOX_CHECK_STATE # QT_FATAL_ASSERT 82 VirtualBox_DEFS.darwin = VBOX_ GUI_USE_QUARTZ2D VBOX_WITH_TRANSLUCENT_SEAMLESS82 VirtualBox_DEFS.darwin = VBOX_WITH_TRANSLUCENT_SEAMLESS 83 83 VirtualBox_DEFS.win = UNICODE QT_DLL 84 84 ifdef VBOX_WITH_ICHAT_THEATER … … 729 729 src/platform/darwin/UICocoaDockIconPreview.mm \ 730 730 src/platform/darwin/UIWindowMenuManager.cpp \ 731 src/runtime/UIFrameBufferQuartz2D.cpp732 731 733 732 if1of ($(KBUILD_TARGET), freebsd linux netbsd openbsd solaris) # X11 … … 974 973 '-DMAC_OS_X_VERSION_MIN_REQUIRED=1050' \ 975 974 '-DMAC_OS_X_VERSION_MAX_ALLOWED=1050' \ 976 '-DVBOX_GUI_USE_QUARTZ2D' \977 975 '-o' $@ $< 978 976 endif -
trunk/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp
r51474 r51484 109 109 setWindowTitle(tr("VirtualBox - About")); 110 110 QString strAboutText = tr("VirtualBox Graphical User Interface"); 111 #ifdef DEBUG112 strAboutText += QString(" (%1)").arg(gpConverter->toInternalString(gEDataManager->renderMode(vboxGlobal().managedVMUuid())));113 #endif /* DEBUG */114 111 #ifdef VBOX_BLEEDING_EDGE 115 112 QString strVersionText = "EXPERIMENTAL build %1 - " + QString(VBOX_BLEEDING_EDGE); -
trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h
r51476 r51484 72 72 #endif /* VBOX_WITH_DEBUGGER_GUI */ 73 73 template<> bool canConvert<RuntimeMenuHelpActionType>(); 74 template<> bool canConvert<RenderMode>();75 74 template<> bool canConvert<UIVisualStateType>(); 76 75 template<> bool canConvert<DetailsElementType>(); … … 129 128 template<> QString toInternalString(const RuntimeMenuHelpActionType &runtimeMenuHelpActionType); 130 129 template<> RuntimeMenuHelpActionType fromInternalString<RuntimeMenuHelpActionType>(const QString &strRuntimeMenuHelpActionType); 131 template<> QString toInternalString(const RenderMode &renderMode);132 template<> RenderMode fromInternalString<RenderMode>(const QString &strRenderMode);133 130 template<> QString toInternalString(const UIVisualStateType &visualStateType); 134 131 template<> UIVisualStateType fromInternalString<UIVisualStateType>(const QString &strVisualStateType); -
trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
r51407 r51484 45 45 #endif /* VBOX_WITH_DEBUGGER_GUI */ 46 46 template<> bool canConvert<RuntimeMenuHelpActionType>() { return true; } 47 template<> bool canConvert<RenderMode>() { return true; }48 47 template<> bool canConvert<UIVisualStateType>() { return true; } 49 48 template<> bool canConvert<DetailsElementType>() { return true; } … … 677 676 } 678 677 679 /* QString <= RenderMode: */680 template<> QString toInternalString(const RenderMode &renderMode)681 {682 QString strResult;683 switch (renderMode)684 {685 case RenderMode_QImage: strResult = "QImage"; break;686 #ifdef VBOX_GUI_USE_QUARTZ2D687 case RenderMode_Quartz2D: strResult = "Quartz2D"; break;688 #endif /* VBOX_GUI_USE_QUARTZ2D */689 default:690 {691 AssertMsgFailed(("No text for render-mode=%d", renderMode));692 break;693 }694 }695 return strResult;696 }697 698 /* RenderMode <= QString: */699 template<> RenderMode fromInternalString<RenderMode>(const QString &strRenderMode)700 {701 /* Here we have some fancy stuff allowing us702 * to search through the keys using 'case-insensitive' rule: */703 QStringList keys; QList<RenderMode> values;704 keys << "QImage"; values << RenderMode_QImage;705 #ifdef VBOX_GUI_USE_QUARTZ2D706 keys << "Quartz2D"; values << RenderMode_Quartz2D;707 #endif /* VBOX_GUI_USE_QUARTZ2D */708 /* QImage mode for unknown words: */709 if (!keys.contains(strRenderMode, Qt::CaseInsensitive))710 return RenderMode_QImage;711 /* Corresponding mode for known words: */712 return values.at(keys.indexOf(QRegExp(strRenderMode, Qt::CaseInsensitive)));713 }714 715 678 /* QString <= UIVisualStateType: */ 716 679 template<> QString toInternalString(const UIVisualStateType &visualStateType) -
trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
r51446 r51484 64 64 65 65 /* Runtime UI definitions: */ 66 const char* UIExtraDataDefs::GUI_RenderMode = "GUI/RenderMode";67 66 #ifndef Q_WS_MAC 68 67 const char* UIExtraDataDefs::GUI_MachineWindowIcons = "GUI/MachineWindowIcons"; -
trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
r51446 r51484 72 72 73 73 /* Runtime UI declarations: */ 74 extern const char* GUI_RenderMode;75 74 #ifndef Q_WS_MAC 76 75 extern const char* GUI_MachineWindowIcons; … … 338 337 }; 339 338 340 /** Runtime UI: Rendering modes. */341 enum RenderMode342 {343 RenderMode_Invalid,344 RenderMode_QImage,345 #ifdef VBOX_GUI_USE_QUARTZ2D346 RenderMode_Quartz2D347 #endif /* VBOX_GUI_USE_QUARTZ2D */348 };349 350 339 /** Runtime UI: Visual-state types. */ 351 340 enum UIVisualStateType -
trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
r51455 r51484 311 311 } 312 312 313 RenderMode UIExtraDataManager::renderMode(const QString &strId) const314 {315 return gpConverter->fromInternalString<RenderMode>(extraDataString(GUI_RenderMode, strId));316 }317 318 313 QRect UIExtraDataManager::selectorWindowGeometry(QWidget *pHintWidget /* = 0 */) 319 314 { -
trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
r51455 r51484 137 137 /** Defines selector-window geometry to passed @a geometry which is @a fMaximized. */ 138 138 void setSelectorWindowGeometry(const QRect &geometry, bool fMaximized); 139 140 /** Returns render-mode for machine with passed @a strId. */141 RenderMode renderMode(const QString &strId) const;142 139 143 140 /** Returns whether this machine started for the first time. */ -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
r51478 r51484 36 36 #include "UIFrameBuffer.h" 37 37 #include "UIFrameBufferQImage.h" 38 #ifdef VBOX_GUI_USE_QUARTZ2D39 # include "UIFrameBufferQuartz2D.h"40 #endif /* VBOX_GUI_USE_QUARTZ2D */41 38 #include "VBoxFBOverlay.h" 42 39 #include "UISession.h" … … 466 463 void UIMachineView::prepareFrameBuffer() 467 464 { 468 /* Prepare frame-buffer depending on render-mode: */ 469 RenderMode rm = gEDataManager->renderMode(vboxGlobal().managedVMUuid()); 470 switch (rm) 471 { 472 case RenderMode_QImage: 473 { 474 UIFrameBuffer *pFrameBuffer = uisession()->frameBuffer(screenId()); 475 if (pFrameBuffer) 476 { 477 pFrameBuffer->setView(this); 478 /* Mark framebuffer as used again: */ 479 LogRelFlow(("UIMachineView::prepareFrameBuffer: Start EMT callbacks accepting for screen: %d.\n", screenId())); 480 pFrameBuffer->setMarkAsUnused(false); 481 uisession()->setFrameBuffer(screenId(), pFrameBuffer); 482 } 483 else 484 { 465 /* Prepare frame-buffer: */ 466 UIFrameBuffer *pFrameBuffer = uisession()->frameBuffer(screenId()); 467 if (pFrameBuffer) 468 { 469 pFrameBuffer->setView(this); 470 /* Mark framebuffer as used again: */ 471 LogRelFlow(("UIMachineView::prepareFrameBuffer: Start EMT callbacks accepting for screen: %d.\n", screenId())); 472 pFrameBuffer->setMarkAsUnused(false); 473 uisession()->setFrameBuffer(screenId(), pFrameBuffer); 474 } 475 else 476 { 485 477 # ifdef VBOX_WITH_VIDEOHWACCEL 486 487 488 489 490 491 492 493 494 478 if (m_fAccelerate2DVideo) 479 { 480 /** these two additional template args is a workaround to 481 * this [VBox|UI] duplication 482 * @todo: they are to be removed once VBox stuff is gone */ 483 pFrameBuffer = new VBoxOverlayFrameBuffer<UIFrameBufferQImage, UIMachineView, UIResizeEvent>(this, &session(), (uint32_t)screenId()); 484 } 485 else 486 pFrameBuffer = new UIFrameBufferQImage(this); 495 487 # else /* VBOX_WITH_VIDEOHWACCEL */ 496 488 pFrameBuffer = new UIFrameBufferQImage(this); 497 489 # endif /* !VBOX_WITH_VIDEOHWACCEL */ 498 pFrameBuffer->setHiDPIOptimizationType(uisession()->hiDPIOptimizationType()); 499 uisession()->setFrameBuffer(screenId(), pFrameBuffer); 500 } 501 m_pFrameBuffer = pFrameBuffer; 502 break; 503 } 504 505 #ifdef VBOX_GUI_USE_QUARTZ2D 506 case RenderMode_Quartz2D: 507 { 508 /* Indicate that we are doing all drawing stuff ourself: */ 509 viewport()->setAttribute(Qt::WA_PaintOnScreen); 510 UIFrameBuffer *pFrameBuffer = uisession()->frameBuffer(screenId()); 511 if (pFrameBuffer) 512 { 513 pFrameBuffer->setView(this); 514 /* Mark framebuffer as used again: */ 515 LogRelFlow(("UIMachineView::prepareFrameBuffer: Start EMT callbacks accepting for screen: %d.\n", screenId())); 516 pFrameBuffer->setMarkAsUnused(false); 517 uisession()->setFrameBuffer(screenId(), pFrameBuffer); 518 } 519 else 520 { 521 # ifdef VBOX_WITH_VIDEOHWACCEL 522 if (m_fAccelerate2DVideo) 523 { 524 /** these two additional template args is a workaround to 525 * this [VBox|UI] duplication 526 * @todo: they are to be removed once VBox stuff is gone */ 527 pFrameBuffer = new VBoxOverlayFrameBuffer<UIFrameBufferQuartz2D, UIMachineView, UIResizeEvent>(this, &session(), (uint32_t)screenId()); 528 } 529 else 530 pFrameBuffer = new UIFrameBufferQuartz2D(this); 531 # else /* VBOX_WITH_VIDEOHWACCEL */ 532 pFrameBuffer = new UIFrameBufferQuartz2D(this); 533 # endif /* !VBOX_WITH_VIDEOHWACCEL */ 534 uisession()->setFrameBuffer(screenId(), pFrameBuffer); 535 } 536 m_pFrameBuffer = pFrameBuffer; 537 break; 538 } 539 #endif /* VBOX_GUI_USE_QUARTZ2D */ 540 541 default: 542 AssertReleaseMsgFailed(("Render mode must be valid: %d\n", rm)); 543 LogRel(("Invalid render mode: %d\n", rm)); 544 qApp->exit(1); 545 break; 546 } 490 pFrameBuffer->setHiDPIOptimizationType(uisession()->hiDPIOptimizationType()); 491 uisession()->setFrameBuffer(screenId(), pFrameBuffer); 492 } 493 m_pFrameBuffer = pFrameBuffer; 547 494 548 495 /* If frame-buffer was prepared: */ … … 952 899 CGImageRef UIMachineView::vmContentImage() 953 900 { 901 /* Use pause-image if exists: */ 954 902 if (!m_pauseShot.isNull()) 955 { 956 CGImageRef pauseImg = ::darwinToCGImageRef(&m_pauseShot); 957 /* Use the pause image as background */ 958 return pauseImg; 959 } 960 else 961 { 962 # ifdef VBOX_GUI_USE_QUARTZ2D 963 if (gEDataManager->renderMode(vboxGlobal().managedVMUuid()) == RenderMode_Quartz2D) 964 { 965 /* If the render mode is Quartz2D we could use the CGImageRef 966 * of the framebuffer for the dock icon creation. This saves 967 * some conversion time. */ 968 CGImageRef image = static_cast<UIFrameBufferQuartz2D*>(m_pFrameBuffer)->imageRef(); 969 CGImageRetain(image); /* Retain it, cause the consumer will release it. */ 970 return image; 971 } 972 # endif /* VBOX_GUI_USE_QUARTZ2D */ 973 /* In image mode we have to create the image ref out of the 974 * framebuffer */ 975 return frameBuffertoCGImageRef(m_pFrameBuffer); 976 } 977 return 0; 903 return darwinToCGImageRef(&m_pauseShot); 904 905 /* Create the image ref out of the frame-buffer: */ 906 return frameBuffertoCGImageRef(m_pFrameBuffer); 978 907 } 979 908 … … 1124 1053 void UIMachineView::paintEvent(QPaintEvent *pPaintEvent) 1125 1054 { 1126 if (m_pauseShot.isNull()) 1127 { 1128 /* Delegate the paint function to the VBoxFrameBuffer interface: */ 1129 if (m_pFrameBuffer) 1130 m_pFrameBuffer->paintEvent(pPaintEvent); 1055 /* Use pause-image if exists: */ 1056 if (!m_pauseShot.isNull()) 1057 { 1058 /* We have a snapshot for the paused state: */ 1059 QRect rect = pPaintEvent->rect().intersect(viewport()->rect()); 1060 /* We have to disable paint on screen if we are using the regular painter: */ 1061 bool fPaintOnScreen = viewport()->testAttribute(Qt::WA_PaintOnScreen); 1062 viewport()->setAttribute(Qt::WA_PaintOnScreen, false); 1063 QPainter painter(viewport()); 1064 painter.drawPixmap(rect, m_pauseShot, QRect(rect.x() + contentsX(), rect.y() + contentsY(), 1065 rect.width(), rect.height())); 1066 /* Restore the attribute to it's previous state: */ 1067 viewport()->setAttribute(Qt::WA_PaintOnScreen, fPaintOnScreen); 1131 1068 #ifdef Q_WS_MAC 1132 /* Update the dock icon if we are in the running state */ 1133 if (uisession()->isRunning()) 1134 updateDockIcon(); 1069 /* Update the dock icon: */ 1070 updateDockIcon(); 1135 1071 #endif /* Q_WS_MAC */ 1136 1072 return; 1137 1073 } 1138 1074 1139 #ifdef VBOX_GUI_USE_QUARTZ2D 1140 if (gEDataManager->renderMode(vboxGlobal().managedVMUuid()) == RenderMode_Quartz2D && m_pFrameBuffer) 1141 { 1075 /* Delegate the paint function to the UIFrameBuffer interface: */ 1076 if (m_pFrameBuffer) 1142 1077 m_pFrameBuffer->paintEvent(pPaintEvent); 1143 updateDockIcon();1144 }1145 else1146 #endif /* VBOX_GUI_USE_QUARTZ2D */1147 {1148 /* We have a snapshot for the paused state: */1149 QRect r = pPaintEvent->rect().intersect(viewport()->rect());1150 /* We have to disable paint on screen if we are using the regular painter: */1151 bool paintOnScreen = viewport()->testAttribute(Qt::WA_PaintOnScreen);1152 viewport()->setAttribute(Qt::WA_PaintOnScreen, false);1153 QPainter pnt(viewport());1154 pnt.drawPixmap(r, m_pauseShot, QRect(r.x() + contentsX(), r.y() + contentsY(), r.width(), r.height()));1155 /* Restore the attribute to its previous state: */1156 viewport()->setAttribute(Qt::WA_PaintOnScreen, paintOnScreen);1157 1078 #ifdef Q_WS_MAC 1079 /* Update the dock icon if we are in the running state: */ 1080 if (uisession()->isRunning()) 1158 1081 updateDockIcon(); 1159 1082 #endif /* Q_WS_MAC */ 1160 }1161 1083 } 1162 1084 -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h
r51476 r51484 269 269 friend class UIFrameBuffer; 270 270 friend class UIFrameBufferQImage; 271 #ifdef VBOX_GUI_USE_QUARTZ2D272 friend class UIFrameBufferQuartz2D;273 #endif /* VBOX_GUI_USE_QUARTZ2D */274 271 template<class, class, class> friend class VBoxOverlayFrameBuffer; 275 272 }; -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp
r48950 r51484 31 31 #include "UIFrameBuffer.h" 32 32 #include "UIFrameBufferQImage.h" 33 #ifdef VBOX_GUI_USE_QUARTZ2D34 # include "UIFrameBufferQuartz2D.h"35 #endif /* VBOX_GUI_USE_QUARTZ2D */36 33 37 34 /* COM includes: */
Note:
See TracChangeset
for help on using the changeset viewer.