wxWidgets/include/wx/mgl/fontutil.h
2003-03-17 10:34:04 +00:00

125 lines
3.1 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: wx/mgl/fontutil.h
// Purpose: font-related helper functions for MGL
// Author: Vaclav Slavik
// Created: 2001/05/01
// RCS-ID: $Id$
// Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com)
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_MGL_FONTUTIL_H_
#define _WX_MGL_FONTUTIL_H_
#include "wx/list.h"
struct font_info_t;
struct font_lib_t;
struct font_t;
class wxMGLFontInstance;
class wxMGLFontInstanceList;
class wxMGLFontLibrary;
class wxMGLFontFamily;
enum
{
wxFONTFACE_REGULAR = 0,
wxFONTFACE_ITALIC = 1,
wxFONTFACE_BOLD = 2, // = (regular | bold)
wxFONTFACE_BOLD_ITALIC = 3, // = (italic | bold)
wxFONTFACE_MAX
};
// structure representing particular loaded font instance:
class wxMGLFontInstance
{
public:
wxMGLFontInstance(wxMGLFontLibrary *fontLib, float pt, bool slant, bool aa);
~wxMGLFontInstance();
struct font_t *GetMGLfont_t() const { return m_font; }
float GetPt() const { return m_pt; }
bool GetSlant() const { return m_slant; }
bool GetAA() const { return m_aa; }
private:
wxMGLFontLibrary *m_fontLib;
font_t *m_font;
float m_pt;
bool m_slant;
bool m_aa;
};
// structure representing loaded font library:
class wxMGLFontLibrary
{
public:
wxMGLFontLibrary(const wxString& filename, int type, wxMGLFontFamily *parentFamily);
~wxMGLFontLibrary();
wxMGLFontInstance *GetFontInstance(wxFont *font, float scale, bool aa);
wxMGLFontFamily *GetFamily() const { return m_family; }
void IncRef();
void DecRef();
struct font_lib_t *GetMGLfont_lib_t() const { return m_fontLib; }
private:
font_lib_t *m_fontLib;
int m_type;
wxString m_fileName;
size_t m_refs;
wxMGLFontInstanceList *m_instances;
wxMGLFontFamily *m_family;
};
// structure representing native MGL font family
class wxMGLFontFamily : public wxObject
{
public:
wxMGLFontFamily(const font_info_t *info);
virtual ~wxMGLFontFamily();
wxString GetName() const { return m_name; }
const font_info_t *GetInfo() const { return m_fontInfo; }
bool HasFace(int type) const;
wxMGLFontLibrary *GetLibrary(int type) const
{ return m_fontLibs[type]; }
private:
wxString m_name;
const font_info_t *m_fontInfo;
wxMGLFontLibrary *m_fontLibs[wxFONTFACE_MAX];
};
WX_DECLARE_LIST(wxMGLFontFamily, wxMGLFontFamilyList);
class wxFontsManager
{
public:
wxFontsManager();
~wxFontsManager();
void AddFamily(const font_info_t *info);
// return info about font with given name:
wxMGLFontFamily *GetFamily(const wxString& name) const;
// return list of all families
wxMGLFontFamilyList *GetFamilyList() { return m_list; }
wxMGLFontLibrary *GetFontLibrary(wxFont *font);
private:
wxHashTable *m_hash;
wxMGLFontFamilyList *m_list;
};
extern wxFontsManager *wxTheFontsManager;
#endif // _WX_MGL_FONTUTIL_H_