From 4291b0d20e3f88122feaffb690111348bfe31e1a Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Wed, 4 Sep 2013 11:23:11 +0200 Subject: [PATCH] Revert "remove test applets" This reverts commit b983ab2c724cdc57c319dd25b28d31df85a6d91a. --- src/shell/CMakeLists.txt | 1 + src/shell/applets/CMakeLists.txt | 4 + .../testapplet/contents/config/config.qml | 29 ++ .../testapplet/contents/config/main.xml | 15 + .../testapplet/contents/ui/configGeneral.qml | 47 ++++ .../applets/testapplet/contents/ui/main.qml | 92 ++++++ src/shell/applets/testapplet/metadata.desktop | 30 ++ .../contents/images/bridge.jpg | Bin 0 -> 17134 bytes .../contents/images/surfboard.jpg | Bin 0 -> 25713 bytes .../contents/ui/ButtonsPage.qml | 76 +++++ .../contents/ui/DialogContent.qml | 66 +++++ .../contents/ui/DialogsPage.qml | 246 ++++++++++++++++ .../contents/ui/DragItem.qml | 59 ++++ .../contents/ui/DragPage.qml | 262 ++++++++++++++++++ .../contents/ui/IconsPage.qml | 144 ++++++++++ .../contents/ui/LocaleItem.qml | 24 ++ .../contents/ui/MousePage.qml | 117 ++++++++ .../contents/ui/PlasmoidPage.qml | 90 ++++++ .../contents/ui/TestMenu.qml | 53 ++++ .../contents/ui/testcomponents.qml | 101 +++++++ .../testcomponentsapplet/metadata.desktop | 31 +++ .../testshaderapplet/contents/config/main.xml | 17 ++ .../contents/images/elarun-small.png | Bin 0 -> 87370 bytes .../contents/ui/ColorExample.qml | 42 +++ .../contents/ui/ColorShower.qml | 121 ++++++++ .../contents/ui/EditorPage.qml | 157 +++++++++++ .../contents/ui/ShaderExample.qml | 59 ++++ .../testshaderapplet/contents/ui/Shadows.qml | 241 ++++++++++++++++ .../contents/ui/SimpleExample.qml | 39 +++ .../contents/ui/WaterEffect.qml | 110 ++++++++ .../contents/ui/WobbleExample.qml | 143 ++++++++++ .../testshaderapplet/contents/ui/config.qml | 30 ++ .../contents/ui/testshaderapplet.qml | 91 ++++++ .../applets/testshaderapplet/metadata.desktop | 39 +++ .../qmlpackages/desktop/contents/layout.js | 5 +- 35 files changed, 2579 insertions(+), 2 deletions(-) create mode 100644 src/shell/applets/CMakeLists.txt create mode 100644 src/shell/applets/testapplet/contents/config/config.qml create mode 100644 src/shell/applets/testapplet/contents/config/main.xml create mode 100644 src/shell/applets/testapplet/contents/ui/configGeneral.qml create mode 100644 src/shell/applets/testapplet/contents/ui/main.qml create mode 100644 src/shell/applets/testapplet/metadata.desktop create mode 100644 src/shell/applets/testcomponentsapplet/contents/images/bridge.jpg create mode 100644 src/shell/applets/testcomponentsapplet/contents/images/surfboard.jpg create mode 100644 src/shell/applets/testcomponentsapplet/contents/ui/ButtonsPage.qml create mode 100644 src/shell/applets/testcomponentsapplet/contents/ui/DialogContent.qml create mode 100644 src/shell/applets/testcomponentsapplet/contents/ui/DialogsPage.qml create mode 100644 src/shell/applets/testcomponentsapplet/contents/ui/DragItem.qml create mode 100644 src/shell/applets/testcomponentsapplet/contents/ui/DragPage.qml create mode 100644 src/shell/applets/testcomponentsapplet/contents/ui/IconsPage.qml create mode 100644 src/shell/applets/testcomponentsapplet/contents/ui/LocaleItem.qml create mode 100644 src/shell/applets/testcomponentsapplet/contents/ui/MousePage.qml create mode 100644 src/shell/applets/testcomponentsapplet/contents/ui/PlasmoidPage.qml create mode 100644 src/shell/applets/testcomponentsapplet/contents/ui/TestMenu.qml create mode 100644 src/shell/applets/testcomponentsapplet/contents/ui/testcomponents.qml create mode 100644 src/shell/applets/testcomponentsapplet/metadata.desktop create mode 100644 src/shell/applets/testshaderapplet/contents/config/main.xml create mode 100644 src/shell/applets/testshaderapplet/contents/images/elarun-small.png create mode 100644 src/shell/applets/testshaderapplet/contents/ui/ColorExample.qml create mode 100644 src/shell/applets/testshaderapplet/contents/ui/ColorShower.qml create mode 100644 src/shell/applets/testshaderapplet/contents/ui/EditorPage.qml create mode 100644 src/shell/applets/testshaderapplet/contents/ui/ShaderExample.qml create mode 100644 src/shell/applets/testshaderapplet/contents/ui/Shadows.qml create mode 100644 src/shell/applets/testshaderapplet/contents/ui/SimpleExample.qml create mode 100644 src/shell/applets/testshaderapplet/contents/ui/WaterEffect.qml create mode 100644 src/shell/applets/testshaderapplet/contents/ui/WobbleExample.qml create mode 100644 src/shell/applets/testshaderapplet/contents/ui/config.qml create mode 100644 src/shell/applets/testshaderapplet/contents/ui/testshaderapplet.qml create mode 100644 src/shell/applets/testshaderapplet/metadata.desktop diff --git a/src/shell/CMakeLists.txt b/src/shell/CMakeLists.txt index 5e2fec4b2..d29c35e4a 100644 --- a/src/shell/CMakeLists.txt +++ b/src/shell/CMakeLists.txt @@ -104,4 +104,5 @@ endif(X11_FOUND) install(TARGETS plasma-shell ${INSTALL_TARGETS_DEFAULT_ARGS}) +add_subdirectory(applets) add_subdirectory(qmlpackages) diff --git a/src/shell/applets/CMakeLists.txt b/src/shell/applets/CMakeLists.txt new file mode 100644 index 000000000..acfa3ab2c --- /dev/null +++ b/src/shell/applets/CMakeLists.txt @@ -0,0 +1,4 @@ + +plasma_install_package(testapplet org.kde.testapplet) +plasma_install_package(testcomponentsapplet org.kde.testcomponentsapplet) +plasma_install_package(testshaderapplet org.kde.testshaderapplet) diff --git a/src/shell/applets/testapplet/contents/config/config.qml b/src/shell/applets/testapplet/contents/config/config.qml new file mode 100644 index 000000000..219ae36f5 --- /dev/null +++ b/src/shell/applets/testapplet/contents/config/config.qml @@ -0,0 +1,29 @@ +/* + * Copyright 2013 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.configuration 2.0 + +ConfigModel { + ConfigCategory { + name: "General" + icon: "plasma" + source: "configGeneral.qml" + } +} diff --git a/src/shell/applets/testapplet/contents/config/main.xml b/src/shell/applets/testapplet/contents/config/main.xml new file mode 100644 index 000000000..b239f789d --- /dev/null +++ b/src/shell/applets/testapplet/contents/config/main.xml @@ -0,0 +1,15 @@ + + + + + + + + test + + + + diff --git a/src/shell/applets/testapplet/contents/ui/configGeneral.qml b/src/shell/applets/testapplet/contents/ui/configGeneral.qml new file mode 100644 index 000000000..e7a54e1d2 --- /dev/null +++ b/src/shell/applets/testapplet/contents/ui/configGeneral.qml @@ -0,0 +1,47 @@ +/* + * Copyright 2013 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents + + +Item { + id: iconsPage + width: childrenRect.width + height: childrenRect.height + implicitWidth: mainColumn.implicitWidth + implicitHeight: pageColumn.implicitHeight + + property alias cfg_Test: testConfigField.text + + Column { + id: pageColumn + anchors.fill: parent + spacing: 4 + Row { + PlasmaComponents.Label { + text: "Text Config value" + } + PlasmaComponents.TextField { + id: testConfigField + } + } + } +} diff --git a/src/shell/applets/testapplet/contents/ui/main.qml b/src/shell/applets/testapplet/contents/ui/main.qml new file mode 100644 index 000000000..2b2f1b466 --- /dev/null +++ b/src/shell/applets/testapplet/contents/ui/main.qml @@ -0,0 +1,92 @@ +/* + * Copyright 2013 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras + +Rectangle { + id: root + color: "transparent" + width: 100 + height: 100 + radius: 10 + smooth: true + property int minimumWidth: units.gridUnit * 20 + property int minimumHeight: column.implicitHeight + + property Component compactRepresentation: Component { + Rectangle { + MouseArea { + anchors.fill: parent + onClicked: plasmoid.expanded = !plasmoid.expanded + } + } + } + + PlasmaExtras.ConditionalLoader { + anchors.fill: parent + when: plasmoid.expanded + source: Component { + Item { + Column { + id: column + anchors.centerIn: parent + Text { + text: i18n("I'm an applet") + } + PlasmaComponents.Button { + text: i18n("Background") + checked: plasmoid.backgroundHints == 1 + onClicked: { + print("Background hints: " + plasmoid.backgroundHints) + if (plasmoid.backgroundHints == 0) { + plasmoid.backgroundHints = 1//TODO: make work "StandardBackground" + root.color = "transparent" + } else { + plasmoid.backgroundHints = 0//TODO: make work "NoBackground" + root.color = "darkgreen" + } + } + } + PlasmaComponents.Button { + text: i18n("Busy") + checked: plasmoid.busy + onClicked: { + plasmoid.busy = !plasmoid.busy + } + } + TextInput { + width: 100 + height: 22 + text: plasmoid.configuration.Test + onTextChanged: plasmoid.configuration.Test = text + } + Component.onCompleted: { + print("Conditional component of test applet loaded") + } + } + } + } + } + Component.onCompleted: { + print("Test Applet loaded") + } +} \ No newline at end of file diff --git a/src/shell/applets/testapplet/metadata.desktop b/src/shell/applets/testapplet/metadata.desktop new file mode 100644 index 000000000..fedec08a4 --- /dev/null +++ b/src/shell/applets/testapplet/metadata.desktop @@ -0,0 +1,30 @@ +[Desktop Entry] +Encoding=UTF-8 +Keywords= +Name=Applet Test +Name[de]=Miniprogrammtest +Name[es]=Prueba de miniaplicación +Name[fi]=Sovelmatesti +Name[fr]=Applet test +Name[mr]=एप्लेट चाचणी +Name[nl]=Test van applet +Name[pl]=Próba apletu +Name[pt]=Teste de 'Applets' +Name[pt_BR]=Teste de miniaplicativo +Name[sk]=Test Appletu +Name[sv]=Miniprogramtest +Name[uk]=Тест аплету +Name[x-test]=xxApplet Testxx +Type=Service + +X-KDE-ServiceTypes=Plasma/Applet +X-Plasma-API=declarativeappletscript +X-KDE-ParentApp= +X-KDE-PluginInfo-Author=Marco Martin +X-KDE-PluginInfo-Category= +X-KDE-PluginInfo-Email=mart@kde.org +X-KDE-PluginInfo-License=GPLv2+ +X-KDE-PluginInfo-Name=org.kde.testapplet +X-KDE-PluginInfo-Version= +X-KDE-PluginInfo-Website= +X-Plasma-MainScript=ui/main.qml diff --git a/src/shell/applets/testcomponentsapplet/contents/images/bridge.jpg b/src/shell/applets/testcomponentsapplet/contents/images/bridge.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd4bbcc8152623ca1a6a69be9e70f0b307845f57 GIT binary patch literal 17134 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 literal 0 HcmV?d00001 diff --git a/src/shell/applets/testcomponentsapplet/contents/images/surfboard.jpg b/src/shell/applets/testcomponentsapplet/contents/images/surfboard.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a571aac1ebb44de3498f71ad756bb68ab78570f GIT binary patch literal 25713 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 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +// ButtonsPage + +PlasmaComponents.Page { + id: plasmoidPage + anchors { + fill: parent + margins: _s + } + Column { + spacing: _s/2 + anchors.fill: parent + PlasmaExtras.Heading { + level: 1 + width: parent.width + text: "Buttons" + } + Row { + height: _h + spacing: _s + PlasmaComponents.Button { + text: "Button" + iconSource: "call-start" + } + PlasmaComponents.ToolButton { + text: "ToolButton" + iconSource: "call-stop" + } + } + Row { + height: _h + spacing: _s + PlasmaComponents.RadioButton { + id: radio + text: "RadioButton" + //iconSource: "call-stop" + onCheckedChanged: if (checked) tfield.forceActiveFocus() + } + PlasmaComponents.TextField { + id: tfield + enabled: radio.checked + text: "input here" + clearButtonShown: true + } + } +// PlasmaComponents.TextArea { +// width: parent.width +// height: _h*2 +// } + } +} + diff --git a/src/shell/applets/testcomponentsapplet/contents/ui/DialogContent.qml b/src/shell/applets/testcomponentsapplet/contents/ui/DialogContent.qml new file mode 100644 index 000000000..9fed86d33 --- /dev/null +++ b/src/shell/applets/testcomponentsapplet/contents/ui/DialogContent.qml @@ -0,0 +1,66 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 +import QtQuick.Window 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +// DialogContent + +Item { + id: dialogsPage + width: 300 + height: 200 + signal closeMe() + Rectangle { + color: "green" + //anchors.margins: 24 + opacity: 0 + anchors.fill: parent + } + Column { + anchors.fill: parent + spacing: 12 + PlasmaExtras.Title { + id: tx + text: "Test Dialog" + } + LocaleItem { + id: localeItem + anchors { left: parent.left; right: parent.right; top: tx.bottom; } + } + PlasmaComponents.TextArea { + anchors { left: parent.left; right: parent.right; top: localeItem.bottom; } + width: parent.width + height: 80 + } + PlasmaComponents.Button { + id: thanks + anchors { horizontalCenter: parent.horizontalCenter; bottom: parent.bottom; bottomMargin: 24; } + iconSource: "dialog-ok" + text: "Thanks." + //onClicked: dialogsPage.parent.visible = false; + onClicked: closeMe() + } + } +} + diff --git a/src/shell/applets/testcomponentsapplet/contents/ui/DialogsPage.qml b/src/shell/applets/testcomponentsapplet/contents/ui/DialogsPage.qml new file mode 100644 index 000000000..27c006d4d --- /dev/null +++ b/src/shell/applets/testcomponentsapplet/contents/ui/DialogsPage.qml @@ -0,0 +1,246 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 +import QtQuick.Window 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +// DialogsPage + +PlasmaComponents.Page { + id: dialogsPage + anchors { + fill: parent + margins: _s + } + Column { + spacing: _s/2 + anchors.fill: parent + PlasmaExtras.Title { + width: parent.width + text: "Dialogs" + } + Row { + height: _h + spacing: _s + PlasmaComponents.Button { + id: radio + checkable: true + iconSource: "dialog-ok" + text: "Window" + } + Window { + title: radio.text + id: qWindow + visible: radio.checked + width: childrenRect.width + height: childrenRect.height + color: Qt.rgba(0,0,0,0) + DialogContent { + id: dContent + onCloseMe: { + qWindow.visible = false + } + } + } + + PlasmaComponents.Label { + text: qWindow.visible ? "shown" : "hidden" + } + } + Row { + height: _h + spacing: _s + PlasmaComponents.Button { + text: "Core.Dialog" + iconSource: "dialog-ok-apply" + checkable: true + //onCheckedChanged: pcDialog.visible = checked + onCheckedChanged: pcDialog.visible = checked + } + PlasmaComponents.Label { + text: pcDialog.visible ? "shown" : "hidden" + } + + PlasmaCore.Dialog { + id: pcDialog + //windowFlags: Qt.Popup + visualParent: dialogsPage + //mainItem: dContent2 + color: Qt.rgba(0,0,0,0) + + mainItem: DialogContent { + id: dContent2 + onCloseMe: pcDialog.visible = false + } + } + } + Row { + height: _h + spacing: _s + PlasmaComponents.Button { + text: "Dialog" + iconSource: "dialog-ok-apply" + checkable: true + onCheckedChanged: { + if (checked) { + pcompDialog.open(); + } else { + pcompDialog.close(); + } + } + } + PlasmaComponents.Label { + text: pcompDialog.visible ? "shown" : "hidden" + } + + PlasmaComponents.Dialog { + id: pcompDialog + //windowFlags: Qt.Popup + visualParent: root + content: DialogContent { + id: dContent3 + onCloseMe: pcompDialog.close() + } + buttons: PlasmaComponents.ButtonRow { + PlasmaComponents.Button { + text: "Close"; + onClicked: { + print("Closing..."); + pcompDialog.close() + } + } + PlasmaComponents.Button { + text: "Accept"; + onClicked: { + print("Accepting..."); + pcompDialog.accept(); + pcompDialog.close(); + } + } + } + } + } + Row { + height: _h + spacing: _s + PlasmaComponents.Button { + text: "QueryDialog" + iconSource: "dialog-ok-apply" + checkable: true + onCheckedChanged: { + if (checked) { + queryDialog.open(); + } else { + queryDialog.close(); + } + } + } + PlasmaComponents.Label { + text: queryDialog.visible ? "shown" : "hidden" + } + + PlasmaComponents.QueryDialog { + id: queryDialog + //windowFlags: Qt.Popup + visualParent: root + titleText: "Fruit Inquiry" + message: "Would you rather have apples or oranges?" + acceptButtonText: "Apples" + rejectButtonText: "Oranges" + onButtonClicked: { + print("hey"); + queryDialog.close(); + } + } + } + PlasmaComponents.ButtonRow { + id: buttonRow + spacing: _s/2 + PlasmaComponents.Button { + width: _h + text: "Top" + onClicked: { + locationDialog.location = PlasmaCore.Types.TopEdge; + locationDialog.visible = !locationDialog.visible + } + } + PlasmaComponents.Button { + text: "Bottom" + width: _h + onClicked: { + locationDialog.location = PlasmaCore.Types.BottomEdge; + locationDialog.visible = !locationDialog.visible + } + } + PlasmaComponents.Button { + text: "Left" + width: _h + onClicked: { + locationDialog.location = PlasmaCore.Types.LeftEdge; + locationDialog.visible = !locationDialog.visible + } + } + PlasmaComponents.Button { + text: "Right" + width: _h + onClicked: { + locationDialog.location = PlasmaCore.Types.RightEdge; + locationDialog.visible = !locationDialog.visible + } + } + PlasmaComponents.Button { + text: "Desktop" + width: _h + onClicked: { + locationDialog.location = PlasmaCore.Types.Desktop; + locationDialog.visible = !locationDialog.visible + } + } + PlasmaComponents.Button { + text: "Floating" + width: _h + onClicked: { + locationDialog.location = PlasmaCore.Types.Floating; + locationDialog.visible = !locationDialog.visible + } + } + PlasmaComponents.Button { + text: "FullScreen" + width: _h + onClicked: { + locationDialog.location = PlasmaCore.Types.FullScreen; + locationDialog.visible = !locationDialog.visible + } + } + } + PlasmaCore.Dialog { + id: locationDialog + visualParent: buttonRow + mainItem: DialogContent { + id: dContent4 + onCloseMe: locationDialog.visible = false + } + } + } +} + diff --git a/src/shell/applets/testcomponentsapplet/contents/ui/DragItem.qml b/src/shell/applets/testcomponentsapplet/contents/ui/DragItem.qml new file mode 100644 index 000000000..23f4a2f35 --- /dev/null +++ b/src/shell/applets/testcomponentsapplet/contents/ui/DragItem.qml @@ -0,0 +1,59 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +import org.kde.draganddrop 2.0 as DragAndDrop + + +//Item { +PlasmaComponents.ListItem { + + width: parent.width + //height: _h * 1.5 + property alias icon: itemIcon.source + property alias text: label.text + + PlasmaCore.IconItem { + id: itemIcon + + width: _h + height: width + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: _h/2 + } + + PlasmaComponents.Label { + id: label + + anchors { + verticalCenter: parent.verticalCenter + left: itemIcon.right + leftMargin: _h/2 + right: parent.right + rightMargin: _h/2 + } + + } +} diff --git a/src/shell/applets/testcomponentsapplet/contents/ui/DragPage.qml b/src/shell/applets/testcomponentsapplet/contents/ui/DragPage.qml new file mode 100644 index 000000000..e3d2cdc45 --- /dev/null +++ b/src/shell/applets/testcomponentsapplet/contents/ui/DragPage.qml @@ -0,0 +1,262 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +import org.kde.draganddrop 2.0 as DragAndDrop + +// MousePage + +PlasmaComponents.Page { + id: dragPage + + property int _h: 48 + property bool isDragging: false + + + anchors { + fill: parent + margins: _s + } + + PlasmaExtras.Title { + id: dlabel + + anchors { left: parent.left; right: parent.right; top: parent.top; } + + text: "Drag & Drop" + } + + Column { + id: dragCol + + width: (parent.width-_h)/2 + height: parent.height + anchors { + left: parent.left; + top: parent.top; + topMargin: itemHeight/2 + + } + + spacing: _h/4 + + + property int itemHeight: _h*1.5 + + DragItem { + text: "Image and URL" + icon: "image-png" + height: parent.itemHeight + DragAndDrop.DragArea { + objectName: "imageandurl" + anchors { fill: parent; } + //delegateImage: "akonadi" + mimeData.url: "http://plasma.kde.org" + onDragStarted: { + isDragging = true; + print(" drag started for " + objectName); + ooo.text = objectName + } + onDrop: { + isDragging = false; + print(" item dropped " + objectName); + ooo.text = objectName + } + //Rectangle { anchors.fill: parent; color: "blue"; opacity: 0.4; } + } + } + DragItem { + text: "Delegate Image" + icon: "image-png" + height: parent.itemHeight + DragAndDrop.DragArea { + objectName: "image" + anchors { fill: parent; } + //delegateImage: "akonadi" + //mimeData.url: "http://plasma.kde.org" + onDragStarted: { + isDragging = true; + print(" drag started for " + objectName); + ooo.text = objectName + } + onDrop: { + isDragging = false; + print(" item dropped " + objectName); + ooo.text = objectName + } + //Rectangle { anchors.fill: parent; color: "green"; opacity: 0.4; } + } + } + DragItem { + text: "HTML" + icon: "text-html" + height: parent.itemHeight + DragAndDrop.DragArea { + objectName: "html" + anchors { fill: parent; } + mimeData.html: "One Two Three Four Five " + onDragStarted: { + isDragging = true; + print(" drag started for " + objectName); + ooo.text = objectName + } + onDrop: { + isDragging = false; + print(" item dropped " + objectName); + ooo.text = objectName + } + } + } + DragItem { + text: "Color" + icon: "preferences-color" + height: parent.itemHeight + DragAndDrop.DragArea { + objectName: "color" + anchors { fill: parent; } + mimeData.color: "orange" + onDragStarted: { + isDragging = true; + print(" drag started for " + objectName); + ooo.text = objectName + } + onDrop: { + isDragging = false; + print(" item dropped " + objectName); + ooo.text = objectName + //mimeData. + } + } + } + DragItem { + text: "Lots of Stuff" + icon: "ksplash" + height: parent.itemHeight + DragAndDrop.DragArea { + id: dragArea2 + objectName: "stuff" +// width: parent.width / 2 +// height: dropArea.height / 2 + anchors.fill: parent + + mimeData.text: "Clownfish" + mimeData.html: "

Swimming in a Sea of Cheese

Primus->perform();

" + mimeData.color: "darkred" + mimeData.url: "http://plasma.kde.org" + mimeData.urls: ["http://planetkde.org", "http://fsfe.org", "http://techbase.kde.org", "http://qt-project.org"] + + //Rectangle { anchors.fill: parent; color: "yellow"; opacity: 0.6; } + + onDragStarted: { + isDragging = true; + print(" drag started for " + objectName); + ooo.text = objectName + } + onDrop: { + isDragging = false; + print(" item dropped " + objectName); + ooo.text = objectName + } + } + } + PlasmaComponents.Label { + id: ooo + } + } + DragAndDrop.DropArea { + id: dropArea + //width: parent.width- / 2 + //visible: false + anchors { + right: parent.right; + left: dragCol.right; + bottom: parent.bottom; + top: parent.top; margins: _h/2 + + } + + PlasmaComponents.ListItem { + id: dropHightlight + anchors.fill: parent + opacity: 0 + + PropertyAnimation { properties: "opacity"; easing.type: Easing.Linear; duration: 2000; } + } + + Rectangle { id: clr; anchors.fill: parent; color: "transparent"; opacity: color != "transparent" ? 1 : 0; } + + PlasmaComponents.Label { + id: ilabel + font.pointSize: _h / 2 + text: "Drop here." + opacity: isDragging ? 0.7 : 0 + anchors.centerIn: parent + horizontalAlignment: Text.AlignCenter + PropertyAnimation { properties: "opacity"; easing.type: Easing.Linear; duration: 2000; } + } + + PlasmaComponents.Label { + id: slabel + font.pointSize: _h / 4 + //text: "Drop here." + //opacity: isDragging ? 1 : 0 + //onTextChanged: print("droparea changed to " + text) + anchors.top: parent.top + anchors.right: parent.right + anchors.left: parent.left + //horizontalAlignment: Text.AlignCenter + } + + onDragEnter: { +// slabel.text = "drop item here"; + dropHightlight.opacity = 1; + } + onDragLeave: { +// slabel.text = "drop left"; + dropHightlight.opacity = 0; + } + onDrop: { + var txt = event.mimeData.html; + txt += event.mimeData.text; + if (event.mimeData.url != "") { + txt += "
Url: " + event.mimeData.url; + } + var i = 0; + var u; + for (u in event.mimeData.urls) { + txt += "
Url " + i + " : " + event.mimeData.urls[i]; + i++; + } +// print("COLOR: " + event.mimeData.color); + if (event.mimeData.hasColor()) { + clr.color = event.mimeData.color; + } else { + clr.color = "transparent"; + } + slabel.text = txt + dropHightlight.opacity = 0.5; + } + } +} + diff --git a/src/shell/applets/testcomponentsapplet/contents/ui/IconsPage.qml b/src/shell/applets/testcomponentsapplet/contents/ui/IconsPage.qml new file mode 100644 index 000000000..794c43080 --- /dev/null +++ b/src/shell/applets/testcomponentsapplet/contents/ui/IconsPage.qml @@ -0,0 +1,144 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +// IconTab + +PlasmaComponents.Page { + id: iconsPage + anchors { + fill: parent + margins: _s + } + Column { + anchors.fill: parent + spacing: _s + + PlasmaExtras.Title { + width: parent.width + elide: Text.ElideRight + text: "Icons" + } + PlasmaComponents.Label { + text: "iconSizes.small : " + theme.iconSizes.small + + ", iconSizes.desktop: " + theme.iconSizes.desktop + + ",
iconSizes.toolbar: " + theme.iconSizes.toolbar + + ", iconSizes.dialog : " + theme.iconSizes.dialog + + } + Flow { + //height: _h + width: parent.width + spacing: _s + + PlasmaCore.IconItem { + source: "configure" + width: _h + height: width + } + PlasmaCore.IconItem { + source: "dialog-ok" + width: _h + height: width + } + PlasmaCore.IconItem { + source: "resize-tr2bl" + width: _h + height: width + } + PlasmaCore.IconItem { + source: "akonadi" + width: _h + height: width + } + PlasmaCore.IconItem { + source: "clock" + width: _h + height: width + } + QtExtras.QIconItem { + icon: "preferences-desktop-icons" + width: _h + height: width + } + + } + PlasmaExtras.Heading { + level: 2 + text: "ToolTip" + } + + Row { + spacing: _s + PlasmaCore.IconItem { + id: akonadiIcon + objectName: "akonadiIcon" + source: "akonadi" + width: height + height: _h*2 + //anchors.horizontalCenter: parent.horizontalCenter + Rectangle { color: "orange"; opacity: 0.3; anchors.fill: parent; } + PlasmaCore.ToolTip { + anchors.fill: parent + target: akonadiIcon + iconSource: "klipper" + mainText: "Fish sighted in the wild, in the wild, a fish was seen." + subText: "A mean-looking grouper swam by." + } + } + Image { + objectName: "bridgeimage" + height: _h*2 + width: height + fillMode: Image.PreserveAspectFit + source: "../images/bridge.jpg" + PlasmaCore.ToolTip { + anchors.fill: parent + image: parent.source + mainText: "Bridge" + subText: "Waalbrug." + } + } + Image { + objectName: "surfboardimage" + height: _h*2 + width: height + fillMode: Image.PreserveAspectFit + source: "../images/surfboard.jpg" + PlasmaCore.ToolTip { + anchors.fill: parent + image: parent.source + mainComponent: Component { + PlasmaComponents.Label { + text: "Nijmegen North Beach" + anchors.centerIn: parent + } + } + //subText: "A surfboard on the beach.
The photo shows the Waal river's north beach, \ + //across the water from Nijmegen, Netherlands. It was taken during the summer festivals a few years back." + } + } + } + } +} diff --git a/src/shell/applets/testcomponentsapplet/contents/ui/LocaleItem.qml b/src/shell/applets/testcomponentsapplet/contents/ui/LocaleItem.qml new file mode 100644 index 000000000..d8d29e1e3 --- /dev/null +++ b/src/shell/applets/testcomponentsapplet/contents/ui/LocaleItem.qml @@ -0,0 +1,24 @@ +import QtQuick 2.0 +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.locale 2.0 + + +Item { + width: childrenRect.width + height: childrenRect.height + + Locale { + id: locale + } + Column { + PlasmaComponents.Label { + text: "Locale Time Bindings" + } + PlasmaComponents.Label { + text: locale.formatLocaleTime( "11:12:13", Locale.TimeWithoutAmPm|Locale.TimeWithoutSeconds ) + } + PlasmaComponents.Label { + text: locale.formatDateTime("2013-04-12", Locale.ShortDate ,Locale.Seconds ) + } + } +} \ No newline at end of file diff --git a/src/shell/applets/testcomponentsapplet/contents/ui/MousePage.qml b/src/shell/applets/testcomponentsapplet/contents/ui/MousePage.qml new file mode 100644 index 000000000..3b7b22e72 --- /dev/null +++ b/src/shell/applets/testcomponentsapplet/contents/ui/MousePage.qml @@ -0,0 +1,117 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +// MousePage + +PlasmaComponents.Page { + id: mousePage + anchors { + fill: parent + margins: _s + } + PlasmaExtras.Title { + id: mellabel + text: "MouseEventListener" + anchors { left: parent.left; right: parent.right; top: parent.top } + } + QtExtras.MouseEventListener { + id: mel + hoverEnabled: true + anchors { left: parent.left; right: parent.right; top: mellabel.bottom; bottom: parent.bottom; } + /* + void pressed(KDeclarativeMouseEvent *mouse); + void positionChanged(KDeclarativeMouseEvent *mouse); + void released(KDeclarativeMouseEvent *mouse); + void clicked(KDeclarativeMouseEvent *mouse); + void pressAndHold(KDeclarativeMouseEvent *mouse); + void wheelMoved(KDeclarativeWheelEvent *wheel); + void containsMouseChanged(bool containsMouseChanged); + void hoverEnabledChanged(bool hoverEnabled); + */ + onPressed: { + print("Pressed"); + melstatus.text = "pressed"; + } + onPositionChanged: { + print("positionChanged: " + mouse.x + "," + mouse.y); + } + onReleased: { + print("Released"); + melstatus.text = "Released"; + } + onPressAndHold: { + print("pressAndHold"); + melstatus.text = "pressAndHold"; + } + onClicked: { + print("Clicked"); + melstatus.text = "clicked"; + } + onWheelMoved: { + print("Wheel: " + wheel.delta); + } + onContainsMouseChanged: { + print("Contains mouse: " + containsMouse); + } + + MouseArea { + //target: mel + anchors.fill: parent + onPressed: PlasmaExtras.DisappearAnimation { targetItem: bgImage } + onReleased: PlasmaExtras.AppearAnimation { targetItem: bgImage } + } + Image { + id: bgImage + source: "image://appbackgrounds/standard" + fillMode: Image.Tile + anchors.fill: parent + asynchronous: true +// opacity: mel.containsMouse ? 1 : 0.2 +// Behavior on opacity { PropertyAnimation {} } + } + Column { + //width: parent.width + spacing: _s + anchors.fill: parent + PlasmaComponents.Button { + text: "Button" + iconSource: "call-start" + } + PlasmaComponents.ToolButton { + text: "ToolButton" + iconSource: "call-stop" + } + PlasmaComponents.RadioButton { + text: "RadioButton" + //iconSource: "call-stop" + } + PlasmaComponents.Label { + id: melstatus + } + } + + } +} + diff --git a/src/shell/applets/testcomponentsapplet/contents/ui/PlasmoidPage.qml b/src/shell/applets/testcomponentsapplet/contents/ui/PlasmoidPage.qml new file mode 100644 index 000000000..39e341825 --- /dev/null +++ b/src/shell/applets/testcomponentsapplet/contents/ui/PlasmoidPage.qml @@ -0,0 +1,90 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +// PlasmoidPage + +PlasmaComponents.Page { + id: plasmoidPage + anchors { + fill: parent + margins: _s + } + Column { + anchors.centerIn: parent + spacing: _s + PlasmaExtras.Heading { + level: 2 + text: "I'm an applet" + } + + PlasmaComponents.ButtonColumn { + PlasmaComponents.RadioButton { + text: "No background" + onClicked: { + if (checked) plasmoid.backgroundHints = 0; + } + } + PlasmaComponents.RadioButton { + text: "Default background" + checked: true + onClicked: { + if (checked) plasmoid.backgroundHints = 1; + } + } + PlasmaComponents.RadioButton { + text: "Translucent background" + onClicked: { + if (checked) plasmoid.backgroundHints = 2; + } + } + } + + PlasmaComponents.Button { + height: theme.iconSizes.desktop + text: "Busy" + checked: plasmoid.busy + onClicked: { + plasmoid.busy = !plasmoid.busy + } + } + + PlasmaComponents.Button { + id: ctxButton + height: theme.iconSizes.desktop + text: "Context Menu" + Loader { + id: menuLoader + } + onClicked: { + if (menuLoader.source == "") { + menuLoader.source = "TestMenu.qml" + } else { + //menuLoader.source = "" + } + menuLoader.item.open(0, height); + } + } + } +} + diff --git a/src/shell/applets/testcomponentsapplet/contents/ui/TestMenu.qml b/src/shell/applets/testcomponentsapplet/contents/ui/TestMenu.qml new file mode 100644 index 000000000..b84197b49 --- /dev/null +++ b/src/shell/applets/testcomponentsapplet/contents/ui/TestMenu.qml @@ -0,0 +1,53 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +// PlasmoidPage + +PlasmaComponents.Menu { + id: testMenu + + PlasmaComponents.MenuItem { + text: "Red Snapper" + icon: "dragonplayer" + onClicked: print(" Clicked on : " + text) + } + + PlasmaComponents.MenuItem { + text: "Eel" + icon: "kthesaurus" + onClicked: print(" Clicked on : " + text) + } + + PlasmaComponents.MenuItem { + text: "White Tip Reef Shark" + icon: "kmag" + onClicked: print(" Clicked on : " + text) + } + + Component.onCompleted:{ + print("TestMenu.qml served .. opening"); + + } +} + diff --git a/src/shell/applets/testcomponentsapplet/contents/ui/testcomponents.qml b/src/shell/applets/testcomponentsapplet/contents/ui/testcomponents.qml new file mode 100644 index 000000000..04a7cf6f9 --- /dev/null +++ b/src/shell/applets/testcomponentsapplet/contents/ui/testcomponents.qml @@ -0,0 +1,101 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +Item { + id: root + width: 100 + height: 100 + clip: true + property int minimumWidth: units.gridUnit * 20 + property int minimumHeight: units.gridUnit * 30 + + property int _s: theme.iconSizes.small + property int _h: theme.iconSizes.desktop + + PlasmaCore.DataSource { + id: dataSource + + } + + PlasmaComponents.TabBar { + id: tabBar + + anchors { + left: parent.left + right: parent.right + top: parent.top + } + height: _h + + PlasmaComponents.TabButton { tab: dragPage; iconSource: "preferences-desktop-mouse"} + PlasmaComponents.TabButton { tab: iconsPage; iconSource: "preferences-desktop-icons"} + PlasmaComponents.TabButton { tab: dialogsPage; iconSource: "preferences-system-windows"} + PlasmaComponents.TabButton { tab: buttonsPage; iconSource: "preferences-desktop-theme"} + PlasmaComponents.TabButton { tab: plasmoidPage; iconSource: "plasma"} + PlasmaComponents.TabButton { tab: mousePage; iconSource: "preferences-desktop-mouse"} + } + + PlasmaComponents.TabGroup { + id: tabGroup + anchors { + left: parent.left + right: parent.right + top: tabBar.bottom + bottom: parent.bottom + } + + //currentTab: tabBar.currentTab + + DragPage { + id: dragPage + } + IconsPage { + id: iconsPage + } + DialogsPage { + id: dialogsPage + } + + ButtonsPage { + id: buttonsPage + } + + + PlasmoidPage { + id: plasmoidPage + } + + MousePage { + id: mousePage + } + + } + + Component.onCompleted: { + print("Components Test Applet loaded"); + //dataSource.engine = "org.kde.foobar" +// tabGroup.currentTab = mousePage; + } +} \ No newline at end of file diff --git a/src/shell/applets/testcomponentsapplet/metadata.desktop b/src/shell/applets/testcomponentsapplet/metadata.desktop new file mode 100644 index 000000000..965086598 --- /dev/null +++ b/src/shell/applets/testcomponentsapplet/metadata.desktop @@ -0,0 +1,31 @@ +[Desktop Entry] +Encoding=UTF-8 +Keywords= +Name=Components Test +Name[de]=Komponententest +Name[es]=Prueba de componentes +Name[fi]=Komponenttitesti +Name[fr]=Test des composants +Name[mr]=घटक चाचणी +Name[nl]=Test van componenten +Name[pl]=Próba składników +Name[pt]=Teste de Componentes +Name[pt_BR]=Teste de componentes +Name[sk]=Test komponentov +Name[sv]=Komponenttest +Name[uk]=Тестування компонентів +Name[x-test]=xxComponents Testxx +Type=Service +Icon=plasma + +X-KDE-ServiceTypes=Plasma/Applet +X-Plasma-API=declarativeappletscript +X-KDE-ParentApp= +X-KDE-PluginInfo-Author=Sebastian Kügler +X-KDE-PluginInfo-Category=Development Tools +X-KDE-PluginInfo-Email=sebas@kde.org +X-KDE-PluginInfo-License=GPLv2+ +X-KDE-PluginInfo-Name=org.kde.testcomponentsapplet +X-KDE-PluginInfo-Version= +X-KDE-PluginInfo-Website= +X-Plasma-MainScript=ui/testcomponents.qml diff --git a/src/shell/applets/testshaderapplet/contents/config/main.xml b/src/shell/applets/testshaderapplet/contents/config/main.xml new file mode 100644 index 000000000..bac72e582 --- /dev/null +++ b/src/shell/applets/testshaderapplet/contents/config/main.xml @@ -0,0 +1,17 @@ + + + + + + + + 60 + 20 + 150 + + + + diff --git a/src/shell/applets/testshaderapplet/contents/images/elarun-small.png b/src/shell/applets/testshaderapplet/contents/images/elarun-small.png new file mode 100644 index 0000000000000000000000000000000000000000..59a208db8ee7628ead1712c34114403de2505661 GIT binary patch literal 87370 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 literal 0 HcmV?d00001 diff --git a/src/shell/applets/testshaderapplet/contents/ui/ColorExample.qml b/src/shell/applets/testshaderapplet/contents/ui/ColorExample.qml new file mode 100644 index 000000000..6c2b0835d --- /dev/null +++ b/src/shell/applets/testshaderapplet/contents/ui/ColorExample.qml @@ -0,0 +1,42 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +ShaderExample { + + pageName: "Colors" + pageDescription: "" + + ShaderEffect { + anchors.fill: parent + anchors.topMargin: 48 + opacity: 0.2 + + fragmentShader: { + "uniform mat4 gl_ModelViewMatrix;" + + "uniform mat4 gl_ProjectionMatrix;" + + //"attribute vec4 gl_Vertex;" + + "void main(void) {" + + " gl_FragColor = vec4(1.0, 0.0, 0.0, 0.3); " + + " gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex; " + + "}" + } + } +} + diff --git a/src/shell/applets/testshaderapplet/contents/ui/ColorShower.qml b/src/shell/applets/testshaderapplet/contents/ui/ColorShower.qml new file mode 100644 index 000000000..285344c95 --- /dev/null +++ b/src/shell/applets/testshaderapplet/contents/ui/ColorShower.qml @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Particles 2.0 + +ShaderExample { + + pageName: "Particles" + pageDescription: "Fun rainbow colors using a fragment shader" + + Item { + anchors.fill: parent + clip: true + anchors.margins: -_s + ParticleSystem { + id: psItem + //anchors.fill: parent + x: parent.width / 2 + y: parent.height / 2 + width: parent.width + height: parent.height +// clip: true + anchors.topMargin: 48 + //anchors.leftMargin: 42 + + Emitter { + emitRate: 400 + lifeSpan: 8000 + size: 24 + sizeVariation: 16 + velocity: PointDirection {x: psItem.width/20; y: psItem.height/20;} + acceleration: PointDirection {x: -psItem.width/40; y: -psItem.height/40; xVariation: -psItem.width/20; yVariation: -psItem.width/20} + } + + CustomParticle { + vertexShader:" + uniform lowp float qt_Opacity; + varying lowp float fFade; + varying highp vec2 fPos; + + void main() { + qt_TexCoord0 = qt_ParticleTex; + highp float size = qt_ParticleData.z; + highp float endSize = qt_ParticleData.w; + + highp float t = (qt_Timestamp - qt_ParticleData.x) / qt_ParticleData.y; + + highp float currentSize = mix(size, endSize, t * t); + + if (t < 0. || t > 1.) + currentSize = 0.; + + highp vec2 pos = qt_ParticlePos + - currentSize / 2. + currentSize * qt_ParticleTex // adjust size + + qt_ParticleVec.xy * t * qt_ParticleData.y // apply velocity vector.. + + 0.5 * qt_ParticleVec.zw * pow(t * qt_ParticleData.y, 2.); + + gl_Position = qt_Matrix * vec4(pos.x, pos.y, 0, 1); + + highp float fadeIn = min(t * 20., 1.); + highp float fadeOut = 1. - max(0., min((t - 0.75) * 4., 1.)); + + fFade = fadeIn * fadeOut * qt_Opacity; + fPos = vec2(pos.x/320., pos.y/480.); + } + " + //! [0] + fragmentShader: " + varying highp vec2 fPos; + varying lowp float fFade; + varying highp vec2 qt_TexCoord0; + void main() {//*2 because this generates dark colors mostly + highp vec2 circlePos = qt_TexCoord0*2.0 - vec2(1.0,1.0); + highp float dist = length(circlePos); + highp float circleFactor = max(min(1.0 - dist, 1.0), 0.0); + gl_FragColor = vec4(fPos.x*2.0 - fPos.y, fPos.y*2.0 - fPos.x, fPos.x*fPos.y*2.0, 0.0) * circleFactor * fFade; + }" + //! [0] + + } + } + } +} \ No newline at end of file diff --git a/src/shell/applets/testshaderapplet/contents/ui/EditorPage.qml b/src/shell/applets/testshaderapplet/contents/ui/EditorPage.qml new file mode 100644 index 000000000..6a5603e97 --- /dev/null +++ b/src/shell/applets/testshaderapplet/contents/ui/EditorPage.qml @@ -0,0 +1,157 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +// ButtonsPage + +PlasmaComponents.Page { + id: editorPage + + property string shader + property alias shaderText: editor.text + property string pageName: "Editor" + property string icon: "accessories-text-editor" + + anchors { + fill: parent + margins: _s + } + + Image { + id: imageItem + anchors.fill: parent + //source: "../images/elarun-small.png" + } + + ShaderEffectSource { + id: effectSource + sourceItem: imageItem + //hideSource: hideSourceCheckbox.checked + hideSource: true + } + + ShaderEffect { + id: mainShader + anchors.fill: editorPage + property variant source: effectSource + property real f: 0 + property real f2: 0 + property int intensity: 1 + smooth: true + } + PlasmaComponents.ToolButton { + iconSource: "dialog-close" + width: _h + height: width + visible: !(mainShader.fragmentShader == "" && mainShader.vertexShader == "") + anchors { top: parent.top; right: parent.right; } + onClicked: { + mainShader.fragmentShader = ""; + mainShader.vertexShader = ""; + editorPage.shader = "" + vertexPage.shader = "" + } + } + + + PlasmaExtras.Heading { + id: heading + level: 1 + anchors { + top: parent.top; + left: parent.left + right: parent.right + } + text: pageName + } + PlasmaComponents.ButtonColumn { + anchors { + right: parent.right + top: heading.top + } + PlasmaComponents.RadioButton { + id: fragmentRadio + text: "Fragment / Pixel Shader" + } + PlasmaComponents.RadioButton { + text: "Vertex Shader" + } + } + +// PlasmaComponents.TextArea { +// id: editor +// anchors { +// top: heading.bottom; +// topMargin: _s +// left: parent.left +// right: parent.right +// bottom: applyButton.top +// bottomMargin: _s +// +// } +// // text: { "void main(void) {\ +// // gl_FragColor = vec4(1.0, 0.0, 0.0, 0.3);\ +// // }" +// // } +// text:" +// void main(void) { +// gl_FragColor = vec4(0.2, 0.8, 0.6, 0.3); +// } +// " +// +// // width: parent.width +// // parent.height-height: _h*2 +// } + + PlasmaComponents.Button { + id: applyButton + text: "Upload Shader" + onClicked: { + shader = editor.text + if (fragmentRadio.checked) { + print("Uploading new fragment shader: \n" + shader); + mainShader.fragmentShader = shader + } else { + print("Uploading new vertex shader: \n" + shader); + mainShader.vertexShader = shader; + } + } + + anchors { + right: parent.right + bottom: parent.bottom + + } + + + + } +// PlasmaComponents.CheckBox { +// id: hideSourceCheckbox +// text: "Hide Source Item" +// anchors { bottom: parent.bottom; left: parent.left; margins: _s; } +// onCheckedChanged: effectSource.hideSource = checked +// } + +} diff --git a/src/shell/applets/testshaderapplet/contents/ui/ShaderExample.qml b/src/shell/applets/testshaderapplet/contents/ui/ShaderExample.qml new file mode 100644 index 000000000..9f25a4535 --- /dev/null +++ b/src/shell/applets/testshaderapplet/contents/ui/ShaderExample.qml @@ -0,0 +1,59 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +// VertexPage + +PlasmaComponents.Page { + id: examplesPage + + //property string shader + property string pageName: "Shader Examples" + property string pageDescription: "Shader Examples" + property string icon: "weather-clear" + + anchors { + fill: parent + margins: _s + } + + PlasmaExtras.Heading { + id: heading + level: 1 + anchors { + top: parent.top; + left: parent.left + right: parent.right + } + text: pageName + } + PlasmaComponents.Label { + anchors { + top: heading.bottom; + left: parent.left; + right: parent.right; + } + text: pageDescription + } +} \ No newline at end of file diff --git a/src/shell/applets/testshaderapplet/contents/ui/Shadows.qml b/src/shell/applets/testshaderapplet/contents/ui/Shadows.qml new file mode 100644 index 000000000..05929ad60 --- /dev/null +++ b/src/shell/applets/testshaderapplet/contents/ui/Shadows.qml @@ -0,0 +1,241 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +//import QtQuick.Particles 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras + +ShaderExample { + + pageName: "Shadows" + pageDescription: "" + Grid { + id: cfgrid + columns: 2 + + anchors.top: parent.top + anchors.right: parent.right + width: parent.width * 0.6 + height: 96 + spacing: 6 + columnSpacing: 12 + PlasmaComponents.Label { + text: "Distance:"; + width: parent.width * 0.5; + horizontalAlignment: Text.AlignRight + elide: Text.ElideRight + } + PlasmaComponents.Slider { + width: parent.width * 0.4 + id: distanceSlider + stepSize: 1 + minimumValue: 0 + maximumValue: 25 + value: 8 + } + + PlasmaComponents.Label { + text: "Opacity:"; + horizontalAlignment: Text.AlignRight + elide: Text.ElideRight + width: parent.width * 0.5; + } + PlasmaComponents.Slider { + width: parent.width * 0.4 + id: opacitySlider +// stepSize: 250 + minimumValue: 0 + maximumValue: 1.0 + stepSize: 0.05 + value: 0.4 + } + } + + Item { + anchors.fill: parent + clip: true + anchors.margins: -_s + + Item { + id: theItem + anchors.fill: parent + anchors.topMargin: _s * 2 + + Column { + id: "txtCol" + anchors.fill: parent + anchors.margins: _s + anchors.topMargin: _s * 2 + spacing: _s + + PlasmaExtras.Heading { + text: "Effects on Components" + + } + PlasmaExtras.Paragraph { + text:"In Plasma 2, the user interface is based on an OpenGL scenegraph, composition of the UI happens on the graphics card. In the past weeks, we've been working on getting a Plasma 2 shell up and running, and on porting the QML imports of the Plasma Components." + } + + PlasmaExtras.Heading { + font.pointSize: 48 + anchors.horizontalCenter: parent.horizontalCenter + anchors.topMargin: _s * 3 + text: "This is shadowy text." + } + Row { + height: 48 + width: parent.width + spacing: _s + + PlasmaCore.IconItem { + source: "configure" + width: parent.height + height: width + } + PlasmaCore.IconItem { + source: "dialog-ok" + width: parent.height + height: width + } + + PlasmaCore.SvgItem { + id: buttonItem + svg: PlasmaCore.Svg { + id: configIconsSvg + imagePath: "widgets/configuration-icons" + } + elementId: "maximize" + width: parent.height + height: width + } + + PlasmaCore.IconItem { + source: "akonadi" + width: parent.height + height: width + } + PlasmaCore.IconItem { + source: "clock" + width: parent.height + height: width + } + } + } + } + ShaderEffectSource { + id: theSource + sourceItem: theItem + hideSource: true + } + + ShaderEffect { + anchors.fill: theItem + property variant source: theSource + property variant shadow: ShaderEffectSource { + sourceItem: ShaderEffect { + width: theItem.width + height: theItem.height + property variant delta: Qt.size(0.0, 1.0 / height) + property variant source: ShaderEffectSource { + sourceItem: ShaderEffect { + width: theItem.width + height: theItem.height + property variant delta: Qt.size(1.0 / width, 0.0) + property variant source: theSource + fragmentShader: " + uniform lowp float qt_Opacity; + uniform sampler2D source; + uniform highp vec2 delta; + varying highp vec2 qt_TexCoord0; + void main() { + gl_FragColor =(0.0538 * texture2D(source, qt_TexCoord0 - 3.182 * delta) + + 0.3229 * texture2D(source, qt_TexCoord0 - 1.364 * delta) + + 0.2466 * texture2D(source, qt_TexCoord0) + + 0.3229 * texture2D(source, qt_TexCoord0 + 1.364 * delta) + + 0.0538 * texture2D(source, qt_TexCoord0 + 3.182 * delta)) * qt_Opacity; + }" + } + } + fragmentShader: " + uniform lowp float qt_Opacity; + uniform sampler2D source; + uniform highp vec2 delta; + varying highp vec2 qt_TexCoord0; + void main() { + gl_FragColor =(0.0538 * texture2D(source, qt_TexCoord0 - 3.182 * delta) + + 0.3229 * texture2D(source, qt_TexCoord0 - 1.364 * delta) + + 0.2466 * texture2D(source, qt_TexCoord0) + + 0.3229 * texture2D(source, qt_TexCoord0 + 1.364 * delta) + + 0.0538 * texture2D(source, qt_TexCoord0 + 3.182 * delta)) * qt_Opacity; + }" + } + } + property real angle: 0 + property variant offset: Qt.point(distanceSlider.value * Math.cos(angle), distanceSlider.value * Math.sin(angle)) + NumberAnimation on angle { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 6000 } + property variant delta: Qt.size(offset.x / width, offset.y / height) + property real darkness: opacitySlider.value // Changeme + fragmentShader: " + uniform lowp float qt_Opacity; + uniform highp vec2 offset; + uniform sampler2D source; + uniform sampler2D shadow; + uniform highp float darkness; + uniform highp vec2 delta; + varying highp vec2 qt_TexCoord0; + void main() { + lowp vec4 fg = texture2D(source, qt_TexCoord0); + lowp vec4 bg = texture2D(shadow, qt_TexCoord0 + delta); + gl_FragColor = (fg + vec4(0., 0., 0., darkness * bg.a) * (1. - fg.a)) * qt_Opacity; + }" +// Slider { +// id: shadowSlider +// anchors.left: parent.left +// anchors.right: parent.right +// anchors.bottom: parent.bottom +// height: 40 +// } + } + + } +} \ No newline at end of file diff --git a/src/shell/applets/testshaderapplet/contents/ui/SimpleExample.qml b/src/shell/applets/testshaderapplet/contents/ui/SimpleExample.qml new file mode 100644 index 000000000..b30c77ca2 --- /dev/null +++ b/src/shell/applets/testshaderapplet/contents/ui/SimpleExample.qml @@ -0,0 +1,39 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +ShaderExample { + + pageName: "Simple" + pageDescription: "Paints a red, translucent rectangle" + + ShaderEffect { + anchors.fill: parent + anchors.topMargin: 48 + opacity: 0.2 + + fragmentShader: { " \ + void main(void) { \ + gl_FragColor = vec4(1.0, 0.0, 0.0, 0.3); \ + } \ + " + } + } +} + diff --git a/src/shell/applets/testshaderapplet/contents/ui/WaterEffect.qml b/src/shell/applets/testshaderapplet/contents/ui/WaterEffect.qml new file mode 100644 index 000000000..aca7cd4d8 --- /dev/null +++ b/src/shell/applets/testshaderapplet/contents/ui/WaterEffect.qml @@ -0,0 +1,110 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +// VertexPage + +Item { + id: waterRoot + property alias sourceItem: effectsource.sourceItem + property bool waving: true + //anchors.top: parent.bottom + anchors.top: iconCol.bottom + width: sourceItem.width + height: sourceItem.height + + ShaderEffect { + anchors.fill: parent + property variant source: effectsource + property real f: 0 + property real f2: 0 + property real intensity: 1 + smooth: true + + ShaderEffectSource { + id: effectsource + //hideSource: false + //smooth: true + sourceItem: mainItem + } + + fragmentShader: + " + varying highp vec2 qt_TexCoord0; + uniform sampler2D source; + uniform lowp float qt_Opacity; + uniform highp float f; + uniform highp float f2; + uniform highp float intensity; + + void main() { + const highp float twopi = 3.141592653589 * 2.0; + + highp float distanceFactorToPhase = pow(qt_TexCoord0.y + 0.5, 8.0) * 5.0; + highp float ofx = sin(f * twopi + distanceFactorToPhase) / 100.0; + highp float ofy = sin(f2 * twopi + distanceFactorToPhase * qt_TexCoord0.x) / 60.0; + + highp float intensityDampingFactor = (qt_TexCoord0.x + 2.0) * (qt_TexCoord0.y + 0.2); + highp float distanceFactor = (1.0 - qt_TexCoord0.y) * 4.0 * intensity * intensityDampingFactor; + + ofx *= distanceFactor; + ofy *= distanceFactor; + + highp float x = qt_TexCoord0.x + ofx; + highp float y = 1.0 - qt_TexCoord0.y + ofy; + + highp float fake = (sin((ofy + ofx) * twopi) + 0.5) * 0.05 * (1.2 - qt_TexCoord0.y) * intensity * intensityDampingFactor; + + highp vec4 pix = + texture2D(source, vec2(x, y)) * 0.6 + + texture2D(source, vec2(x-fake, y)) * 2.05 + + texture2D(source, vec2(x, y-fake)) * 2.05 + + texture2D(source, vec2(x+fake, y)) * 2.05 + + texture2D(source, vec2(x, y+fake)) * 2.05; + + highp float darken = 0.6 - (ofx - ofy) / 2.0; + pix.b *= 1.2 * darken; + pix.r *= 0.9 * darken; + pix.g *= darken; + + gl_FragColor = qt_Opacity * vec4(pix.r, pix.g, pix.b, 1.0); + } + " + + NumberAnimation on f { + running: waterRoot.waving + loops: Animation.Infinite + from: 0 + to: 1 + duration: 2410 + } + NumberAnimation on f2 { + running: waterRoot.waving + loops: Animation.Infinite + from: 0 + to: 1 + duration: 1754 + } + } +} diff --git a/src/shell/applets/testshaderapplet/contents/ui/WobbleExample.qml b/src/shell/applets/testshaderapplet/contents/ui/WobbleExample.qml new file mode 100644 index 000000000..dbbf8fd2b --- /dev/null +++ b/src/shell/applets/testshaderapplet/contents/ui/WobbleExample.qml @@ -0,0 +1,143 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents + +ShaderExample { + + pageName: "Wobble" + pageDescription: "Makes an image wobble" + + Grid { + id: cfgrid + columns: 2 + + anchors.top: parent.top + anchors.right: parent.right + width: parent.width * 0.6 + height: 96 + spacing: 6 + columnSpacing: _m + PlasmaComponents.Label { + text: "Amplitude:"; + width: parent.width * 0.5; + horizontalAlignment: Text.AlignRight + elide: Text.ElideRight + } + PlasmaComponents.Slider { + width: parent.width * 0.4 + id: amplitudeSlider + stepSize: 0.05 + minimumValue: 0 + maximumValue: 1.0 + value: 0.4 + } + + PlasmaComponents.Label { + text: "Speed:"; + horizontalAlignment: Text.AlignRight + width: parent.width * 0.5; + elide: Text.ElideRight + } + PlasmaComponents.Slider { + width: parent.width * 0.4 + id: speedSlider + stepSize: 250 + minimumValue: 0 + maximumValue: 6000 + value: 3000 + onValueChanged: { + if (timeAnimation != null) { + timeAnimation.duration = maximumValue - value +1; + timeAnimation.restart(); + } + } + } + } + PlasmaComponents.Button { + anchors { right: parent.right; bottom: parent.bottom; } +// height: theme.iconSizes.toolbar + text: "Busy" + checked: plasmoid.busy + onClicked: { + plasmoid.busy = !plasmoid.busy + } + } + + + Item { + id: imageItem + opacity: 0.8 + anchors.fill: parent + anchors.topMargin: 48 + Image { + source: "../images/elarun-small.png" + anchors.fill: parent + anchors.margins: parent.height / 10 + } + } + +// PlasmaCore.IconItem { +// id: iconItem +// source: "plasmagik" +// width: 400 +// height: 400 +// // width: parent.height +// // height: width +// anchors.centerIn: parent +// } + + ShaderEffect { + id: wobbleShader + + anchors.fill: imageItem + //property real time + property variant mouse + property variant resolution + + property int fadeDuration: 250 + property real amplitude: 0.04 * amplitudeSlider.value + property real frequency: 20 + property real time: 10 + property int speed: (speedSlider.maximumValue - speedSlider.value + 1) + + property variant source: ShaderEffectSource { + sourceItem: imageItem + hideSource: true + } + + NumberAnimation on time { id: timeAnimation; loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 3000 } + Behavior on amplitude { NumberAnimation { duration: wobbleShader.fadeDuration } } + + fragmentShader: { //mainItem.opacity = 0; + "uniform lowp float qt_Opacity;" + + "uniform highp float amplitude;" + + "uniform highp float frequency;" + + "uniform highp float time;" + + "uniform sampler2D source;" + + "varying highp vec2 qt_TexCoord0;" + + "void main() {" + + " highp vec2 p = sin(time + frequency * qt_TexCoord0);" + + " gl_FragColor = texture2D(source, qt_TexCoord0 + amplitude * vec2(p.y, -p.x)) * qt_Opacity;" + + "}" + } + } + +} diff --git a/src/shell/applets/testshaderapplet/contents/ui/config.qml b/src/shell/applets/testshaderapplet/contents/ui/config.qml new file mode 100644 index 000000000..0e08f6977 --- /dev/null +++ b/src/shell/applets/testshaderapplet/contents/ui/config.qml @@ -0,0 +1,30 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 +// import org.kde.plasma.components 2.0 as PlasmaComponents +// import org.kde.plasma.extras 2.0 as PlasmaExtras + +Column { + id: root + //property alias cfg_Speed + Rectangle { color: "green"; width: 200; height: 300; } +// PlasmaExtras.Heading { +// text: "Applet Config:" +// } +} diff --git a/src/shell/applets/testshaderapplet/contents/ui/testshaderapplet.qml b/src/shell/applets/testshaderapplet/contents/ui/testshaderapplet.qml new file mode 100644 index 000000000..f61ec9cb7 --- /dev/null +++ b/src/shell/applets/testshaderapplet/contents/ui/testshaderapplet.qml @@ -0,0 +1,91 @@ +/* + * Copyright 2013 Sebastian Kügler + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.qtextracomponents 2.0 as QtExtras + +Item { + id: root + width: 400 + height: 400 + + property int minimumWidth: units.gridUnit * 20 + property int minimumHeight: units.gridUnit * 30 + property int _s: theme.iconSizes.small + property int _h: theme.iconSizes.desktop + property int _m: 12 + + Item { + id: mainItem + anchors.fill: parent + + PlasmaComponents.TabBar { + id: tabBar + + anchors { + left: parent.left + right: parent.right + top: parent.top + } + height: theme.iconSizes.toolbar * 1.5 + + PlasmaComponents.TabButton { tab: colorShower; text: tab.pageName; } + PlasmaComponents.TabButton { tab: wobbleExample; text: tab.pageName; } + PlasmaComponents.TabButton { tab: shadowExample; text: tab.pageName; } + PlasmaComponents.TabButton { tab: simpleExample; text: tab.pageName; } + //PlasmaComponents.TabButton { tab: vertexPage; iconSource: vertexPage.icon; } + } + + PlasmaComponents.TabGroup { + id: tabGroup + anchors { + left: parent.left + right: parent.right + top: tabBar.bottom + bottom: parent.bottom + } + + ColorShower { + id: colorShower + } + WobbleExample { + id: wobbleExample + } +// ColorExample { +// id: colorExample +// } + Shadows { + id: shadowExample + } + SimpleExample { + id: simpleExample + } +// EditorPage { +// id: vertexPage +// } + } + } + + Component.onCompleted: { + print("Shader Test Applet loaded"); + } +} \ No newline at end of file diff --git a/src/shell/applets/testshaderapplet/metadata.desktop b/src/shell/applets/testshaderapplet/metadata.desktop new file mode 100644 index 000000000..06b90e30a --- /dev/null +++ b/src/shell/applets/testshaderapplet/metadata.desktop @@ -0,0 +1,39 @@ +[Desktop Entry] +Encoding=UTF-8 +Keywords= +Name=Shader Test +Name[fr]=Test du nuanceur +Name[mr]=शेडर चाचणी +Name[nl]=Test van schaduw +Name[pl]=Próba jednostki cieniującej +Name[pt]=Teste de Sombras +Name[pt_BR]=Teste de sombra +Name[sk]=Test Shadera +Name[sv]=Skuggningstest +Name[uk]=Тестування підпрограм побудови тіней +Name[x-test]=xxShader Testxx +Comment=Futzing with Visual Effects +Comment[fr]=Jouer avec les effets visuels +Comment[mr]=दृश्यास्पद परिणाम बरोबर फट्झिंग +Comment[nl]=Tijd verspillen met visuele effecten +Comment[pl]=Futzing z efektami wizualnymi +Comment[pt]=Brincar com Efeitos Visuais +Comment[pt_BR]=Brinque com efeitos visuais +Comment[sk]=Futzing s vizuálnymi efektami +Comment[sv]=Greja med visuella effekter +Comment[uk]=Маніпулювання візуальними ефектами +Comment[x-test]=xxFutzing with Visual Effectsxx +Type=Service +Icon=plasma + +X-KDE-ServiceTypes=Plasma/Applet +X-Plasma-API=declarativeappletscript +X-KDE-ParentApp= +X-KDE-PluginInfo-Author=Sebastian Kügler +X-KDE-PluginInfo-Category=Graphics +X-KDE-PluginInfo-Email=sebas@kde.org +X-KDE-PluginInfo-License=GPLv2+ +X-KDE-PluginInfo-Name=org.kde.testshaderapplet +X-KDE-PluginInfo-Version= +X-KDE-PluginInfo-Website= +X-Plasma-MainScript=ui/testshaderapplet.qml diff --git a/src/shell/qmlpackages/desktop/contents/layout.js b/src/shell/qmlpackages/desktop/contents/layout.js index cf0f14d12..918acc331 100644 --- a/src/shell/qmlpackages/desktop/contents/layout.js +++ b/src/shell/qmlpackages/desktop/contents/layout.js @@ -2,7 +2,7 @@ var panel = new Panel panel.screen = 0 panel.location = 'top' -panel.addWidget("org.kde.kickoff") +panel.addWidget("org.kde.testapplet") panel.addWidget("org.kde.windowlist") for (var i = 0; i < screenCount; ++i) { @@ -11,5 +11,6 @@ for (var i = 0; i < screenCount; ++i) { desktop.screen = i desktop.wallpaperPlugin = 'org.kde.image' - var clock = desktop.addWidget("org.kde.analogclock") + desktop.addWidget("org.kde.testapplet") + var testComponents = desktop.addWidget("org.kde.testcomponentsapplet") }