Merge pull request #779 from redtide/about-dialog

UI: About dialog
This commit is contained in:
JP Cimalando 2021-04-05 17:59:34 +02:00 committed by GitHub
commit c2be936b7e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
26 changed files with 748 additions and 12 deletions

View file

@ -3,6 +3,7 @@ include("cmake/Vstgui.cmake")
set(EDITOR_RESOURCES
logo.png
logo_orange.png
logo_text.png
logo_text_white.png
logo_text_shaded.png
@ -17,6 +18,7 @@ set(EDITOR_RESOURCES
knob48@2x.png
Fonts/sfizz-fluentui-system-r20.ttf
Fonts/sfizz-fluentui-system-f20.ttf
Fonts/sfizz-misc-icons.ttf
Fonts/Roboto-Regular.ttf
PARENT_SCOPE)
@ -28,6 +30,9 @@ function(copy_editor_resources SOURCE_DIR DESTINATION_DIR)
endforeach()
endfunction()
set(UI_FILES layout/main.fl layout/about.fl)
source_group("Editor UI" FILES ${UI_FILES})
# editor
add_library(sfizz_editor STATIC EXCLUDE_FROM_ALL
src/editor/EditIds.h
@ -43,6 +48,8 @@ add_library(sfizz_editor STATIC EXCLUDE_FROM_ALL
src/editor/GUIHelpers.cpp
src/editor/GUIPiano.h
src/editor/GUIPiano.cpp
src/editor/DlgAbout.h
src/editor/DlgAbout.cpp
src/editor/ColorHelpers.h
src/editor/ColorHelpers.cpp
src/editor/ImageHelpers.h
@ -50,14 +57,18 @@ add_library(sfizz_editor STATIC EXCLUDE_FROM_ALL
src/editor/NativeHelpers.h
src/editor/NativeHelpers.cpp
src/editor/layout/main.hpp
src/editor/layout/about.hpp
src/editor/utility/vstgui_after.h
src/editor/utility/vstgui_before.h
src/editor/GitBuildId.h
${UI_FILES}
"${CMAKE_CURRENT_BINARY_DIR}/git-build-id/GitBuildId.c")
add_library(sfizz::editor ALIAS sfizz_editor)
target_include_directories(sfizz_editor PUBLIC "src")
target_link_libraries(sfizz_editor PUBLIC sfizz::messaging sfizz::plugins-common)
target_link_libraries(sfizz_editor PRIVATE sfizz::vstgui)
target_compile_definitions(sfizz_editor PRIVATE
"SFIZZ_VERSION=\"${CMAKE_PROJECT_VERSION}\"")
if(APPLE)
find_library(APPLE_APPKIT_LIBRARY "AppKit")
find_library(APPLE_CORESERVICES_LIBRARY "CoreServices")
@ -101,12 +112,14 @@ if(NOT CMAKE_CROSSCOMPILING)
"tools/layout-maker/sources/main.cpp")
target_link_libraries(layout-maker PRIVATE absl::strings)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/editor/layout/main.hpp"
COMMAND "$<TARGET_FILE:layout-maker>"
"${CMAKE_CURRENT_SOURCE_DIR}/layout/main.fl"
> "${CMAKE_CURRENT_SOURCE_DIR}/src/editor/layout/main.hpp"
DEPENDS layout-maker "${CMAKE_CURRENT_SOURCE_DIR}/layout/main.fl")
foreach(_layout main about)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/editor/layout/${_layout}.hpp"
COMMAND "$<TARGET_FILE:layout-maker>"
"${CMAKE_CURRENT_SOURCE_DIR}/layout/${_layout}.fl"
> "${CMAKE_CURRENT_SOURCE_DIR}/src/editor/layout/${_layout}.hpp"
DEPENDS layout-maker "${CMAKE_CURRENT_SOURCE_DIR}/layout/${_layout}.fl")
endforeach()
endif()
# git build identifier

View file

@ -0,0 +1,50 @@
# data file for the Fltk User Interface Designer (fluid)
version 1.0305
header_name {.h}
code_name {.cxx}
widget_class aboutView {
label {About sfizz} open selected
xywh {536 183 800 475} type Double visible
} {
Fl_Box {} {
image {../resources/logo_orange.png} xywh {200 80 400 180}
class Logo
}
Fl_Button {} {
comment {tag=kTagButtonSfztools}
xywh {235 45 50 50} labelsize 30
class ButtonSfztools
}
Fl_Button {} {
comment {tag=kTagButtonGithub}
xywh {305 45 50 50} labelsize 30
class ButtonGithub
}
Fl_Button {} {
comment {tag=kTagButtonDiscord}
xywh {375 45 50 50} labelsize 30
class ButtonDiscord
}
Fl_Button {} {
comment {tag=kTagButtonOpencollective}
xywh {445 45 50 50} labelsize 30
class ButtonOpencollective
}
Fl_Button {} {
comment {tag=kTagButtonSfzformat}
xywh {515 45 50 50} labelsize 30
class ButtonSfzformat
}
Fl_Box {} {
xywh {260 260 280 80}
class InfoBox
}
Fl_Box {} {
xywh {200 350 400 100}
class DescriptionBox
}
Fl_Box lblHover_ {
xywh {320 10 160 25}
class HoverBox
}
}

View file

