Merge pull request #20984 from hrydgard/more-ui-tweaking

DualSense accelerometer input support, UI tweaks
This commit is contained in:
Henrik Rydgård authored and GitHub committed 2025-11-09 23:55:41 +01:00
commit f3fa9e2746
57 files changed
+157 -85

No files matched your search

+8 -8
View File
@@ -468,14 +468,15 @@ void Choice::ClickInternal() {
void Choice::GetContentDimensionsBySpec(const UIContext &dc, MeasureSpec horiz, MeasureSpec vert, float &w, float &h) const {
float totalW = 0.0f;
float totalH = 0.0f;
int paddingLeft = 12;
int paddingRight = 12;
if (!text_.empty() && !hideTitle_) {
int paddingLeft = 12;
int paddingRight = 12;
if (rightIconImage_.isValid()) {
paddingRight = ITEM_HEIGHT;
}
float availWidth = horiz.size - paddingLeft - paddingRight - textPadding_.horiz() - totalW;
float availWidth = horiz.size - paddingLeft - paddingRight - textPadding_.horiz();
if (availWidth < 0.0f) {
// Let it have as much space as it needs.
availWidth = MAX_ITEM_SIZE;
@@ -487,20 +488,19 @@ void Choice::GetContentDimensionsBySpec(const UIContext &dc, MeasureSpec horiz,
float textW = 0.0f, textH = 0.0f;
dc.MeasureTextRect(dc.GetTheme().uiFont, scale, scale, text_, availBounds, &textW, &textH, FLAG_WRAP_TEXT);
totalH = std::max(totalH, textH);
totalW += textW;
if (image_.isValid()) {
totalW += 12;
totalW += totalH;
paddingLeft = ITEM_HEIGHT;
}
totalW = paddingLeft + textW + paddingRight + textPadding_.horiz();
} else {
if (image_.isValid()) {
dc.Draw()->GetAtlas()->measureImage(image_, &w, &h);
totalW = w * imgScale_ + 6;
totalW = w * imgScale_ + paddingLeft + paddingRight;
totalH = h * imgScale_;
}
}
w = totalW + (text_.empty() ? 16 : 24);
w = totalW;
h = totalH + 16;
h = std::max(h, ITEM_HEIGHT);
}
-3
View File
@@ -957,8 +957,6 @@ static const ConfigSetting controlSettings[] = {
ConfigSetting("Custom18Mapping", "Custom18Image", "Custom18Shape", "Custom18Toggle", "Custom18Repeat", SETTING_IDX(g_Config, CustomButton, 18), {0, 3, 9, false, false}, CfgFlag::PER_GAME),
ConfigSetting("Custom19Mapping", "Custom19Image", "Custom19Shape", "Custom19Toggle", "Custom19Repeat", SETTING_IDX(g_Config, CustomButton, 19), {0, 4, 9, false, false}, CfgFlag::PER_GAME),
#ifdef MOBILE_DEVICE
ConfigSetting("TiltBaseAngleY", SETTING(g_Config, fTiltBaseAngleY), 0.9f, CfgFlag::PER_GAME),
ConfigSetting("TiltInvertX", SETTING(g_Config, bInvertTiltX), false, CfgFlag::PER_GAME),
ConfigSetting("TiltInvertY", SETTING(g_Config, bInvertTiltY), false, CfgFlag::PER_GAME),
@@ -968,7 +966,6 @@ static const ConfigSetting controlSettings[] = {
ConfigSetting("TiltInverseDeadzone", SETTING(g_Config, fTiltInverseDeadzone), 0.0f, CfgFlag::PER_GAME),
ConfigSetting("TiltCircularDeadzone", SETTING(g_Config, bTiltCircularDeadzone), true, CfgFlag::PER_GAME),
ConfigSetting("TiltInputType", SETTING(g_Config, iTiltInputType), 0, CfgFlag::PER_GAME),
#endif
ConfigSetting("DisableDpadDiagonals", SETTING(g_Config, bDisableDpadDiagonals), false, CfgFlag::PER_GAME),
ConfigSetting("GamepadOnlyFocused", SETTING(g_Config, bGamepadOnlyFocused), false, CfgFlag::PER_GAME),
+41 -54
View File
@@ -72,21 +72,11 @@ private:
void OnReplace(UI::EventParams &params);
void OnReplaceAll(UI::EventParams &params);
void MappedCallback(const MultiInputMapping &kdf);
enum Action {
NONE,
REPLACEONE,
REPLACEALL,
ADD,
};
int pspKey_;
UI::Choice *addButton_ = nullptr;
UI::Choice *replaceAllButton_ = nullptr;
std::vector<UI::View *> rows_;
Action action_ = NONE;
int actionIndex_ = 0;
int pspKey_;
std::string keyName_;
ScreenManager *scrm_;
};
@@ -167,73 +157,67 @@ void SingleControlMapper::Refresh() {
}
}
void SingleControlMapper::MappedCallback(const MultiInputMapping &kdf) {
if (kdf.empty()) {
// Don't want to try to add this.
return;
}
switch (action_) {
case ADD:
KeyMap::SetInputMapping(pspKey_, kdf, false);
addButton_->SetFocus();
break;
case REPLACEALL:
KeyMap::SetInputMapping(pspKey_, kdf, true);
replaceAllButton_->SetFocus();
break;
case REPLACEONE:
{
bool success = KeyMap::ReplaceSingleKeyMapping(pspKey_, actionIndex_, kdf);
void SingleControlMapper::OnReplace(UI::EventParams &params) {
const int index = atoi(params.v->Tag().c_str());
scrm_->push(new KeyMappingNewKeyDialog(pspKey_, true, [this, index](KeyMap::MultiInputMapping mapping) {
if (mapping.empty())
return;
bool success = KeyMap::ReplaceSingleKeyMapping(pspKey_, index, mapping);
if (!success) {
replaceAllButton_->SetFocus(); // Last got removed as a duplicate
} else if (actionIndex_ < (int)rows_.size()) {
rows_[actionIndex_]->SetFocus();
} else if (index < (int)rows_.size()) {
rows_[index]->SetFocus();
} else {
SetFocus();
}
break;
}
default:
SetFocus();
break;
}
KeyMap::UpdateNativeMenuKeys();
g_IsMappingMouseInput = false;
}
void SingleControlMapper::OnReplace(UI::EventParams &params) {
actionIndex_ = atoi(params.v->Tag().c_str());
action_ = REPLACEONE;
scrm_->push(new KeyMappingNewKeyDialog(pspKey_, true, std::bind(&SingleControlMapper::MappedCallback, this, std::placeholders::_1), I18NCat::KEYMAPPING));
KeyMap::UpdateNativeMenuKeys();
g_IsMappingMouseInput = false;
}, I18NCat::KEYMAPPING));
}
void SingleControlMapper::OnReplaceAll(UI::EventParams &params) {
action_ = REPLACEALL;
scrm_->push(new KeyMappingNewKeyDialog(pspKey_, true, std::bind(&SingleControlMapper::MappedCallback, this, std::placeholders::_1), I18NCat::KEYMAPPING));
scrm_->push(new KeyMappingNewKeyDialog(pspKey_, true, [this](KeyMap::MultiInputMapping mapping) {
if (mapping.empty())
return;
KeyMap::SetInputMapping(pspKey_, mapping, true);
replaceAllButton_->SetFocus();
KeyMap::UpdateNativeMenuKeys();
g_IsMappingMouseInput = false;
}, I18NCat::KEYMAPPING));
}
void SingleControlMapper::OnAdd(UI::EventParams &params) {
action_ = ADD;
scrm_->push(new KeyMappingNewKeyDialog(pspKey_, true, std::bind(&SingleControlMapper::MappedCallback, this, std::placeholders::_1), I18NCat::KEYMAPPING));
scrm_->push(new KeyMappingNewKeyDialog(pspKey_, true, [this](KeyMap::MultiInputMapping mapping) {
if (mapping.empty())
return;
KeyMap::SetInputMapping(pspKey_, mapping, false);
addButton_->SetFocus();
KeyMap::UpdateNativeMenuKeys();
g_IsMappingMouseInput = false;
}, I18NCat::KEYMAPPING));
}
void SingleControlMapper::OnAddMouse(UI::EventParams &params) {
action_ = ADD;
g_IsMappingMouseInput = true;
scrm_->push(new KeyMappingNewMouseKeyDialog(pspKey_, true, std::bind(&SingleControlMapper::MappedCallback, this, std::placeholders::_1), I18NCat::KEYMAPPING));
scrm_->push(new KeyMappingNewMouseKeyDialog(pspKey_, true, [this](KeyMap::MultiInputMapping mapping) {
if (mapping.empty())
return;
KeyMap::SetInputMapping(pspKey_, mapping, false);
addButton_->SetFocus();
KeyMap::UpdateNativeMenuKeys();
g_IsMappingMouseInput = false;
}, I18NCat::KEYMAPPING));
}
void SingleControlMapper::OnDelete(UI::EventParams &params) {
int index = atoi(params.v->Tag().c_str());
KeyMap::DeleteNthMapping(pspKey_, index);
if (index + 1 < (int)rows_.size())
rows_[index]->SetFocus();
else
SetFocus();
}
struct BindingCategory {
const char *catName;
int firstKey;
@@ -1030,7 +1014,10 @@ void VisualMappingScreen::MapNext(bool successive) {
} else {
psp_->SelectButton(nextKey_);
}
auto dialog = new KeyMappingNewKeyDialog(nextKey_, true, std::bind(&VisualMappingScreen::HandleKeyMapping, this, std::placeholders::_1), I18NCat::KEYMAPPING);
auto dialog = new KeyMappingNewKeyDialog(nextKey_, true, [this](KeyMap::MultiInputMapping mapping) {
HandleKeyMapping(mapping);
}, I18NCat::KEYMAPPING);
Bounds bounds = screenManager()->getUIContext()->GetLayoutBounds();
dialog->SetPopupOffset(psp_->GetPopupOffset() * bounds.h);
+1
View File
@@ -1477,6 +1477,7 @@ void NativeMouseDelta(float dx, float dy) {
SendMouseDeltaAxis();
}
// TODO: Should include a device ID here, since accelerometers can be on pads for example (DualSense).
void NativeAccelerometer(float tiltX, float tiltY, float tiltZ) {
if (g_Config.iTiltInputType == TILT_NULL) {
// if tilt events are disabled, don't do anything special.
+5
View File
@@ -66,6 +66,11 @@ void UploadScreen::RecreateStatus() {
}
}
std::string_view UploadScreen::GetTitle() const {
auto n = GetI18NCategory(I18NCat::NETWORKING);
return n->T("Upload files");
}
void UploadScreen::update() {
UIScreen::update();
bool running = WebServerRunning(WebServerFlags::FILE_UPLOAD);
+1
View File
@@ -40,6 +40,7 @@ public:
protected:
void update() override;
std::string_view GetTitle() const override;
const char *tag() const override { return "Upload"; }
+25 -7
View File
@@ -226,7 +226,7 @@ struct DualSenseOutputReport {
u8 rumbleLeft;
u8 pad[2];
u8 muteLED;
u8 micMute;
u8 micMute; // 10
u8 other[32];
u8 enableBrightness;
u8 fade;
@@ -491,6 +491,8 @@ bool ReadDualShockInput(HANDLE handle, HIDControllerState *state) {
state->triggerAxes[PS_TRIGGER_L2] = report.l2_analog;
state->triggerAxes[PS_TRIGGER_R2] = report.r2_analog;
state->accValid = false;
u32 buttons{};
int frameCounter = report.buttons[2] >> 2;
report.buttons[2] &= 3;
@@ -506,6 +508,8 @@ bool ReadDualShockInput(HANDLE handle, HIDControllerState *state) {
// So strange that this is different!
struct DualSenseInputReport {
u8 firstByte; // must be 1
u8 lx;
u8 ly;
u8 rx;
@@ -514,11 +518,13 @@ struct DualSenseInputReport {
u8 l2_analog;
u8 r2_analog;
u8 frameCounter;
u8 frameCounter; // 7
u8 buttons[3];
u8 buttons[3]; // 8-10
u8 pad[5]; // 11,12,13,14,15
// TODO: More stuff (battery, tilt, etc).
s16 gyroscope[3];
s16 accelerometer[3];
};
bool ReadDualSenseInput(HANDLE handle, HIDControllerState *state) {
@@ -536,14 +542,13 @@ bool ReadDualSenseInput(HANDLE handle, HIDControllerState *state) {
}
// OK, check the first byte to figure out what we're dealing with here.
int offset = 1;
if (inputReport[0] != 1) {
// Wrong data
return false;
}
// const bool isBluetooth = (reportId == 0x11 || reportId == 0x31);
memcpy(&report, inputReport + offset, sizeof(report));
memcpy(&report, inputReport, sizeof(report));
// Center the sticks.
state->stickAxes[PS_STICK_LX] = report.lx - 128;
@@ -555,6 +560,13 @@ bool ReadDualSenseInput(HANDLE handle, HIDControllerState *state) {
state->triggerAxes[PS_TRIGGER_L2] = report.l2_analog;
state->triggerAxes[PS_TRIGGER_R2] = report.r2_analog;
const float accelScale = (1.0f / 8192.0f) * 9.81f;
// We need to remap the axes a bit.
state->accValid = true;
state->accelerometer[0] = -report.accelerometer[2] * accelScale;
state->accelerometer[1] = -report.accelerometer[0] * accelScale;
state->accelerometer[2] = report.accelerometer[1] * accelScale;
u32 buttons{};
report.buttons[2] &= 3; // Remove noise
memcpy(&buttons, &report.buttons[0], 3);
@@ -563,6 +575,8 @@ bool ReadDualSenseInput(HANDLE handle, HIDControllerState *state) {
buttons &= ~0xF;
buttons |= DecodeHatSwitch(report.buttons[0] & 0xF);
INFO_LOG(Log::sceCtrl, "DualSense accel: %0.2f %0.2f %0.2f", state->accelerometer[0], state->accelerometer[1], state->accelerometer[2]);
state->buttons = buttons;
return true;
}
@@ -607,7 +621,7 @@ static void DecodeSwitchProStick(const u8 *stickData, s8 *outX, s8 *outY) {
// INFO_LOG(Log::sceCtrl, "Switch Pro input: x=%d, y=%d, cx=%d, cy=%d", x, y, *outX, *outY);
}
bool ReadSwitchProInput(HANDLE handle, HIDControllerState *state) {
static bool ReadSwitchProInput(HANDLE handle, HIDControllerState *state) {
BYTE inputReport[SwitchPro_INPUT_REPORT_LEN]{}; // 64-byte input report for Switch Pro
DWORD bytesRead = 0;
if (!ReadFile(handle, inputReport, sizeof(inputReport), &bytesRead, nullptr)) {
@@ -737,6 +751,10 @@ int HidInputDevice::UpdateState() {
}
}
if (state.accValid) {
NativeAccelerometer(state.accelerometer[0], state.accelerometer[1], state.accelerometer[2]);
}
prevState_ = state;
return UPDATESTATE_NO_SLEEP; // The ReadFile sleeps for us, effectively.
} else {
+6
View File
@@ -21,6 +21,9 @@ struct HIDControllerState {
// Buttons. Here the mapping is specific to the controller type and resolved
// later.
u32 buttons; // Bitmask, PSButton enum
bool accValid = false;
float accelerometer[3]; // X, Y, Z
};
struct ButtonInputMapping;
@@ -34,6 +37,9 @@ public:
void Shutdown() override;
static void AddSupportedDevices(std::set<u32> *deviceVIDPIDs);
bool HasAccelerometer() const override {
return subType_ == HIDControllerType::DS5;
}
private:
void ReleaseAllKeys(const ButtonInputMapping *buttonMappings, int count);
InputDeviceID DeviceID(int pad);
+9
View File
@@ -86,3 +86,12 @@ void InputManager::StopPolling() {
runThread_.store(false, std::memory_order_relaxed);
inputThread_.join();
}
bool InputManager::AnyAccelerometer() const {
for (const auto &device : devices_) {
if (device->HasAccelerometer()) {
return true;
}
}
return false;
}
+4 -1
View File
@@ -26,10 +26,11 @@
class InputDevice {
public:
virtual ~InputDevice() {}
virtual ~InputDevice() = default;
virtual void Init() {}
virtual void Shutdown() {}
virtual bool HasAccelerometer() const { return false; }
enum { UPDATESTATE_SKIP_PAD = 0x1234, UPDATESTATE_NO_SLEEP = 0x2345};
virtual int UpdateState() = 0;
@@ -55,6 +56,8 @@ public:
devices_.emplace_back(std::unique_ptr<InputDevice>(device));
}
bool AnyAccelerometer() const;
private:
void InputThread();
+1 -1
View File
@@ -446,7 +446,7 @@ bool System_GetPropertyBool(SystemProperty prop) {
return false;
#endif
case SYSPROP_HAS_ACCELEROMETER:
return true; // for debugging
return g_InputManager.AnyAccelerometer();
default:
return false;
}
+1
View File
@@ -1003,6 +1003,7 @@ Send = إرسال
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = نقل الملفات
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -998,6 +998,7 @@ Send = Göndər
Send Discord Presence information = Discord "Bol Varlıq" bilgisini göndər
Some network functionality in this game is not working = Bu oyundakı bəzi bağlantı işləvsəlliklər işləmir
To play in Infrastructure Mode, you must enter a username = İnfrastruktur Modunda oynamaq üçün işlədici adı yazmalısınız
Transfer files = Faylları köçürmək
Unable to find UPnP device = UPnP qurğusu tapılmır
UPnP (port-forwarding) = UPnP (port yönləndirməsi)
UPnP need to be reinitialized = UPnP, yenidən başladılmalıdır
+1
View File
@@ -962,6 +962,7 @@ Send = Адправіць
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Перадаць файлы
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Прехвърляне на файлове
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Transferir fitxers
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Přenos souborů
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Overfør filer
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -985,6 +985,7 @@ Send = Senden
Send Discord Presence information = Discord "Rich Presence"-Information senden
Some network functionality in this game is not working = Einige Netzwerkfunktionen in diesem Spiel funktionieren nicht
To play in Infrastructure Mode, you must enter a username = Um im Infrastrukturmodus zu spielen, musst du einen Benutzernamen eingeben
Transfer files = Dateien übertragen
Unable to find UPnP device = UPnP-Gerät konnte nicht gefunden werden
UPnP (port-forwarding) = UPnP (Port-Weiterleitung)
UPnP need to be reinitialized = UPnP muss neu initialisiert werden
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Transfer file
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -986,6 +986,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Transfer files
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -996,6 +996,7 @@ Send = Enviar
Send Discord Presence information = Enviar información de "Rich Presence" a Discord
Some network functionality in this game is not working = Algunas funciones de red en este juego no funcionan.
To play in Infrastructure Mode, you must enter a username = Para jugar en el modo Infraestructura, debes introducir un nombre de usuario
Transfer files = Transferir archivos
Unable to find UPnP device = Dispositivo UPnP no encontrado
UPnP (port-forwarding) = UPnP (redirección de puertos)
UPnP need to be reinitialized = Es necesario reiniciar UPnP
+1
View File
@@ -995,6 +995,7 @@ Send = Enviar
Send Discord Presence information = Enviar información al Discord "Rich Presence"
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Transferir archivos
Unable to find UPnP device = No se encuentra el dispositivo UPnP
UPnP (port-forwarding) = UPnP (redirección de puertos)
UPnP need to be reinitialized = La función de UPnP debe reinicializarse.
+1
View File
@@ -995,6 +995,7 @@ Send = ارسال
Send Discord Presence information = ارسال اطلاعات "Rich Presence" به دیسکورد
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = انتقال فایل‌ها
Unable to find UPnP device = پیدا کردن دستگاه UPnP ممکن نیست
UPnP (port-forwarding) = UPnP (هدایت درگاه)
UPnP need to be reinitialized = UPnP باید بازراه‌اندازی شود
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Siirrä tiedostoja
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Envoyer
Send Discord Presence information = Envoyer l'information "Rich Presence" de Discord
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Transférer des fichiers
Unable to find UPnP device = Appareil UPnP introuvable
UPnP (port-forwarding) = UPnP (redirection de port)
UPnP need to be reinitialized = UPnP doit être réinitialisé
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Transferir arquivos
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Αποστολή "Rich Presence" πληροφοριών σε Discord
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Μεταφορά αρχείων
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = העבר קבצים
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -992,6 +992,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = קבצים העבר
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Šalji Discord "Rich Presence" informaciju
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Prenesi datoteke
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Küldés
Send Discord Presence information = "Rich Presence" információ küldése Discordnak
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Fájlok átvitele
Unable to find UPnP device = UPnP eszköz nem található
UPnP (port-forwarding) = UPnP (port átirányítás)
UPnP need to be reinitialized = UPnP újra-inicializálás szükséges
+1
View File
@@ -995,6 +995,7 @@ Send = Kirim
Send Discord Presence information = Kirim informasi "Kritik dan Saran" ke Discord
Some network functionality in this game is not working = Beberapa fungsi jaringan dalam game ini tidak berfungsi
To play in Infrastructure Mode, you must enter a username = Untuk bermain dalam Mode Infrastruktur, Anda harus memasukkan nama pengguna
Transfer files = Transfer file
Unable to find UPnP device = Tidak dapat menemukan perangkat UPnP
UPnP (port-forwarding) = UPnP (penerusan port)
UPnP need to be reinitialized = UPnP perlu diinisialisasi ulang
+1
View File
@@ -963,6 +963,7 @@ Send = Invia
Send Discord Presence information = Invia informazioni Discord "Rich Presence"
Some network functionality in this game is not working = Alcune funzionalità di rete in questo gioco non funzionano
To play in Infrastructure Mode, you must enter a username = Per giocare in modalità Infrastruttura, è necessario inserire un nome utente
Transfer files = Trasferisci file
Unable to find UPnP device = Impossibile trovare il dispositivo UPnP
UPnP (port-forwarding) = UPnP (reindirizzamento della porta)
UPnP need to be reinitialized = UPnP dev'essere reinizializzato
+1
View File
@@ -962,6 +962,7 @@ Send = 送信する
Send Discord Presence information = Discordのプレゼンス情報を送信する
Some network functionality in this game is not working = このゲームの一部のネットワーク機能が動作していません
To play in Infrastructure Mode, you must enter a username = インフラストラクチャモードでプレイするには、ユーザー名を入力する必要があります
Transfer files = ファイルを転送
Unable to find UPnP device = UPnPデバイスがみつかりません
UPnP (port-forwarding) = UPnP(ポートフォワーディング)
UPnP need to be reinitialized = UPnPの再初期化が必要です
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Transfer file
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -962,6 +962,7 @@ Send = 보내기
Send Discord Presence information = 디스코드 "리치 프레즌스" 정보 보내기
Some network functionality in this game is not working = 이 게임의 일부 네트워크 기능이 작동하지 않았음
To play in Infrastructure Mode, you must enter a username = 인프라 모드에서 플레이하려면 사용자 이름을 입력해야 함
Transfer files = 파일 전송
Unable to find UPnP device = UPnP 장치를 찾을 수 없습니다.
UPnP (port-forwarding) = UPnP (포트 포워딩)
UPnP need to be reinitialized = UPnP를 다시 초기화해야 합니다.
+1
View File
@@ -976,6 +976,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Pelanên transfer bike
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = ເກັບໃສ່ໄຟລ໌
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Perkelti failus
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Pindahkan fail
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Bestanden overdragen
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Overfør filer
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -991,6 +991,7 @@ Send = Wyślij
Send Discord Presence information = Przesyłaj informacje Discord Rich Presence
Some network functionality in this game is not working = Niektóre funkcje sieciowe w tej grze nie działają
To play in Infrastructure Mode, you must enter a username = Aby grać w trybie infrastruktury, musisz wprowadzić nazwę użytkownika.
Transfer files = Przenieś pliki
Unable to find UPnP device = Nie udało się zlokalizować urządzenia UPnP
UPnP (port-forwarding) = UPnP (przekierowanie portów)
UPnP need to be reinitialized = Należy ponownie zainicjować UPnP
+1
View File
@@ -985,6 +985,7 @@ Send = Enviar
Send Discord Presence information = Enviar informação da "Rich Presence" no Discord
Some network functionality in this game is not working = Algumas funcionalidades da rede neste jogo não estão funcionando
To play in Infrastructure Mode, you must enter a username = Pra jogar no Modo de Infra-estrutura você deve inserir um nome de usuário
Transfer files = Transferir arquivos
Unable to find UPnP device = Incapaz de achar o dispositivo UPnP
UPnP (port-forwarding) = UPnP (abertura das portas)
UPnP need to be reinitialized = O UPnP precisa ser reinicializado
+1
View File
@@ -987,6 +987,7 @@ Send = Enviar
Send Discord Presence information = Enviar informação de "Rich Presence" no Discord
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Transferir ficheiros
Unable to find UPnP device = Não é possível encontrar o dispositivo UPnP
UPnP (port-forwarding) = UPnP (abertura das portas)
UPnP need to be reinitialized = O UPnP precisa ser reiniciado
+1
View File
@@ -996,6 +996,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Transferați fișiere
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -962,6 +962,7 @@ Send = Отправить
Send Discord Presence information = Отправлять информацию об игре в Discord
Some network functionality in this game is not working = Некоторые сетевые функции в этой игре не работают
To play in Infrastructure Mode, you must enter a username = Для игры в режиме инфраструктуры необходимо ввести имя пользователя
Transfer files = Перенос файлов
Unable to find UPnP device = Невозможно найти устройство UPnP
UPnP (port-forwarding) = UPnP (проброс портов)
UPnP need to be reinitialized = Необходимо перезапустить UPnP
+1
View File
@@ -963,6 +963,7 @@ Send = Skicka
Send Discord Presence information = Visa Discord "Rich Presence"-information
Some network functionality in this game is not working = Viss nätverksfunktionalitet i detta spel fungerar ej
To play in Infrastructure Mode, you must enter a username = För att spela i infrastrukturläge måste du ange ett användarnamn
Transfer files = Överför filer
Unable to find UPnP device = Kunde inte hitta UPnP-enhet
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP behöver ominitialiseras
+1
View File
@@ -996,6 +996,7 @@ Send = I-Send
Send Discord Presence information = Magpadala ng impormasyon sa 'Rich Presence' ni Discord.
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Файли интиқол кунед
Unable to find UPnP device = Hindi mahanap ang UPnP device
UPnP (port-forwarding) = UPnP (pagpapasa ng port)
UPnP need to be reinitialized = Kailangang muling simulan ang UPnP
+1
View File
@@ -1014,6 +1014,7 @@ Send = ส่ง
Send Discord Presence information = แสดงชื่อเกมที่กำลังเล่นอยู่ไปยังแอพ Discord
Some network functionality in this game is not working = ฟังก์ชั่นของเครือข่ายบางอย่างในเกมนี้อาจจะใช้งานไม่ได้
To play in Infrastructure Mode, you must enter a username = การเล่นในโหมด Infrastructure คุณจะต้องป้อนชื่อผู้ใช้งาน
Transfer files = โอนไฟล์
Unable to find UPnP device = ไม่พบอุปกรณ์ UPnP
UPnP (port-forwarding) = โพรโตคอล UPnP (ฟอร์เวิร์ด พอร์ต อัตโนมัติ)
UPnP need to be reinitialized = UPnP จำเป็นต้องเริ่มการทำงานใหม่
+1
View File
@@ -997,6 +997,7 @@ Send = Gönder
Send Discord Presence information = Discord Zengin Varlık Bilgisi Gönder
Some network functionality in this game is not working = Bu oyundaki bazı ağ işlevleri çalışmıyor
To play in Infrastructure Mode, you must enter a username = Altyapı modunda oynamak için bir kullanıcı adı girmelisiniz
Transfer files = Dosyaları aktar
Unable to find UPnP device = UPnP cihazı bulunamıyor
UPnP (port-forwarding) = UPnP (Port Yönlendirme)
UPnP need to be reinitialized = UPnP yeniden başlatılmalı
+1
View File
@@ -995,6 +995,7 @@ Send = Надіслати
Send Discord Presence information = Відправляти інформацію про гру в Діскорд
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Передати файли
Unable to find UPnP device = Неможливо знайти пристрій UPnP
UPnP (port-forwarding) = UPnP (переадресація портів)
UPnP need to be reinitialized = UPnP необхідно повторно ініціалізувати
+1
View File
@@ -995,6 +995,7 @@ Send = Send
Send Discord Presence information = Send Discord "Rich Presence" information
Some network functionality in this game is not working = Some network functionality in this game is not working
To play in Infrastructure Mode, you must enter a username = To play in Infrastructure Mode, you must enter a username
Transfer files = Chuyển tệp
Unable to find UPnP device = Unable to find UPnP device
UPnP (port-forwarding) = UPnP (port forwarding)
UPnP need to be reinitialized = UPnP need to be reinitialized
+1
View File
@@ -996,6 +996,7 @@ Send = 发送
Send Discord Presence information = Discord 显示在线状态
Some network functionality in this game is not working = 此游戏中的某些网络功能不起作用
To play in Infrastructure Mode, you must enter a username = 您必须输入用户名,才能在基础模式下游玩
Transfer files = 传输文件
Unable to find UPnP device = 未找到UPnP设备
UPnP (port-forwarding) = UPnP (端口转发)
UPnP need to be reinitialized = UPnP 需要重新初始化
+1
View File
@@ -962,6 +962,7 @@ Send = 傳送
Send Discord Presence information = 傳送 Discord「Rich Presence」資訊
Some network functionality in this game is not working = 此遊戲中的某些網路功能無法工作
To play in Infrastructure Mode, you must enter a username = 您必須輸入使用者名稱,才能在基礎模式下游玩
Transfer files = 傳輸檔案
Unable to find UPnP device = 找不到 UPnP 裝置
UPnP (port-forwarding) = UPnP (連接埠轉送)
UPnP need to be reinitialized = UPnP 需要重新初始化
+11 -11
View File
@@ -24,9 +24,9 @@
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
inkscape:zoom="2.8284273"
inkscape:cx="130.81475"
inkscape:cy="363.62964"
inkscape:zoom="16.000001"
inkscape:cx="88.062495"
inkscape:cy="536.09372"
inkscape:window-width="3840"
inkscape:window-height="2071"
inkscape:window-x="-9"
@@ -4291,14 +4291,14 @@
d="m 394.50099,118.40641 -313.625408,0 C 19.303582,118.40641 0,177.316 0,238.889 0,300.462 19.303582,358.17138 80.875582,358.17138 l 313.625408,0 c 61.573,0 83.27701,-57.71038 83.27701,-119.28238 0,-61.573 -21.70401,-120.48259 -83.27701,-120.48259 z m -46.97508,203.70597 c 5.624,0 -4.558,10.18 -10.18,10.18 l -216.71733,0 c -5.622,0 -10.179,-4.556 -10.179,-10.18 V 154.46541 c 0,-5.623 4.557,-10.18 10.179,-10.18 l 216.71633,0 c 5.622,0 10.18,4.556 10.18,10.18 v 167.64697 z m 28.9719,-62.74938 c -0.132,0 -0.232,0.07 -0.365,0.07 -9.877,0 -17.886,-8.017 -17.886,-17.901 0,-9.868 8.009,-17.885 17.886,-17.885 0.132,0 0.233,0.07 0.365,0.07 9.713,0.209 17.536,8.079 17.536,17.815 0,9.752 -7.822,17.623 -17.536,17.831 z m 36.527,36.961 c -9.877,0 -17.886,-8.009 -17.886,-17.893 0,-9.884 8.009,-17.893 17.886,-17.893 9.892,0 17.901,8.009 17.901,17.893 -0.001,9.884 -8.01,17.893 -17.901,17.893 z m 0,-73.781 c -9.877,0 -17.886,-8.009 -17.886,-17.893 0,-9.884 8.009,-17.893 17.886,-17.893 9.892,0 17.901,8.009 17.901,17.893 -0.001,9.883 -8.01,17.893 -17.901,17.893 z m 36.89,36.89 c -9.877,0 -17.886,-8.017 -17.886,-17.901 0,-9.868 8.009,-17.885 17.886,-17.885 9.892,0 17.901,8.017 17.901,17.885 0,9.884 -8.009,17.901 -17.901,17.901 z"
style="fill:#ffffff;fill-opacity:1"
sodipodi:nodetypes="ssssssssssssssscscssscscsssssssssssssss"
id="path113" /></g><g
id="ID_HOMEBREW_STORE"><path
id="I_HOMEBREW_STORE_PATH"
style="color:#000000;baseline-shift:baseline;display:inline;overflow:visible;visibility:visible;vector-effect:none;fill:#ffffff;stroke:none;stroke-width:0.469874;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate;stop-color:#000000"
d="m 20.573576,144.15812 c -0.967683,0 -1.755448,0.78827 -1.755448,1.75596 0,0.43966 -0.0044,0.20079 0.0098,0.85525 l 0.318326,-0.008 c -0.0142,-0.65446 -0.0098,-0.4053 -0.0098,-0.8475 0,-0.79603 0.641098,-1.43764 1.437121,-1.43764 0.796027,0 1.437638,0.64161 1.437638,1.43764 0,0.35291 0.01321,0.39753 0.0078,0.80254 l 0.318327,0.004 c 0.0055,-0.41175 -0.0078,-0.46127 -0.0078,-0.80667 0,-0.96769 -0.788281,-1.75596 -1.755965,-1.75596 z m -5.035867,1.64848 -0.33073,9.86761 h 10.611755 l -0.413412,-9.86761 h -2.678389 v 0.46973 h 2.208134 l 0.413411,8.92762 h -9.67176 l 0.330729,-8.92762 h 2.386934 v -0.46973 z m 4.34392,1.06453 -0.455786,2.41019 1.077453,1.37407 1.508952,-0.8847 0.455269,-2.41018 z m 0.303857,0.44493 1.837097,0.34727 -0.35295,1.86604 -1.071769,0.62838 -0.765328,-0.97565 z m -3.247863,1.56012 -0.488859,2.5864 2.409672,0.45579 1.374076,-1.07797 -0.884701,-1.50844 z m 0.303341,0.44545 1.865519,0.35243 0.628385,1.07177 -0.975134,0.76584 -1.866036,-0.35295 z m 4.821927,0.5271 -1.374076,1.07745 0.8847,1.50843 2.410189,0.45579 0.488859,-2.58641 z m 0.0987,0.40669 1.866036,0.35243 -0.347266,1.83762 -1.865519,-0.35295 -0.628902,-1.07177 z m -1.74408,0.85628 -1.508434,0.88418 -0.455786,2.41071 2.586405,0.48886 0.455786,-2.41019 z m -0.09405,0.49712 0.765328,0.97566 -0.35295,1.86603 -1.837097,-0.34726 0.35295,-1.86604 z" /><g
id="g120"
style="stroke-width:1.79263;stroke-dasharray:none"
transform="matrix(0.20889172,0.03949575,-0.03949575,0.20889172,18.041766,117.30402)" /></g></g><path
id="path113" /></g><path
id="I_HOMEBREW_STORE"
style="color:#000000;baseline-shift:baseline;display:inline;overflow:visible;visibility:visible;vector-effect:none;fill:#ffffff;stroke:none;stroke-width:0.469874;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate;stop-color:#000000"
d="m 20.760665,143.03559 c -0.967683,0 -1.755448,0.78827 -1.755448,1.75596 0,0.43966 -0.0044,0.20079 0.0098,0.85525 l 0.401008,-0.008 c -0.0142,-0.65446 -0.0098,-0.4053 -0.0098,-0.8475 0,-0.79603 0.574952,-1.33842 1.370975,-1.33842 0.796027,0 1.33842,0.54239 1.33842,1.33842 0,0.35291 0.01321,0.39753 0.0078,0.80254 l 0.401009,0.004 c 0.0055,-0.41175 -0.0078,-0.46127 -0.0078,-0.80667 0,-0.96769 -0.788281,-1.75596 -1.755965,-1.75596 z m -5.035867,1.64848 -0.33073,9.86761 h 10.611755 l -0.413412,-9.86761 h -2.678389 v 0.6847 h 2.042769 l 0.413411,8.56382 h -9.307958 l 0.330729,-8.56382 h 2.188497 v -0.6847 z m 4.34392,1.06453 -0.455786,2.41019 1.077453,1.37407 1.508952,-0.8847 0.455269,-2.41018 z m 0.303857,0.44493 1.837097,0.34727 -0.35295,1.86604 -1.071769,0.62838 -0.765328,-0.97565 z m -3.247863,1.56012 -0.488859,2.5864 2.409672,0.45579 1.374076,-1.07797 -0.884701,-1.50844 z m 0.303341,0.44545 1.865519,0.35243 0.628385,1.07177 -0.975134,0.76584 -1.866036,-0.35295 z m 4.821927,0.5271 -1.374076,1.07745 0.8847,1.50843 2.410189,0.45579 0.488859,-2.58641 z m 0.0987,0.40669 1.866036,0.35243 -0.347266,1.83762 -1.865519,-0.35295 -0.628902,-1.07177 z m -1.74408,0.85628 -1.508434,0.88418 -0.455786,2.41071 2.586405,0.48886 0.455786,-2.41019 z m -0.09405,0.49712 0.765328,0.97566 -0.35295,1.86603 -1.837097,-0.34726 0.35295,-1.86604 z"
sodipodi:nodetypes="csccsssccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" /><g
id="g120"
style="stroke-width:1.79263;stroke-dasharray:none"
transform="matrix(0.20889172,0.03949575,-0.03949575,0.20889172,18.228855,116.18149)" /></g><path
id="I_GEAR"
style="fill:#ececec;fill-opacity:1;stroke-width:0.019487"
class="st0"

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 212 KiB