Files
wagic/JGE/include/JLBFont.h
2015-08-23 21:23:55 +02:00

187 lines
5.7 KiB
C++

//-------------------------------------------------------------------------------------
//
// JGE++ is a hardware accelerated 2D game SDK for PSP/Windows.
//
// Licensed under the BSD license, see LICENSE in JGE root for details.
//
// Copyright (c) 2007 James Hui (a.k.a. Dr.Watson) <jhkhui@gmail.com>
//
//-------------------------------------------------------------------------------------
#ifndef JLBF_H
#define JLBF_H
#define PRINTF_BUFFER_SIZE 256
#define MAX_CHAR 256
#include "JRenderer.h"
#include <string>
//////////////////////////////////////////////////////////////////////////
/// Bitmap font class for LMNOpc's Bitmap Font Builder:
/// http://www.lmnopc.com/bitmapfontbuilder/
///
/// Two files are used for each font:
/// 1: xxx.png, font bitmap.
/// 2: xxx.dat, widths for each character
/// Each font contains 2 sets of characters ASCII code (32-159).
///
//////////////////////////////////////////////////////////////////////////
class JLBFont
{
public:
//////////////////////////////////////////////////////////////////////////
/// Constructor.
///
/// @param fontname - Name of the font WITHOUT extensions.
/// @param lineheight - Font height.
/// @param useVideoRAM - Indicate to use video RAM to store the font image or not (PSP only).
///
//////////////////////////////////////////////////////////////////////////
JLBFont(const char *fontname, int lineheight, bool useVideoRAM=false);
~JLBFont();
//////////////////////////////////////////////////////////////////////////
/// Rendering text to screen.
///
/// @param string - text for rendering.
/// @param x - X position of text.
/// @param y - Y position of text.
/// @align - Text aligment.
///
//////////////////////////////////////////////////////////////////////////
void DrawString(const char *string, float x, float y, int align=JGETEXT_LEFT, float leftOffset = 0, float width = 0);
void DrawString(std::string s, float x, float y, int align=JGETEXT_LEFT, float leftOffset = 0, float width = 0);
//////////////////////////////////////////////////////////////////////////
/// Rendering text to screen with syntax similar to printf of C/C++.
///
/// @param x - X position of text.
/// @param y - Y position of text.
/// @param format - String formatting.
///
//////////////////////////////////////////////////////////////////////////
void printf(float x, float y, const char *format, ...);
//////////////////////////////////////////////////////////////////////////
/// Set font color.
///
/// @param color - color of font.
///
//////////////////////////////////////////////////////////////////////////
void SetColor(PIXEL_TYPE color);
//////////////////////////////////////////////////////////////////////////
/// Set scale for rendering.
///
/// @param scale - Scale for rendering characters.
///
//////////////////////////////////////////////////////////////////////////
void SetScale(float scale);
//////////////////////////////////////////////////////////////////////////
/// Set angle for rendering.
///
/// @param rot - Rotation angle in radian.
///
//////////////////////////////////////////////////////////////////////////
void SetRotation(float rot);
//////////////////////////////////////////////////////////////////////////
/// Set font tracking.
///
/// @param tracking - Font tracking.
///
//////////////////////////////////////////////////////////////////////////
void SetTracking(float tracking);
//////////////////////////////////////////////////////////////////////////
/// Get font color.
///
/// @return Font color.
///
//////////////////////////////////////////////////////////////////////////
PIXEL_TYPE GetColor() const;
//////////////////////////////////////////////////////////////////////////
/// Get rendering scale.
///
/// @return Rendering scale.
///
//////////////////////////////////////////////////////////////////////////
float GetScale() const;
//////////////////////////////////////////////////////////////////////////
/// Get rendering angle.
///
/// @return Rendering angle.
///
//////////////////////////////////////////////////////////////////////////
float GetRotation() const;
//////////////////////////////////////////////////////////////////////////
/// Get font tracking.
///
/// @return Font tracking.
///
//////////////////////////////////////////////////////////////////////////
float GetTracking() const;
//////////////////////////////////////////////////////////////////////////
/// Get height of font.
///
/// @return Height of font.
///
//////////////////////////////////////////////////////////////////////////
float GetHeight() const;
//////////////////////////////////////////////////////////////////////////
/// Get width of rendering string on screen.
///
/// @param string - NULL terminated string.
///
/// @return - Width in pixels
///
//////////////////////////////////////////////////////////////////////////
float GetStringWidth(const char *string) const;
//////////////////////////////////////////////////////////////////////////
/// There are usually 2 sets of characters in the font image. The first set
/// is from index 0-127 and the second from 128-255. You should use this
/// function to select which set of characters you want to use. The index
/// base should be either 0 or 128.
///
/// @param base - Base for the character set to use.
///
//////////////////////////////////////////////////////////////////////////
void SetBase(int base);
private:
static JRenderer* mRenderer;
JTexture* mTexture;
JQuad* mQuad;
float mXPos[MAX_CHAR];
float mYPos[MAX_CHAR];
float mCharWidth[MAX_CHAR];
float mHeight;
float mScale;
float mTextureScale;
float mRotation;
float mTracking;
float mSpacing;
PIXEL_TYPE mColor;
int mBase;
};
#endif