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.
- checksums.yaml +7 -0
- data/Components/Builtins/Accordion.qml +208 -0
- data/Components/Builtins/Action.qml +43 -0
- data/Components/Builtins/ActionButton.qml +19 -0
- data/Components/Builtins/ActionGroup.qml +81 -0
- data/Components/Builtins/AlertDialog.qml +398 -0
- data/Components/Builtins/AnchorAnimation.qml +3 -0
- data/Components/Builtins/AnchorChanges.qml +11 -0
- data/Components/Builtins/AnimatedImage.qml +39 -0
- data/Components/Builtins/Animation.qml +3 -0
- data/Components/Builtins/AnimationController.qml +11 -0
- data/Components/Builtins/ApplicationWindow.qml +103 -0
- data/Components/Builtins/AreaChart.qml +70 -0
- data/Components/Builtins/AspectRatio.qml +30 -0
- data/Components/Builtins/Audio.qml +85 -0
- data/Components/Builtins/AudioInput.qml +10 -0
- data/Components/Builtins/AudioOutput.qml +10 -0
- data/Components/Builtins/Avatar.qml +46 -0
- data/Components/Builtins/Badge.qml +38 -0
- data/Components/Builtins/Banner.qml +133 -0
- data/Components/Builtins/BarChart.qml +67 -0
- data/Components/Builtins/BarIconButton.qml +30 -0
- data/Components/Builtins/BarIndicator.qml +26 -0
- data/Components/Builtins/Behavior.qml +13 -0
- data/Components/Builtins/Blur.qml +14 -0
- data/Components/Builtins/BorderImage.qml +38 -0
- data/Components/Builtins/BorderOverlay.qml +25 -0
- data/Components/Builtins/BottomSheet.qml +211 -0
- data/Components/Builtins/Breadcrumb.qml +169 -0
- data/Components/Builtins/BubbleChart.qml +3 -0
- data/Components/Builtins/BusyIndicator.qml +24 -0
- data/Components/Builtins/Button.qml +55 -0
- data/Components/Builtins/ButtonGroup.qml +18 -0
- data/Components/Builtins/Calendar.qml +55 -0
- data/Components/Builtins/Camera.qml +18 -0
- data/Components/Builtins/CandlestickChart.qml +3 -0
- data/Components/Builtins/Canvas.qml +159 -0
- data/Components/Builtins/CaptureSession.qml +19 -0
- data/Components/Builtins/Card.qml +23 -0
- data/Components/Builtins/Carousel.qml +72 -0
- data/Components/Builtins/Center.qml +20 -0
- data/Components/Builtins/CheckDelegate.qml +132 -0
- data/Components/Builtins/Checkbox.qml +62 -0
- data/Components/Builtins/Chip.qml +65 -0
- data/Components/Builtins/Circle.qml +35 -0
- data/Components/Builtins/Clipboard.qml +29 -0
- data/Components/Builtins/ColorAnimation.qml +3 -0
- data/Components/Builtins/ColorPicker.qml +70 -0
- data/Components/Builtins/Colorize.qml +14 -0
- data/Components/Builtins/Column.qml +17 -0
- data/Components/Builtins/ColumnLayout.qml +13 -0
- data/Components/Builtins/ConfirmDialog.qml +20 -0
- data/Components/Builtins/ConstrainedBox.qml +28 -0
- data/Components/Builtins/Container.qml +30 -0
- data/Components/Builtins/ContextMenu.qml +140 -0
- data/Components/Builtins/CursorSurface.qml +18 -0
- data/Components/Builtins/DataTable.qml +69 -0
- data/Components/Builtins/DatePicker.qml +180 -0
- data/Components/Builtins/DayOfWeekRow.qml +11 -0
- data/Components/Builtins/DelayButton.qml +47 -0
- data/Components/Builtins/DelegateModel.qml +10 -0
- data/Components/Builtins/DelegateModelGroup.qml +10 -0
- data/Components/Builtins/Dial.qml +42 -0
- data/Components/Builtins/Dialog.qml +128 -0
- data/Components/Builtins/DialogButtonBox.qml +137 -0
- data/Components/Builtins/Divider.qml +26 -0
- data/Components/Builtins/DonutChart.qml +3 -0
- data/Components/Builtins/DoubleSpinBox.qml +58 -0
- data/Components/Builtins/DragArea.qml +43 -0
- data/Components/Builtins/Drawer.qml +107 -0
- data/Components/Builtins/DropArea.qml +19 -0
- data/Components/Builtins/DropShadow.qml +16 -0
- data/Components/Builtins/Dropdown.qml +19 -0
- data/Components/Builtins/ExpansionPanel.qml +157 -0
- data/Components/Builtins/FilePicker.qml +140 -0
- data/Components/Builtins/FittedBox.qml +40 -0
- data/Components/Builtins/Flickable.qml +40 -0
- data/Components/Builtins/Flipable.qml +45 -0
- data/Components/Builtins/Flow.qml +16 -0
- data/Components/Builtins/FocusScope.qml +29 -0
- data/Components/Builtins/FolderListModel.qml +9 -0
- data/Components/Builtins/FolderPicker.qml +93 -0
- data/Components/Builtins/FontLoader.qml +21 -0
- data/Components/Builtins/FontPicker.qml +91 -0
- data/Components/Builtins/Frame.qml +71 -0
- data/Components/Builtins/FrameAnimation.qml +13 -0
- data/Components/Builtins/Gauge.qml +3 -0
- data/Components/Builtins/Glow.qml +15 -0
- data/Components/Builtins/Gradient.qml +93 -0
- data/Components/Builtins/Grid.qml +16 -0
- data/Components/Builtins/GridLayout.qml +16 -0
- data/Components/Builtins/GridView.qml +226 -0
- data/Components/Builtins/GroupBox.qml +95 -0
- data/Components/Builtins/Heatmap.qml +3 -0
- data/Components/Builtins/Histogram.qml +3 -0
- data/Components/Builtins/HorizontalHeader.qml +23 -0
- data/Components/Builtins/HorizontalHeaderDelegate.qml +39 -0
- data/Components/Builtins/HoverArea.qml +19 -0
- data/Components/Builtins/Icon.qml +16 -0
- data/Components/Builtins/Image.qml +110 -0
- data/Components/Builtins/ImageCapture.qml +14 -0
- data/Components/Builtins/ItemDelegate.qml +152 -0
- data/Components/Builtins/KeyCatcher.qml +25 -0
- data/Components/Builtins/Label.qml +43 -0
- data/Components/Builtins/LayoutItemProxy.qml +51 -0
- data/Components/Builtins/Legend.qml +86 -0
- data/Components/Builtins/Line.qml +28 -0
- data/Components/Builtins/LineChart.qml +87 -0
- data/Components/Builtins/ListModel.qml +8 -0
- data/Components/Builtins/ListView.qml +65 -0
- data/Components/Builtins/Loader.qml +33 -0
- data/Components/Builtins/Markdown.qml +23 -0
- data/Components/Builtins/MediaDevices.qml +10 -0
- data/Components/Builtins/MediaPlayer.qml +27 -0
- data/Components/Builtins/MediaRecorder.qml +16 -0
- data/Components/Builtins/Menu.qml +119 -0
- data/Components/Builtins/MenuBar.qml +128 -0
- data/Components/Builtins/MenuItem.qml +77 -0
- data/Components/Builtins/MenuSeparator.qml +30 -0
- data/Components/Builtins/MessageDialog.qml +104 -0
- data/Components/Builtins/ModalSheet.qml +222 -0
- data/Components/Builtins/ModelView3d.qml +50 -0
- data/Components/Builtins/MonthGrid.qml +23 -0
- data/Components/Builtins/MultiEffect.qml +48 -0
- data/Components/Builtins/MultiSelect.qml +23 -0
- data/Components/Builtins/NavigationRail.qml +154 -0
- data/Components/Builtins/NumberAnimation.qml +3 -0
- data/Components/Builtins/NumberField.qml +18 -0
- data/Components/Builtins/OpacityAnimator.qml +3 -0
- data/Components/Builtins/OpacityMask.qml +21 -0
- data/Components/Builtins/OpticalGlyph.qml +16 -0
- data/Components/Builtins/Page.qml +111 -0
- data/Components/Builtins/PageIndicator.qml +63 -0
- data/Components/Builtins/Pagination.qml +158 -0
- data/Components/Builtins/Pane.qml +72 -0
- data/Components/Builtins/PanelHero.qml +15 -0
- data/Components/Builtins/ParallelAnimation.qml +3 -0
- data/Components/Builtins/ParentAnimation.qml +3 -0
- data/Components/Builtins/ParentChange.qml +10 -0
- data/Components/Builtins/ParticleSystem.qml +81 -0
- data/Components/Builtins/PasswordField.qml +58 -0
- data/Components/Builtins/Path.qml +35 -0
- data/Components/Builtins/PathAnimation.qml +3 -0
- data/Components/Builtins/PauseAnimation.qml +3 -0
- data/Components/Builtins/PieChart.qml +3 -0
- data/Components/Builtins/PinchArea.qml +23 -0
- data/Components/Builtins/Popup.qml +130 -0
- data/Components/Builtins/Progress.qml +15 -0
- data/Components/Builtins/ProgressRing.qml +120 -0
- data/Components/Builtins/PropertyAction.qml +11 -0
- data/Components/Builtins/PropertyAnimation.qml +3 -0
- data/Components/Builtins/PropertyChanges.qml +10 -0
- data/Components/Builtins/RadarChart.qml +3 -0
- data/Components/Builtins/RadialGauge.qml +3 -0
- data/Components/Builtins/RadioButton.qml +46 -0
- data/Components/Builtins/RadioDelegate.qml +115 -0
- data/Components/Builtins/RadioGroup.qml +58 -0
- data/Components/Builtins/RangeSlider.qml +39 -0
- data/Components/Builtins/Rectangle.qml +23 -0
- data/Components/Builtins/RectangularShadow.qml +23 -0
- data/Components/Builtins/ReorderableList.qml +204 -0
- data/Components/Builtins/RichText.qml +23 -0
- data/Components/Builtins/RotationAnimation.qml +3 -0
- data/Components/Builtins/RotationAnimator.qml +3 -0
- data/Components/Builtins/RoundButton.qml +42 -0
- data/Components/Builtins/Row.qml +17 -0
- data/Components/Builtins/RowLayout.qml +13 -0
- data/Components/Builtins/ScaleAnimator.qml +3 -0
- data/Components/Builtins/ScatterChart.qml +3 -0
- data/Components/Builtins/ScreenCapture.qml +78 -0
- data/Components/Builtins/ScriptAction.qml +15 -0
- data/Components/Builtins/Scroll.qml +18 -0
- data/Components/Builtins/ScrollBar.qml +18 -0
- data/Components/Builtins/ScrollIndicator.qml +15 -0
- data/Components/Builtins/SearchField.qml +178 -0
- data/Components/Builtins/SearchableDropdown.qml +21 -0
- data/Components/Builtins/SectionHeader.qml +14 -0
- data/Components/Builtins/SelectableText.qml +33 -0
- data/Components/Builtins/SelectionRectangle.qml +17 -0
- data/Components/Builtins/Separator.qml +13 -0
- data/Components/Builtins/SequentialAnimation.qml +3 -0
- data/Components/Builtins/Settings.qml +10 -0
- data/Components/Builtins/ShaderEffect.qml +115 -0
- data/Components/Builtins/ShaderEffectSource.qml +61 -0
- data/Components/Builtins/Shaders/grayscale.frag +14 -0
- data/Components/Builtins/Shaders/grayscale.frag.qsb +0 -0
- data/Components/Builtins/Shaders/passthrough.frag +11 -0
- data/Components/Builtins/Shaders/passthrough.frag.qsb +0 -0
- data/Components/Builtins/Shaders/pixelate.frag +16 -0
- data/Components/Builtins/Shaders/pixelate.frag.qsb +0 -0
- data/Components/Builtins/Shaders/vignette.frag +18 -0
- data/Components/Builtins/Shaders/vignette.frag.qsb +0 -0
- data/Components/Builtins/Shaders/wave.frag +18 -0
- data/Components/Builtins/Shaders/wave.frag.qsb +0 -0
- data/Components/Builtins/Shape.qml +53 -0
- data/Components/Builtins/Skeleton.qml +78 -0
- data/Components/Builtins/Slider.qml +21 -0
- data/Components/Builtins/SmoothedAnimation.qml +3 -0
- data/Components/Builtins/Snackbar.qml +181 -0
- data/Components/Builtins/SortFilterProxyModel.qml +16 -0
- data/Components/Builtins/SoundEffect.qml +10 -0
- data/Components/Builtins/Spacer.qml +13 -0
- data/Components/Builtins/Sparkline.qml +3 -0
- data/Components/Builtins/SpinBox.qml +44 -0
- data/Components/Builtins/SplitView.qml +31 -0
- data/Components/Builtins/SpringAnimation.qml +3 -0
- data/Components/Builtins/Stack.qml +14 -0
- data/Components/Builtins/StackLayout.qml +19 -0
- data/Components/Builtins/StackView.qml +122 -0
- data/Components/Builtins/StackedBarChart.qml +3 -0
- data/Components/Builtins/StandardPaths.qml +9 -0
- data/Components/Builtins/State.qml +13 -0
- data/Components/Builtins/StateGroup.qml +11 -0
- data/Components/Builtins/Support/AnimationDriver.qml +79 -0
- data/Components/Builtins/Support/AnimationGroupDriver.qml +32 -0
- data/Components/Builtins/Support/ChartCanvas.qml +629 -0
- data/Components/Builtins/Support/ModelView3dScene.qml +292 -0
- data/Components/Builtins/Support/OptionalModuleState.js +5 -0
- data/Components/Builtins/SwipeDelegate.qml +231 -0
- data/Components/Builtins/SwipeView.qml +69 -0
- data/Components/Builtins/SwitchDelegate.qml +140 -0
- data/Components/Builtins/TabBar.qml +117 -0
- data/Components/Builtins/TabButton.qml +105 -0
- data/Components/Builtins/TableView.qml +388 -0
- data/Components/Builtins/TableViewDelegate.qml +17 -0
- data/Components/Builtins/Tabs.qml +138 -0
- data/Components/Builtins/Text.qml +24 -0
- data/Components/Builtins/TextArea.qml +59 -0
- data/Components/Builtins/TextField.qml +21 -0
- data/Components/Builtins/TextMetrics.qml +39 -0
- data/Components/Builtins/TimePicker.qml +213 -0
- data/Components/Builtins/Timer.qml +13 -0
- data/Components/Builtins/Toast.qml +213 -0
- data/Components/Builtins/Toggle.qml +19 -0
- data/Components/Builtins/ToggleSwitch.qml +22 -0
- data/Components/Builtins/ToolBar.qml +61 -0
- data/Components/Builtins/ToolButton.qml +41 -0
- data/Components/Builtins/ToolSeparator.qml +36 -0
- data/Components/Builtins/Tooltip.qml +20 -0
- data/Components/Builtins/Transition.qml +3 -0
- data/Components/Builtins/TreeView.qml +423 -0
- data/Components/Builtins/TreeViewDelegate.qml +46 -0
- data/Components/Builtins/Tumbler.qml +18 -0
- data/Components/Builtins/UniformAnimator.qml +3 -0
- data/Components/Builtins/VectorAnimation.qml +3 -0
- data/Components/Builtins/VectorImage.qml +62 -0
- data/Components/Builtins/VerticalHeader.qml +21 -0
- data/Components/Builtins/VerticalHeaderDelegate.qml +35 -0
- data/Components/Builtins/Video.qml +54 -0
- data/Components/Builtins/VideoOutput.qml +54 -0
- data/Components/Builtins/WebView.qml +57 -0
- data/Components/Builtins/WeekNumberColumn.qml +13 -0
- data/Components/Builtins/WidgetButton.qml +26 -0
- data/Components/Builtins/Window.qml +90 -0
- data/Components/Builtins/WindowCapture.qml +11 -0
- data/Components/Builtins/Wrap.qml +18 -0
- data/Components/Builtins/XAnimator.qml +3 -0
- data/Components/Builtins/YAnimator.qml +3 -0
- data/Components/README.md +45 -0
- data/ControlNode.qml +1369 -0
- data/Controls/BarIconButton.qml +27 -0
- data/Controls/BarIndicator.qml +22 -0
- data/Controls/BorderOverlay.qml +10 -0
- data/Controls/BorderSurface.qml +10 -0
- data/Controls/Button.qml +78 -0
- data/Controls/ButtonGroup.qml +19 -0
- data/Controls/ConfirmDialog.qml +37 -0
- data/Controls/CursorSurface.qml +29 -0
- data/Controls/Dropdown.qml +59 -0
- data/Controls/MultiSelect.qml +32 -0
- data/Controls/NumberField.qml +24 -0
- data/Controls/OpticalGlyph.qml +14 -0
- data/Controls/PanelActionButton.qml +10 -0
- data/Controls/PanelHero.qml +18 -0
- data/Controls/PanelKeyCatcher.qml +25 -0
- data/Controls/PanelSectionHeader.qml +11 -0
- data/Controls/PanelSeparator.qml +10 -0
- data/Controls/PanelSlider.qml +36 -0
- data/Controls/PanelToolTip.qml +13 -0
- data/Controls/SearchableDropdown.qml +11 -0
- data/Controls/TextField.qml +25 -0
- data/Controls/Toggle.qml +22 -0
- data/Controls/ToggleSwitch.qml +26 -0
- data/Controls/WidgetButton.qml +35 -0
- data/Controls/qmldir +25 -0
- data/Desktop.qml +76 -0
- data/LICENSE +22 -0
- data/README.md +112 -0
- data/Service.qml +430 -0
- data/Theme/Border.qml +22 -0
- data/Theme/Color.qml +22 -0
- data/Theme/Style.qml +47 -0
- data/Theme/Util.qml +6 -0
- data/Theme/qmldir +5 -0
- data/bin/zui +7 -0
- data/lib/zui/animation.rb +24 -0
- data/lib/zui/application.rb +327 -0
- data/lib/zui/builder.rb +725 -0
- data/lib/zui/cli.rb +91 -0
- data/lib/zui/command.rb +101 -0
- data/lib/zui/component_registry.rb +91 -0
- data/lib/zui/components.rb +262 -0
- data/lib/zui/distribution.rb +200 -0
- data/lib/zui/generator.rb +84 -0
- data/lib/zui/host.rb +123 -0
- data/lib/zui/node.rb +30 -0
- data/lib/zui/platform.rb +40 -0
- data/lib/zui/protocol.rb +29 -0
- data/lib/zui/runner.rb +37 -0
- data/lib/zui/runtime.rb +23 -0
- data/lib/zui/scheduler.rb +136 -0
- data/lib/zui/source_bundle.rb +63 -0
- data/lib/zui/state_store.rb +100 -0
- data/lib/zui/value.rb +44 -0
- data/lib/zui.rb +33 -0
- data/native/CMakeLists.txt +45 -0
- data/native/ZuiClipboard.cpp +16 -0
- data/native/ZuiClipboard.h +16 -0
- data/native/ZuiProcess.cpp +84 -0
- data/native/ZuiProcess.h +34 -0
- data/native/main.cpp +64 -0
- data/vendor/host/linux-x86_64/PROVENANCE.md +15 -0
- data/vendor/host/linux-x86_64/zui-host +0 -0
- data/vendor/host/linux-x86_64/zui-host.sha256 +1 -0
- 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,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
|
+
}
|
|
Binary file
|
|
@@ -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
|
+
}
|
|
Binary file
|
|
@@ -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
|
+
}
|
|
Binary file
|
|
@@ -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
|
+
}
|
|
Binary file
|
|
@@ -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
|
+
}
|
|
Binary file
|
|
@@ -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
|
+
}
|