Add convenient UI on the pause screen for changing/locking the screen orientation

This commit is contained in:
Henrik Rydgård
2025-11-26 11:14:37 +01:00
parent 9035485abf
commit ed25b5e991
21 changed files with 247 additions and 87 deletions

1
.gitignore vendored
View File

@@ -106,6 +106,7 @@ imgui.ini
# debug file
ui_atlas_gen.png
buttons_rasterized.png
# For vim
*.swp

View File

@@ -309,6 +309,20 @@ std::string ChopTitle(const std::string &title) {
return title;
}
PopupMultiChoice::PopupMultiChoice(int *value, std::string_view text, const char **choices, int minVal, int numChoices,
I18NCat category, ScreenManager *screenManager, UI::LayoutParams *layoutParams)
: AbstractChoiceWithValueDisplay(text, layoutParams), value_(value), choices_(choices), minVal_(minVal), numChoices_(numChoices), category_(category), screenManager_(screenManager) {
if (choices) {
// If choices is nullptr, we're being called from PopupMultiChoiceDynamic where value doesn't yet point to anything valid.
if (*value >= numChoices + minVal)
*value = numChoices + minVal - 1;
if (*value < minVal)
*value = minVal;
UpdateText();
}
OnClick.Handle(this, &PopupMultiChoice::HandleClick);
}
void PopupMultiChoice::HandleClick(UI::EventParams &e) {
if (!callbackExecuted_ && preOpenCallback_) {
preOpenCallback_(this);
@@ -324,8 +338,7 @@ void PopupMultiChoice::HandleClick(UI::EventParams &e) {
choices.push_back(category ? std::string(category->T(choices_[i])) : std::string(choices_[i]));
}
ListPopupScreen *popupScreen = new ListPopupScreen(ChopTitle(text_), choices, *value_ - minVal_,
std::bind(&PopupMultiChoice::ChoiceCallback, this, std::placeholders::_1));
ListPopupScreen *popupScreen = new ListPopupScreen(ChopTitle(text_), choices, *value_ - minVal_, [this](int num) {ChoiceCallback(num);});
popupScreen->SetHiddenChoices(hidden_);
popupScreen->SetChoiceIcons(icons_);
if (e.v)
@@ -870,6 +883,13 @@ void AbstractChoiceWithValueDisplay::Draw(UIContext &dc) {
dc.SetFontScale(1.0f, 1.0f);
} else {
Choice::Draw(dc);
if (text_.empty() && !image_.isValid()) {
// In this case we only display the image of the choice. Useful for small buttons spawning a popup.
dc.Draw()->DrawImageRotated(ValueImage(), bounds_.centerX(), bounds_.centerY(), imgScale_, imgRot_, style.fgColor, imgFlipH_);
return;
}
float scale = CalculateValueScale(dc, valueText, bounds_.w);
dc.SetFontScale(scale, scale);
dc.DrawTextRect(valueText, bounds_.Expand(-paddingX, 0.0f), style.fgColor, ALIGN_LEFT | ALIGN_VCENTER | FLAG_WRAP_TEXT);

View File

@@ -282,28 +282,13 @@ private:
class PopupMultiChoice : public AbstractChoiceWithValueDisplay {
public:
PopupMultiChoice(int *value, std::string_view text, const char **choices, int minVal, int numChoices,
I18NCat category, ScreenManager *screenManager, UI::LayoutParams *layoutParams = nullptr)
: AbstractChoiceWithValueDisplay(text, layoutParams), value_(value), choices_(choices), minVal_(minVal), numChoices_(numChoices),
category_(category), screenManager_(screenManager) {
if (choices) {
// If choices is nullptr, we're being called from PopupMultiChoiceDynamic where value doesn't yet point to anything valid.
if (*value >= numChoices + minVal)
*value = numChoices + minVal - 1;
if (*value < minVal)
*value = minVal;
UpdateText();
}
OnClick.Handle(this, &PopupMultiChoice::HandleClick);
}
I18NCat category, ScreenManager *screenManager, UI::LayoutParams *layoutParams = nullptr);
void Update() override;
void HideChoice(int c) {
hidden_.insert(c);
}
void SetChoiceIcon(int c, ImageID id) {
icons_[c] = id;
}
bool IsChoiceHidden(int c) const {
return hidden_.find(c) != hidden_.end();
}
@@ -311,11 +296,24 @@ public:
void SetPreOpenCallback(std::function<void(PopupMultiChoice *)> callback) {
preOpenCallback_ = callback;
}
void SetChoiceIcon(int c, ImageID id) {
icons_[c] = id;
}
void SetChoiceIcons(std::map<int, ImageID> icons) {
icons_ = icons;
}
UI::Event OnChoice;
protected:
std::string ValueText() const override;
ImageID ValueImage() const override {
auto iter = icons_.find(*value_);
if (iter != icons_.end()) {
return iter->second;
}
return ImageID::invalid();
}
int *value_;
const char **choices_;
@@ -346,8 +344,7 @@ public:
// TODO: This all is absolutely terrible, just done this way to be conformant with the internals of PopupMultiChoice.
PopupMultiChoiceDynamic(std::string *value, std::string_view text, const std::vector<std::string> &choices,
I18NCat category, ScreenManager *screenManager, std::vector<std::string> *values = nullptr, UI::LayoutParams *layoutParams = nullptr)
: UI::PopupMultiChoice(&valueInt_, text, nullptr, 0, (int)choices.size(), category, screenManager, layoutParams),
valueStr_(value) {
: UI::PopupMultiChoice(&valueInt_, text, nullptr, 0, (int)choices.size(), category, screenManager, layoutParams), valueStr_(value) {
if (values) {
_dbg_assert_(choices.size() == values->size());
}

View File

@@ -574,7 +574,9 @@ void ListView::CreateAllItems() {
imageID = &iter->second;
}
View *v = linLayout_->Add(adaptor_->CreateItemView(i, imageID));
adaptor_->AddEventCallback(v, std::bind(&ListView::OnItemCallback, this, i, std::placeholders::_1));
adaptor_->AddEventCallback(v, [this, i](UI::EventParams &e) {
OnItemCallback(i, e);
});
}
}
}
@@ -601,9 +603,12 @@ void ListView::OnItemCallback(int num, EventParams &e) {
}
View *ChoiceListAdaptor::CreateItemView(int index, ImageID *optionalImageID) {
Choice *choice = new Choice(items_[index]);
Choice *choice;
if (optionalImageID) {
choice->SetIcon(*optionalImageID);
choice = new Choice(items_[index], *optionalImageID);
} else {
choice = new Choice(items_[index]);
//choice->SetIconRight(*optionalImageID);
}
return choice;
}
@@ -614,10 +619,14 @@ void ChoiceListAdaptor::AddEventCallback(View *view, std::function<void(EventPar
}
View *StringVectorListAdaptor::CreateItemView(int index, ImageID *optionalImageID) {
Choice *choice = new Choice(items_[index], "", index == selected_);
ImageID temp;
if (optionalImageID) {
choice->SetIcon(*optionalImageID);
temp = *optionalImageID;
}
Choice *choice = new Choice(items_[index], temp);
// if (optionalImageID) {
// choice->SetIconRight(*optionalImageID);
// }
return choice;
}

View File

@@ -706,10 +706,10 @@ public:
class Choice : public ClickableItem {
public:
Choice(std::string_view text, LayoutParams *layoutParams = nullptr)
: Choice(text, "", false, layoutParams) { }
: ClickableItem(layoutParams), text_(text) { }
Choice(std::string_view text, ImageID image, LayoutParams *layoutParams = nullptr)
: ClickableItem(layoutParams), text_(text), image_(image) {}
Choice(std::string_view text, std::string_view smallText, bool selected = false, LayoutParams *layoutParams = nullptr)
Choice(std::string_view text, std::string_view smallText, LayoutParams *layoutParams = nullptr)
: ClickableItem(layoutParams), text_(text), smallText_(smallText), image_(ImageID::invalid()) {}
Choice(ImageID image, LayoutParams *layoutParams = nullptr)
: ClickableItem(layoutParams), image_(image), rightIconImage_(ImageID::invalid()) {}
@@ -725,7 +725,10 @@ public:
void SetDrawTextFlags(u32 flags) {
drawTextFlags_ = flags;
}
void SetIcon(ImageID iconImage, float scale = 1.0f, float rot = 0.0f, bool flipH = false, bool keepColor = true) {
void SetIconLeft(ImageID iconImage) {
image_ = iconImage;
}
void SetIconRight(ImageID iconImage, float scale = 1.0f, float rot = 0.0f, bool flipH = false, bool keepColor = true) {
rightIconKeepColor_ = keepColor;
rightIconScale_ = scale;
rightIconRot_ = rot;
@@ -776,7 +779,7 @@ private:
class StickyChoice : public Choice {
public:
StickyChoice(std::string_view text, std::string_view smallText = "", LayoutParams *layoutParams = nullptr)
: Choice(text, smallText, false, layoutParams) {}
: Choice(text, smallText, layoutParams) {}
StickyChoice(ImageID buttonImage, LayoutParams *layoutParams = nullptr)
: Choice(buttonImage, layoutParams) {}
StickyChoice(std::string_view text, ImageID image, LayoutParams *layoutParams = nullptr)
@@ -835,8 +838,10 @@ public:
void SetPasswordDisplay() {
passwordMasking_ = true;
}
protected:
virtual std::string ValueText() const = 0;
virtual ImageID ValueImage() const { return ImageID::invalid(); }
float CalculateValueScale(const UIContext &dc, std::string_view valueText, float availWidth) const;

View File

@@ -1511,6 +1511,13 @@ void Config::PostLoadCleanup() {
if (g_Config.sCustomDriver == "Default") {
g_Config.sCustomDriver = "";
}
// Squash unsupported screen rotations.
if (g_Config.iScreenRotation == ROTATION_AUTO_HORIZONTAL) {
g_Config.iScreenRotation = ROTATION_LOCKED_HORIZONTAL;
} else if (g_Config.iScreenRotation == ROTATION_LOCKED_VERTICAL180) {
g_Config.iScreenRotation = ROTATION_LOCKED_VERTICAL;
}
}
void Config::PreSaveCleanup() {

View File

@@ -84,8 +84,8 @@ enum {
ROTATION_LOCKED_HORIZONTAL = 1,
ROTATION_LOCKED_VERTICAL = 2,
ROTATION_LOCKED_HORIZONTAL180 = 3,
ROTATION_LOCKED_VERTICAL180 = 4,
ROTATION_AUTO_HORIZONTAL = 5,
ROTATION_LOCKED_VERTICAL180 = 4, // Deprecated
ROTATION_AUTO_HORIZONTAL = 5, // Deprecated
};
enum TextureFiltering {

View File

@@ -158,7 +158,7 @@ void CustomButtonMappingScreen::CreateDialogViews(UI::ViewGroup *parent) {
vertLayout->Add(new CheckBox(show, co->T("Visible")));
Choice *icon = vertLayout->Add(new Choice(co->T("Icon")));
icon->SetIcon(ImageID(customKeyImages[cfg->image].i), 1.0f, customKeyImages[cfg->image].r*PI/180, false, false); // Set right icon on the choice
icon->SetIconRight(ImageID(customKeyImages[cfg->image].i), 1.0f, customKeyImages[cfg->image].r*PI/180, false, false); // Set right icon on the choice
icon->OnClick.Add([=](UI::EventParams &e) {
auto iconScreen = new ButtonIconScreen(co->T("Icon"), &(cfg->image));
if (e.v)
@@ -168,7 +168,7 @@ void CustomButtonMappingScreen::CreateDialogViews(UI::ViewGroup *parent) {
});
Choice *shape = vertLayout->Add(new Choice(co->T("Shape")));
shape->SetIcon(ImageID(customKeyShapes[cfg->shape].l), 0.6f, customKeyShapes[cfg->shape].r*PI/180, customKeyShapes[cfg->shape].f, false); // Set right icon on the choice
shape->SetIconRight(ImageID(customKeyShapes[cfg->shape].l), 0.6f, customKeyShapes[cfg->shape].r*PI/180, customKeyShapes[cfg->shape].f, false); // Set right icon on the choice
shape->OnClick.Add([=](UI::EventParams &e) {
auto shape = new ButtonShapeScreen(co->T("Shape"), &(cfg->shape));
if (e.v)

View File

@@ -376,7 +376,7 @@ void GameSettingsScreen::CreateGraphicsSettings(UI::ViewGroup *graphicsSettings)
return !g_Config.bSoftwareRendering && !g_Config.bSkipBufferEffects;
});
if (g_Config.iMultiSampleLevel > 1 && draw->GetDeviceCaps().isTilingGPU) {
msaaChoice->SetIcon(ImageID("I_WARNING"), 0.7f);
msaaChoice->SetIconRight(ImageID("I_WARNING"), 0.7f);
}
msaaChoice->SetEnabledFunc([] {
return !g_Config.bSoftwareRendering && !g_Config.bSkipBufferEffects;
@@ -1115,7 +1115,7 @@ void GameSettingsScreen::CreateToolsSettings(UI::ViewGroup *tools) {
retro->OnClick.Add([=](UI::EventParams &) -> void {
screenManager()->push(new RetroAchievementsSettingsScreen(gamePath_));
});
retro->SetIcon(ImageID("I_RETROACHIEVEMENTS_LOGO"));
retro->SetIconRight(ImageID("I_RETROACHIEVEMENTS_LOGO"));
}
// These were moved here so use the wrong translation objects, to avoid having to change all inis... This isn't a sustainable situation :P
@@ -1358,15 +1358,7 @@ void GameSettingsScreen::CreateSystemSettings(UI::ViewGroup *systemSettings) {
if (System_GetPropertyInt(SYSPROP_DEVICE_TYPE) == DEVICE_TYPE_MOBILE) {
auto co = GetI18NCategory(I18NCat::CONTROLS);
static const char *screenRotation[] = { "Auto", "Landscape", "Portrait", "Landscape Reversed", "Portrait Reversed", "Landscape Auto" };
PopupMultiChoice *rot = systemSettings->Add(new PopupMultiChoice(&g_Config.iScreenRotation, co->T("Screen Rotation"), screenRotation, 0, ARRAY_SIZE(screenRotation), I18NCat::CONTROLS, screenManager()));
#if PPSSPP_PLATFORM(IOS)
// Portrait Reversed is not recommended on iPhone (and we also ban it in the plist).
// However it's recommended to support it on iPad, so maybe we will in the future.
rot->HideChoice(4);
#endif
rot->OnChoice.Handle(this, &GameSettingsScreen::OnScreenRotation);
AddRotationPicker(screenManager(), systemSettings, true);
if (System_GetPropertyBool(SYSPROP_SUPPORTS_SUSTAINED_PERF_MODE)) {
systemSettings->Add(new CheckBox(&g_Config.bSustainedPerformanceMode, sy->T("Sustained performance mode")))->OnClick.Handle(this, &GameSettingsScreen::OnSustainedPerformanceModeChange);
@@ -1467,13 +1459,6 @@ void GameSettingsScreen::OnAutoFrameskip(UI::EventParams &e) {
g_Config.UpdateAfterSettingAutoFrameSkip();
}
void GameSettingsScreen::OnScreenRotation(UI::EventParams &e) {
INFO_LOG(Log::System, "New display rotation: %d", g_Config.iScreenRotation);
INFO_LOG(Log::System, "Sending rotate");
System_Notify(SystemNotification::ROTATE_UPDATED);
INFO_LOG(Log::System, "Got back from rotate");
}
void GameSettingsScreen::OnAdhocGuides(UI::EventParams &e) {
auto n = GetI18NCategory(I18NCat::NETWORKING);
std::string url(n->T("MultiplayerHowToURL", "https://github.com/hrydgard/ppsspp/wiki/How-to-play-multiplayer-games-with-PPSSPP"));

View File

@@ -100,7 +100,6 @@ private:
void OnMemoryStickMyDoc(UI::EventParams &e);
void OnMemoryStickOther(UI::EventParams &e);
#endif
void OnScreenRotation(UI::EventParams &e);
void OnImmersiveModeChange(UI::EventParams &e);
void OnSustainedPerformanceModeChange(UI::EventParams &e);

View File

@@ -70,7 +70,7 @@ void IAPScreen::CreateViews() {
image = ImageID("I_LOGO_APP_STORE");
#endif
Choice *buyButton = rightColumnItems->Add(new Choice(mm->T("Buy PPSSPP Gold"), image));
buyButton->SetIcon(ImageID("I_ICON_GOLD"), 0.5f);
buyButton->SetIconRight(ImageID("I_ICON_GOLD"), 0.5f);
buyButton->SetShine(true);
const int requesterToken = GetRequesterToken();
buyButton->OnClick.Add([this, requesterToken](UI::EventParams &) {

View File

@@ -1206,7 +1206,7 @@ void MainScreen::CreateMainButtons(UI::ViewGroup *parent, bool portrait) {
gold->OnClick.Add([this](UI::EventParams &) {
LaunchBuyGold(this->screenManager());
});
gold->SetIcon(ImageID("I_ICON_GOLD"), 0.5f);
gold->SetIconRight(ImageID("I_ICON_GOLD"), 0.5f);
gold->SetImageScale(0.6f); // for the left-icon in case of vertical.
gold->SetShine(true);
}

View File

@@ -555,7 +555,7 @@ void CreditsScreen::CreateDialogViews(UI::ViewGroup *parent) {
if (!System_GetPropertyBool(SYSPROP_APP_GOLD)) {
ScreenManager *sm = screenManager();
Choice *gold = new Choice(mm->T("Buy PPSSPP Gold"));
gold->SetIcon(ImageID("I_ICON_GOLD"), 0.5f);
gold->SetIconRight(ImageID("I_ICON_GOLD"), 0.5f);
gold->SetImageScale(0.6f); // for the left-icon in case of vertical.
gold->SetShine(true);

View File

@@ -9,6 +9,7 @@
#include "Common/StringUtils.h"
#include "UI/MiscViews.h"
#include "UI/GameInfoCache.h"
#include "Common/UI/PopupScreens.h"
#include "Core/Config.h"
TextWithImage::TextWithImage(ImageID imageID, std::string_view text, UI::LinearLayoutParams *layoutParams) : UI::LinearLayout(ORIENT_HORIZONTAL, layoutParams) {
@@ -224,3 +225,26 @@ void GameImageView::Draw(UIContext &dc) {
dc.Flush();
dc.RebindTexture();
}
void AddRotationPicker(ScreenManager *screenManager, UI::ViewGroup *parent, bool text) {
using namespace UI;
static const char *screenRotation[] = { "Auto", "Landscape", "Portrait", "Landscape Reversed" };
static const std::map<int, ImageID> screenRotationIcons{
{ROTATION_AUTO, ImageID("I_DEVICE_ROTATION_AUTO")},
{ROTATION_LOCKED_HORIZONTAL, ImageID("I_DEVICE_ROTATION_LANDSCAPE")},
{ROTATION_LOCKED_VERTICAL, ImageID("I_DEVICE_ROTATION_PORTRAIT")},
{ROTATION_LOCKED_HORIZONTAL180, ImageID("I_DEVICE_ROTATION_LANDSCAPE_REV")},
};
auto co = GetI18NCategory(I18NCat::CONTROLS);
PopupMultiChoice *rot = parent->Add(new PopupMultiChoice(&g_Config.iScreenRotation, text ? co->T("Screen Rotation") : "", screenRotation, 0, ARRAY_SIZE(screenRotation), I18NCat::CONTROLS, screenManager, text ? nullptr : new LinearLayoutParams(ITEM_HEIGHT, ITEM_HEIGHT)));
rot->SetChoiceIcons(screenRotationIcons);
// Portrait Reversed is not recommended on iPhone (and we also ban it in the plist).
// However it's recommended to support it on iPad, so maybe we will in the future.
rot->HideChoice(4);
rot->OnChoice.Add([](UI::EventParams &) {
INFO_LOG(Log::System, "New display rotation: %d", g_Config.iScreenRotation);
System_Notify(SystemNotification::ROTATE_UPDATED);
});
}

View File

@@ -76,3 +76,5 @@ private:
GameInfoFlags image_;
float scale_ = 1.0f;
};
void AddRotationPicker(ScreenManager *screenManager, UI::ViewGroup *parent, bool text);

View File

@@ -632,22 +632,26 @@ void GamePauseScreen::CreateViews() {
if (middleColumn) {
middleColumn->SetSpacing(portrait ? 8.0f : 20.0f);
playButton_ = middleColumn->Add(new Button("", g_Config.bRunBehindPauseMenu ? ImageID("I_PAUSE") : ImageID("I_PLAY"), new LinearLayoutParams(64, 64)));
playButton_ = middleColumn->Add(new Choice(g_Config.bRunBehindPauseMenu ? ImageID("I_PAUSE") : ImageID("I_PLAY"), new LinearLayoutParams(64, 64)));
playButton_->OnClick.Add([=](UI::EventParams &e) {
g_Config.bRunBehindPauseMenu = !g_Config.bRunBehindPauseMenu;
playButton_->SetImageID(g_Config.bRunBehindPauseMenu ? ImageID("I_PAUSE") : ImageID("I_PLAY"));
playButton_->SetIconLeft(g_Config.bRunBehindPauseMenu ? ImageID("I_PAUSE") : ImageID("I_PLAY"));
});
bool mustRunBehind = MustRunBehind();
playButton_->SetVisibility(mustRunBehind ? UI::V_GONE : UI::V_VISIBLE);
Button *infoButton = middleColumn->Add(new Button("", ImageID("I_INFO"), new LinearLayoutParams(64, 64)));
Choice *infoButton = middleColumn->Add(new Choice(ImageID("I_INFO"), new LinearLayoutParams(64, 64)));
infoButton->OnClick.Add([=](UI::EventParams &e) {
screenManager()->push(new GameScreen(gamePath_, true));
});
if (System_GetPropertyInt(SYSPROP_DEVICE_TYPE) == DEVICE_TYPE_MOBILE) {
AddRotationPicker(screenManager(), middleColumn, false);
}
if (!portrait) {
Button *menuButton = middleColumn->Add(new Button("", ImageID("I_THREE_DOTS"), new LinearLayoutParams(64, 64)));
Choice *menuButton = middleColumn->Add(new Choice("", ImageID("I_THREE_DOTS"), new LinearLayoutParams(64, 64)));
menuButton->OnClick.Add([this, menuButton, portrait](UI::EventParams &e) {
ShowContextMenu(menuButton, portrait);
});

View File

@@ -65,7 +65,7 @@ private:
bool finishNextFrame_ = false;
DialogResult finishNextFrameResult_ = DR_CANCEL;
UI::Button *playButton_ = nullptr;
UI::Choice *playButton_ = nullptr;
// State change tracking, a bit ugly heh, but works.
bool lastOnline_ = false;

View File

@@ -469,7 +469,7 @@ void RemoteISOConnectScreen::CreateViews() {
statusView_ = leftColumnItems->Add(new TextView(ri->T("RemoteISOScanning", "Scanning... click Share Games on your desktop"), FLAG_WRAP_TEXT, false, new LinearLayoutParams(Margins(12, 5, 0, 5))));
rightColumnItems->SetSpacing(0.0f);
rightColumnItems->Add(new Choice(di->T("Cancel"), "", false, new AnchorLayoutParams(150, WRAP_CONTENT, 10, NONE, NONE, 10)))->OnClick.Handle<UIScreen>(this, &UIScreen::OnBack);
rightColumnItems->Add(new Choice(di->T("Cancel"), "", new AnchorLayoutParams(150, WRAP_CONTENT, 10, NONE, NONE, 10)))->OnClick.Handle<UIScreen>(this, &UIScreen::OnBack);
root_ = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT, 1.0f));
root_->Add(leftColumn);

View File

@@ -125,7 +125,7 @@ void TouchControlVisibilityScreen::CreateContentViews(UI::ViewGroup *parent) {
} else {
truncate_cpy(translated, sizeof(translated), mc->T(toggle.key));
}
choice = new Choice(std::string(translated) + " (" + std::string(mc->T("tap to customize")) + ")", "", false, new LinearLayoutParams(1.0f));
choice = new Choice(std::string(translated) + " (" + std::string(mc->T("tap to customize")) + ")", "", new LinearLayoutParams(1.0f));
choice->OnClick.Add(toggle.handle);
} else if (toggle.img.isValid()) {
choice = new CheckBoxChoice(toggle.img, checkbox, new LinearLayoutParams(1.0f));

View File

@@ -21,6 +21,7 @@
#include "ext/nanosvg/src/nanosvgrast.h"
constexpr bool SAVE_DEBUG_IMAGES = false;
constexpr bool SAVE_DEBUG_ATLAS = false;
static Atlas ui_atlas;
static Atlas font_atlas;
@@ -164,6 +165,10 @@ static const ImageMeta imageIDs[] = {
{"I_EXIT", false},
{"I_CHEAT", false},
{"I_HAMBURGER", false},
{"I_DEVICE_ROTATION_LANDSCAPE_REV", false},
{"I_DEVICE_ROTATION_AUTO", false},
{"I_DEVICE_ROTATION_LANDSCAPE", false},
{"I_DEVICE_ROTATION_PORTRAIT", false},
};
static std::string PNGNameFromID(std::string_view id) {
@@ -192,6 +197,12 @@ static bool IsImageID(std::string_view id) {
static bool GenerateUIAtlasImage(Atlas *atlas, float dpiScale, Image *dest, int maxTextureSize) {
Bucket bucket;
#ifdef _DEBUG
for (int i = 0; i < ARRAY_SIZE(imageIDs); i++) {
_dbg_assert_(imageIDs[i].id.size() < 32);
}
#endif
// Script fully read, now read images and rasterize the fonts.
std::vector<Image> images(ARRAY_SIZE(imageIDs));
int resultIds[ARRAY_SIZE(imageIDs)]{};
@@ -313,7 +324,7 @@ static bool GenerateUIAtlasImage(Atlas *atlas, float dpiScale, Image *dest, int
shapeCount = (int)usedShapes.size();
if (SAVE_DEBUG_IMAGES) {
if (SAVE_DEBUG_ATLAS) {
WARN_LOG(Log::G3D, "Writing debug image buttons_rasterized.png");
pngSave(Path("../buttons_rasterized.png"), svgImg, svgWidth, svgHeight, 4);
}
@@ -416,7 +427,7 @@ static bool GenerateUIAtlasImage(Atlas *atlas, float dpiScale, Image *dest, int
atlas->num_images = (int)genAtlasImages.size();
// For debug, write out the atlas.
if (SAVE_DEBUG_IMAGES) {
if (SAVE_DEBUG_ATLAS) {
WARN_LOG(Log::G3D, "Writing debug image ui_atlas_gen.png");
dest->SavePNG("../ui_atlas_gen.png");
}

View File

@@ -3,8 +3,8 @@
<svg
width="600"
height="600"
viewBox="0 0 158.74998 158.74998"
height="700"
viewBox="0 0 158.74998 185.20831"
version="1.1"
id="svg1"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
@@ -24,15 +24,15 @@
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
inkscape:zoom="11.31371"
inkscape:cx="565.86213"
inkscape:cy="523.03798"
inkscape:window-width="2309"
inkscape:window-height="2061"
inkscape:window-x="1387"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg1"
inkscape:zoom="4.0000005"
inkscape:cx="140.74998"
inkscape:cy="572.37493"
inkscape:window-width="3840"
inkscape:window-height="2071"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
showgrid="false" /><defs
id="defs1"><inkscape:path-effect
effect="fillet_chamfer"
@@ -2824,6 +2824,10 @@
result="composite2" /></filter>
</defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
@@ -2995,7 +2999,7 @@
transform="matrix(0.51483133,0,0,0.48865723,85.611849,129.89633)"
aria-label="SD" /></g></g><path
style="baseline-shift:baseline;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;marker:none;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
d="m 45.101709,56.74501 -1.123047,2.205078 v 8.189453 l 11.127879,0 v -8.34375 l -0.503906,-0.347656 -4.096629,0 -0.835938,-1.703125 z m 0.357422,0.583984 h 3.847656 l 0.833984,1.705078 4.280223,0 0.101563,0.06836 v 7.451172 l -9.957957,0 v -7.466797 z"
d="m 45.101709,56.74501 -1.123047,2.205078 v 8.189453 h 11.127879 v -8.34375 L 54.602635,58.448135 H 50.506006 L 49.670068,56.74501 Z m 0.357422,0.583984 h 3.847656 l 0.833984,1.705078 h 4.280223 l 0.101563,0.06836 v 7.451172 H 44.5646 v -7.466797 z"
id="I_FOLDER"
sodipodi:nodetypes="cccccccccccccccccc" /><g
transform="matrix(0.38952161,0,0,0.38952161,-88.556132,-53.317315)"
@@ -3005,7 +3009,7 @@
inkscape:export-filename="C:\Users\hrydg\folder_open_line.png"><path
id="path6612"
style="baseline-shift:baseline;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;marker:none;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
d="m 298.14993,281.27572 -2.73956,5.66353 -0.13267,21.01966 h 0.0703 25.33561 0.54659 l 5.92621,-18.59718 -5.61577,0.0186 -0.12471,-2.851 -1.27758,-0.87958 h -8.94411 l -2.14256,-4.37401 z m 0.94193,1.49913 h 9.02454 l 2.14257,4.37534 h 9.41242 l 0.2786,0.19103 0.0889,2.04439 -18.10132,0.0716 -5.13551,14.42084 0.10613,-16.58861 z m 26.00956,8.09397 -4.96703,15.58963 -22.65973,0 5.52157,-15.50472 z"
d="m 298.14993,281.27572 -2.73956,5.66353 -0.13267,21.01966 h 0.0703 25.33561 0.54659 l 5.92621,-18.59718 -5.61577,0.0186 -0.12471,-2.851 -1.27758,-0.87958 h -8.94411 l -2.14256,-4.37401 z m 0.94193,1.49913 h 9.02454 l 2.14257,4.37534 h 9.41242 l 0.2786,0.19103 0.0889,2.04439 -18.10132,0.0716 -5.13551,14.42084 0.10613,-16.58861 z m 26.00956,8.09397 -4.96703,15.58963 h -22.65973 l 5.52157,-15.50472 z"
sodipodi:nodetypes="cccccccccccccccccccccccccccc" /></g><g
id="I_ROTATE_LEFT"
transform="matrix(0.00878851,0,0,0.00878851,43.016192,28.666646)"
@@ -3028,7 +3032,7 @@
d="m 990,500 c 0,66.4 -13,129.7 -38.9,190.1 -26,60.4 -60.8,112.5 -104.6,156.3 -43.8,43.8 -95.9,78.7 -156.3,104.6 -60.4,25.9 -123.8,38.9 -190.1,38.9 -73.2,0 -142.7,-15.4 -208.6,-46.2 -65.9,-30.8 -133.67848,-88.23883 -181.96211,-144.43883 28.95199,-29.72018 76.70591,-77.56004 112.33369,-114.36983 0,0 90.42901,85.36421 134.62842,108.50866 45.1,22.1 92.9,33.2 143.5,33.2 44.3,0 86.5,-8.6 126.6,-25.8 40.2,-17.2 74.9,-40.5 104.3,-69.8 29.3,-29.3 52.6,-64.1 69.8,-104.3 17.2,-40.2 25.8,-82.4 25.8,-126.6 0,-44.3 -8.6,-86.5 -25.8,-126.6 C 783.5,333.3 760.2,298.6 730.9,269.2 701.6,239.8 666.8,216.6 626.6,199.4 586.4,182.2 544.2,173.6 500,173.6 c -41.7,0 -81.7,7.5 -119.9,22.6 -38.3,15.1 -72.3,36.7 -102.1,64.8 52.14777,51.6247 102.3276,110.90339 102.3276,110.90339 L 52.193223,374.5862 53.58281,28.582686 c 0,0 59.99541,68.308124 108.91719,116.817314 C 208,102.5 260,69.2 318.5,45.5 377,21.9 437.5,10.1 500,10.1 c 66.4,0 129.7,13 190.1,38.9 60.4,26 112.5,60.8 156.3,104.6 43.8,43.8 78.7,95.9 104.6,156.3 25.9,60.4 38.9,123.8 38.9,190.1 z"
id="path5094" /></g><path
style="vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
d="m 9.7813099,56.714065 c 0,0 -0.02414,0.221388 0.07988,0.599496 -0.257107,-0.148894 -2.010508,-0.369413 -1.378541,1.375499 0.209068,0.429167 1.063301,1.53648 1.6493841,1.74448 0.224033,0.695647 0.355177,0.959329 0.756217,1.319961 0.409775,0.368491 1.120637,0.532549 1.120637,0.532549 l 0.03195,0.833059 c 0,0 0.03053,1.420024 -0.454949,1.837295 -0.769282,0.661193 -2.1423701,0.536352 -2.1423701,0.536352 l -7.79e-4,0.643627 3.1542091,0.03424 3.154214,-0.03424 -7.79e-4,-0.643627 c 0,0 -1.373851,0.124843 -2.143132,-0.536352 -0.48548,-0.417271 -0.454949,-1.837295 -0.454949,-1.837295 l 0.03273,-0.833059 c 0,0 0.710857,-0.164058 1.120634,-0.532549 0.40104,-0.360632 0.532189,-0.624314 0.756222,-1.319961 0.586081,-0.208 1.440311,-1.315313 1.649377,-1.74448 0.631969,-1.744912 -1.121432,-1.524393 -1.37854,-1.375499 0.104041,-0.378108 0.07912,-0.599496 0.07912,-0.599496 h -2.814901 z m -0.4093,1.121397 c 0.09747,-0.0103 0.213488,0.02149 0.400171,0.111078 l 0.209216,0.209217 0.07075,1.358764 c 0,0 -0.2964514,-0.0078 -0.5180964,-0.325617 -0.359463,-0.51547 -0.651783,-0.812912 -0.451145,-1.211171 0.113007,-0.08007 0.191626,-0.131998 0.289101,-0.142259 z m 6.4491681,0 c 0.09748,0.01031 0.176088,0.0622 0.289096,0.142259 0.200638,0.398259 -0.09168,0.695701 -0.451143,1.211171 -0.221647,0.317823 -0.517333,0.325617 -0.517333,0.325617 l 0.06999,-1.358764 0.209217,-0.209217 c 0.186682,-0.08955 0.3027,-0.121339 0.400174,-0.111078 z"
d="m 9.7813099,56.714065 c 0,0 -0.02414,0.221388 0.07988,0.599496 -0.257107,-0.148894 -2.010508,-0.369413 -1.378541,1.375499 0.209068,0.429167 1.063301,1.53648 1.6493841,1.74448 0.224033,0.695647 0.355177,0.959329 0.756217,1.319961 0.409775,0.368491 1.120637,0.532549 1.120637,0.532549 l 0.03195,0.833059 c 0,0 0.03053,1.420024 -0.454949,1.837295 -0.769282,0.661193 -2.1423701,0.536352 -2.1423701,0.536352 l -7.79e-4,0.643627 3.1542091,0.03424 3.154214,-0.03424 -7.79e-4,-0.643627 c 0,0 -1.373851,0.124843 -2.143132,-0.536352 -0.48548,-0.417271 -0.454949,-1.837295 -0.454949,-1.837295 l 0.03273,-0.833059 c 0,0 0.710857,-0.164058 1.120634,-0.532549 0.40104,-0.360632 0.532189,-0.624314 0.756222,-1.319961 0.586081,-0.208 1.440311,-1.315313 1.649377,-1.74448 0.631969,-1.744912 -1.121432,-1.524393 -1.37854,-1.375499 0.104041,-0.378108 0.07912,-0.599496 0.07912,-0.599496 h -2.814901 z m -0.4093,1.121397 c 0.09747,-0.0103 0.213488,0.02149 0.400171,0.111078 l 0.209216,0.209217 0.07075,1.358764 c 0,0 -0.2964517,-0.0078 -0.5180967,-0.325617 -0.359463,-0.51547 -0.651783,-0.812912 -0.451145,-1.211171 0.113007,-0.08007 0.191626,-0.131998 0.289101,-0.142259 z m 6.4491681,0 c 0.09748,0.01031 0.176088,0.0622 0.289096,0.142259 0.200638,0.398259 -0.09168,0.695701 -0.451143,1.211171 -0.221647,0.317823 -0.517333,0.325617 -0.517333,0.325617 l 0.06999,-1.358764 0.209217,-0.209217 c 0.186682,-0.08955 0.3027,-0.121339 0.400174,-0.111078 z"
id="I_WINNER_CUP"
inkscape:connector-curvature="0"
inkscape:export-xdpi="133.41901"
@@ -3719,7 +3723,7 @@
id="I_RESTORE"
style="baseline-shift:baseline;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;stroke-width:0.907039;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
d="m 53.165221,90.352519 v -1.766156 h 1.652725 v -6.17405 H 47.66098 v 1.766157 h -1.652725 v 6.174049 z m -0.719493,-0.717618 h -5.720324 v -4.736937 h 5.720324 z m 1.655069,-1.768031 h -0.930421 v -3.695431 h -4.791777 v -1.041507 h 5.722198 z" /><path
d="m 119.42624,149.19486 q 0,1.01768 -0.12259,1.64985 -0.10727,0.6322 -0.39843,0.97142 -0.27583,0.33923 -0.78153,0.46258 -0.49037,0.10793 -1.25657,0.10793 h -1.67033 v -0.90973 h 1.48643 q 0.33714,0 0.567,-0.0771 0.22986,-0.0926 0.35245,-0.33921 0.13791,-0.26214 0.18389,-0.70929 0.0613,-0.46258 0.0613,-1.18729 0,-0.7247 -0.0613,-1.18728 -0.046,-0.46258 -0.18389,-0.70928 -0.12259,-0.26214 -0.35245,-0.35466 -0.22986,-0.0926 -0.567,-0.0926 h -2.11472 v 9.88373 h -1.60904 v -10.80889 h 3.90766 q 0.7662,0 1.25657,0.13878 0.5057,0.12335 0.78153,0.49341 0.29116,0.35464 0.39843,1.00225 0.12259,0.64761 0.12259,1.66528 z m 7.44752,0 q 0,1.01768 -0.12259,1.64985 -0.10727,0.6322 -0.39842,0.97142 -0.27583,0.33923 -0.78154,0.46258 -0.49036,0.10793 -1.25657,0.10793 h -1.67033 v -0.90973 h 1.48644 q 0.33713,0 0.56699,-0.0771 0.22987,-0.0926 0.35245,-0.33921 0.13792,-0.26214 0.1839,-0.70929 0.0613,-0.46258 0.0613,-1.18729 0,-0.7247 -0.0613,-1.18728 -0.046,-0.46258 -0.1839,-0.70928 -0.12258,-0.26214 -0.35245,-0.35466 -0.22986,-0.0926 -0.56699,-0.0926 h -2.11473 v 9.88373 h -1.60903 v -10.80889 h 3.90765 q 0.76621,0 1.25657,0.13878 0.50571,0.12335 0.78154,0.49341 0.29115,0.35464 0.39842,1.00225 0.12259,0.64761 0.12259,1.66528 z m 6.77327,4.25571 q 0,1.6807 -0.567,2.46709 -0.56698,0.78637 -1.93083,0.78637 h -3.43261 v -0.92515 h 3.12613 q 0.3218,0 0.56699,-0.077 0.26051,-0.0771 0.41375,-0.30839 0.16857,-0.23128 0.24519,-0.63217 0.092,-0.41633 0.092,-1.07935 0,-0.57052 -0.0613,-0.92516 -0.0613,-0.37007 -0.22986,-0.55509 -0.15324,-0.20046 -0.4444,-0.26213 -0.27583,-0.0771 -0.73555,-0.0771 h -1.16464 q -0.58232,0 -0.98074,-0.15419 -0.39843,-0.1542 -0.64362,-0.49341 -0.24518,-0.35466 -0.35245,-0.90975 -0.10727,-0.5705 -0.10727,-1.40314 0,-1.41858 0.52102,-2.20496 0.53634,-0.80179 1.83889,-0.80179 h 2.98821 v 0.92515 h -2.60515 q -0.32181,0 -0.55167,0.0926 -0.22987,0.077 -0.39842,0.29297 -0.15324,0.20045 -0.22987,0.57051 -0.0766,0.35464 -0.0766,0.90973 0,0.53967 0.046,0.89432 0.046,0.33922 0.16857,0.53968 0.13791,0.18502 0.3831,0.26212 0.24519,0.0771 0.65894,0.0771 h 1.08801 q 0.61297,0 1.05736,0.12335 0.45973,0.12335 0.75088,0.44716 0.29117,0.3238 0.42908,0.90973 0.13792,0.58594 0.13792,1.5111 z m 6.97248,0 q 0,1.6807 -0.567,2.46709 -0.56699,0.78637 -1.93083,0.78637 h -3.43261 v -0.92515 h 3.12612 q 0.3218,0 0.56699,-0.077 0.26052,-0.0771 0.41376,-0.30839 0.16856,-0.23128 0.24518,-0.63217 0.092,-0.41633 0.092,-1.07935 0,-0.57052 -0.0613,-0.92516 -0.0613,-0.37007 -0.22986,-0.55509 -0.15325,-0.20046 -0.4444,-0.26213 -0.27583,-0.0771 -0.73556,-0.0771 h -1.16463 q -0.58232,0 -0.98074,-0.15419 -0.39843,-0.1542 -0.64362,-0.49341 -0.24519,-0.35466 -0.35245,-0.90975 -0.10727,-0.5705 -0.10727,-1.40314 0,-1.41858 0.52101,-2.20496 0.53635,-0.80179 1.8389,-0.80179 h 2.9882 v 0.92515 h -2.6051 q -0.32181,0 -0.55167,0.0926 -0.22986,0.077 -0.39842,0.29297 -0.15324,0.20045 -0.22986,0.57051 -0.0766,0.35464 -0.0766,0.90973 0,0.53967 0.046,0.89432 0.046,0.33922 0.16857,0.53968 0.13791,0.18502 0.3831,0.26212 0.24519,0.0771 0.65893,0.0771 h 1.08802 q 0.61296,0 1.05736,0.12335 0.45972,0.12335 0.75088,0.44716 0.29117,0.3238 0.42908,0.90973 0.13792,0.58594 0.13792,1.5111 z m 7.64673,-4.25571 q 0,1.01768 -0.12259,1.64985 -0.10727,0.6322 -0.39843,0.97142 -0.27584,0.33923 -0.78153,0.46258 -0.49038,0.10793 -1.25658,0.10793 h -1.67033 v -0.90973 h 1.48644 q 0.33713,0 0.56699,-0.0771 0.22986,-0.0926 0.35246,-0.33921 0.13792,-0.26214 0.18389,-0.70929 0.0613,-0.46258 0.0613,-1.18729 0,-0.7247 -0.0613,-1.18728 -0.046,-0.46258 -0.18389,-0.70928 -0.1226,-0.26214 -0.35246,-0.35466 -0.22986,-0.0926 -0.56699,-0.0926 h -2.11473 v 9.88373 h -1.60903 v -10.80889 h 3.90765 q 0.7662,0 1.25658,0.13878 0.50569,0.12335 0.78153,0.49341 0.29116,0.35464 0.39843,1.00225 0.12259,0.64761 0.12259,1.66528 z m 7.44753,0 q 0,1.01768 -0.1226,1.64985 -0.10727,0.6322 -0.39842,0.97142 -0.27584,0.33923 -0.78153,0.46258 -0.49038,0.10793 -1.25659,0.10793 h -1.67032 v -0.90973 h 1.48644 q 0.33712,0 0.56699,-0.0771 0.22986,-0.0926 0.35246,-0.33921 0.13791,-0.26214 0.18388,-0.70929 0.0613,-0.46258 0.0613,-1.18729 0,-0.7247 -0.0613,-1.18728 -0.046,-0.46258 -0.18388,-0.70928 -0.1226,-0.26214 -0.35246,-0.35466 -0.22987,-0.0926 -0.56699,-0.0926 h -2.11473 v 9.88373 h -1.60904 v -10.80889 h 3.90765 q 0.76621,0 1.25659,0.13878 0.50569,0.12335 0.78153,0.49341 0.29115,0.35464 0.39842,1.00225 0.1226,0.64761 0.1226,1.66528 z"
d="m 117.18118,145.45309 q 0,1.01768 -0.12259,1.64985 -0.10727,0.6322 -0.39843,0.97142 -0.27583,0.33923 -0.78153,0.46258 -0.49037,0.10793 -1.25657,0.10793 h -1.67033 v -0.90973 h 1.48643 q 0.33714,0 0.567,-0.0771 0.22986,-0.0926 0.35245,-0.33921 0.13791,-0.26214 0.18389,-0.70929 0.0613,-0.46258 0.0613,-1.18729 0,-0.7247 -0.0613,-1.18728 -0.046,-0.46258 -0.18389,-0.70928 -0.12259,-0.26214 -0.35245,-0.35466 -0.22986,-0.0926 -0.567,-0.0926 h -2.11472 v 9.88373 h -1.60904 v -10.80889 h 3.90766 q 0.7662,0 1.25657,0.13878 0.5057,0.12335 0.78153,0.49341 0.29116,0.35464 0.39843,1.00225 0.12259,0.64761 0.12259,1.66528 z m 7.44752,0 q 0,1.01768 -0.12259,1.64985 -0.10727,0.6322 -0.39842,0.97142 -0.27583,0.33923 -0.78154,0.46258 -0.49036,0.10793 -1.25657,0.10793 h -1.67033 v -0.90973 h 1.48644 q 0.33713,0 0.56699,-0.0771 0.22987,-0.0926 0.35245,-0.33921 0.13792,-0.26214 0.1839,-0.70929 0.0613,-0.46258 0.0613,-1.18729 0,-0.7247 -0.0613,-1.18728 -0.046,-0.46258 -0.1839,-0.70928 -0.12258,-0.26214 -0.35245,-0.35466 -0.22986,-0.0926 -0.56699,-0.0926 h -2.11473 v 9.88373 h -1.60903 v -10.80889 h 3.90765 q 0.76621,0 1.25657,0.13878 0.50571,0.12335 0.78154,0.49341 0.29115,0.35464 0.39842,1.00225 0.12259,0.64761 0.12259,1.66528 z m 6.77327,4.25571 q 0,1.6807 -0.567,2.46709 -0.56698,0.78637 -1.93083,0.78637 h -3.43261 v -0.92515 h 3.12613 q 0.3218,0 0.56699,-0.077 0.26051,-0.0771 0.41375,-0.30839 0.16857,-0.23128 0.24519,-0.63217 0.092,-0.41633 0.092,-1.07935 0,-0.57052 -0.0613,-0.92516 -0.0613,-0.37007 -0.22986,-0.55509 -0.15324,-0.20046 -0.4444,-0.26213 -0.27583,-0.0771 -0.73555,-0.0771 h -1.16464 q -0.58232,0 -0.98074,-0.15419 -0.39843,-0.1542 -0.64362,-0.49341 -0.24518,-0.35466 -0.35245,-0.90975 -0.10727,-0.5705 -0.10727,-1.40314 0,-1.41858 0.52102,-2.20496 0.53634,-0.80179 1.83889,-0.80179 h 2.98821 v 0.92515 h -2.60515 q -0.32181,0 -0.55167,0.0926 -0.22987,0.077 -0.39842,0.29297 -0.15324,0.20045 -0.22987,0.57051 -0.0766,0.35464 -0.0766,0.90973 0,0.53967 0.046,0.89432 0.046,0.33922 0.16857,0.53968 0.13791,0.18502 0.3831,0.26212 0.24519,0.0771 0.65894,0.0771 h 1.08801 q 0.61297,0 1.05736,0.12335 0.45973,0.12335 0.75088,0.44716 0.29117,0.3238 0.42908,0.90973 0.13792,0.58594 0.13792,1.5111 z m 6.97248,0 q 0,1.6807 -0.567,2.46709 -0.56699,0.78637 -1.93083,0.78637 h -3.43261 v -0.92515 h 3.12612 q 0.3218,0 0.56699,-0.077 0.26052,-0.0771 0.41376,-0.30839 0.16856,-0.23128 0.24518,-0.63217 0.092,-0.41633 0.092,-1.07935 0,-0.57052 -0.0613,-0.92516 -0.0613,-0.37007 -0.22986,-0.55509 -0.15325,-0.20046 -0.4444,-0.26213 -0.27583,-0.0771 -0.73556,-0.0771 h -1.16463 q -0.58232,0 -0.98074,-0.15419 -0.39843,-0.1542 -0.64362,-0.49341 -0.24519,-0.35466 -0.35245,-0.90975 -0.10727,-0.5705 -0.10727,-1.40314 0,-1.41858 0.52101,-2.20496 0.53635,-0.80179 1.8389,-0.80179 h 2.9882 v 0.92515 h -2.6051 q -0.32181,0 -0.55167,0.0926 -0.22986,0.077 -0.39842,0.29297 -0.15324,0.20045 -0.22986,0.57051 -0.0766,0.35464 -0.0766,0.90973 0,0.53967 0.046,0.89432 0.046,0.33922 0.16857,0.53968 0.13791,0.18502 0.3831,0.26212 0.24519,0.0771 0.65893,0.0771 h 1.08802 q 0.61296,0 1.05736,0.12335 0.45972,0.12335 0.75088,0.44716 0.29117,0.3238 0.42908,0.90973 0.13792,0.58594 0.13792,1.5111 z m 7.64673,-4.25571 q 0,1.01768 -0.12259,1.64985 -0.10727,0.6322 -0.39843,0.97142 -0.27584,0.33923 -0.78153,0.46258 -0.49038,0.10793 -1.25658,0.10793 h -1.67033 v -0.90973 h 1.48644 q 0.33713,0 0.56699,-0.0771 0.22986,-0.0926 0.35246,-0.33921 0.13792,-0.26214 0.18389,-0.70929 0.0613,-0.46258 0.0613,-1.18729 0,-0.7247 -0.0613,-1.18728 -0.046,-0.46258 -0.18389,-0.70928 -0.1226,-0.26214 -0.35246,-0.35466 -0.22986,-0.0926 -0.56699,-0.0926 h -2.11473 v 9.88373 h -1.60903 v -10.80889 h 3.90765 q 0.7662,0 1.25658,0.13878 0.50569,0.12335 0.78153,0.49341 0.29116,0.35464 0.39843,1.00225 0.12259,0.64761 0.12259,1.66528 z m 7.44753,0 q 0,1.01768 -0.1226,1.64985 -0.10727,0.6322 -0.39842,0.97142 -0.27584,0.33923 -0.78153,0.46258 -0.49038,0.10793 -1.25659,0.10793 h -1.67032 v -0.90973 h 1.48644 q 0.33712,0 0.56699,-0.0771 0.22986,-0.0926 0.35246,-0.33921 0.13791,-0.26214 0.18388,-0.70929 0.0613,-0.46258 0.0613,-1.18729 0,-0.7247 -0.0613,-1.18728 -0.046,-0.46258 -0.18388,-0.70928 -0.1226,-0.26214 -0.35246,-0.35466 -0.22987,-0.0926 -0.56699,-0.0926 h -2.11473 v 9.88373 h -1.60904 v -10.80889 h 3.90765 q 0.76621,0 1.25659,0.13878 0.50569,0.12335 0.78153,0.49341 0.29115,0.35464 0.39842,1.00225 0.1226,0.64761 0.1226,1.66528 z"
id="I_LOGO"
style="font-size:15.328px;font-family:Zrnic;-inkscape-font-specification:'Zrnic, Normal';fill:#ffffff;stroke-width:1.36904"
aria-label="PPSSPP" /><g
@@ -3747,7 +3751,7 @@
id="I_FOLDER_PINNED"><path
id="path59"
style="baseline-shift:baseline;display:inline;overflow:visible;vector-effect:none;fill:#ffffff;marker:none;enable-background:accumulate;stop-color:#000000"
d="M 85.961667 41.562832 L 84.838738 43.767866 L 84.838738 51.957029 L 96.387386 51.957029 L 96.387386 43.613353 L 95.883541 43.265571 L 91.365988 43.265571 L 90.529863 41.562832 L 85.961667 41.562832 z M 86.319268 42.146776 L 90.166578 42.146776 L 91.000636 43.851581 L 95.702157 43.851581 L 95.803443 43.919794 L 95.803443 51.371018 L 85.424749 51.371018 L 85.424749 43.904291 L 86.319268 42.146776 z M 91.876551 44.07379 A 0.22366586 0.22366586 0 0 0 91.747877 44.086192 A 0.22366586 0.22366586 0 0 0 91.609384 44.292898 L 91.609384 45.318158 L 89.504086 47.423973 L 88.478309 47.423973 A 0.22366586 0.22366586 0 0 0 88.320179 47.806895 L 89.279294 48.765493 L 87.201385 50.843919 L 87.517644 51.160178 L 89.595553 49.082269 L 90.556735 50.042934 A 0.22366586 0.22366586 0 0 0 90.93759 49.884804 L 90.93759 48.859544 L 93.042888 46.753729 L 94.068148 46.753729 A 0.22366586 0.22366586 0 0 0 94.226795 46.371324 L 91.990239 44.134768 A 0.22366586 0.22366586 0 0 0 91.876551 44.07379 z M 92.056385 44.83395 L 93.529163 46.306728 L 92.951421 46.306728 A 0.22366586 0.22366586 0 0 0 92.792774 46.371324 L 90.556735 48.607363 A 0.22366586 0.22366586 0 0 0 90.490072 48.765493 L 90.490072 49.343752 L 89.753683 48.607363 L 89.017811 47.870974 L 89.595553 47.870974 A 0.22366586 0.22366586 0 0 0 89.753683 47.806895 L 91.990239 45.570339 A 0.22366586 0.22366586 0 0 0 92.056385 45.412209 L 92.056385 44.83395 z " /></g><g
d="m 85.961667,41.562832 -1.122929,2.205034 v 8.189163 h 11.548648 v -8.343676 l -0.503845,-0.347782 h -4.517553 l -0.836125,-1.702739 z m 0.357601,0.583944 h 3.84731 l 0.834058,1.704805 h 4.701521 l 0.101286,0.06821 v 7.451224 H 85.424749 v -7.466727 z m 5.557283,1.927014 a 0.22366586,0.22366586 0 0 0 -0.128674,0.0124 0.22366586,0.22366586 0 0 0 -0.138493,0.206706 v 1.02526 l -2.105298,2.105815 h -1.025777 a 0.22366586,0.22366586 0 0 0 -0.15813,0.382922 l 0.959115,0.958598 -2.077909,2.078426 0.316259,0.316259 2.077909,-2.077909 0.961182,0.960665 a 0.22366586,0.22366586 0 0 0 0.380855,-0.15813 v -1.02526 l 2.105298,-2.105815 h 1.02526 a 0.22366586,0.22366586 0 0 0 0.158647,-0.382405 l -2.236556,-2.236556 a 0.22366586,0.22366586 0 0 0 -0.113688,-0.06098 z m 0.179834,0.76016 1.472778,1.472778 h -0.577742 a 0.22366586,0.22366586 0 0 0 -0.158647,0.0646 l -2.236039,2.236039 a 0.22366586,0.22366586 0 0 0 -0.06666,0.15813 v 0.578259 l -0.736389,-0.736389 -0.735872,-0.736389 h 0.577742 a 0.22366586,0.22366586 0 0 0 0.15813,-0.06408 l 2.236556,-2.236556 a 0.22366586,0.22366586 0 0 0 0.06615,-0.15813 z" /></g><g
id="I_FLAG_ZZ"
transform="matrix(0.02084888,0,0,0.02076933,10.42345,100.98801)"><rect
x="267.82452"
@@ -4168,7 +4172,7 @@
d="m 81.915403,142.76852 v 10.86136 h 8.347293 v -7.85741 l -2.925402,-3.00395 z m 0.740007,0.74208 h 4.109309 v 2.89284 h 2.757971 v 6.48643 h -6.86728 z m 4.849832,0.49299 1.615922,1.65778 h -1.615922 z m -3.549137,3.50521 -0.0036,0.74208 4.325834,0.0238 0.0041,-0.74259 z m 0,1.63659 -0.0036,0.7426 4.325834,0.0232 0.0041,-0.74207 z m 0,1.70739 -0.0057,0.74208 3.087666,0.0232 0.0062,-0.74207 z" /><path
id="I_FILE_COPY"
style="color:#000000;fill:#ffffff;stroke-width:0.898414;stroke-miterlimit:4.8;-inkscape-stroke:none"
d="M 96.308838 142.38664 L 96.308838 144.03563 L 94.392159 144.03563 L 94.392159 153.79369 L 101.89144 153.79369 L 101.89144 152.1447 L 103.80812 152.1447 L 103.80812 145.08518 L 101.17986 142.38664 L 96.308838 142.38664 z M 96.973914 143.05327 L 100.66568 143.05327 L 100.66568 145.65207 L 103.14356 145.65207 L 103.14356 151.47962 L 96.973914 151.47962 L 96.973914 143.05327 z M 101.33075 143.49613 L 102.78286 144.98545 L 101.33075 144.98545 L 101.33075 143.49613 z M 95.057235 144.70226 L 96.308838 144.70226 L 96.308838 152.1447 L 101.22688 152.1447 L 101.22688 153.12862 L 95.057235 153.12862 L 95.057235 144.70226 z M 98.142318 146.64529 L 98.1387 147.31192 L 102.02528 147.33311 L 102.02942 146.66596 L 98.142318 146.64529 z M 98.142318 148.11549 L 98.1387 148.78263 L 102.02528 148.80382 L 102.02942 148.13719 L 98.142318 148.11549 z M 98.142318 149.64976 L 98.13715 150.31639 L 100.91114 150.33706 L 100.91579 149.67043 L 98.142318 149.64976 z " /><g
d="m 96.308838,142.38664 v 1.64899 h -1.916679 v 9.75806 h 7.499281 v -1.64899 h 1.91668 v -7.05952 l -2.62826,-2.69854 z m 0.665076,0.66663 h 3.691766 v 2.5988 h 2.47788 v 5.82755 h -6.169646 z m 4.356836,0.44286 1.45211,1.48932 h -1.45211 z m -6.273515,1.20613 h 1.251603 v 7.44244 h 4.918042 v 0.98392 h -6.169645 z m 3.085083,1.94303 -0.0036,0.66663 3.886582,0.0212 0.004,-0.66715 z m 0,1.4702 -0.0036,0.66714 3.886582,0.0212 0.004,-0.66663 z m 0,1.53427 -0.0052,0.66663 2.773992,0.0207 0.005,-0.66663 z" /><g
id="I_WEB_BROWSER"
transform="matrix(0.02185176,0,0,0.02185176,130.36271,116.47656)"
style="fill:#ffffff;fill-opacity:1">
@@ -4207,10 +4211,10 @@
</g><path
id="I_LOGO_DISCORD"
style="fill:#ffffff;fill-opacity:1;stroke-width:0.0389965"
d="M 90.248227 16.705955 C 89.525055 16.831074 88.833077 17.051349 88.186854 17.354494 C 86.883419 19.324157 86.530171 21.24517 86.706841 23.138636 C 87.571348 23.784229 88.409112 24.1765 89.232785 24.433131 C 89.436153 24.153236 89.617584 23.855286 89.773837 23.541713 C 89.476248 23.428635 89.191009 23.289268 88.921693 23.127268 C 88.993143 23.074328 89.063462 23.018845 89.130982 22.961903 C 90.77362 23.730206 92.558307 23.730206 94.18132 22.961903 C 94.249639 23.018843 94.319424 23.074336 94.390092 23.127268 C 94.119984 23.290061 93.833987 23.429655 93.536398 23.542746 C 93.692652 23.855512 93.8733 24.153768 94.07745 24.433648 C 94.901916 24.177017 95.740436 23.785036 96.604944 23.138636 C 96.812241 20.943627 96.251224 19.040303 95.121314 17.352944 C 94.475091 17.050593 93.783883 16.831074 93.061491 16.705955 C 92.972771 16.866354 92.868886 17.082104 92.797425 17.253725 C 92.029503 17.13824 91.268675 17.13824 90.514877 17.253725 C 90.443427 17.082104 90.337739 16.866354 90.248227 16.705955 z M 89.997596 19.931597 C 90.499348 19.931597 90.90385 20.391851 90.895216 20.95324 C 90.895996 21.513824 90.499348 21.97385 89.997596 21.97385 C 89.504493 21.97385 89.099977 21.513824 89.099977 20.95324 C 89.099977 20.392658 89.495858 19.931597 89.997596 19.931597 z M 93.314189 19.931597 C 93.815927 19.931597 94.220444 20.391851 94.211809 20.95324 C 94.211809 21.513824 93.815927 21.97385 93.314189 21.97385 C 92.821087 21.97385 92.417086 21.513824 92.417086 20.95324 C 92.417086 20.392658 92.812438 19.931597 93.314189 19.931597 z " /><path
d="m 90.248227,16.705955 c -0.723172,0.125119 -1.41515,0.345394 -2.061373,0.648539 -1.303435,1.969663 -1.656683,3.890676 -1.480013,5.784142 0.864507,0.645593 1.702271,1.037864 2.525944,1.294495 0.203368,-0.279895 0.384799,-0.577845 0.541052,-0.891418 -0.297589,-0.113078 -0.582828,-0.252445 -0.852144,-0.414445 0.07145,-0.05294 0.141769,-0.108423 0.209289,-0.165365 1.642638,0.768303 3.427325,0.768303 5.050338,0 0.06832,0.05694 0.138104,0.112433 0.208772,0.165365 -0.270108,0.162793 -0.556105,0.302387 -0.853694,0.415478 0.156254,0.312766 0.336902,0.611022 0.541052,0.890902 0.824466,-0.256631 1.662986,-0.648612 2.527494,-1.295012 0.207297,-2.195009 -0.35372,-4.098333 -1.48363,-5.785692 -0.646223,-0.302351 -1.337431,-0.52187 -2.059823,-0.646989 -0.08872,0.160399 -0.192605,0.376149 -0.264066,0.54777 -0.767922,-0.115485 -1.52875,-0.115485 -2.282548,0 -0.07145,-0.171621 -0.177138,-0.387371 -0.26665,-0.54777 z m -0.250631,3.225642 c 0.501752,0 0.906254,0.460254 0.89762,1.021643 7.8e-4,0.560584 -0.395868,1.02061 -0.89762,1.02061 -0.493103,0 -0.897619,-0.460026 -0.897619,-1.02061 0,-0.560582 0.395881,-1.021643 0.897619,-1.021643 z m 3.316593,0 c 0.501738,0 0.906255,0.460254 0.89762,1.021643 0,0.560584 -0.395882,1.02061 -0.89762,1.02061 -0.493102,0 -0.897103,-0.460026 -0.897103,-1.02061 0,-0.560582 0.395352,-1.021643 0.897103,-1.021643 z" /><path
id="I_LINK_OUT"
style="color:#000000;baseline-shift:baseline;display:inline;overflow:visible;visibility:visible;vector-effect:none;fill:#ffffff;stroke:none;stroke-width:0.69666;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 95.421554 28.166753 L 91.576311 28.285608 L 93.009815 29.745984 L 90.002764 32.752519 L 90.84664 33.596395 L 93.853174 30.589343 L 95.303731 32.012512 L 95.421554 28.166753 z M 86.589019 29.295366 L 86.589019 37.143465 L 94.366321 37.143465 L 94.366321 32.670353 L 93.669723 32.670353 L 93.669723 36.446866 L 87.285617 36.446866 L 87.285617 29.991964 L 90.971697 29.991964 L 90.971697 29.295366 L 86.589019 29.295366 z " /><g
d="m 95.421554,28.166753 -3.845243,0.118855 1.433504,1.460376 -3.007051,3.006535 0.843876,0.843876 3.006534,-3.007052 1.450557,1.423169 z m -8.832535,1.128613 v 7.848099 h 7.777302 v -4.473112 h -0.696598 v 3.776513 h -6.384106 v -6.454902 h 3.68608 v -0.696598 z" /><g
style="fill:#ffffff;fill-opacity:1;stroke:none"
id="I_SHARE"
transform="matrix(0.4129105,0,0,0.4129105,98.125225,15.260562)"><path
@@ -4276,7 +4280,7 @@
fill="#1c274c"
id="path5-9"
style="fill:#ffffff;fill-opacity:1;stroke:none" /></g></g></g><g
style="fill:#ffffff;stroke:none;fill-opacity:1"
style="fill:#ffffff;fill-opacity:1;stroke:none"
id="I_TOOLS"
transform="matrix(0.40312873,0,0,0.40312873,94.498775,96.901751)"><path
style="fill:#ffffff;fill-opacity:1;stroke:none"
@@ -4286,7 +4290,7 @@
style="fill:#ffffff;fill-opacity:1"
id="I_PSP"
transform="matrix(0.02755588,0,0,0.02755588,109.17829,97.017535)"><path
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"
d="M 394.50099,118.40641 H 80.875582 C 19.303582,118.40641 0,177.316 0,238.889 0,300.462 19.303582,358.17138 80.875582,358.17138 H 394.50099 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 H 120.62858 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 h 216.71633 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><path
@@ -4331,7 +4335,89 @@
transform="matrix(1.027297,0,0,1.027297,39.475125,71.170161)"><path
id="g117path"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.359505"
d="m 27.680138,73.304133 v 1.108926 h 6.03687 v -1.108926 z m 0,2.174666 v 1.064811 h 6.03687 v -1.064811 z m 0,2.160271 v 1.079207 h 6.03687 V 77.63907 Z" /></g></g><path
d="m 27.680138,73.304133 v 1.108926 h 6.03687 v -1.108926 z m 0,2.174666 v 1.064811 h 6.03687 v -1.064811 z m 0,2.160271 v 1.079207 h 6.03687 V 77.63907 Z" /></g><path
class="st0"
d="m 6.8494649,160.23804 c 0,-0.36016 -0.146999,-0.68937 -0.3831643,-0.9249 -0.235951,-0.23616 -0.5647343,-0.38337 -0.9251369,-0.38313 -0.3599501,-2.3e-4 -0.6893766,0.147 -0.924708,0.38313 -0.2361653,0.23553 -0.3831643,0.56476 -0.3831643,0.9249 v 0.46031 H 3.8112463 v 1.81394 c 0,0.46224 0.3747837,0.83702 0.8372329,0.83702 h 1.7857979 c 0.4624493,0 0.8372326,-0.37478 0.8372326,-0.83702 v -1.81394 H 6.8494649 Z m -0.6347818,0.46033 H 4.8681442 v -0.4603 c 0,-0.0937 0.019119,-0.18159 0.052857,-0.26216 0.050714,-0.12013 0.1366657,-0.22372 0.2441174,-0.29634 0.1078801,-0.0729 0.2357368,-0.11456 0.3760692,-0.11476 0.093904,0 0.1818084,0.0187 0.2619504,0.0527 0.120761,0.051 0.2239272,0.1369 0.2965697,0.24457 0.072428,0.10743 0.114523,0.23509 0.1149752,0.37604 z"
id="path1-4"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.0238093" /><path
class="st0"
d="m 5.9269026,156.84288 v -0.71491 l -1.6327092,1.08859 1.6327092,0.95251 v -0.59603 c 0.8414226,0.0927 1.5947832,0.47113 2.1633615,1.03916 0.6571507,0.65768 1.0625214,1.56252 1.0627173,2.56573 h 0.7257202 c -1.843e-4,-2.26914 -1.7356313,-4.13164 -3.951799,-4.33505 z"
id="path2-4"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.0196305" /><path
class="st0"
d="M 5.1707155,164.73444 C 3.3539111,164.55904 1.92108,163.04025 1.8960901,161.17296 l -0.72572,0.01 c 0.03135,2.26877 1.7914609,4.10684 4.0100822,4.28029 l 0.00976,0.71561 1.6178297,-1.11073 -1.6454692,-0.93019 z"
id="path3-5"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.0196305" /><path
class="st0"
d="m 16.377843,157.05281 v -0.6842 l -1.562555,1.04183 1.562555,0.91158 v -0.57043 c 0.805269,0.0887 1.526259,0.45089 2.070407,0.99451 0.628914,0.62942 1.016867,1.49539 1.017055,2.45548 h 0.694538 c -1.77e-4,-2.17163 -1.661056,-3.9541 -3.782,-4.14877 z"
id="path115"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.018787" /><path
class="st0"
d="m 15.654148,164.60529 c -1.73874,-0.16787 -3.110006,-1.6214 -3.133923,-3.40846 l -0.694537,0.01 c 0.03,2.17129 1.714486,3.93038 3.837778,4.09638 l 0.0093,0.68486 1.548315,-1.063 -1.574766,-0.89023 z"
id="path116"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.018787" /><g
id="I_DEVICE_ROTATION_PORTRAIT"><path
id="I_thingy"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.0238093"
class="st0"
d="M 32.476567 156.99298 C 31.790966 156.99298 31.235299 157.54865 31.235299 158.23425 L 31.235299 166.9624 C 31.235299 167.64798 31.790966 168.20367 32.476567 168.20367 L 36.147143 168.20367 C 36.832721 168.20367 37.388928 167.64798 37.388928 166.9624 L 37.388928 158.23425 C 37.388928 157.54865 36.832721 156.99298 36.147143 156.99298 L 32.476567 156.99298 z M 32.515324 157.41724 L 35.976094 157.41724 C 36.680548 157.41724 36.90937 157.90825 36.90937 158.32882 L 36.90937 166.05083 C 36.90937 166.4366 36.656657 166.95155 36.06291 166.95155 L 32.515324 166.95155 C 32.09872 166.95155 31.670931 166.55213 31.670931 166.05083 L 31.670931 158.31797 C 31.670931 157.81135 31.960072 157.41724 32.515324 157.41724 z M 34.325032 160.03724 C 33.965083 160.03702 33.635355 160.18454 33.400024 160.42068 C 33.163859 160.6562 33.017102 160.98555 33.017102 161.34569 L 33.017102 161.80561 L 32.594906 161.80561 L 32.594906 163.61997 C 32.594906 164.0822 32.969615 164.45661 33.432064 164.45661 L 35.218001 164.45661 C 35.680449 164.45661 36.055159 164.0822 36.055159 163.61997 L 36.055159 161.80561 L 35.633479 161.80561 L 35.633479 161.34569 C 35.633479 160.98552 35.486204 160.6562 35.25004 160.42068 C 35.01409 160.18452 34.685433 160.037 34.325032 160.03724 z M 34.325032 160.67234 C 34.418932 160.67234 34.50689 160.69105 34.587032 160.72505 C 34.707793 160.77605 34.811012 160.86181 34.883654 160.96948 C 34.956084 161.0769 34.997924 161.20475 34.998376 161.34569 L 34.998376 161.80561 L 33.651688 161.80561 L 33.651688 161.34569 C 33.651688 161.25199 33.671185 161.16374 33.704915 161.08317 C 33.755635 160.96305 33.841377 160.85968 33.948828 160.78706 C 34.056709 160.71416 34.184699 160.67254 34.325032 160.67234 z M 34.387044 167.23111 C 34.564263 167.23111 34.708471 167.36366 34.708471 167.55203 C 34.708471 167.7296 34.564263 167.87345 34.387044 167.87345 C 34.209826 167.87345 34.066133 167.72958 34.066133 167.55203 C 34.066133 167.37481 34.209826 167.23111 34.387044 167.23111 z " /><g
id="I_DEVICE_ROTATION_PORTRAIT_FRAME"
transform="matrix(0.02189513,0,0,0.02189513,28.23576,156.79464)"
style="fill:#ffffff;fill-opacity:1;stroke:none">
</g></g><g
id="I_DEVICE_ROTATION_AUTO"
transform="translate(-3.0427075,0.19843745)"><g
id="g121"
transform="matrix(0.76000811,0.96791695,-0.96791695,0.76000811,187.03294,30.431505)"><path
class="st0"
d="m 17.297611,145.0375 -0.391209,-0.39121 -0.297748,1.48915 1.414674,-0.37222 -0.326162,-0.32616 c 0.511158,-0.40972 1.130504,-0.61489 1.752473,-0.61518 0.719505,2.9e-4 1.436473,0.2736 1.985551,0.82247 l 0.397127,-0.39712 c -1.241811,-1.24162 -3.21067,-1.31114 -4.534706,-0.20973 z"
id="path122"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.0151917" /><path
class="st0"
d="m 21.349466,150.9935 c -1.090173,0.8982 -2.705348,0.85117 -3.740843,-0.15698 l -0.391692,0.40256 c 1.25867,1.22438 3.227654,1.26702 4.53664,0.14787 l 0.396935,0.38626 0.277493,-1.49312 -1.409445,0.39142 z"
id="path123"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.0151917" /></g><g
id="I_DEVICE_ROTATION"
transform="matrix(0.01101469,-0.01101469,0.01101469,0.01101469,52.555526,161.99862)"
style="fill:#ffffff;fill-opacity:1;stroke:none">
<path
id="path121"
style="fill:#ffffff;fill-opacity:1;stroke:none"
class="st0"
d="m 187.64684,-0.00670467 c -31.31297,0 -56.68624,25.38881767 -56.68624,56.70178667 V 455.31782 c 0,31.31197 25.37327,56.68624 56.68624,56.68624 h 167.64555 c 31.31197,0 56.70179,-25.37427 56.70179,-56.68624 V 56.695082 c 0,-31.312969 -25.38982,-56.70178667 -56.70179,-56.70178667 z M 189.40647,19.365499 H 347.472 c 32.17406,0 42.63128,22.427903 42.63128,41.636246 V 413.69712 c 0,17.6192 -11.53333,41.12318 -38.65112,41.12318 H 189.40647 c -19.02726,0 -38.54505,-18.22698 -38.54505,-41.12318 V 60.504224 c 0,-23.138502 13.18539,-41.138725 38.54505,-41.138725 z m 85.50526,448.219311 c 8.09399,0 14.66131,6.05813 14.66131,14.66131 0,8.10999 -6.56732,14.67685 -14.66131,14.67685 -8.09399,0 -14.67685,-6.56786 -14.67685,-14.67685 0,-8.094 6.58286,-14.66131 14.67685,-14.66131 z"
sodipodi:nodetypes="sssssssssssssssssssssss" />
</g></g><g
id="I_DEVICE_ROTATION_LANDSCAPE"><path
class="st0"
d="m 45.292881,158.38899 c 0,-0.36017 -0.146999,-0.68938 -0.383165,-0.9249 -0.23595,-0.23616 -0.564734,-0.38337 -0.925136,-0.38314 -0.35995,-2.2e-4 -0.689377,0.147 -0.924708,0.38314 -0.236166,0.23552 -0.383165,0.56476 -0.383165,0.9249 v 0.46031 h -0.422045 v 1.81394 c 0,0.46223 0.374784,0.83702 0.837233,0.83702 h 1.785798 c 0.462449,0 0.837232,-0.37479 0.837232,-0.83702 v -1.81394 h -0.422044 z m -0.634782,0.46033 H 43.31156 v -0.46031 c 0,-0.0937 0.01912,-0.18159 0.05286,-0.26216 0.05071,-0.12012 0.136666,-0.22371 0.244117,-0.29633 0.10788,-0.0729 0.235737,-0.11457 0.37607,-0.11477 0.0939,0 0.181807,0.0187 0.26195,0.0527 0.120761,0.051 0.223927,0.13689 0.296569,0.24456 0.07243,0.10743 0.114523,0.2351 0.114976,0.37605 z"
id="path125"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.0238093" /><g
id="g126"
transform="matrix(0,-0.02189513,0.02189513,0,38.661905,165.23494)"
style="fill:#ffffff;fill-opacity:1;stroke:none">
<path
id="path126"
style="fill:#ffffff;fill-opacity:1;stroke:none"
class="st0"
d="m 187.64684,-0.00670467 c -31.31297,0 -56.68624,25.38881767 -56.68624,56.70178667 V 455.31782 c 0,31.31197 25.37327,56.68624 56.68624,56.68624 h 167.64555 c 31.31197,0 56.70179,-25.37427 56.70179,-56.68624 V 56.695082 c 0,-31.312969 -25.38982,-56.70178667 -56.70179,-56.70178667 z M 189.40647,19.365499 H 347.472 c 32.17406,0 42.63128,22.427903 42.63128,41.636246 V 413.69712 c 0,17.6192 -11.53333,41.12318 -38.65112,41.12318 H 189.40647 c -19.02726,0 -38.54505,-18.22698 -38.54505,-41.12318 V 60.504224 c 0,-23.138502 13.18539,-41.138725 38.54505,-41.138725 z m 85.50526,448.219311 c 8.09399,0 14.66131,6.05813 14.66131,14.66131 0,8.10999 -6.56732,14.67685 -14.66131,14.67685 -8.09399,0 -14.67685,-6.56786 -14.67685,-14.67685 0,-8.094 6.58286,-14.66131 14.67685,-14.66131 z"
sodipodi:nodetypes="sssssssssssssssssssssss" />
</g></g><g
id="I_DEVICE_ROTATION_LANDSCAPE_REV"><path
class="st0"
d="m 46.053558,165.40045 c 0,-0.36017 -0.146999,-0.68938 -0.383165,-0.9249 -0.23595,-0.23616 -0.564734,-0.38337 -0.925136,-0.38314 -0.35995,-2.2e-4 -0.689377,0.147 -0.924708,0.38314 -0.236166,0.23552 -0.383165,0.56476 -0.383165,0.9249 v 0.46031 h -0.422045 v 1.81394 c 0,0.46223 0.374784,0.83702 0.837233,0.83702 h 1.785798 c 0.462449,0 0.837232,-0.37479 0.837232,-0.83702 v -1.81394 h -0.422044 z m -0.634782,0.46033 h -1.346539 v -0.46031 c 0,-0.0937 0.01912,-0.18159 0.05286,-0.26216 0.05071,-0.12012 0.136666,-0.22371 0.244117,-0.29633 0.10788,-0.0729 0.235737,-0.11457 0.37607,-0.11477 0.0939,0 0.181807,0.0187 0.26195,0.0527 0.120761,0.051 0.223927,0.13689 0.296569,0.24456 0.07243,0.10743 0.114523,0.2351 0.114976,0.37605 z"
id="path127"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.0238093" /><g
id="g128"
transform="matrix(0,0.02189513,-0.02189513,0,49.905227,160.35833)"
style="fill:#ffffff;fill-opacity:1;stroke:none">
<path
id="path128"
style="fill:#ffffff;fill-opacity:1;stroke:none"
class="st0"
d="m 187.64684,-0.00670467 c -31.31297,0 -56.68624,25.38881767 -56.68624,56.70178667 V 455.31782 c 0,31.31197 25.37327,56.68624 56.68624,56.68624 h 167.64555 c 31.31197,0 56.70179,-25.37427 56.70179,-56.68624 V 56.695082 c 0,-31.312969 -25.38982,-56.70178667 -56.70179,-56.70178667 z M 189.40647,19.365499 H 347.472 c 32.17406,0 42.63128,22.427903 42.63128,41.636246 V 413.69712 c 0,17.6192 -11.53333,41.12318 -38.65112,41.12318 H 189.40647 c -19.02726,0 -38.54505,-18.22698 -38.54505,-41.12318 V 60.504224 c 0,-23.138502 13.18539,-41.138725 38.54505,-41.138725 z m 85.50526,448.219311 c 8.09399,0 14.66131,6.05813 14.66131,14.66131 0,8.10999 -6.56732,14.67685 -14.66131,14.67685 -8.09399,0 -14.67685,-6.56786 -14.67685,-14.67685 0,-8.094 6.58286,-14.66131 14.67685,-14.66131 z"
sodipodi:nodetypes="sssssssssssssssssssssss" />
</g></g></g><path
id="I_GEAR"
style="fill:#ececec;fill-opacity:1;stroke-width:0.019487"
class="st0"
@@ -4360,4 +4446,14 @@
id="I_GEAR_STAR"
style="fill:#ececec;fill-opacity:1;stroke-width:0.0151106"
class="st0"
d="M 151.81345 128.67172 L 151.40779 129.97655 L 150.10296 130.38221 L 151.21866 131.17131 L 151.20109 132.53763 L 152.29611 131.72063 L 153.59061 132.15936 L 153.15187 130.86486 L 153.96888 129.76984 L 152.60255 129.78741 L 151.81345 128.67172 z M 149.65235 131.84465 C 149.55028 131.84465 149.46135 131.91496 149.43789 132.01415 L 149.24669 132.82702 C 148.9254 132.90152 148.62387 133.02749 148.35217 133.19702 L 147.64213 132.75829 C 147.55533 132.70469 147.4428 132.71791 147.37083 132.78981 L 146.99514 133.1655 C 146.92284 133.2378 146.90982 133.34999 146.96362 133.4368 L 147.40235 134.14735 C 147.23281 134.41922 147.10631 134.72005 147.03183 135.04135 L 146.21948 135.23307 C 146.12018 135.25667 146.04998 135.34523 146.04998 135.44701 L 146.04998 135.97876 C 146.04998 136.08095 146.12007 136.16925 146.21948 136.1927 L 147.03183 136.38494 C 147.10633 136.70625 147.23283 137.00709 147.40235 137.27894 L 146.96362 137.98898 C 146.91002 138.07578 146.92324 138.18882 146.99514 138.26079 L 147.37031 138.63596 C 147.44261 138.70826 147.55517 138.72129 147.64213 138.66749 L 148.35217 138.22875 C 148.62388 138.3983 148.9254 138.52479 149.24669 138.59927 L 149.43789 139.41163 C 149.46139 139.51103 149.55028 139.58113 149.65235 139.58113 L 150.1841 139.58113 C 150.28603 139.58113 150.37459 139.51102 150.39804 139.41163 L 150.58976 138.59927 C 150.91092 138.52477 151.21252 138.3983 151.48427 138.22875 L 152.19431 138.66749 C 152.28131 138.72119 152.3935 138.70816 152.46561 138.63596 L 152.8413 138.26079 C 152.9134 138.18869 152.92652 138.07632 152.87282 137.98949 L 152.43357 137.27894 C 152.6031 137.00721 152.7296 136.70612 152.80409 136.38494 L 153.61644 136.1927 C 153.71604 136.1691 153.78594 136.08084 153.78594 135.97876 L 153.78594 135.44753 C 153.78592 135.34547 153.71584 135.25654 153.61644 135.23307 L 152.80409 135.04187 C 152.72959 134.72058 152.6031 134.4192 152.43357 134.14735 L 152.87282 133.4368 C 152.92652 133.3497 152.9135 133.23774 152.8413 133.1655 L 152.46561 132.79033 C 152.39351 132.71823 152.28126 132.70449 152.19431 132.75829 L 151.48427 133.19702 C 151.2124 133.0275 150.91105 132.9015 150.58976 132.82702 L 150.39804 132.01415 C 150.37454 131.91485 150.28603 131.84465 150.1841 131.84465 L 149.65235 131.84465 z M 149.91796 133.67916 C 151.04156 133.67916 151.95195 134.58979 151.95195 135.71315 C 151.95195 136.83649 151.04156 137.74713 149.91796 137.74713 C 148.79474 137.74713 147.88398 136.83649 147.88398 135.71315 C 147.88398 134.58981 148.79474 133.67916 149.91796 133.67916 z M 149.91796 134.8424 A 0.87043075 0.87043075 0 0 0 149.04721 135.71315 A 0.87043075 0.87043075 0 0 0 149.91796 136.58338 A 0.87043075 0.87043075 0 0 0 150.78871 135.71315 A 0.87043075 0.87043075 0 0 0 149.91796 134.8424 z " /></svg>
d="m 151.81345,128.67172 -0.40566,1.30483 -1.30483,0.40566 1.1157,0.7891 -0.0176,1.36632 1.09502,-0.817 1.2945,0.43873 -0.43874,-1.2945 0.81701,-1.09502 -1.36633,0.0176 z m -2.1611,3.17293 c -0.10207,0 -0.191,0.0703 -0.21446,0.1695 l -0.1912,0.81287 c -0.32129,0.0745 -0.62282,0.20047 -0.89452,0.37 l -0.71004,-0.43873 c -0.0868,-0.0536 -0.19933,-0.0404 -0.2713,0.0315 l -0.37569,0.37569 c -0.0723,0.0723 -0.0853,0.18449 -0.0315,0.2713 l 0.43873,0.71055 c -0.16954,0.27187 -0.29604,0.5727 -0.37052,0.894 l -0.81235,0.19172 c -0.0993,0.0236 -0.1695,0.11216 -0.1695,0.21394 v 0.53175 c 0,0.10219 0.0701,0.19049 0.1695,0.21394 l 0.81235,0.19224 c 0.0745,0.32131 0.201,0.62215 0.37052,0.894 l -0.43873,0.71004 c -0.0536,0.0868 -0.0404,0.19984 0.0315,0.27181 l 0.37517,0.37517 c 0.0723,0.0723 0.18486,0.0853 0.27182,0.0315 l 0.71004,-0.43874 c 0.27171,0.16955 0.57323,0.29604 0.89452,0.37052 l 0.1912,0.81236 c 0.0235,0.0994 0.11239,0.1695 0.21446,0.1695 h 0.53175 c 0.10193,0 0.19049,-0.0701 0.21394,-0.1695 l 0.19172,-0.81236 c 0.32116,-0.0745 0.62276,-0.20097 0.89451,-0.37052 l 0.71004,0.43874 c 0.087,0.0537 0.19919,0.0407 0.2713,-0.0315 l 0.37569,-0.37517 c 0.0721,-0.0721 0.0852,-0.18447 0.0315,-0.2713 l -0.43925,-0.71055 c 0.16953,-0.27173 0.29603,-0.57282 0.37052,-0.894 l 0.81235,-0.19224 c 0.0996,-0.0236 0.1695,-0.11186 0.1695,-0.21394 v -0.53123 c -2e-5,-0.10206 -0.0701,-0.19099 -0.1695,-0.21446 l -0.81235,-0.1912 c -0.0745,-0.32129 -0.20099,-0.62267 -0.37052,-0.89452 l 0.43925,-0.71055 c 0.0537,-0.0871 0.0407,-0.19906 -0.0315,-0.2713 l -0.37569,-0.37517 c -0.0721,-0.0721 -0.18435,-0.0858 -0.2713,-0.032 l -0.71004,0.43873 c -0.27187,-0.16952 -0.57322,-0.29552 -0.89451,-0.37 l -0.19172,-0.81287 c -0.0235,-0.0993 -0.11201,-0.1695 -0.21394,-0.1695 z m 0.26561,1.83451 c 1.1236,0 2.03399,0.91063 2.03399,2.03399 0,1.12334 -0.91039,2.03398 -2.03399,2.03398 -1.12322,0 -2.03398,-0.91064 -2.03398,-2.03398 0,-1.12334 0.91076,-2.03399 2.03398,-2.03399 z m 0,1.16324 a 0.87043075,0.87043075 0 0 0 -0.87075,0.87075 0.87043075,0.87043075 0 0 0 0.87075,0.87023 0.87043075,0.87043075 0 0 0 0.87075,-0.87023 0.87043075,0.87043075 0 0 0 -0.87075,-0.87075 z" /><style
type="text/css"
id="style1-9">
.st0{fill:#000000;}
</style><style
type="text/css"
id="style1-07">
<![CDATA[
.st0{fill:#000000;}
]]>
</style></svg>

Before

Width:  |  Height:  |  Size: 222 KiB

After

Width:  |  Height:  |  Size: 231 KiB