Files
viseq/src/draggable.h
T

56 lines
1.3 KiB
C++

#pragma once
#include "moveable.h"
#include "raylib.h"
#include "selectable.h"
#include "state.h"
#include "vmath.h"
namespace VISEQ::BASE {
class Draggable : public Movable, public Selectable{
public:
Draggable() {}
Draggable(float x, float y) : Movable(Vec2Df(x, y), 960.0f) {}
Draggable(Vec2Df p) : Movable(p, 960.0f) {}
virtual ~Draggable() {}
Vec2Df drag_offset;
bool picked_up = false;
virtual bool pickedUp() {
if(clicked() && held() && state->istate == APP::InteractionState::HOVER_NODE) {
picked_up = true;
drag_offset = position - state->screen_mouse;
}
return picked_up;
}
virtual void drag() {
if(state->keys_down.ctrl){
position = state->mod_mouse;
} else {
position = state->mod_mouse + drag_offset;
}
}
virtual void putDown(){
picked_up = false;
}
virtual void select() override {
selected = (state->keys_down.shift && selected) || CheckCollisionPointRec(position, state->selection);
/**/
/*//std::cout << "select" << std::endl;*/
/*if(CheckCollisionPointRec(position, state->selection)) {*/
/* in_selection_rect = true;*/
/*} else {*/
/* in_selection_rect = false;*/
/*}*/
/*if(released() && in_selection_rect) selected = true;*/
/*if(released() && !in_selection_rect) selected = false;*/
}
};
}