SceneEnvironmentSection.qml 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. // Copyright (C) 2021 The Qt Company Ltd.
  2. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
  3. import QtQuick 2.15
  4. import QtQuick.Layouts 1.15
  5. import HelperWidgets 2.0
  6. import StudioTheme 1.0 as StudioTheme
  7. Column {
  8. width: parent.width
  9. Section {
  10. width: parent.width
  11. caption: qsTr("Scene Environment")
  12. SectionLayout {
  13. id: baseSectionLayout
  14. property bool isColorMode: backgroundModeComboBox.currentIndex === 2
  15. property bool isSkyBoxMode: backgroundModeComboBox.currentIndex === 3
  16. property bool isSkyBoxCubeMapMode: backgroundModeComboBox.currentIndex === 4
  17. PropertyLabel {
  18. text: qsTr("Background Mode")
  19. tooltip: qsTr("Sets if and how the background of the scene should be cleared.")
  20. }
  21. SecondColumnLayout {
  22. ComboBox {
  23. id: backgroundModeComboBox
  24. scope: "SceneEnvironment"
  25. model: ["Transparent", "Unspecified", "Color", "SkyBox", "SkyBoxCubeMap"]
  26. backendValue: backendValues.backgroundMode
  27. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  28. + StudioTheme.Values.actionIndicatorWidth
  29. }
  30. ExpandingSpacer {}
  31. }
  32. PropertyLabel {
  33. visible: baseSectionLayout.isColorMode
  34. text: qsTr("Clear Color")
  35. tooltip: qsTr("Sets which color will be used to clear the viewport when using SceneEnvironment.Color for the backgroundMode property.")
  36. }
  37. ColorEditor {
  38. visible: baseSectionLayout.isColorMode
  39. backendValue: backendValues.clearColor
  40. supportGradient: false
  41. }
  42. PropertyLabel {
  43. visible: baseSectionLayout.isSkyBoxCubeMapMode
  44. text: qsTr("Skybox Cube Map")
  45. tooltip: qsTr("Sets a cubemap to be used as a skybox when the background mode is SkyBoxCubeMap.")
  46. }
  47. SecondColumnLayout {
  48. visible: baseSectionLayout.isSkyBoxCubeMapMode
  49. ItemFilterComboBox {
  50. typeFilter: "QtQuick3D.CubeMapTexture"
  51. backendValue: backendValues.skyBoxCubeMap
  52. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  53. + StudioTheme.Values.actionIndicatorWidth
  54. }
  55. ExpandingSpacer {}
  56. }
  57. PropertyLabel {
  58. visible: baseSectionLayout.isSkyBoxMode || baseSectionLayout.isSkyBoxCubeMapMode
  59. text: qsTr("Skybox Blur")
  60. tooltip: qsTr("Sets how much to blur the skybox when using SceneEnvironment.SkyBox for the backgroundMode property.")
  61. }
  62. SecondColumnLayout {
  63. visible: baseSectionLayout.isSkyBoxMode || baseSectionLayout.isSkyBoxCubeMapMode
  64. SpinBox {
  65. minimumValue: 0
  66. maximumValue: 1
  67. decimals: 2
  68. stepSize: 0.01
  69. sliderIndicatorVisible: true
  70. backendValue: backendValues.skyboxBlurAmount
  71. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  72. + StudioTheme.Values.actionIndicatorWidth
  73. }
  74. ExpandingSpacer {}
  75. }
  76. PropertyLabel {
  77. text: qsTr("Effects")
  78. tooltip: qsTr("Post Processing effects applied to this scene.")
  79. Layout.alignment: Qt.AlignTop
  80. Layout.topMargin: 5
  81. }
  82. SecondColumnLayout {
  83. EditableListView {
  84. backendValue: backendValues.effects
  85. model: backendValues.effects.expressionAsList
  86. Layout.fillWidth: true
  87. typeFilter: "QtQuick3D.Effect"
  88. onAdd: function(value) { backendValues.effects.idListAdd(value) }
  89. onRemove: function(idx) { backendValues.effects.idListRemove(idx) }
  90. onReplace: function (idx, value) { backendValues.effects.idListReplace(idx, value) }
  91. }
  92. ExpandingSpacer {}
  93. }
  94. PropertyLabel {
  95. text: qsTr("Tonemap Mode")
  96. tooltip: qsTr("Sets how colors are tonemapped before rendering.")
  97. }
  98. SecondColumnLayout {
  99. ComboBox {
  100. scope: "SceneEnvironment"
  101. model: ["TonemapModeNone", "TonemapModeLinear", "TonemapModeAces", "TonemapModeHejlDawson", "TonemapModeFilmic"]
  102. backendValue: backendValues.tonemapMode
  103. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  104. + StudioTheme.Values.actionIndicatorWidth
  105. }
  106. ExpandingSpacer {}
  107. }
  108. PropertyLabel {
  109. text: qsTr("Fog")
  110. tooltip: qsTr("Settings for Fog applied to the scene.")
  111. }
  112. SecondColumnLayout {
  113. ItemFilterComboBox {
  114. typeFilter: "QtQuick3D.Fog"
  115. backendValue: backendValues.fog
  116. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  117. + StudioTheme.Values.actionIndicatorWidth
  118. }
  119. ExpandingSpacer {}
  120. }
  121. }
  122. }
  123. Section {
  124. id: antialiasingSection
  125. width: parent.width
  126. caption: qsTr("Antialiasing")
  127. property bool isAntialiasingEnabled: antialiasingModeComboBox.currentIndex !== 0
  128. SectionLayout {
  129. PropertyLabel {
  130. text: qsTr("Antialiasing Mode")
  131. tooltip: qsTr("Sets the antialiasing mode applied to the scene.")
  132. }
  133. SecondColumnLayout {
  134. ComboBox {
  135. id: antialiasingModeComboBox
  136. scope: "SceneEnvironment"
  137. model: ["NoAA", "SSAA", "MSAA", "ProgressiveAA"]
  138. backendValue: backendValues.antialiasingMode
  139. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  140. + StudioTheme.Values.actionIndicatorWidth
  141. }
  142. ExpandingSpacer {}
  143. }
  144. PropertyLabel {
  145. visible: antialiasingSection.isAntialiasingEnabled
  146. text: qsTr("Antialiasing Quality")
  147. tooltip: qsTr("Sets the level of antialiasing applied to the scene.")
  148. }
  149. SecondColumnLayout {
  150. visible: antialiasingSection.isAntialiasingEnabled
  151. ComboBox {
  152. scope: "SceneEnvironment"
  153. model: ["Medium", "High", "VeryHigh"]
  154. backendValue: backendValues.antialiasingQuality
  155. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  156. + StudioTheme.Values.actionIndicatorWidth
  157. }
  158. ExpandingSpacer {}
  159. }
  160. PropertyLabel {
  161. text: qsTr("Specular AA")
  162. tooltip: qsTr("Enables specular antialiasing.")
  163. }
  164. SecondColumnLayout {
  165. CheckBox {
  166. text: backendValues.specularAAEnabled.valueToString
  167. backendValue: backendValues.specularAAEnabled
  168. implicitWidth: StudioTheme.Values.twoControlColumnWidth
  169. + StudioTheme.Values.actionIndicatorWidth
  170. }
  171. ExpandingSpacer {}
  172. }
  173. PropertyLabel {
  174. text: qsTr("Temporal AA")
  175. tooltip: qsTr("Enables temporal antialiasing using camera jittering and frame blending.")
  176. }
  177. SecondColumnLayout {
  178. CheckBox {
  179. id: temporalAAEnabledCheckBox
  180. text: backendValues.temporalAAEnabled.valueToString
  181. backendValue: backendValues.temporalAAEnabled
  182. implicitWidth: StudioTheme.Values.twoControlColumnWidth
  183. + StudioTheme.Values.actionIndicatorWidth
  184. }
  185. ExpandingSpacer {}
  186. }
  187. PropertyLabel {
  188. visible: temporalAAEnabledCheckBox.checked
  189. text: qsTr("Temporal AA Strength")
  190. tooltip: qsTr("Sets the amount of temporal antialiasing applied.")
  191. }
  192. SecondColumnLayout {
  193. visible: temporalAAEnabledCheckBox.checked
  194. SpinBox {
  195. minimumValue: 0.01
  196. maximumValue: 2.0
  197. decimals: 2
  198. stepSize: 0.1
  199. backendValue: backendValues.temporalAAStrength
  200. implicitWidth: StudioTheme.Values.twoControlColumnWidth
  201. + StudioTheme.Values.actionIndicatorWidth
  202. }
  203. ExpandingSpacer {}
  204. }
  205. }
  206. }
  207. Section {
  208. width: parent.width
  209. caption: qsTr("Ambient Occlusion")
  210. SectionLayout {
  211. PropertyLabel {
  212. text: qsTr("Enabled")
  213. tooltip: qsTr("Enables ambient occlusion.")
  214. }
  215. SecondColumnLayout {
  216. CheckBox {
  217. id: ambientOcclusionEnabledCheckBox
  218. text: backendValues.aoEnabled.valueToString
  219. backendValue: backendValues.aoEnabled
  220. implicitWidth: StudioTheme.Values.twoControlColumnWidth
  221. + StudioTheme.Values.actionIndicatorWidth
  222. }
  223. ExpandingSpacer {}
  224. }
  225. PropertyLabel {
  226. visible: ambientOcclusionEnabledCheckBox.checked
  227. text: qsTr("Strength")
  228. tooltip: qsTr("Sets the amount of ambient occulusion applied.")
  229. }
  230. SecondColumnLayout {
  231. visible: ambientOcclusionEnabledCheckBox.checked
  232. SpinBox {
  233. minimumValue: 0
  234. maximumValue: 100
  235. sliderIndicatorVisible: true
  236. decimals: 0
  237. backendValue: backendValues.aoStrength
  238. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  239. + StudioTheme.Values.actionIndicatorWidth
  240. }
  241. ExpandingSpacer {}
  242. }
  243. PropertyLabel {
  244. visible: ambientOcclusionEnabledCheckBox.checked
  245. text: qsTr("Distance")
  246. tooltip: qsTr("Sets roughly how far ambient occlusion shadows spread away from objects.")
  247. }
  248. SecondColumnLayout {
  249. visible: ambientOcclusionEnabledCheckBox.checked
  250. SpinBox {
  251. minimumValue: 0
  252. maximumValue: 9999999
  253. decimals: 2
  254. backendValue: backendValues.aoDistance
  255. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  256. + StudioTheme.Values.actionIndicatorWidth
  257. }
  258. ExpandingSpacer {}
  259. }
  260. PropertyLabel {
  261. visible: ambientOcclusionEnabledCheckBox.checked
  262. text: qsTr("Softness")
  263. tooltip: qsTr("Sets how smooth the edges of the ambient occlusion shading are.")
  264. }
  265. SecondColumnLayout {
  266. visible: ambientOcclusionEnabledCheckBox.checked
  267. SpinBox {
  268. minimumValue: 0
  269. maximumValue: 50
  270. sliderIndicatorVisible: true
  271. decimals: 2
  272. backendValue: backendValues.aoSoftness
  273. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  274. + StudioTheme.Values.actionIndicatorWidth
  275. }
  276. ExpandingSpacer {}
  277. }
  278. PropertyLabel {
  279. visible: ambientOcclusionEnabledCheckBox.checked
  280. text: qsTr("Sample Rate")
  281. tooltip: qsTr("Sets ambient occlusion quality (more shades of gray) at the expense of performance.")
  282. }
  283. SecondColumnLayout {
  284. visible: ambientOcclusionEnabledCheckBox.checked
  285. SpinBox {
  286. minimumValue: 2
  287. maximumValue: 4
  288. decimals: 0
  289. stepSize: 1
  290. sliderIndicatorVisible: true
  291. backendValue: backendValues.aoSampleRate
  292. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  293. + StudioTheme.Values.actionIndicatorWidth
  294. }
  295. ExpandingSpacer {}
  296. }
  297. PropertyLabel {
  298. visible: ambientOcclusionEnabledCheckBox.checked
  299. text: qsTr("Bias")
  300. tooltip: qsTr("Sets a cutoff distance preventing objects from exhibiting ambient occlusion at close distances.")
  301. }
  302. SecondColumnLayout {
  303. visible: ambientOcclusionEnabledCheckBox.checked
  304. SpinBox {
  305. minimumValue: 0
  306. maximumValue: 9999999
  307. decimals: 2
  308. backendValue: backendValues.aoBias
  309. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  310. + StudioTheme.Values.actionIndicatorWidth
  311. }
  312. ExpandingSpacer {}
  313. }
  314. PropertyLabel {
  315. visible: ambientOcclusionEnabledCheckBox.checked
  316. text: qsTr("Dither")
  317. tooltip: qsTr("Enables scattering the edges of the ambient occlusion shadow bands to improve smoothness.")
  318. }
  319. SecondColumnLayout {
  320. visible: ambientOcclusionEnabledCheckBox.checked
  321. CheckBox {
  322. id: aoDitherCheckBox
  323. text: backendValues.aoDither.valueToString
  324. backendValue: backendValues.aoDither
  325. implicitWidth: StudioTheme.Values.twoControlColumnWidth
  326. + StudioTheme.Values.actionIndicatorWidth
  327. }
  328. ExpandingSpacer {}
  329. }
  330. }
  331. }
  332. Section {
  333. width: parent.width
  334. caption: qsTr("Image Based Lighting")
  335. SectionLayout {
  336. PropertyLabel {
  337. text: qsTr("HDR Image")
  338. tooltip: qsTr("Sets an image to use to light the scene, either instead of, or in addition to standard lights.")
  339. }
  340. SecondColumnLayout {
  341. ItemFilterComboBox {
  342. typeFilter: "QtQuick3D.Texture"
  343. backendValue: backendValues.lightProbe
  344. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  345. + StudioTheme.Values.actionIndicatorWidth
  346. }
  347. ExpandingSpacer {}
  348. }
  349. PropertyLabel {
  350. text: qsTr("Exposure")
  351. tooltip: qsTr("Sets the amount of light emitted by the light probe.")
  352. }
  353. SecondColumnLayout {
  354. SpinBox {
  355. minimumValue: 0
  356. maximumValue: 9999999
  357. decimals: 2
  358. backendValue: backendValues.probeExposure
  359. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  360. + StudioTheme.Values.actionIndicatorWidth
  361. }
  362. ExpandingSpacer {}
  363. }
  364. PropertyLabel {
  365. text: qsTr("Horizon")
  366. tooltip: qsTr("Sets the light probe horizon. When set, adds darkness (black) to the bottom of the environment, forcing the lighting to come predominantly from the top of the image.")
  367. }
  368. SecondColumnLayout {
  369. SpinBox {
  370. minimumValue: 0
  371. maximumValue: 1
  372. decimals: 2
  373. stepSize: 0.1
  374. backendValue: backendValues.probeHorizon
  375. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  376. + StudioTheme.Values.actionIndicatorWidth
  377. }
  378. ExpandingSpacer {}
  379. }
  380. PropertyLabel {
  381. text: qsTr("Orientation")
  382. tooltip: qsTr("Sets the orientation of the light probe.")
  383. }
  384. SecondColumnLayout {
  385. SpinBox {
  386. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  387. + StudioTheme.Values.actionIndicatorWidth
  388. minimumValue: -9999999
  389. maximumValue: 9999999
  390. decimals: 2
  391. backendValue: backendValues.probeOrientation_x
  392. }
  393. Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
  394. ControlLabel {
  395. text: "X"
  396. color: StudioTheme.Values.theme3DAxisXColor
  397. }
  398. ExpandingSpacer {}
  399. }
  400. PropertyLabel {}
  401. SecondColumnLayout {
  402. SpinBox {
  403. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  404. + StudioTheme.Values.actionIndicatorWidth
  405. minimumValue: -9999999
  406. maximumValue: 9999999
  407. decimals: 2
  408. backendValue: backendValues.probeOrientation_y
  409. }
  410. Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
  411. ControlLabel {
  412. text: "Y"
  413. color: StudioTheme.Values.theme3DAxisYColor
  414. }
  415. ExpandingSpacer {}
  416. }
  417. PropertyLabel {}
  418. SecondColumnLayout {
  419. SpinBox {
  420. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  421. + StudioTheme.Values.actionIndicatorWidth
  422. minimumValue: -9999999
  423. maximumValue: 9999999
  424. decimals: 2
  425. backendValue: backendValues.probeOrientation_z
  426. }
  427. Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
  428. ControlLabel {
  429. text: "Z"
  430. color: StudioTheme.Values.theme3DAxisZColor
  431. }
  432. ExpandingSpacer {}
  433. }
  434. }
  435. }
  436. Section {
  437. width: parent.width
  438. caption: qsTr("Advanced")
  439. SectionLayout {
  440. PropertyLabel {
  441. text: qsTr("Enable Depth Test")
  442. tooltip: qsTr("Enables depth testing. Disable to optimize render speed for layers with mostly transparent objects.")
  443. }
  444. SecondColumnLayout {
  445. CheckBox {
  446. text: backendValues.depthTestEnabled.valueToString
  447. backendValue: backendValues.depthTestEnabled
  448. implicitWidth: StudioTheme.Values.twoControlColumnWidth
  449. + StudioTheme.Values.actionIndicatorWidth
  450. }
  451. ExpandingSpacer {}
  452. }
  453. PropertyLabel {
  454. text: qsTr("Enable Depth Prepass")
  455. tooltip: qsTr("Enables draw depth buffer as a separate pass. Disable to optimize render speed for layers with low depth complexity.")
  456. }
  457. SecondColumnLayout {
  458. CheckBox {
  459. text: backendValues.depthPrePassEnabled.valueToString
  460. backendValue: backendValues.depthPrePassEnabled
  461. implicitWidth: StudioTheme.Values.twoControlColumnWidth
  462. + StudioTheme.Values.actionIndicatorWidth
  463. }
  464. ExpandingSpacer {}
  465. }
  466. PropertyLabel {
  467. text: qsTr("Debug Settings")
  468. tooltip: qsTr("Additional render settings for debugging scenes.")
  469. }
  470. SecondColumnLayout {
  471. ItemFilterComboBox {
  472. typeFilter: "QtQuick3D.DebugSettings"
  473. backendValue: backendValues.debugSettings
  474. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  475. + StudioTheme.Values.actionIndicatorWidth
  476. }
  477. ExpandingSpacer {}
  478. }
  479. PropertyLabel {
  480. text: qsTr("Light Mapper")
  481. tooltip: qsTr("Sets the light mapper object for the scene.")
  482. }
  483. SecondColumnLayout {
  484. ItemFilterComboBox {
  485. typeFilter: "QtQuick3D.Lightmapper"
  486. backendValue: backendValues.lightmapper
  487. implicitWidth: StudioTheme.Values.singleControlColumnWidth
  488. + StudioTheme.Values.actionIndicatorWidth
  489. }
  490. ExpandingSpacer {}
  491. }
  492. // ### This is not yet implemented in the DS backend since rect does not have
  493. // a way to access x, y, width, or height via the _ notation.
  494. // PropertyLabel {
  495. // text: qsTr("Scissor Rect")
  496. // tooltip: qsTr("Defines a scissor rectangle in view coordinates.")
  497. // }
  498. // SecondColumnLayout {
  499. // SpinBox {
  500. // maximumValue: 999999
  501. // minimumValue: -999999
  502. // decimals: 0
  503. // stepSize: 1
  504. // backendValue: backendValues.scissorRect_x
  505. // implicitWidth: StudioTheme.Values.twoControlColumnWidth
  506. // + StudioTheme.Values.actionIndicatorWidth
  507. // }
  508. // Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
  509. // ControlLabel {
  510. // text: "X"
  511. // tooltip: qsTr("Sets the scissor clip X offset from left to right.")
  512. // }
  513. // Spacer { implicitWidth: StudioTheme.Values.controlGap }
  514. // SpinBox {
  515. // maximumValue: 999999
  516. // minimumValue: -999999
  517. // decimals: 0
  518. // stepSize: 1
  519. // backendValue: backendValues.scissorRect_y
  520. // implicitWidth: StudioTheme.Values.twoControlColumnWidth
  521. // + StudioTheme.Values.actionIndicatorWidth
  522. // }
  523. // Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
  524. // ControlLabel {
  525. // text: "Y"
  526. // tooltip: qsTr("Sets the scissor clip Y offset from bottom to top.")
  527. // }
  528. // ExpandingSpacer {}
  529. // }
  530. // PropertyLabel {} // spacer
  531. // SecondColumnLayout {
  532. // SpinBox {
  533. // maximumValue: 999999
  534. // minimumValue: -999999
  535. // decimals: 0
  536. // stepSize: 1
  537. // backendValue: backendValues.scissorRect_width
  538. // implicitWidth: StudioTheme.Values.twoControlColumnWidth
  539. // + StudioTheme.Values.actionIndicatorWidth
  540. // }
  541. // Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
  542. // ControlLabel {
  543. // text: "W"
  544. // tooltip: qsTr("Sets the scissor clip width")
  545. // }
  546. // Spacer { implicitWidth: StudioTheme.Values.controlGap }
  547. // SpinBox {
  548. // maximumValue: 999999
  549. // minimumValue: -999999
  550. // decimals: 0
  551. // stepSize: 1
  552. // backendValue: backendValues.scissorRect_height
  553. // implicitWidth: StudioTheme.Values.twoControlColumnWidth
  554. // + StudioTheme.Values.actionIndicatorWidth
  555. // }
  556. // Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
  557. // ControlLabel {
  558. // text: "H"
  559. // tooltip: qsTr("Sets the scissor clip height")
  560. // }
  561. // ExpandingSpacer {}
  562. // }
  563. }
  564. }
  565. }