📄 font.h
字号:
/****************************************************************************************/
/* FONT.H */
/* */
/* Author: Thom Robertson */
/* Description: Bitmapped font support interface */
/* This implementation supports any TrueType fonts provided by Windows */
/* */
/* The contents of this file are subject to the Genesis3D Public License */
/* Version 1.01 (the "License"); you may not use this file except in */
/* compliance with the License. You may obtain a copy of the License at */
/* http://www.genesis3d.com */
/* */
/* Software distributed under the License is distributed on an "AS IS" */
/* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See */
/* the License for the specific language governing rights and limitations */
/* under the License. */
/* */
/* The Original Code is Genesis3D, released March 25, 1999. */
/* Genesis3D Version 1.1 released November 15, 1999 */
/* Copyright (C) 1999 WildTangent, Inc. All Rights Reserved */
/* */
/****************************************************************************************/
#ifndef GE_FONT_H
#define GE_FONT_H
// includes
#include "genesis.h"
#include "basetype.h"
#include "bitmap.h"
// **************************
// to use this API:
// 2. geFont_CreateFont().
// 3. (Optionally) geFont_AddCharacters().
// 3A. Otherwise, IF you intend to use geFont_DrawText(), call geFont_AddBitmapBuffer().
// 4. Between geEngine_BeginFrame() and geEngine_EndFrame(), and after geEngine_RenderWorld(),
// geFont_DrawText(). You may call geFont_DrawTextToBitmap() anytime, though.
// 5. When finished, geFont_Destroy().
//***************************************************************************************
// these are bit flags for _DrawText(). Currently only _WORDWRAP is implemented, and without
// it, the function will still wrap, just not on word boundaries.
// Note that these will fail for non ascii fonts.
#define GE_FONT_WRAP 0x00000001 // wrap to fit inside the drawing rect
#define GE_FONT_WORDWRAP 0x00000002 // wrap on word boundaries
#define GE_FONT_JUST_RETURN_FIT 0x00000004 // returns number of characters that fit in drawing rectangle, WITHOUT drawing anything.
#define GE_FONT_JUSTIFY_RIGHT 0x00000008
#define GE_FONT_JUSTIFY_CENTER 0x00000010
#ifdef __cplusplus
extern "C" {
#endif
// opaque structure headers.
typedef struct geFont geFont; // an instance of a font
//***************************************************************************************
GENESISAPI geFont *GENESISCC geFont_Create(const geEngine *Engine, const char *fontNameString,
const int fontSize,
const int fontWeight , const geBoolean antialiased) ;
// Creates a font, and returns a pointer to it.
// Pass in the string name of the TrueType font (case sensitive), and the height in pixels.
// ARGUMENTS:
// fontNameString - char pointer to a string containing the case sensitive name of the font.
// fontSize - the pixel height of the requested font.
// RETURNS:
// success: pointer to the newly created font.
// failure: NULL.
// NOTE: the new font set has NO actual characters in it at first. You must add characters
// to it with the _AddCharacters() function before you can use the font.
// NOTE: all fonts start out with a grayscale palette, with the range 0 to 128.
//***************************************************************************************
GENESISAPI void GENESISCC geFont_CreateRef(geFont *font);
//***************************************************************************************
GENESISAPI void GENESISCC geFont_Destroy(geFont **font);
// destroys a font.
// ARGUMENTS:
// font - pointer to the font to be destroyed.
// RETURNS:
// nothing.
//***************************************************************************************
GENESISAPI geBoolean GENESISCC geFont_AddCharacters(geFont *font,
unsigned char leastIndex,
unsigned char mostIndex
);
// Adds a set of characters to the font defined by the ascii range passed in
// (leastIndex and mostIndex, inclusive).
// ARGUMENTS:
// font - pointer to the font to add characters to.
// e - pointer to a valid geEngine.
// leastIndex and mostIndex - the ASCII range of characters to add.
// cellBuffer - an allocated hunk of ram to temproarily store the character image
// bufferSize - length of the above buffer
// RETURNS:
// success: GE_TRUE.
// failure: GE_FALSE.
// NOTES:
// This is the function that actually uses the
// Win32 GetGlyphOutline() function to draw the character onto a geBitmap, which can be
// blitted to the screen.
//*******************************************************************************
GENESISAPI void GENESISCC geFont_DestroyBitmapBuffer( geFont *font );
// destroys any valid "scratch-pad" buffer attached to the geFont.
// ARGUMENTS:
// font - pointer to the geFont.
//
// NOTES:
// you'll rarely need to call this function; it's called by geFont_Destroy() anyway.
// Calling this function with a geFont that has no initialized buffer doesn't
// hurt anything.
//*******************************************************************************
GENESISAPI geBoolean GENESISCC geFont_AddBitmapBuffer(
geFont *font, const uint32 width, const uint32 height);
// Adds a geBitmap to the geFont, to be used as a temporary "scratch-pad". This is
// required for using geFont_DrawText() when no characters have been added.
// ARGUMENTS:
// font - pointer to the geFont to add a buffer to.
// width and height - the size of the buffer to create. Make sure this size is >=
// the biggest rectagle of text you'll want to write to the screen using this geFont
// and DrawText().
// RETURNS:
// success: GE_TRUE.
// failure: GE_FALSE.
// NOTES:
// You don't need to call this function IF you _AddCharacters() to this geFont.
// You call this function for each geFont you need to use. geFont's don't share buffers.
// if you call this function on a geFont that already has a valid buffer, the buffer is
// destroyed, and replaced by the new one.
//***************************************************************************************
GENESISAPI geBoolean GENESISCC geFont_DrawText(geFont *font, const char *textString,
const GE_Rect *Rect, const GE_RGBA *Color,
uint32 flags, const GE_Rect *clipRect);
// This is the function you put between geEngine_BeginFrame() and _EndFrame(), the function
// that draws text to the screen.
// ARGUMENTS:
// font - pointer to the font to draw with. IF the font has NO characters in it
// (added by geFont_AddCharacters() ) then a different, more windows-intensive way is
// used to draw out the characters.
// textString - pointer to the text string to output to the screen.
// Rect - screen rectangle to place the text within.
// Color - RGB color the text should be.
// flags - a bitfield of GE_FONT_ values.
// clipRect - pointer to a screen rectangle to clip the text to. MAY BE NULL, in which
// case the text is only clipped by the boundaries of the screen.
// RETURNS:
// success: GE_TRUE.
// failure: GE_FALSE.
// NOTES:
// Assuming you've added characters to the font, characters which have NOT been added
// WILL cause an assert if you try to draw them.
// Only GE_FONTSET_WORDWRAP is meaningfull right now. Using any other flags will cause
// an assert.
// As stated above, you can use an entirely different way of creating a string, by
// making a font with no characters in it. This
// jumps through Windows DIB hoops, and draws the text in a non-anti-aliased, but
// (hopefully) more unicode-tolerant way (DrawText() ).
//***************************************************************************************
GENESISAPI geBoolean GENESISCC geFont_DrawTextToBitmap(geFont *font, const char *textString,
const GE_Rect *Rect, const GE_RGBA *Color,
uint32 flags, const GE_Rect *clipRect,
geBitmap *targetBitmap);
// This is the function you put between geEngine_BeginFrame() and _EndFrame(), the function
// that draws text to the screen.
// ARGUMENTS:
// font - pointer to the font to draw with. IF the font has NO characters in it
// (added by geFont_AddCharacters() ) then a different, more windows-intensive way is
// used to draw out the characters.
// textString - pointer to the text string to output to the screen.
// Rect - screen rectangle to place the text within.
// Color - RGB color the text should be.
// flags - a bitfield of GE_FONT_ values.
// clipRect - pointer to a screen rectangle to clip the text to. MAY BE NULL, in which
// case the text is only clipped by the boundaries of the screen.
// targetBitmap - pointer to a target bitmap to draw the text into. MAY NOT BE NULL,
// and MUST BE GE_PIXELFORMAT_8BIT.
// RETURNS:
// success: GE_TRUE.
// failure: GE_FALSE.
// NOTES:
// Assuming you've added characters to the font, characters which have NOT been added
// WILL cause an assert if you try to draw them.
// Only GE_FONTSET_WORDWRAP is meaningfull right now. Using any other flags will cause
// an assert.
// As stated above, you can use an entirely different way of creating a string, by
// making a font with no characters in it. This
// jumps through Windows DIB hoops, and draws the text in a non-anti-aliased, but
// (hopefully) more unicode-tolerant way (DrawText() ).
// The Color argument is will be used to modify the existing palette of the targetBitmap
// passed in. Therefore, you won't be able to _DrawTextToBitmap() a red piece of text,
// then a green piece, then a blue piece. You'll end up with three lines of blue text.
//***************************************************************************************
GENESISAPI int32 GENESISCC geFont_GetStringPixelWidth (geFont *font, const char *textString);
GENESISAPI int32 GENESISCC geFont_GetStringPixelHeight(geFont *font, const char *textString);
// These two functions return the pixel width and height of the string passed in.
// ARGUMENTS:
// font - pointer to the font to draw with.
// textString - pointer to the text string to output to the screen.
// RETURNS:
// success: a positive value in pixels. IF the text passed in contains characters
// which haven't been added to the font yet, BUT other characters HAVE
// been added, the function asserts.
// failure: -1.
// NOTES:
// these two functions assume no text wrapping!
//***************************************************************************************
GENESISAPI geBitmap* GENESISCC geFont_GetBuffer(geFont *font);
// This function returns a pointer to the drawing buffer contained by the font.
// ARGUMENTS:
// font - pointer to the font.
// RETURNS:
// a valid pointer to a geBitmap, OR NULL, signifying that the buffer wasn't initialized.
//***************************************************************************************
GENESISAPI geBoolean GENESISCC geFont_GetCharMap(geFont *font, uint8 character, GE_Rect *Rect,
geBitmap **targetBitmap, int32 *fullWidth, int32 *fullHeight,
int32 *offsetX, int32 *offsetY);
//***************************************************************************************
GENESISAPI void GENESISCC geFont_EnableAntialiasing(geFont *font, const geBoolean anti);
//***************************************************************************************
GENESISAPI geBoolean GENESISCC geFont_IsAntialiased(geFont *font);
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -