adding open/save project and changing layout
This commit is contained in:
@@ -463,19 +463,32 @@ void App::initLayout()
|
||||
};
|
||||
}
|
||||
|
||||
if (auto* button = layout[main_id]->find<NodeButton>("btn-switch"))
|
||||
if (auto* button = layout[main_id]->find<NodeButton>("btn-export"))
|
||||
{
|
||||
button->on_click = [this,button](Node*) {
|
||||
//exit(0);
|
||||
if (canvas)
|
||||
{
|
||||
canvas->m_canvas->save(data_path);
|
||||
//canvas->m_canvas->m_use_instanced = !canvas->m_canvas->m_use_instanced;
|
||||
//button->color_normal = canvas->m_canvas->m_use_instanced ? glm::vec4(1, 0, 0, 1) : glm::vec4(0, 1, 0, 1);
|
||||
//button->m_text->set_text(canvas->m_canvas->m_use_instanced ? "INST" : "NORM");
|
||||
}
|
||||
};
|
||||
//button->m_text->set_text("NORM");
|
||||
}
|
||||
if (auto* button = layout[main_id]->find<NodeButton>("btn-open"))
|
||||
{
|
||||
button->on_click = [this,button](Node*) {
|
||||
if (canvas)
|
||||
{
|
||||
canvas->m_canvas->save(data_path);
|
||||
}
|
||||
};
|
||||
}
|
||||
if (auto* button = layout[main_id]->find<NodeButton>("btn-save"))
|
||||
{
|
||||
button->on_click = [this,button](Node*) {
|
||||
if (canvas)
|
||||
{
|
||||
canvas->m_canvas->save_project(data_path);
|
||||
}
|
||||
};
|
||||
}
|
||||
if (auto* button = layout[main_id]->find<NodeButton>("btn-undo"))
|
||||
{
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -19,6 +19,11 @@ public:
|
||||
struct Snapshot
|
||||
{
|
||||
std::unique_ptr<uint8_t[]> image[6];
|
||||
void create(int w, int h)
|
||||
{
|
||||
for (int i = 0; i < 6; i++)
|
||||
image[i] = std::make_unique<uint8_t[]>(w*h*4);
|
||||
}
|
||||
};
|
||||
bool create(int width, int height, std::string name);
|
||||
void clear(const glm::vec4& c);
|
||||
@@ -79,6 +84,8 @@ public:
|
||||
void snapshot_restore();
|
||||
void clear_context();
|
||||
void save(std::string data_path);
|
||||
void save_project(std::string data_path);
|
||||
void open_project(std::string data_path);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -653,7 +653,7 @@ public:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return kEventResult::Consumed;
|
||||
return m_mouse_inside ? kEventResult::Consumed : kEventResult::Available;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -705,6 +705,7 @@ public:
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return kEventResult::Available;
|
||||
break;
|
||||
}
|
||||
return kEventResult::Consumed;
|
||||
@@ -771,6 +772,7 @@ public:
|
||||
destroy();
|
||||
break;
|
||||
default:
|
||||
return kEventResult::Available;
|
||||
break;
|
||||
}
|
||||
return kEventResult::Consumed;
|
||||
@@ -823,6 +825,7 @@ public:
|
||||
on_click(this);
|
||||
break;
|
||||
default:
|
||||
return kEventResult::Available;
|
||||
break;
|
||||
}
|
||||
return kEventResult::Consumed;
|
||||
@@ -1096,6 +1099,7 @@ public:
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return kEventResult::Available;
|
||||
break;
|
||||
}
|
||||
return kEventResult::Consumed;
|
||||
@@ -1207,6 +1211,7 @@ public:
|
||||
checked = !checked;
|
||||
break;
|
||||
default:
|
||||
return kEventResult::Available;
|
||||
break;
|
||||
}
|
||||
return kEventResult::Consumed;
|
||||
@@ -1297,6 +1302,7 @@ public:
|
||||
case kEventType::MouseUpL:
|
||||
break;
|
||||
default:
|
||||
return kEventResult::Available;
|
||||
break;
|
||||
}
|
||||
return kEventResult::Consumed;
|
||||
@@ -1615,6 +1621,7 @@ public:
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return kEventResult::Available;
|
||||
break;
|
||||
}
|
||||
return kEventResult::Consumed;
|
||||
@@ -2062,6 +2069,7 @@ public:
|
||||
//m_zoom_canvas = m_zoom_start + ge->m_distance_delta * .001f;
|
||||
break;
|
||||
default:
|
||||
return kEventResult::Available;
|
||||
break;
|
||||
}
|
||||
return kEventResult::Consumed;
|
||||
|
||||
Reference in New Issue
Block a user