rename parent to m_parent and add floating panel class

This commit is contained in:
2019-03-20 22:28:44 +01:00
parent e635ad00a8
commit 929e80a218
14 changed files with 151 additions and 42 deletions

View File

@@ -0,0 +1,68 @@
#include "pch.h"
#include "node_panel_floating.h"
Node* NodePanelFloating::clone_instantiate() const
{
return new this_class;
}
void NodePanelFloating::clone_finalize(Node* dest) const
{
parent::clone_finalize(dest);
auto n = static_cast<this_class*>(dest);
n->init_controls();
}
void NodePanelFloating::init()
{
parent::init();
init_template("tpl-panel-floating");
init_controls();
}
void NodePanelFloating::init_controls()
{
SetPositioning(YGPositionTypeAbsolute);
SetPosition({ 0, 0 });
m_mouse_ignore = false;
m_flood_events = true;
m_capture_children = true;
m_container = find("container");
m_button_minimize = find<NodeButton>("button-minimize");
m_button_minimize->on_click = [this](Node*) {
m_container->ToggleVisibility();
};
}
kEventResult NodePanelFloating::handle_event(Event* e)
{
parent::handle_event(e);
kEventResult ret = kEventResult::Available;
auto me = static_cast<MouseEvent*>(e);
switch (e->m_type)
{
case kEventType::MouseDownL:
m_dragging = true;
m_drag_start_pos = m_pos;
m_drag_start_cur = me->m_pos;
mouse_capture();
ret = kEventResult::Consumed;
break;
case kEventType::MouseMove:
if (m_dragging)
{
auto newpos = glm::clamp(m_drag_start_pos + me->m_pos - m_drag_start_cur, { 0, 0 }, root()->m_size - m_size);
SetPosition(newpos);
ret = kEventResult::Consumed;
}
break;
case kEventType::MouseUpL:
m_dragging = false;
mouse_release();
ret = kEventResult::Consumed;
break;
default:
break;
}
return ret;
}