@ -3,7 +3,7 @@ version 1.0305
header_name {.h}
code_name {.cxx}
widget_class mainView {open
xywh {659 319 800 475} type Double
xywh {353 221 800 475} type Double
class LogicalGroup visible
} {
Fl_Box imageContainer_ {
@ -20,9 +20,9 @@ widget_class mainView {open
class RoundedGroup
} {
Fl_Box {} {
comment {tag=kTagFirstChangePanel+kPanelGeneral}
comment {tag=kTagAbout} selected
image {../resources/logo_text_shaded.png} xywh {35 9 120 60}
class SfizzMainButton
class AboutButton
}
Fl_Button {} {
comment {tag=kTagFirstChangePanel+kPanelGeneral}
@ -140,7 +140,7 @@ widget_class mainView {open
}
Fl_Box volumeCCKnob_ {
label Volume
comment {tag=kTagSetCCVolume} selected
comment {tag=kTagSetCCVolume}
xywh {580 10 70 90} box BORDER_BOX labelsize 12 align 17
class KnobCCBox
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -0,0 +1,189 @@
// SPDX-License-Identifier: BSD-2-Clause
// This code is part of the sfizz library and is licensed under a BSD 2-clause
// license. You should have receive a LICENSE.md file along with the code.
// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz
#include "DlgAbout.h"
#include "GUIComponents.h"
#include "GitBuildId.h"
#include "NativeHelpers.h"
#include "utility/vstgui_before.h"
#include "vstgui/vstgui.h"
#include "utility/vstgui_after.h"
#include <absl/strings/str_cat.h>
SAboutDialog::SAboutDialog(const CRect& bounds)
: CViewContainer(bounds)
{
SharedPointer<CBitmap> logo = owned(new CBitmap("logo_orange.png"));
setBackgroundColor(CColor(0x00, 0x00, 0x00, 0xc0));
CView* aboutView = nullptr;
{
auto createaboutView = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
CViewContainer* container = new CViewContainer(bounds);
container->setBackgroundColor(CColor(0x00, 0x00, 0x00, 0x00));
return container;
};
auto createLogo = [&logo](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
CViewContainer* container = new CViewContainer(bounds);
container->setBackgroundColor(CColor(0x00, 0x00, 0x00, 0x00));
container->setBackground(logo);
return container;
};
auto createInfoBox = [](const CRect& bounds, int, const char*, CHoriTxtAlign align, int fontsize) {
CMultiLineTextLabel* lbl = new CMultiLineTextLabel(bounds);
auto font = makeOwned<CFontDesc>("Roboto", fontsize);
lbl->setFont(font);
lbl->setFontColor(CColor(0xff, 0xff, 0xff, 0xff));
lbl->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setBackColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setHoriAlign(align);
const char* version = SFIZZ_VERSION;
std::string versionBuf;
if (GitBuildId[0]) {
versionBuf = absl::StrCat(SFIZZ_VERSION ".", GitBuildId);
version = versionBuf.c_str();
}
lbl->setText(absl::StrCat(
u8"Version ", version, u8"\n"
u8"Copyright 2019-2021 by SFZTools Team,\n"
u8"licensed under BSD 2-clause license."));
return lbl;
};
auto createDescriptionBox = [](const CRect& bounds, int, const char*, CHoriTxtAlign align, int fontsize) {
CMultiLineTextLabel* lbl = new CMultiLineTextLabel(bounds);
auto font = makeOwned<CFontDesc>("Roboto", fontsize);
lbl->setFont(font);
lbl->setFontColor(CColor(0xff, 0xff, 0xff, 0xff));
lbl->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setBackColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setHoriAlign(align);
lbl->setText(absl::StrCat(
u8"Maintainers: Paul Ferrand, Jean-Pierre Cimalando\n"""
u8"Contributors: Andrea Zanellato, Alexander Mitchell, Michael Willis,\n"
u8"Tobiasz \"unfa\" Karoń, Kinwie, Atsushi Eno, Dominique Würtz et al."));
return lbl;
};
auto createHoverBox = [](const CRect& bounds, int, const char* label, CHoriTxtAlign align, int fontsize) {
CTextLabel* lbl = new CTextLabel(bounds, label);
auto font = makeOwned<CFontDesc>("Roboto", fontsize);
lbl->setFontColor(CColor(0xff, 0xff, 0xff, 0xff));
lbl->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setBackColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setHoriAlign(align);
lbl->setFont(font);
return lbl;
};
auto createGlyphButton = [this](UTF8StringPtr glyph, const CRect& bounds, int tag, int fontsize) {
STextButton* btn = new STextButton(bounds, this, tag, glyph);
btn->setFont(makeOwned<CFontDesc>("Sfizz Misc Icons", fontsize));
btn->setTextColor(kWhiteCColor);
btn->setHoverColor(CColor(0xfd, 0x98, 0x00, 0xff));
btn->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00));
btn->setFrameColorHighlighted(CColor(0x00, 0x00, 0x00, 0x00));
btn->setGradient(nullptr);
btn->setGradientHighlighted(nullptr);
return btn;
};
auto createButtonSfztools = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue000", bounds, tag, fontsize);
};
auto createButtonGithub = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue001", bounds, tag, fontsize);
};
auto createButtonDiscord = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue002", bounds, tag, fontsize);
};
auto createButtonOpencollective = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue003", bounds, tag, fontsize);
};
auto createButtonSfzformat = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue004", bounds, tag, fontsize);
};
#include "layout/about.hpp"
}
addView(aboutView);
CRect aboutBounds = aboutView->getViewSize();
aboutBounds.centerInside(CRect(bounds).originize());
aboutView->setViewSize(aboutBounds);
}
CMouseEventResult SAboutDialog::onMouseDown(CPoint& where, const CButtonState& buttons)
{
CMouseEventResult result = CViewContainer::onMouseDown(where, buttons);
if (result != kMouseEventHandled) {
setVisible(false);
result = kMouseEventHandled;
}
return result;
}
void SAboutDialog::valueChanged(CControl *ctl)
{
int32_t tag = ctl->getTag();
float value = ctl->getValue();
switch (tag) {
case kTagButtonSfztools:
if (value != 1)
break;
Call::later([]() {
openURLWithExternalProgram("https://sfz.tools/sfizz/");
});
break;
case kTagButtonGithub:
if (value != 1)
break;
Call::later([]() {
openURLWithExternalProgram("https://github.com/sfztools/sfizz");
});
break;
case kTagButtonDiscord:
if (value != 1)
break;
Call::later([]() {
openURLWithExternalProgram("https://discord.gg/3ArE9Mw");
});
break;
case kTagButtonOpencollective:
if (value != 1)
break;
Call::later([]() {
openURLWithExternalProgram("https://opencollective.com/sfztools");
});
break;
case kTagButtonSfzformat:
if (value != 1)
break;
Call::later([]() {
openURLWithExternalProgram("https://sfzformat.com/");
});
break;
default:
break;
}
}

View file

