// Author: Vaclav Slavik
// Created: 2001/04/29
// RCS-ID: $Id$
-// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
-// Licence: wxWindows license
+// Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com)
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "fontutil.h"
#endif
#include "wx/listimpl.cpp"
+#include "wx/sysopt.h"
#include "wx/mgl/private.h"
#include <mgraph.h>
MGL_unloadFontInstance(m_font);
}
-wxMGLFontLibrary::wxMGLFontLibrary(const wxString& filename, int type)
+wxMGLFontLibrary::wxMGLFontLibrary(const wxString& filename, int type,
+ wxMGLFontFamily *parentFamily)
{
+ m_family = parentFamily;
m_type = type;
m_fileName = filename;
m_refs = 0;
}
}
+static int gs_antialiasingThreshold = -1;
+
wxMGLFontInstance *wxMGLFontLibrary::GetFontInstance(wxFont *font,
float scale, bool aa)
{
wxString facename;
bool slant;
- bool antialiased =
- (m_fontLib->fontLibType == MGL_BITMAPFONT_LIB) ? FALSE : aa;
+ bool antialiased;
float pt = (float)font->GetPointSize() * scale;
+ 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 lets disable it AA
+ // completely for small fonts.
+ if ( pt <= gs_antialiasingThreshold )
+ antialiased = FALSE;
+ else
+ antialiased = (m_fontLib->fontLibType == MGL_BITMAPFONT_LIB) ? FALSE : aa;
+
slant = (((m_type & wxFONTFACE_ITALIC) == 0) &&
(font->GetStyle() == wxSLANT || font->GetStyle() == wxITALIC));
m_fontLibs[wxFONTFACE_REGULAR] = NULL;
else
m_fontLibs[wxFONTFACE_REGULAR] =
- new wxMGLFontLibrary(info->regularFace, wxFONTFACE_REGULAR);
+ new wxMGLFontLibrary(info->regularFace, wxFONTFACE_REGULAR, this);
if ( info->italicFace[0] == '\0' )
m_fontLibs[wxFONTFACE_ITALIC] = NULL;
else
m_fontLibs[wxFONTFACE_ITALIC] =
- new wxMGLFontLibrary(info->italicFace, wxFONTFACE_ITALIC);
+ new wxMGLFontLibrary(info->italicFace, wxFONTFACE_ITALIC, this);
if ( info->boldFace[0] == '\0' )
m_fontLibs[wxFONTFACE_BOLD] = NULL;
else
m_fontLibs[wxFONTFACE_BOLD] =
- new wxMGLFontLibrary(info->boldFace, wxFONTFACE_BOLD);
+ new wxMGLFontLibrary(info->boldFace, wxFONTFACE_BOLD, this);
if ( info->boldItalicFace[0] == '\0' )
m_fontLibs[wxFONTFACE_BOLD_ITALIC] = NULL;
else
m_fontLibs[wxFONTFACE_BOLD_ITALIC] =
- new wxMGLFontLibrary(info->boldItalicFace, wxFONTFACE_BOLD_ITALIC);
+ new wxMGLFontLibrary(info->boldItalicFace, wxFONTFACE_BOLD_ITALIC, this);
wxLogTrace("mgl_font", "new family '%s' (r=%s, i=%s, b=%s, bi=%s)\n",
info->familyName, info->regularFace, info->italicFace,
return family->GetLibrary(type);
}
-static ibool enum_callback(const font_info_t *info, void *cookie)
+static ibool MGLAPI enum_callback(const font_info_t *info, void *cookie)
{
wxFontsManager *db = (wxFontsManager*)cookie;
db->AddFamily(info);