diff --git a/data/layout.xml b/data/layout.xml index c5e9108..8c9ecee 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -1634,6 +1634,9 @@ Here's a list of what's available in this release. + + + diff --git a/src/app_layout.cpp b/src/app_layout.cpp index 653fdfa..bd817ef 100644 --- a/src/app_layout.cpp +++ b/src/app_layout.cpp @@ -14,6 +14,8 @@ void App::title_update() snprintf(str, 256, "Panodoc: %s%s (%s)", doc_name.c_str(), canvas->m_canvas->m_unsaved ? "*" : "", res_to_string(canvas->m_canvas->m_width).c_str()); if (auto docname = layout[main_id]->find("txt-docname")) docname->set_text(str); + if (auto node = layout[main_id]->find("txt-dpi")) + node->set_text(fmt::format("{}x-dpi", zoom).c_str()); } void App::init_toolbar_main() diff --git a/src/node_canvas.cpp b/src/node_canvas.cpp index 93aba51..14a1a83 100644 --- a/src/node_canvas.cpp +++ b/src/node_canvas.cpp @@ -107,14 +107,25 @@ void NodeCanvas::draw() m_canvas->m_plane_shape[plane_index] = m_canvas->face_to_shape2D(plane_index); } + + if (zoom > 1.f) + { + m_rtt.bindFramebuffer(); + glClearColor(1, 1, 1, 0); + glClear(GL_COLOR_BUFFER_BIT); + glViewport(0, 0, m_rtt.getWidth(), m_rtt.getHeight()); + } + else + { + glClearColor(1, 1, 1, 0); + glClear(GL_COLOR_BUFFER_BIT); + glViewport(c.x + App::I.off_x, c.y + App::I.off_y, c.z, c.w); + } + + // NOTE: draw_merge has been disabled for worst performance bool draw_merged = !(m_canvas->m_current_mode == kCanvasMode::Camera); draw_merged = false; - m_rtt.bindFramebuffer(); - glClearColor(1, 1, 1, 0); - glClear(GL_COLOR_BUFFER_BIT); - glViewport(0, 0, m_rtt.getWidth(), m_rtt.getHeight()); - if (draw_merged) { glDisable(GL_BLEND); @@ -404,18 +415,18 @@ void NodeCanvas::draw() glEnable(GL_BLEND); //draw the grid - //for (int plane_index = 0; plane_index < 6; plane_index++) - //{ - // auto plane_mvp = proj * camera * - // glm::scale(glm::vec3(m_canvas->m_order.size() + 500.f)) * - // m_canvas->m_plane_transform[plane_index] * - // glm::translate(glm::vec3(0, 0, -1.f)); + for (int plane_index = 0; plane_index < 6; plane_index++) + { + auto plane_mvp = proj * camera * + glm::scale(glm::vec3(m_canvas->m_order.size() + 500.f)) * + m_canvas->m_plane_transform[plane_index] * + glm::translate(glm::vec3(0, 0, -1.f)); - // ShaderManager::use(kShader::Checkerboard); - // ShaderManager::u_int(kShaderUniform::Colorize, false); - // ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp); - // m_face_plane.draw_fill(); - //} + ShaderManager::use(kShader::Checkerboard); + ShaderManager::u_int(kShaderUniform::Colorize, false); + ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp); + m_face_plane.draw_fill(); + } // draw the layers m_sampler.bind(0); @@ -429,21 +440,24 @@ void NodeCanvas::draw() } } - m_rtt.unbindFramebuffer(); + if (zoom > 1.f) + { + m_rtt.unbindFramebuffer(); - glClearColor(1, 1, 1, 0); - glClear(GL_COLOR_BUFFER_BIT); - glViewport(c.x + App::I.off_x, c.y + App::I.off_y, c.z, c.w); + glClearColor(1, 1, 1, 0); + glClear(GL_COLOR_BUFFER_BIT); + glViewport(c.x + App::I.off_x, c.y + App::I.off_y, c.z, c.w); - // draw the canvas - m_sampler_linear.bind(0); - glActiveTexture(GL_TEXTURE0); - m_rtt.bindTexture(); - ShaderManager::use(kShader::Texture); - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-1, 1, -1, 1)); - m_face_plane.draw_fill(); - m_rtt.unbindTexture(); + // draw the canvas + m_sampler_linear.bind(0); + glActiveTexture(GL_TEXTURE0); + m_rtt.bindTexture(); + ShaderManager::use(kShader::Texture); + ShaderManager::u_int(kShaderUniform::Tex, 0); + ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-1, 1, -1, 1)); + m_face_plane.draw_fill(); + m_rtt.unbindTexture(); + } glDisable(GL_DEPTH_TEST);