forked from qt-creator/qt-creator
QmlDesigner: Show proper splitter cursor in 3D view
Fixes: QDS-15292 Change-Id: I700825c196a348cbfe55df050822e35cea99d1d7 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
@@ -13,19 +13,20 @@ class PuppetToCreatorCommand
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum Type {
|
enum Type {
|
||||||
Edit3DToolState,
|
None,
|
||||||
Render3DView,
|
|
||||||
ActiveSceneChanged,
|
ActiveSceneChanged,
|
||||||
ActiveViewportChanged,
|
ActiveViewportChanged,
|
||||||
RenderModelNodePreviewImage,
|
BakeLightsAborted,
|
||||||
|
BakeLightsFinished,
|
||||||
|
BakeLightsProgress,
|
||||||
|
Edit3DMouseCursor,
|
||||||
|
Edit3DToolState,
|
||||||
Import3DPreviewIcon,
|
Import3DPreviewIcon,
|
||||||
Import3DPreviewImage,
|
Import3DPreviewImage,
|
||||||
Import3DSupport,
|
Import3DSupport,
|
||||||
NodeAtPos,
|
NodeAtPos,
|
||||||
BakeLightsProgress,
|
Render3DView,
|
||||||
BakeLightsFinished,
|
RenderModelNodePreviewImage
|
||||||
BakeLightsAborted,
|
|
||||||
None
|
|
||||||
};
|
};
|
||||||
|
|
||||||
PuppetToCreatorCommand(Type type, const QVariant &data);
|
PuppetToCreatorCommand(Type type, const QVariant &data);
|
||||||
|
@@ -87,6 +87,14 @@ void Edit3DView::checkImports()
|
|||||||
edit3DWidget()->showCanvas(model()->hasImport("QtQuick3D"));
|
edit3DWidget()->showCanvas(model()->hasImport("QtQuick3D"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Edit3DView::setMouseCursor(int mouseCursor)
|
||||||
|
{
|
||||||
|
if (mouseCursor < 0)
|
||||||
|
m_edit3DWidget->canvas()->unsetCursor();
|
||||||
|
else
|
||||||
|
m_edit3DWidget->canvas()->setCursor(QCursor(static_cast<Qt::CursorShape>(mouseCursor)));
|
||||||
|
}
|
||||||
|
|
||||||
WidgetInfo Edit3DView::widgetInfo()
|
WidgetInfo Edit3DView::widgetInfo()
|
||||||
{
|
{
|
||||||
if (!m_edit3DWidget)
|
if (!m_edit3DWidget)
|
||||||
@@ -131,6 +139,15 @@ void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState)
|
|||||||
setActiveViewport(0);
|
setActiveViewport(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QString mouseCursorKey = QStringLiteral("mouseCursor");
|
||||||
|
if (sceneState.contains(mouseCursorKey)) {
|
||||||
|
setMouseCursor(sceneState[mouseCursorKey].toInt());
|
||||||
|
if (sceneState.size() == 1)
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
setMouseCursor(-1);
|
||||||
|
}
|
||||||
|
|
||||||
const QString sceneKey = QStringLiteral("sceneInstanceId");
|
const QString sceneKey = QStringLiteral("sceneInstanceId");
|
||||||
const QString selectKey = QStringLiteral("selectionMode");
|
const QString selectKey = QStringLiteral("selectionMode");
|
||||||
const QString transformKey = QStringLiteral("transformMode");
|
const QString transformKey = QStringLiteral("transformMode");
|
||||||
|
@@ -155,6 +155,7 @@ private:
|
|||||||
void storeCurrentSceneEnvironment();
|
void storeCurrentSceneEnvironment();
|
||||||
|
|
||||||
void setActiveViewport(int viewportIndex);
|
void setActiveViewport(int viewportIndex);
|
||||||
|
void setMouseCursor(int mouseCursor);
|
||||||
|
|
||||||
QPoint resolveToolbarPopupPos(Edit3DAction *action) const;
|
QPoint resolveToolbarPopupPos(Edit3DAction *action) const;
|
||||||
|
|
||||||
|
@@ -1817,6 +1817,11 @@ void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand
|
|||||||
viewportState.insert("activeViewport", command.data());
|
viewportState.insert("activeViewport", command.data());
|
||||||
if (isAttached())
|
if (isAttached())
|
||||||
model()->emitUpdateActiveScene3D(this, viewportState);
|
model()->emitUpdateActiveScene3D(this, viewportState);
|
||||||
|
} else if (command.type() == PuppetToCreatorCommand::Edit3DMouseCursor) {
|
||||||
|
QVariantMap viewportState;
|
||||||
|
viewportState.insert("mouseCursor", command.data());
|
||||||
|
if (isAttached())
|
||||||
|
model()->emitUpdateActiveScene3D(this, viewportState);
|
||||||
} else if (command.type() == PuppetToCreatorCommand::RenderModelNodePreviewImage) {
|
} else if (command.type() == PuppetToCreatorCommand::RenderModelNodePreviewImage) {
|
||||||
ImageContainer container = qvariant_cast<ImageContainer>(command.data());
|
ImageContainer container = qvariant_cast<ImageContainer>(command.data());
|
||||||
QImage image = container.image();
|
QImage image = container.image();
|
||||||
|
@@ -43,6 +43,7 @@ Item {
|
|||||||
property bool flyMode: false
|
property bool flyMode: false
|
||||||
property bool showCameraSpeed: false
|
property bool showCameraSpeed: false
|
||||||
property string cameraViewMode
|
property string cameraViewMode
|
||||||
|
property int mouseCursor: -1
|
||||||
|
|
||||||
// The presets used to customize the display of the viewports
|
// The presets used to customize the display of the viewports
|
||||||
property var viewportPresets: {
|
property var viewportPresets: {
|
||||||
@@ -116,6 +117,7 @@ Item {
|
|||||||
signal changeObjectProperty(var objects, var propNames)
|
signal changeObjectProperty(var objects, var propNames)
|
||||||
signal notifyActiveSceneChange()
|
signal notifyActiveSceneChange()
|
||||||
signal notifyActiveViewportChange(int index)
|
signal notifyActiveViewportChange(int index)
|
||||||
|
signal notifyMouseCursorChange(int cursor)
|
||||||
|
|
||||||
onUsePerspectiveChanged: _generalHelper.storeToolState(sceneId, "usePerspective", usePerspective)
|
onUsePerspectiveChanged: _generalHelper.storeToolState(sceneId, "usePerspective", usePerspective)
|
||||||
onShowEditLightChanged: _generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
|
onShowEditLightChanged: _generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
|
||||||
@@ -132,6 +134,8 @@ Item {
|
|||||||
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
|
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
|
||||||
onMaterialOverridesChanged: _generalHelper.storeToolState(sceneId, "matOverride", materialOverrides);
|
onMaterialOverridesChanged: _generalHelper.storeToolState(sceneId, "matOverride", materialOverrides);
|
||||||
onShowWireframesChanged: _generalHelper.storeToolState(sceneId, "showWireframe", showWireframes);
|
onShowWireframesChanged: _generalHelper.storeToolState(sceneId, "showWireframe", showWireframes);
|
||||||
|
onMouseCursorChanged: notifyMouseCursorChange(viewRoot.mouseCursor)
|
||||||
|
|
||||||
onActivePresetChanged: {
|
onActivePresetChanged: {
|
||||||
_generalHelper.storeToolState(sceneId, "activePreset", activePreset);
|
_generalHelper.storeToolState(sceneId, "activePreset", activePreset);
|
||||||
_generalHelper.requestOverlayUpdate();
|
_generalHelper.requestOverlayUpdate();
|
||||||
@@ -757,6 +761,7 @@ Item {
|
|||||||
updateSplitResizers();
|
updateSplitResizers();
|
||||||
|
|
||||||
cameraView.updateSnapping();
|
cameraView.updateSnapping();
|
||||||
|
viewRoot.updateMouseCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Updates the position, size, and visibility of viewports based on the selected
|
// Updates the position, size, and visibility of viewports based on the selected
|
||||||
@@ -843,6 +848,16 @@ Item {
|
|||||||
_generalHelper.requestOverlayUpdate();
|
_generalHelper.requestOverlayUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateMouseCursor()
|
||||||
|
{
|
||||||
|
if (verticalResizer.containsMouse || verticalResizer.dragActive)
|
||||||
|
viewRoot.mouseCursor = Qt.SplitHCursor
|
||||||
|
else if (horizontalResizer.containsMouse || horizontalResizer.dragActive)
|
||||||
|
viewRoot.mouseCursor = Qt.SplitVCursor
|
||||||
|
else
|
||||||
|
viewRoot.mouseCursor = -1
|
||||||
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
createEditViews();
|
createEditViews();
|
||||||
selectObjects([]);
|
selectObjects([]);
|
||||||
@@ -1081,6 +1096,8 @@ Item {
|
|||||||
dividerX = value;
|
dividerX = value;
|
||||||
updateViewRects();
|
updateViewRects();
|
||||||
}
|
}
|
||||||
|
onContainsMouseChanged: viewRoot.updateMouseCursor()
|
||||||
|
onDragActiveChanged: viewRoot.updateMouseCursor()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Horizontal divider (top/bottom)
|
// Horizontal divider (top/bottom)
|
||||||
@@ -1098,6 +1115,8 @@ Item {
|
|||||||
dividerY = value;
|
dividerY = value;
|
||||||
updateViewRects();
|
updateViewRects();
|
||||||
}
|
}
|
||||||
|
onContainsMouseChanged: viewRoot.updateMouseCursor()
|
||||||
|
onDragActiveChanged: viewRoot.updateMouseCursor()
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
|
@@ -10,6 +10,8 @@ Item {
|
|||||||
property real divider
|
property real divider
|
||||||
property real containerSize
|
property real containerSize
|
||||||
property int orientation
|
property int orientation
|
||||||
|
readonly property alias containsMouse: mouseArea.containsMouse
|
||||||
|
readonly property alias dragActive: mouseArea.drag.active
|
||||||
|
|
||||||
property real _dragMin: containerSize * 0.1
|
property real _dragMin: containerSize * 0.1
|
||||||
property real _dragMax: containerSize * 0.9
|
property real _dragMax: containerSize * 0.9
|
||||||
@@ -31,6 +33,7 @@ Item {
|
|||||||
drag.minimumY: _dragMin
|
drag.minimumY: _dragMin
|
||||||
drag.maximumY: _dragMax
|
drag.maximumY: _dragMax
|
||||||
drag.smoothed: true
|
drag.smoothed: true
|
||||||
|
hoverEnabled: true
|
||||||
|
|
||||||
onPositionChanged: {
|
onPositionChanged: {
|
||||||
var deltaPx = (orientation === Qt.Vertical ? root.x : root.y) + grabSize;
|
var deltaPx = (orientation === Qt.Vertical ? root.x : root.y) + grabSize;
|
||||||
|
@@ -962,6 +962,12 @@ void Qt5InformationNodeInstanceServer::handleActiveViewportChange(int index)
|
|||||||
index});
|
index});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Qt5InformationNodeInstanceServer::handleMouseCursorChange(int cursor)
|
||||||
|
{
|
||||||
|
nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::Edit3DMouseCursor,
|
||||||
|
cursor});
|
||||||
|
}
|
||||||
|
|
||||||
void Qt5InformationNodeInstanceServer::handleToolStateChanged(const QString &sceneId,
|
void Qt5InformationNodeInstanceServer::handleToolStateChanged(const QString &sceneId,
|
||||||
const QString &tool,
|
const QString &tool,
|
||||||
const QVariant &toolState)
|
const QVariant &toolState)
|
||||||
@@ -1968,6 +1974,8 @@ void Qt5InformationNodeInstanceServer::setup3DEditView(
|
|||||||
this, SLOT(handleActiveSceneChange()));
|
this, SLOT(handleActiveSceneChange()));
|
||||||
QObject::connect(m_editView3DData.rootItem, SIGNAL(notifyActiveViewportChange(int)),
|
QObject::connect(m_editView3DData.rootItem, SIGNAL(notifyActiveViewportChange(int)),
|
||||||
this, SLOT(handleActiveViewportChange(int)));
|
this, SLOT(handleActiveViewportChange(int)));
|
||||||
|
QObject::connect(m_editView3DData.rootItem, SIGNAL(notifyMouseCursorChange(int)),
|
||||||
|
this, SLOT(handleMouseCursorChange(int)));
|
||||||
QObject::connect(&m_propertyChangeTimer, &QTimer::timeout,
|
QObject::connect(&m_propertyChangeTimer, &QTimer::timeout,
|
||||||
this, &Qt5InformationNodeInstanceServer::handleObjectPropertyChangeTimeout);
|
this, &Qt5InformationNodeInstanceServer::handleObjectPropertyChangeTimeout);
|
||||||
QObject::connect(&m_selectionChangeTimer, &QTimer::timeout,
|
QObject::connect(&m_selectionChangeTimer, &QTimer::timeout,
|
||||||
|
@@ -67,6 +67,7 @@ private slots:
|
|||||||
void handleObjectPropertyChange(const QVariant &objects, const QVariant &propNames);
|
void handleObjectPropertyChange(const QVariant &objects, const QVariant &propNames);
|
||||||
void handleActiveSceneChange();
|
void handleActiveSceneChange();
|
||||||
void handleActiveViewportChange(int index);
|
void handleActiveViewportChange(int index);
|
||||||
|
void handleMouseCursorChange(int cursor);
|
||||||
void handleToolStateChanged(const QString &sceneId, const QString &tool,
|
void handleToolStateChanged(const QString &sceneId, const QString &tool,
|
||||||
const QVariant &toolState);
|
const QVariant &toolState);
|
||||||
void handleView3DSizeChange();
|
void handleView3DSizeChange();
|
||||||
|
Reference in New Issue
Block a user