00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OB_PAINTER_H
00020 #define OB_PAINTER_H
00021
00022 #include <openbabel/babelconfig.h>
00023 #include <string>
00024 #include <vector>
00025 #include <sstream>
00026 #ifndef OBDEPICT
00027 #define OBDEPICT
00028 #endif
00029
00030 namespace OpenBabel
00031 {
00037 struct OBDEPICT OBColor
00038 {
00039 OBColor()
00040 {
00041 *this = OBColor(0.0, 0.0, 0.0);
00042 }
00043 OBColor(double _red, double _green, double _blue, double _alpha = 1.0) :
00044 red(_red), green(_green), blue(_blue), alpha(_alpha)
00045 {
00046 }
00047 OBColor(const std::string &color)
00048 {
00049 if (color[0]=='#')
00050 {
00051 std::stringstream ss(color.substr(1));
00052 unsigned c;
00053 ss >> std::hex >> c;
00054 *this = OBColor((c/0x10000)/256.0, ((c%0x10000)/0x100/256.0), (c%0x100)/256.0);
00055 }
00056 if (color == "black")
00057 *this = OBColor(0.0, 0.0, 0.0);
00058 else if (color == "white")
00059 *this = OBColor(1.0, 1.0, 1.0);
00060 else if (color == "red")
00061 *this = OBColor(1.0, 0.0, 0.0);
00062 else if (color == "green")
00063 *this = OBColor(0.0, 1.0, 0.0);
00064 else if (color == "blue")
00065 *this = OBColor(0.0, 0.0, 1.0);
00066 else if (color == "yellow")
00067 *this = OBColor(1.0, 1.0, 0.0);
00068 else if (color == "gray")
00069 *this = OBColor(0.3, 0.3, 0.3);
00070 else if (color == "cyan")
00071 *this = OBColor(1.0, 0.0, 1.0);
00072 else if (color == "purple")
00073 *this = OBColor(0.5, 0.0, 0.5);
00074 else if (color == "teal")
00075 *this = OBColor(0.0, 0.5, 0.5);
00076 else if (color == "olive")
00077 *this = OBColor(0.5, 0.5, 0.0);
00078 else
00079 *this = OBColor(0.5, 0.5, 0.5);
00080 }
00081
00082 OBColor(std::vector<double> vec) : red(vec[0]), green(vec[1]), blue(vec[2]), alpha(1.0){}
00083
00084 bool operator !=(const OBColor& other)
00085 {
00086 return red!=other.red || green!=other.green || blue!=other.blue;
00087 }
00088
00089 double red, green, blue, alpha;
00090 };
00091
00097 struct OBDEPICT OBFontMetrics
00098 {
00099 int fontSize;
00100 double ascent, descent;
00101 double width, height;
00102 };
00103
00109 class OBDEPICT OBPainter
00110 {
00111 public:
00115 virtual ~OBPainter() {}
00116
00123 virtual void NewCanvas(double width, double height) = 0;
00129 virtual bool IsGood() const = 0;
00133 virtual void SetFontFamily(const std::string &fontFamily) = 0;
00137 virtual void SetFontSize(int pointSize) = 0;
00141 virtual void SetFillColor(const OBColor &color) = 0;
00145 virtual void SetPenColor(const OBColor &color) = 0;
00149 virtual void SetPenWidth(double width) = 0;
00154 virtual void DrawLine(double x1, double y1, double x2, double y2) = 0;
00155 virtual void DrawCircle(double x, double y, double r) = 0;
00162 virtual void DrawPolygon(const std::vector<std::pair<double,double> > &points) = 0;
00163 virtual void DrawText(double x, double y, const std::string &text) = 0;
00164 virtual OBFontMetrics GetFontMetrics(const std::string &text) = 0;
00165 };
00166
00167 }
00168
00169 #endif
00170