]> git.saurik.com Git - wxWidgets.git/blobdiff - src/richtext/richtextstyles.cpp
correct typo in one of the last changes
[wxWidgets.git] / src / richtext / richtextstyles.cpp
index a171a8b60ad998f55132b72912e9618a3c9735de..dc39222fb15272a6183015963f191298f6d3d903 100644 (file)
@@ -614,18 +614,76 @@ wxString wxRichTextStyleListBox::CreateHTML(wxRichTextStyleDefinition* def) cons
         str << wxT("<td nowrap>");
 
 #ifdef __WXMSW__
-    int size = 3;
+    int size = 2;
 #else
-    int size = 4;
+    int size = 3;
 #endif
 
-    int stdFontSize = 12;
+       // Guess a standard font size
+    int stdFontSize = 0;
+
+    // First see if we have a default/normal style to base the size on
+    wxString normalTranslated(_("normal"));
+    wxString defaultTranslated(_("default"));
+    size_t i;
+    for (i = 0; i < m_styleNames.GetCount(); i++)
+    {
+               wxString name = m_styleNames[i].Lower();
+               if (name.Find(wxT("normal")) != wxNOT_FOUND || name.Find(normalTranslated) != wxNOT_FOUND ||
+                   name.Find(wxT("default")) != wxNOT_FOUND || name.Find(defaultTranslated) != wxNOT_FOUND)
+               {
+               wxRichTextStyleDefinition* d = GetStyleSheet()->FindStyle(m_styleNames[i]);
+               if (d)
+               {
+                       wxRichTextAttr attr2(d->GetStyleMergedWithBase(GetStyleSheet()));
+                       if (attr2.HasFontSize())
+                       {
+                                       stdFontSize = attr2.GetFontSize();
+                                       break;
+                               }
+                       }
+               }
+       }
+
+    if (stdFontSize == 0)
+    {
+        // Look at sizes up to 20 points, and see which is the most common
+        wxArrayInt sizes;
+        size_t maxSize = 20;
+        for (i = 0; i <= maxSize; i++)
+            sizes.Add(0);
+        for (i = 0; i < m_styleNames.GetCount(); i++)
+        {
+            wxRichTextStyleDefinition* d = GetStyleSheet()->FindStyle(m_styleNames[i]);
+            if (d)
+            {
+                wxRichTextAttr attr2(d->GetStyleMergedWithBase(GetStyleSheet()));
+                if (attr2.HasFontSize())
+                {
+                    if (attr2.GetFontSize() <= (int) maxSize)
+                        sizes[attr2.GetFontSize()] ++;
+                }
+            }
+        }
+        int mostCommonSize = 0;
+        for (i = 0; i <= maxSize; i++)
+        {
+            if (sizes[i] > mostCommonSize)
+                mostCommonSize = i;
+               }
+        if (mostCommonSize > 0)
+            stdFontSize = mostCommonSize;
+    }
+
+    if (stdFontSize == 0)
+       stdFontSize = 12;
+
     int thisFontSize = ((attr.GetFlags() & wxTEXT_ATTR_FONT_SIZE) != 0) ? attr.GetFontSize() : stdFontSize;
 
     if (thisFontSize < stdFontSize)
-        size ++;
-    else if (thisFontSize > stdFontSize)
         size --;
+    else if (thisFontSize > stdFontSize)
+        size ++;
 
     str += wxT("<font");
 
@@ -756,7 +814,7 @@ wxString wxRichTextStyleListBox::GetStyleToShowInIdleTime(wxRichTextCtrl* ctrl,
 /// Auto-select from style under caret in idle time
 void wxRichTextStyleListBox::OnIdle(wxIdleEvent& event)
 {
-    if (CanAutoSetSelection() && GetRichTextCtrl() && wxWindow::FindFocus() != this)
+    if (CanAutoSetSelection() && GetRichTextCtrl() && IsShownOnScreen() && wxWindow::FindFocus() != this)
     {
         wxString styleName = GetStyleToShowInIdleTime(GetRichTextCtrl(), GetStyleType());
 
@@ -1114,7 +1172,7 @@ void wxRichTextStyleComboCtrl::OnIdle(wxIdleEvent& event)
     if ( !richtext )
         return;
 
-    if ( !IsPopupShown() && wxWindow::FindFocus() != this )
+    if ( !IsPopupShown() && IsShownOnScreen() && wxWindow::FindFocus() != this )
     {
         wxString styleName =
             wxRichTextStyleListBox::GetStyleToShowInIdleTime(richtext, m_stylePopup->GetStyleType());