#ifndef CONTEXT_H
#define CONTEXT_H
#include <cassert>
#include <cairomm/cairomm.h>
#include "color.h"
#include "vector.h"
#include "curve.h"
class ActivePoint;
class Context {
public:
Cairo::RefPtr<Cairo::Context> context;
explicit Context(
const Cairo::RefPtr<Cairo::Context> &context = Cairo::RefPtr<Cairo::Context>()
): context(context) { }
Cairo::RefPtr<Cairo::Context> ctx() const { assert(context); return context; }
Cairo::Context* operator->() const { return context.operator->(); }
Real pixelsize_sqr() const;
Real pixelsize() const;
void set_source_rgb(const Color &c) const
{ ctx()->set_source_rgb(c.r, c.g, c.b); }
void set_source_rgba(const Color &c) const
{ ctx()->set_source_rgba(c.r, c.g, c.b, c.a); }
void set_line_width_px(const Real &pixels) const
{ ctx()->set_line_width( pixels*pixelsize() ); }
void move_to(const Vector &p) const
{ ctx()->move_to(p.x, p.y); }
void line_to(const Vector &p) const
{ ctx()->line_to(p.x, p.y); }
void point(const ActivePoint &point) const;
void bezier(const Bezier &bezier, bool jump = false) const;
void hermite(const Hermite &hermite, bool jump = false) const
{ bezier(hermite.get_bezier(), jump); }
};
#endif