add scrollbar, improve presets, other small fixes

This commit is contained in:
2019-01-27 17:19:06 +01:00
parent 6f3465392b
commit 99c06803ae
14 changed files with 94 additions and 20 deletions

View File

@@ -2,6 +2,7 @@
#include "log.h"
#include "node_scroll.h"
#include "event.h"
#include "shader.h"
NodeScroll::NodeScroll()
{
@@ -25,6 +26,32 @@ void NodeScroll::fix_scroll()
m_pos_offset_childred = m_offset;
}
void NodeScroll::handle_resize(glm::vec2 old_size, glm::vec2 new_size)
{
Node::handle_resize(old_size, new_size);
fix_scroll();
}
void NodeScroll::draw()
{
NodeBorder::draw();
glm::vec4 rect = get_children_rect();
if (rect.x == 0 || rect.w < m_size.y)
return;
float h = m_size.y / rect.w * m_size.y;
float offset_percent = m_offset.y / (rect.w - m_size.y);
float pr = YGNodeLayoutGetPadding(y_node, YGEdgeRight) - 5;
glDisable(GL_BLEND);
ShaderManager::use(kShader::Color);
ShaderManager::u_mat4(kShaderUniform::MVP, m_proj
* glm::translate(glm::vec3(m_pos.x + m_size.x - pr, m_pos.y - offset_percent * (m_size.y - h), 0))
* glm::scale(glm::vec3(pr, h, 1))
* glm::translate(glm::vec3(.5, .5, 0))
);
ShaderManager::u_vec4(kShaderUniform::Col, { .3, .3, .3, 1 });
m_plane.draw_fill();
}
kEventResult NodeScroll::handle_event(Event* e)
{
NodeBorder::handle_event(e);
@@ -37,12 +64,14 @@ kEventResult NodeScroll::handle_event(Event* e)
m_dragging = true;
m_drag_start = me->m_pos;
m_offset_start = m_offset;
// if click on the scroll area use scrolling direction, otherwise natural
m_scroll_dir = me->m_pos.x > (m_size.x - YGNodeLayoutGetPadding(y_node, YGEdgeRight) + 5) ? -1 : 1;
mouse_capture();
break;
case kEventType::MouseMove:
if (m_dragging)
{
m_offset = m_offset_start + (me->m_pos - m_drag_start) * m_mask;
m_offset = m_offset_start + (me->m_pos - m_drag_start) * m_mask * m_scroll_dir;
fix_scroll();
}
break;