X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a4f3565ebd51d2cf437822995e89750ee0bef577..553aa032f2aac24b2b06bd8e38535118950976c1:/src/stc/PlatWX.cpp?ds=sidebyside diff --git a/src/stc/PlatWX.cpp b/src/stc/PlatWX.cpp index 322b64f4cc..50ffa9ac8f 100644 --- a/src/stc/PlatWX.cpp +++ b/src/stc/PlatWX.cpp @@ -100,7 +100,7 @@ Font::Font() { Font::~Font() { } -void Font::Create(const char *faceName, int characterSet, int size, bool bold, bool italic) { +void Font::Create(const char *faceName, int characterSet, int size, bool bold, bool italic, bool extraFontFlag) { wxFontEncoding encoding; Release(); @@ -185,13 +185,15 @@ void Font::Create(const char *faceName, int characterSet, int size, bool bold, b if (ea.GetCount()) encoding = ea[0]; - id = new wxFont(size, + wxFont* font = new wxFont(size, wxDEFAULT, italic ? wxITALIC : wxNORMAL, bold ? wxBOLD : wxNORMAL, false, stc2wx(faceName), encoding); + font->SetNoAntiAliasing(!extraFontFlag); + id = font; } @@ -445,42 +447,18 @@ void SurfaceImpl::DrawTextTransparent(PRectangle rc, Font &font, int ybase, void SurfaceImpl::MeasureWidths(Font &font, const char *s, int len, int *positions) { - wxString str = stc2wx(s, len); - SetFont(font); + wxString str = stc2wx(s, len); + wxArrayInt tpos; -#ifndef __WXMAC__ - // Calculate the position of each character based on the widths of - // the previous characters - int* tpos = new int[len+1]; - int totalWidth = 0; - size_t i; - for (i=0; iGetTextExtent(str[i], &w, &h); - totalWidth += w; - tpos[i] = totalWidth; - } -#else - // Instead of a running total, remeasure from the begining of the - // text for each character's position. This is because with AA fonts - // on OS X widths can be fractions of pixels wide when more than one - // are drawn together, so the sum of all character widths is not necessarily - // (and probably not) the same as the whole string width. - int* tpos = new int[len+1]; - size_t i; - for (i=0; iGetTextExtent(str.Left(i+1), &w, &h); - tpos[i] = w; - } -#endif + SetFont(font); + hdc->GetPartialTextExtents(str, tpos); #if wxUSE_UNICODE // Map the widths for UCS-2 characters back to the UTF-8 input string // NOTE: I don't think this is right for when sizeof(wxChar) > 2, ie wxGTK2 // so figure it out and fix it! - i = 0; + size_t i = 0; size_t ui = 0; while ((int)i < len) { unsigned char uch = (unsigned char)s[i]; @@ -498,10 +476,8 @@ void SurfaceImpl::MeasureWidths(Font &font, const char *s, int len, int *positio #else // If not unicode then just use the widths we have - memcpy(positions, tpos, len * sizeof(*tpos)); + memcpy(positions, tpos.begin(), len * sizeof(int)); #endif - - delete [] tpos; } @@ -713,7 +689,7 @@ public: event.Skip(); } - void OnKillFocus(wxFocusEvent& event) { + void OnKillFocus(wxFocusEvent& WXUNUSED(event)) { // Do nothing. Prevents base class from resetting the colors... } @@ -751,6 +727,10 @@ public: // things to look right... lv->SetFocus(); + Hide(); + } + + // On OSX and (possibly others) there can still be pending // messages/events for the list control when Scintilla wants to // close it, so do a pending delete of it instead of destroying @@ -795,7 +775,7 @@ public: event.Skip(); } - void OnActivate(wxListEvent& event) { + void OnActivate(wxListEvent& WXUNUSED(event)) { doubleClickAction(doubleClickActionData); } @@ -851,7 +831,6 @@ public: virtual int GetSelection(); virtual int Find(const char *prefix); virtual void GetValue(int n, char *value, int len); - virtual void Sort(); virtual void RegisterImage(int type, const char *xpm_data); virtual void ClearRegisteredImages(); virtual void SetDoubleClickAction(CallBackAction, void *); @@ -1004,9 +983,6 @@ void ListBoxImpl::GetValue(int n, char *value, int len) { value[len-1] = '\0'; } -void ListBoxImpl::Sort() { -} - void ListBoxImpl::RegisterImage(int type, const char *xpm_data) { wxMemoryInputStream stream(xpm_data, strlen(xpm_data)+1);