/*
* Copyright 2010 Inalogic® Inc.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License, as
* published by the Free Software Foundation; either version 2.1 or 3.0
* of the License.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranties of
* MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the applicable version of the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of both the GNU Lesser General Public
* License along with this program. If not, see
*
* Authored by: Jay Taoko
*
*/
#ifndef FONTRENDERER_H
#define FONTRENDERER_H
#include "GLResource.h"
class IOpenGLPixelShader;
namespace nux
{
class GraphicsEngine;
class TextureRectangle;
class ICgPixelShader;
class ICgVertexShader;
class TemplateQuadBuffer;
class FontTexture;
class FontRenderer
{
public:
FontRenderer (GraphicsEngine &OpenGLEngine);
~FontRenderer();
int DrawColorString (ObjectPtr Font, int x, int y, const NString &str, const Color &color, bool WriteAlphaChannel, int NumCharacter = 0, int SkipFirstNCharacters = 0);
void PositionString (ObjectPtr Font, const NString &str, const PageBBox &, StringBBox &, TextAlignment align = eAlignTextCenter, int NumCharacter = 0);
int RenderColorText (ObjectPtr Font, int x, int y, const NString &Str, const Color &color, bool WriteAlphaChannel, int NumCharacter);
int RenderColorTextLineStatic (ObjectPtr Font, const PageBBox &pageSize, const NString &Str, const Color &color,
bool WriteAlphaChannel, TextAlignment alignment);
int RenderColorTextLineEdit (ObjectPtr Font, const PageBBox &pageSize, const NString &Str,
const Color &TextColor,
bool WriteAlphaChannel,
const Color &SelectedTextColor,
const Color &SelectedTextBackgroundColor,
const Color &TextBlinkColor,
const Color &CursorColor,
bool ShowCursor, unsigned int CursorPosition,
int offset = 0, int selection_start = 0, int selection_end = 0);
int RenderText (ObjectPtr Font, int x, int y, const NString &str, const Color &color, bool WriteAlphaChannel, int StartCharacter = 0, int NumCharacters = 0);
int RenderTextToBuffer (
float *VertexBuffer, int VBSize,
ObjectPtr Font, Rect geo, const NString &str, const Color &color, TextAlignment alignment = eAlignTextCenter, int NumCharacter = 0);
private:
GraphicsEngine& _graphics_engine;
ObjectPtr _pixel_shader_prog;
ObjectPtr _vertex_shader_prog;
ObjectPtr _shader_prog;
//ObjectPtr m_AsmPixelShaderProg;
//ObjectPtr m_AsmVertexShaderProg;
ObjectPtr _asm_shader_prog;
ObjectPtr _asm_font_texture_rect_prog;
};
}
#endif //FONTRENDERER_H