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");
{
int adjustedCaretPos = ctrl->GetAdjustedCaretPosition(ctrl->GetCaretPosition());
- wxRichTextParagraph* para = ctrl->GetBuffer().GetParagraphAtPosition(adjustedCaretPos);
- wxRichTextObject* obj = ctrl->GetBuffer().GetLeafObjectAtPosition(adjustedCaretPos);
-
wxString styleName;
+ wxTextAttr attr;
+ ctrl->GetStyle(adjustedCaretPos, attr);
+
// Take into account current default style just chosen by user
if (ctrl->IsDefaultStyleShowing())
{
- wxTextAttr attr;
-
- ctrl->GetStyle(adjustedCaretPos, attr);
wxRichTextApplyStyle(attr, ctrl->GetDefaultStyleEx());
if ((styleType == wxRICHTEXT_STYLE_ALL || styleType == wxRICHTEXT_STYLE_CHARACTER) &&
!attr.GetListStyleName().IsEmpty())
styleName = attr.GetListStyleName();
}
- else if (obj && (styleType == wxRICHTEXT_STYLE_ALL || styleType == wxRICHTEXT_STYLE_CHARACTER) &&
- !obj->GetAttributes().GetCharacterStyleName().IsEmpty())
+ else if ((styleType == wxRICHTEXT_STYLE_ALL || styleType == wxRICHTEXT_STYLE_CHARACTER) &&
+ !attr.GetCharacterStyleName().IsEmpty())
{
- styleName = obj->GetAttributes().GetCharacterStyleName();
+ styleName = attr.GetCharacterStyleName();
}
- else if (para && (styleType == wxRICHTEXT_STYLE_ALL || styleType == wxRICHTEXT_STYLE_PARAGRAPH) &&
- !para->GetAttributes().GetParagraphStyleName().IsEmpty())
+ else if ((styleType == wxRICHTEXT_STYLE_ALL || styleType == wxRICHTEXT_STYLE_PARAGRAPH) &&
+ !attr.GetParagraphStyleName().IsEmpty())
{
- styleName = para->GetAttributes().GetParagraphStyleName();
+ styleName = attr.GetParagraphStyleName();
}
- else if (para && (styleType == wxRICHTEXT_STYLE_ALL || styleType == wxRICHTEXT_STYLE_LIST) &&
- !para->GetAttributes().GetListStyleName().IsEmpty())
+ else if ((styleType == wxRICHTEXT_STYLE_ALL || styleType == wxRICHTEXT_STYLE_LIST) &&
+ !attr.GetListStyleName().IsEmpty())
{
- styleName = para->GetAttributes().GetListStyleName();
+ styleName = attr.GetListStyleName();
}
return styleName;
/// 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());
if ( !richtext )
return;
- if ( !IsPopupShown() && wxWindow::FindFocus() != this )
+ if ( !IsPopupShown() && IsShownOnScreen() && wxWindow::FindFocus() != this )
{
wxString styleName =
wxRichTextStyleListBox::GetStyleToShowInIdleTime(richtext, m_stylePopup->GetStyleType());