Program Listing for File CairoDrawer.h#
↰ Return to documentation for file (src/main/cpp/lib/CairoDrawer.h)
#ifndef CAIRODRAWER_H_
#define CAIRODRAWER_H_
#include "Drawer.h"
#include <cairommconfig.h>
#include <cairomm/context.h>
#include <cairomm/surface.h>
#include <array>
class CairoDrawer : public Drawer
{
public:
static const double RADIAL_TEXT_FACTOR;
static const double COORDGRID_ADJUSTMENT, COORDPOINT_ANGLE;
static const double END_RADIUS_MAJOR_FACTOR, END_RADIUS_MINOR_FACTOR,
RADIUS_TICK_LABEL_FACTOR;
static const double IO_LINE_WIDTH, CONNECTOR_ARC_RATIO,
CONNECTOR_ARROW_HEIGHT, CONNECTOR_ARROW_ANGLE;
static const double INPUT_RADIUS_DELTA, CONNECTOR_DELTA, TEXT_DELTA,
ANGLE_DELTA_SMALL, ANGLE_DELTA_MEDIUM, ANGLE_DELTA_LARGE, RADIUS_DELTA,
OUTPUT_EXTREME_RADIUS_DELTA, OUTPUT_LABEL_LINE_END_DELTA,
OUTPUT_LABEL_FONT_FACTOR;
private:
Cairo::RefPtr<Cairo::Context> cairo_context;
public:
CairoDrawer (const std::string & fpath, int width, int height,
std::size_t num_inputs_);
virtual
~CairoDrawer ()
{
this->finish ();
}
virtual void
change_surface (const std::string& fpath, int width, int height,
std::size_t num_inputs_);
virtual void
draw_output_grid (const OutputGrid& grid);
virtual void
draw_input_axis (const InputAxis& axis);
virtual void
draw_io_vector (const IOVector& iov);
virtual void
finish ();
protected:
virtual void
set_surface (const std::string& fpath, int width, int height);
virtual void
draw_histogram (const InputAxis::Histogram& histogram, double radius,
const Angle& start, const Angle& end);
virtual void
draw_link (const Polar& origin1, const Polar& origin2, const Polar& target1,
const Polar& target2, const DrawerProperties<>& prop);
virtual void
draw_connector (const Polar& from, const Polar& to,
const DrawerProperties<>& prop);
virtual void
draw_segment_axis (double inner_radius, double thickness, const Angle& start,
const Angle& end,
const DrawerProperties<std::array<Color, 10>>& prop,
Direction dir);
virtual void
draw_output_label (const Label& output_label, double radius_label,
double radius_output, const Angle& begin,
const Angle& end);
virtual void
draw_arrow (const Polar& start, const DrawerProperties<>& prop);
virtual void
draw_ring_segment (double radius, double thickness, const Angle& begin,
const Angle & end, const DrawerProperties<> & prop,
Direction dir);
virtual void
draw_connector_segment (double begin_radius, double begin_angle,
double end_radius, double end_angle,
const DrawerProperties<>& prop);
virtual void
draw_line (const Polar& from, const Polar& to,
const DrawerProperties<> & prop);
virtual void
draw_arc (double inner_radius, const Angle& start, const Angle& end,
Direction dir);
virtual void
draw_coord_point (const Polar& coord, const Angle& width, double height,
const DrawerProperties<> & prop);
virtual void
draw_text_parallel (
const Label& label, const Polar& start, const TextAlignment & alignment =
TextAlignment::CENTERED);
virtual void
draw_text_orthogonal (const Label& label, const Polar& start,
const TextAlignment & alignment =
TextAlignment::CENTERED);
void
set_font_face (const Label& label);
Cairo::TextExtents
get_text_extents (const Label& label) const;
inline Angle
get_cairo_angle (const Angle& angle)
{
return Angle (2 * M_PI - angle.value ());
}
};
#endif /* DRAWER_H_ */