@ -0,0 +1,35 @@
// SPDX-License-Identifier: BSD-2-Clause
// This code is part of the sfizz library and is licensed under a BSD 2-clause
// license. You should have receive a LICENSE.md file along with the code.
// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz
#pragma once
#include "utility/vstgui_before.h"
#include "vstgui/lib/cviewcontainer.h"
#include "vstgui/vstgui.h"
#include "utility/vstgui_after.h"
using namespace VSTGUI;
class SAboutDialog : public CViewContainer, public IControlListener {
enum {
kTagButtonSfztools,
kTagButtonGithub,
kTagButtonDiscord,
kTagButtonOpencollective,
kTagButtonSfzformat
};
public:
explicit SAboutDialog(const CRect& bounds);
protected:
CMouseEventResult onMouseDown(CPoint& where, const CButtonState& buttons) override;
// IControlListener
void valueChanged(CControl* ctl) override;
CTextLabel* lblHover_ = {};
};

View file

@ -10,6 +10,7 @@
#include "GUIComponents.h"
#include "GUIHelpers.h"
#include "GUIPiano.h"
#include "DlgAbout.h"
#include "ImageHelpers.h"
#include "NativeHelpers.h"
#include "BitArray.h"
@ -86,6 +87,7 @@ struct Editor::Impl : EditorController::Receiver, IControlListener {
kTagSetCCVolume,
kTagSetCCPan,
kTagChooseUserFilesDir,
kTagAbout,
kTagFirstChangePanel,
kTagLastChangePanel = kTagFirstChangePanel + kNumPanels - 1,
};
@ -136,6 +138,8 @@ struct Editor::Impl : EditorController::Receiver, IControlListener {
SKnobCCBox* volumeCCKnob_ = nullptr;
SKnobCCBox* panCCKnob_ = nullptr;
SAboutDialog* aboutDialog_ = nullptr;
SharedPointer<CBitmap> backgroundBitmap_;
SharedPointer<CBitmap> defaultBackgroundBitmap_;
@ -641,7 +645,7 @@ void Editor::Impl::createFrameContents()
box->setTitleFont(font);
return box;
};
auto createSfizzMainButton = [this, &iconShaded](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int) {
auto createAboutButton = [this, &iconShaded](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int) {
return new CKickButton(bounds, this, tag, iconShaded);
};
auto createLabel = [&theme](const CRect& bounds, int, const char* label, CHoriTxtAlign align, int fontsize) {
@ -886,6 +890,12 @@ void Editor::Impl::createFrameContents()
mainView_ = owned(mainView);
}
///
SAboutDialog* aboutDialog = new SAboutDialog(mainView->getViewSize());
mainView->addView(aboutDialog);
aboutDialog_ = aboutDialog;
aboutDialog->setVisible(false);
///
SharedPointer<SFileDropTarget> fileDropTarget = owned(new SFileDropTarget);
@ -1777,6 +1787,13 @@ void Editor::Impl::valueChanged(CControl* ctl)
Call::later([this]() { chooseUserFilesDir(); });
break;
case kTagAbout:
if (value != 1)
break;
Call::later([this]() { aboutDialog_->setVisible(true); });
break;
default:
if (tag >= kTagFirstChangePanel && tag <= kTagLastChangePanel) {
int panelId = tag - kTagFirstChangePanel;

View file

@ -54,6 +54,21 @@ bool openDirectoryInExplorer(const char *filename)
return ShellExecuteExW(&info);
}
bool openURLWithExternalProgram(const char *url)
{
std::wstring path = stringToWideChar(url);
SHELLEXECUTEINFOW info;
memset(&info, 0, sizeof(info));
info.cbSize = sizeof(info);
info.lpVerb = L"open";
info.lpFile = path.c_str();
info.nShow = SW_SHOW;
return ShellExecuteExW(&info);
}
bool askQuestion(const char *text)
{
int ret = MessageBoxW(nullptr, stringToWideChar(text), L"Question", MB_YESNO);
@ -97,6 +112,12 @@ bool openDirectoryInExplorer(const char *filename)
return openFileByMimeType(filename, "inode/directory");
}
bool openURLWithExternalProgram(const char *url)
{
gboolean success = g_app_info_launch_default_for_uri(url, nullptr, nullptr);
return success == TRUE;
}
static std::vector<char *> createForkEnviron()
{
std::vector<char *> newEnv;

View file

@ -8,6 +8,7 @@
bool openFileInExternalEditor(const char *filename);
bool openDirectoryInExplorer(const char *filename);
bool openURLWithExternalProgram(const char *url);
bool askQuestion(const char *text);
#if !defined(_WIN32) && !defined(__APPLE__)

View file

@ -32,6 +32,13 @@ bool openDirectoryInExplorer(const char *fileName)
return openFileWithApplication(fileName, @"Finder");
}
bool openURLWithExternalProgram(const char *url)
{
NSWorkspace* workspace = [NSWorkspace sharedWorkspace];
NSURL* urlNs = [NSURL URLWithString:[NSString stringWithUTF8String:url]];
return [workspace openURL:urlNs] == YES;
}
bool askQuestion(const char *text)
{
NSAlert *alert = [[NSAlert alloc] init];

View file

@ -0,0 +1,22 @@
/* This file is generated by the layout maker tool. */
auto* const view__0 = createaboutView(CRect(0, 0, 800, 475), -1, "About sfizz", kCenterText, 14);
aboutView = view__0;
auto* const view__1 = createLogo(CRect(200, 80, 600, 260), -1, "", kCenterText, 14);
view__0->addView(view__1);
auto* const view__2 = createButtonSfztools(CRect(235, 45, 285, 95), kTagButtonSfztools, "", kCenterText, 30);
view__0->addView(view__2);
auto* const view__3 = createButtonGithub(CRect(305, 45, 355, 95), kTagButtonGithub, "", kCenterText, 30);
view__0->addView(view__3);
auto* const view__4 = createButtonDiscord(CRect(375, 45, 425, 95), kTagButtonDiscord, "", kCenterText, 30);
view__0->addView(view__4);
auto* const view__5 = createButtonOpencollective(CRect(445, 45, 495, 95), kTagButtonOpencollective, "", kCenterText, 30);
view__0->addView(view__5);
auto* const view__6 = createButtonSfzformat(CRect(515, 45, 565, 95), kTagButtonSfzformat, "", kCenterText, 30);
view__0->addView(view__6);
auto* const view__7 = createInfoBox(CRect(260, 260, 540, 340), -1, "", kCenterText, 14);
view__0->addView(view__7);
auto* const view__8 = createDescriptionBox(CRect(200, 350, 600, 450), -1, "", kCenterText, 14);
view__0->addView(view__8);
auto* const view__9 = createHoverBox(CRect(320, 10, 480, 35), -1, "", kCenterText, 14);
lblHover_ = view__9;
view__0->addView(view__9);

View file

@ -9,7 +9,7 @@ auto* const view__2 = createLogicalGroup(CRect(0, 0, 800, 110), -1, "", kCenterT
view__0->addView(view__2);
auto* const view__3 = createRoundedGroup(CRect(5, 4, 180, 105), -1, "", kCenterText, 14);
view__2->addView(view__3);
auto* const view__4 = createSfizzMainButton(CRect(30, 5, 150, 65), kTagFirstChangePanel+kPanelGeneral, "", kCenterText, 14);
auto* const view__4 = createAboutButton(CRect(30, 5, 150, 65), kTagAbout, "", kCenterText, 14);
view__3->addView(view__4);
auto* const view__5 = createHomeButton(CRect(31, 69, 63, 101), kTagFirstChangePanel+kPanelGeneral, "", kCenterText, 30);
view__3->addView(view__5);

View file

@ -9,6 +9,11 @@ fi
root="`pwd`"
fonts="$root/plugins/editor/resources/Fonts"
cd scripts/misc-icons/
./generate_icons_font.py
mv -f sfizz-misc-icons.ttf "$fonts"
cd ../../
if test ! -d plugins/editor/external/fluentui-system-icons; then
cd plugins/editor/external
git clone https://github.com/sfztools/fluentui-system-icons.git

View file

@ -64,6 +64,7 @@ Source: "sfizz.vst3\gpl-3.0.txt"; Components: main; DestDir: "{app}"
; Note(sfizz): OS older than Windows 10 require UI fonts to be installed system-wide
Source: "sfizz.vst3\Contents\Resources\Fonts\sfizz-fluentui-system-r20.ttf"; DestDir: "{fonts}"; FontInstall: "Sfizz Fluent System R20"; Flags: uninsneveruninstall; OnlyBelowVersion: 6.4
Source: "sfizz.vst3\Contents\Resources\Fonts\sfizz-fluentui-system-f20.ttf"; DestDir: "{fonts}"; FontInstall: "Sfizz Fluent System F20"; Flags: uninsneveruninstall; OnlyBelowVersion: 6.4
Source: "sfizz.vst3\Contents\Resources\Fonts\sfizz-misc-icons.ttf"; DestDir: "{fonts}"; FontInstall: "Sfizz Misc Icons"; Flags: uninsneveruninstall; OnlyBelowVersion: 6.4
Source: "sfizz.vst3\Contents\Resources\Fonts\Roboto-Regular.ttf"; DestDir: "{fonts}"; FontInstall: "Roboto Regular"; Flags: uninsneveruninstall; OnlyBelowVersion: 6.4
;Source: "setup\vc_redist.x64.exe"; DestDir: {tmp}; Flags: deleteafterinstall
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

View file

@ -0,0 +1,30 @@
# CC0 1.0 Universal
## Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an “owner”) of an original work of authorship and/or a database (each, a “Work”).
Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works (“Commons”) that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.
For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the “Affirmer”), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights (“Copyright and Related Rights”). Copyright and Related Rights include, but are not limited to, the following:
1. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;
2. moral rights retained by the original author(s) and/or performer(s);
3. publicity and privacy rights pertaining to a persons image or likeness depicted in a Work;
4. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(i), below;
5. rights protecting the extraction, dissemination, use and reuse of data in a Work;
6. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and
7. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmers Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the “Waiver”). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmers heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmers express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmers express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmers Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the “License”). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmers express Statement of Purpose.
4. Limitations and Disclaimers.
1. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.
2. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.
3. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any persons Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.
4. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.
For more information, please see http://creativecommons.org/publicdomain/zero/1.0/.

