]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/textcmn.cpp
use guard classes automatically restoring the old state in their dtor instead of...
[wxWidgets.git] / src / common / textcmn.cpp
index c69ba3aea19ae1b29dfefeac3d2f926f058706ae..53dd431459f416f20f98134fead81e9b2bcad2fd 100644 (file)
@@ -362,6 +362,18 @@ bool wxTextAttr::GetFontAttributes(const wxFont& font, int 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;
+}
+
 bool wxTextAttr::Apply(const wxTextAttr& style, const wxTextAttr* compareWith)
 {
     wxTextAttr& destStyle = (*this);
@@ -524,6 +536,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);
@@ -772,41 +789,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);
 }
 
 // ----------------------------------------------------------------------------