#ifndef __BLOP_ARROWHEAD_H__
#define __BLOP_ARROWHEAD_H__
#include "length.h"
#include "grob.h"
#include "constants.h"
namespace blop
{
class arrowhead : public grob
{
public:
virtual arrowhead *clone() const = 0;
class simple;
class filled;
arrowhead &layer(const var & l) { grob::layer(l); return *this; }
virtual arrowhead &size(const length &l) = 0;
virtual arrowhead &angle(double a) = 0;
};
class arrowhead::simple : public arrowhead
{
private:
length length_,l_,t1_,t2_;
double angle_;
void set_t_();
public:
simple(const length &l, double a=45);
simple(const arrowhead::simple &o);
void prepare_for_draw();
void print(terminal *);
simple &size(const length &l);
const length &size() const;
simple &angle(double a);
double angle() const;
virtual arrowhead *clone() const;
};
class arrowhead::filled : public arrowhead
{
private:
bool l1_eq_l2_;
length length_,l_,t1_,t2_,length2_, l2_;
double angle_;
void set_t_();
public:
filled(const length &l=EX, double a=45);
filled(const length &l, double a, const length &l2);
filled(const filled &);
void prepare_for_draw();
void print(terminal *);
filled &size(const length &l);
filled &size2(const length &l);
const length &size() const;
const length &size2() const;
filled &angle(double a);
double angle() const;
virtual arrowhead *clone() const;
};
}
#endif