zui 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. checksums.yaml +7 -0
  2. data/Components/Builtins/Accordion.qml +208 -0
  3. data/Components/Builtins/Action.qml +43 -0
  4. data/Components/Builtins/ActionButton.qml +19 -0
  5. data/Components/Builtins/ActionGroup.qml +81 -0
  6. data/Components/Builtins/AlertDialog.qml +398 -0
  7. data/Components/Builtins/AnchorAnimation.qml +3 -0
  8. data/Components/Builtins/AnchorChanges.qml +11 -0
  9. data/Components/Builtins/AnimatedImage.qml +39 -0
  10. data/Components/Builtins/Animation.qml +3 -0
  11. data/Components/Builtins/AnimationController.qml +11 -0
  12. data/Components/Builtins/ApplicationWindow.qml +103 -0
  13. data/Components/Builtins/AreaChart.qml +70 -0
  14. data/Components/Builtins/AspectRatio.qml +30 -0
  15. data/Components/Builtins/Audio.qml +85 -0
  16. data/Components/Builtins/AudioInput.qml +10 -0
  17. data/Components/Builtins/AudioOutput.qml +10 -0
  18. data/Components/Builtins/Avatar.qml +46 -0
  19. data/Components/Builtins/Badge.qml +38 -0
  20. data/Components/Builtins/Banner.qml +133 -0
  21. data/Components/Builtins/BarChart.qml +67 -0
  22. data/Components/Builtins/BarIconButton.qml +30 -0
  23. data/Components/Builtins/BarIndicator.qml +26 -0
  24. data/Components/Builtins/Behavior.qml +13 -0
  25. data/Components/Builtins/Blur.qml +14 -0
  26. data/Components/Builtins/BorderImage.qml +38 -0
  27. data/Components/Builtins/BorderOverlay.qml +25 -0
  28. data/Components/Builtins/BottomSheet.qml +211 -0
  29. data/Components/Builtins/Breadcrumb.qml +169 -0
  30. data/Components/Builtins/BubbleChart.qml +3 -0
  31. data/Components/Builtins/BusyIndicator.qml +24 -0
  32. data/Components/Builtins/Button.qml +55 -0
  33. data/Components/Builtins/ButtonGroup.qml +18 -0
  34. data/Components/Builtins/Calendar.qml +55 -0
  35. data/Components/Builtins/Camera.qml +18 -0
  36. data/Components/Builtins/CandlestickChart.qml +3 -0
  37. data/Components/Builtins/Canvas.qml +159 -0
  38. data/Components/Builtins/CaptureSession.qml +19 -0
  39. data/Components/Builtins/Card.qml +23 -0
  40. data/Components/Builtins/Carousel.qml +72 -0
  41. data/Components/Builtins/Center.qml +20 -0
  42. data/Components/Builtins/CheckDelegate.qml +132 -0
  43. data/Components/Builtins/Checkbox.qml +62 -0
  44. data/Components/Builtins/Chip.qml +65 -0
  45. data/Components/Builtins/Circle.qml +35 -0
  46. data/Components/Builtins/Clipboard.qml +29 -0
  47. data/Components/Builtins/ColorAnimation.qml +3 -0
  48. data/Components/Builtins/ColorPicker.qml +70 -0
  49. data/Components/Builtins/Colorize.qml +14 -0
  50. data/Components/Builtins/Column.qml +17 -0
  51. data/Components/Builtins/ColumnLayout.qml +13 -0
  52. data/Components/Builtins/ConfirmDialog.qml +20 -0
  53. data/Components/Builtins/ConstrainedBox.qml +28 -0
  54. data/Components/Builtins/Container.qml +30 -0
  55. data/Components/Builtins/ContextMenu.qml +140 -0
  56. data/Components/Builtins/CursorSurface.qml +18 -0
  57. data/Components/Builtins/DataTable.qml +69 -0
  58. data/Components/Builtins/DatePicker.qml +180 -0
  59. data/Components/Builtins/DayOfWeekRow.qml +11 -0
  60. data/Components/Builtins/DelayButton.qml +47 -0
  61. data/Components/Builtins/DelegateModel.qml +10 -0
  62. data/Components/Builtins/DelegateModelGroup.qml +10 -0
  63. data/Components/Builtins/Dial.qml +42 -0
  64. data/Components/Builtins/Dialog.qml +128 -0
  65. data/Components/Builtins/DialogButtonBox.qml +137 -0
  66. data/Components/Builtins/Divider.qml +26 -0
  67. data/Components/Builtins/DonutChart.qml +3 -0
  68. data/Components/Builtins/DoubleSpinBox.qml +58 -0
  69. data/Components/Builtins/DragArea.qml +43 -0
  70. data/Components/Builtins/Drawer.qml +107 -0
  71. data/Components/Builtins/DropArea.qml +19 -0
  72. data/Components/Builtins/DropShadow.qml +16 -0
  73. data/Components/Builtins/Dropdown.qml +19 -0
  74. data/Components/Builtins/ExpansionPanel.qml +157 -0
  75. data/Components/Builtins/FilePicker.qml +140 -0
  76. data/Components/Builtins/FittedBox.qml +40 -0
  77. data/Components/Builtins/Flickable.qml +40 -0
  78. data/Components/Builtins/Flipable.qml +45 -0
  79. data/Components/Builtins/Flow.qml +16 -0
  80. data/Components/Builtins/FocusScope.qml +29 -0
  81. data/Components/Builtins/FolderListModel.qml +9 -0
  82. data/Components/Builtins/FolderPicker.qml +93 -0
  83. data/Components/Builtins/FontLoader.qml +21 -0
  84. data/Components/Builtins/FontPicker.qml +91 -0
  85. data/Components/Builtins/Frame.qml +71 -0
  86. data/Components/Builtins/FrameAnimation.qml +13 -0
  87. data/Components/Builtins/Gauge.qml +3 -0
  88. data/Components/Builtins/Glow.qml +15 -0
  89. data/Components/Builtins/Gradient.qml +93 -0
  90. data/Components/Builtins/Grid.qml +16 -0
  91. data/Components/Builtins/GridLayout.qml +16 -0
  92. data/Components/Builtins/GridView.qml +226 -0
  93. data/Components/Builtins/GroupBox.qml +95 -0
  94. data/Components/Builtins/Heatmap.qml +3 -0
  95. data/Components/Builtins/Histogram.qml +3 -0
  96. data/Components/Builtins/HorizontalHeader.qml +23 -0
  97. data/Components/Builtins/HorizontalHeaderDelegate.qml +39 -0
  98. data/Components/Builtins/HoverArea.qml +19 -0
  99. data/Components/Builtins/Icon.qml +16 -0
  100. data/Components/Builtins/Image.qml +110 -0
  101. data/Components/Builtins/ImageCapture.qml +14 -0
  102. data/Components/Builtins/ItemDelegate.qml +152 -0
  103. data/Components/Builtins/KeyCatcher.qml +25 -0
  104. data/Components/Builtins/Label.qml +43 -0
  105. data/Components/Builtins/LayoutItemProxy.qml +51 -0
  106. data/Components/Builtins/Legend.qml +86 -0
  107. data/Components/Builtins/Line.qml +28 -0
  108. data/Components/Builtins/LineChart.qml +87 -0
  109. data/Components/Builtins/ListModel.qml +8 -0
  110. data/Components/Builtins/ListView.qml +65 -0
  111. data/Components/Builtins/Loader.qml +33 -0
  112. data/Components/Builtins/Markdown.qml +23 -0
  113. data/Components/Builtins/MediaDevices.qml +10 -0
  114. data/Components/Builtins/MediaPlayer.qml +27 -0
  115. data/Components/Builtins/MediaRecorder.qml +16 -0
  116. data/Components/Builtins/Menu.qml +119 -0
  117. data/Components/Builtins/MenuBar.qml +128 -0
  118. data/Components/Builtins/MenuItem.qml +77 -0
  119. data/Components/Builtins/MenuSeparator.qml +30 -0
  120. data/Components/Builtins/MessageDialog.qml +104 -0
  121. data/Components/Builtins/ModalSheet.qml +222 -0
  122. data/Components/Builtins/ModelView3d.qml +50 -0
  123. data/Components/Builtins/MonthGrid.qml +23 -0
  124. data/Components/Builtins/MultiEffect.qml +48 -0
  125. data/Components/Builtins/MultiSelect.qml +23 -0
  126. data/Components/Builtins/NavigationRail.qml +154 -0
  127. data/Components/Builtins/NumberAnimation.qml +3 -0
  128. data/Components/Builtins/NumberField.qml +18 -0
  129. data/Components/Builtins/OpacityAnimator.qml +3 -0
  130. data/Components/Builtins/OpacityMask.qml +21 -0
  131. data/Components/Builtins/OpticalGlyph.qml +16 -0
  132. data/Components/Builtins/Page.qml +111 -0
  133. data/Components/Builtins/PageIndicator.qml +63 -0
  134. data/Components/Builtins/Pagination.qml +158 -0
  135. data/Components/Builtins/Pane.qml +72 -0
  136. data/Components/Builtins/PanelHero.qml +15 -0
  137. data/Components/Builtins/ParallelAnimation.qml +3 -0
  138. data/Components/Builtins/ParentAnimation.qml +3 -0
  139. data/Components/Builtins/ParentChange.qml +10 -0
  140. data/Components/Builtins/ParticleSystem.qml +81 -0
  141. data/Components/Builtins/PasswordField.qml +58 -0
  142. data/Components/Builtins/Path.qml +35 -0
  143. data/Components/Builtins/PathAnimation.qml +3 -0
  144. data/Components/Builtins/PauseAnimation.qml +3 -0
  145. data/Components/Builtins/PieChart.qml +3 -0
  146. data/Components/Builtins/PinchArea.qml +23 -0
  147. data/Components/Builtins/Popup.qml +130 -0
  148. data/Components/Builtins/Progress.qml +15 -0
  149. data/Components/Builtins/ProgressRing.qml +120 -0
  150. data/Components/Builtins/PropertyAction.qml +11 -0
  151. data/Components/Builtins/PropertyAnimation.qml +3 -0
  152. data/Components/Builtins/PropertyChanges.qml +10 -0
  153. data/Components/Builtins/RadarChart.qml +3 -0
  154. data/Components/Builtins/RadialGauge.qml +3 -0
  155. data/Components/Builtins/RadioButton.qml +46 -0
  156. data/Components/Builtins/RadioDelegate.qml +115 -0
  157. data/Components/Builtins/RadioGroup.qml +58 -0
  158. data/Components/Builtins/RangeSlider.qml +39 -0
  159. data/Components/Builtins/Rectangle.qml +23 -0
  160. data/Components/Builtins/RectangularShadow.qml +23 -0
  161. data/Components/Builtins/ReorderableList.qml +204 -0
  162. data/Components/Builtins/RichText.qml +23 -0
  163. data/Components/Builtins/RotationAnimation.qml +3 -0
  164. data/Components/Builtins/RotationAnimator.qml +3 -0
  165. data/Components/Builtins/RoundButton.qml +42 -0
  166. data/Components/Builtins/Row.qml +17 -0
  167. data/Components/Builtins/RowLayout.qml +13 -0
  168. data/Components/Builtins/ScaleAnimator.qml +3 -0
  169. data/Components/Builtins/ScatterChart.qml +3 -0
  170. data/Components/Builtins/ScreenCapture.qml +78 -0
  171. data/Components/Builtins/ScriptAction.qml +15 -0
  172. data/Components/Builtins/Scroll.qml +18 -0
  173. data/Components/Builtins/ScrollBar.qml +18 -0
  174. data/Components/Builtins/ScrollIndicator.qml +15 -0
  175. data/Components/Builtins/SearchField.qml +178 -0
  176. data/Components/Builtins/SearchableDropdown.qml +21 -0
  177. data/Components/Builtins/SectionHeader.qml +14 -0
  178. data/Components/Builtins/SelectableText.qml +33 -0
  179. data/Components/Builtins/SelectionRectangle.qml +17 -0
  180. data/Components/Builtins/Separator.qml +13 -0
  181. data/Components/Builtins/SequentialAnimation.qml +3 -0
  182. data/Components/Builtins/Settings.qml +10 -0
  183. data/Components/Builtins/ShaderEffect.qml +115 -0
  184. data/Components/Builtins/ShaderEffectSource.qml +61 -0
  185. data/Components/Builtins/Shaders/grayscale.frag +14 -0
  186. data/Components/Builtins/Shaders/grayscale.frag.qsb +0 -0
  187. data/Components/Builtins/Shaders/passthrough.frag +11 -0
  188. data/Components/Builtins/Shaders/passthrough.frag.qsb +0 -0
  189. data/Components/Builtins/Shaders/pixelate.frag +16 -0
  190. data/Components/Builtins/Shaders/pixelate.frag.qsb +0 -0
  191. data/Components/Builtins/Shaders/vignette.frag +18 -0
  192. data/Components/Builtins/Shaders/vignette.frag.qsb +0 -0
  193. data/Components/Builtins/Shaders/wave.frag +18 -0
  194. data/Components/Builtins/Shaders/wave.frag.qsb +0 -0
  195. data/Components/Builtins/Shape.qml +53 -0
  196. data/Components/Builtins/Skeleton.qml +78 -0
  197. data/Components/Builtins/Slider.qml +21 -0
  198. data/Components/Builtins/SmoothedAnimation.qml +3 -0
  199. data/Components/Builtins/Snackbar.qml +181 -0
  200. data/Components/Builtins/SortFilterProxyModel.qml +16 -0
  201. data/Components/Builtins/SoundEffect.qml +10 -0
  202. data/Components/Builtins/Spacer.qml +13 -0
  203. data/Components/Builtins/Sparkline.qml +3 -0
  204. data/Components/Builtins/SpinBox.qml +44 -0
  205. data/Components/Builtins/SplitView.qml +31 -0
  206. data/Components/Builtins/SpringAnimation.qml +3 -0
  207. data/Components/Builtins/Stack.qml +14 -0
  208. data/Components/Builtins/StackLayout.qml +19 -0
  209. data/Components/Builtins/StackView.qml +122 -0
  210. data/Components/Builtins/StackedBarChart.qml +3 -0
  211. data/Components/Builtins/StandardPaths.qml +9 -0
  212. data/Components/Builtins/State.qml +13 -0
  213. data/Components/Builtins/StateGroup.qml +11 -0
  214. data/Components/Builtins/Support/AnimationDriver.qml +79 -0
  215. data/Components/Builtins/Support/AnimationGroupDriver.qml +32 -0
  216. data/Components/Builtins/Support/ChartCanvas.qml +629 -0
  217. data/Components/Builtins/Support/ModelView3dScene.qml +292 -0
  218. data/Components/Builtins/Support/OptionalModuleState.js +5 -0
  219. data/Components/Builtins/SwipeDelegate.qml +231 -0
  220. data/Components/Builtins/SwipeView.qml +69 -0
  221. data/Components/Builtins/SwitchDelegate.qml +140 -0
  222. data/Components/Builtins/TabBar.qml +117 -0
  223. data/Components/Builtins/TabButton.qml +105 -0
  224. data/Components/Builtins/TableView.qml +388 -0
  225. data/Components/Builtins/TableViewDelegate.qml +17 -0
  226. data/Components/Builtins/Tabs.qml +138 -0
  227. data/Components/Builtins/Text.qml +24 -0
  228. data/Components/Builtins/TextArea.qml +59 -0
  229. data/Components/Builtins/TextField.qml +21 -0
  230. data/Components/Builtins/TextMetrics.qml +39 -0
  231. data/Components/Builtins/TimePicker.qml +213 -0
  232. data/Components/Builtins/Timer.qml +13 -0
  233. data/Components/Builtins/Toast.qml +213 -0
  234. data/Components/Builtins/Toggle.qml +19 -0
  235. data/Components/Builtins/ToggleSwitch.qml +22 -0
  236. data/Components/Builtins/ToolBar.qml +61 -0
  237. data/Components/Builtins/ToolButton.qml +41 -0
  238. data/Components/Builtins/ToolSeparator.qml +36 -0
  239. data/Components/Builtins/Tooltip.qml +20 -0
  240. data/Components/Builtins/Transition.qml +3 -0
  241. data/Components/Builtins/TreeView.qml +423 -0
  242. data/Components/Builtins/TreeViewDelegate.qml +46 -0
  243. data/Components/Builtins/Tumbler.qml +18 -0
  244. data/Components/Builtins/UniformAnimator.qml +3 -0
  245. data/Components/Builtins/VectorAnimation.qml +3 -0
  246. data/Components/Builtins/VectorImage.qml +62 -0
  247. data/Components/Builtins/VerticalHeader.qml +21 -0
  248. data/Components/Builtins/VerticalHeaderDelegate.qml +35 -0
  249. data/Components/Builtins/Video.qml +54 -0
  250. data/Components/Builtins/VideoOutput.qml +54 -0
  251. data/Components/Builtins/WebView.qml +57 -0
  252. data/Components/Builtins/WeekNumberColumn.qml +13 -0
  253. data/Components/Builtins/WidgetButton.qml +26 -0
  254. data/Components/Builtins/Window.qml +90 -0
  255. data/Components/Builtins/WindowCapture.qml +11 -0
  256. data/Components/Builtins/Wrap.qml +18 -0
  257. data/Components/Builtins/XAnimator.qml +3 -0
  258. data/Components/Builtins/YAnimator.qml +3 -0
  259. data/Components/README.md +45 -0
  260. data/ControlNode.qml +1369 -0
  261. data/Controls/BarIconButton.qml +27 -0
  262. data/Controls/BarIndicator.qml +22 -0
  263. data/Controls/BorderOverlay.qml +10 -0
  264. data/Controls/BorderSurface.qml +10 -0
  265. data/Controls/Button.qml +78 -0
  266. data/Controls/ButtonGroup.qml +19 -0
  267. data/Controls/ConfirmDialog.qml +37 -0
  268. data/Controls/CursorSurface.qml +29 -0
  269. data/Controls/Dropdown.qml +59 -0
  270. data/Controls/MultiSelect.qml +32 -0
  271. data/Controls/NumberField.qml +24 -0
  272. data/Controls/OpticalGlyph.qml +14 -0
  273. data/Controls/PanelActionButton.qml +10 -0
  274. data/Controls/PanelHero.qml +18 -0
  275. data/Controls/PanelKeyCatcher.qml +25 -0
  276. data/Controls/PanelSectionHeader.qml +11 -0
  277. data/Controls/PanelSeparator.qml +10 -0
  278. data/Controls/PanelSlider.qml +36 -0
  279. data/Controls/PanelToolTip.qml +13 -0
  280. data/Controls/SearchableDropdown.qml +11 -0
  281. data/Controls/TextField.qml +25 -0
  282. data/Controls/Toggle.qml +22 -0
  283. data/Controls/ToggleSwitch.qml +26 -0
  284. data/Controls/WidgetButton.qml +35 -0
  285. data/Controls/qmldir +25 -0
  286. data/Desktop.qml +76 -0
  287. data/LICENSE +22 -0
  288. data/README.md +112 -0
  289. data/Service.qml +430 -0
  290. data/Theme/Border.qml +22 -0
  291. data/Theme/Color.qml +22 -0
  292. data/Theme/Style.qml +47 -0
  293. data/Theme/Util.qml +6 -0
  294. data/Theme/qmldir +5 -0
  295. data/bin/zui +7 -0
  296. data/lib/zui/animation.rb +24 -0
  297. data/lib/zui/application.rb +327 -0
  298. data/lib/zui/builder.rb +725 -0
  299. data/lib/zui/cli.rb +91 -0
  300. data/lib/zui/command.rb +101 -0
  301. data/lib/zui/component_registry.rb +91 -0
  302. data/lib/zui/components.rb +262 -0
  303. data/lib/zui/distribution.rb +200 -0
  304. data/lib/zui/generator.rb +84 -0
  305. data/lib/zui/host.rb +123 -0
  306. data/lib/zui/node.rb +30 -0
  307. data/lib/zui/platform.rb +40 -0
  308. data/lib/zui/protocol.rb +29 -0
  309. data/lib/zui/runner.rb +37 -0
  310. data/lib/zui/runtime.rb +23 -0
  311. data/lib/zui/scheduler.rb +136 -0
  312. data/lib/zui/source_bundle.rb +63 -0
  313. data/lib/zui/state_store.rb +100 -0
  314. data/lib/zui/value.rb +44 -0
  315. data/lib/zui.rb +33 -0
  316. data/native/CMakeLists.txt +45 -0
  317. data/native/ZuiClipboard.cpp +16 -0
  318. data/native/ZuiClipboard.h +16 -0
  319. data/native/ZuiProcess.cpp +84 -0
  320. data/native/ZuiProcess.h +34 -0
  321. data/native/main.cpp +64 -0
  322. data/vendor/host/linux-x86_64/PROVENANCE.md +15 -0
  323. data/vendor/host/linux-x86_64/zui-host +0 -0
  324. data/vendor/host/linux-x86_64/zui-host.sha256 +1 -0
  325. metadata +365 -0
