Skip to content

Commit

Permalink
feat/animations
Browse files Browse the repository at this point in the history
more UI fixes

GUI continued

QML is not so bad when you only need to delete things
  • Loading branch information
JarbasAl committed Jan 28, 2024
1 parent f19a4ef commit a463ea4
Show file tree
Hide file tree
Showing 12 changed files with 133 additions and 73 deletions.
25 changes: 15 additions & 10 deletions ovos_media/gui.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import enum
from os.path import join, dirname
from threading import Timer

import random
from ovos_bus_client.apis.gui import GUIInterface
from ovos_utils.ocp import *

Expand Down Expand Up @@ -132,10 +132,13 @@ def prepare_gui_data(self):

def prepare_player(self):
self.remove_search_spinner()
self.remove_error()
self.clear_notification()

# OCP rendering
def render_pages(self, timeout=None, index=0):
self.remove_search_spinner()
self.remove_error()
pages = ["Home", "OVOSSyncPlayer", "PlaylistView"]
self.show_pages(pages, index,
override_idle=timeout or True,
Expand All @@ -151,10 +154,7 @@ def render_home(self):
self.render_pages(index=0)

def render_player(self):
self.send_event("ocp.gui.hide.busy.overlay") # remove search spinner

self.render_pages(index=1)

if len(self.player.tracks):
self.send_event("ocp.gui.show.suggestion.view.playlist")
elif len(self.player.disambiguation):
Expand All @@ -169,19 +169,24 @@ def render_disambiguation(self, timeout=None):
self.send_event("ocp.gui.show.suggestion.view.disambiguation")

def render_playback_error(self):
self["animation"] = f"animations/{random.choice(['error', 'error2', 'error3', 'error4'])}.json"
self["image"] = join(dirname(__file__), "qt5/images/fail.svg")
self.display_notification("Sorry, An error occurred while playing media")
self["footer_text"] = "Sorry, An error occurred while playing media"
self.render_pages(index=1)
pages = ["Home", "OVOSSyncPlayer", "PlaylistView"]
self.remove_pages(pages)
self.show_page("StreamError", override_idle=20, override_animations=True)

def render_search_spinner(self, persist_home=False):
self.display_notification("Searching...Your query is being processed")
self["footer_text"] = "Querying Skills\n\n"
self.send_event("ocp.gui.show.busy.overlay")
pages = ["Home", "OVOSSyncPlayer", "PlaylistView"]
self.remove_pages(pages)
self.show_page("SearchingMedia", override_idle=True, override_animations=True)

def remove_search_spinner(self):
self.send_event("ocp.gui.hide.busy.overlay")
self.start_timeout_notification()
self.remove_page("SearchingMedia")

def remove_error(self):
self.remove_page("StreamError")

# notification / spinner
def display_notification(self, text, style="info"):
Expand Down
15 changes: 12 additions & 3 deletions ovos_media/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,8 +366,12 @@ def register_bus_handlers(self):
self.add_event('ovos.common_play.repeat.set', self.handle_set_repeat)
self.add_event('ovos.common_play.repeat.unset', self.handle_unset_repeat)
self.add_event('ovos.common_play.SEI.get', self.handle_get_SEIs)
self.add_event('ovos.common_play.search.start', self.handle_search_start)
self.handle_get_SEIs(Message("ovos.common_play.SEI.get")) # report to ovos-core

def handle_search_start(self, message):
self.gui.manage_display(OCPGUIState.SPINNER)

@property
def active_skill(self) -> str:
"""
Expand Down Expand Up @@ -564,7 +568,7 @@ def on_invalid_stream(self):
self.bus.emit(Message("mycroft.audio.play_sound", {"uri": "snd/error.mp3"}))
self.gui.manage_display(OCPGUIState.PLAYBACK_ERROR)
LOG.warning(f"Failed to play: {self.now_playing}")
time.sleep(1.5) # let the user process that playback failed before moving on
time.sleep(3) # let the user process that playback failed before moving on
self.play_next()

# media controls
Expand Down Expand Up @@ -659,6 +663,8 @@ def play(self):
self.mpris.update_props({"CanGoNext": self.can_next})
self.mpris.update_props({"CanGoPrevious": self.can_prev})

self.gui.update_seekbar_capabilities() # pause/play icon

def play_shuffle(self):
"""
Go to a random position in the playlist and set that MediaEntry as
Expand Down Expand Up @@ -758,6 +764,7 @@ def pause(self):
self.mpris.pause()
self.set_player_state(PlayerState.PAUSED)
self._paused_on_duck = False
self.gui.update_seekbar_capabilities() # pause/play icon

def resume(self):
"""
Expand All @@ -779,6 +786,7 @@ def resume(self):
self.mpris.resume()

self.set_player_state(PlayerState.PLAYING)
self.gui.update_seekbar_capabilities() # pause/play icon

def seek(self, position: int):
"""
Expand Down Expand Up @@ -812,6 +820,7 @@ def stop(self):
if self.mpris and self.playback_type in [PlaybackType.MPRIS]:
self.mpris.pause()
self.set_player_state(PlayerState.STOPPED)
self.gui.update_seekbar_capabilities() # pause/play icon

def handle_MPRIS_takeover(self):
""" Called when a MPRIS external player becomes active"""
Expand Down Expand Up @@ -1056,9 +1065,9 @@ def handle_duck_request(self, message):
"""
if self.state == PlayerState.PLAYING:
if self.playback_type in [PlaybackType.VIDEO]:
self.video_service._lower_volume()
self.video_service.lower_volume()
elif self.playback_type in [PlaybackType.AUDIO]:
self.audio_service._lower_volume()
self.audio_service.lower_volume()
self._paused_on_duck = True

def handle_unduck_request(self, message):
Expand Down
56 changes: 0 additions & 56 deletions ovos_media/qt5/Home.qml
Original file line number Diff line number Diff line change
Expand Up @@ -36,62 +36,6 @@ Mycroft.Delegate {
}
}

onGuiEvent: {
switch (eventName) {
case "ocp.gui.show.busy.overlay":
busyPageOverlay.open = true
break
case "ocp.gui.hide.busy.overlay":
busyPageOverlay.open = false
break
}
}

Rectangle {
id: busyPageOverlay
visible: busyPageOverlay.open ? 1 : 0
enabled: busyPageOverlay.open ? 1 : 0
z: 2
property bool open: false
anchors.fill: parent
color: Kirigami.Theme.backgroundColor
opacity: busyPageOverlay.open ? 0.95 : 0
radius: 10
property var indicatorText: sessionData.footer_text ? sessionData.footer_text : "Loading"
layer.enabled: true
layer.effect: DropShadow {
horizontalOffset: 0
verticalOffset: 0
radius: 10
samples: 16
color: Kirigami.Theme.backgroundColor
}

Behavior on opacity {
NumberAnimation {
duration: 200
}
}

Controls.BusyIndicator {
id: viewBusyIndicator
visible: busyPageOverlay.visible
anchors.centerIn: parent
running: busyPageOverlay.visible
enabled: busyPageOverlay.visible

Controls.Label {
id: viewBusyIndicatorLabel
visible: busyPageOverlay.visible
enabled: busyPageOverlay.visible
anchors.top: parent.bottom
color: Kirigami.Theme.textColor
anchors.horizontalCenter: parent.horizontalCenter
text: busyPageOverlay.indicatorText
}
}
}

Item {
id: topBarArea
height: Mycroft.Units.gridUnit * 3
Expand Down
5 changes: 1 addition & 4 deletions ovos_media/qt5/OVOSSyncPlayer.qml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ Mycroft.Delegate {
property var thumbnail: sessionData.image
property var title: sessionData.title
property var author: sessionData.artist
property var playerState: sessionData.status

property var loopStatus: sessionData.loopStatus
property var canResume: sessionData.canResume
Expand Down Expand Up @@ -239,11 +238,9 @@ Mycroft.Delegate {
}

onClicked: {
if (playerState === "Paused"){
playerState = "Playing"
if (sessionData.canResume){
triggerGuiEvent("resume", {})
} else {
playerState = "Paused"
triggerGuiEvent("pause", {})
}
}
Expand Down
49 changes: 49 additions & 0 deletions ovos_media/qt5/SearchingMedia.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import QtQuick.Layouts 1.4
import QtQuick 2.4
import QtQuick.Controls 2.0
import org.kde.kirigami 2.10 as Kirigami

import Mycroft 1.0 as Mycroft
import org.kde.lottie 1.0

Mycroft.Delegate {
id: root
fillWidth: true

Rectangle {
anchors.fill: parent
anchors.margins: Mycroft.Units.gridUnit * 2
color: Kirigami.Theme.backgroundColor

ColumnLayout {
id: grid
anchors.fill: parent
anchors.margins: Kirigami.Units.largeSpacing

Label {
id: statusLabel
Layout.alignment: Qt.AlignHCenter
font.pixelSize: root.width * 0.035
wrapMode: Text.WordWrap
renderType: Text.NativeRendering
font.family: "Noto Sans Display"
font.styleName: "Black"
text: qsTr("Searching ...")
color: Kirigami.Theme.textColor
}

LottieAnimation {
id: statusIcon
visible: true
enabled: true
Layout.fillWidth: true
Layout.fillHeight: true
Layout.alignment: Qt.AlignHCenter
loops: Animation.Infinite
fillMode: Image.PreserveAspectFit
running: true
source: Qt.resolvedUrl("animations/search.json")
}
}
}
}
50 changes: 50 additions & 0 deletions ovos_media/qt5/StreamError.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import QtQuick.Layouts 1.4
import QtQuick 2.4
import QtQuick.Controls 2.0
import org.kde.kirigami 2.10 as Kirigami

import Mycroft 1.0 as Mycroft
import org.kde.lottie 1.0

Mycroft.Delegate {
id: root
skillBackgroundSource: sessionData.image ? sessionData.image : "https://source.unsplash.com/1920x1080/?+music"
fillWidth: true

Rectangle {
anchors.fill: parent
anchors.margins: Mycroft.Units.gridUnit * 2
color: Kirigami.Theme.backgroundColor

ColumnLayout {
id: grid
anchors.fill: parent
anchors.margins: Kirigami.Units.largeSpacing

Label {
id: statusLabel
Layout.alignment: Qt.AlignHCenter
font.pixelSize: root.width * 0.035
wrapMode: Text.WordWrap
renderType: Text.NativeRendering
font.family: "Noto Sans Display"
font.styleName: "Black"
text: qsTr("Playback Error")
color: Kirigami.Theme.textColor
}

LottieAnimation {
id: statusIcon
visible: true
enabled: true
Layout.fillWidth: true
Layout.fillHeight: true
Layout.alignment: Qt.AlignHCenter
loops: Animation.Infinite
fillMode: Image.PreserveAspectFit
running: true
source: Qt.resolvedUrl(sessionData.animation)
}
}
}
}
1 change: 1 addition & 0 deletions ovos_media/qt5/animations/error.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions ovos_media/qt5/animations/error2.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions ovos_media/qt5/animations/error3.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions ovos_media/qt5/animations/error4.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions ovos_media/qt5/animations/search.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"v":"4.8.0","meta":{"g":"LottieFiles AE 2.0.4","a":"","k":"","d":"","tc":""},"fr":29.9700012207031,"ip":0,"op":127.000005172816,"w":256,"h":256,"nm":"audio","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"line","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[134.5,128,0],"to":[0,24.167,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":56,"s":[134.5,273,0],"to":[0,0,0],"ti":[0,24.167,0]},{"t":122.000004969162,"s":[134.5,128,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":2,"s":[96.76,88.741,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":56,"s":[110.76,101.58,100]},{"t":123.000005009893,"s":[93.037,85.326,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[139,9],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.865109013576,0.874509803922,0.075447905297,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,-62.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":-0.024,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":130.000005295009,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"scan","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[123.357,138.247,0],"ix":2},"a":{"a":0,"k":[80.571,82.285,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[85,85,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":59,"s":[104,104,100]},{"t":124.000005050624,"s":[85,85,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.381,0],[0,-1.381],[0,0],[0,0],[0,-1.38],[-1.381,0],[0,0],[0,1.381],[0,0]],"o":[[-1.381,0],[0,0],[0,0],[-1.381,0],[0,1.381],[0,0],[1.381,0],[0,0],[0,-1.381]],"v":[[10.57,-10.428],[8.07,-7.928],[8.07,5.428],[-10.57,5.428],[-13.07,7.928],[-10.57,10.428],[10.57,10.428],[13.07,7.928],[13.07,-7.928]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.282000014361,0.560999971278,0.969000004787,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[147.823,153.892],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.381,0],[0,0],[0,0],[1.381,0],[0,-1.381],[0,0],[-1.381,0],[0,0],[0,1.381]],"o":[[0,0],[0,0],[0,-1.381],[-1.381,0],[0,0],[0,1.381],[0,0],[1.381,0],[0,-1.381]],"v":[[10.57,5.428],[-8.07,5.428],[-8.07,-7.928],[-10.57,-10.428],[-13.07,-7.928],[-13.07,7.928],[-10.57,10.428],[10.57,10.428],[13.07,7.928]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.282000014361,0.560999971278,0.969000004787,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[13.319,153.893],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.381,0],[0,0],[0,-1.381],[-1.381,0],[0,0],[0,0],[-1.381,0],[0,1.381],[0,0]],"o":[[0,0],[-1.381,0],[0,1.381],[0,0],[0,0],[0,1.381],[1.381,0],[0,0],[0,-1.381]],"v":[[10.57,-10.429],[-10.57,-10.429],[-13.07,-7.929],[-10.57,-5.429],[8.07,-5.429],[8.07,7.929],[10.57,10.429],[13.07,7.929],[13.07,-7.929]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.282000014361,0.560999971278,0.969000004787,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[147.823,10.679],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.381,0],[0,0],[0,-1.381],[0,0],[-1.381,0],[0,1.381],[0,0],[0,0],[0,1.381]],"o":[[0,0],[-1.381,0],[0,0],[0,1.381],[1.381,0],[0,0],[0,0],[1.381,0],[0,-1.381]],"v":[[10.57,-10.429],[-10.57,-10.429],[-13.07,-7.929],[-13.07,7.929],[-10.57,10.429],[-8.07,7.929],[-8.07,-5.429],[10.57,-5.429],[13.07,-7.929]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.282000014361,0.560999971278,0.969000004787,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[13.319,10.679],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":130.000005295009,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"music","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[112.32,137.869,0],"ix":2},"a":{"a":0,"k":[51.383,53.902,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.026,3.451],[0,0],[0,0],[0.038,0.168],[0.014,0.046],[0.052,0.111],[0.029,0.05],[0.068,0.09],[0.04,0.047],[0.09,0.075],[0.031,0.024],[0.015,0.01],[0.128,0.061],[0.027,0.012],[0.171,0.033],[0.047,0.006],[0.109,0],[0.02,0],[0.064,-0.007],[0.109,-0.027],[0.025,-0.007],[0,0],[0.024,-0.007],[0.19,-0.132],[0.012,-0.009],[0.135,-0.17],[0.024,-0.032],[0.076,-0.21],[0.012,-0.043],[0,-0.242],[0,0],[0,0],[0.716,0.432],[4.596,-0.574],[2.969,-3],[-0.491,-3.941],[-3.799,-2.291],[-3.635,0],[-0.914,0.115],[-2.97,3],[0.025,3.453],[0,0],[0,0],[0,0],[0.715,0.432],[4.594,-0.573],[-0.987,-7.914],[-8.574,0],[-0.908,0.113],[-2.971,3]],"o":[[0,0],[0,0],[0,-0.179],[-0.01,-0.048],[-0.034,-0.12],[-0.026,-0.052],[-0.056,-0.099],[-0.036,-0.048],[-0.078,-0.087],[-0.03,-0.025],[-0.015,-0.011],[-0.114,-0.083],[-0.028,-0.013],[-0.157,-0.068],[-0.046,-0.01],[-0.105,-0.013],[-0.02,0],[-0.064,0.001],[-0.114,0.012],[-0.023,0.006],[0,0],[-0.024,0.007],[-0.224,0.071],[-0.011,0.008],[-0.176,0.127],[-0.025,0.031],[-0.128,0.178],[-0.015,0.042],[-0.067,0.221],[0,0],[0,0],[-0.611,-0.51],[-3.616,-2.179],[-4.598,0.572],[-3.122,3.153],[0.491,3.942],[2.897,1.746],[0.901,-0.002],[4.597,-0.572],[2.746,-2.774],[0,0],[0,0],[0,0],[-0.611,-0.51],[-3.616,-2.18],[-9.706,1.21],[0.895,7.176],[0.885,0],[4.597,-0.572],[2.741,-2.773]],"v":[[51.108,19.37],[51.108,-32.278],[51.108,-51.266],[51.047,-51.787],[51.004,-51.925],[50.879,-52.273],[50.795,-52.425],[50.611,-52.708],[50.495,-52.85],[50.243,-53.089],[50.161,-53.169],[50.114,-53.197],[49.751,-53.41],[49.671,-53.453],[49.179,-53.604],[49.04,-53.619],[48.724,-53.652],[48.666,-53.645],[48.478,-53.626],[48.142,-53.572],[48.068,-53.559],[-18.387,-34.572],[-18.453,-34.54],[-19.081,-34.243],[-19.115,-34.215],[-19.581,-33.766],[-19.658,-33.676],[-19.964,-33.094],[-20.003,-32.969],[-20.117,-32.277],[-20.117,-13.29],[-20.117,28.696],[-22.092,27.271],[-34.829,24.779],[-46.564,30.321],[-50.643,41.324],[-43.988,50.99],[-33.977,53.652],[-31.251,53.48],[-19.516,47.938],[-15.348,38.353],[-15.348,-11.493],[46.34,-29.118],[46.34,9.706],[44.367,8.282],[31.629,5.79],[15.816,22.336],[32.516,34.663],[35.209,34.493],[46.945,28.952]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.282000014361,0.560999971278,0.969000004787,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[51.383,53.902],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":130.000005295009,"st":0,"bm":0}],"markers":[]}
Loading

0 comments on commit a463ea4

Please sign in to comment.