X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/44cc96a80c09c8572e1315be66d29f6d610cbf78..b53aea81d2e102224b452ef5bf7aee1132f37c6f:/src/common/textcmn.cpp diff --git a/src/common/textcmn.cpp b/src/common/textcmn.cpp index 82d6585825..6d7fb083c8 100644 --- a/src/common/textcmn.cpp +++ b/src/common/textcmn.cpp @@ -49,10 +49,10 @@ IMPLEMENT_DYNAMIC_CLASS(wxTextUrlEvent, wxCommandEvent) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_MAXLEN) +wxDEFINE_EVENT( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEvent ) +wxDEFINE_EVENT( wxEVT_COMMAND_TEXT_ENTER, wxCommandEvent ) +wxDEFINE_EVENT( wxEVT_COMMAND_TEXT_URL, wxTextUrlEvent ) +wxDEFINE_EVENT( wxEVT_COMMAND_TEXT_MAXLEN, wxCommandEvent ) IMPLEMENT_ABSTRACT_CLASS(wxTextCtrlBase, wxControl) @@ -85,10 +85,11 @@ void wxTextAttr::Init() m_rightIndent = 0; m_fontSize = 12; - m_fontStyle = wxNORMAL; - m_fontWeight = wxNORMAL; + m_fontStyle = wxFONTSTYLE_NORMAL; + m_fontWeight = wxFONTWEIGHT_NORMAL; m_fontUnderlined = false; m_fontEncoding = wxFONTENCODING_DEFAULT; + m_fontFamily = wxFONTFAMILY_DEFAULT; m_paragraphSpacingAfter = 0; m_paragraphSpacingBefore = 0; @@ -118,6 +119,7 @@ void wxTextAttr::Copy(const wxTextAttr& attr) m_fontUnderlined = attr.m_fontUnderlined; m_fontFaceName = attr.m_fontFaceName; m_fontEncoding = attr.m_fontEncoding; + m_fontFamily = attr.m_fontFamily; m_textEffects = attr.m_textEffects; m_textEffectFlags = attr.m_textEffectFlags; @@ -181,6 +183,7 @@ bool wxTextAttr::operator== (const wxTextAttr& attr) const GetFontUnderlined() == attr.GetFontUnderlined() && GetFontFaceName() == attr.GetFontFaceName() && GetFontEncoding() == attr.GetFontEncoding() && + GetFontFamily() == attr.GetFontFamily() && GetURL() == attr.GetURL(); } @@ -218,6 +221,10 @@ bool wxTextAttr::EqPartial(const wxTextAttr& attr, int flags) const GetFontEncoding() != attr.GetFontEncoding()) return false; + if ((flags & wxTEXT_ATTR_FONT_FAMILY) && + GetFontFamily() != attr.GetFontFamily()) + return false; + if ((flags & wxTEXT_ATTR_URL) && GetURL() != attr.GetURL()) return false; @@ -297,8 +304,11 @@ bool wxTextAttr::EqPartial(const wxTextAttr& attr, int flags) const } // Create font from font attributes. -wxFont wxTextAttr::CreateFont() const +wxFont wxTextAttr::GetFont() const { + if ( !HasFont() ) + return wxNullFont; + int fontSize = 10; if (HasFontSize()) fontSize = GetFontSize(); @@ -323,7 +333,11 @@ wxFont wxTextAttr::CreateFont() const if (HasFontEncoding()) encoding = GetFontEncoding(); - wxFont font(fontSize, wxDEFAULT, fontStyle, fontWeight, underlined, fontFaceName, encoding); + int fontFamily = wxFONTFAMILY_DEFAULT; + if (HasFontFamily()) + fontFamily = GetFontFamily(); + + wxFont font(fontSize, fontFamily, fontStyle, fontWeight, underlined, fontFaceName, encoding); #ifdef __WXMAC__ font.SetNoAntiAliasing(true); #endif @@ -354,6 +368,23 @@ bool wxTextAttr::GetFontAttributes(const wxFont& font, int flags) if (flags & wxTEXT_ATTR_FONT_ENCODING) m_fontEncoding = font.GetEncoding(); + if (flags & wxTEXT_ATTR_FONT_FAMILY) + m_fontFamily = font.GetFamily(); + + m_flags |= flags; + + return true; +} + +// Resets bits in destination so new attributes aren't merged with mutually exclusive ones +static bool wxResetIncompatibleBits(const int mask, const int srcFlags, int& destFlags, int& destBits) +{ + if ((srcFlags & mask) && (destFlags & mask)) + { + destBits &= ~mask; + destFlags &= ~mask; + } + return true; } @@ -397,6 +428,12 @@ bool wxTextAttr::Apply(const wxTextAttr& style, const wxTextAttr* compareWith) destStyle.SetFontEncoding(style.GetFontEncoding()); } + if (style.HasFontFamily()) + { + if (!(compareWith && compareWith->HasFontFamily() && compareWith->GetFontFamily() == style.GetFontFamily())) + destStyle.SetFontFamily(style.GetFontFamily()); + } + if (style.GetTextColour().Ok() && style.HasTextColour()) { if (!(compareWith && compareWith->HasTextColour() && compareWith->GetTextColour() == style.GetTextColour())) @@ -519,6 +556,11 @@ bool wxTextAttr::Apply(const wxTextAttr& style, const wxTextAttr* compareWith) int srcBits = style.GetTextEffects(); int srcFlags = style.GetTextEffectFlags(); + // Reset incompatible bits in the destination + wxResetIncompatibleBits((wxTEXT_ATTR_EFFECT_SUPERSCRIPT|wxTEXT_ATTR_EFFECT_SUBSCRIPT), srcFlags, destFlags, destBits); + wxResetIncompatibleBits((wxTEXT_ATTR_EFFECT_CAPITALS|wxTEXT_ATTR_EFFECT_SMALL_CAPITALS), srcFlags, destFlags, destBits); + wxResetIncompatibleBits((wxTEXT_ATTR_EFFECT_STRIKETHROUGH|wxTEXT_ATTR_EFFECT_DOUBLE_STRIKETHROUGH), srcFlags, destFlags, destBits); + CombineBitlists(destBits, srcBits, destFlags, srcFlags); destStyle.SetTextEffects(destBits); @@ -540,10 +582,14 @@ wxTextAttr wxTextAttr::Combine(const wxTextAttr& attr, const wxTextAttr& attrDef, const wxTextCtrlBase *text) { - wxFont font = attr.GetFont(); + wxFont font; + if (attr.HasFont()) + font = attr.GetFont(); + if ( !font.Ok() ) { - font = attrDef.GetFont(); + if (attrDef.HasFont()) + font = attrDef.GetFont(); if ( text && !font.Ok() ) font = text->GetFont(); @@ -763,41 +809,19 @@ wxTextCtrl& wxTextCtrlBase::operator<<(const wxString& s) return *TEXTCTRL(this); } -wxTextCtrl& wxTextCtrlBase::operator<<(float f) -{ - wxString str; - str.Printf(wxT("%.2f"), f); - AppendText(str); - return *TEXTCTRL(this); -} - wxTextCtrl& wxTextCtrlBase::operator<<(double d) { - wxString str; - str.Printf(wxT("%.2f"), d); - AppendText(str); - return *TEXTCTRL(this); + return *this << wxString::Format("%.2f", d); } wxTextCtrl& wxTextCtrlBase::operator<<(int i) { - wxString str; - str.Printf(wxT("%d"), i); - AppendText(str); - return *TEXTCTRL(this); -} - -wxTextCtrl& wxTextCtrlBase::operator<<(long i) -{ - wxString str; - str.Printf(wxT("%ld"), i); - AppendText(str); - return *TEXTCTRL(this); + return *this << wxString::Format("%d", i); } -wxTextCtrl& wxTextCtrlBase::operator<<(const wxChar c) +wxTextCtrl& wxTextCtrlBase::operator<<(long l) { - return operator<<(wxString(c)); + return *this << wxString::Format("%ld", l); } // ---------------------------------------------------------------------------- @@ -990,6 +1014,6 @@ bool wxTextCtrlBase::SendTextUpdatedEvent(wxWindow *win) // define this one even if !wxUSE_TEXTCTRL because it is also used by other // controls (wxComboBox and wxSpinCtrl) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED) +wxDEFINE_EVENT( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEvent ) #endif // wxUSE_TEXTCTRL/!wxUSE_TEXTCTRL