X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a047aff270905b377a81657a90f92eb3297157d0..fde87a82768ea971a9832e39d87137100e382422:/src/richtext/richtextstyles.cpp
diff --git a/src/richtext/richtextstyles.cpp b/src/richtext/richtextstyles.cpp
index 5fa16bb54e..dc39222fb1 100644
--- a/src/richtext/richtextstyles.cpp
+++ b/src/richtext/richtextstyles.cpp
@@ -54,14 +54,14 @@ bool wxRichTextStyleDefinition::Eq(const wxRichTextStyleDefinition& def) const
}
/// Gets the style combined with the base style
-wxRichTextAttr wxRichTextStyleDefinition::GetStyleMergedWithBase(const wxRichTextStyleSheet* sheet) const
+wxTextAttr wxRichTextStyleDefinition::GetStyleMergedWithBase(const wxRichTextStyleSheet* sheet) const
{
if (!m_baseStyle.IsEmpty())
{
wxRichTextStyleDefinition* baseStyle = sheet->FindStyle(m_baseStyle);
if (baseStyle)
{
- wxRichTextAttr baseAttr = baseStyle->GetStyleMergedWithBase(sheet);
+ wxTextAttr baseAttr = baseStyle->GetStyleMergedWithBase(sheet);
baseAttr.Apply(m_style, NULL);
return baseAttr;
}
@@ -111,14 +111,14 @@ bool wxRichTextListStyleDefinition::operator ==(const wxRichTextListStyleDefinit
}
/// Sets/gets the attributes for the given level
-void wxRichTextListStyleDefinition::SetLevelAttributes(int i, const wxRichTextAttr& attr)
+void wxRichTextListStyleDefinition::SetLevelAttributes(int i, const wxTextAttr& attr)
{
wxASSERT( (i >= 0 && i < 10) );
if (i >= 0 && i < 10)
m_levelStyles[i] = attr;
}
-const wxRichTextAttr* wxRichTextListStyleDefinition::GetLevelAttributes(int i) const
+const wxTextAttr* wxRichTextListStyleDefinition::GetLevelAttributes(int i) const
{
wxASSERT( (i >= 0 && i < 10) );
if (i >= 0 && i < 10)
@@ -127,7 +127,7 @@ const wxRichTextAttr* wxRichTextListStyleDefinition::GetLevelAttributes(int i) c
return NULL;
}
-wxRichTextAttr* wxRichTextListStyleDefinition::GetLevelAttributes(int i)
+wxTextAttr* wxRichTextListStyleDefinition::GetLevelAttributes(int i)
{
wxASSERT( (i >= 0 && i < 10) );
if (i >= 0 && i < 10)
@@ -142,7 +142,7 @@ void wxRichTextListStyleDefinition::SetAttributes(int i, int leftIndent, int lef
wxASSERT( (i >= 0 && i < 10) );
if (i >= 0 && i < 10)
{
- wxRichTextAttr attr;
+ wxTextAttr attr;
attr.SetBulletStyle(bulletStyle);
attr.SetLeftIndent(leftIndent, leftSubIndent);
@@ -178,11 +178,11 @@ int wxRichTextListStyleDefinition::FindLevelForIndent(int indent) const
/// Combine the list style with a paragraph style, using the given indent (from which
/// an appropriate level is found)
-wxRichTextAttr wxRichTextListStyleDefinition::CombineWithParagraphStyle(int indent, const wxRichTextAttr& paraStyle, wxRichTextStyleSheet* styleSheet)
+wxTextAttr wxRichTextListStyleDefinition::CombineWithParagraphStyle(int indent, const wxTextAttr& paraStyle, wxRichTextStyleSheet* styleSheet)
{
int listLevel = FindLevelForIndent(indent);
- wxRichTextAttr attr(*GetLevelAttributes(listLevel));
+ wxTextAttr attr(*GetLevelAttributes(listLevel));
int oldLeftIndent = attr.GetLeftIndent();
int oldLeftSubIndent = attr.GetLeftSubIndent();
@@ -203,7 +203,7 @@ wxRichTextAttr wxRichTextListStyleDefinition::CombineWithParagraphStyle(int inde
/// Combine the base and list style, using the given indent (from which
/// an appropriate level is found)
-wxRichTextAttr wxRichTextListStyleDefinition::GetCombinedStyle(int indent, wxRichTextStyleSheet* styleSheet)
+wxTextAttr wxRichTextListStyleDefinition::GetCombinedStyle(int indent, wxRichTextStyleSheet* styleSheet)
{
int listLevel = FindLevelForIndent(indent);
return GetCombinedStyleForLevel(listLevel, styleSheet);
@@ -211,9 +211,9 @@ wxRichTextAttr wxRichTextListStyleDefinition::GetCombinedStyle(int indent, wxRic
/// Combine the base and list style, using the given indent (from which
/// an appropriate level is found)
-wxRichTextAttr wxRichTextListStyleDefinition::GetCombinedStyleForLevel(int listLevel, wxRichTextStyleSheet* styleSheet)
+wxTextAttr wxRichTextListStyleDefinition::GetCombinedStyleForLevel(int listLevel, wxRichTextStyleSheet* styleSheet)
{
- wxRichTextAttr attr(*GetLevelAttributes(listLevel));
+ wxTextAttr attr(*GetLevelAttributes(listLevel));
int oldLeftIndent = attr.GetLeftIndent();
int oldLeftSubIndent = attr.GetLeftSubIndent();
@@ -590,7 +590,7 @@ wxString wxRichTextStyleListBox::CreateHTML(wxRichTextStyleDefinition* def) cons
bool isCentred = false;
- wxRichTextAttr attr(def->GetStyleMergedWithBase(GetStyleSheet()));
+ wxTextAttr attr(def->GetStyleMergedWithBase(GetStyleSheet()));
if (attr.HasAlignment() && attr.GetAlignment() == wxTEXT_ALIGNMENT_CENTRE)
isCentred = true;
@@ -614,18 +614,76 @@ wxString wxRichTextStyleListBox::CreateHTML(wxRichTextStyleDefinition* def) cons
str << wxT("
");
#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("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())
{
- wxTextAttrEx attr;
-
- ctrl->GetStyle(adjustedCaretPos, attr);
wxRichTextApplyStyle(attr, ctrl->GetDefaultStyleEx());
if ((styleType == wxRICHTEXT_STYLE_ALL || styleType == wxRICHTEXT_STYLE_CHARACTER) &&
@@ -737,20 +792,20 @@ wxString wxRichTextStyleListBox::GetStyleToShowInIdleTime(wxRichTextCtrl* ctrl,
!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;
@@ -759,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());
@@ -814,6 +869,9 @@ wxRichTextStyleListCtrl::wxRichTextStyleListCtrl(wxWindow* parent, wxWindowID id
bool wxRichTextStyleListCtrl::Create(wxWindow* parent, wxWindowID id, const wxPoint& pos,
const wxSize& size, long style)
{
+ if ((style & wxBORDER_MASK) == wxBORDER_DEFAULT)
+ style |= wxBORDER_THEME;
+
wxControl::Create(parent, id, pos, size, style);
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
@@ -822,7 +880,13 @@ bool wxRichTextStyleListCtrl::Create(wxWindow* parent, wxWindowID id, const wxPo
bool showSelector = ((style & wxRICHTEXTSTYLELIST_HIDE_TYPE_SELECTOR) == 0);
- m_styleListBox = new wxRichTextStyleListBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, showSelector ? wxBORDER_DEFAULT : wxBORDER_NONE);
+ wxBorder listBoxStyle;
+ if (showSelector)
+ listBoxStyle = wxBORDER_THEME;
+ else
+ listBoxStyle = wxBORDER_NONE;
+
+ m_styleListBox = new wxRichTextStyleListBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, listBoxStyle);
wxBoxSizer* boxSizer = new wxBoxSizer(wxVERTICAL);
@@ -1000,9 +1064,9 @@ END_EVENT_TABLE()
bool wxRichTextStyleComboPopup::Create( wxWindow* parent )
{
- int borderStyle = GetDefaultBorder();
- if (borderStyle == wxBORDER_SUNKEN)
- borderStyle = wxBORDER_SIMPLE;
+ int borderStyle = GetDefaultBorder();
+ if (borderStyle == wxBORDER_SUNKEN)
+ borderStyle = wxBORDER_SIMPLE;
return wxRichTextStyleListBox::Create(parent, wxID_ANY,
wxPoint(0,0), wxDefaultSize,
@@ -1108,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());
|