From c6173987afeca4b3a41c1ac8095b3711a1fc810a Mon Sep 17 00:00:00 2001 From: omigamedev Date: Thu, 28 Nov 2019 21:01:17 +0100 Subject: [PATCH] improve text node --- src/node_canvas.cpp | 22 ++++++++++++---------- src/node_text.cpp | 11 +++++------ src/node_text.h | 2 +- src/node_text_input.h | 2 +- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/node_canvas.cpp b/src/node_canvas.cpp index ce40fb9..38f7698 100644 --- a/src/node_canvas.cpp +++ b/src/node_canvas.cpp @@ -691,19 +691,21 @@ void NodeCanvas::set_cursor_visibility(kCursorVisibility mode) void NodeCanvas::update_cursor() { bool visible = true; - if (m_cursor_visibility == kCursorVisibility::Always) - visible = true; - if (m_cursor_visibility == kCursorVisibility::Never) - visible = false; - if (m_cursor_visibility == kCursorVisibility::SmallBrush) - visible = m_canvas->m_current_brush->m_tip_size < 10; - if (m_cursor_visibility == kCursorVisibility::NotPainting && - m_canvas->m_current_mode == kCanvasMode::Draw || + if (m_canvas->m_current_mode == kCanvasMode::Draw || m_canvas->m_current_mode == kCanvasMode::Erase) { - visible = !m_canvas->get_mode()->m_drawing || + if (m_cursor_visibility == kCursorVisibility::Always) + visible = true; + if (m_cursor_visibility == kCursorVisibility::Never) + visible = false; + if (m_cursor_visibility == kCursorVisibility::SmallBrush) + visible = m_canvas->m_current_brush->m_tip_size < 10; + if (m_cursor_visibility == kCursorVisibility::NotPainting) + visible = !m_canvas->get_mode()->m_drawing; + if (App::I->keys[(int)kKey::KeyAlt] || m_canvas->get_mode()->m_resizing || - m_canvas->get_mode()->m_picking; + m_canvas->get_mode()->m_picking) + visible = true; } visible ? App::I->show_cursor() : App::I->hide_cursor(); } diff --git a/src/node_text.cpp b/src/node_text.cpp index 6f6054e..4b11ec3 100644 --- a/src/node_text.cpp +++ b/src/node_text.cpp @@ -120,6 +120,7 @@ void NodeText::set_text_format(const char* fmt, ...) void NodeText::update_layout() { + auto pad = GetPadding(); if (auto_width) { YGNodeStyleSetWidth(y_node, m_text_mesh.bb.x); @@ -131,9 +132,8 @@ void NodeText::update_layout() m_size.y = m_text_mesh.bb.y; } - auto pad = GetPadding(); - float h = GetHeight() - (pad[1] + pad[3]); - float w = GetWidth() - (pad[0] + pad[2]); + float h = m_size.y - (pad[1] + pad[3]); + float w = m_size.x - (pad[0] + pad[2]); if (m_text_align_v == TextAlign::Begin) m_off.y = pad[0]; @@ -152,11 +152,10 @@ void NodeText::update_layout() void NodeText::draw() { - glm::mat4 pos = glm::translate(glm::vec3(glm::floor(m_pos), 0)); - m_mvp = m_proj * pos; + glm::mat4 pos = glm::translate(glm::vec3(glm::floor(m_pos + m_off), 0)); ShaderManager::use(kShader::Font); ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_mat4(kShaderUniform::MVP, m_mvp); + ShaderManager::u_mat4(kShaderUniform::MVP, m_proj * pos); ShaderManager::u_vec4(kShaderUniform::Col, m_color); glEnable(GL_BLEND); m_text_mesh.draw(); diff --git a/src/node_text.h b/src/node_text.h index 4f4530a..c4ee6d2 100644 --- a/src/node_text.h +++ b/src/node_text.h @@ -19,7 +19,7 @@ public: kFont font_id; bool m_multiline = false; - glm::vec2 m_off; + glm::vec2 m_off = { 0, 0 }; TextAlign m_text_align_v = TextAlign::Center; TextAlign m_text_align_h = TextAlign::Begin; diff --git a/src/node_text_input.h b/src/node_text_input.h index 1994646..46d71a4 100644 --- a/src/node_text_input.h +++ b/src/node_text_input.h @@ -23,7 +23,7 @@ public: bool m_multiline = false; bool m_cursor_visible = false; - glm::vec2 m_off; + glm::vec2 m_off = { 0, 0 }; TextAlign m_text_align_v = TextAlign::Center; TextAlign m_text_align_h = TextAlign::Begin;