@@ -0,0 +1,21 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import QtMultimedia
5
+ import QtQuick.VectorImage
6
+ import "../../Theme"
7
+ import "../../Controls" as ZuiControls
8
+
9
+ ZuiControls.SearchableDropdown {
10
+ required property var renderer
11
+ label: renderer.escapeAutoText(renderer.prop("label", "")); value: String(renderer.prop("value", "")); options: renderer.prop("options", [])
12
+ placeholderText: String(renderer.prop("placeholder", "Search...")); emptyText: String(renderer.prop("empty_text", "No matches"))
13
+ triggerLabel: String(renderer.prop("trigger_label", "")); width: Number(renderer.prop("width", 240))
14
+ foreground: renderer.prop("foreground", renderer.foreground); background: renderer.prop("background", Color.popups.background)
15
+ popupBorder: renderer.prop("popup_border", Color.popups.border); accent: renderer.prop("accent", Color.accent)
16
+ fontFamily: String(renderer.prop("font_family", renderer.fontFamily)); rowHeight: Number(renderer.prop("row_height", Style.spacing.controlHeight))
17
+ popupRowHeight: Number(renderer.prop("popup_row_height", Style.spacing.popupRowHeight)); popupMinHeight: Number(renderer.prop("popup_min_height", Style.spacing.searchablePopupMinHeight))
18
+ showLabel: renderer.prop("show_label", true) !== false; hasCursor: renderer.prop("cursor", false) === true
19
+ onChanged: function(value) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: value }) }
20
+ onOptionHovered: function(value) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "hover", { value: value }) }
21
+ }
@@ -0,0 +1,14 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import QtMultimedia
5
+ import QtQuick.VectorImage
6
+ import "../../Theme"
7
+ import "../../Controls" as ZuiControls
8
+
9
+ ZuiControls.PanelSectionHeader {
10
+ required property var renderer
11
+ text: renderer.escapeAutoText(renderer.prop("text", ""))
12
+ foreground: renderer.foreground
13
+ fontFamily: renderer.fontFamily
14
+ }
@@ -0,0 +1,33 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import QtMultimedia
5
+ import QtQuick.VectorImage
6
+ import "../../Theme"
7
+ import "../../Controls" as ZuiControls
8
+
9
+ TextEdit {
10
+ required property var renderer
11
+ text: String(renderer.prop("text", ""))
12
+ readOnly: true
13
+ selectByMouse: true
14
+ persistentSelection: true
15
+ color: renderer.prop("color", renderer.foreground)
16
+ selectionColor: renderer.prop("selection_color", Color.accent)
17
+ selectedTextColor: renderer.prop("selected_text_color", Color.background)
18
+ font.family: renderer.fontFamily
19
+ font.pixelSize: Number(renderer.prop("size", Style.font.body))
20
+ font.bold: renderer.prop("bold", false) === true
21
+ width: Number(renderer.prop("width", implicitWidth))
22
+ wrapMode: renderer.prop("wrap", true) !== false ? TextEdit.Wrap : TextEdit.NoWrap
23
+ textFormat: {
24
+ var format = String(renderer.prop("format", "plain"))
25
+ if (format === "rich") return TextEdit.RichText
26
+ if (format === "markdown") return TextEdit.MarkdownText
27
+ return TextEdit.PlainText
28
+ }
29
+ onSelectedTextChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "selection", {
30
+ start: selectionStart, end: selectionEnd, text: selectedText
31
+ })
32
+ onLinkActivated: function(link) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "link", { value: link }) }
33
+ }
@@ -0,0 +1,17 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+
4
+ QQC.SelectionRectangle {
5
+ id: selectionRoot
6
+ property var renderer: null
7
+ target: renderer ? renderer.findRenderedItem(renderer.prop("target", "")) : null
8
+ enabled: renderer && renderer.prop("enabled", true) !== false
9
+ selectionMode: {
10
+ var mode = String(renderer ? renderer.prop("mode", "auto") : "auto")
11
+ if (mode === "drag") return QQC.SelectionRectangle.Drag
12
+ if (mode === "press_and_hold") return QQC.SelectionRectangle.PressAndHold
13
+ return QQC.SelectionRectangle.Auto
14
+ }
15
+ onActiveChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "active_change", { value: active, dragging: dragging })
16
+ onDraggingChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "selection_change", { active: active, dragging: dragging })
17
+ }
@@ -0,0 +1,13 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import QtMultimedia
5
+ import QtQuick.VectorImage
6
+ import "../../Theme"
7
+ import "../../Controls" as ZuiControls
8
+
9
+ ZuiControls.PanelSeparator {
10
+ required property var renderer
11
+ foreground: renderer.foreground
12
+ strength: Number(renderer.prop("strength", 0.12))
13
+ }
@@ -0,0 +1,3 @@
1
+ import QtQuick
2
+ import "Support" as Support
3
+ Support.AnimationGroupDriver { renderer: null; sequential: true }
@@ -0,0 +1,10 @@
1
+ import QtQuick
2
+ import QtCore
3
+
4
+ Item {
5
+ id:settingsRoot;property var renderer:null;property int handledSyncRevision:-1
6
+ function load(){if(!renderer)return;var defaults=renderer.prop("values",{});var result={};for(var key in defaults)result[key]=nativeSettings.value(key,defaults[key]);renderer.bridge.sendEvent(renderer.surfaceName,renderer.controlId,"loaded",{values:result})}
7
+ function synchronize(){if(!renderer)return;var values=renderer.prop("values",{});for(var key in values){var previous=nativeSettings.value(key);if(previous!==values[key]){nativeSettings.setValue(key,values[key]);renderer.bridge.sendEvent(renderer.surfaceName,renderer.controlId,"change",{key:key,value:values[key],previous:previous})}}var revision=Number(renderer.prop("sync_revision",0));if(revision!==handledSyncRevision){handledSyncRevision=revision;nativeSettings.sync();renderer.bridge.sendEvent(renderer.surfaceName,renderer.controlId,"synced",{revision:revision})}}
8
+ Settings{id:nativeSettings;category:String(renderer?renderer.prop("category",""):"");location:renderer&&String(renderer.prop("file_name",""))!==""?renderer.assetUrl(renderer.prop("file_name","")):""}
9
+ Component.onCompleted:{load();synchronize()}Connections{target:renderer;function onNodeChanged(){settingsRoot.synchronize()}}
10
+ }
@@ -0,0 +1,115 @@
1
+ import QtQuick
2
+
3
+ Item {
4
+ id: shaderRoot
5
+ required property var renderer
6
+ property real elapsedTime: Number(renderer.prop("time", 0))
7
+ property int frameNumber: 0
8
+ implicitWidth: Number(renderer.prop("width", 240))
9
+ implicitHeight: Number(renderer.prop("height", 160))
10
+
11
+ function shaderUrl(value, fallback) {
12
+ var name = String(value || "")
13
+ if (name === "") name = String(renderer.prop("shader", fallback || ""))
14
+ var builtins = ["passthrough", "grayscale", "wave", "pixelate", "vignette"]
15
+ if (builtins.indexOf(name) >= 0) return Qt.resolvedUrl("Shaders/" + name + ".frag.qsb")
16
+ return renderer.assetUrl(name)
17
+ }
18
+
19
+ function sourceRectangle() {
20
+ var value = renderer.prop("source_rect", {})
21
+ return Qt.rect(Number(value.x || 0), Number(value.y || 0), Number(value.width === undefined ? width : value.width), Number(value.height === undefined ? height : value.height))
22
+ }
23
+
24
+ Loader {
25
+ id: sourceLoader
26
+ anchors.fill: parent
27
+ source: renderer.node && renderer.node.children && renderer.node.children.length > 0 ? Qt.resolvedUrl("../../ControlNode.qml") : ""
28
+ onLoaded: renderer.configureFace(item, renderer.node.children[0])
29
+ }
30
+
31
+ ShaderEffectSource {
32
+ id: sourceTexture
33
+ sourceItem: sourceLoader
34
+ sourceRect: shaderRoot.sourceRectangle()
35
+ textureSize: Qt.size(Number(renderer.prop("texture_width", 0)), Number(renderer.prop("texture_height", 0)))
36
+ format: {
37
+ var value = String(renderer.prop("texture_format", "rgba8"))
38
+ if (value === "rgba16f") return ShaderEffectSource.RGBA16F
39
+ if (value === "rgba32f") return ShaderEffectSource.RGBA32F
40
+ return ShaderEffectSource.RGBA8
41
+ }
42
+ samples: Number(renderer.prop("texture_samples", 0))
43
+ wrapMode: {
44
+ var value = String(renderer.prop("texture_wrap", "clamp"))
45
+ if (value === "repeat") return ShaderEffectSource.Repeat
46
+ if (value === "repeat_horizontal") return ShaderEffectSource.RepeatHorizontally
47
+ if (value === "repeat_vertical") return ShaderEffectSource.RepeatVertically
48
+ return ShaderEffectSource.ClampToEdge
49
+ }
50
+ textureMirroring: {
51
+ var value = String(renderer.prop("texture_mirroring", "none"))
52
+ if (value === "horizontal") return ShaderEffectSource.MirrorHorizontally
53
+ if (value === "vertical") return ShaderEffectSource.MirrorVertically
54
+ return ShaderEffectSource.NoMirroring
55
+ }
56
+ mipmap: renderer.prop("mipmap", false) === true
57
+ live: renderer.prop("live", true) !== false
58
+ recursive: renderer.prop("recursive", false) === true
59
+ hideSource: true
60
+ }
61
+
62
+ ShaderEffect {
63
+ id: nativeShader
64
+ anchors.fill: parent
65
+ property var source: sourceTexture
66
+ property real time: shaderRoot.elapsedTime
67
+ property vector2d resolution: Qt.vector2d(width, height)
68
+ property vector2d mouse: Qt.vector2d(Number(renderer.prop("mouse_x", 0)), Number(renderer.prop("mouse_y", 0)))
69
+ property real intensity: Number(renderer.prop("intensity", 1))
70
+ property real amount: Number(renderer.prop("amount", 1))
71
+ property real radius: Number(renderer.prop("radius", 1))
72
+ property real progress: Number(renderer.prop("progress", 0))
73
+ property real frequency: Number(renderer.prop("frequency", 1))
74
+ property real amplitude: Number(renderer.prop("amplitude", 0.02))
75
+ property color color: renderer.prop("color", "white")
76
+ property color color2: renderer.prop("color2", "black")
77
+ property vector4d parameters: {
78
+ var values = renderer.prop("parameters", [])
79
+ return Qt.vector4d(Number(values[0] || 0), Number(values[1] || 0), Number(values[2] || 0), Number(values[3] || 0))
80
+ }
81
+ fragmentShader: shaderRoot.shaderUrl(renderer.prop("fragment_shader", ""), "passthrough")
82
+ vertexShader: renderer.assetUrl(renderer.prop("vertex_shader", ""))
83
+ blending: renderer.prop("blending", true) !== false
84
+ supportsAtlasTextures: renderer.prop("supports_atlas", false) === true
85
+ mesh: Qt.size(Math.max(1, Number(renderer.prop("mesh_width", 1))), Math.max(1, Number(renderer.prop("mesh_height", 1))))
86
+ cullMode: {
87
+ var value = String(renderer.prop("cull_mode", "none"))
88
+ if (value === "back") return ShaderEffect.BackFaceCulling
89
+ if (value === "front") return ShaderEffect.FrontFaceCulling
90
+ return ShaderEffect.NoCulling
91
+ }
92
+ onStatusChanged: {
93
+ if (renderer.subscribed("status")) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "status", { value: status, log: log })
94
+ if (status === ShaderEffect.Error) renderer.componentError("shader_load_failed", log, { fragment_shader: String(fragmentShader), vertex_shader: String(vertexShader) })
95
+ }
96
+ }
97
+
98
+ Timer {
99
+ interval: Math.max(1, Math.round(1000 / Math.max(1, Number(renderer.prop("fps", 60)))))
100
+ repeat: true
101
+ running: renderer.prop("running", false) === true
102
+ onTriggered: {
103
+ shaderRoot.elapsedTime += interval / 1000
104
+ shaderRoot.frameNumber += 1
105
+ if (renderer.subscribed("frame")) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "frame", { frame: shaderRoot.frameNumber, time: shaderRoot.elapsedTime })
106
+ }
107
+ }
108
+
109
+ MouseArea {
110
+ anchors.fill: parent
111
+ hoverEnabled: renderer.subscribed("hover")
112
+ onClicked: function(mouse) { if (renderer.subscribed("click")) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "click", { x: mouse.x, y: mouse.y }) }
113
+ onPositionChanged: function(mouse) { if (renderer.subscribed("hover")) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "hover", { x: mouse.x, y: mouse.y }) }
114
+ }
115
+ }
@@ -0,0 +1,61 @@
1
+ import QtQuick
2
+
3
+ Item {
4
+ id: effectSourceRoot
5
+ required property var renderer
6
+ implicitWidth: Number(renderer.prop("width", 240))
7
+ implicitHeight: Number(renderer.prop("height", 160))
8
+
9
+ function rectangle() {
10
+ var value = renderer.prop("source_rect", {})
11
+ return Qt.rect(Number(value.x || 0), Number(value.y || 0), Number(value.width === undefined ? width : value.width), Number(value.height === undefined ? height : value.height))
12
+ }
13
+
14
+ Loader {
15
+ id: sourceLoader
16
+ anchors.fill: parent
17
+ source: renderer.node && renderer.node.children && renderer.node.children.length > 0 ? Qt.resolvedUrl("../../ControlNode.qml") : ""
18
+ onLoaded: renderer.configureFace(item, renderer.node.children[0])
19
+ }
20
+
21
+ ShaderEffectSource {
22
+ id: nativeSource
23
+ anchors.fill: parent
24
+ sourceItem: sourceLoader
25
+ sourceRect: effectSourceRoot.rectangle()
26
+ textureSize: Qt.size(Number(renderer.prop("texture_width", 0)), Number(renderer.prop("texture_height", 0)))
27
+ format: {
28
+ var value = String(renderer.prop("format", "rgba8"))
29
+ if (value === "rgba16f") return ShaderEffectSource.RGBA16F
30
+ if (value === "rgba32f") return ShaderEffectSource.RGBA32F
31
+ return ShaderEffectSource.RGBA8
32
+ }
33
+ samples: Number(renderer.prop("samples", 0))
34
+ wrapMode: {
35
+ var value = String(renderer.prop("wrap_mode", "clamp"))
36
+ if (value === "repeat") return ShaderEffectSource.Repeat
37
+ if (value === "repeat_horizontal") return ShaderEffectSource.RepeatHorizontally
38
+ if (value === "repeat_vertical") return ShaderEffectSource.RepeatVertically
39
+ return ShaderEffectSource.ClampToEdge
40
+ }
41
+ textureMirroring: {
42
+ var value = String(renderer.prop("texture_mirroring", "none"))
43
+ if (value === "horizontal") return ShaderEffectSource.MirrorHorizontally
44
+ if (value === "vertical") return ShaderEffectSource.MirrorVertically
45
+ return ShaderEffectSource.NoMirroring
46
+ }
47
+ mipmap: renderer.prop("mipmap", false) === true
48
+ live: renderer.prop("live", true) !== false
49
+ recursive: renderer.prop("recursive", false) === true
50
+ hideSource: renderer.prop("hide_source", true) !== false
51
+ smooth: renderer.prop("smooth", true) !== false
52
+ }
53
+
54
+ Connections {
55
+ target: renderer
56
+ function onNodeChanged() {
57
+ if (!nativeSource.live) nativeSource.scheduleUpdate()
58
+ if (renderer.subscribed("update")) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "update", {})
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,14 @@
1
+ #version 440
2
+ layout(location = 0) in vec2 qt_TexCoord0;
3
+ layout(location = 0) out vec4 fragColor;
4
+ layout(std140, binding = 0) uniform buf {
5
+ mat4 qt_Matrix;
6
+ float qt_Opacity;
7
+ float amount;
8
+ };
9
+ layout(binding = 1) uniform sampler2D source;
10
+ void main() {
11
+ vec4 pixel = texture(source, qt_TexCoord0);
12
+ float luminance = dot(pixel.rgb, vec3(0.2126, 0.7152, 0.0722));
13
+ fragColor = vec4(mix(pixel.rgb, vec3(luminance), clamp(amount, 0.0, 1.0)), pixel.a) * qt_Opacity;
14
+ }
@@ -0,0 +1,11 @@
1
+ #version 440
2
+ layout(location = 0) in vec2 qt_TexCoord0;
3
+ layout(location = 0) out vec4 fragColor;
4
+ layout(std140, binding = 0) uniform buf {
5
+ mat4 qt_Matrix;
6
+ float qt_Opacity;
7
+ };
8
+ layout(binding = 1) uniform sampler2D source;
9
+ void main() {
10
+ fragColor = texture(source, qt_TexCoord0) * qt_Opacity;
11
+ }
@@ -0,0 +1,16 @@
1
+ #version 440
2
+ layout(location = 0) in vec2 qt_TexCoord0;
3
+ layout(location = 0) out vec4 fragColor;
4
+ layout(std140, binding = 0) uniform buf {
5
+ mat4 qt_Matrix;
6
+ float qt_Opacity;
7
+ float amount;
8
+ vec2 resolution;
9
+ };
10
+ layout(binding = 1) uniform sampler2D source;
11
+ void main() {
12
+ float pixels = max(amount, 1.0);
13
+ vec2 cells = max(resolution / pixels, vec2(1.0));
14
+ vec2 uv = (floor(qt_TexCoord0 * cells) + vec2(0.5)) / cells;
15
+ fragColor = texture(source, uv) * qt_Opacity;
16
+ }
@@ -0,0 +1,18 @@
1
+ #version 440
2
+ layout(location = 0) in vec2 qt_TexCoord0;
3
+ layout(location = 0) out vec4 fragColor;
4
+ layout(std140, binding = 0) uniform buf {
5
+ mat4 qt_Matrix;
6
+ float qt_Opacity;
7
+ float intensity;
8
+ float radius;
9
+ vec4 color;
10
+ };
11
+ layout(binding = 1) uniform sampler2D source;
12
+ void main() {
13
+ vec4 pixel = texture(source, qt_TexCoord0);
14
+ float distanceFromCenter = length(qt_TexCoord0 - vec2(0.5));
15
+ float edge = smoothstep(max(radius, 0.001), max(radius, 0.001) + 0.35, distanceFromCenter);
16
+ pixel.rgb = mix(pixel.rgb, color.rgb, clamp(edge * intensity, 0.0, 1.0));
17
+ fragColor = pixel * qt_Opacity;
18
+ }
@@ -0,0 +1,18 @@
1
+ #version 440
2
+ layout(location = 0) in vec2 qt_TexCoord0;
3
+ layout(location = 0) out vec4 fragColor;
4
+ layout(std140, binding = 0) uniform buf {
5
+ mat4 qt_Matrix;
6
+ float qt_Opacity;
7
+ float time;
8
+ vec2 resolution;
9
+ float frequency;
10
+ float amplitude;
11
+ };
12
+ layout(binding = 1) uniform sampler2D source;
13
+ void main() {
14
+ vec2 uv = qt_TexCoord0;
15
+ float aspect = resolution.y > 0.0 ? resolution.x / resolution.y : 1.0;
16
+ uv.x += sin((uv.y * frequency * 6.2831853) + time) * amplitude / max(aspect, 0.001);
17
+ fragColor = texture(source, uv) * qt_Opacity;
18
+ }
@@ -0,0 +1,53 @@
1
+ import QtQuick
2
+ import QtQuick.Shapes
3
+
4
+ Item {
5
+ id: shapeRoot
6
+ required property var renderer
7
+ implicitWidth: Number(renderer.prop("width", 120))
8
+ implicitHeight: Number(renderer.prop("height", 120))
9
+
10
+ function capStyle() {
11
+ var cap = String(renderer.prop("cap", "square"))
12
+ if (cap === "round") return ShapePath.RoundCap
13
+ if (cap === "flat") return ShapePath.FlatCap
14
+ return ShapePath.SquareCap
15
+ }
16
+
17
+ function joinStyle() {
18
+ var join = String(renderer.prop("join", "miter"))
19
+ if (join === "round") return ShapePath.RoundJoin
20
+ if (join === "bevel") return ShapePath.BevelJoin
21
+ return ShapePath.MiterJoin
22
+ }
23
+
24
+ Shape {
25
+ id: nativeShape
26
+ anchors.fill: parent
27
+ antialiasing: renderer.prop("antialiasing", true) !== false
28
+ asynchronous: renderer.prop("asynchronous", false) === true
29
+ preferredRendererType: String(renderer.prop("preferred_renderer", "geometry")) === "curve" ? Shape.CurveRenderer : Shape.GeometryRenderer
30
+ containsMode: String(renderer.prop("contains_mode", "bounding_rect")) === "fill" ? Shape.FillContains : Shape.BoundingRectContains
31
+ transform: Scale { xScale: Number(renderer.prop("scale", 1)); yScale: Number(renderer.prop("scale", 1)) }
32
+ ShapePath {
33
+ strokeColor: renderer.prop("stroke", "transparent")
34
+ fillColor: renderer.prop("fill", "transparent")
35
+ strokeWidth: Number(renderer.prop("stroke_width", 1))
36
+ capStyle: shapeRoot.capStyle()
37
+ joinStyle: shapeRoot.joinStyle()
38
+ fillRule: String(renderer.prop("fill_rule", "winding")) === "odd_even" ? ShapePath.OddEvenFill : ShapePath.WindingFill
39
+ strokeStyle: Array.isArray(renderer.prop("dash_pattern", [])) && renderer.prop("dash_pattern", []).length > 0 ? ShapePath.DashLine : ShapePath.SolidLine
40
+ dashPattern: renderer.prop("dash_pattern", [])
41
+ dashOffset: Number(renderer.prop("dash_offset", 0))
42
+ PathSvg { path: String(renderer.prop("path", "")) }
43
+ }
44
+ onStatusChanged: if (renderer.subscribed("status")) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "status", { value: status, renderer: rendererType })
45
+ }
46
+
47
+ MouseArea {
48
+ anchors.fill: parent
49
+ hoverEnabled: renderer.subscribed("hover")
50
+ onClicked: function(mouse) { if (renderer.subscribed("click")) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "click", { x: mouse.x, y: mouse.y, contains: nativeShape.contains(Qt.point(mouse.x, mouse.y)) }) }
51
+ onPositionChanged: function(mouse) { if (renderer.subscribed("hover")) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "hover", { x: mouse.x, y: mouse.y, contains: nativeShape.contains(Qt.point(mouse.x, mouse.y)) }) }
52
+ }
53
+ }
@@ -0,0 +1,78 @@
1
+ import QtQuick
2
+ import "../../Theme"
3
+
4
+ Item {
5
+ id: skeletonRoot
6
+
7
+ required property var renderer
8
+ readonly property string variant: String(renderer.prop("variant", "rectangle"))
9
+ readonly property int lineCount: variant === "text"
10
+ ? Math.max(1, Number(renderer.prop("lines", 3))) : 1
11
+ readonly property real lineHeight: variant === "text"
12
+ ? Number(renderer.prop("line_height", 14)) : Number(renderer.prop("height", 72))
13
+ readonly property real lineSpacing: Number(renderer.prop("spacing", Style.spacing.sm))
14
+ readonly property color baseColor: renderer.prop("base_color",
15
+ Qt.rgba(renderer.foreground.r, renderer.foreground.g, renderer.foreground.b, 0.12))
16
+ readonly property color highlightColor: renderer.prop("highlight_color",
17
+ Qt.rgba(renderer.foreground.r, renderer.foreground.g, renderer.foreground.b, 0.28))
18
+ readonly property bool shimmerRunning: renderer.prop("animated", true) !== false
19
+ && visible && enabled
20
+ property real shimmerProgress: -1
21
+
22
+ implicitWidth: Number(renderer.prop("width", variant === "circle" ? 64 : 320))
23
+ implicitHeight: variant === "text"
24
+ ? lineCount * lineHeight + Math.max(0, lineCount - 1) * lineSpacing
25
+ : Number(renderer.prop("height", variant === "circle" ? implicitWidth : 72))
26
+ enabled: renderer.prop("enabled", true) !== false
27
+ opacity: Number(renderer.prop("opacity", enabled ? 1 : 0.5))
28
+ Accessible.name: String(renderer.prop("accessible_name", "Loading content"))
29
+ Accessible.role: Accessible.Indicator
30
+
31
+ Repeater {
32
+ model: skeletonRoot.lineCount
33
+
34
+ Rectangle {
35
+ required property int index
36
+ x: 0
37
+ y: index * (skeletonRoot.lineHeight + skeletonRoot.lineSpacing)
38
+ width: skeletonRoot.variant === "text" && index === skeletonRoot.lineCount - 1
39
+ ? skeletonRoot.width * Math.max(0, Math.min(1, Number(renderer.prop("last_line_width", 0.68))))
40
+ : skeletonRoot.width
41
+ height: skeletonRoot.variant === "circle" ? skeletonRoot.height : skeletonRoot.lineHeight
42
+ radius: skeletonRoot.variant === "circle" ? Math.min(width, height) / 2
43
+ : Number(renderer.prop("radius", Style.cornerRadius))
44
+ color: skeletonRoot.baseColor
45
+ clip: true
46
+
47
+ Rectangle {
48
+ width: Math.max(24, parent.width * 0.7)
49
+ height: parent.height
50
+ x: {
51
+ var travel = parent.width + width
52
+ var offset = skeletonRoot.shimmerProgress * travel
53
+ return String(renderer.prop("direction", "left_to_right")) === "right_to_left"
54
+ ? parent.width - offset : offset - width
55
+ }
56
+ gradient: Gradient {
57
+ orientation: Gradient.Horizontal
58
+ GradientStop { position: 0; color: "transparent" }
59
+ GradientStop { position: 0.5; color: skeletonRoot.highlightColor }
60
+ GradientStop { position: 1; color: "transparent" }
61
+ }
62
+ }
63
+ }
64
+ }
65
+
66
+ NumberAnimation on shimmerProgress {
67
+ from: 0
68
+ to: 1
69
+ duration: Number(renderer.prop("duration", 1200))
70
+ loops: Animation.Infinite
71
+ running: skeletonRoot.shimmerRunning
72
+ }
73
+
74
+ onShimmerRunningChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
75
+ "animation_change", { running: shimmerRunning })
76
+ onVisibleChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
77
+ visible ? "show" : "hide", {})
78
+ }
@@ -0,0 +1,21 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import QtMultimedia
5
+ import QtQuick.VectorImage
6
+ import "../../Theme"
7
+ import "../../Controls" as ZuiControls
8
+
9
+ ZuiControls.PanelSlider {
10
+ required property var renderer
11
+ value: Number(renderer.prop("value", 0)); minimum: Number(renderer.prop("minimum", 0)); maximum: Number(renderer.prop("maximum", 1))
12
+ step: Number(renderer.prop("step", 0.05)); integer: renderer.prop("integer", false) === true; tickCount: Number(renderer.prop("ticks", 0))
13
+ implicitWidth: Number(renderer.prop("width", 200)); trackColor: renderer.prop("track_color", "#333")
14
+ fillColor: renderer.prop("fill_color", renderer.foreground); knobColor: renderer.prop("knob_color", renderer.foreground)
15
+ trackHeight: Number(renderer.prop("track_height", Math.max(4, Math.round(Style.spacing.controlHeight * 0.11))))
16
+ knobSize: Number(renderer.prop("knob_size", Math.max(14, Math.round(Style.spacing.controlHeight * 0.38))))
17
+ tickColor: renderer.prop("tick_color", Color.background)
18
+ onReleased: function(value) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: value }) }
19
+ onMoved: function(value) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "input", { value: value }) }
20
+ onRightClicked: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "right_click", {})
21
+ }
@@ -0,0 +1,3 @@
1
+ import QtQuick
2
+ import "Support" as Support
3
+ Support.AnimationDriver { renderer: null; animationType: "smoothed" }