summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/qtcreator/qml/qmlpuppet/editor3d_qt5.qrc2
-rw-r--r--share/qtcreator/qml/qmlpuppet/editor3d_qt6.qrc2
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/images/preview_landscape.hdrbin0 -> 100900 bytes
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/images/preview_studio.hdrbin0 -> 108923 bytes
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt5/MaterialNodeView.qml51
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt5/ModelNode3DImageView.qml15
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt6/MaterialNodeView.qml73
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt6/ModelNode3DImageView.qml19
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp32
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h8
-rw-r--r--share/qtcreator/qmldesigner/materialEditorQmlSources/EmptyMaterialEditorPane.qml6
-rw-r--r--share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorPane.qml17
-rw-r--r--share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorTopSection.qml148
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml134
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttfbin23512 -> 23736 bytes
15 files changed, 399 insertions, 108 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/editor3d_qt5.qrc b/share/qtcreator/qml/qmlpuppet/editor3d_qt5.qrc
index bbe9a910db..d4127574a6 100644
--- a/share/qtcreator/qml/qmlpuppet/editor3d_qt5.qrc
+++ b/share/qtcreator/qml/qmlpuppet/editor3d_qt5.qrc
@@ -16,6 +16,8 @@
<file>mockfiles/images/static_floor.png</file>
<file>mockfiles/images/spot.png</file>
<file>mockfiles/images/spot@2x.png</file>
+ <file>mockfiles/images/preview_landscape.hdr</file>
+ <file>mockfiles/images/preview_studio.hdr</file>
<file>mockfiles/qt5/AdjustableArrow.qml</file>
<file>mockfiles/qt5/AreaLightHandle.qml</file>
<file>mockfiles/qt5/Arrow.qml</file>
diff --git a/share/qtcreator/qml/qmlpuppet/editor3d_qt6.qrc b/share/qtcreator/qml/qmlpuppet/editor3d_qt6.qrc
index 0545942334..bb29d683a0 100644
--- a/share/qtcreator/qml/qmlpuppet/editor3d_qt6.qrc
+++ b/share/qtcreator/qml/qmlpuppet/editor3d_qt6.qrc
@@ -18,6 +18,8 @@
<file>mockfiles/images/floor_tex.png</file>
<file>mockfiles/images/spot.png</file>
<file>mockfiles/images/spot@2x.png</file>
+ <file>mockfiles/images/preview_landscape.hdr</file>
+ <file>mockfiles/images/preview_studio.hdr</file>
<file>mockfiles/qt6/AdjustableArrow.qml</file>
<file>mockfiles/qt6/AreaLightHandle.qml</file>
<file>mockfiles/qt6/Arrow.qml</file>
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/preview_landscape.hdr b/share/qtcreator/qml/qmlpuppet/mockfiles/images/preview_landscape.hdr
new file mode 100644
index 0000000000..2c6b4372d4
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/images/preview_landscape.hdr
Binary files differ
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/images/preview_studio.hdr b/share/qtcreator/qml/qmlpuppet/mockfiles/images/preview_studio.hdr
new file mode 100644
index 0000000000..8ab060c1f4
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/images/preview_studio.hdr
Binary files differ
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/MaterialNodeView.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/MaterialNodeView.qml
index 9fee06e0ad..067e34928b 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/MaterialNodeView.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/MaterialNodeView.qml
@@ -29,8 +29,12 @@ View3D {
id: root
anchors.fill: parent
environment: sceneEnv
+ camera: envMode === "SkyBox" && envValue === "preview_studio" ? studioCamera : defaultCamera
property Material previewMaterial
+ property string envMode
+ property string envValue
+ property string modelSrc: "#Sphere"
function fitToViewPort(closeUp)
{
@@ -41,28 +45,59 @@ View3D {
id: sceneEnv
antialiasingMode: SceneEnvironment.MSAA
antialiasingQuality: SceneEnvironment.High
+ backgroundMode: envMode === "Color" ? SceneEnvironment.Color
+ : envMode === "SkyBox" ? SceneEnvironment.SkyBox
+ : SceneEnvironment.Transparent
+ clearColor: envMode === "Color" ? envValue : "#000000"
+ lightProbe: envMode === "SkyBox" ? skyBoxTex : null
+
+ Texture {
+ id: skyBoxTex
+ source: envMode === "SkyBox" ? "../images/" + envValue + ".hdr"
+ : ""
+ }
}
Node {
DirectionalLight {
eulerRotation.x: -26
- eulerRotation.y: -57
+ eulerRotation.y: modelSrc === "#Cube" ? -10 : -50
+ brightness: envMode !== "SkyBox" ? 100 : 0
}
PerspectiveCamera {
- y: 125.331
- z: 120
- eulerRotation.x: -31
+ id: defaultCamera
+ y: 70
+ z: 200
+ eulerRotation.x: -5.71
clipNear: 1
clipFar: 1000
}
- Model {
- id: model
+ PerspectiveCamera {
+ id: studioCamera
+ y: 232
+ z: 85
+ eulerRotation.x: -64.98
+ clipNear: 1
+ clipFar: 1000
+ }
+ Node {
+ rotation: root.camera.rotation
y: 50
- source: "#Sphere"
- materials: previewMaterial
+ Node {
+ y: modelSrc === "#Cone" ? -40 : 10
+ eulerRotation.x: 35
+ Model {
+ id: model
+ source: modelSrc ? modelSrc : "#Sphere"
+ eulerRotation.y: 45
+ materials: previewMaterial
+ scale: !modelSrc || modelSrc === "#Sphere"
+ ? Qt.vector3d(1.7, 1.7, 1.7) : Qt.vector3d(1.2, 1.2, 1.2)
+ }
+ }
}
}
}
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/ModelNode3DImageView.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/ModelNode3DImageView.qml
index 70b9dbc4d0..d32a1ea915 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/ModelNode3DImageView.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/ModelNode3DImageView.qml
@@ -50,25 +50,28 @@ Item {
view.destroy();
}
- function createViewForObject(obj)
+ function createViewForObject(obj, env, envValue, model)
{
if (obj instanceof Material)
- createViewForMaterial(obj);
+ createViewForMaterial(obj, env, envValue, model);
else if (obj instanceof Model)
createViewForModel(obj);
else if (obj instanceof Node)
createViewForNode(obj);
}
- function createViewForMaterial(material)
+ function createViewForMaterial(material, env, envValue, model)
{
if (!materialViewComponent)
materialViewComponent = Qt.createComponent("MaterialNodeView.qml");
// Always recreate the view to ensure material is up to date
- if (materialViewComponent.status === Component.Ready)
- view = materialViewComponent.createObject(viewRect, {"previewMaterial": material});
-
+ if (materialViewComponent.status === Component.Ready) {
+ view = materialViewComponent.createObject(viewRect, {"previewMaterial": material,
+ "envMode": env,
+ "envValue": envValue,
+ "modelSrc": model});
+ }
previewObject = material;
}
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/MaterialNodeView.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/MaterialNodeView.qml
index 94051d5f6e..12fdd3048e 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/MaterialNodeView.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/MaterialNodeView.qml
@@ -29,8 +29,12 @@ View3D {
id: root
anchors.fill: parent
environment: sceneEnv
+ camera: envMode === "SkyBox" && envValue === "preview_studio" ? studioCamera : defaultCamera
property Material previewMaterial
+ property string envMode
+ property string envValue
+ property string modelSrc: "#Sphere"
function fitToViewPort(closeUp)
{
@@ -41,30 +45,79 @@ View3D {
id: sceneEnv
antialiasingMode: SceneEnvironment.MSAA
antialiasingQuality: SceneEnvironment.High
+ backgroundMode: envMode === "Color" ? SceneEnvironment.Color
+ : envMode === "SkyBox" ? SceneEnvironment.SkyBox
+ : SceneEnvironment.Transparent
+ clearColor: envMode === "Color" ? envValue : "#000000"
+ lightProbe: envMode === "SkyBox" ? skyBoxTex : null
+
+ Texture {
+ id: skyBoxTex
+ source: envMode === "SkyBox" ? "../images/" + envValue + ".hdr"
+ : ""
+ }
}
Node {
DirectionalLight {
eulerRotation.x: -26
- eulerRotation.y: -57
+ eulerRotation.y: modelSrc === "#Cube" ? -10 : -50
+ brightness: envMode !== "SkyBox" ? 1 : 0
}
PerspectiveCamera {
- y: 125.331
- z: 120
- eulerRotation.x: -31
+ id: defaultCamera
+ y: 70
+ z: 200
+ eulerRotation.x: -5.71
clipNear: 1
clipFar: 1000
}
- Model {
- id: model
- readonly property bool _edit3dLocked: true // Make this non-pickable
+ PerspectiveCamera {
+ id: studioCamera
+ y: 232
+ z: 85
+ eulerRotation.x: -64.98
+ clipNear: 1
+ clipFar: 1000
+ }
+ Node {
+ rotation: root.camera.rotation
y: 50
- source: "#Sphere"
- materials: previewMaterial
+ Node {
+ y: modelSrc === "#Cone" ? -40 : 10
+ eulerRotation.x: 35
+ Model {
+ id: model
+ readonly property bool _edit3dLocked: true // Make this non-pickable
+ source: modelSrc ? modelSrc : "#Sphere"
+ eulerRotation.y: 45
+ materials: previewMaterial
+ scale: !modelSrc || modelSrc === "#Sphere"
+ ? Qt.vector3d(1.7, 1.7, 1.7) : Qt.vector3d(1.2, 1.2, 1.2)
+ }
+ }
+ }
+ Model {
+ id: floorModel
+ source: "#Rectangle"
+ scale.y: 8
+ scale.x: 8
+ eulerRotation.x: -60
+ visible: !envMode || envMode === "Default"
+ materials: floorMaterial
+ DefaultMaterial {
+ id: floorMaterial
+ diffuseMap: floorTex
+ Texture {
+ id: floorTex
+ source: "../images/floor_tex.png"
+ scaleU: floorModel.scale.x
+ scaleV: floorModel.scale.y
+ }
+ }
}
-
}
}
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/ModelNode3DImageView.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/ModelNode3DImageView.qml
index 031d01d65f..e409e35aee 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/ModelNode3DImageView.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/ModelNode3DImageView.qml
@@ -50,25 +50,31 @@ Item {
view.destroy();
}
- function createViewForObject(obj)
+ function createViewForObject(obj, env, envValue, model)
{
+ backgroundView3d.visible = true;
if (obj instanceof Material)
- createViewForMaterial(obj);
+ createViewForMaterial(obj, env, envValue, model);
else if (obj instanceof Model)
createViewForModel(obj);
else if (obj instanceof Node)
createViewForNode(obj);
}
- function createViewForMaterial(material)
+ function createViewForMaterial(material, env, envValue, model)
{
if (!materialViewComponent)
materialViewComponent = Qt.createComponent("MaterialNodeView.qml");
// Always recreate the view to ensure material is up to date
- if (materialViewComponent.status === Component.Ready)
- view = materialViewComponent.createObject(viewRect, {"previewMaterial": material});
-
+ if (materialViewComponent.status === Component.Ready) {
+ view = materialViewComponent.createObject(viewRect, {"previewMaterial": material,
+ "envMode": env,
+ "envValue": envValue,
+ "modelSrc": model});
+ }
+ // Floor must be in same view as material so material can reflect it, so hide it in this one
+ backgroundView3d.visible = false;
previewObject = material;
}
@@ -129,6 +135,7 @@ Item {
// Use View3D instead of static image to make background look good on all resolutions
View3D {
+ id: backgroundView3d
anchors.fill: parent
environment: sceneEnv
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
index 516213588c..365aca3cd3 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
@@ -339,6 +339,31 @@ void Qt5InformationNodeInstanceServer::resolveImportSupport()
#endif
}
+void Qt5InformationNodeInstanceServer::updateMaterialPreviewData(const QVector<PropertyValueContainer> &valueChanges)
+{
+ const PropertyName matPrevPrefix("matPrev");
+ qint32 materialLibraryId = -1;
+ for (const auto &container : valueChanges) {
+ if (container.name().startsWith(matPrevPrefix)) {
+ if (!hasInstanceForId(container.instanceId()))
+ continue;
+ if (materialLibraryId < 0) {
+ ServerNodeInstance instance = instanceForId(container.instanceId());
+ if (instance.id() == "__materialLibrary__")
+ materialLibraryId = container.instanceId();
+ }
+ if (container.instanceId() == materialLibraryId) {
+ if (container.name() == "matPrevEnv")
+ m_materialPreviewData.env = container.value().toString();
+ else if (container.name() == "matPrevEnvValue")
+ m_materialPreviewData.envValue = container.value().toString();
+ else if (container.name() == "matPrevModel")
+ m_materialPreviewData.model = container.value().toString();
+ }
+ }
+ }
+}
+
void Qt5InformationNodeInstanceServer::updateRotationBlocks(const QVector<PropertyValueContainer> &valueChanges)
{
#ifdef QUICK3D_MODULE
@@ -1184,7 +1209,10 @@ void Qt5InformationNodeInstanceServer::doRenderModelNode3DImageView(const Reques
} else {
QMetaObject::invokeMethod(
m_modelNode3DImageViewData.rootItem, "createViewForObject",
- Q_ARG(QVariant, objectToVariant(instanceObj)));
+ Q_ARG(QVariant, objectToVariant(instanceObj)),
+ Q_ARG(QVariant, m_materialPreviewData.env),
+ Q_ARG(QVariant, m_materialPreviewData.envValue),
+ Q_ARG(QVariant, m_materialPreviewData.model));
}
// Need to render twice, first render updates spatial nodes
@@ -2027,6 +2055,7 @@ void Qt5InformationNodeInstanceServer::createScene(const CreateSceneCommand &com
if (ViewConfig::isQuick3DMode()) {
setup3DEditView(instanceList, command);
updateRotationBlocks(command.auxiliaryChanges);
+ updateMaterialPreviewData(command.auxiliaryChanges);
}
QObject::connect(&m_renderModelNodeImageViewTimer, &QTimer::timeout,
@@ -2431,6 +2460,7 @@ void Qt5InformationNodeInstanceServer::requestModelNodePreviewImage(const Reques
void Qt5InformationNodeInstanceServer::changeAuxiliaryValues(const ChangeAuxiliaryCommand &command)
{
updateRotationBlocks(command.auxiliaryChanges);
+ updateMaterialPreviewData(command.auxiliaryChanges);
Qt5NodeInstanceServer::changeAuxiliaryValues(command);
render3DEditView();
}
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
index f3448de4ad..ea104442a6 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
@@ -145,6 +145,7 @@ private:
void updateLockedAndHiddenStates(const QSet<ServerNodeInstance> &instances);
void handleInputEvents();
void resolveImportSupport();
+ void updateMaterialPreviewData(const QVector<PropertyValueContainer> &valueChanges);
void updateRotationBlocks(const QVector<PropertyValueContainer> &valueChanges);
void removeRotationBlocks(const QVector<qint32> &instanceIds);
@@ -191,6 +192,13 @@ private:
QObject *m_3dHelper = nullptr;
int m_need3DEditViewRender = 0;
QSet<QObject *> m_dynamicObjectConstructors;
+
+ struct PreviewData {
+ QString env;
+ QString envValue;
+ QString model;
+ };
+ PreviewData m_materialPreviewData;
};
} // namespace QmlDesigner
diff --git a/share/qtcreator/qmldesigner/materialEditorQmlSources/EmptyMaterialEditorPane.qml b/share/qtcreator/qmldesigner/materialEditorQmlSources/EmptyMaterialEditorPane.qml
index a9e272b6d5..50b5ce6a7e 100644
--- a/share/qtcreator/qmldesigner/materialEditorQmlSources/EmptyMaterialEditorPane.qml
+++ b/share/qtcreator/qmldesigner/materialEditorQmlSources/EmptyMaterialEditorPane.qml
@@ -33,6 +33,12 @@ PropertyEditorPane {
id: root
signal toolBarAction(int action)
+ signal previewEnvChanged(string env)
+ signal previewModelChanged(string model)
+
+ // Called from C++, dummy methods to avoid warnings
+ function closeContextMenu() {}
+ function initPreviewData(env, model) {}
Column {
id: col
diff --git a/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorPane.qml b/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorPane.qml
index cfc037bc24..67b5042c49 100644
--- a/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorPane.qml
+++ b/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorPane.qml
@@ -31,6 +31,8 @@ PropertyEditorPane {
id: itemPane
signal toolBarAction(int action)
+ signal previewEnvChanged(string env)
+ signal previewModelChanged(string model)
// invoked from C++ to refresh material preview image
function refreshPreview()
@@ -38,10 +40,25 @@ PropertyEditorPane {
topSection.refreshPreview()
}
+ // Called also from C++ to close context menu on focus out
+ function closeContextMenu()
+ {
+ topSection.closeContextMenu()
+ }
+
+ // Called from C++ to initialize preview menu checkmarks
+ function initPreviewData(env, model)
+ {
+ topSection.previewEnv = env;
+ topSection.previewModel = model
+ }
+
MaterialEditorTopSection {
id: topSection
onToolBarAction: (action) => itemPane.toolBarAction(action)
+ onPreviewEnvChanged: itemPane.previewEnvChanged(previewEnv)
+ onPreviewModelChanged: itemPane.previewModelChanged(previewModel)
}
Item { width: 1; height: 10 }
diff --git a/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorTopSection.qml b/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorTopSection.qml
index 2e21d5814a..0a5bcfab0d 100644
--- a/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorTopSection.qml
+++ b/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorTopSection.qml
@@ -29,6 +29,7 @@ import QtQuick.Layouts 1.15
import QtQuickDesignerTheme 1.0
import QtQuick.Templates 2.15 as T
import HelperWidgets 2.0
+import StudioControls 1.0 as StudioControls
import StudioTheme 1.0 as StudioTheme
Column {
@@ -36,12 +37,22 @@ Column {
signal toolBarAction(int action)
+ property string previewEnv
+ property string previewModel
+
function refreshPreview()
{
materialPreview.source = ""
materialPreview.source = "image://materialEditor/preview"
}
+ // Called from C++ to close context menu on focus out
+ function closeContextMenu()
+ {
+ modelMenu.close()
+ envMenu.close()
+ }
+
anchors.left: parent.left
anchors.right: parent.right
@@ -53,20 +64,135 @@ Column {
Item { width: 1; height: 10 } // spacer
- Rectangle {
- width: 152
- height: 152
- color: "#000000"
+
+ StudioControls.Menu {
+ id: modelMenu
+ closePolicy: StudioControls.Menu.CloseOnEscape | StudioControls.Menu.CloseOnPressOutside
+
+ ListModel {
+ id: modelMenuModel
+ ListElement {
+ modelName: qsTr("Cone")
+ modelStr: "#Cone"
+ }
+ ListElement {
+ modelName: qsTr("Cube")
+ modelStr: "#Cube"
+ }
+ ListElement {
+ modelName: qsTr("Cylinder")
+ modelStr: "#Cylinder"
+ }
+ ListElement {
+ modelName: qsTr("Sphere")
+ modelStr: "#Sphere"
+ }
+ }
+
+ Repeater {
+ model: modelMenuModel
+ StudioControls.MenuItemWithIcon {
+ text: modelName
+ onClicked: {
+ // Force property change notifications to keep check mark when reselected
+ root.previewModel = ""
+ root.previewModel = modelStr
+ }
+ checkable: true
+ checked: root.previewModel === modelStr
+ }
+ }
+ }
+
+ StudioControls.Menu {
+ id: envMenu
+ closePolicy: StudioControls.Menu.CloseOnEscape | StudioControls.Menu.CloseOnPressOutside
+
+ ListModel {
+ id: envMenuModel
+ ListElement {
+ envName: qsTr("Default")
+ envStr: "Default"
+ }
+ ListElement {
+ envName: qsTr("Color")
+ envStr: "Color"
+ }
+ ListElement {
+ envName: qsTr("Studio")
+ envStr: "SkyBox=preview_studio"
+ }
+ ListElement {
+ envName: qsTr("Landscape")
+ envStr: "SkyBox=preview_landscape"
+ }
+ }
+
+ Repeater {
+ model: envMenuModel
+ StudioControls.MenuItemWithIcon {
+ text: envName
+ onClicked: {
+ // Force property change notifications to keep check mark when reselected
+ root.previewEnv = ""
+ root.previewEnv = envStr
+ }
+ checkable: true
+ checked: root.previewEnv === envStr
+ }
+ }
+ }
+
+ Item {
anchors.horizontalCenter: parent.horizontalCenter
+ width: parent.width
+ height: previewRect.height
+
+ Rectangle {
+ id: previewRect
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: 152
+ height: 152
+ color: "#000000"
+
+ Image {
+ id: materialPreview
+ width: 150
+ height: 150
+ anchors.centerIn: parent
+ source: "image://materialEditor/preview"
+ cache: false
+ }
+ }
- Image {
- id: materialPreview
- width: 150
- height: 150
- anchors.centerIn: parent
- source: "image://materialEditor/preview"
- cache: false
+ Item {
+ id: previewOptions
+ width: 40
+ height: previewRect.height
+ anchors.top: previewRect.top
+ anchors.left: previewRect.right
+
+ Column {
+ anchors.horizontalCenter: parent.horizontalCenter
+ IconButton {
+ icon: StudioTheme.Constants.materialPreviewEnvironment
+ normalColor: "transparent"
+ iconSize: StudioTheme.Values.bigIconFontSize
+ buttonSize: previewOptions.width
+ tooltip: qsTr("Select preview environment.")
+ onClicked: envMenu.popup()
+ }
+ IconButton {
+ icon: StudioTheme.Constants.materialPreviewModel
+ normalColor: "transparent"
+ iconSize: StudioTheme.Values.bigIconFontSize
+ buttonSize: previewOptions.width
+ tooltip: qsTr("Select preview model.")
+ onClicked: modelMenu.popup()
+ }
+ }
}
+
}
Section {
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml
index 5972e56e04..46b3679198 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml
@@ -122,72 +122,74 @@ QtObject {
readonly property string listView: "\u0075"
readonly property string lockOff: "\u0076"
readonly property string lockOn: "\u0077"
- readonly property string mergeCells: "\u0078"
- readonly property string minus: "\u0079"
- readonly property string mirror: "\u007A"
- readonly property string newMaterial: "\u007B"
- readonly property string openMaterialBrowser: "\u007C"
- readonly property string orientation: "\u007D"
- readonly property string paddingEdge: "\u007E"
- readonly property string paddingFrame: "\u007F"
- readonly property string pasteStyle: "\u0080"
- readonly property string pause: "\u0081"
- readonly property string pin: "\u0082"
- readonly property string play: "\u0083"
- readonly property string plus: "\u0084"
- readonly property string promote: "\u0085"
- readonly property string readOnly: "\u0086"
- readonly property string redo: "\u0087"
- readonly property string rotationFill: "\u0088"
- readonly property string rotationOutline: "\u0089"
- readonly property string search: "\u008A"
- readonly property string sectionToggle: "\u008B"
- readonly property string splitColumns: "\u008C"
- readonly property string splitRows: "\u008D"
- readonly property string startNode: "\u008E"
- readonly property string testIcon: "\u008F"
- readonly property string textAlignBottom: "\u0090"
- readonly property string textAlignCenter: "\u0091"
- readonly property string textAlignJustified: "\u0092"
- readonly property string textAlignLeft: "\u0093"
- readonly property string textAlignMiddle: "\u0094"
- readonly property string textAlignRight: "\u0095"
- readonly property string textAlignTop: "\u0096"
- readonly property string textBulletList: "\u0097"
- readonly property string textFullJustification: "\u0098"
- readonly property string textNumberedList: "\u0099"
- readonly property string tickIcon: "\u009A"
- readonly property string translationCreateFiles: "\u009B"
- readonly property string translationCreateReport: "\u009D"
- readonly property string translationExport: "\u009E"
- readonly property string translationImport: "\u009F"
- readonly property string translationSelectLanguages: "\u00A0"
- readonly property string translationTest: "\u00A1"
- readonly property string transparent: "\u00A2"
- readonly property string triState: "\u00A3"
- readonly property string triangleArcA: "\u00A4"
- readonly property string triangleArcB: "\u00A5"
- readonly property string triangleCornerA: "\u00A6"
- readonly property string triangleCornerB: "\u00A7"
- readonly property string unLinked: "\u00A8"
- readonly property string undo: "\u00A9"
- readonly property string unpin: "\u00AA"
- readonly property string upDownIcon: "\u00AB"
- readonly property string upDownSquare2: "\u00AC"
- readonly property string visibilityOff: "\u00AE"
- readonly property string visibilityOn: "\u00AF"
- readonly property string wildcard: "\u00B0"
- readonly property string wizardsAutomotive: "\u00B1"
- readonly property string wizardsDesktop: "\u00B2"
- readonly property string wizardsGeneric: "\u00B3"
- readonly property string wizardsMcuEmpty: "\u00B4"
- readonly property string wizardsMcuGraph: "\u00B5"
- readonly property string wizardsMobile: "\u00B6"
- readonly property string wizardsUnknown: "\u00B7"
- readonly property string zoomAll: "\u00B8"
- readonly property string zoomIn: "\u00B9"
- readonly property string zoomOut: "\u00BA"
- readonly property string zoomSelection: "\u00BB"
+ readonly property string materialPreviewEnvironment: "\u0078"
+ readonly property string materialPreviewModel: "\u0079"
+ readonly property string mergeCells: "\u007A"
+ readonly property string minus: "\u007B"
+ readonly property string mirror: "\u007C"
+ readonly property string newMaterial: "\u007D"
+ readonly property string openMaterialBrowser: "\u007E"
+ readonly property string orientation: "\u007F"
+ readonly property string paddingEdge: "\u0080"
+ readonly property string paddingFrame: "\u0081"
+ readonly property string pasteStyle: "\u0082"
+ readonly property string pause: "\u0083"
+ readonly property string pin: "\u0084"
+ readonly property string play: "\u0085"
+ readonly property string plus: "\u0086"
+ readonly property string promote: "\u0087"
+ readonly property string readOnly: "\u0088"
+ readonly property string redo: "\u0089"
+ readonly property string rotationFill: "\u008A"
+ readonly property string rotationOutline: "\u008B"
+ readonly property string search: "\u008C"
+ readonly property string sectionToggle: "\u008D"
+ readonly property string splitColumns: "\u008E"
+ readonly property string splitRows: "\u008F"
+ readonly property string startNode: "\u0090"
+ readonly property string testIcon: "\u0091"
+ readonly property string textAlignBottom: "\u0092"
+ readonly property string textAlignCenter: "\u0093"
+ readonly property string textAlignJustified: "\u0094"
+ readonly property string textAlignLeft: "\u0095"
+ readonly property string textAlignMiddle: "\u0096"
+ readonly property string textAlignRight: "\u0097"
+ readonly property string textAlignTop: "\u0098"
+ readonly property string textBulletList: "\u0099"
+ readonly property string textFullJustification: "\u009A"
+ readonly property string textNumberedList: "\u009B"
+ readonly property string tickIcon: "\u009D"
+ readonly property string translationCreateFiles: "\u009E"
+ readonly property string translationCreateReport: "\u009F"
+ readonly property string translationExport: "\u00A0"
+ readonly property string translationImport: "\u00A1"
+ readonly property string translationSelectLanguages: "\u00A2"
+ readonly property string translationTest: "\u00A3"
+ readonly property string transparent: "\u00A4"
+ readonly property string triState: "\u00A5"
+ readonly property string triangleArcA: "\u00A6"
+ readonly property string triangleArcB: "\u00A7"
+ readonly property string triangleCornerA: "\u00A8"
+ readonly property string triangleCornerB: "\u00A9"
+ readonly property string unLinked: "\u00AA"
+ readonly property string undo: "\u00AB"
+ readonly property string unpin: "\u00AC"
+ readonly property string upDownIcon: "\u00AE"
+ readonly property string upDownSquare2: "\u00AF"
+ readonly property string visibilityOff: "\u00B0"
+ readonly property string visibilityOn: "\u00B1"
+ readonly property string wildcard: "\u00B2"
+ readonly property string wizardsAutomotive: "\u00B3"
+ readonly property string wizardsDesktop: "\u00B4"
+ readonly property string wizardsGeneric: "\u00B5"
+ readonly property string wizardsMcuEmpty: "\u00B6"
+ readonly property string wizardsMcuGraph: "\u00B7"
+ readonly property string wizardsMobile: "\u00B8"
+ readonly property string wizardsUnknown: "\u00B9"
+ readonly property string zoomAll: "\u00BA"
+ readonly property string zoomIn: "\u00BB"
+ readonly property string zoomOut: "\u00BC"
+ readonly property string zoomSelection: "\u00BD"
readonly property font iconFont: Qt.font({
"family": controlIcons.name,
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf
index cefd1d7d86..934c22110e 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf
Binary files differ