rename parent to m_parent and add floating panel class
This commit is contained in:
68
src/node_panel_floating.cpp
Normal file
68
src/node_panel_floating.cpp
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user