X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a243da29c8135be476e47a035a81e695bbb21e26..2afba7c46ce2fbd13a6aed64e7600343fd01c224:/src/msw/textctrl.cpp diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index b8c027b98c..c2417d2cc4 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -544,7 +544,20 @@ bool wxTextCtrl::MSWCreateText(const wxString& value, ::SendMessage(GetHwnd(), EM_SETEVENTMASK, 0, mask); } + else #endif // wxUSE_RICHEDIT + if ( HasFlag(wxTE_MULTILINE) && HasFlag(wxTE_READONLY) ) + { + // non-rich read-only multiline controls have grey background by + // default under MSW but this is not always appropriate, so forcefully + // reset the background colour to normal default + // + // this is not ideal but, after a long discussion on wx-dev (see + // http://thread.gmane.org/gmane.comp.lib.wxwidgets.devel/116360/) it + // was finally deemed to be the best behaviour by default (and ideally + // we'd have a way to change this, see #11521) + SetBackgroundColour(GetClassDefaultAttributes().colBg); + } #ifndef __WXWINCE__ // Without this, if we pass the size in the constructor and then don't change it, @@ -1025,10 +1038,6 @@ wxTextCtrl::StreamIn(const wxString& value, wxLogLastError(wxT("EM_STREAMIN")); } -#if !wxUSE_WCHAR_T - free(wchBuf); -#endif // !wxUSE_WCHAR_T - return true; } @@ -1041,13 +1050,8 @@ wxTextCtrl::StreamOut(wxFontEncoding encoding, bool selectionOnly) const const int len = GetWindowTextLength(GetHwnd()); -#if wxUSE_WCHAR_T wxWCharBuffer wchBuf(len); wchar_t *wpc = wchBuf.data(); -#else - wchar_t *wchBuf = (wchar_t *)malloc((len + 1)*sizeof(wchar_t)); - wchar_t *wpc = wchBuf; -#endif wxStreamOutData data; data.wpc = wpc; @@ -1087,10 +1091,6 @@ wxTextCtrl::StreamOut(wxFontEncoding encoding, bool selectionOnly) const } } -#if !wxUSE_WCHAR_T - free(wchBuf); -#endif // !wxUSE_WCHAR_T - return out; } @@ -1193,9 +1193,7 @@ void wxTextCtrl::AppendText(const wxString& text) // don't do this if we're frozen, saves some time if ( !IsFrozen() && IsMultiLine() && GetRichVersion() > 1 ) { - // setting the caret to the end and showing it simply doesn't work for - // RichEdit 2.0 -- force it to still do what we want - ::SendMessage(GetHwnd(), EM_LINESCROLL, 0, GetNumberOfLines()); + ::SendMessage(GetHwnd(), WM_VSCROLL, SB_BOTTOM, NULL); } #endif // wxUSE_RICHEDIT } @@ -2197,23 +2195,6 @@ void wxTextCtrl::OnSetFocus(wxFocusEvent& event) event.Skip(); } -// ---------------------------------------------------------------------------- -// Default colors for MSW text control -// -// Set default background color to the native white instead of -// the default wxSYS_COLOUR_BTNFACE (is triggered with wxNullColour). -// ---------------------------------------------------------------------------- - -wxVisualAttributes wxTextCtrl::GetDefaultAttributes() const -{ - wxVisualAttributes attrs; - attrs.font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - attrs.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); - attrs.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); //white - - return attrs; -} - // the rest of the file only deals with the rich edit controls #if wxUSE_RICHEDIT @@ -2377,6 +2358,26 @@ bool wxTextCtrl::SetForegroundColour(const wxColour& colour) return true; } +bool wxTextCtrl::SetFont(const wxFont& font) +{ + if ( !wxTextCtrlBase::SetFont(font) ) + return false; + + if ( IsRich() ) + { + // Using WM_SETFONT doesn't work reliably with rich edit controls: as + // an example, if we set a fixed width font for a richedit 4.1 control, + // it's used for the ASCII characters but inserting any non-ASCII ones + // switches the font to a proportional one, whether it's done + // programmatically or not. So just use EM_SETCHARFORMAT for this too. + wxTextAttr attr; + attr.SetFont(font); + SetDefaultStyle(attr); + } + + return true; +} + // ---------------------------------------------------------------------------- // styling support for rich edit controls // ----------------------------------------------------------------------------