Initial splashscreen rework (!31)

This commit is contained in:
Carson Black 2019-12-20 12:14:15 +05:30 committed by Bhushan Shah
parent 294ee2a4be
commit d15262b394
7 changed files with 184 additions and 21 deletions

View file

@ -1,6 +1,7 @@
set(homescreen_SRCS set(homescreen_SRCS
homescreen.cpp homescreen.cpp
applicationlistmodel.cpp applicationlistmodel.cpp
colouraverage.cpp
) )
add_library(plasma_containment_phone_homescreen MODULE ${homescreen_SRCS}) add_library(plasma_containment_phone_homescreen MODULE ${homescreen_SRCS})

View file

@ -0,0 +1,57 @@
/***************************************************************************
* Copyright (C) 2019 Carson Black <uhhadd@gmail.com> *
* *
* 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 02110-1301 USA . *
***************************************************************************/
#include <QObject>
#include <QColor>
#include <QImage>
#include <QDebug>
#include <signal.h>
#include "colouraverage.h"
ColourAverage::ColourAverage(QObject* parent) : QObject(parent) {}
QColor ColourAverage::averageColour(QImage img) {
int r = 0;
int g = 0;
int b = 0;
int c = 0;
for (int i = 0; i < img.width(); i++) {
for (int ii = 0; ii < img.height(); ii++) {
QRgb pix = img.pixel(i, ii);
if (pix == 0)
continue;
c++;
r += qRed(pix);
g += qGreen(pix);
b += qBlue(pix);
}
}
r = r / c;
g = g / c;
b = b / c;
QColor color = QColor::fromRgb(r,g,b);
color.setHsv(color.hue(), color.saturation() / 4, color.value());
return color;
}

View file

@ -0,0 +1,30 @@
/***************************************************************************
* Copyright (C) 2019 Carson Black *
* *
* 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 02110-1301 USA . *
***************************************************************************/
#include <QObject>
#include <QColor>
#include <QImage>
class ColourAverage : public QObject
{
Q_OBJECT
public:
explicit ColourAverage(QObject* parent = nullptr);
Q_INVOKABLE QColor averageColour(QImage img);
};

View file

@ -19,6 +19,7 @@
#include "homescreen.h" #include "homescreen.h"
#include "applicationlistmodel.h" #include "applicationlistmodel.h"
#include "colouraverage.h"
#include <QtQml> #include <QtQml>
#include <QDebug> #include <QDebug>
@ -28,6 +29,13 @@ HomeScreen::HomeScreen(QObject *parent, const QVariantList &args)
: Plasma::Containment(parent, args) : Plasma::Containment(parent, args)
{ {
qmlRegisterUncreatableType<ApplicationListModel>("org.kde.phone.homescreen", 1, 0, "ApplicationListModel", QStringLiteral("Cannot create item of type ApplicationListModel")); qmlRegisterUncreatableType<ApplicationListModel>("org.kde.phone.homescreen", 1, 0, "ApplicationListModel", QStringLiteral("Cannot create item of type ApplicationListModel"));
qmlRegisterSingletonType<ColourAverage>("org.kde.phone.homescreen", 1, 0, "ColourAverage", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
Q_UNUSED(engine);
Q_UNUSED(scriptEngine);
ColourAverage *obj = new ColourAverage();
return obj;
});
setHasConfigurationInterface(true); setHasConfigurationInterface(true);
} }

View file