View file

@ -0,0 +1,14 @@
# Misc Icons
Currently these SVG icons are used in the about dialog, the script with the json
to generate the related truetype font.
The GitHub, Discord and Open Collective SVG comes from the [Simple Icons]
collection.
All the icons are licensed under the [Creative Common 0 License],
see the included [license] file.
[license]: LICENSE.md
[Simple Icons]: https://github.com/simple-icons/simple-icons/
[Creative Common 0 License]: https://creativecommons.org/publicdomain/zero/1.0/

View file

@ -0,0 +1,9 @@
{
"glyph_map": {
"0xe000": "sfztools",
"0xe001": "github",
"0xe002": "discord",
"0xe003": "opencollective",
"0xe004": "sfzformat"
}
}

View file

@ -0,0 +1,54 @@
#!/usr/bin/fontforge
import fontforge
import optparse
import json
import os
import sys
CONFIG_FILE = os.path.splitext(__file__)[0] + '.json'
DATA = json.load(open(CONFIG_FILE))
def main():
parser = optparse.OptionParser()
parser.add_option("-o", dest="output",
help="set the output file",
metavar="output")
parser.add_option("-n", dest="name",
help="set the font name",
metavar="name")
(options, args) = parser.parse_args()
output = options.output
name = options.name
if output is None:
output = 'sfizz-misc-icons.ttf'
if name is None:
name = 'Sfizz Misc Icons'
###
sys.stderr.write('* Font name: %s\n' % (name))
sys.stderr.write('* Output to: %s\n' % (output))
###
font = fontforge.font()
font.familyname = name
font.fullname = name
font.descent = 0
for (unicode, asset_name) in DATA['glyph_map'].items():
unicode = int(unicode, 16)
asset_path = 'icons/%s.svg' % (asset_name)
glyph = font.createChar(unicode)
glyph.importOutlines(asset_path)
glyph.width = 800
glyph.vwidth = 800
#font.save('sfizz-misc-icons.sfd')
font.generate(output)
if __name__ == '__main__':
main()

View file

