00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef Text_INCLUDE_ONCE
00033 #define Text_INCLUDE_ONCE
00034
00035 #include <vlGraphics/Font.hpp>
00036 #include <vlGraphics/Renderable.hpp>
00037 #include <vlCore/vlnamespace.hpp>
00038 #include <vlCore/String.hpp>
00039 #include <vlCore/Rect.hpp>
00040 #include <map>
00041
00042 namespace vl
00043 {
00050 class VLGRAPHICS_EXPORT Text: public Renderable
00051 {
00052 public:
00053 virtual const char* className() { return "vl::Text"; }
00054 Text(): mColor(1,1,1,1), mBorderColor(0,0,0,1), mBackgroundColor(1,1,1,1), mOutlineColor(0,0,0,1), mShadowColor(0,0,0,0.5f), mShadowVector(2,-2),
00055 mInterlineSpacing(5), mAlignment(AlignBottom|AlignLeft), mViewportAlignment(AlignBottom|AlignLeft), mMargin(5), mMode(Text2D), mLayout(LeftToRightText), mTextAlignment(TextAlignLeft),
00056 mBorderEnabled(false), mBackgroundEnabled(false), mOutlineEnabled(false), mShadowEnabled(false), mKerningEnabled(true)
00057 {
00058 VL_DEBUG_SET_OBJECT_NAME()
00059 }
00060
00061 const String& text() const { return mText; }
00062 void setText(const String& text) { mText = text; }
00063
00064 const fvec4& color() const { return mColor; }
00065 void setColor(const fvec4& color) { mColor = color; }
00066
00067 const fvec4& borderColor() const { return mBorderColor; }
00068 void setBorderColor(const fvec4& border_color) { mBorderColor = border_color; }
00069
00070 const fvec4& outlineColor() const { return mOutlineColor; }
00071 void setOutlineColor(const fvec4& outline_color) { mOutlineColor = outline_color; }
00072
00073 const fvec4& backgroundColor() const { return mBackgroundColor; }
00074 void setBackgroundColor(const fvec4& background_color) { mBackgroundColor = background_color; }
00075
00076 const fvec4& shadowColor() const { return mShadowColor; }
00077 void setShadowColor(const fvec4& shadow_color) { mShadowColor = shadow_color; }
00078
00079 const fvec2& shadowVector() const { return mShadowVector; }
00080 void setShadowVector(const fvec2& shadow_vector) { mShadowVector = shadow_vector; }
00081
00082 int margin() const { return mMargin; }
00083 void setMargin(int margin) { mMargin = margin; }
00084
00085 Font* font() const { return mFont.get(); }
00086 void setFont(Font* font) { mFont = font; }
00087
00088 const fmat4 matrix() const { return mMatrix; }
00089 void setMatrix(const fmat4& matrix) { mMatrix = matrix; }
00090
00091 int alignment() const { return mAlignment; }
00092 void setAlignment(int align) { mAlignment = align; }
00093
00094 int viewportAlignment() const { return mViewportAlignment; }
00095 void setViewportAlignment(int align) { mViewportAlignment = align; }
00096
00097 float interlineSpacing() const { return mInterlineSpacing; }
00098 void setInterlineSpacing(float spacing) { mInterlineSpacing = spacing; }
00099
00100 ETextMode mode() const { return mMode; }
00101 void setMode(ETextMode mode) { mMode = mode; }
00102
00103 ETextLayout layout() const { return mLayout; }
00104 void setLayout(ETextLayout layout) { mLayout = layout; }
00105
00106 ETextAlign textAlignment() const { return mTextAlignment; }
00107 void setTextAlignment(ETextAlign align) { mTextAlignment = align; }
00108
00109 bool borderEnabled() const { return mBorderEnabled; }
00110 void setBorderEnabled(bool border) { mBorderEnabled = border; }
00111
00112 bool backgroundEnabled() const { return mBackgroundEnabled; }
00113 void setBackgroundEnabled(bool background) { mBackgroundEnabled = background; }
00114
00115 bool kerningEnabled() const { return mKerningEnabled; }
00116 void setKerningEnabled(bool kerning) { mKerningEnabled = kerning; }
00117
00118 bool outlineEnabled() const { return mOutlineEnabled; }
00119 void setOutlineEnabled(bool outline) { mOutlineEnabled = outline; }
00120
00121 bool shadowEnabled() const { return mShadowEnabled; }
00122 void setShadowEnabled(bool shadow) { mShadowEnabled = shadow; }
00123
00124 virtual void render_Implementation(const Actor* actor, const Shader* shader, const Camera* camera, OpenGLContext* gl_context) const;
00125 void computeBounds_Implementation() { setBoundingBox(AABB()); setBoundingSphere(Sphere()); }
00126 AABB boundingRect() const;
00127 AABB boundingRect(const String& text) const;
00128 AABB boundingRectTransformed(vec3& a, vec3& b, vec3& c, vec3& d, const Camera* camera, const Actor* actor=NULL) const;
00129 AABB boundingRectTransformed(const Camera* camera, const Actor* actor=NULL) const;
00130
00131 void translate(float x, float y, float z);
00132 void rotate(float degrees, float x, float y, float z);
00133 void resetMatrix();
00134
00135
00136
00137 void updateVBOs(bool,bool) {}
00138
00139 protected:
00140 void renderText(const Actor*, const Camera* camera, const fvec4& color, const fvec2& offset) const;
00141 void renderBackground(const Actor* actor, const Camera* camera) const;
00142 void renderBorder(const Actor* actor, const Camera* camera) const;
00143 AABB rawboundingRect(const String& text) const;
00144
00145 protected:
00146 ref<Font> mFont;
00147 String mText;
00148 fvec4 mColor;
00149 fvec4 mBorderColor;
00150 fvec4 mBackgroundColor;
00151 fvec4 mOutlineColor;
00152 fvec4 mShadowColor;
00153 fvec2 mShadowVector;
00154 fmat4 mMatrix;
00155 float mInterlineSpacing;
00156 int mAlignment;
00157 int mViewportAlignment;
00158 int mMargin;
00159 ETextMode mMode;
00160 ETextLayout mLayout;
00161 ETextAlign mTextAlignment;
00162 bool mBorderEnabled;
00163 bool mBackgroundEnabled;
00164 bool mOutlineEnabled;
00165 bool mShadowEnabled;
00166 bool mKerningEnabled;
00167 };
00168 }
00169
00170 #endif