/***** * drawlabel.h * John Bowman 2003/03/14 * * Add a label to a picture. *****/ #ifndef DRAWLABEL_H #define DRAWLABEL_H #include "drawelement.h" #include "path.h" #include "angle.h" #include "transform.h" namespace camp { class drawLabel : public virtual drawElement { protected: string label,size; transform T; // A linear (shiftless) transformation. pair position; pair align; pair scale; pen pentype; double width,height,depth; bool havebounds; bool suppress; pair Align; pair texAlign; bbox Box; bool enabled; public: drawLabel(string label, string size, transform T, pair position, pair align, pen pentype, const string& key="") : drawElement(key), label(label), size(size), T(shiftless(T)), position(position), align(align), pentype(pentype), width(0.0), height(0.0), depth(0.0), havebounds(false), suppress(false), enabled(false) {} virtual ~drawLabel() {} void getbounds(iopipestream& tex, const string& texengine); void checkbounds(); void bounds(bbox& b, iopipestream&, boxvector&, bboxlist&); bool islabel() { return true; } bool write(texfile *out, const bbox&); drawElement *transformed(const transform& t); void labelwarning(const char *action); }; class drawLabelPath : public drawLabel, public drawPathPenBase { private: string justify; pair shift; public: drawLabelPath(string label, string size, path src, string justify, pair shift, pen pentype, const string& key="") : drawLabel(label,size,identity,pair(0.0,0.0),pair(0.0,0.0),pentype,key), drawPathPenBase(src,pentype), justify(justify), shift(shift) {} virtual ~drawLabelPath() {} bool svg() {return true;} bool svgpng() {return true;} void bounds(bbox& b, iopipestream& tex, boxvector&, bboxlist&); bool write(texfile *out, const bbox&); drawElement *transformed(const transform& t); }; void setpen(iopipestream& tex, const string& texengine, const pen& pentype); void texbounds(double& width, double& height, double& depth, iopipestream& tex, string& s); } #endif