historical/toontown-classic.git/panda/include/eggMakeFont.h
2024-01-16 11:20:27 -06:00

100 lines
2.4 KiB
C++

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file eggMakeFont.h
* @author drose
* @date 2001-02-16
*/
#ifndef EGGMAKEFONT_H
#define EGGMAKEFONT_H
#include "pandatoolbase.h"
#include "rangeDescription.h"
#include "eggWriter.h"
#include "eggTexture.h"
#include "pmap.h"
#include "pvector.h"
#include "vector_string.h"
class PNMTextMaker;
class PNMTextGlyph;
class EggVertexPool;
class EggGroup;
class TextureImage;
/**
* This program uses FreeType to generate an egg file and a series of texture
* images from a font file input, such as a TTF file. The resulting egg file
* can be loaded in Panda as a StaticTextFont object for rendering text, even
* if FreeType is not compiled into the executing Panda.
*/
class EggMakeFont : public EggWriter {
public:
EggMakeFont();
protected:
virtual bool handle_args(Args &args);
public:
void run();
private:
static bool dispatch_range(const std::string &, const std::string &arg, void *var);
EggVertex *make_vertex(const LPoint2d &xy);
void add_character(int code);
void make_geom(PNMTextGlyph *glyph, int character);
EggTexture *get_tref(PNMTextGlyph *glyph, int character);
EggTexture *make_tref(PNMTextGlyph *glyph, int character);
void add_extra_glyphs(const Filename &extra_filename);
void r_add_extra_glyphs(EggGroupNode *egg_group);
static bool is_numeric(const std::string &str);
private:
LColor _fg, _bg, _interior;
bool _got_interior;
RangeDescription _range;
vector_string _extra_filenames;
double _pixels_per_unit;
double _point_size;
double _poly_margin;
int _tex_margin;
double _render_margin;
bool _got_scale_factor;
double _scale_factor;
bool _no_reduce;
bool _no_native_aa;
bool _no_palettize;
int _palette_size[2];
bool _generate_distance_field;
double _palettize_scale_factor;
Filename _input_font_filename;
int _face_index;
std::string _output_glyph_pattern;
std::string _output_palette_pattern;
PNMTextMaker *_text_maker;
EggTexture::Format _format;
int _num_channels;
EggVertexPool *_vpool;
EggGroup *_group;
typedef pmap<PNMTextGlyph *, EggTexture *> TRefs;
TRefs _trefs;
typedef pvector<TextureImage *> Textures;
Textures _textures;
};
#endif