@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Discord icon</title><path d="M20.222 0c1.406 0 2.54 1.137 2.607 2.475V24l-2.677-2.273-1.47-1.338-1.604-1.398.67 2.205H3.71c-1.402 0-2.54-1.065-2.54-2.476V2.48C1.17 1.142 2.31.003 3.715.003h16.5L20.222 0zm-6.118 5.683h-.03l-.202.2c2.073.6 3.076 1.537 3.076 1.537-1.336-.668-2.54-1.002-3.744-1.137-.87-.135-1.74-.064-2.475 0h-.2c-.47 0-1.47.2-2.81.735-.467.203-.735.336-.735.336s1.002-1.002 3.21-1.537l-.135-.135s-1.672-.064-3.477 1.27c0 0-1.805 3.144-1.805 7.02 0 0 1 1.74 3.743 1.806 0 0 .4-.533.805-1.002-1.54-.468-2.14-1.404-2.14-1.404s.134.066.335.2h.06c.03 0 .044.015.06.03v.006c.016.016.03.03.06.03.33.136.66.27.93.4.466.202 1.065.403 1.8.536.93.135 1.996.2 3.21 0 .6-.135 1.2-.267 1.8-.535.39-.2.87-.4 1.397-.737 0 0-.6.936-2.205 1.404.33.466.795 1 .795 1 2.744-.06 3.81-1.8 3.87-1.726 0-3.87-1.815-7.02-1.815-7.02-1.635-1.214-3.165-1.26-3.435-1.26l.056-.02zm.168 4.413c.703 0 1.27.6 1.27 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.334.002-.74.573-1.338 1.27-1.338zm-4.543 0c.7 0 1.266.6 1.266 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.334 0-.74.57-1.338 1.27-1.338z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub icon</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>

After

Width:  |  Height:  |  Size: 827 B

View file

@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Open Collective icon</title><path d="M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12c2.54 0 4.894-.79 6.834-2.135l-3.107-3.109a7.715 7.715 0 1 1 0-13.512l3.107-3.109A11.943 11.943 0 0 0 12 0zm9.865 5.166l-3.109 3.107A7.67 7.67 0 0 1 19.715 12a7.682 7.682 0 0 1-.959 3.727l3.109 3.107A11.943 11.943 0 0 0 24 12c0-2.54-.79-4.894-2.135-6.834z"/></svg>

After

