fixes per a windows: CRLF en parsers de text i SPV de postfx

This commit is contained in:
2026-05-14 13:17:46 +02:00
parent 6bdb5c207c
commit 6f9bdcbeb6
6 changed files with 314 additions and 752 deletions
+14 -1
View File
@@ -98,7 +98,16 @@ bool Menu::parseFromStream(std::istream &file, const std::string &filename) {
std::string line;
(void)filename;
// Normalitza CRLF: en Windows els .men es llegeixen en binari (resource
// pack o ifstream sense flag de text) i std::getline només talla pel \n,
// deixant un \r residual. Sense això, "[item]" no fa match i el vector
// d'items queda buit → reset() accedeix a item[0] i crasheja.
auto strip_cr = [](std::string &s) {
if (!s.empty() && s.back() == '\r') s.pop_back();
};
while (std::getline(file, line)) {
strip_cr(line);
if (line == "[item]") {
item_t newItem;
newItem.label = "";
@@ -110,7 +119,8 @@ bool Menu::parseFromStream(std::istream &file, const std::string &filename) {
newItem.line = false;
do {
std::getline(file, line);
if (!std::getline(file, line)) break;
strip_cr(line);
int pos = line.find("=");
if (!setItem(&newItem, line.substr(0, pos), line.substr(pos + 1, line.length()))) {
success = false;
@@ -438,6 +448,9 @@ int Menu::getWidestItem() {
void Menu::reset() {
itemSelected = MENU_NO_OPTION;
selector.index = 0;
if (item.empty()) {
return;
}
selector.originY = selector.targetY = selector.y = item[0].rect.y;
selector.originH = selector.targetH = item[0].rect.h;
selector.moving = false;