mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-03 17:33:05 +00:00
a5832d81d3
svn-id: r41785
151 lines
4.9 KiB
C++
151 lines
4.9 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* $URL$
|
|
* $Id$
|
|
*
|
|
*/
|
|
|
|
#ifndef SCI_GFX_FONT_H
|
|
#define SCI_GFX_FONT_H
|
|
|
|
#include "common/scummsys.h"
|
|
|
|
|
|
namespace Sci {
|
|
/** @name Font operations and stuctures */
|
|
/** @{ */
|
|
|
|
struct TextFragment {
|
|
const char *offset;
|
|
int length;
|
|
|
|
TextFragment() : offset(0), length(0) {}
|
|
TextFragment(const char *o) : offset(o), length(0) {}
|
|
};
|
|
|
|
/**
|
|
* Bitmap font information.
|
|
*/
|
|
struct gfx_bitmap_font_t {
|
|
int ID; /**< Unique resource ID */
|
|
int chars_nr; /**< Numer of available characters */
|
|
int *widths; /**< chars_nr character widths, in pixels */
|
|
int row_size; /**
|
|
* Byte size of each pixel row. For unscaled fonts,
|
|
* this is always 1, 2, or 4. Otherwise, it's a
|
|
* multiple of 4.
|
|
*/
|
|
int line_height; /**
|
|
* Height of each text line (usually identical to
|
|
* height)
|
|
*/
|
|
int height; /**< Height for all characters, in pixel rows */
|
|
int char_size; /**
|
|
* Amount of memory occupied by one character
|
|
* in data
|
|
*/
|
|
byte *data; /**
|
|
* Font data, consisting of 'chars_nr' entries
|
|
* of 'height' rows of 'row_size' bytes. For each
|
|
* character ch, its first byte (the topmost row)
|
|
* is located at (data + (charsize * ch)), and its
|
|
* pixel width is widths[ch], provided that
|
|
* (ch < chars_nr).
|
|
*/
|
|
};
|
|
|
|
/**
|
|
* Font handling flags.
|
|
*
|
|
* SCI0, SCI01 and SCI1 all use the same font format.
|
|
*/
|
|
enum fontFlags {
|
|
kFontCountWhitespace = 1 << 0, //!< In SQ3, whitespace is included in text size
|
|
kFontNoNewlines = 1 << 1, //!< Don't treat newline characters
|
|
kFontIgnoreLF = 1 << 2 //!< Interpret CR LF sequences as a single newline, rather than two
|
|
};
|
|
|
|
/**
|
|
* Generates a bitmap font data structure from a resource.
|
|
*
|
|
* @param[in] id Resource ID of the resulting font
|
|
* @param[in] resource Pointer to the resource data
|
|
* @param[in] size Size of the resource block
|
|
* @return The resulting font structure, or NULL on error
|
|
*/
|
|
gfx_bitmap_font_t *gfxr_read_font(int id, byte *resource, int size);
|
|
|
|
/**
|
|
* Frees a previously allocated font structure.
|
|
*
|
|
* @param font The font to free
|
|
*/
|
|
void gfxr_free_font(gfx_bitmap_font_t *font);
|
|
|
|
/**
|
|
* Calculates the size that would be occupied by drawing a specified
|
|
* text.
|
|
*
|
|
* This function assumes 320x200 mode.
|
|
*
|
|
* @param[in] font The font to calculate with
|
|
* @param[in] max_width Maximum pixel width allowed for the output
|
|
* @param[in] text The text to calculate for
|
|
* @param[in] flags Any text formatting flags
|
|
* @param[out] fragments A newly allocated array of text_fragments,
|
|
* containing the start and size of each string
|
|
* segment.
|
|
* @param[out] width The resulting width
|
|
* @param[out] height The resulting height
|
|
* @param[out] line_height Pixel height of a single line of text
|
|
* @param[out] last_offset Pixel offset after the last drawn line
|
|
* @return true if successful, false otherwise
|
|
*/
|
|
bool gfxr_font_calculate_size(Common::Array<TextFragment> &fragments,
|
|
gfx_bitmap_font_t *font, int max_width, const char *text,
|
|
int *width, int *height, int *line_height, int *last_offset, int flags);
|
|
|
|
/**
|
|
* Draws text in a specific font to a pixmap.
|
|
*
|
|
* The results are written to the pixmap's index buffer. Contents of the
|
|
* foreground and background fields are copied into a newly allocated font
|
|
* structure, so that the pixmap may be translated directly. If any of the
|
|
* colors is null, it will be assumed to be transparent.
|
|
* In color index mode, the specified colors have to be preallocated.
|
|
*
|
|
* @param[in] font The font to use for drawing
|
|
* @param[in] text The start of the text to draw
|
|
* @param[in] characters The number of characters to draw
|
|
* @param[in] fg0 The first foreground color
|
|
* @param[in] fg1 The second foreground color
|
|
* @param[in] bg The background color
|
|
* @return The result pixmap, or NULL on error
|
|
*/
|
|
gfx_pixmap_t *gfxr_draw_font(gfx_bitmap_font_t *font, const char *text,
|
|
int characters, PaletteEntry *fg0, PaletteEntry *fg1,
|
|
PaletteEntry *bg);
|
|
/** @} */
|
|
|
|
} // End of namespace Sci
|
|
|
|
#endif // SCI_GFX_FONT_H
|