1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
/*
** ClanLib SDK
** Copyright (c) 1997-2005 The ClanLib Team
**
** This software is provided 'as-is', without any express or implied
** warranty. In no event will the authors be held liable for any damages
** arising from the use of this software.
**
** Permission is granted to anyone to use this software for any purpose,
** including commercial applications, and to alter it and redistribute it
** freely, subject to the following restrictions:
**
** 1. The origin of this software must not be misrepresented; you must not
** claim that you wrote the original software. If you use this software
** in a product, an acknowledgment in the product documentation would be
** appreciated but is not required.
** 2. Altered source versions must be plainly marked as such, and must not be
** misrepresented as being the original software.
** 3. This notice may not be removed or altered from any source distribution.
**
** Note: Some of the libraries ClanLib may link to may have additional
** requirements or restrictions.
**
** File Author(s):
**
** Magnus Norddahl
** (if your name is missing here, please add it)
*/
#ifndef header_font_target_sprite
#define header_font_target_sprite
#ifdef CL_API_DLL
#ifdef CL_DISPLAY_EXPORT
#define CL_API_DISPLAY __declspec(dllexport)
#else
#define CL_API_DISPLAY __declspec(dllimport)
#endif
#else
#define CL_API_DISPLAY
#endif
#if _MSC_VER > 1000
#pragma once
#endif
#include "font_target.h"
#include "API/Display/sprite.h"
#include <string>
#include <vector>
class CL_API_DISPLAY CL_Font_Target_Sprite : public CL_Font_Target
{
//! Construction:
public:
CL_Font_Target_Sprite(
CL_Font_Generic *attributes,
const CL_Sprite &letters,
const std::string &letter_chars,
int space_width = -1,
bool monospace = false);
~CL_Font_Target_Sprite();
//! Attributes:
public:
//: If 0, variable width font. If another number, all characters are this width
int get_fixed_width() const;
//: Gets the width of a single glyph directly from the map, including scaling and offsets
int get_width(unsigned int chr) const;
//: Gets the height of the font, including scaling and offsets
int get_height() const;
//: Returns true if the given character has any associated glyph
bool is_glyph(unsigned int chr) const;
void get_scale(float& x, float& y) const;
float get_alpha() const;
void get_color(float& r, float& g, float& b, float& a) const;
void get_blend_func(CL_BlendFunc &src, CL_BlendFunc &dest) const;
void get_rot_hotspot(CL_Origin &origin, int &x, int &y) const;
//! Operations:
public:
void set_scale(float x, float y);
void set_alpha(float a);
void set_color(float r, float g, float b, float a);
void set_blend_func(CL_BlendFunc src, CL_BlendFunc dest);
void set_rot_hotspot(CL_Origin origin, int x, int y);
//: Draws a glyph at a given location.
//param x, y: The upper-left coordinates of where to draw the glyph.
//param chr: The character to draw the glyph of.
//param ang: The amount to rotate the glyph by. The hotspot is set with CL_Font::set_glyph_rot_hotspot().
//param gc: Graphic context to render to.
//- <p> If there is no such glyph for that character, nothing is drawn. </p>
void draw_glyph(int x, int y, unsigned int chr, float ang, CL_GraphicContext *gc) const;
//: Draws a single character to a given spot.
//param x, y: The upper-left coordinates of where to draw the character.
//param chr: The character to draw the glyph of.
//param ang: The amount to rotate the glyph by. The hotspot is set with CL_Font::set_glyph_rot_hotspot().
//param gc: Graphic context to render to.
//- <p> If there is no glyph for the given character, then nothing is drawn. </p>
void draw_character(int x, int y, unsigned int chr, float ang, CL_GraphicContext *gc) const;
inline CL_Sprite& get_glyphs() { return glyphs; }
//! Implementation:
private:
//: Character to glyph map.
std::vector<unsigned int> char_to_glyph_map;
//: Glyphs of the actual characters.
mutable CL_Sprite glyphs;
//: Height of font (i.e. height of the tallest character, before scaling/offsets)
int height;
//: If 0, variable width font. If another number, all characters are this width
int fixed_width;
//: Distance to go at any unrecognized character, before scaling/offsets
int spacelen;
};
#endif
|