/*
* 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
#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();
void PositionString(ObjectPtr const& Font,
std::string const& str,
PageBBox const&,
StringBBox&,
TextAlignment align = eAlignTextCenter,
int NumCharacter = 0);
int RenderColorText(ObjectPtr const& Font,
int x, int y,
std::string const& Str,
Color const& color,
bool WriteAlphaChannel,
int NumCharacter);
int RenderColorTextLineStatic(ObjectPtr const& Font,
PageBBox const& pageSize,
std::string const& Str,
Color const& color,
bool WriteAlphaChannel,
TextAlignment alignment);
int RenderColorTextLineEdit(ObjectPtr const& Font,
PageBBox const& pageSize,
std::string const& Str,
Color const& TextColor,
bool WriteAlphaChannel,
Color const& SelectedTextColor,
Color const& SelectedTextBackgroundColor,
Color const& TextBlinkColor,
Color const& CursorColor,
bool ShowCursor,
unsigned int CursorPosition,
int offset = 0,
int selection_start = 0,
int selection_end = 0);
private:
int RenderText(ObjectPtr const& Font,
int x, int y,
std::string const& str,
Color const& color,
bool WriteAlphaChannel,
int StartCharacter = 0,
int NumCharacters = 0);
// TODO: delete this
int RenderTextToBuffer(float *VertexBuffer, int VBSize,
ObjectPtr const& Font,
Rect const& geo,
std::string const& str,
Color const& color,
TextAlignment alignment = eAlignTextCenter,
int NumCharacter = 0);
private:
GraphicsEngine& _graphics_engine;
ObjectPtr _pixel_shader_prog;
ObjectPtr _vertex_shader_prog;
ObjectPtr _shader_prog;
#ifndef NUX_OPENGLES_20
ObjectPtr _asm_shader_prog;
ObjectPtr _asm_font_texture_rect_prog;
#endif
};
}
#endif //FONTRENDERER_H