diff options
Diffstat (limited to 'launcher')
31 files changed, 2368 insertions, 26 deletions
diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 0c6527b1..1da50e21 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -49,6 +49,7 @@ #include "StringUtils.h" #if defined Q_OS_WIN32 +#define WIN32_LEAN_AND_MEAN #include <objbase.h> #include <objidl.h> #include <shlguid.h> @@ -188,6 +189,8 @@ bool copy::operator()(const QString& offset, bool dryRun) qDebug() << "Source file:" << src_path; qDebug() << "Destination file:" << dst_path; } + m_copied++; + emit fileCopied(relative_dst_path); }; // We can't use copy_opts::recursive because we need to take into account the @@ -341,12 +344,37 @@ QString getDesktopDir() } // Cross-platform Shortcut creation -bool createShortCut(QString location, QString dest, QStringList args, QString name, QString icon) +bool createShortcut(QString destination, QString target, QStringList args, QString name, QString icon) { -#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) - location = PathCombine(location, name + ".desktop"); +#if defined(Q_OS_MACOS) + destination += ".command"; - QFile f(location); + QFile f(destination); + f.open(QIODevice::WriteOnly | QIODevice::Text); + QTextStream stream(&f); + + QString argstring; + if (!args.empty()) + argstring = " \"" + args.join("\" \"") + "\""; + + stream << "#!/bin/bash" + << "\n"; + stream << "\"" + << target + << "\" " + << argstring + << "\n"; + + stream.flush(); + f.close(); + + f.setPermissions(f.permissions() | QFileDevice::ExeOwner | QFileDevice::ExeGroup | QFileDevice::ExeOther); + + return true; +#elif defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD) + destination += ".desktop"; + + QFile f(destination); f.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream stream(&f); @@ -358,10 +386,12 @@ bool createShortCut(QString location, QString dest, QStringList args, QString na << "\n"; stream << "Type=Application" << "\n"; - stream << "TryExec=" << dest.toLocal8Bit() << "\n"; - stream << "Exec=" << dest.toLocal8Bit() << argstring.toLocal8Bit() << "\n"; + stream << "Exec=\"" << target.toLocal8Bit() << "\"" << argstring.toLocal8Bit() << "\n"; stream << "Name=" << name.toLocal8Bit() << "\n"; - stream << "Icon=" << icon.toLocal8Bit() << "\n"; + if (!icon.isEmpty()) + { + stream << "Icon=" << icon.toLocal8Bit() << "\n"; + } stream.flush(); f.close(); @@ -369,25 +399,132 @@ bool createShortCut(QString location, QString dest, QStringList args, QString na f.setPermissions(f.permissions() | QFileDevice::ExeOwner | QFileDevice::ExeGroup | QFileDevice::ExeOther); return true; -#elif defined Q_OS_WIN - // TODO: Fix - // QFile file(PathCombine(location, name + ".lnk")); - // WCHAR *file_w; - // WCHAR *dest_w; - // WCHAR *args_w; - // file.fileName().toWCharArray(file_w); - // dest.toWCharArray(dest_w); - - // QString argStr; - // for (int i = 0; i < args.count(); i++) - // { - // argStr.append(args[i]); - // argStr.append(" "); - // } - // argStr.toWCharArray(args_w); - - // return SUCCEEDED(CreateLink(file_w, dest_w, args_w)); - return false; +#elif defined(Q_OS_WIN) + QFileInfo targetInfo(target); + + if (!targetInfo.exists()) + { + qWarning() << "Target file does not exist!"; + return false; + } + + target = targetInfo.absoluteFilePath(); + + if (target.length() >= MAX_PATH) + { + qWarning() << "Target file path is too long!"; + return false; + } + + if (!icon.isEmpty() && icon.length() >= MAX_PATH) + { + qWarning() << "Icon path is too long!"; + return false; + } + + destination += ".lnk"; + + if (destination.length() >= MAX_PATH) + { + qWarning() << "Destination path is too long!"; + return false; + } + + QString argStr; + int argCount = args.count(); + for (int i = 0; i < argCount; i++) + { + if (args[i].contains(' ')) + { + argStr.append('"').append(args[i]).append('"'); + } + else + { + argStr.append(args[i]); + } + + if (i < argCount - 1) + { + argStr.append(" "); + } + } + + if (argStr.length() >= MAX_PATH) + { + qWarning() << "Arguments string is too long!"; + return false; + } + + HRESULT hres; + + // ...yes, you need to initialize the entire COM stack just to make a shortcut + hres = CoInitialize(nullptr); + if (FAILED(hres)) + { + qWarning() << "Failed to initialize COM!"; + return false; + } + + WCHAR wsz[MAX_PATH]; + + IShellLink* psl; + + // create an IShellLink instance - this stores the shortcut's attributes + hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); + if (SUCCEEDED(hres)) + { + wmemset(wsz, 0, MAX_PATH); + target.toWCharArray(wsz); + psl->SetPath(wsz); + + wmemset(wsz, 0, MAX_PATH); + argStr.toWCharArray(wsz); + psl->SetArguments(wsz); + + wmemset(wsz, 0, MAX_PATH); + targetInfo.absolutePath().toWCharArray(wsz); + psl->SetWorkingDirectory(wsz); // "Starts in" attribute + + if (!icon.isEmpty()) + { + wmemset(wsz, 0, MAX_PATH); + icon.toWCharArray(wsz); + psl->SetIconLocation(wsz, 0); + } + + // query an IPersistFile interface from our IShellLink instance + // this is the interface that will actually let us save the shortcut to disk! + IPersistFile* ppf; + hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); + if (SUCCEEDED(hres)) + { + wmemset(wsz, 0, MAX_PATH); + destination.toWCharArray(wsz); + hres = ppf->Save(wsz, TRUE); + if (FAILED(hres)) + { + qWarning() << "IPresistFile->Save() failed"; + qWarning() << "hres = " << hres; + } + ppf->Release(); + } + else + { + qWarning() << "Failed to query IPersistFile interface from IShellLink instance"; + qWarning() << "hres = " << hres; + } + psl->Release(); + } + else + { + qWarning() << "Failed to create IShellLink instance"; + qWarning() << "hres = " << hres; + } + + // go away COM, nobody likes you + CoUninitialize(); + + return SUCCEEDED(hres); #else qWarning("Desktop Shortcuts not supported on your platform!"); return false; diff --git a/launcher/FileSystem.h b/launcher/FileSystem.h index a9a81123..ac893725 100644 --- a/launcher/FileSystem.h +++ b/launcher/FileSystem.h @@ -172,4 +172,9 @@ QString getDesktopDir(); // Overrides one folder with the contents of another, preserving items exclusive to the first folder // Equivalent to doing QDir::rename, but allowing for overrides bool overrideFolder(QString overwritten_path, QString override_path); + +/** + * Creates a shortcut to the specified target file at the specified destination path. + */ +bool createShortcut(QString destination, QString target, QStringList args, QString name, QString icon); } diff --git a/launcher/resources/OSX/OSX.qrc b/launcher/resources/OSX/OSX.qrc index 19fe312b..9d4511d1 100644 --- a/launcher/resources/OSX/OSX.qrc +++ b/launcher/resources/OSX/OSX.qrc @@ -39,5 +39,6 @@ <file>scalable/export.svg</file> <file>scalable/rename.svg</file> <file>scalable/launch.svg</file> + <file>scalable/shortcut.svg</file> </qresource> </RCC> diff --git a/launcher/resources/OSX/scalable/shortcut.svg b/launcher/resources/OSX/scalable/shortcut.svg new file mode 100644 index 00000000..a2b7488e --- /dev/null +++ b/launcher/resources/OSX/scalable/shortcut.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!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="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"> +<rect fill="none" width="24" height="24"/> +<g id="_x35__1_"> + <g> + <path fill="#585858" d="M9.5,9.5C9.8,9.5,10,9.2,10,9l0-2.4l7.6,7.3c0.2,0.2,0.5,0.2,0.7,0c0.2-0.2,0.2-0.5,0-0.7L10.8,6L13,6 + c0.3,0,0.5-0.2,0.5-0.5S13.3,5,13,5H9.5C9.2,5,9,5.2,9,5.5V9C9,9.2,9.2,9.5,9.5,9.5z M21,5h-5.5v1H21c0.5,0,1,0.5,1,1l0,10 + c0,0.5-0.4,1-1,1l-10,0c-0.5,0-1-0.5-1-1v-5.5H9V17c0,1.1,1.1,2,2.2,2H21c1.1,0,2-0.9,2-2V7.2C23,6.1,22.1,5,21,5z"/> + </g> +</g> +</svg> diff --git a/launcher/resources/breeze_dark/breeze_dark.qrc b/launcher/resources/breeze_dark/breeze_dark.qrc index 4d7a69b2..97434abc 100644 --- a/launcher/resources/breeze_dark/breeze_dark.qrc +++ b/launcher/resources/breeze_dark/breeze_dark.qrc @@ -27,6 +27,7 @@ <file>scalable/refresh.svg</file> <file>scalable/resourcepacks.svg</file> <file>scalable/shaderpacks.svg</file> + <file>scalable/shortcut.svg</file> <file>scalable/screenshots.svg</file> <file>scalable/settings.svg</file> <file>scalable/status-bad.svg</file> diff --git a/launcher/resources/breeze_dark/scalable/shortcut.svg b/launcher/resources/breeze_dark/scalable/shortcut.svg new file mode 100644 index 00000000..5559be1d --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/shortcut.svg @@ -0,0 +1,18 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <g + transform="translate(-3,-1033.3622)"> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 4,7 C 3.4459904,7 3,7.4459904 3,8 l 0,6 c 0,0.55401 0.4459904,1 1,1 l 5,0 c 0.55401,0 1,-0.44599 1,-1 l 0,-1 2,0 0,1 c 0,0.554 0.44599,1 1,1 l 5,0 c 0.55401,0 1,-0.446 1,-1 L 19,8 C 19,7.446 18.55401,7 18,7 l -5,0 c -0.55401,0 -1,0.446 -1,1 l 0,1 -2,0 0,-1 C 10,7.4459904 9.55401,7 9,7 Z M 4,8 7,8 9,8 9,9 C 8.4459904,9 8,9.4459904 8,10 l 0,2 c 0,0.55401 0.4459904,1 1,1 l 0,1 -2,0 -3,0 z m 9,0 3,0 2,0 0,6 -2,0 -3,0 0,-1 c 0.55401,0 1,-0.44599 1,-1 l 0,-2 C 14,9.4459904 13.55401,9 13,9 Z m -4,2 4,0 0,2 -4,0 z" + transform="translate(0,1030.3622)" + id="rect4161" + class="ColorScheme-Text" /> + </g> +</svg> diff --git a/launcher/resources/breeze_light/breeze_light.qrc b/launcher/resources/breeze_light/breeze_light.qrc index 7d9d99f5..6d868b18 100644 --- a/launcher/resources/breeze_light/breeze_light.qrc +++ b/launcher/resources/breeze_light/breeze_light.qrc @@ -27,6 +27,7 @@ <file>scalable/refresh.svg</file> <file>scalable/resourcepacks.svg</file> <file>scalable/shaderpacks.svg</file> + <file>scalable/shortcut.svg</file> <file>scalable/screenshots.svg</file> <file>scalable/settings.svg</file> <file>scalable/status-bad.svg</file> diff --git a/launcher/resources/breeze_light/scalable/shortcut.svg b/launcher/resources/breeze_light/scalable/shortcut.svg new file mode 100644 index 00000000..426769d1 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/shortcut.svg @@ -0,0 +1,18 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <g + transform="translate(-3,-1033.3622)"> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 4,7 C 3.4459904,7 3,7.4459904 3,8 l 0,6 c 0,0.55401 0.4459904,1 1,1 l 5,0 c 0.55401,0 1,-0.44599 1,-1 l 0,-1 2,0 0,1 c 0,0.554 0.44599,1 1,1 l 5,0 c 0.55401,0 1,-0.446 1,-1 L 19,8 C 19,7.446 18.55401,7 18,7 l -5,0 c -0.55401,0 -1,0.446 -1,1 l 0,1 -2,0 0,-1 C 10,7.4459904 9.55401,7 9,7 Z M 4,8 7,8 9,8 9,9 C 8.4459904,9 8,9.4459904 8,10 l 0,2 c 0,0.55401 0.4459904,1 1,1 l 0,1 -2,0 -3,0 z m 9,0 3,0 2,0 0,6 -2,0 -3,0 0,-1 c 0.55401,0 1,-0.44599 1,-1 l 0,-2 C 14,9.4459904 13.55401,9 13,9 Z m -4,2 4,0 0,2 -4,0 z" + transform="translate(0,1030.3622)" + id="rect4161" + class="ColorScheme-Text" /> + </g> +</svg> diff --git a/launcher/resources/flat/flat.qrc b/launcher/resources/flat/flat.qrc index 508e0a9f..a846bd2d 100644 --- a/launcher/resources/flat/flat.qrc +++ b/launcher/resources/flat/flat.qrc @@ -35,6 +35,7 @@ <file>scalable/screenshot-placeholder.svg</file> <file>scalable/screenshots.svg</file> <file>scalable/settings.svg</file> + <file>scalable/shortcut.svg</file> <file>scalable/star.svg</file> <file>scalable/status-bad.svg</file> <file>scalable/status-good.svg</file> diff --git a/launcher/resources/flat/scalable/shortcut.svg b/launcher/resources/flat/scalable/shortcut.svg new file mode 100644 index 00000000..83878d19 --- /dev/null +++ b/launcher/resources/flat/scalable/shortcut.svg @@ -0,0 +1,3 @@ +<svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> + <path d="M5 21q-.825 0-1.413-.587Q3 19.825 3 19V5q0-.825.587-1.413Q4.175 3 5 3h7v2H5v14h14v-7h2v7q0 .825-.587 1.413Q19.825 21 19 21Zm4.7-5.3-1.4-1.4L17.6 5H14V3h7v7h-2V6.4Z"/> +</svg> diff --git a/launcher/resources/flat_white/flat_white.qrc b/launcher/resources/flat_white/flat_white.qrc index e11d6316..b0759d8f 100644 --- a/launcher/resources/flat_white/flat_white.qrc +++ b/launcher/resources/flat_white/flat_white.qrc @@ -35,6 +35,7 @@ <file>scalable/screenshot-placeholder.svg</file> <file>scalable/screenshots.svg</file> <file>scalable/settings.svg</file> + <file>scalable/shortcut.svg</file> <file>scalable/star.svg</file> <file>scalable/status-bad.svg</file> <file>scalable/status-good.svg</file> diff --git a/launcher/resources/flat_white/scalable/shortcut.svg b/launcher/resources/flat_white/scalable/shortcut.svg new file mode 100644 index 00000000..b419a77d --- /dev/null +++ b/launcher/resources/flat_white/scalable/shortcut.svg @@ -0,0 +1,3 @@ +<svg fill="#D8DEE9" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> + <path d="M5 21q-.825 0-1.413-.587Q3 19.825 3 19V5q0-.825.587-1.413Q4.175 3 5 3h7v2H5v14h14v-7h2v7q0 .825-.587 1.413Q19.825 21 19 21Zm4.7-5.3-1.4-1.4L17.6 5H14V3h7v7h-2V6.4Z"/> +</svg> diff --git a/launcher/resources/iOS/iOS.qrc b/launcher/resources/iOS/iOS.qrc index aa08d811..0b79efb2 100644 --- a/launcher/resources/iOS/iOS.qrc +++ b/launcher/resources/iOS/iOS.qrc @@ -39,5 +39,6 @@ <file>scalable/export.svg</file> <file>scalable/rename.svg</file> <file>scalable/launch.svg</file> + <file>scalable/shortcut.svg</file> </qresource> </RCC> diff --git a/launcher/resources/iOS/scalable/shortcut.svg b/launcher/resources/iOS/scalable/shortcut.svg new file mode 100644 index 00000000..16e9fa48 --- /dev/null +++ b/launcher/resources/iOS/scalable/shortcut.svg @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!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="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> +<g id="_x35__5_"> + <g> + <path fill="#3366CC" d="M3,11c0.6,0,1-0.5,1-1l0-4.8l15.2,14.5c0.4,0.4,1,0.4,1.4,0c0.4-0.4,0.4-1,0-1.4L5.6,4L10,4 + c0.6,0,1-0.5,1-1s-0.4-1-1-1H3C2.5,2,2,2.4,2,3v7C2,10.5,2.4,11,3,11z M26,2H15v2h11c1.1,0,2,0.9,2,2l0,20.1c0,1.1-0.9,2-2,2L6,28 + c-1.1,0-2-0.9-2-2V15H2v11c0,2.2,2.2,4,4.4,4h19.7c2.2,0,3.9-1.8,3.9-3.9V6.4C30,4.2,28.2,2,26,2z"/> + </g> +</g> +</svg> diff --git a/launcher/resources/multimc/multimc.qrc b/launcher/resources/multimc/multimc.qrc index 3f3d22fc..9741267c 100644 --- a/launcher/resources/multimc/multimc.qrc +++ b/launcher/resources/multimc/multimc.qrc @@ -312,5 +312,14 @@ <file>scalable/instances/fox.svg</file> <file>scalable/instances/bee.svg</file> <file>scalable/instances/prismlauncher.svg</file> + + <!-- delete, tag, rename, shortcut CC-BY-SA 3.0, Oxygen icons.--> + <file>scalable/delete.svg</file> + <file>scalable/tag.svg</file> + <file>scalable/rename.svg</file> + <file>scalable/shortcut.svg</file> + + <file>scalable/export.svg</file> + <file>scalable/launch.svg</file> </qresource> </RCC> diff --git a/launcher/resources/multimc/scalable/delete.svg b/launcher/resources/multimc/scalable/delete.svg new file mode 100644 index 00000000..414cbd5c --- /dev/null +++ b/launcher/resources/multimc/scalable/delete.svg @@ -0,0 +1,282 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="33.866665mm" + height="33.866665mm" + viewBox="0 0 33.866665 33.866665" + version="1.1" + id="svg2411" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs2408"> + <linearGradient + xlink:href="#linearGradient3315" + id="linearGradient3321" + x1="20.961376" + y1="70.875" + x2="106.96138" + y2="70.875" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.26458333,0,0,0.26458333,-152.84859,113.94802)" /> + <linearGradient + id="linearGradient3315"> + <stop + style="stop-color:#bf0303;stop-opacity:1;" + offset="0" + id="stop3317" /> + <stop + id="stop3323" + offset="0.375" + style="stop-color:#fc3d3d;stop-opacity:1;" /> + <stop + style="stop-color:#bf0303;stop-opacity:1;" + offset="0.75" + id="stop3325" /> + <stop + style="stop-color:#bf0303;stop-opacity:1;" + offset="1" + id="stop3319" /> + </linearGradient> + <linearGradient + xlink:href="#linearGradient3335" + id="linearGradient3341" + x1="22.032" + y1="39.036999" + x2="105.967" + y2="39.036999" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.26458333,0,0,0.26458333,-152.84859,113.94802)" /> + <linearGradient + id="linearGradient3335"> + <stop + style="stop-color:#9c0f0f;stop-opacity:0.28301886;" + offset="0" + id="stop3337" /> + <stop + id="stop3343" + offset="0.5" + style="stop-color:#9c0f0f;stop-opacity:1;" /> + <stop + style="stop-color:#9c0f0f;stop-opacity:0.1981132;" + offset="1" + id="stop3339" /> + </linearGradient> + <linearGradient + xlink:href="#linearGradient3347" + id="linearGradient3353" + x1="12.190286" + y1="21.738001" + x2="115.80972" + y2="21.738001" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.26458333,0,0,0.26458333,-152.84859,113.94802)" /> + <linearGradient + id="linearGradient3347"> + <stop + style="stop-color:#d50303;stop-opacity:1;" + offset="0" + id="stop3349" /> + <stop + id="stop3355" + offset="0.5" + style="stop-color:#feaeae;stop-opacity:1;" /> + <stop + style="stop-color:#d50303;stop-opacity:1;" + offset="1" + id="stop3351" /> + </linearGradient> + <linearGradient + xlink:href="#linearGradient3371" + id="linearGradient3377" + x1="68.617584" + y1="9.6200819" + x2="68.617584" + y2="34.302147" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.26458333,0,0,0.26458333,-152.84859,113.94802)" /> + <linearGradient + id="linearGradient3371"> + <stop + style="stop-color:#950000;stop-opacity:1;" + offset="0" + id="stop3373" /> + <stop + style="stop-color:#350000;stop-opacity:1;" + offset="1" + id="stop3375" /> + </linearGradient> + <linearGradient + xlink:href="#linearGradient3418" + id="linearGradient3432" + gradientUnits="userSpaceOnUse" + x1="41.25" + y1="85.302696" + x2="86.75" + y2="85.302696" + gradientTransform="matrix(0.26458333,0,0,0.26458333,-152.84859,113.94802)" /> + <linearGradient + id="linearGradient3418"> + <stop + id="stop3420" + offset="0" + style="stop-color:#390000;stop-opacity:1;" /> + <stop + style="stop-color:#da0303;stop-opacity:1;" + offset="0.375" + id="stop3422" /> + <stop + id="stop3424" + offset="0.75" + style="stop-color:#7b0101;stop-opacity:1;" /> + <stop + id="stop3426" + offset="1" + style="stop-color:#390000;stop-opacity:1;" /> + </linearGradient> + <linearGradient + xlink:href="#linearGradient3418" + id="linearGradient3429" + gradientUnits="userSpaceOnUse" + x1="41.25" + y1="85.651398" + x2="86.75" + y2="85.651398" + gradientTransform="matrix(0.26458333,0,0,0.26458333,-152.84859,113.94802)" /> + <linearGradient + xlink:href="#linearGradient3418" + id="linearGradient3416" + gradientUnits="userSpaceOnUse" + x1="41.25" + y1="64.263702" + x2="86.75" + y2="64.263702" + gradientTransform="matrix(0.26458333,0,0,0.26458333,-152.84859,113.94802)" /> + <radialGradient + r="63.912209" + fy="115.7093" + fx="63.912209" + cy="115.70919" + cx="63.912209" + gradientTransform="matrix(1,0,0,0.197802,0,92.82166)" + gradientUnits="userSpaceOnUse" + id="radialGradient3336" + xlink:href="#linearGradient3291" /> + <linearGradient + id="linearGradient3291"> + <stop + id="stop3293" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop3295" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + </defs> + <g + id="layer1" + transform="translate(196.3033,-17.933071)"> + <g + id="g6686" + transform="translate(-43.45471,-96.01495)"> + <path + d="m -135.91552,144.90744 c -3.41895,0 -6.36323,-0.76173 -8.22219,-1.87536 -0.49954,-0.0998 -0.96044,-0.2032 -1.37795,-0.3048 1.48722,1.68248 5.14376,2.97391 9.60014,2.97391 4.45664,0 8.11318,-1.29143 9.6004,-2.97391 -0.41751,0.10186 -0.87841,0.20505 -1.37795,0.3048 -1.85896,1.11363 -4.80298,1.87536 -8.22245,1.87536 z" + id="path202" + style="opacity:0.1;fill:#004d00;stroke-width:0.264583" /> + <path + d="m -135.91552,145.17203 c -3.80127,0 -7.01569,-0.94112 -8.80295,-2.26192 -0.27993,-0.0606 -0.54743,-0.12198 -0.79719,-0.18283 1.48722,1.68248 5.14376,2.97391 9.60014,2.97391 4.45664,0 8.11318,-1.29143 9.6004,-2.97391 -0.24976,0.0608 -0.51726,0.1225 -0.79718,0.18283 -1.78727,1.3208 -5.00169,2.26192 -8.80322,2.26192 z" + id="path204" + style="opacity:0.2;fill:#004d00;stroke-width:0.264583" /> + <path + d="m -135.91552,145.43661 c -4.1447,0 -7.59513,-1.11786 -9.25433,-2.62784 -0.11748,-0.027 -0.23442,-0.0542 -0.34581,-0.0818 1.48722,1.68249 5.14376,2.97392 9.60014,2.97392 4.45664,0 8.11318,-1.29143 9.6004,-2.97392 -0.11138,0.0275 -0.22833,0.0548 -0.34607,0.0818 -1.65894,1.50998 -5.10937,2.62784 -9.25433,2.62784 z" + id="path206" + style="opacity:0.3;fill:#004d00;stroke-width:0.264583" /> + <path + style="fill:url(#linearGradient3321);fill-opacity:1;stroke-width:0.264583" + id="path3962" + d="m -147.30256,119.69953 1.05833,21.36828 c 0,2.41274 4.47384,4.63338 10.31849,4.63338 5.84517,0 10.31901,-2.22064 10.31901,-4.63338 l 1.05834,-21.36828 z" /> + <rect + id="_x3C_Sezione_x3E_" + width="33.866665" + height="33.866665" + x="-152.84859" + y="113.94802" + style="fill:none;stroke-width:0.264583" /> + <path + d="m -124.84059,122.62688 0.0291,-0.322 c -1.12712,2.10397 -5.6679,3.67851 -11.1043,3.67851 -5.43586,0 -9.9769,-1.57454 -11.1035,-3.67851 l 0.0288,0.322 c 1.17792,2.07539 5.68801,3.62135 11.07466,3.62135 5.38745,-2.6e-4 9.89727,-1.54596 11.0752,-3.62135 z" + id="path66" + style="opacity:0.5;fill:url(#linearGradient3341);fill-opacity:1;stroke-width:0.264583" /> + <ellipse + cx="-135.91525" + cy="119.69953" + rx="11.377083" + ry="4.6963539" + id="ellipse75" + style="fill:url(#linearGradient3353);fill-opacity:1;stroke-width:0.264583" /> + <path + d="m -146.34804,119.44606 c 0,1.9222 4.19206,3.97986 10.43252,3.97986 6.24073,0 10.43305,-2.05766 10.43305,-3.97986 0,-1.92193 -4.19232,-3.71528 -10.43305,-3.71528 -6.24046,0 -10.43252,1.79361 -10.43252,3.71528 z" + id="path90" + style="opacity:0.727778;fill:url(#linearGradient3377);fill-opacity:1;stroke-width:0.264583" /> + <path + d="m -135.91552,115.73801 c -6.24046,0 -10.43252,1.92905 -10.43252,3.73061 0,0.47023 0.28786,0.94865 0.82074,1.39978 -0.0302,-0.13616 -0.0453,-0.27207 -0.0453,-0.40773 0,-2.65478 5.59455,-4.47464 9.65703,-4.47464 7.90334,0 11.98846,2.51962 9.65755,4.47464 -0.10375,0.087 -0.0153,0.27157 -0.0455,0.40773 0.53313,-0.45088 0.821,-0.92955 0.821,-1.39978 0,-1.80132 -4.19232,-3.73061 -10.43305,-3.73061 z" + id="path99" + style="opacity:0.494444;fill:#000000;fill-opacity:1;stroke-width:0.264583" /> + <g + id="g335" + transform="matrix(0.26458333,0,0,0.26458333,-152.84859,113.94802)"> + <path + d="m 63.999,32.22 c -21.36,0 -36.348,-6.18 -38.912,-12.556 -0.258,0.642 -0.393,1.286 -0.393,1.925 0,6.994 15.793,14.482 39.305,14.482 23.513,0 39.307,-7.488 39.307,-14.482 0,-0.639 -0.136,-1.283 -0.394,-1.925 C 100.35,26.04 85.36,32.22 63.999,32.22 Z" + id="path337" + style="opacity:0.1;fill:#555555" /> + <path + d="m 63.999,33.184 c -21.897,0 -37.093,-6.496 -39.077,-13.037 -0.147,0.481 -0.228,0.964 -0.228,1.443 0,6.994 15.793,14.482 39.305,14.482 23.513,0 39.307,-7.488 39.307,-14.482 0,-0.479 -0.082,-0.962 -0.228,-1.443 -1.983,6.541 -17.18,13.037 -39.079,13.037 z" + id="path339" + style="opacity:0.15;fill:#555555" /> + <path + d="m 63.999,34.146 c -22.435,0 -37.832,-6.818 -39.195,-13.519 -0.065,0.321 -0.109,0.642 -0.109,0.962 0,6.994 15.793,14.482 39.305,14.482 23.513,0 39.307,-7.488 39.307,-14.482 0,-0.32 -0.044,-0.641 -0.11,-0.962 -1.364,6.701 -16.762,13.519 -39.198,13.519 z" + id="path341" + style="opacity:0.2;fill:#555555" /> + <path + d="m 63.999,35.109 c -22.973,0 -38.568,-7.148 -39.271,-14 -0.017,0.161 -0.034,0.321 -0.034,0.481 0,6.994 15.793,14.482 39.305,14.482 23.513,0 39.307,-7.488 39.307,-14.482 0,-0.16 -0.018,-0.32 -0.034,-0.481 -0.704,6.851 -16.299,14 -39.273,14 z" + id="path343" + style="opacity:0.25;fill:#555555" /> |
