1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-05 21:15:38 -05:00

polkit: simplify service usage

This commit is contained in:
bbedward
2025-10-31 11:51:11 -04:00
parent 3b5a951431
commit 7252d1e4d7
6 changed files with 259 additions and 184 deletions

View File

@@ -8,9 +8,13 @@ DankModal {
id: root id: root
property string passwordInput: "" property string passwordInput: ""
property var currentFlow: PolkitService.agent?.flow
property bool isLoading: false
property real minHeight: 240
function show() { function show() {
passwordInput = "" passwordInput = ""
isLoading = false
open() open()
Qt.callLater(() => { Qt.callLater(() => {
if (contentLoader.item && contentLoader.item.passwordField) { if (contentLoader.item && contentLoader.item.passwordField) {
@@ -21,11 +25,17 @@ DankModal {
shouldBeVisible: false shouldBeVisible: false
width: 420 width: 420
height: contentLoader.item ? contentLoader.item.implicitHeight + Theme.spacingM * 2 : 240 height: Math.max(minHeight, contentLoader.item ? contentLoader.item.implicitHeight + Theme.spacingM * 2 : 240)
onShouldBeVisibleChanged: () => { Connections {
if (!shouldBeVisible) { target: contentLoader.item
passwordInput = "" function onImplicitHeightChanged() {
if (shouldBeVisible && contentLoader.item) {
const newHeight = contentLoader.item.implicitHeight + Theme.spacingM * 2
if (newHeight > minHeight) {
minHeight = newHeight
}
}
} }
} }
@@ -37,32 +47,57 @@ DankModal {
}) })
} }
onBackgroundClicked: () => { onClosed: {
PolkitService.cancel()
close()
passwordInput = "" passwordInput = ""
isLoading = false
}
onBackgroundClicked: () => {
if (currentFlow && !isLoading) {
currentFlow.cancelAuthenticationRequest()
}
} }
Connections { Connections {
target: PolkitService target: PolkitService.agent
enabled: PolkitService.polkitAvailable
function onAuthenticationRequested() { function onAuthenticationRequestStarted() {
show() show()
} }
function onAuthenticationCompleted() { function onIsActiveChanged() {
close() if (!(PolkitService.agent?.isActive ?? false)) {
passwordInput = "" close()
}
} }
}
Connections {
target: currentFlow
enabled: currentFlow !== null
function onIsResponseRequiredChanged() { function onIsResponseRequiredChanged() {
if (PolkitService.isResponseRequired && root.shouldBeVisible) { if (currentFlow.isResponseRequired) {
isLoading = false
passwordInput = "" passwordInput = ""
if (contentLoader.item && contentLoader.item.passwordField) { if (contentLoader.item && contentLoader.item.passwordField) {
contentLoader.item.passwordField.forceActiveFocus() contentLoader.item.passwordField.forceActiveFocus()
} }
} }
} }
function onAuthenticationSucceeded() {
close()
}
function onAuthenticationFailed() {
isLoading = false
}
function onAuthenticationRequestCancelled() {
close()
}
} }
content: Component { content: Component {
@@ -73,89 +108,89 @@ DankModal {
anchors.fill: parent anchors.fill: parent
focus: true focus: true
implicitHeight: mainColumn.implicitHeight implicitHeight: headerRow.implicitHeight + mainColumn.implicitHeight + Theme.spacingM
Keys.onEscapePressed: event => { Keys.onEscapePressed: event => {
PolkitService.cancel() if (currentFlow && !isLoading) {
close() currentFlow.cancelAuthenticationRequest()
passwordInput = "" }
event.accepted = true event.accepted = true
} }
Column { Row {
id: mainColumn id: headerRow
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.top: parent.top anchors.top: parent.top
anchors.leftMargin: Theme.spacingM anchors.leftMargin: Theme.spacingM
anchors.rightMargin: Theme.spacingM anchors.rightMargin: Theme.spacingM
anchors.topMargin: Theme.spacingM anchors.topMargin: Theme.spacingM
spacing: Theme.spacingM
Row { Column {
width: parent.width width: parent.width - 40
spacing: Theme.spacingXS
StyledText {
text: I18n.tr("Authentication Required")
font.pixelSize: Theme.fontSizeLarge
color: Theme.surfaceText
font.weight: Font.Medium
}
Column { Column {
width: parent.width - 40 width: parent.width
spacing: Theme.spacingXS spacing: Theme.spacingXS
StyledText { StyledText {
text: I18n.tr("Authentication Required") text: currentFlow?.message ?? ""
font.pixelSize: Theme.fontSizeLarge font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceText color: Theme.surfaceTextMedium
font.weight: Font.Medium
}
Column {
width: parent.width width: parent.width
spacing: Theme.spacingXS wrapMode: Text.Wrap
StyledText {
text: PolkitService.message
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceTextMedium
width: parent.width
wrapMode: Text.Wrap
}
StyledText {
visible: PolkitService.supplementaryMessage !== ""
text: PolkitService.supplementaryMessage
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceTextMedium
width: parent.width
wrapMode: Text.Wrap
opacity: 0.8
}
StyledText {
visible: PolkitService.failed
text: I18n.tr("Authentication failed, please try again")
font.pixelSize: Theme.fontSizeSmall
color: Theme.error
width: parent.width
}
} }
}
DankActionButton { StyledText {
iconName: "close" visible: (currentFlow?.supplementaryMessage ?? "") !== ""
iconSize: Theme.iconSize - 4 text: currentFlow?.supplementaryMessage ?? ""
iconColor: Theme.surfaceText font.pixelSize: Theme.fontSizeSmall
onClicked: () => { color: (currentFlow?.supplementaryIsError ?? false) ? Theme.error : Theme.surfaceTextMedium
PolkitService.cancel() width: parent.width
close() wrapMode: Text.Wrap
passwordInput = "" opacity: (currentFlow?.supplementaryIsError ?? false) ? 1 : 0.8
} }
} }
} }
DankActionButton {
iconName: "close"
iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText
enabled: !isLoading
opacity: enabled ? 1 : 0.5
onClicked: () => {
if (currentFlow) {
currentFlow.cancelAuthenticationRequest()
}
}
}
}
Column {
id: mainColumn
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.leftMargin: Theme.spacingM
anchors.rightMargin: Theme.spacingM
anchors.bottomMargin: Theme.spacingM
spacing: Theme.spacingM
StyledText { StyledText {
text: PolkitService.inputPrompt text: currentFlow?.inputPrompt ?? ""
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceText color: Theme.surfaceText
width: parent.width width: parent.width
visible: PolkitService.inputPrompt !== "" visible: (currentFlow?.inputPrompt ?? "") !== ""
} }
Rectangle { Rectangle {
@@ -165,9 +200,11 @@ DankModal {
color: Theme.surfaceHover color: Theme.surfaceHover
border.color: passwordField.activeFocus ? Theme.primary : Theme.outlineStrong border.color: passwordField.activeFocus ? Theme.primary : Theme.outlineStrong
border.width: passwordField.activeFocus ? 2 : 1 border.width: passwordField.activeFocus ? 2 : 1
opacity: isLoading ? 0.5 : 1
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
enabled: !isLoading
onClicked: () => { onClicked: () => {
passwordField.forceActiveFocus() passwordField.forceActiveFocus()
} }
@@ -180,22 +217,52 @@ DankModal {
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
textColor: Theme.surfaceText textColor: Theme.surfaceText
text: passwordInput text: passwordInput
echoMode: PolkitService.responseVisible ? TextInput.Normal : TextInput.Password echoMode: (currentFlow?.responseVisible ?? false) ? TextInput.Normal : TextInput.Password
placeholderText: I18n.tr("Password") placeholderText: ""
backgroundColor: "transparent" backgroundColor: "transparent"
enabled: root.shouldBeVisible enabled: !isLoading
onTextEdited: () => { onTextEdited: () => {
passwordInput = text passwordInput = text
} }
onAccepted: () => { onAccepted: () => {
if (passwordInput.length > 0) { if (passwordInput.length > 0 && currentFlow && !isLoading) {
PolkitService.submit(passwordInput) isLoading = true
currentFlow.submit(passwordInput)
passwordInput = "" passwordInput = ""
} }
} }
} }
} }
Item {
width: parent.width
height: (currentFlow?.failed ?? false) ? failedText.implicitHeight : 0
visible: height > 0
StyledText {
id: failedText
text: I18n.tr("Authentication failed, please try again")
font.pixelSize: Theme.fontSizeSmall
color: Theme.error
width: parent.width
opacity: (currentFlow?.failed ?? false) ? 1 : 0
Behavior on opacity {
NumberAnimation {
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
}
Behavior on height {
NumberAnimation {
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
}
Item { Item {
width: parent.width width: parent.width
height: 40 height: 40
@@ -212,6 +279,8 @@ DankModal {
color: cancelArea.containsMouse ? Theme.surfaceTextHover : "transparent" color: cancelArea.containsMouse ? Theme.surfaceTextHover : "transparent"
border.color: Theme.surfaceVariantAlpha border.color: Theme.surfaceVariantAlpha
border.width: 1 border.width: 1
enabled: !isLoading
opacity: enabled ? 1 : 0.5
StyledText { StyledText {
id: cancelText id: cancelText
@@ -229,10 +298,11 @@ DankModal {
anchors.fill: parent anchors.fill: parent
hoverEnabled: true hoverEnabled: true
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
enabled: parent.enabled
onClicked: () => { onClicked: () => {
PolkitService.cancel() if (currentFlow) {
close() currentFlow.cancelAuthenticationRequest()
passwordInput = "" }
} }
} }
} }
@@ -242,7 +312,7 @@ DankModal {
height: 36 height: 36
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: authArea.containsMouse ? Qt.darker(Theme.primary, 1.1) : Theme.primary color: authArea.containsMouse ? Qt.darker(Theme.primary, 1.1) : Theme.primary
enabled: passwordInput.length > 0 || !PolkitService.isResponseRequired enabled: !isLoading && (passwordInput.length > 0 || !(currentFlow?.isResponseRequired ?? true))
opacity: enabled ? 1 : 0.5 opacity: enabled ? 1 : 0.5
StyledText { StyledText {
@@ -263,8 +333,11 @@ DankModal {
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
enabled: parent.enabled enabled: parent.enabled
onClicked: () => { onClicked: () => {
PolkitService.submit(passwordInput) if (currentFlow && !isLoading) {
passwordInput = "" isLoading = true
currentFlow.submit(passwordInput)
passwordInput = ""
}
} }
} }

View File

@@ -52,8 +52,6 @@ BasePill {
saturation: 0 saturation: 0
colorization: 1 colorization: 1
colorizationColor: Theme.effectiveLogoColor colorizationColor: Theme.effectiveLogoColor
brightness: 0.55
contrast: 0.5
} }
} }

View File

@@ -10,21 +10,7 @@ Singleton {
readonly property bool disablePolkitIntegration: Quickshell.env("DMS_DISABLE_POLKIT") === "1" readonly property bool disablePolkitIntegration: Quickshell.env("DMS_DISABLE_POLKIT") === "1"
property bool polkitAvailable: false property bool polkitAvailable: false
property var agent: null property var agent: null
property var currentFlow: null
property bool isActive: false
property string message: ""
property string supplementaryMessage: ""
property string inputPrompt: ""
property bool failed: false
property bool responseVisible: false
property bool isResponseRequired: false
signal authenticationRequested()
signal authenticationCompleted()
signal authenticationFailed()
function createPolkitAgent() { function createPolkitAgent() {
try { try {
@@ -37,30 +23,6 @@ Singleton {
` `
agent = Qt.createQmlObject(qmlString, root, "PolkitService.Agent") agent = Qt.createQmlObject(qmlString, root, "PolkitService.Agent")
agent.isActiveChanged.connect(function() {
root.isActive = agent.isActive
if (agent.isActive) {
root.authenticationRequested()
} else {
root.authenticationCompleted()
}
})
agent.flowChanged.connect(function() {
currentFlow = agent.flow
if (currentFlow) {
updateFlowProperties()
if (currentFlow.messageChanged) currentFlow.messageChanged.connect(() => updateFlowProperties())
if (currentFlow.supplementaryMessageChanged) currentFlow.supplementaryMessageChanged.connect(() => updateFlowProperties())
if (currentFlow.inputPromptChanged) currentFlow.inputPromptChanged.connect(() => updateFlowProperties())
if (currentFlow.failedChanged) currentFlow.failedChanged.connect(() => updateFlowProperties())
if (currentFlow.responseVisibleChanged) currentFlow.responseVisibleChanged.connect(() => updateFlowProperties())
if (currentFlow.isResponseRequiredChanged) currentFlow.isResponseRequiredChanged.connect(() => updateFlowProperties())
}
})
polkitAvailable = true polkitAvailable = true
console.info("PolkitService: Initialized successfully") console.info("PolkitService: Initialized successfully")
} catch (e) { } catch (e) {
@@ -69,29 +31,6 @@ Singleton {
} }
} }
function updateFlowProperties() {
if (!currentFlow) return
message = currentFlow.message !== undefined ? currentFlow.message : ""
supplementaryMessage = currentFlow.supplementaryMessage !== undefined ? currentFlow.supplementaryMessage : ""
inputPrompt = currentFlow.inputPrompt !== undefined ? currentFlow.inputPrompt : ""
failed = currentFlow.failed !== undefined ? currentFlow.failed : false
responseVisible = currentFlow.responseVisible !== undefined ? currentFlow.responseVisible : false
isResponseRequired = currentFlow.isResponseRequired !== undefined ? currentFlow.isResponseRequired : false
}
function submit(response) {
if (currentFlow && isResponseRequired) {
currentFlow.submit(response)
}
}
function cancel() {
if (currentFlow) {
currentFlow.cancelAuthenticationRequest()
}
}
Component.onCompleted: { Component.onCompleted: {
if (disablePolkitIntegration) { if (disablePolkitIntegration) {
return return

View File

@@ -121,7 +121,7 @@ PanelWindow {
active: root.visible active: root.visible
asynchronous: false asynchronous: false
transformOrigin: Item.Center transformOrigin: Item.Center
layer.enabled: Quickshell.env("DMS_DISABLE_LAYER") !== "true" layer.enabled: Quickshell.env("DMS_DISABLE_LAYER") !== "true" && Quickshell.env("DMS_DISABLE_LAYER") !== "1"
layer.smooth: true layer.smooth: true
opacity: shouldBeVisible ? 1 : 0 opacity: shouldBeVisible ? 1 : 0
transform: [scaleTransform, motionTransform] transform: [scaleTransform, motionTransform]

View File

@@ -47,4 +47,4 @@ Text {
easing.bezierCurve: standardAnimation["easing.bezierCurve"] easing.bezierCurve: standardAnimation["easing.bezierCurve"]
} }
} }
} }

View File

@@ -1,40 +1,105 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!-- Created with Inkscape (http://www.inkscape.org/) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <svg
width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve"> version="1.1"
<g> id="svg1"
<g> width="524.44849"
<path fill="#808080" d="M151.583,133.43c-1.255,1.946,0.646,1.946,5.704,0C155.385,133.43,153.484,133.43,151.583,133.43z"/> height="524.5979"
<path fill="#808080" d="M423.762,406.435C351.624,511.72,195.549,530.36,100.813,443.681 viewBox="0 0 524.44848 524.5979"
c-29.726-27.249-61.828-70.379-45.267-112.843c9.16-23.487,37.102-24.426,57.716-32.065 xmlns:xlink="http://www.w3.org/1999/xlink"
c27.527-10.201,54.303-25.636,71.783-49.842c1.823,22.976,23.814,52.576,33.269,73.388c9.772,21.51,19.334,43.117,28.757,64.783 xmlns="http://www.w3.org/2000/svg"
c0.991-8.282,16.502-92.821-14.752-76.345c19.458-21.14,35.548-31.5,54.594,0.311c-2.329-1.542-4.659-3.084-6.988-4.625 xmlns:svg="http://www.w3.org/2000/svg"
c-13.702,28.822,6.996,68.66,14.663,97.275c-0.159-44.012,1.277-88.943-3.305-132.758c25.284,18.425,52.786,29.832,81.891,41.012 shape-rendering="geometricPrecision">
C411.181,326.572,412.863,370.402,423.762,406.435C416.231,417.427,422.675,402.841,423.762,406.435z"/> <defs
<path fill="#808080" d="M141.639,217.359c-1.449,30.049-3.187,60.252-7.215,90.078c-1.049,7.765-10.07,31.329,4.856,29.922 id="defs1">
c5.631-0.531,26.431-6.722,28.324-12.94c7.661-25.155,15.321-50.31,22.982-75.465 <clipPath
C194.325,236.673,152.531,222.984,141.639,217.359z"/> clipPathUnits="userSpaceOnUse"
<path fill="#808080" d="M151.583,133.43c-1.255,1.946,0.646,1.946,5.704,0C155.385,133.43,153.484,133.43,151.583,133.43z"/> id="clipPath21">
<path fill="#808080" d="M380.027,190.172c2.551-3.381,12.116-35.014,7.979-40.841c-21.139-9.962-38.084,1.086-58.839,0.144 <path
c-28.481-1.292-52.16-10.216-82.194-5.857c-20.152,2.925-40.476,6.822-59.248,14.892c-5.085,2.171-33.296,22.994-33.035,23.122 d="M 0,1200 H 2000 V 0 H 0 Z"
c-14.027-6.836,43.648-35.195,48.133-36.619c33.084-10.501,67.297-12.315,101.608-15.552c25.236-2.379,54.641-1.008,78.47-11.112 transform="translate(-673.87432,-704.25842)"
c16.618-7.047,20.647-25.35,3.137-33.427c-22.945-10.585-53.247,1.025-64.749-21.947c-9.865-19.703-19.126-50.833-42.862-57.923 id="path21" />
c-36.643-10.945-98.407,4.036-125.468,30.683c-14.664,14.44-12.628,32.211-13.789,51.294c-0.771,12.674,2.771,18.959-9.236,22.648 </clipPath>
c-11.996,3.686-35.259,9.105-41.089,21.843c-9.907,21.645,60.404,18.041,70.524,17.445 <clipPath
c-48.116,78.556,9.309,154.103,95.828,138.485c21.662-3.91,46.538-11.144,63.301-26.06c14.268-12.696,18.851-26.329,38.884-31.764 clipPathUnits="userSpaceOnUse"
c22.88-6.207,48.618-2.853,71.213,3.225C425.427,211.414,397.813,197.701,380.027,190.172z M147.943,113.559 id="clipPath25">
c32.398-5.478,64.75-11.227,97.122-16.857c18.865-3.281,37.73-6.561,56.594-9.842c2.704-0.47,37.591-8.61,26.975,6.476 <path
c-8.441,11.996-61.367,8.371-74.078,9.64C219.023,106.522,183.499,110.243,147.943,113.559 d="M 0,1200 H 2000 V 0 H 0 Z"
C162.475,111.102,162.63,112.189,147.943,113.559z M370.763,155.911c8.064,4.793,6.789,19.245,0,26.465 transform="translate(-466.30451,-703.59782)"
C372.129,173.756,372.669,164.493,370.763,155.911z M300.604,159.526c19.572-0.816,8.747,23.495-2.02,28.95 id="path25" />
C303.101,186.108,301.518,163.22,300.604,159.526z M284.787,217.004c-13.756-0.207-27.836-4.341-34.89-17.079 </clipPath>
c-3.743-6.76-3.246-24.814-13.996-23.708c-17.975,1.85-35.949,3.701-53.924,5.551c17.165-8.213,32.693-15.006,51.887-17.165 <clipPath
c24.854-2.796,13.115,15.487,25.149,31.147c14.31,18.621,50.25,11.317,61.727-7.041c2.807-4.491,3.5-9.537,5.626-14.35 clipPathUnits="userSpaceOnUse"
c9.82-22.233,13.955,4.169,18.087,9.218c-10.884-13.363-14.883,7.391-19.096,13.609 id="clipPath27">
C316.276,210.59,300.73,217.253,284.787,217.004C252.941,216.524,316.35,217.498,284.787,217.004z M327.761,210.296 <path
c11.885-7.741,12.4-23.74,26.261-19.392c19.134,6.002,40.641,14.199,54.49,29.334 d="M 0,1200 H 2000 V 0 H 0 Z"
C382.501,213.437,354.709,208.449,327.761,210.296z"/> transform="translate(-695.28002,-473.92741)"
</g> id="path27" />
</g> </clipPath>
</svg> <clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath29">
<path
d="M 0,1200 H 2000 V 0 H 0 Z"
transform="translate(-457.93881,-632.99062)"
id="path29" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath31">
<path
d="M 0,1200 H 2000 V 0 H 0 Z"
transform="translate(-466.30451,-703.59782)"
id="path31" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath33">
<path
d="M 0,1200 H 2000 V 0 H 0 Z"
transform="translate(-614.51722,-638.93302)"
id="path33" />
</clipPath>
</defs>
<g
id="layer-MC0"
transform="translate(-475.12476,-548.5802)">
<path
id="path20"
d="M 0,0 C -1.568,1.568 -3.163,3.098 -4.787,4.61 -5.944,3.966 -7.185,3.35 -8.529,2.762 -9.658,2.277 -10.815,1.82 -11.981,1.4 c 1.885,-1.689 3.742,-3.425 5.552,-5.207 0.448,-0.429 0.886,-0.868 1.325,-1.306 2.221,-2.221 4.386,-4.498 6.476,-6.84 27.639,-30.784 44.453,-71.459 44.453,-116.089 0,-29.347 -7.259,-56.977 -20.09,-81.21 -2.192,-4.134 -4.544,-8.174 -7.054,-12.102 -6.83,-10.74 -14.827,-20.669 -23.785,-29.636 -5.944,-5.944 -12.317,-11.459 -19.073,-16.498 -0.56,-0.42 -1.12,-0.83 -1.689,-1.231 -28.675,-20.893 -63.975,-33.201 -102.186,-33.201 -48.018,0 -91.464,19.456 -122.948,50.93 -0.737,0.737 -1.465,1.474 -2.174,2.221 -0.55,0.569 -1.101,1.147 -1.633,1.726 -15.545,16.553 -27.881,36.14 -36.018,57.779 -3.098,8.211 -5.58,16.712 -7.409,25.464 -2.417,11.534 -3.686,23.496 -3.686,35.758 0.01,42.326 15.117,81.097 40.246,111.246 -2.072,1.278 -3.975,2.809 -5.534,4.637 -26.174,-31.399 -41.934,-71.822 -41.934,-115.883 0,-18.187 2.678,-35.748 7.67,-52.311 3.359,-11.142 7.754,-21.835 13.092,-31.95 8.528,-16.208 19.446,-30.961 32.276,-43.801 1.251,-1.25 2.529,-2.491 3.817,-3.685 0.662,-0.644 1.334,-1.26 2.006,-1.876 10.862,-9.938 22.945,-18.578 36,-25.661 25.632,-13.913 55.016,-21.816 86.229,-21.816 2.454,0 4.908,0.047 7.334,0.14 36.056,1.446 69.424,13.427 97.054,32.976 0.569,0.392 1.148,0.793 1.698,1.204 7.82,5.655 15.164,11.925 21.966,18.718 7.904,7.904 15.07,16.526 21.406,25.773 2.556,3.723 4.973,7.558 7.25,11.477 15.499,26.697 24.382,57.723 24.382,90.812 C 53.038,-78.055 32.762,-32.762 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
transform="matrix(1.4480327,0,0,-1.2531805,922.77315,685.7674)"
clip-path="url(#clipPath21)" />
<path
id="path24"
d="M 0,0 -0.169,-0.292 C 1.43,-0.2 3.091,-0.108 4.798,0 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
transform="matrix(1.4480327,0,0,-1.2531805,622.20527,686.59525)"
clip-path="url(#clipPath25)" />
<path
id="path26"
d="m 0,0 c -6.336,-9.247 -13.502,-17.869 -21.406,-25.773 -6.802,-6.793 -14.146,-13.063 -21.965,-18.718 -0.551,-0.411 -1.129,-0.812 -1.699,-1.204 -27.629,-19.549 -60.998,-31.53 -97.053,-32.976 -33.247,1.129 -64.852,8.762 -93.564,21.676 -13.054,7.082 -25.138,15.723 -36,25.661 -0.672,0.616 -1.343,1.232 -2.006,1.876 -1.288,1.194 -2.566,2.435 -3.816,3.685 -12.831,12.84 -23.748,27.593 -32.277,43.801 -1.092,7.651 -1.941,15.378 -2.445,23.039 -0.102,1.502 -0.186,3.004 -0.261,4.497 0,0 -2.865,29.795 23.944,36.634 26.827,6.84 65.654,19.745 87.722,50.305 0,0 0.327,-8.38 5.506,-15.779 8.034,-11.422 46.674,-100.46 46.674,-100.46 l 6.121,51.135 -13.978,15.079 -4.553,-1.987 15.228,16.544 c 0,0 8.94,4.218 16.554,-0.653 7.605,-4.899 14.146,-16.153 14.146,-16.153 l -5.879,3.892 -4.227,-12.364 c -0.756,-2.184 -0.83,-4.535 -0.233,-6.784 l 16.796,-62.687 c 0,0 -0.243,87.415 -2.781,111.685 0,0 14.221,-10.367 21.621,-14.454 7.381,-4.078 47.215,-20.407 53.738,-22.395 6.504,-1.987 13.222,-5.841 15.882,-11.916 1.026,-2.351 8.594,-26.939 17.486,-56.229 C -1.829,6.028 -0.914,3.023 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
transform="matrix(1.4480327,0,0,-1.2531805,953.76928,974.41373)"
clip-path="url(#clipPath27)" />
<path
id="path28"
d="m 0,0 c 0,0 -3.081,-67.22 -8.64,-90.616 -5.559,-23.397 30.316,0 30.316,0 l 20.9,68.629 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
transform="matrix(1.4480327,0,0,-1.2531805,610.09146,775.07882)"
clip-path="url(#clipPath29)" />
<path
id="path30"
d="M 0,0 -0.169,-0.292 C 1.43,-0.2 3.091,-0.108 4.798,0 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
transform="matrix(1.4480327,0,0,-1.2531805,622.20527,686.59525)"
clip-path="url(#clipPath31)" />
<path
id="path32"
d="m 0,0 c 0,0 12.178,7.604 15.029,18.355 0,0 36.913,-9.243 52.904,-26.719 C 66.887,-8.091 29.642,2.031 0,0 m -36.152,-5.643 c -26.791,0.404 -31.781,16.05 -34.086,29.523 -0.511,2.958 -3.148,5.073 -6.13,4.883 l -46.275,-4.764 14.922,7.14 c 3.505,1.687 7.164,3.077 10.895,4.17 3.742,1.093 7.556,1.901 11.429,2.376 4.051,0.499 8.542,1.01 13.46,1.509 0,0 6.19,2.459 7.414,-4.479 1.259,-6.926 0.499,-31.864 28.287,-31.103 27.777,0.76 32.612,19.412 32.612,19.412 0,0 3.458,14.471 9.232,14.257 5.263,-0.202 7.27,-6.142 7.853,-10.479 0.142,-1.045 -0.06,-3.54 0.582,-4.324 -0.939,1.152 -2.162,2.032 -3.564,2.554 C 7.604,26.113 3.065,26.945 2.471,21.658 1.616,13.877 -9.599,-6.059 -36.152,-5.643 m 13.306,48.354 9.528,-2.377 c 0,0 -2.388,-17.5 -11.227,-21.979 -0.25,-0.13 4.194,14.281 1.699,24.356 m 59.022,3.041 3.79,-1.687 c 0,0 2.198,-14.209 -3.79,-20.577 0,0 2.174,12.474 0,22.264 m -187.451,35.63 c 12.225,2.067 24.45,4.229 36.664,6.332 l 36.663,6.392 73.303,12.748 c 2.958,0.522 5.774,-1.462 6.285,-4.408 0.522,-2.947 -1.462,-5.762 -4.42,-6.285 -0.119,-0.024 -0.261,-0.036 -0.38,-0.047 H -3.184 L -114.243,85.029 c -12.344,-1.224 -24.676,-2.495 -37.032,-3.647 M 43.97,16.93 c 3.54,4.693 5.215,23.096 5.215,23.096 l 1.497,2.518 v 8.744 C 29.381,61.327 11.869,50.682 11.869,50.682 l -16.491,0.749 c -3.112,0.142 -7.449,2.637 -10.644,3.433 -4.42,1.093 -8.804,2.068 -13.342,2.566 -16.407,1.735 -32.933,0 -49.091,-2.934 -7.021,-1.271 -13.971,-2.851 -20.957,-4.325 -6.701,-1.425 -12.878,-3.908 -19.151,-6.605 -4.313,-1.842 -8.649,-3.659 -12.641,-6.119 -2.436,-1.496 -4.741,-3.243 -6.737,-5.31 -2.126,-2.21 -3.659,-4.859 -5.476,-7.319 -1.545,-2.091 -4.907,-0.463 -4.147,2.032 0.024,0.059 0.048,0.119 0.06,0.154 0.867,2.044 2.221,4.646 3.659,6.345 3.588,4.241 8.958,8.292 13.686,11.12 10.039,6.071 21.48,9.766 32.767,12.985 24.771,7.057 51.442,8.138 77.009,10.55 14.114,1.331 28.43,2.091 42.473,4.016 12.784,1.734 37.935,4.859 36.176,22.882 -1.71,18.129 -59.355,18.712 -59.355,18.712 0,0 -21.943,45.027 -27.372,50.468 -5.418,5.418 -16.503,18.474 -74.254,4.384 -57.739,-14.078 -55.327,-42.259 -55.327,-42.259 l -2.412,-39.622 c 0,0 -43.198,-11.179 -41.832,-23.321 1.391,-12.142 39.171,-12.819 39.171,-12.819 0,0 8.577,0.439 20.696,1.152 l -5.382,-9.683 c -6.749,-12.13 -6.38,-25.258 -8.851,-38.908 -4.277,-23.631 11.963,-52.702 33.978,-62.147 21.1,-9.053 53.949,-13.782 99.012,6.368 11.085,4.954 20.328,13.282 26.66,23.618 l 0.499,0.796 c 22.728,26.125 80.574,9.386 80.574,9.386 C 81.774,1.699 43.97,16.93 43.97,16.93"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
transform="matrix(1.4480327,0,0,-1.2531805,836.82211,767.63192)"
clip-path="url(#clipPath33)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB