first commit
This commit is contained in:
122
include/framework/font/font_renderer.h
Normal file
122
include/framework/font/font_renderer.h
Normal file
@ -0,0 +1,122 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#ifndef __FONTRENDERER__
|
||||
#define __FONTRENDERER__
|
||||
|
||||
|
||||
#include "font/font_extended.h"
|
||||
#include "font/font_cache.h"
|
||||
#include "math/vector.h"
|
||||
|
||||
|
||||
namespace GS {
|
||||
class Picture;
|
||||
struct SubString;
|
||||
|
||||
/// Text widget state structure.
|
||||
class TextState
|
||||
{
|
||||
int size;
|
||||
float tracking, ///< Text tracking (horizontal offset between two characters).
|
||||
leading; ///< Text heading (vertical offset between lines).
|
||||
|
||||
public:
|
||||
|
||||
enum Format
|
||||
{
|
||||
Line = 0,
|
||||
Paragraph,
|
||||
Column
|
||||
};
|
||||
|
||||
enum Alignment
|
||||
{
|
||||
Left = 0,
|
||||
Right,
|
||||
Center,
|
||||
Justify
|
||||
};
|
||||
|
||||
sFontEx font;
|
||||
Color color;
|
||||
|
||||
Format format; ///< Text format.
|
||||
Alignment alignment; ///< Text alignment.
|
||||
int column_width; ///< Text column width.
|
||||
|
||||
int GetSize() const { return font.IsValid() ? (int)(size * font->size_multiplier) : size; }
|
||||
float GetTracking() const { return font.IsValid() ? tracking + font->tracking_offset : tracking; }
|
||||
float GetLeading() const { return font.IsValid() ? leading + font->leading_offset : leading; }
|
||||
|
||||
void SetSize(int s) { size = s; }
|
||||
void SetTracking(float t) { tracking = t; }
|
||||
void SetLeading(float l) { leading = l; }
|
||||
|
||||
TextState()
|
||||
{
|
||||
size = 16;
|
||||
color = Color::Black;
|
||||
|
||||
format = Line;
|
||||
alignment = Left;
|
||||
|
||||
column_width = 80;
|
||||
tracking = 0;
|
||||
leading = 0;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
@short Font renderer.
|
||||
@author Emmanuel Julien (ejulien@nworks.fr)
|
||||
*/
|
||||
class FontRenderer
|
||||
{
|
||||
public:
|
||||
|
||||
enum CommandCode
|
||||
{
|
||||
CommandNone = 0,
|
||||
CommandColor,
|
||||
CommandFont,
|
||||
CommandSize,
|
||||
|
||||
CommandParseError
|
||||
};
|
||||
|
||||
static float default_text_tracking;
|
||||
static float default_text_heading;
|
||||
|
||||
/// Renderer command.
|
||||
struct Command
|
||||
{
|
||||
CommandCode code;
|
||||
Vector4 vector;
|
||||
sIFont font;
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
/// Check current string for a command.
|
||||
static const char *CheckCommand(const char *string, Command &command);
|
||||
/// Get the next sub-string from the current text buffer.
|
||||
static const char *FetchSubString(const char *string, SubString &sstr, TextState &state, int max_width, int max_character);
|
||||
/// Draw a substring to a picture.
|
||||
static void DrawSubString(SubString &sub_string, Picture &output, TextState &state, const iRect &out_rect, const iRect &clip_rect, int justification);
|
||||
|
||||
public:
|
||||
|
||||
/// Format a string using a text state, return the required output rectangle.
|
||||
static iRect Format(const char *text, const TextState &in_state, const iRect &out_rect);
|
||||
/// Compose a string using a text state.
|
||||
static iRect Compose(Picture &output, const char *text, const TextState &state, const iRect &out_rect, const iRect &clip_rect);
|
||||
};
|
||||
|
||||
} // GS
|
||||
|
||||
|
||||
#endif // __FONTRENDERER__
|
||||
Reference in New Issue
Block a user