CGII/framework/include/cgv/media/font/font.h
2018-05-17 15:50:03 +02:00

85 lines
2.5 KiB
C++

#pragma once
#include <cgv/base/base.h>
#include <vector>
#include <string>
#include "lib_begin.h"
#ifdef WIN32
#pragma warning(disable:4275)
#pragma warning(disable:4231)
#endif
namespace cgv {
namespace media {
/// namespace for font support
namespace font {
/// declaration of supported attributes of font faces
enum FontFaceAttributes
{
FFA_REGULAR = 0,
FFA_BOLD = 1,
FFA_ITALIC = 2,
FFA_BOLD_ITALIC = 3
};
/// interface class for different faces of a font, which can be constructed from a font
class CGV_API font_face : public base::base
{
protected:
/// store the actual attributes of the font face
int ffa;
public:
/// construct from attributes that are declared in the enum FontFaceAttributes
font_face(int _ffa);
/// returns "font_face"
std::string get_type_name() const;
/// return the attributes
virtual int get_attributes() const;
/// enumerate the supported sizes
virtual void enumerate_sizes(std::vector<int>& supported_sizes) const = 0;
/// return the width of a text printed in the given size, which is measured in pixels
virtual float measure_text_width(const std::string& text, float font_size) const = 0;
};
/// always use this ref counted pointer to store font faces
typedef data::ref_ptr<const font_face> font_face_ptr;
/// interface class for fonts. Construct font with the find_font function
class CGV_API font : public base::base
{
public:
/// returns "font"
std::string get_type_name() const;
/// return the name of the font
virtual const char* get_name() const = 0;
/// check whether the given font includes a face that include the possibly or-ed together selection of font face attributes
virtual bool supports_font_face(int ffa) const = 0;
/// return a pointer to a font face
virtual font_face_ptr get_font_face(int ffa) const = 0;
/// enumerate the supported font sizes
virtual void enumerate_sizes(std::vector<int>& supported_sizes) const = 0;
};
/// always use this ref counted pointer to store fonts
typedef data::ref_ptr<const font> font_ptr;
/// find an installed font by name
extern CGV_API font_ptr find_font(const std::string& font_name);
/// enumerate the names of all installed fonts
extern CGV_API void enumerate_font_names(std::vector<const char*>& font_names);
#if _MSC_VER >= 1400
CGV_TEMPLATE template class CGV_API data::ref_ptr<font>;
CGV_TEMPLATE template class CGV_API data::ref_ptr<font_face>;
#endif
}
}
}
#include <cgv/config/lib_end.h>