#include "pch.h" #include "log.h" #include "node_border.h" #include "shader.h" ui::Plane NodeBorder::m_plane; NodeBorder::NodeBorder() { m_mouse_ignore = false; } void NodeBorder::static_init() { m_plane.create<1>(1, 1); } Node* NodeBorder::clone_instantiate() const { return new NodeBorder(); } void NodeBorder::clone_copy(Node* dest) const { Node::clone_copy(dest); NodeBorder* n = static_cast(dest); n->m_color = m_color; n->m_border_color = m_border_color; n->m_thinkness = m_thinkness; n->m_mouse_ignore = false; } void NodeBorder::parse_attributes(kAttribute ka, const tinyxml2::XMLAttribute* attr) { Node::parse_attributes(ka, attr); switch (ka) { case kAttribute::Color: { glm::vec4 pad; int n = sscanf(attr->Value(), "%f %f %f %f", &pad.x, &pad.y, &pad.z, &pad.w); if (n == 1) m_color = glm::vec4(pad.x, pad.x, pad.x, 1); else m_color = pad; break; } case kAttribute::BorderColor: { glm::vec4 pad; int n = sscanf(attr->Value(), "%f %f %f %f", &pad.x, &pad.y, &pad.z, &pad.w); if (n == 1) m_border_color = glm::vec4(pad.x); else m_border_color = pad; break; } case kAttribute::Thickness: m_thinkness = attr->FloatValue(); break; default: break; } } void NodeBorder::draw() { using namespace ui; ui::ShaderManager::use(kShader::Color); ui::ShaderManager::u_mat4(kShaderUniform::MVP, m_mvp); if (m_color.a > 0.f) { m_color.a < 1.f ? glEnable(GL_BLEND) : glDisable(GL_BLEND); ui::ShaderManager::u_vec4(kShaderUniform::Col, m_color); m_plane.draw_fill(); glDisable(GL_BLEND); } if (m_thinkness > 0 && m_border_color.a > 0.f) { glLineWidth(m_thinkness); ui::ShaderManager::u_vec4(kShaderUniform::Col, m_border_color); m_border_color.a < 1.f ? glEnable(GL_BLEND) : glDisable(GL_BLEND); m_plane.draw_stroke(); glDisable(GL_BLEND); } }