@ -23,6 +23,9 @@ import QtQuick.Window 2.2
import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras import org.kde.plasma.extras 2.0 as PlasmaExtras
import QtGraphicalEffects 1.12
import org.kde.phone.homescreen 1.0
Window { Window {
id: window id: window
@ -52,24 +55,26 @@ Window {
state: "closed" state: "closed"
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
color: background.backgroundColor color: PlasmaCore.Theme.backgroundColor
Rectangle {
ColumnLayout { id: rect
anchors.fill: parent
}
PlasmaCore.IconItem {
anchors.centerIn: parent anchors.centerIn: parent
PlasmaCore.IconItem { id: icon
id: icon colorGroup: PlasmaCore.Theme.ComplementaryColorGroup
colorGroup: PlasmaCore.Theme.ComplementaryColorGroup width: units.iconSizes.enormous
Layout.preferredWidth: units.iconSizes.enormous height: width
Layout.preferredHeight: Layout.preferredWidth }
Layout.alignment: Qt.AlignCenter DropShadow {
} anchors.fill: icon
PlasmaExtras.Heading { horizontalOffset: 0
text: window.title verticalOffset: 0
Layout.alignment: Qt.AlignCenter radius: 8.0
} samples: 17
/* PlasmaComponents.BusyIndicator { color: "#80000000"
Layout.alignment: Qt.AlignCenter source: icon
}*/
} }
} }
@ -103,7 +108,12 @@ Window {
from: "closed" from: "closed"
SequentialAnimation { SequentialAnimation {
ScriptAction { ScriptAction {
script: window.visible = true; script: {
window.visible = true;
icon.grabToImage((img) => {
rect.color = ColourAverage.averageColour(img.image)
})
}
} }
PropertyAnimation { PropertyAnimation {
target: background target: background

View file

@ -48,6 +48,8 @@ ContainmentLayoutManager.ItemContainer {
editModeCondition: ContainmentLayoutManager.ItemContainer.AfterPressAndHold editModeCondition: ContainmentLayoutManager.ItemContainer.AfterPressAndHold
signal launch(int x, int y, var source, string title)
onDragActiveChanged: { onDragActiveChanged: {
launcherDragManager.active = dragActive launcherDragManager.active = dragActive
if (dragActive) { if (dragActive) {
@ -88,9 +90,8 @@ ContainmentLayoutManager.ItemContainer {
onClicked: { onClicked: {
clickFedbackAnimation.target = delegate; clickFedbackAnimation.target = delegate;
clickFedbackAnimation.running = true; clickFedbackAnimation.running = true;
feedbackWindow.title = modelData.ApplicationNameRole;
feedbackWindow.icon = modelData.ApplicationIconRole; delegate.launch(delegate.x + (units.smallSpacing * 2), delegate.y + (units.smallSpacing * 2), icon.source, modelData.ApplicationNameRole)
feedbackWindow.state = "open";
plasmoid.nativeInterface.applicationListModel.runApplication(modelData.ApplicationStorageIdRole); plasmoid.nativeInterface.applicationListModel.runApplication(modelData.ApplicationStorageIdRole);
} }

View file

@ -39,6 +39,58 @@ LauncherContainer {
frame.width: width frame.width: width
PlasmaCore.IconItem {
id: effect
height: 64
width: 64
visible: false
x: 0
y: 0
source: "pattern-kde"
property string title
SequentialAnimation {
id: woosh
ScriptAction {
script: effect.visible = true
}
ParallelAnimation {
NumberAnimation {
target: effect
property: "opacity"
from: 0.9
to: 0
duration: 200
}
NumberAnimation {
target: effect
property: "scale"
from: 1
to: 3
duration: 200
}
}
ScriptAction {
script: {
feedbackWindow.title = effect.title
feedbackWindow.icon = effect.source
feedbackWindow.state = "open"
effect.visible = false
}
}
}
function swoosh(x, y, sauce, title) {
effect.x = x
effect.y = y
effect.source = sauce
effect.visible = true
effect.title = title
woosh.restart()
}
}
Repeater { Repeater {
parent: root.flow parent: root.flow
model: plasmoid.nativeInterface.applicationListModel model: plasmoid.nativeInterface.applicationListModel
@ -63,6 +115,10 @@ LauncherContainer {
appletsLayout.restoreItem(delegate); appletsLayout.restoreItem(delegate);
} }
} }
onLaunch: (a, b, c, d) => {
print(a,b,c,d)
effect.swoosh(a, b, c, d)
}
onParentFromLocationChanged: { onParentFromLocationChanged: {
if (!launcherDragManager.active && parent != parentFromLocation) { if (!launcherDragManager.active && parent != parentFromLocation) {
parent = parentFromLocation; parent = parentFromLocation;