mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2025-03-06 14:27:43 +00:00
Added a folder badge including support for a folder link overlay.
This commit is contained in:
parent
37e2564ff7
commit
30b02456c0
es-app/src/views
es-core/src
resources/graphics
|
@ -522,19 +522,26 @@ void GamelistView::legacyUpdateInfoPanel(const CursorState& state)
|
|||
for (auto& badge : badgeComponent->getBadgeTypes()) {
|
||||
BadgeComponent::BadgeInfo badgeInfo;
|
||||
badgeInfo.badgeType = badge;
|
||||
if (badge == "controller") {
|
||||
if (badge == "folder") {
|
||||
if (file->getType() == FOLDER) {
|
||||
if (file->metadata.get("folderlink") != "")
|
||||
badgeInfo.folderLink = true;
|
||||
badgeSlots.emplace_back(badgeInfo);
|
||||
}
|
||||
}
|
||||
else if (badge == "controller") {
|
||||
if (file->metadata.get("controller") != "") {
|
||||
badgeInfo.gameController = file->metadata.get("controller");
|
||||
badgeSlots.push_back(badgeInfo);
|
||||
badgeSlots.emplace_back(badgeInfo);
|
||||
}
|
||||
}
|
||||
else if (badge == "altemulator") {
|
||||
if (file->metadata.get(badge) != "")
|
||||
badgeSlots.push_back(badgeInfo);
|
||||
badgeSlots.emplace_back(badgeInfo);
|
||||
}
|
||||
else {
|
||||
if (file->metadata.get(badge) == "true")
|
||||
badgeSlots.push_back(badgeInfo);
|
||||
badgeSlots.emplace_back(badgeInfo);
|
||||
}
|
||||
}
|
||||
badgeComponent->setBadges(badgeSlots);
|
||||
|
|
|
@ -578,19 +578,26 @@ void GamelistView::updateInfoPanel(const CursorState& state)
|
|||
for (auto& badge : badgeComponent->getBadgeTypes()) {
|
||||
BadgeComponent::BadgeInfo badgeInfo;
|
||||
badgeInfo.badgeType = badge;
|
||||
if (badge == "controller") {
|
||||
if (badge == "folder") {
|
||||
if (file->getType() == FOLDER) {
|
||||
if (file->metadata.get("folderlink") != "")
|
||||
badgeInfo.folderLink = true;
|
||||
badgeSlots.emplace_back(badgeInfo);
|
||||
}
|
||||
}
|
||||
else if (badge == "controller") {
|
||||
if (file->metadata.get("controller") != "") {
|
||||
badgeInfo.gameController = file->metadata.get("controller");
|
||||
badgeSlots.push_back(badgeInfo);
|
||||
badgeSlots.emplace_back(badgeInfo);
|
||||
}
|
||||
}
|
||||
else if (badge == "altemulator") {
|
||||
if (file->metadata.get(badge) != "")
|
||||
badgeSlots.push_back(badgeInfo);
|
||||
badgeSlots.emplace_back(badgeInfo);
|
||||
}
|
||||
else {
|
||||
if (file->metadata.get(badge) == "true")
|
||||
badgeSlots.push_back(badgeInfo);
|
||||
badgeSlots.emplace_back(badgeInfo);
|
||||
}
|
||||
}
|
||||
badgeComponent->setBadges(badgeSlots);
|
||||
|
|
|
@ -154,6 +154,9 @@ std::map<std::string, std::map<std::string, ThemeData::ElementPropertyType>>
|
|||
{"controllerSize", FLOAT},
|
||||
{"customBadgeIcon", PATH},
|
||||
{"customControllerIcon", PATH},
|
||||
{"folderLinkPos", NORMALIZED_PAIR},
|
||||
{"folderLinkSize", FLOAT},
|
||||
{"customFolderLinkIcon", PATH},
|
||||
{"opacity", FLOAT},
|
||||
{"visible", BOOLEAN},
|
||||
{"zIndex", FLOAT}}},
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
// Used by the gamelist views.
|
||||
//
|
||||
|
||||
#define SLOT_FOLDER "folder"
|
||||
#define SLOT_FAVORITE "favorite"
|
||||
#define SLOT_COMPLETED "completed"
|
||||
#define SLOT_KIDGAME "kidgame"
|
||||
|
@ -66,9 +67,10 @@ namespace
|
|||
BadgeComponent::BadgeComponent()
|
||||
: mFlexboxItems {}
|
||||
, mFlexboxComponent {mFlexboxItems}
|
||||
, mBadgeTypes {{SLOT_FAVORITE, SLOT_COMPLETED, SLOT_KIDGAME, SLOT_BROKEN, SLOT_CONTROLLER,
|
||||
SLOT_ALTEMULATOR}}
|
||||
, mBadgeTypes {{SLOT_FOLDER, SLOT_FAVORITE, SLOT_COMPLETED, SLOT_KIDGAME, SLOT_BROKEN,
|
||||
SLOT_CONTROLLER, SLOT_ALTEMULATOR}}
|
||||
{
|
||||
mBadgeIcons[SLOT_FOLDER] = ":/graphics/badge_folder.svg";
|
||||
mBadgeIcons[SLOT_FAVORITE] = ":/graphics/badge_favorite.svg";
|
||||
mBadgeIcons[SLOT_COMPLETED] = ":/graphics/badge_completed.svg";
|
||||
mBadgeIcons[SLOT_KIDGAME] = ":/graphics/badge_kidgame.svg";
|
||||
|
@ -116,6 +118,13 @@ void BadgeComponent::setBadges(const std::vector<BadgeInfo>& badges)
|
|||
if (it->overlayImage.getTexture() != nullptr)
|
||||
texturePath = it->overlayImage.getTexture()->getTextureFilePath();
|
||||
|
||||
if (badge.badgeType == "folder") {
|
||||
if (badge.folderLink)
|
||||
it->overlayImage.setVisible(true);
|
||||
else
|
||||
it->overlayImage.setVisible(false);
|
||||
}
|
||||
|
||||
if (badge.gameController != "" && badge.gameController != texturePath) {
|
||||
|
||||
auto it2 = std::find_if(sGameControllers.begin(), sGameControllers.end(),
|
||||
|
@ -267,31 +276,6 @@ void BadgeComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
|
|||
}
|
||||
}
|
||||
|
||||
if (elem->has("controllerPos")) {
|
||||
const glm::vec2 controllerPos = elem->get<glm::vec2>("controllerPos");
|
||||
if (controllerPos.x < -1.0f || controllerPos.x > 2.0f || controllerPos.y < -1.0f ||
|
||||
controllerPos.y > 2.0f) {
|
||||
LOG(LogWarning)
|
||||
<< "BadgeComponent: Invalid theme configuration, <controllerPos> defined as \""
|
||||
<< controllerPos.x << " " << controllerPos.y << "\"";
|
||||
}
|
||||
else {
|
||||
mFlexboxComponent.setOverlayPosition(controllerPos);
|
||||
}
|
||||
}
|
||||
|
||||
if (elem->has("controllerSize")) {
|
||||
const float controllerSize = elem->get<float>("controllerSize");
|
||||
if (controllerSize < 0.1f || controllerSize > 2.0f) {
|
||||
LOG(LogWarning)
|
||||
<< "BadgeComponent: Invalid theme configuration, <controllerSize> defined as \""
|
||||
<< controllerSize << "\"";
|
||||
}
|
||||
else {
|
||||
mFlexboxComponent.setOverlaySize(controllerSize);
|
||||
}
|
||||
}
|
||||
|
||||
if (elem->has("slots")) {
|
||||
// Replace possible whitespace separators with commas.
|
||||
std::string slotsTag = Utils::String::toLower(elem->get<std::string>("slots"));
|
||||
|
@ -300,7 +284,15 @@ void BadgeComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
|
|||
character = ',';
|
||||
}
|
||||
slotsTag = Utils::String::replace(slotsTag, ",,", ",");
|
||||
std::vector<std::string> slots = Utils::String::delimitedStringToVector(slotsTag, ",");
|
||||
std::vector<std::string> slots {Utils::String::delimitedStringToVector(slotsTag, ",")};
|
||||
|
||||
// If the "all" value has been set, then populate all badges not already defined.
|
||||
if (std::find(slots.begin(), slots.end(), "all") != slots.end()) {
|
||||
for (auto& badge : mBadgeTypes) {
|
||||
if (std::find(slots.begin(), slots.end(), badge) == slots.end())
|
||||
slots.emplace_back(badge);
|
||||
}
|
||||
}
|
||||
|
||||
for (auto slot : slots) {
|
||||
if (std::find(mBadgeTypes.cbegin(), mBadgeTypes.cend(), slot) != mBadgeTypes.end()) {
|
||||
|
@ -317,6 +309,36 @@ void BadgeComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
|
|||
item.baseImage = badgeImage;
|
||||
item.overlayImage = ImageComponent {};
|
||||
|
||||
if (slot == "folder") {
|
||||
if (elem->has("customFolderLinkIcon"))
|
||||
item.overlayImage.setImage(elem->get<std::string>("customFolderLinkIcon"));
|
||||
else
|
||||
item.overlayImage.setImage(":/graphics/badge_folderlink_overlay.svg");
|
||||
|
||||
if (elem->has("folderLinkPos")) {
|
||||
glm::vec2 folderLinkPos {elem->get<glm::vec2>("folderLinkPos")};
|
||||
folderLinkPos.x = glm::clamp(folderLinkPos.x, -1.0f, 2.0f);
|
||||
folderLinkPos.y = glm::clamp(folderLinkPos.y, -1.0f, 2.0f);
|
||||
item.overlayPosition = folderLinkPos;
|
||||
}
|
||||
|
||||
if (elem->has("folderLinkSize")) {
|
||||
item.overlaySize =
|
||||
glm::clamp(elem->get<float>("folderLinkSize"), 0.1f, 1.0f);
|
||||
}
|
||||
}
|
||||
else if (slot == "controller") {
|
||||
if (elem->has("controllerPos")) {
|
||||
glm::vec2 controllerPos {elem->get<glm::vec2>("controllerPos")};
|
||||
controllerPos.x = glm::clamp(controllerPos.x, -1.0f, 2.0f);
|
||||
controllerPos.y = glm::clamp(controllerPos.y, -1.0f, 2.0f);
|
||||
item.overlayPosition = controllerPos;
|
||||
}
|
||||
|
||||
if (elem->has("controllerSize"))
|
||||
item.overlaySize =
|
||||
glm::clamp(elem->get<float>("controllerSize"), 0.1f, 2.0f);
|
||||
}
|
||||
mFlexboxItems.emplace_back(std::move(item));
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -27,6 +27,7 @@ public:
|
|||
struct BadgeInfo {
|
||||
std::string badgeType;
|
||||
std::string gameController;
|
||||
bool folderLink {false};
|
||||
};
|
||||
|
||||
static void populateGameControllers();
|
||||
|
|
|
@ -28,8 +28,6 @@ FlexboxComponent::FlexboxComponent(std::vector<FlexboxItem>& items)
|
|||
, mItemsPerLine {DEFAULT_ITEMS_PER_LINE}
|
||||
, mItemPlacement {DEFAULT_ITEM_PLACEMENT}
|
||||
, mItemMargin {glm::vec2 {DEFAULT_MARGIN_X, DEFAULT_MARGIN_Y}}
|
||||
, mOverlayPosition {0.5f, 0.5f}
|
||||
, mOverlaySize {0.5f}
|
||||
, mLayoutValid {false}
|
||||
{
|
||||
}
|
||||
|
@ -220,11 +218,13 @@ void FlexboxComponent::computeLayout()
|
|||
|
||||
// Optional overlay image.
|
||||
if (item.overlayImage.getTexture() != nullptr) {
|
||||
item.overlayImage.setResize(item.baseImage.getSize().x * mOverlaySize, 0.0f);
|
||||
item.overlayImage.setResize(item.baseImage.getSize().x * item.overlaySize, 0.0f);
|
||||
item.overlayImage.setPosition(
|
||||
item.baseImage.getPosition().x + (item.baseImage.getSize().x * mOverlayPosition.x) -
|
||||
item.baseImage.getPosition().x +
|
||||
(item.baseImage.getSize().x * item.overlayPosition.x) -
|
||||
item.overlayImage.getSize().x / 2.0f,
|
||||
item.baseImage.getPosition().y + (item.baseImage.getSize().y * mOverlayPosition.y) -
|
||||
item.baseImage.getPosition().y +
|
||||
(item.baseImage.getSize().y * item.overlayPosition.y) -
|
||||
item.overlayImage.getSize().y / 2.0f);
|
||||
}
|
||||
|
||||
|
|
|
@ -18,11 +18,16 @@ public:
|
|||
struct FlexboxItem {
|
||||
// Optional label, mostly a convenience for the calling class to track items.
|
||||
std::string label;
|
||||
|
||||
// Main image that governs grid sizing and placement.
|
||||
ImageComponent baseImage;
|
||||
|
||||
// Optional overlay image that can be sized and positioned relative to the base image.
|
||||
ImageComponent overlayImage;
|
||||
bool visible = false;
|
||||
glm::vec2 overlayPosition {0.5f, 0.5f};
|
||||
float overlaySize {0.5f};
|
||||
|
||||
bool visible {false};
|
||||
};
|
||||
|
||||
FlexboxComponent(std::vector<FlexboxItem>& items);
|
||||
|
@ -68,12 +73,6 @@ public:
|
|||
const glm::vec2& getItemMargin() const { return mItemMargin; }
|
||||
void setItemMargin(glm::vec2 value);
|
||||
|
||||
const glm::vec2& getOverlayPosition() const { return mOverlayPosition; }
|
||||
void setOverlayPosition(glm::vec2 position) { mOverlayPosition = position; }
|
||||
|
||||
float getOverlaySize() const { return mOverlaySize; }
|
||||
void setOverlaySize(float size) { mOverlaySize = size; }
|
||||
|
||||
void onSizeChanged() override { mLayoutValid = false; }
|
||||
void render(const glm::mat4& parentTrans) override;
|
||||
|
||||
|
@ -92,9 +91,6 @@ private:
|
|||
std::string mItemPlacement;
|
||||
glm::vec2 mItemMargin;
|
||||
|
||||
glm::vec2 mOverlayPosition;
|
||||
float mOverlaySize;
|
||||
|
||||
bool mLayoutValid;
|
||||
};
|
||||
|
||||
|
|
149
resources/graphics/badge_folder.svg
Normal file
149
resources/graphics/badge_folder.svg
Normal file
|
@ -0,0 +1,149 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="80"
|
||||
height="92"
|
||||
version="1.1"
|
||||
viewBox="0 0 21.166666 24.341667"
|
||||
id="svg92"
|
||||
sodipodi:docname="badge_folder.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
|
||||
<defs
|
||||
id="defs96" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="2065"
|
||||
id="namedview94"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="4.5498593"
|
||||
inkscape:cx="-22.171793"
|
||||
inkscape:cy="17.824401"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg92"
|
||||
units="px" />
|
||||
<metadata
|
||||
id="metadata2">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<rect
|
||||
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.51566374;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect5286"
|
||||
width="21.166666"
|
||||
height="24.341667"
|
||||
x="2.2368853e-07"
|
||||
y="-2.6645353e-15" />
|
||||
<g
|
||||
id="g16"
|
||||
transform="matrix(0.10079384,0,0,0.08235571,-4.2317622e-4,0.04964061)"
|
||||
style="fill:#d7d7d7;fill-opacity:1">
|
||||
<rect
|
||||
x="3.0257001"
|
||||
y="2.9029"
|
||||
width="204.36"
|
||||
height="288.81"
|
||||
id="rect14"
|
||||
style="fill:#d7d7d7;fill-opacity:1;stroke-width:0.26458001" />
|
||||
</g>
|
||||
<g
|
||||
id="g20"
|
||||
transform="matrix(0.10079384,0,0,0.0816046,-0.01521936,0.13809161)"
|
||||
style="fill:#0e0e0e;fill-opacity:1">
|
||||
<rect
|
||||
x="7.7007999"
|
||||
y="7.7174001"
|
||||
width="194.89999"
|
||||
height="279.22"
|
||||
id="rect18"
|
||||
style="fill:#0e0e0e;fill-opacity:1;stroke-width:0.26458001" />
|
||||
</g>
|
||||
<rect
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke-width:0.02649944"
|
||||
id="rect22"
|
||||
height="17.205626"
|
||||
width="17.540144"
|
||||
y="5.3001137"
|
||||
x="1.8323119" />
|
||||
<g
|
||||
aria-label="FOLDER"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.88475561px;line-height:1.25;font-family:Digitalt;-inkscape-font-specification:Digitalt;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:0.26168332"
|
||||
id="text4765"
|
||||
transform="matrix(1.1389238,0,0,1.0185793,-1.4976356,-0.1085487)">
|
||||
<path
|
||||
d="m 3.9029229,3.0915175 q 0,-0.6678377 0.019081,-1.4310807 0.2265878,-0.010733 0.9898308,-0.010733 0.4734492,0 0.7656282,0.010733 0.019081,0 0.033392,0.014311 0.014311,0.014311 0.014311,0.033392 0.00477,0.2909864 0.00477,0.4126282 0,0.1872331 -0.00477,0.3506148 -0.2277803,0.010733 -0.6940742,0.010733 -0.08825,0 -0.159804,-0.00119 0,0.062013 -0.00239,0.1991587 -0.00119,0.1359527 -0.00239,0.2110844 0.3899695,0.00477 0.5342701,0.00954 0.019081,0 0.033392,0.014311 0.014311,0.014311 0.014311,0.033392 0.00477,0.2909865 0.00477,0.4126283 0,0.1872331 -0.00477,0.3506148 -0.1741148,0.00835 -0.5783951,0.010733 0.00596,0.6678377 0.00596,0.8002127 -0.2265878,0.010733 -0.4173986,0.010733 -0.1967736,0 -0.4889525,-0.010733 -0.019081,0 -0.033392,-0.014311 Q 3.922004,4.4939767 3.922004,4.4748956 3.9029229,3.578085 3.9029229,3.0915175 Z"
|
||||
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.26168332"
|
||||
id="path4767"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 5.8110306,3.090325 q 0,-0.3470371 0.075132,-0.6177499 Q 5.9612941,2.2006698 6.102017,2.0193995 6.2439325,1.8381293 6.4442838,1.7391462 6.6458277,1.6401631 6.898652,1.6270449 q 0.2325506,0 0.4150134,0.032199 0.1824628,0.031007 0.3339188,0.1025608 0.1526486,0.070361 0.2599797,0.1836554 0.1073311,0.1132938 0.1812702,0.275483 0.075132,0.1621892 0.1097162,0.3780438 0.035777,0.2158547 0.035777,0.4913378 0,0.347037 -0.076324,0.6189424 Q 8.0816787,3.9799802 7.9373781,4.1612504 7.79427,4.341328 7.5927261,4.4403111 7.3911823,4.5381016 7.1371654,4.5512199 q -0.231358,0 -0.4138208,-0.031007 Q 6.5420744,4.4880138 6.3906183,4.4176523 6.2403548,4.3472909 6.1330238,4.2351896 6.0268853,4.1218957 5.9529461,3.9597065 5.8801995,3.7975174 5.8456151,3.5828552 5.8110306,3.3670006 5.8110306,3.090325 Z m 0.9969863,0 q 0,0.1669594 0.010733,0.283831 0.011926,0.1168716 0.028622,0.1848479 0.017889,0.066784 0.047703,0.1037534 0.029814,0.03697 0.059628,0.047703 0.029814,0.010733 0.072747,0.010733 0.042933,0 0.071554,-0.010733 0.028622,-0.010733 0.057243,-0.047703 0.028622,-0.03697 0.044125,-0.1037534 0.016696,-0.067976 0.026236,-0.1848479 0.010733,-0.1168716 0.010733,-0.283831 0,-0.1383379 -0.00716,-0.2420912 -0.00716,-0.1049459 -0.022659,-0.1729223 -0.015503,-0.067976 -0.033392,-0.1109087 -0.017888,-0.044125 -0.04651,-0.065591 -0.027429,-0.021466 -0.053666,-0.028622 -0.025044,-0.00835 -0.060821,-0.00835 -0.035777,0 -0.060821,0.00716 -0.023851,0.00716 -0.048895,0.029814 -0.025044,0.021466 -0.04174,0.065591 -0.015503,0.042932 -0.028622,0.1121013 -0.013118,0.067976 -0.019081,0.1717297 -0.00596,0.1025608 -0.00596,0.2420912 z"
|
||||
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.26168332"
|
||||
id="path4769"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 8.4823811,3.0915175 q 0,-0.6678377 0.019081,-1.4310807 0.2265878,-0.010733 0.4173986,-0.010733 0.1967736,0 0.4889525,0.010733 0.019081,0 0.033392,0.014311 0.014311,0.014311 0.014311,0.033392 0.019081,0.8968106 0.019081,1.383378 0,0.3172229 -0.00358,0.6189424 h 0.020274 q 0.435287,0 0.7274658,0.010733 0.01908,0 0.03339,0.014311 0.01431,0.014311 0.01431,0.033392 0.0048,0.2909865 0.0048,0.4126283 0,0.1872331 -0.0048,0.3506148 -0.226588,0.010733 -0.7036148,0.010733 -0.1180642,0 -0.5032634,-0.00835 -0.3840067,-0.00716 -0.5104188,-0.011926 -0.019081,0 -0.033392,-0.014311 Q 8.501462,4.4939763 8.501462,4.4748953 8.4823811,3.578085 8.4823811,3.0915175 Z"
|
||||
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.26168332"
|
||||
id="path4771"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 11.392246,3.0915175 q 0,0.283831 0.0083,0.6296755 h 0.08109 q 0.03578,0 0.06082,-0.00716 0.02624,-0.00835 0.05367,-0.029814 0.02743,-0.021466 0.04532,-0.064399 0.01789,-0.044125 0.0322,-0.1121013 0.01431,-0.069169 0.02147,-0.1729223 0.0072,-0.1049459 0.0072,-0.2444762 0,-0.1657669 -0.01193,-0.2826385 -0.01073,-0.1168716 -0.02862,-0.1836554 -0.0167,-0.067976 -0.0477,-0.1049459 -0.02981,-0.038162 -0.05963,-0.048895 -0.02862,-0.010733 -0.07275,-0.010733 h -0.0799 q -0.0095,0.3959323 -0.0095,0.6320606 z m -0.944514,0 q 0,-0.2385134 0.0048,-0.691689 0.0048,-0.4531756 0.0048,-0.691689 0.528307,-0.081095 0.930202,-0.081095 0.250439,0 0.447213,0.044125 0.196774,0.044125 0.361348,0.1490709 0.165767,0.1037533 0.27429,0.2707128 0.108524,0.1657668 0.168152,0.4173985 0.06082,0.2504391 0.06082,0.5819729 0,0.1967736 -0.01908,0.363733 -0.01789,0.1657668 -0.05247,0.2993344 -0.03458,0.1335675 -0.08825,0.2408986 -0.05367,0.107331 -0.119256,0.1884256 -0.06559,0.079902 -0.151457,0.1407229 -0.08467,0.060821 -0.177692,0.1001757 -0.09302,0.039355 -0.207507,0.064399 -0.113294,0.023851 -0.230165,0.034585 -0.116872,0.00954 -0.256402,0.00954 -0.0477,0 -0.103754,-0.00239 -0.05486,-0.00119 -0.0966,-0.00239 -0.04174,-0.00119 -0.113293,-0.00596 -0.07155,-0.00477 -0.103754,-0.00596 -0.0322,-0.00239 -0.120449,-0.00954 -0.08706,-0.00835 -0.109716,-0.00954 -0.02147,-0.00239 -0.12522,-0.010733 -0.103753,-0.00954 -0.119257,-0.010733 -0.01908,0 -0.03339,-0.014311 -0.01431,-0.014311 -0.01431,-0.033392 0,-0.220625 -0.0048,-0.6571046 -0.0048,-0.4364796 -0.0048,-0.6785708 z"
|
||||
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.26168332"
|
||||
id="path4773"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 12.947353,3.0915175 q 0,-0.6678377 0.01908,-1.4310807 0.226588,-0.010733 0.989831,-0.010733 0.540233,0 0.832412,0.010733 0.01908,0 0.03339,0.014311 0.01431,0.014311 0.01431,0.033392 0.0048,0.2909864 0.0048,0.4126282 0,0.1872331 -0.0048,0.3506148 -0.201544,0.00954 -0.758473,0.00954 -0.100175,0 -0.18127,-0.00119 -0.0024,0.1645743 -0.0036,0.2504391 0.426939,0.00239 0.571239,0.00835 0.01908,0 0.03339,0.014311 0.01431,0.014311 0.01431,0.033392 0.0036,0.195581 0.0036,0.3589627 0,0.1466858 -0.0036,0.3184155 H 13.89303 q 0.0012,0.08348 0.0036,0.248054 h 0.05724 q 0.584358,0 0.844338,0.00954 0.01908,0 0.03339,0.014311 0.01431,0.014311 0.01431,0.033392 0.0048,0.2909865 0.0048,0.4126283 0,0.1872331 -0.0048,0.3506148 -0.226588,0.010733 -0.818101,0.010733 -0.118065,0 -0.503264,-0.00835 -0.384006,-0.00716 -0.510419,-0.011926 -0.01908,0 -0.03339,-0.014311 -0.01431,-0.014311 -0.01431,-0.033392 -0.01908,-0.8968106 -0.01908,-1.3833781 z"
|
||||
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.26168332"
|
||||
id="path4775"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 15.122596,3.029504 q 0,-0.2385134 0.0048,-0.6606823 0.0048,-0.4221688 0.0048,-0.6606822 0.238513,-0.03697 0.506841,-0.058436 0.26952,-0.022659 0.471064,-0.022659 0.174115,0 0.292179,0.00596 0.118064,0.00477 0.254017,0.023851 0.137145,0.017888 0.225395,0.052473 0.08825,0.034585 0.1765,0.095405 0.08825,0.060821 0.137145,0.1478784 0.05009,0.087057 0.0811,0.2134695 0.03101,0.1264121 0.03101,0.2897939 0,0.2587871 -0.133567,0.4555607 -0.133568,0.1967736 -0.372081,0.3088749 0.162189,0.056051 0.263557,0.2289729 0.237321,0.4662938 0.379237,1.0733106 -0.219433,0.026236 -0.499686,0.026236 -0.202737,0 -0.382814,-0.011926 -0.02266,-0.00119 -0.04412,-0.014311 -0.02147,-0.013118 -0.02862,-0.033392 -0.23255,-0.7059999 -0.361348,-1.1400943 h -0.06321 q 0.0024,0.1335675 0.01073,0.5473883 0.0095,0.4138209 0.01073,0.6260979 -0.195581,0.00835 -0.418591,0.00835 -0.201544,0 -0.48776,-0.00835 -0.02027,0 -0.03458,-0.013118 -0.01312,-0.014311 -0.01312,-0.034584 0,-0.220625 -0.0048,-0.7119627 -0.0048,-0.4913377 -0.0048,-0.7334289 z m 0.939743,-0.2671351 h 0.08109 q 0.113294,0 0.182462,-0.056051 0.07036,-0.057243 0.07036,-0.1502635 0,-0.1168716 -0.0477,-0.1729222 -0.0477,-0.057243 -0.169344,-0.057243 -0.06201,0 -0.114487,0.00358 -0.0024,0.2790608 -0.0024,0.4329019 z"
|
||||
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.26168332"
|
||||
id="path4777"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
id="g4781">
|
||||
<path
|
||||
sodipodi:nodetypes="sccssssssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="rect4870-9"
|
||||
d="m 5.1030389,9.0429336 h 2.3960534 l 0.4122582,1.0018244 h 6.6203085 c 0.26875,0 0.482077,0.227515 0.48511,0.510084 l 0.08245,7.684182 c 0.003,0.282568 -0.216361,0.510083 -0.485111,0.510083 H 5.1030389 C 4.8342887,18.749107 4.61793,18.52161 4.61793,18.239024 V 9.553017 c 0,-0.2825861 0.2163587,-0.5100834 0.4851089,-0.5100834 z"
|
||||
style="opacity:1;vector-effect:none;fill:#5d8fe9;fill-opacity:1;stroke:#282828;stroke-width:0.22198541;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
|
||||
<rect
|
||||
transform="matrix(1,0,-0.29926089,0.95417133,0,0)"
|
||||
rx="0.46962109"
|
||||
ry="0.487674"
|
||||
y="12.64156"
|
||||
x="10.588443"
|
||||
height="7.0254555"
|
||||
width="10.481291"
|
||||
id="rect4870-1-3"
|
||||
style="opacity:1;vector-effect:none;fill:#659bf5;fill-opacity:1;stroke:#282828;stroke-width:0.22725385;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
|
||||
</g>
|
||||
</svg>
|
After (image error) Size: 12 KiB |
109
resources/graphics/badge_folderlink_overlay.svg
Normal file
109
resources/graphics/badge_folderlink_overlay.svg
Normal file
|
@ -0,0 +1,109 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="256"
|
||||
height="256"
|
||||
viewBox="0 0 67.733333 67.733333"
|
||||
version="1.1"
|
||||
id="svg4925"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||
sodipodi:docname="badge_folderlink_overlay.svg">
|
||||
<defs
|
||||
id="defs4919">
|
||||
<inkscape:path-effect
|
||||
effect="bend_path"
|
||||
id="path-effect5913"
|
||||
is_visible="true"
|
||||
bendpath="m -52.907316,216.28859 5.666917,-1.68802 5.329314,0.50641 2.773175,1.85682"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
vertical="false" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#7ec592;fill-opacity:0.56679394;stroke:none;stroke-width:0.4471567;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="m -34.389666,220.27659 a 4.6622589,4.6622589 0 0 1 -4.662255,4.66225 4.6622589,4.6622589 0 0 1 -4.662258,-4.66225 4.6622589,4.6622589 0 0 1 4.662258,-4.66228 4.6622589,4.6622589 0 0 1 4.662255,4.66228 z"
|
||||
id="path5854-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#7ec592;fill-opacity:0.56679394;stroke:none;stroke-width:0.4471567;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
d="m -34.389666,220.27659 a 4.6622589,4.6622589 0 0 1 -4.662255,4.66225 4.6622589,4.6622589 0 0 1 -4.662258,-4.66225 4.6622589,4.6622589 0 0 1 4.662258,-4.66228 4.6622589,4.6622589 0 0 1 4.662255,4.66228 z"
|
||||
id="path5854-4"
|
||||
inkscape:connector-curvature="0" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="8.2744158"
|
||||
inkscape:cx="28.277138"
|
||||
inkscape:cy="121.96495"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="2065"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false" />
|
||||
<metadata
|
||||
id="metadata4922">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-229.26665)">
|
||||
<g
|
||||
id="g4010"
|
||||
transform="matrix(0.28433921,0,0,0.28246003,-64.333532,229.1746)">
|
||||
<g
|
||||
id="g3951" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0,0.05452653,-0.05854543,0,63.139382,235.87278)"
|
||||
id="g12-5"
|
||||
style="fill:#141414;fill-opacity:1">
|
||||
<path
|
||||
d="M 319.3,783.7 H 680.4 V 861 H 319.3 Z"
|
||||
id="path4-9"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#141414;fill-opacity:1" />
|
||||
<path
|
||||
d="M 319.3,938.4 H 680.4 V 990 H 319.3 Z"
|
||||
id="path6"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#141414;fill-opacity:1" />
|
||||
<path
|
||||
d="m 319.3,216.3 h 361.1 v 490 H 319.3 Z"
|
||||
id="path8"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#141414;fill-opacity:1" />
|
||||
<path
|
||||
d="M 500,10 938.4,474.4 H 61.5 Z"
|
||||
id="path10"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#141414;fill-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After (image error) Size: 4 KiB |
Loading…
Reference in a new issue