+++ /dev/null
-/////////////////////////////////////////////////////////////////////////////
-// Name: src/mgl/fontmgr.cpp
-// Purpose: font management for wxMGL
-// Author: Vaclav Slavik
-// Created: 2006-11-18
-// RCS-ID: $Id$
-// Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com)
-// (c) 2006 REA Elektronik GmbH
-// Licence: wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-
-#ifndef WX_PRECOMP
- #include "wx/log.h"
-#endif
-
-#include "wx/private/fontmgr.h"
-#include "wx/sysopt.h"
-
-#include <mgraph.h>
-
-static int gs_antialiasingThreshold = -1;
-
-// ============================================================================
-// implementation
-// ============================================================================
-
-// ----------------------------------------------------------------------------
-// wxFontInstance
-// ----------------------------------------------------------------------------
-
-wxFontInstance::wxFontInstance(float ptSize, bool aa, font_lib_t *fontLib)
- : wxFontInstanceBase(ptSize, aa)
-{
- m_font = MGL_loadFontInstance(fontLib, ptSize, 0.0, 0.0, aa);
-
- wxASSERT_MSG( m_font, wxT("cannot create font instance") );
-}
-
-wxFontInstance::~wxFontInstance()
-{
- if ( m_font )
- MGL_unloadFontInstance(m_font);
-}
-
-// ----------------------------------------------------------------------------
-// wxFontFace
-// ----------------------------------------------------------------------------
-
-void wxFontFace::Acquire()
-{
- wxFontFaceBase::Acquire();
-
- if ( m_refCnt == 1 )
- {
- wxCHECK_RET( m_fontLib == NULL, wxT("font lib already created") );
-
- wxLogTrace("mgl_font", "opening library '%s'", m_fileName.mb_str());
- m_fontLib = MGL_openFontLib(m_fileName.fn_str());
- }
-}
-
-void wxFontFace::Release()
-{
- wxFontFaceBase::Release();
-
- if ( m_refCnt == 0 )
- {
- wxCHECK_RET( m_fontLib != NULL, wxT("font lib not created") );
-
- wxLogTrace("mgl_font", "closing library '%s'", m_fileName.mb_str());
- MGL_closeFontLib(m_fontLib);
- m_fontLib = NULL;
- }
-}
-
-wxFontInstance *wxFontFace::GetFontInstance(float ptSize, bool aa)
-{
- if ( gs_antialiasingThreshold == -1 )
- {
- gs_antialiasingThreshold = 10;
-#if wxUSE_SYSTEM_OPTIONS
- if ( wxSystemOptions::HasOption(wxT("mgl.aa-threshold")) )
- gs_antialiasingThreshold =
- wxSystemOptions::GetOptionInt(wxT("mgl.aa-threshold"));
- wxLogTrace("mgl_font", "AA threshold set to %i", gs_antialiasingThreshold);
-#endif
- }
-
- // Small characters don't look good when antialiased with the algorithm
- // that FreeType uses (mere 2x2 supersampling), so let's disable AA
- // completely for small fonts. Bitmap fonts are not antialiased either.
- if ( ptSize <= gs_antialiasingThreshold ||
- m_fontLib->fontLibType == MGL_BITMAPFONT_LIB )
- {
- aa = false;
- }
-
- return wxFontFaceBase::GetFontInstance(ptSize, aa);
-}
-
-wxFontInstance *wxFontFace::CreateFontInstance(float ptSize, bool aa)
-{
- wxASSERT_MSG( m_fontLib, wxT("font library not loaded!") );
-
- return new wxFontInstance(ptSize, aa, m_fontLib);
-}
-
-// ----------------------------------------------------------------------------
-// wxFontBundle
-// ----------------------------------------------------------------------------
-
-wxFontBundle::wxFontBundle(const font_info_t *info)
- : m_fontInfo(info)
-{
- if ( info->regularFace[0] != '\0' )
- m_faces[FaceType_Regular] = new wxFontFace(info->regularFace);
-
- if ( info->italicFace[0] != '\0' )
- m_faces[FaceType_Italic] = new wxFontFace(info->italicFace);
-
- if ( info->boldFace[0] != '\0' )
- m_faces[FaceType_Bold] = new wxFontFace(info->boldFace);
-
- if ( info->boldItalicFace[0] != '\0' )
- m_faces[FaceType_BoldItalic] = new wxFontFace(info->boldItalicFace);
-
- wxLogTrace("mgl_font", "new family '%s' (r=%s, i=%s, b=%s, bi=%s)\n",
- info->familyName, info->regularFace, info->italicFace,
- info->boldFace, info->boldItalicFace);
-}
-
-wxString wxFontBundle::GetName() const
-{
- return wxString::FromAscii(m_fontInfo->familyName);
-}
-
-bool wxFontBundle::IsFixed() const
-{
- return m_fontInfo->isFixed;
-}
-
-
-// ----------------------------------------------------------------------------
-// wxFontsManager
-// ----------------------------------------------------------------------------
-
-wxString wxFontsManager::GetDefaultFacename(wxFontFamily family) const
-{
- switch ( family )
- {
- case wxSCRIPT:
- return wxT("Script");
- case wxDECORATIVE:
- return wxT("Charter");
- case wxROMAN:
- return wxT("Times");
- case wxTELETYPE:
- case wxMODERN:
- return wxT("Courier");
- case wxSWISS:
- case wxDEFAULT:
- default:
- return wxT("Helvetica");
- }
-}
-
-static ibool MGLAPI enum_callback(const font_info_t *info, void *cookie)
-{
- wxFontsManager *db = (wxFontsManager*)cookie;
- db->AddBundle(new wxFontBundle(info));
- return TRUE;
-}
-
-void wxFontsManager::AddAllFonts()
-{
- MGL_enumerateFonts(enum_callback, (void*)this);
-}