95 lines
2.3 KiB
C++
95 lines
2.3 KiB
C++
#pragma once
|
|
#include <JUI/Base/Widget.hpp>
|
|
|
|
|
|
namespace JUI {
|
|
|
|
/// An invisible, point-like widget which is used to attach decorator-type widgets at a given point.
|
|
/// For example: The CurveSegment Widget uses two Anchors for it's endpoints.
|
|
class Anchor : public Widget {
|
|
public:
|
|
Anchor() : Widget() {
|
|
|
|
}
|
|
explicit Anchor(Widget* parent) : Anchor() {
|
|
Parent(parent);
|
|
};
|
|
explicit Anchor(Widget* parent, const UDim2& position) : Anchor(parent) {
|
|
Position(position);
|
|
Size({0_px, 0_px});
|
|
}
|
|
|
|
void Update(float elapsed) override {
|
|
|
|
}
|
|
|
|
void Draw() override {
|
|
Color4 debug_color = Colors::Red;
|
|
float debug_size = 1;
|
|
|
|
J2D::FillCircle(debug_color, GetAbsolutePosition(), debug_size, 5);
|
|
}
|
|
|
|
Vector2 Point() { return GetAbsolutePosition(); }
|
|
protected:
|
|
private:
|
|
};
|
|
|
|
class Decorator : public Widget {
|
|
public:
|
|
Decorator() : Widget(){
|
|
|
|
}
|
|
explicit Decorator(Widget* parent) : Decorator() {
|
|
Parent(parent);
|
|
}
|
|
|
|
};
|
|
|
|
class ArrowDecorator : public Decorator {
|
|
public:
|
|
explicit ArrowDecorator(Widget* parent, Anchor* a, Anchor* b) : Decorator() {
|
|
Parent(parent);
|
|
origin = a;
|
|
goal = b;
|
|
}
|
|
|
|
|
|
void Draw() override {
|
|
|
|
auto goal_point = goal->Point();
|
|
auto origin_point = origin->Point();
|
|
|
|
using namespace J3ML;
|
|
|
|
|
|
J2D::DrawLine(color, origin->Point(), goal->Point(), line_width);
|
|
|
|
|
|
Vector2 direction = ( origin->Point() - goal->Point()).Normalized();
|
|
|
|
Vector2 triangle_base_pt = goal->Point() + (direction*arrowhead_size);
|
|
|
|
//J2D::DrawPoint(Colors::Yellow, triangle_base_pt, 4);
|
|
|
|
Vector2 tri_left = triangle_base_pt + (direction.Rotated90CW() *arrowhead_size);
|
|
Vector2 tri_right = triangle_base_pt + (direction.Rotated90CCW()*arrowhead_size);
|
|
Vector2 tri_top = goal->Point();
|
|
|
|
J2D::DrawLine(color, tri_top, tri_left, arrowhead_size);
|
|
J2D::DrawLine(color, tri_top, tri_right, arrowhead_size);
|
|
|
|
}
|
|
protected:
|
|
|
|
float arrowhead_size;
|
|
float line_width;
|
|
Color4 color;
|
|
|
|
Anchor* origin;
|
|
Anchor* goal;
|
|
private:
|
|
|
|
};
|
|
}
|