adding open/save project and changing layout

This commit is contained in:
2017-05-01 17:06:59 +01:00
parent 02ffbf3d77
commit c691595767
10 changed files with 136 additions and 93 deletions

View File

@@ -503,6 +503,71 @@ void ui::Canvas::save(std::string data_path)
glActiveTexture(GL_TEXTURE0);
}
void ui::Canvas::save_project(std::string data_path)
{
static char name[128];
sprintf(name, "%s/latlong.pano", data_path.c_str());
FILE* fp = fopen(name, "wb");
if (!fp)
{
LOG("cannot write project to %s", name);
return;
}
fwrite(&m_width, sizeof(int), 1, fp);
fwrite(&m_height, sizeof(int), 1, fp);
int n_layers = (int)m_layers.size();
fwrite(&n_layers, sizeof(int), 1, fp);
for (int i = 0; i < (int)m_layers.size(); i++)
{
int n_order = m_order[i];
fwrite(&n_order, sizeof(int), 1, fp);
auto snap = m_layers[i].snapshot(data_path);
for (int layer_index = 0; layer_index < 6; layer_index++)
{
fwrite(snap.image[i].get(), 1, m_width * m_height * 4, fp);
}
}
fclose(fp);
LOG("project saved to %s", name);
}
void ui::Canvas::open_project(std::string data_path)
{
static char name[128];
sprintf(name, "%s/latlong.pano", data_path.c_str());
FILE* fp = fopen(name, "rb");
if (!fp)
{
LOG("cannot write project to %s", name);
return;
}
fread(&m_width, sizeof(int), 1, fp);
fread(&m_height, sizeof(int), 1, fp);
int n_layers = (int)m_layers.size();
fread(&n_layers, sizeof(int), 1, fp);
const int bytes = m_width * m_height * 4;
Layer::Snapshot snap;
snap.create(m_width, m_height);
m_layers.clear();
m_order.clear();
for (int i = 0; i < n_layers; i++)
{
int n_order = m_order[i];
fread(&n_order, sizeof(int), 1, fp);
m_order.push_back(n_order);
for (int layer_index = 0; layer_index < 6; layer_index++)
{
fread(snap.image[i].get(), 1, bytes, fp);
m_layers.emplace_back();
m_layers.back().create(m_width, m_height, "");
m_layers.back().restore(snap);
}
}
fclose(fp);
LOG("project restore from %s", name);
}
///////////////////////////////////////////////////////////////////////////////////////////
void ui::Layer::destroy()