X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4bc1afd502a0f6f31bddb349a63f41a828f54ded..721a4a08bce5245dd748a9f4c64c5d25a02e8155:/src/msw/textctrl.cpp diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index ff6b6c1c97..96ff0f3edd 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -28,6 +28,8 @@ #pragma hdrstop #endif +#if wxUSE_TEXTCTRL + #ifndef WX_PRECOMP #include "wx/textctrl.h" #include "wx/settings.h" @@ -54,14 +56,17 @@ #include #include -#if wxUSE_IOSTREAMH -# include -#else -# include +#if wxUSE_RICHEDIT && (!defined(__GNUWIN32_OLD__) || defined(__CYGWIN10__)) + #include #endif -#if wxUSE_RICHEDIT && !defined(__GNUWIN32_OLD__) - #include +// old mingw32 doesn't define this +#ifndef CFM_CHARSET + #define CFM_CHARSET 0x08000000 +#endif // CFM_CHARSET + +#ifndef CFM_BACKCOLOR + #define CFM_BACKCOLOR 0x04000000 #endif // ---------------------------------------------------------------------------- @@ -1228,10 +1233,11 @@ bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style) // the rich text control doesn't handle setting background colour, so don't // even try if it's the only thing we want to change - if ( !style.HasFont() && !style.HasTextColour() ) + if ( wxRichEditModule::GetLoadedVersion() < 2 && + !style.HasFont() && !style.HasTextColour() ) { - // nothing to do: return TRUE if there was really nothing to doand - // FALSE fi we failed to set bg colour + // nothing to do: return TRUE if there was really nothing to do and + // FALSE if we failed to set bg colour return !style.HasBackgroundColour(); } @@ -1255,13 +1261,18 @@ bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style) SendMessage(GetHwnd(), EM_SETSEL, (WPARAM) start, (LPARAM) end); // initialize CHARFORMAT struct +#if wxUSE_RICHEDIT2 + CHARFORMAT2 cf; +#else CHARFORMAT cf; +#endif wxZeroMemory(cf); cf.cbSize = sizeof(cf); if ( style.HasFont() ) { - cf.dwMask |= CFM_FACE | CFM_SIZE | CFM_CHARSET; + cf.dwMask |= CFM_FACE | CFM_SIZE | CFM_CHARSET | + CFM_ITALIC | CFM_BOLD | CFM_UNDERLINE; // fill in data from LOGFONT but recalculate lfHeight because we need // the real height in twips and not the negative number which @@ -1274,22 +1285,21 @@ bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style) cf.bPitchAndFamily = lf.lfPitchAndFamily; wxStrncpy( cf.szFaceName, lf.lfFaceName, WXSIZEOF(cf.szFaceName) ); - // also deal with underline/italic/bold attributes + // also deal with underline/italic/bold attributes: note that we must + // always set CFM_ITALIC &c bits in dwMask, even if we don't set the + // style to allow clearing it if ( lf.lfItalic ) { - cf.dwMask |= CFM_ITALIC; cf.dwEffects |= CFE_ITALIC; } if ( lf.lfWeight == FW_BOLD ) { - cf.dwMask |= CFM_BOLD; cf.dwEffects |= CFE_BOLD; } if ( lf.lfUnderline ) { - cf.dwMask |= CFM_UNDERLINE; cf.dwEffects |= CFE_UNDERLINE; } @@ -1302,6 +1312,14 @@ bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style) cf.crTextColor = wxColourToRGB(style.GetTextColour()); } +#if wxUSE_RICHEDIT2 + if ( wxRichEditModule::GetLoadedVersion() > 1 && style.HasBackgroundColour() ) + { + cf.dwMask |= CFM_BACKCOLOR; + cf.crBackColor = wxColourToRGB(style.GetBackgroundColour()); + } +#endif // wxUSE_RICHEDIT2 + // do format the selection bool ok = ::SendMessage(GetHwnd(), EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf) != 0; @@ -1382,3 +1400,4 @@ bool wxRichEditModule::Load(int version) #endif // wxUSE_RICHEDIT +#endif // wxUSE_TEXTCTRL