diff --git a/src/app.cpp b/src/app.cpp index 2a0eebd..8857f6f 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -44,7 +44,10 @@ void App::open_document(std::string path) async_start(); title_update(); for (auto& i : canvas->m_canvas->m_order) - layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str()); + { + auto l = layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str()); + l->m_visibility->set_value(canvas->m_canvas->m_layers[i].m_visible); + } async_end(); } else diff --git a/src/canvas.cpp b/src/canvas.cpp index 008c7ef..679a936 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -1803,6 +1803,13 @@ bool Canvas::project_save_thread(std::string file_path) int name_len = (int)m_layers[i].m_name.size(); fwrite(&name_len, sizeof(int), 1, fp); fwrite(m_layers[i].m_name.data(), name_len, 1, fp); + + if (ppi_header.doc_version.minor > 1) + { + fwrite(&m_layers[i].m_blend_mode, sizeof(int), 1, fp); + fwrite(&m_layers[i].m_alpha_locked, sizeof(bool), 1, fp); + fwrite(&m_layers[i].m_visible, sizeof(bool), 1, fp); + } App::I.async_start(); auto snap = m_layers[i].snapshot(); @@ -1971,13 +1978,23 @@ bool Canvas::project_open_thread(std::string file_path) int n_order; fread(&n_order, sizeof(int), 1, fp); - float layer_opacity; - fread(&layer_opacity, sizeof(float), 1, fp); + tmp_layers.emplace_back(); + auto& layer = tmp_layers.back(); + + fread(&layer.m_opacity, sizeof(float), 1, fp); int name_len; fread(&name_len, sizeof(int), 1, fp); std::string name(name_len, '\0'); fread((char*)name.data(), name_len, 1, fp); + + if (ppi_header.doc_version.minor > 1) + { + fread(&layer.m_blend_mode, sizeof(int), 1, fp); + fread(&layer.m_alpha_locked, sizeof(bool), 1, fp); + fread(&layer.m_visible, sizeof(bool), 1, fp); + } + snap.clear(); for (int plane_index = 0; plane_index < 6; plane_index++) { @@ -2021,8 +2038,6 @@ bool Canvas::project_open_thread(std::string file_path) } App::I.async_start(); - tmp_layers.emplace_back(); - tmp_layers.back().m_opacity = layer_opacity; tmp_layers.back().create(m_width, m_height, name.c_str()); tmp_layers.back().clear({0, 0, 0, 0}); tmp_layers.back().restore(snap); diff --git a/src/canvas.h b/src/canvas.h index b978551..126279e 100644 --- a/src/canvas.h +++ b/src/canvas.h @@ -71,7 +71,7 @@ struct PPIThumb struct PPIDocVersion { int major = 0; - int minor = 1; + int minor = 2; }; struct PPISoftVersion @@ -92,7 +92,7 @@ struct PPIHeader { if (strcmp(magic, "PPI") != 0) return false; - if (doc_version.major != 0 || doc_version.minor != 1) + if (doc_version.major != 0 || (doc_version.minor < 1 && doc_version.minor > 2)) return false; if (!thumb_header.valid()) return false; diff --git a/src/node_dialog_cloud.cpp b/src/node_dialog_cloud.cpp index 8621223..605fe55 100644 --- a/src/node_dialog_cloud.cpp +++ b/src/node_dialog_cloud.cpp @@ -128,7 +128,9 @@ void NodeDialogCloud::load_thumbs_thread() break; res.clear(); - std::string url = "https://panopainter.com/cloud/cloud-info.php?file=" + n; + char* url_escaped = curl_easy_escape(curl, n.c_str(), n.size()); + std::string url = std::string("https://panopainter.com/cloud/cloud-info.php?file=") + url_escaped; + delete url_escaped; curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); LOG("%s", url.c_str()); auto err = curl_easy_perform(curl);