Width:  |  Height:  |  Size: 420 B

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24pt" height="24pt" viewBox="0 0 24 24" version="1.1">
<g id="surface1">
<path d="M 14.503906 4.933594 C 14.234375 5.054688 13.964844 5.25 13.90625 5.355469 C 13.828125 5.476562 13.726562 5.519531 13.636719 5.476562 C 13.558594 5.414062 13.5 5.445312 13.5 5.519531 C 13.5 5.59375 13.363281 5.820312 13.199219 6.015625 C 13.035156 6.210938 12.855469 6.433594 12.78125 6.523438 C 12.675781 6.660156 12.40625 7.230469 12 8.175781 C 11.925781 8.339844 11.851562 8.578125 11.804688 8.699219 C 11.773438 8.820312 11.566406 8.941406 11.308594 8.941406 C 10.53125 8.984375 10.453125 9 10.546875 9.089844 C 10.589844 9.136719 10.574219 9.34375 10.5 9.539062 C 10.363281 9.871094 10.394531 9.898438 10.800781 9.898438 C 11.355469 9.898438 11.429688 10.035156 11.234375 10.664062 C 11.144531 10.949219 11.054688 11.339844 11.011719 11.550781 C 10.980469 11.761719 10.90625 12.03125 10.84375 12.148438 C 10.800781 12.269531 10.738281 12.433594 10.726562 12.523438 C 10.695312 12.601562 10.605469 12.976562 10.5 13.351562 C 10.394531 13.726562 10.289062 14.160156 10.261719 14.308594 C 10.230469 14.476562 10.109375 14.910156 9.988281 15.285156 C 9.855469 15.660156 9.734375 16.15625 9.691406 16.394531 C 9.570312 17.070312 9.433594 17.398438 9.285156 17.398438 C 9.195312 17.398438 9.179688 17.476562 9.226562 17.566406 C 9.285156 17.640625 9.210938 17.851562 9.058594 18.015625 C 8.863281 18.226562 8.761719 18.253906 8.609375 18.136719 C 8.488281 18.046875 8.445312 17.910156 8.488281 17.835938 C 8.535156 17.761719 8.488281 17.714844 8.371094 17.730469 C 8.265625 17.761719 8.191406 17.65625 8.191406 17.519531 C 8.203125 17.371094 8.175781 17.265625 8.113281 17.28125 C 8.070312 17.28125 7.996094 17.265625 7.949219 17.25 C 7.90625 17.234375 7.679688 17.203125 7.425781 17.191406 C 6.644531 17.144531 6.105469 17.96875 6.464844 18.628906 C 6.613281 18.914062 7.441406 19.304688 7.710938 19.230469 C 7.785156 19.199219 7.800781 19.304688 7.738281 19.453125 C 7.664062 19.695312 7.679688 19.695312 7.828125 19.5 C 7.949219 19.363281 8.28125 19.273438 8.683594 19.273438 C 9.089844 19.273438 9.359375 19.214844 9.40625 19.078125 C 9.449219 18.976562 9.585938 18.914062 9.703125 18.960938 C 9.824219 19.003906 9.871094 18.976562 9.824219 18.898438 C 9.78125 18.808594 9.796875 18.75 9.886719 18.75 C 9.976562 18.75 10.304688 18.480469 10.636719 18.148438 C 10.964844 17.820312 11.296875 17.550781 11.386719 17.550781 C 11.460938 17.550781 11.578125 17.488281 11.625 17.398438 C 11.683594 17.308594 11.609375 17.296875 11.460938 17.355469 C 11.234375 17.429688 11.25 17.398438 11.488281 17.011719 C 11.640625 16.769531 11.820312 16.53125 11.894531 16.484375 C 11.96875 16.441406 12.015625 16.351562 12.015625 16.289062 C 11.96875 16.003906 12.015625 15.886719 12.136719 15.960938 C 12.210938 16.019531 12.238281 15.898438 12.179688 15.71875 C 12.136719 15.523438 12.164062 15.433594 12.253906 15.496094 C 12.359375 15.570312 12.390625 15.496094 12.34375 15.300781 C 12.300781 15.136719 12.34375 15 12.433594 15 C 12.511719 15 12.554688 14.894531 12.511719 14.773438 C 12.449219 14.65625 12.496094 14.550781 12.585938 14.550781 C 12.675781 14.550781 12.734375 14.503906 12.734375 14.429688 C 12.660156 14.023438 12.765625 13.648438 12.929688 13.738281 C 13.035156 13.800781 13.050781 13.785156 12.988281 13.679688 C 12.855469 13.46875 13.199219 12.136719 13.363281 12.226562 C 13.425781 12.269531 13.453125 12.136719 13.410156 11.941406 C 13.378906 11.730469 13.410156 11.519531 13.5 11.476562 C 13.589844 11.414062 13.621094 11.308594 13.558594 11.234375 C 13.515625 11.144531 13.589844 10.980469 13.738281 10.859375 C 13.90625 10.726562 13.933594 10.664062 13.84375 10.726562 C 13.605469 10.84375 13.605469 10.769531 13.828125 10.273438 C 13.921875 10.066406 14.085938 9.914062 14.191406 9.960938 C 14.308594 10.003906 14.429688 9.976562 14.476562 9.898438 C 14.519531 9.808594 14.699219 9.808594 14.925781 9.898438 C 15.316406 10.050781 15.316406 10.050781 15.359375 9.300781 C 15.375 8.96875 15.316406 8.925781 14.820312 8.941406 C 14.445312 8.941406 14.25 8.878906 14.25 8.746094 C 14.25 8.640625 14.324219 8.550781 14.429688 8.550781 C 14.566406 8.550781 14.566406 8.503906 14.429688 8.371094 C 14.308594 8.25 14.308594 8.128906 14.429688 7.890625 C 14.519531 7.726562 14.609375 7.484375 14.625 7.351562 C 14.683594 6.765625 15.03125 5.863281 15.226562 5.789062 C 15.375 5.746094 15.523438 5.878906 15.691406 6.195312 C 16.003906 6.808594 15.945312 6.75 16.574219 6.898438 C 16.875 6.976562 17.085938 6.988281 17.039062 6.945312 C 17.011719 6.898438 17.113281 6.71875 17.308594 6.539062 C 17.578125 6.300781 17.625 6.136719 17.535156 5.820312 C 17.476562 5.59375 17.460938 5.398438 17.488281 5.355469 C 17.519531 5.324219 17.25 5.144531 16.875 4.964844 C 16.125 4.589844 15.253906 4.574219 14.503906 4.933594 Z M 14.503906 4.933594 "/>
<path d="M 5.265625 8.730469 C 3.34375 9.03125 2.296875 10.441406 2.984375 11.773438 C 3.105469 12.015625 3.195312 12.285156 3.179688 12.34375 C 3.164062 12.421875 3.210938 12.433594 3.300781 12.375 C 3.375 12.328125 3.449219 12.390625 3.449219 12.511719 C 3.449219 12.644531 3.496094 12.734375 3.570312 12.71875 C 3.78125 12.675781 4.199219 12.929688 4.109375 13.066406 C 4.066406 13.140625 4.125 13.15625 4.230469 13.125 C 4.453125 13.035156 5.59375 14.023438 5.746094 14.429688 C 5.789062 14.578125 5.773438 14.730469 5.683594 14.773438 C 5.609375 14.835938 5.578125 14.925781 5.609375 14.984375 C 5.65625 15.046875 5.519531 15.195312 5.296875 15.316406 C 4.46875 15.765625 3.988281 15.523438 3.523438 14.476562 C 3.121094 13.558594 2.96875 13.441406 2.296875 13.410156 C 1.738281 13.378906 1.351562 13.738281 1.320312 14.265625 C 1.289062 14.925781 1.351562 15.34375 1.453125 15.253906 C 1.546875 15.148438 2.039062 15.75 1.996094 15.898438 C 1.980469 15.945312 2.085938 15.988281 2.21875 16.003906 C 2.503906 16.019531 3.074219 16.15625 3.074219 16.199219 C 3.074219 16.335938 5.21875 16.425781 5.355469 16.289062 C 5.398438 16.246094 5.578125 16.273438 5.746094 16.363281 C 5.953125 16.484375 6.015625 16.484375 5.941406 16.363281 C 5.851562 16.214844 6.136719 16.125 6.496094 16.183594 C 6.554688 16.183594 6.601562 16.140625 6.601562 16.050781 C 6.601562 15.976562 6.691406 15.898438 6.796875 15.898438 C 7.035156 15.886719 7.800781 15.210938 7.800781 15 C 7.800781 14.925781 7.859375 14.851562 7.933594 14.851562 C 8.011719 14.851562 8.054688 14.730469 8.023438 14.578125 C 8.011719 14.445312 8.054688 14.203125 8.113281 14.070312 C 8.203125 13.921875 8.191406 13.785156 8.101562 13.726562 C 8.023438 13.679688 7.949219 13.515625 7.949219 13.378906 C 7.949219 13.109375 6.691406 11.65625 6.570312 11.789062 C 6.523438 11.820312 6.316406 11.683594 6.105469 11.488281 C 5.878906 11.28125 5.699219 11.160156 5.699219 11.203125 C 5.699219 11.25 5.59375 11.203125 5.476562 11.101562 C 5.355469 10.996094 5.296875 10.859375 5.339844 10.785156 C 5.386719 10.710938 5.339844 10.664062 5.25 10.679688 C 4.933594 10.753906 4.800781 10.109375 5.070312 9.855469 C 5.398438 9.554688 6.148438 9.40625 6.148438 9.628906 C 6.148438 9.71875 6.195312 9.75 6.238281 9.703125 C 6.375 9.570312 6.914062 10.199219 6.808594 10.363281 C 6.765625 10.441406 6.808594 10.5 6.886719 10.5 C 6.976562 10.5 7.050781 10.636719 7.050781 10.785156 C 7.050781 10.933594 7.15625 11.113281 7.289062 11.160156 C 7.410156 11.203125 7.484375 11.308594 7.441406 11.371094 C 7.363281 11.503906 8.160156 11.445312 8.550781 11.296875 C 8.671875 11.234375 8.820312 11.21875 8.878906 11.21875 C 8.953125 11.234375 8.984375 11.203125 8.984375 11.128906 C 8.96875 11.070312 8.984375 10.996094 9 10.949219 C 9.105469 10.726562 9.058594 9.898438 8.953125 9.898438 C 8.878906 9.898438 8.851562 9.796875 8.894531 9.691406 C 8.953125 9.539062 8.910156 9.496094 8.761719 9.554688 C 8.65625 9.601562 8.550781 9.570312 8.550781 9.496094 C 8.550781 9.375 7.964844 9 7.648438 8.925781 C 6.40625 8.609375 6.148438 8.59375 5.265625 8.730469 Z M 5.265625 8.730469 "/>
<path d="M 18.734375 8.609375 C 18.703125 8.640625 18.375 8.699219 18.015625 8.761719 C 17.65625 8.804688 17.265625 8.925781 17.160156 9.015625 C 17.039062 9.105469 16.949219 9.148438 16.949219 9.089844 C 16.949219 8.851562 16.289062 9.601562 15.976562 10.199219 C 15.511719 11.128906 15.644531 11.863281 16.289062 11.863281 C 16.980469 11.851562 17.054688 11.804688 16.980469 11.488281 C 16.933594 11.308594 16.84375 11.085938 16.753906 10.980469 C 16.484375 10.636719 16.859375 10.46875 17.683594 10.589844 C 18.105469 10.648438 18.449219 10.738281 18.449219 10.800781 C 18.449219 10.84375 18.539062 10.90625 18.644531 10.90625 C 18.734375 10.921875 19.066406 10.964844 19.351562 10.996094 C 19.636719 11.039062 19.933594 11.085938 20.011719 11.085938 C 20.175781 11.101562 19.800781 11.550781 19.621094 11.550781 C 19.546875 11.550781 19.53125 11.476562 19.589844 11.371094 C 19.648438 11.265625 19.636719 11.25 19.515625 11.308594 C 19.425781 11.371094 19.378906 11.476562 19.425781 11.550781 C 19.46875 11.625 18.976562 11.96875 18.34375 12.316406 C 17.699219 12.660156 17.128906 13.019531 17.070312 13.109375 C 16.996094 13.214844 16.949219 13.214844 16.949219 13.125 C 16.949219 13.035156 16.84375 13.109375 16.726562 13.261719 C 16.605469 13.425781 16.5 13.515625 16.5 13.453125 C 16.5 13.273438 15.375 14.503906 15.089844 15 C 14.941406 15.269531 14.789062 15.691406 14.773438 15.914062 C 14.746094 16.304688 14.789062 16.351562 15.179688 16.351562 C 15.496094 16.351562 15.644531 16.261719 15.703125 16.066406 C 15.75 15.898438 15.855469 15.75 15.945312 15.703125 C 16.15625 15.644531 17.746094 16.109375 17.640625 16.214844 C 17.609375 16.246094 18.164062 16.289062 18.871094 16.304688 C 19.726562 16.320312 20.203125 16.261719 20.28125 16.15625 C 20.339844 16.050781 20.460938 15.960938 20.550781 15.960938 C 20.625 15.945312 20.820312 15.929688 20.96875 15.898438 C 21.105469 15.886719 21.148438 15.839844 21.058594 15.808594 C 20.953125 15.765625 21.058594 15.554688 21.300781 15.300781 C 21.554688 15.03125 21.765625 14.566406 21.855469 14.113281 C 22.003906 13.378906 21.988281 13.363281 21.601562 13.199219 C 21.375 13.109375 21.105469 13.050781 20.984375 13.078125 C 20.671875 13.15625 20.578125 13.679688 20.820312 14.054688 C 20.941406 14.25 21.015625 14.398438 20.984375 14.398438 C 20.953125 14.414062 20.671875 14.445312 20.371094 14.488281 C 19.996094 14.550781 19.800781 14.519531 19.800781 14.398438 C 19.800781 14.308594 19.738281 14.265625 19.679688 14.308594 C 19.621094 14.355469 19.261719 14.308594 18.886719 14.21875 C 18.523438 14.144531 18.121094 14.054688 18 14.023438 C 17.878906 14.011719 17.789062 13.890625 17.820312 13.785156 C 17.835938 13.648438 17.773438 13.679688 17.640625 13.84375 C 17.519531 13.996094 17.386719 14.054688 17.339844 13.980469 C 17.296875 13.90625 17.503906 13.710938 17.820312 13.558594 C 18.121094 13.410156 18.554688 13.15625 18.78125 13.003906 C 19.019531 12.855469 19.273438 12.78125 19.363281 12.839844 C 19.484375 12.914062 19.5 12.886719 19.425781 12.75 C 19.335938 12.601562 19.363281 12.570312 19.546875 12.644531 C 19.679688 12.691406 19.785156 12.691406 19.753906 12.628906 C 19.738281 12.570312 19.753906 12.523438 19.800781 12.523438 C 19.859375 12.523438 20.191406 12.269531 20.535156 11.96875 C 20.894531 11.65625 21.253906 11.445312 21.316406 11.488281 C 21.390625 11.535156 21.449219 11.460938 21.449219 11.324219 C 21.449219 11.191406 21.523438 11.128906 21.601562 11.175781 C 21.691406 11.21875 21.75 11.160156 21.75 11.023438 C 21.75 10.859375 21.824219 10.800781 21.988281 10.859375 C 22.109375 10.90625 22.171875 10.890625 22.125 10.800781 C 22.078125 10.726562 22.183594 10.46875 22.351562 10.230469 C 22.53125 10.003906 22.679688 9.660156 22.695312 9.480469 C 22.710938 9.300781 22.769531 9.148438 22.828125 9.148438 C 22.890625 9.148438 22.90625 9.058594 22.859375 8.941406 C 22.726562 8.59375 21.945312 8.683594 21.839844 9.046875 C 21.78125 9.316406 21.691406 9.328125 21.046875 9.238281 C 20.65625 9.195312 20.308594 9.089844 20.28125 9 C 20.25 8.925781 20.128906 8.910156 19.996094 8.953125 C 19.84375 9.015625 19.785156 8.984375 19.84375 8.894531 C 19.921875 8.789062 19.84375 8.761719 19.664062 8.804688 C 19.515625 8.851562 19.246094 8.804688 19.078125 8.714844 C 18.914062 8.625 18.765625 8.578125 18.734375 8.609375 Z M 18.734375 8.609375 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24pt" height="24pt" viewBox="0 0 24 24" version="1.1">
<g id="surface1">
<path d="M 150.777995 36.139323 C 147.18099 37.324219 143.922526 38.424479 140.367839 42.148437 C 135.755208 48.580729 134.0625 55.309245 128.307292 63.180339 C 124.371745 67.454427 120.986328 69.401042 120.097656 75.875651 C 120.139974 86.582031 130.592448 85.354818 134.866536 90.85612 C 137.871094 95.595703 135.120443 101.943359 129.703776 102.366536 C 124.414062 102.789714 118.404948 98.557943 113.792318 96.230469 C 110.152995 102.958984 101.774089 116.246745 100.419922 123.610026 C 99.446615 129.534505 108.291016 132.073568 110.914714 128.942057 C 114.257812 124.117839 117.770182 115.865885 120.520833 110.61849 L 127.03776 113.707682 C 122.890625 121.832682 118.489583 130.380859 114.130859 139.267578 C 105.371094 157.210286 97.923177 175.745443 88.994141 193.561198 C 85.397135 200.755208 82.519531 208.330078 79.007161 215.566406 C 77.779948 218.063151 76.129557 221.702474 78.033854 224.283854 C 80.742187 227.923177 84.76237 227.373047 87.216797 224.156901 C 92.929687 216.582031 98.05013 205.70638 102.535807 197.285156 C 117.8125 168.509115 131.396484 138.632812 147.477214 110.279948 C 150.143229 105.540365 152.936198 100.758464 155.263672 95.849609 C 156.914062 92.379557 160.807292 87.724609 162.076823 86.116536 C 165.46224 81.757812 168.805339 84.042969 170.117187 83.196615 C 175.957031 79.684245 160.003255 71.770833 151.582031 63.434245 C 148.619792 60.852865 146.969401 58.525391 148.450521 55.563151 C 149.550781 53.320312 150.566406 50.78125 152.555339 49.130859 C 156.025391 46.295573 160.214844 47.565104 163.98112 49.046224 C 170.244141 51.500651 182.939453 58.35612 183.531901 55.097656 C 188.313802 50.78125 175.152995 40.159505 166.901042 37.535807 C 161.738281 35.843099 155.432943 35.208333 150.777995 36.139323 Z M 150.777995 36.139323 " transform="matrix(0.0923077,0,0,0.0923077,0,0)"/>
<path d="M 47.014974 80.530599 C 42.148437 81.630859 36.858724 84.21224 33.007812 87.34375 C 30.638021 89.248047 28.395182 91.490885 26.617839 93.98763 C 15.572917 109.518229 29.91862 125.218099 41.979167 134.274089 C 48.284505 138.971354 59.752604 146.927083 54.124349 155.983073 C 49.892578 162.796224 37.66276 164.319661 32.923177 157.041016 C 30.595703 153.486328 32.542318 148.027344 31.611328 144.007161 C 29.833984 136.220703 19.804687 132.242839 13.033854 136.728516 C 2.496745 143.795573 7.744141 158.818359 16.038411 165.08138 C 27.379557 173.58724 44.899089 173.417969 58.017578 170.455729 C 62.799479 169.397786 68.089193 167.239583 71.897786 164.150391 C 80.615234 157.083333 84.677734 142.1875 78.753255 131.988932 C 74.690755 125.00651 66.988932 120.182292 60.979818 114.934896 C 55.647786 110.279948 45.23763 104.69401 49.130859 96.01888 C 51.33138 91.110026 58.440755 86.158854 63.476562 90.602214 C 68.850911 95.341797 66.523437 104.736328 72.236328 109.306641 C 77.356771 113.411458 86.79362 111.930339 89.967448 105.963542 C 91.617839 102.874349 91.490885 97.330729 90.559896 93.98763 C 86.835937 80.31901 69.189453 79.980469 58.017578 79.980469 C 54.378255 79.980469 50.569661 79.726562 47.014974 80.530599 Z M 47.014974 80.530599 " transform="matrix(0.0923077,0,0,0.0923077,0,0)"/>
<path d="M 220.009766 104.990234 C 203.251953 117.600911 187.213542 131.311849 171.005859 144.599609 C 163.304036 150.947266 155.094401 157.464193 155.009766 168.001302 C 157.591146 168.59375 160.299479 169.609375 163.007812 169.186198 C 168.932292 168.255208 173.75651 163.938802 180.019531 164.150391 C 194.44987 164.615885 204.860026 176.380208 220.009766 169.186198 C 228.769531 164.996745 235.244141 156.702474 236.55599 147.011719 C 237.148437 142.483724 236.132812 136.559245 230.970052 135.332031 C 218.994141 132.412109 225.849609 147.307943 218.909505 149.423828 C 216.24349 150.270182 212.604167 148.450521 209.980469 147.773437 C 203.759766 146.165365 198.470052 144.980469 191.995443 144.980469 C 207.314453 133.343099 221.829427 120.139974 236.005859 107.10612 C 240.61849 102.832031 248.235677 98.219401 250.39388 91.998698 C 251.367187 89.163411 250.351562 85.86263 250.013021 82.985026 C 240.957031 82.985026 233.001302 87.301432 223.98763 86.962891 C 213.873698 86.582031 199.654948 78.457031 190.00651 84.593099 C 183.616536 88.697917 178.834635 98.092448 176.210937 104.990234 C 175.195312 107.65625 174.222005 112.141927 177.311198 113.919271 C 182.854818 117.050781 190.345052 106.005859 195 104.101562 C 198.723958 102.578125 202.278646 104.186198 206.002604 104.69401 C 210.572917 105.371094 215.397135 104.990234 220.009766 104.990234 Z M 220.009766 104.990234 " transform="matrix(0.0923077,0,0,0.0923077,0,0)"/>
<path d="M 130.465495 69.781901 C 121.32487 74.479167 129.153646 87.766927 138.251953 82.561849 C 146.588542 77.73763 138.167318 65.761719 130.465495 69.781901 Z M 130.465495 69.781901 " transform="matrix(0.0923077,0,0,0.0923077,0,0)"/>
<path d="M 131.184896 104.990234 C 129.746094 105.625 112.81901 95.807292 111.803385 94.91862 C 110.703125 93.98763 116.796875 82.434896 117.643229 81.588542 C 118.616536 80.572917 137.067057 90.771484 137.871094 91.95638 C 138.548177 92.972005 132.412109 104.440104 131.184896 104.990234 Z M 131.184896 104.990234 " transform="matrix(0.0923077,0,0,0.0923077,0,0)"/>
<path d="M 8.445312 19.273438 C 8.476562 19.410156 8.015625 20.191406 7.921875 20.324219 C 7.847656 20.433594 7.597656 20.328125 7.59375 20.175781 C 7.589844 20.011719 7.96875 19.246094 8.03125 19.121094 C 8.152344 18.886719 8.40625 19.097656 8.445312 19.273438 Z M 8.445312 19.273438 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB