X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1a2fb4cd61069956c046e9721fda447ba1a743d7..3f4f90c2a0c1f274d1918b320132ed0ca2922fe5:/contrib/src/stc/stc.cpp.in?ds=sidebyside diff --git a/contrib/src/stc/stc.cpp.in b/contrib/src/stc/stc.cpp.in index 68346399e9..f6c30c0896 100644 --- a/contrib/src/stc/stc.cpp.in +++ b/contrib/src/stc/stc.cpp.in @@ -25,7 +25,7 @@ //---------------------------------------------------------------------- -const wxChar* wxSTCNameStr = "stcwindow"; +const wxChar* wxSTCNameStr = wxT("stcwindow"); DEFINE_EVENT_TYPE( wxEVT_STC_CHANGE ) DEFINE_EVENT_TYPE( wxEVT_STC_STYLENEEDED ) @@ -105,6 +105,10 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent, m_lastKeyDownConsumed = FALSE; m_vScrollBar = NULL; m_hScrollBar = NULL; +#if wxUSE_UNICODE + // Put Scintilla into unicode (UTF-8) mode + SetCodePage(wxSTC_CP_UTF8); +#endif } @@ -142,11 +146,12 @@ static wxColour wxColourFromLong(long c) { static wxColour wxColourFromSpec(const wxString& spec) { - // spec should be #RRGGBB - char* junk; - int red = strtol(spec.Mid(1,2), &junk, 16); - int green = strtol(spec.Mid(3,2), &junk, 16); - int blue = strtol(spec.Mid(5,2), &junk, 16); + // spec should be "#RRGGBB" + long red, green, blue; + red = green = blue = 0; + spec.Mid(1,2).ToLong(&red, 16); + spec.Mid(3,2).ToLong(&green, 16); + spec.Mid(5,2).ToLong(&blue, 16); return wxColour(red, green, blue); } @@ -320,6 +325,7 @@ void wxStyledTextCtrl::OnScroll(wxScrollEvent& evt) { void wxStyledTextCtrl::OnSize(wxSizeEvent& evt) { wxSize sz = GetClientSize(); m_swx->DoSize(sz.x, sz.y); + Refresh(FALSE); } void wxStyledTextCtrl::OnMouseLeftDown(wxMouseEvent& evt) { @@ -362,13 +368,7 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) { void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { - long key = evt.KeyCode(); - -// printf("OnChar key:%%d consumed:%%d ctrl:%%d alt:%%d\n", -// key, m_lastKeyDownConsumed, evt.ControlDown(), evt.AltDown()); - - // AltGr keys??? - // \|@#¬[]{}?£$~ ã,õ,Ã,Õ, ñ, Ñ + int key = evt.GetKeyCode(); // On (some?) non-US keyboards the AltGr key is required to enter some // common characters. It comes to us as both Alt and Ctrl down so we need @@ -378,7 +378,10 @@ void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { bool alt = evt.AltDown(); bool skip = ((ctrl || alt) && ! (ctrl && alt)); - if (key <= 0xff && key >= 32 && !m_lastKeyDownConsumed && !skip) { + //printf("OnChar key:%%d consumed:%%d ctrl:%%d alt:%%d skip:%%d\n", + // key, m_lastKeyDownConsumed, ctrl, alt, skip); + + if (key <= WXK_START && /*key >= 32 &&*/ !m_lastKeyDownConsumed && !skip) { m_swx->DoAddChar(key); return; } @@ -387,10 +390,10 @@ void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) { - long key = evt.KeyCode(); + int key = evt.GetKeyCode(); bool shift = evt.ShiftDown(), - ctrl = evt.ControlDown(), - alt = evt.AltDown(); + ctrl = evt.ControlDown(), + alt = evt.AltDown(); int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, &m_lastKeyDownConsumed); @@ -488,8 +491,14 @@ void wxStyledTextCtrl::NotifyParent(SCNotification* _scn) { case SCN_MODIFIED: evt.SetEventType(wxEVT_STC_MODIFIED); evt.SetModificationType(scn.modificationType); - if (scn.text) - evt.SetText(wxString(scn.text, scn.length)); + if (scn.text) { + // The unicode conversion MUST have a null byte to terminate the + // string so move it into a buffer first and give it one. + wxMemoryBuffer buf(scn.length+1); + buf.AppendData((void*)scn.text, scn.length); + buf.AppendByte(0); + evt.SetText(wxString(buf, wxConvUTF8)); + } evt.SetLength(scn.length); evt.SetLinesAdded(scn.linesAdded); evt.SetLine(scn.line);