m_Modules.DeleteObject(module);
}
-void wxHtmlWinParser::SetFonts(const wxString& normal_face, const wxString& fixed_face,
+// build all HTML font sizes (1..7) from the given base size
+static void wxBuildFontSizes(int *sizes, int size)
+{
+ // using a fixed factor (1.2, from CSS2) is a bad idea as explained at
+ // http://www.w3.org/TR/CSS21/fonts.html#font-size-props but this is by far
+ // simplest thing to do so still do it like this for now
+ sizes[0] = int(size * 0.75); // exception to 1.2 rule, otherwise too small
+ sizes[1] = int(size * 0.83);
+ sizes[2] = size;
+ sizes[3] = int(size * 1.2);
+ sizes[4] = int(size * 1.44);
+ sizes[5] = int(size * 1.73);
+ sizes[6] = int(size * 2);
+}
+
+static int wxGetDefaultHTMLFontSize()
+{
+ // base the default font size on the size of the default system font but
+ // also ensure that we have a font of reasonable size, otherwise small HTML
+ // fonts are unreadable
+ int size = wxNORMAL_FONT->GetPointSize();
+ if ( size < 10 )
+ size = 10;
+ return size;
+}
+
+void wxHtmlWinParser::SetFonts(const wxString& normal_face,
+ const wxString& fixed_face,
const int *sizes)
{
- static int default_sizes[7] =
- {
- wxHTML_FONT_SIZE_1,
- wxHTML_FONT_SIZE_2,
- wxHTML_FONT_SIZE_3,
- wxHTML_FONT_SIZE_4,
- wxHTML_FONT_SIZE_5,
- wxHTML_FONT_SIZE_6,
- wxHTML_FONT_SIZE_7
- };
+ static int default_sizes[7] = { 0 };
+ if ( !sizes )
+ {
+ if ( !default_sizes[0] )
+ wxBuildFontSizes(default_sizes, wxGetDefaultHTMLFontSize());
- if (sizes == NULL) sizes = default_sizes;
+ sizes = default_sizes;
+ }
int i, j, k, l, m;
- for (i = 0; i < 7; i++) m_FontsSizes[i] = sizes[i];
+ for (i = 0; i < 7; i++)
+ m_FontsSizes[i] = sizes[i];
+
m_FontFaceFixed = fixed_face;
m_FontFaceNormal = normal_face;
const wxString& normal_face,
const wxString& fixed_face)
{
- wxFont defaultFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+ if (size == -1)
+ size = wxGetDefaultHTMLFontSize();
int f_sizes[7];
- if (size == -1)
- size = defaultFont.GetPointSize();
-
- f_sizes[0] = int(size * 0.6);
- f_sizes[1] = int(size * 0.8);
- f_sizes[2] = size;
- f_sizes[3] = int(size * 1.2);
- f_sizes[4] = int(size * 1.4);
- f_sizes[5] = int(size * 1.6);
- f_sizes[6] = int(size * 1.8);
-
- wxString normal = normal_face.empty() ?
- defaultFont.GetFaceName() : normal_face;
+ wxBuildFontSizes(f_sizes, size);
+
+ wxString normal = normal_face;
+ if ( normal.empty() )
+ normal = wxNORMAL_FONT->GetFaceName();
SetFonts(normal, fixed_face, f_sizes);
}