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:
|
||||
enum Type {
|
||||
Edit3DToolState,
|
||||
Render3DView,
|
||||
None,
|
||||
ActiveSceneChanged,
|
||||
ActiveViewportChanged,
|
||||
RenderModelNodePreviewImage,
|
||||
BakeLightsAborted,
|
||||
BakeLightsFinished,
|
||||
BakeLightsProgress,
|
||||
Edit3DMouseCursor,
|
||||
Edit3DToolState,
|
||||
Import3DPreviewIcon,
|
||||
Import3DPreviewImage,
|
||||
Import3DSupport,
|
||||
NodeAtPos,
|
||||
BakeLightsProgress,
|
||||
BakeLightsFinished,
|
||||
BakeLightsAborted,
|
||||
None
|
||||
Render3DView,
|
||||
RenderModelNodePreviewImage
|
||||
};
|
||||
|
||||
PuppetToCreatorCommand(Type type, const QVariant &data);
|
||||
|
@@ -87,6 +87,14 @@ void Edit3DView::checkImports()
|
||||
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()
|
||||
{
|
||||
if (!m_edit3DWidget)
|
||||
@@ -131,6 +139,15 @@ void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState)
|
||||
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 selectKey = QStringLiteral("selectionMode");
|
||||
const QString transformKey = QStringLiteral("transformMode");
|
||||
|
@@ -155,6 +155,7 @@ private:
|
||||
void storeCurrentSceneEnvironment();
|
||||
|
||||
void setActiveViewport(int viewportIndex);
|
||||
void setMouseCursor(int mouseCursor);
|
||||
|
||||
QPoint resolveToolbarPopupPos(Edit3DAction *action) const;
|
||||
|
||||
|
@@ -1817,6 +1817,11 @@ void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand
|
||||
viewportState.insert("activeViewport", command.data());
|
||||
if (isAttached())
|
||||
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) {
|
||||
ImageContainer container = qvariant_cast<ImageContainer>(command.data());
|
||||
QImage image = container.image();
|
||||
|
@@ -43,6 +43,7 @@ Item {
|
||||
property bool flyMode: false
|
||||
property bool showCameraSpeed: false
|
||||
property string cameraViewMode
|
||||
property int mouseCursor: -1
|
||||
|
||||
// The presets used to customize the display of the viewports
|
||||
property var viewportPresets: {
|
||||
@@ -116,6 +117,7 @@ Item {
|
||||
signal changeObjectProperty(var objects, var propNames)
|
||||
signal notifyActiveSceneChange()
|
||||
signal notifyActiveViewportChange(int index)
|
||||
signal notifyMouseCursorChange(int cursor)
|
||||
|
||||
onUsePerspectiveChanged: _generalHelper.storeToolState(sceneId, "usePerspective", usePerspective)
|
||||
onShowEditLightChanged: _generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
|
||||
@@ -132,6 +134,8 @@ Item {
|
||||
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
|
||||
onMaterialOverridesChanged: _generalHelper.storeToolState(sceneId, "matOverride", materialOverrides);
|
||||
onShowWireframesChanged: _generalHelper.storeToolState(sceneId, "showWireframe", showWireframes);
|
||||
onMouseCursorChanged: notifyMouseCursorChange(viewRoot.mouseCursor)
|
||||
|
||||
onActivePresetChanged: {
|
||||
_generalHelper.storeToolState(sceneId, "activePreset", activePreset);
|
||||
_generalHelper.requestOverlayUpdate();
|
||||
@@ -757,6 +761,7 @@ Item {
|
||||
updateSplitResizers();
|
||||
|
||||
cameraView.updateSnapping();
|
||||
viewRoot.updateMouseCursor();
|
||||
}
|
||||
|
||||
// Updates the position, size, and visibility of viewports based on the selected
|
||||
@@ -843,6 +848,16 @@ Item {
|
||||
_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: {
|
||||
createEditViews();
|
||||
selectObjects([]);
|
||||
@@ -1081,6 +1096,8 @@ Item {
|
||||
dividerX = value;
|
||||
updateViewRects();
|
||||
}
|
||||
onContainsMouseChanged: viewRoot.updateMouseCursor()
|
||||
onDragActiveChanged: viewRoot.updateMouseCursor()
|
||||
}
|
||||
|
||||
// Horizontal divider (top/bottom)
|
||||
@@ -1098,6 +1115,8 @@ Item {
|
||||
dividerY = value;
|
||||
updateViewRects();
|
||||
}
|
||||
onContainsMouseChanged: viewRoot.updateMouseCursor()
|
||||
onDragActiveChanged: viewRoot.updateMouseCursor()
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
|
@@ -10,6 +10,8 @@ Item {
|
||||
property real divider
|
||||
property real containerSize
|
||||
property int orientation
|
||||
readonly property alias containsMouse: mouseArea.containsMouse
|
||||
readonly property alias dragActive: mouseArea.drag.active
|
||||
|
||||
property real _dragMin: containerSize * 0.1
|
||||
property real _dragMax: containerSize * 0.9
|
||||
@@ -31,6 +33,7 @@ Item {
|
||||
drag.minimumY: _dragMin
|
||||
drag.maximumY: _dragMax
|
||||
drag.smoothed: true
|
||||
hoverEnabled: true
|
||||
|
||||
onPositionChanged: {
|
||||
var deltaPx = (orientation === Qt.Vertical ? root.x : root.y) + grabSize;
|
||||
|
@@ -962,6 +962,12 @@ void Qt5InformationNodeInstanceServer::handleActiveViewportChange(int index)
|
||||
index});
|
||||
}
|
||||
|
||||
void Qt5InformationNodeInstanceServer::handleMouseCursorChange(int cursor)
|
||||
{
|
||||
nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::Edit3DMouseCursor,
|
||||
cursor});
|
||||
}
|
||||
|
||||
void Qt5InformationNodeInstanceServer::handleToolStateChanged(const QString &sceneId,
|
||||
const QString &tool,
|
||||
const QVariant &toolState)
|
||||
@@ -1968,6 +1974,8 @@ void Qt5InformationNodeInstanceServer::setup3DEditView(
|
||||
this, SLOT(handleActiveSceneChange()));
|
||||
QObject::connect(m_editView3DData.rootItem, SIGNAL(notifyActiveViewportChange(int)),
|
||||
this, SLOT(handleActiveViewportChange(int)));
|
||||
QObject::connect(m_editView3DData.rootItem, SIGNAL(notifyMouseCursorChange(int)),
|
||||
this, SLOT(handleMouseCursorChange(int)));
|
||||
QObject::connect(&m_propertyChangeTimer, &QTimer::timeout,
|
||||
this, &Qt5InformationNodeInstanceServer::handleObjectPropertyChangeTimeout);
|
||||
QObject::connect(&m_selectionChangeTimer, &QTimer::timeout,
|
||||
|
@@ -67,6 +67,7 @@ private slots:
|
||||
void handleObjectPropertyChange(const QVariant &objects, const QVariant &propNames);
|
||||
void handleActiveSceneChange();
|
||||
void handleActiveViewportChange(int index);
|
||||
void handleMouseCursorChange(int cursor);
|
||||
void handleToolStateChanged(const QString &sceneId, const QString &tool,
|
||||
const QVariant &toolState);
|
||||
void handleView3DSizeChange();
|
||||
|
Reference in New Issue
Block a user