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();
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;
}
hdc = (wxDC*)hdc_;
}
-void SurfaceImpl::InitPixMap(int width, int height, Surface *surface_, WindowID) {
+void SurfaceImpl::InitPixMap(int width, int height, Surface *WXUNUSED(surface_), WindowID) {
Release();
hdc = new wxMemoryDC();
hdcOwned = true;
SetFont(font);
hdc->SetTextForeground(wxColourFromCA(fore));
hdc->SetTextBackground(wxColourFromCA(back));
- //FillRectangle(rc, back);
+ FillRectangle(rc, back);
// ybase is where the baseline should be, but wxWin uses the upper left
// corner, so I need to calculate the real position for the text...
SetFont(font);
hdc->SetTextForeground(wxColourFromCA(fore));
hdc->SetTextBackground(wxColourFromCA(back));
- //FillRectangle(rc, back);
+ FillRectangle(rc, back);
hdc->SetClippingRegion(wxRectFromPRectangle(rc));
// see comments above
hdc->DrawText(stc2wx(s, len), rc.left, ybase - font.ascent);
+ hdc->DestroyClippingRegion();
}
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];
- int totalWidth = 0;
- size_t i;
- for (i=0; i<str.Length(); i++) {
- int w, h;
- hdc->GetTextExtent(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];
- size_t i;
- for (i=0; i<str.Length(); i++) {
- int w, h;
- hdc->GetTextExtent(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 (i < len) {
+ while ((int)i < len) {
unsigned char uch = (unsigned char)s[i];
positions[i++] = tpos[ui];
if (uch >= 0x80) {
#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;
}
return d;
}
-int SurfaceImpl::InternalLeading(Font &font) {
+int SurfaceImpl::InternalLeading(Font &WXUNUSED(font)) {
return 0;
}
return hdc->GetCharWidth();
}
-int SurfaceImpl::SetPalette(Palette *pal, bool inBackGround) {
+int SurfaceImpl::SetPalette(Palette *WXUNUSED(pal), bool WXUNUSED(inBackGround)) {
return 0;
}
void SurfaceImpl::SetUnicodeMode(bool unicodeMode_) {
unicodeMode=unicodeMode_;
-#if wxUSE_UNICODE
- wxASSERT_MSG(unicodeMode == wxUSE_UNICODE,
- wxT("Only unicode may be used when wxUSE_UNICODE is on."));
-#else
- wxASSERT_MSG(unicodeMode == wxUSE_UNICODE,
- wxT("Only non-unicode may be used when wxUSE_UNICODE is off."));
-#endif
}
-void SurfaceImpl::SetDBCSMode(int codePage) {
+void SurfaceImpl::SetDBCSMode(int WXUNUSED(codePage)) {
// dbcsMode = codePage == SC_CP_DBCS;
}
break;
case cursorHand:
cursorId = wxCURSOR_HAND;
+ break;
default:
cursorId = wxCURSOR_ARROW;
break;
// Helper classes for ListBox
-// This is a simple subclass of wxLIstView that just resets focus to the
+// This is a simple subclass of wxListView that just resets focus to the
// parent when it gets it.
class wxSTCListBox : public wxListView {
public:
event.Skip();
}
+ void OnKillFocus(wxFocusEvent& WXUNUSED(event)) {
+ // Do nothing. Prevents base class from resetting the colors...
+ }
+
private:
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(wxSTCListBox, wxListView)
EVT_SET_FOCUS( wxSTCListBox::OnFocus)
+ EVT_KILL_FOCUS(wxSTCListBox::OnKillFocus)
END_EVENT_TABLE()
lv->SetCursor(wxCursor(wxCURSOR_ARROW));
lv->InsertColumn(0, wxEmptyString);
lv->InsertColumn(1, wxEmptyString);
+
+ // Eventhough we immediately reset the focus to the parent, this helps
+ // 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
+ // immediately.
+ bool Destroy() {
+ if ( !wxPendingDelete.Member(this) )
+ wxPendingDelete.Append(this);
+ return TRUE;
+ }
+
+
int IconWidth() {
wxImageList* il = lv->GetImageList(wxIMAGE_LIST_SMALL);
if (il != NULL) {
event.Skip();
}
- void OnActivate(wxListEvent& event) {
+ void OnActivate(wxListEvent& WXUNUSED(event)) {
doubleClickAction(doubleClickActionData);
}
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 *);
// wxListCtrl doesn't have a DoGetBestSize, so instead we kept track of
// the max size in Append and calculate it here...
int maxw = maxStrWidth;
- int maxh = 0;
+ int maxh ;
// give it a default if there are no lines, and/or add a bit more
if (maxw == 0) maxw = 100;
}
-int ListBoxImpl::Find(const char *prefix) {
+int ListBoxImpl::Find(const char *WXUNUSED(prefix)) {
// No longer used
return -1;
}
value[len-1] = '\0';
}
-void ListBoxImpl::Sort() {
-}
-
void ListBoxImpl::RegisterImage(int type, const char *xpm_data) {
wxMemoryInputStream stream(xpm_data, strlen(xpm_data)+1);
//----------------------------------------------------------------------
+DynamicLibrary *DynamicLibrary::Load(const char *WXUNUSED(modulePath)) {
+ wxFAIL_MSG(wxT("Dynamic lexer loading not implemented yet"));
+ return NULL;
+}
+
+//----------------------------------------------------------------------
+
ColourDesired Platform::Chrome() {
wxColour c;
c = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
wxLogDebug(stc2wx(s));
}
-bool Platform::IsKeyDown(int key) {
+bool Platform::IsKeyDown(int WXUNUSED(key)) {
return false; // I don't think we'll need this.
}
}
-bool Platform::IsDBCSLeadByte(int codePage, char ch) {
+bool Platform::IsDBCSLeadByte(int WXUNUSED(codePage), char WXUNUSED(ch)) {
return false;
}
-int Platform::DBCSCharLength(int codePage, const char *s) {
- return 0;
+int Platform::DBCSCharLength(int WXUNUSED(codePage), const char *WXUNUSED(s)) {
+ return 1;
}
int Platform::DBCSCharMaxLength() {
- return 0;
+ return 1;
}
//----------------------------------------------------------------------
+#if wxUSE_UNICODE
+wxString stc2wx(const char* str, size_t len)
+{
+ char *buffer=new char[len+1];
+ strncpy(buffer, str, len);
+ buffer[len]=0;
+
+ wxString cstr(buffer, wxConvUTF8);
+
+ delete[] buffer;
+ return cstr;
+}
+#endif
+
+
+