fixes per a windows: CRLF en parsers de text i SPV de postfx
This commit is contained in:
+14
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user