text: /*
  	GWEN
  	Copyright (c) 2010 Facepunch Studios
  	See license in Gwen.h
  */
  
  #pragma once
  #ifndef GWEN_CONTROLS_TEXT_H
  #define GWEN_CONTROLS_TEXT_H
  
  #include "Gwen/BaseRender.h"
  #include "Gwen/Controls/Base.h"
  
  namespace Gwen 
  {
  	namespace ControlsInternal
  	{
  		class GWEN_EXPORT Text : public Controls::Base
  		{
  			public:
  
  				GWEN_CONTROL( Text, Controls::Base );
  
  				virtual ~Text();
  				Gwen::Font* GetFont();
  
  				void SetString( const TextObject& str );
  				
  				void Render( Skin::Base* skin );
  				void Layout( Skin::Base* skin );
  
  				void RefreshSize();
  
  				void SetFont( Gwen::Font* pFont );
  
  				const TextObject& GetText() const { return m_String; }
  
  				Gwen::Rect GetCharacterPosition( int iChar );
  				int GetClosestCharacter( Gwen::Point p );
  
  				int Length() const { return (int)m_String.GetUnicode().size(); }
  
  				virtual void SetTextColor( const Gwen::Color& col ){ m_Color = col; }
  				virtual void SetTextColorOverride( const Gwen::Color& col ){ m_ColorOverride = col; }
  
  				virtual void OnScaleChanged();
  
  				inline const Gwen::Color &TextColor() const { return m_Color; }
  
  				virtual void TextChanged(){ m_bTextChanged = true; }
  				virtual bool Wrap(){ return m_bWrap; }
  				virtual void SetWrap( bool b ){ if ( m_bWrap == b ) return; m_bWrap = b; m_bTextChanged = true; Invalidate(); }
  
  				virtual Text* GetLine( int i );
  				virtual int GetLineFromChar( int i );
  				virtual int GetStartCharFromLine( int i );
  				virtual int GetEndCharFromLine( int i );
  				virtual int GetCharPosOnLine( int i );
  				virtual int NumLines();
  
  			private:
  
  				virtual void RefreshSizeWrap();
  
  				Gwen::TextObject	m_String;
  				Gwen::Font*			m_Font;
  				Gwen::Color			m_Color;
  				Gwen::Color			m_ColorOverride;
  
  				bool				m_bWrap;
  				bool				m_bTextChanged;
  
  				typedef std::list<Text*> TextLines;
  				TextLines		m_Lines;
  		};
  	}
  
  }
  #endif
  