Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 3 4 #ifndef tools_sg_base_text 5 #define tools_sg_base_text 6 7 #include "node" 8 9 #include "sf_enum" 10 #include "mf" 11 #include "enums" //hjust,vjust 12 //#include "../lina/box3f" 13 14 namespace tools { 15 namespace sg { 16 17 class base_text : public node { 18 typedef node parent; 19 public: 20 virtual float ascent(float) const = 0; 21 virtual float descent(float) const = 0; 22 virtual float y_advance(float) const = 0; 23 virtual void get_bounds(float, 24 float&,float&,float&, 25 float&,float&,float&) const = 0; 26 27 virtual bool truncate(const std::string&,float,float,std::string&) const = 0; 28 public: 29 mf_string strings; 30 sf<float> height; 31 sf_enum<sg::hjust> hjust; 32 sf_enum<sg::vjust> vjust; 33 public: 34 virtual const desc_fields& node_desc_fields() const { 35 TOOLS_FIELD_DESC_NODE_CLASS(tools::sg::base_text) 36 static const desc_fields s_v(parent::node_desc_fields(),4, //WARNING : take care of count. 37 TOOLS_ARG_FIELD_DESC(strings), 38 TOOLS_ARG_FIELD_DESC(height), 39 TOOLS_ARG_FIELD_DESC(hjust), 40 TOOLS_ARG_FIELD_DESC(vjust) 41 ); 42 return s_v; 43 } 44 private: 45 void add_fields(){ 46 add_field(&strings); 47 add_field(&height); 48 add_field(&hjust); 49 add_field(&vjust); 50 } 51 public: 52 base_text() 53 :parent() 54 ,height(1.0f) 55 ,hjust(left) 56 ,vjust(bottom) 57 { 58 add_fields(); 59 } 60 virtual ~base_text(){} 61 protected: 62 base_text(const base_text& a_from) 63 :parent(a_from) 64 ,strings(a_from.strings) 65 ,height(a_from.height) 66 ,hjust(a_from.hjust) 67 ,vjust(a_from.vjust) 68 { 69 add_fields(); 70 } 71 base_text& operator=(const base_text& a_from){ 72 parent::operator=(a_from); 73 height = a_from.height; 74 strings = a_from.strings; 75 hjust = a_from.hjust; 76 vjust = a_from.vjust; 77 return *this; 78 } 79 public: 80 81 // void get_bounds(float a_height,box3f& a_box) { 82 // //for backward compatibility. 83 // float mn_x,mn_y,mn_z; 84 // float mx_x,mx_y,mx_z; 85 // get_bounds(a_height,mn_x,mn_y,mn_z,mx_x,mx_y,mx_z); 86 // a_box.set_bounds(mn_x,mn_y,mn_z,mx_x,mx_y,mx_z); 87 // } 88 89 }; 90 91 }} 92 93 #endif