update android and xcode projects, fix document title and change default resolution to 1024px
This commit is contained in:
@@ -131,6 +131,7 @@ public:
|
||||
void download(std::string filename);
|
||||
|
||||
void brush_update();
|
||||
void title_update(std::string name, int resolution);
|
||||
|
||||
void cmd_convert(std::string pano_path, std::string out_path);
|
||||
};
|
||||
|
||||
@@ -117,10 +117,9 @@ void App::cloud_browse()
|
||||
async_start();
|
||||
canvas->reset_camera();
|
||||
layers->clear();
|
||||
canvas->m_canvas->project_open(dialog->selected_path);
|
||||
canvas->m_canvas->project_open_thread(dialog->selected_path);
|
||||
doc_name = dialog->selected_name;
|
||||
if (auto docname = layout[main_id]->find<NodeText>("txt-docname"))
|
||||
docname->set_text(("Panodoc: " + doc_name).c_str());
|
||||
title_update(doc_name, canvas->m_canvas->m_width);
|
||||
for (auto& i : canvas->m_canvas->m_order)
|
||||
layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str());
|
||||
dialog->destroy();
|
||||
@@ -129,4 +128,4 @@ void App::cloud_browse()
|
||||
async_end();
|
||||
}).detach();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,18 +26,18 @@ void App::dialog_newdoc()
|
||||
std::string path = data_path + "/" + name + ".pano";
|
||||
|
||||
auto action = [this, dialog, name] {
|
||||
std::array<int, 4> resolutions{512, 1024, 1536, 2048};
|
||||
int res = resolutions[dialog->m_resolution->m_current_index];
|
||||
doc_name = name;
|
||||
if (auto docname = layout[main_id]->find<NodeText>("txt-docname"))
|
||||
docname->set_text(("Panodoc: " + doc_name).c_str());
|
||||
title_update(name, res);
|
||||
|
||||
int res = atoi(dialog->m_resolution->labels[dialog->m_resolution->m_current_index].c_str());
|
||||
layers->clear();
|
||||
canvas->m_canvas->m_layers.clear();
|
||||
canvas->m_canvas->m_order.clear();
|
||||
canvas->m_canvas->resize(res, res);
|
||||
canvas->reset_camera();
|
||||
ActionManager::clear();
|
||||
|
||||
|
||||
canvas->m_canvas->layer_add("Default");
|
||||
layers->add_layer("Default");
|
||||
|
||||
@@ -96,8 +96,7 @@ void App::dialog_open()
|
||||
canvas->m_canvas->project_open(dialog->selected_path, [this] {
|
||||
// on complete
|
||||
async_start();
|
||||
if (auto docname = layout[main_id]->find<NodeText>("txt-docname"))
|
||||
docname->set_text(("Panodoc: " + doc_name).c_str());
|
||||
title_update(doc_name, canvas->m_canvas->m_width);
|
||||
for (auto& i : canvas->m_canvas->m_order)
|
||||
layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str());
|
||||
async_end();
|
||||
@@ -131,8 +130,7 @@ void App::dialog_browse()
|
||||
canvas->m_canvas->project_open(dialog->selected_path, [this] {
|
||||
// on complete
|
||||
async_start();
|
||||
if (auto docname = layout[main_id]->find<NodeText>("txt-docname"))
|
||||
docname->set_text(("Panodoc: " + doc_name).c_str());
|
||||
title_update(doc_name, canvas->m_canvas->m_width);
|
||||
for (auto& i : canvas->m_canvas->m_order)
|
||||
layers->add_layer(canvas->m_canvas->m_layers[i].m_name.c_str());
|
||||
async_end();
|
||||
@@ -168,8 +166,7 @@ void App::dialog_save_ver()
|
||||
}
|
||||
|
||||
doc_name = next;
|
||||
if (auto docname = layout[main_id]->find<NodeText>("txt-docname"))
|
||||
docname->set_text(("Panodoc: " + doc_name).c_str());
|
||||
title_update(doc_name, canvas->m_canvas->m_width);
|
||||
canvas->m_canvas->project_save(data_path + "/" + next + ".pano");
|
||||
}
|
||||
|
||||
@@ -204,8 +201,7 @@ void App::dialog_save()
|
||||
|
||||
auto action = [this, dialog, name, path] {
|
||||
doc_name = name;
|
||||
if (auto docname = layout[main_id]->find<NodeText>("txt-docname"))
|
||||
docname->set_text(("Panodoc: " + doc_name).c_str());
|
||||
title_update(doc_name, canvas->m_canvas->m_width);
|
||||
canvas->m_canvas->project_save(path);
|
||||
dialog->destroy();
|
||||
App::I.hideKeyboard();
|
||||
|
||||
@@ -10,6 +10,14 @@ using namespace ui;
|
||||
static glm::vec4 color_button_normal{ .1, .1, .1, 1 };
|
||||
static glm::vec4 color_button_hlight{ 1, .0, .0, 1 };
|
||||
|
||||
void App::title_update(std::string name, int resolution)
|
||||
{
|
||||
static char str[256];
|
||||
snprintf(str, 256, "Panodoc: %s (%dpx)", doc_name.c_str(), resolution);
|
||||
if (auto docname = layout[main_id]->find<NodeText>("txt-docname"))
|
||||
docname->set_text(str);
|
||||
}
|
||||
|
||||
void App::init_toolbar_main()
|
||||
{
|
||||
|
||||
|
||||
@@ -112,10 +112,8 @@ void App::initShaders()
|
||||
" case 3: return blend_colorDodge(base, stroke, alpha_tot);"
|
||||
"}}\n"
|
||||
"void main(){\n"
|
||||
" mediump vec2 uv2 = gl_FragCoord.st / vec2(2048) * 20.0;\n"
|
||||
" mediump vec4 base = texture(tex, uv.xy);\n"
|
||||
" mediump vec4 stroke = texture(tex_stroke, uv.xy);\n"
|
||||
" mediump float stencil = pow(texture(tex_stencil, uv2).r, 8.0);\n"
|
||||
" stroke.a = mask ? stroke.a * alpha * blur(tex_mask, uv.xy).r : stroke.a * alpha;\n"
|
||||
|
||||
" if (!lock && base.a == 0.0) { frag = stroke; return; }\n"
|
||||
|
||||
@@ -241,7 +241,7 @@ void ui::Canvas::stroke_draw()
|
||||
ShaderManager::use(ui::kShader::Stroke);
|
||||
ShaderManager::u_int(kShaderUniform::Tex, 0); // brush
|
||||
ShaderManager::u_int(kShaderUniform::TexBG, 1); // bg
|
||||
ShaderManager::u_int(kShaderUniform::TexStencil, 3); // stencil
|
||||
//ShaderManager::u_int(kShaderUniform::TexStencil, 3); // stencil
|
||||
ShaderManager::u_vec4(kShaderUniform::Col, m_brush.m_tip_color);
|
||||
ShaderManager::u_vec2(kShaderUniform::Resolution, { m_width, m_height });
|
||||
//ShaderManager::u_vec2(kShaderUniform::StencilOffset, glm::vec2((rand()%1000)*0.001f, (rand()%1000)*0.001f));
|
||||
@@ -682,8 +682,9 @@ void ui::Canvas::layer_merge(int source_idx, int dest_idx) // m_layer index
|
||||
ui::ShaderManager::u_int(kShaderUniform::Tex, 0); // dest
|
||||
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1); // source
|
||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, 1);
|
||||
ShaderManager::u_int(kShaderUniform::Lock, false);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
||||
ui::ShaderManager::u_int(kShaderUniform::Lock, false);
|
||||
ui::ShaderManager::u_int(kShaderUniform::BlendMode, 0); // TODO: defaulted to normal, change to layer blend mode when implemented
|
||||
ui::ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
m_tex2[i].bind();
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
NS_START
|
||||
|
||||
#define CANVAS_RES 2048
|
||||
#define CANVAS_RES 512
|
||||
|
||||
class Layer
|
||||
{
|
||||
|
||||
@@ -149,7 +149,7 @@ void NodeCanvas::draw()
|
||||
ui::ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||
ui::ShaderManager::u_int(kShaderUniform::TexStroke, 1);
|
||||
ui::ShaderManager::u_int(kShaderUniform::TexMask, 2);
|
||||
ui::ShaderManager::u_int(kShaderUniform::TexStencil, 3);
|
||||
//ui::ShaderManager::u_int(kShaderUniform::TexStencil, 3);
|
||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_canvas->m_current_stroke->m_brush.m_tip_opacity);
|
||||
ui::ShaderManager::u_int(kShaderUniform::Lock, m_canvas->m_layers[m_canvas->m_current_layer_idx].m_alpha_locked);
|
||||
ui::ShaderManager::u_int(kShaderUniform::Mask, m_canvas->m_smask_active);
|
||||
|
||||
@@ -60,7 +60,8 @@ bool RTT::create(int width, int height, int tex/* = -1*/, GLint internal_format)
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texID);
|
||||
if (tex == -1)
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0, GL_RGBA,
|
||||
internal_format == GL_RGBA32F ? GL_FLOAT : GL_UNSIGNED_BYTE, 0);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
|
||||
@@ -46,7 +46,8 @@ bool Texture2D::create(int width, int height, GLint internal_format, GLint forma
|
||||
glGenTextures(1, &m_tex);
|
||||
//LOG("TEX create %d", m_tex);
|
||||
bind();
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0, format,
|
||||
internal_format == GL_RGBA32F ? GL_FLOAT : GL_UNSIGNED_BYTE, data);
|
||||
unbind();
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user