italic ? wxITALIC : wxNORMAL,
bold ? wxBOLD : wxNORMAL,
false,
- wxString(faceName, wxConvUTF8),
+ stc2wx(faceName),
encoding);
}
}
void SurfaceImpl::Init() {
+#if 0
Release();
hdc = new wxMemoryDC();
hdcOwned = true;
+#else
+ // On Mac and GTK(?) the DC is not really valid until it has a bitmap
+ // selected into it. So instead of just creating the DC with no bitmap,
+ // go ahead and give it one.
+ InitPixMap(1,1,NULL);
+#endif
}
void SurfaceImpl::Init(SurfaceID hdc_) {
hdc->SetTextBackground(wxColourFromCA(back));
FillRectangle(rc, back);
- // will convert from UTF-8 in unicode mode
- wxString str(s, wxConvUTF8, len);
-
// 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...
- hdc->DrawText(str, rc.left, ybase - font.ascent);
+ hdc->DrawText(stc2wx(s, len), rc.left, ybase - font.ascent);
}
void SurfaceImpl::DrawTextClipped(PRectangle rc, Font &font, int ybase,
FillRectangle(rc, back);
hdc->SetClippingRegion(wxRectFromPRectangle(rc));
- // will convert from UTF-8 in unicode mode
- wxString str(s, wxConvUTF8, len);
-
// see comments above
- hdc->DrawText(str, rc.left, ybase - font.ascent);
+ hdc->DrawText(stc2wx(s, len), rc.left, ybase - font.ascent);
hdc->DestroyClippingRegion();
}
int w;
int h;
- // will convert from UTF-8 in unicode mode
- wxString str(s, wxConvUTF8, len);
-
- hdc->GetTextExtent(str, &w, &h);
+ hdc->GetTextExtent(stc2wx(s, len), &w, &h);
return w;
}
void SurfaceImpl::MeasureWidths(Font &font, const char *s, int len, int *positions) {
- // will convert from UTF-8 in unicode mode
- wxString str(s, wxConvUTF8, len);
+ wxString str = stc2wx(s, len);
SetFont(font);
// Calculate the position of each character based on the widths of
int h;
char s[2] = { ch, 0 };
- // will convert from UTF-8 in unicode mode
- wxString str(s, wxConvUTF8, 1);
- hdc->GetTextExtent(str, &w, &h);
+ hdc->GetTextExtent(stc2wx(s, 1), &w, &h);
return w;
}
void Window::SetTitle(const char *s) {
- // will convert from UTF-8 in unicode mode
- wxString str(s, wxConvUTF8);
- GETWIN(id)->SetTitle(str);
+ GETWIN(id)->SetTitle(stc2wx(s));
}
//----------------------------------------------------------------------
// Helper classes for ListBox
-// A wxListBox that gives focus back to its parent if it gets it.
+
+#if defined(__WXMAC__)
+class wxSTCListBoxWin : public wxListBox {
+public:
+ wxSTCListBoxWin(wxWindow* parent, wxWindowID id)
+ : wxListBox(parent, id, wxDefaultPosition, wxSize(0,0),
+ 0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER) {
+ SetCursor(wxCursor(wxCURSOR_ARROW));
+ Hide();
+ }
+
+ void OnFocus(wxFocusEvent& event) {
+ GetParent()->SetFocus();
+ event.Skip();
+ }
+
+ wxListBox* GetLB() { return this; }
+
+private:
+ DECLARE_EVENT_TABLE()
+};
+
+
+BEGIN_EVENT_TABLE(wxSTCListBoxWin, wxListBox)
+ EVT_SET_FOCUS(wxSTCListBoxWin::OnFocus)
+END_EVENT_TABLE()
+
+
+
+#else
+
+
class wxSTCListBox : public wxListBox {
public:
wxSTCListBox(wxWindow* parent, wxWindowID id)
0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER)
{}
- void OnFocus(wxFocusEvent& event) {
- GetParent()->SetFocus();
- event.Skip();
+ void OnKeyDown(wxKeyEvent& event) {
+ // Give the key events to the STC. It will then update
+ // the listbox as needed.
+ GetGrandParent()->GetEventHandler()->ProcessEvent(event);
}
private:
};
BEGIN_EVENT_TABLE(wxSTCListBox, wxListBox)
- EVT_SET_FOCUS(wxSTCListBox::OnFocus)
+ EVT_KEY_DOWN(wxSTCListBox::OnKeyDown)
+ EVT_CHAR(wxSTCListBox::OnKeyDown)
END_EVENT_TABLE()
+#undef wxSTC_USE_POPUP
+#define wxSTC_USE_POPUP 0 // wxPopupWindow just doesn't work well in this case...
+
// A window to place the listbox upon. If wxPopupWindow is supported then
// that will be used so the listbox can extend beyond the client area of the
// wxSTC if needed.
-
-#if wxUSE_POPUPWIN
+#if wxUSE_POPUPWIN && wxSTC_USE_POPUP
#include <wx/popupwin.h>
#define wxSTCListBoxWinBase wxPopupWindow
#define param2 wxBORDER_NONE // popup's 2nd param is flags
#else
#define wxSTCListBoxWinBase wxWindow
-#define param2 -1 // wxWindows 2nd param is ID
+#define param2 -1 // wxWindow's 2nd param is ID
#endif
class wxSTCListBoxWin : public wxSTCListBoxWinBase {
wxSTCListBoxWin(wxWindow* parent, wxWindowID id)
: wxSTCListBoxWinBase(parent, param2) {
lb = new wxSTCListBox(this, id);
- }
+ lb->SetCursor(wxCursor(wxCURSOR_ARROW));
+ lb->SetFocus();
+ }
void OnSize(wxSizeEvent& event) {
lb->SetSize(GetSize());
}
- void OnFocus(wxFocusEvent& event) {
- GetParent()->SetFocus();
- event.Skip();
- }
wxListBox* GetLB() { return lb; }
-#if wxUSE_POPUPWIN
+#if wxUSE_POPUPWIN && wxSTC_USE_POPUP
virtual void DoSetSize(int x, int y,
int width, int height,
int sizeFlags = wxSIZE_AUTO) {
};
BEGIN_EVENT_TABLE(wxSTCListBoxWin, wxSTCListBoxWinBase)
- EVT_SIZE (wxSTCListBoxWin::OnSize)
- EVT_SET_FOCUS (wxSTCListBoxWin::OnFocus)
+ EVT_SIZE(wxSTCListBoxWin::OnSize)
END_EVENT_TABLE()
-
+#endif
inline wxListBox* GETLB(WindowID win) {
return (((wxSTCListBoxWin*)win)->GetLB());
rc.left = 0;
if (sz.x > 400)
sz.x = 400;
- if (sz.y > 160) // TODO: Use desiredVisibleRows??
- sz.y = 160;
+ if (sz.y > 140) // TODO: Use desiredVisibleRows??
+ sz.y = 140;
rc.right = sz.x;
rc.bottom = sz.y;
return rc;
void ListBox::GetValue(int n, char *value, int len) {
wxString text = GETLB(id)->GetString(n);
- strncpy(value, text.mb_str(wxConvUTF8), len);
+ strncpy(value, wx2stc(text), len);
value[len-1] = '\0';
}
}
void Platform::DebugDisplay(const char *s) {
- wxLogDebug(wxString(s, *wxConvCurrent));
+ wxLogDebug(stc2wx(s));
}
bool Platform::IsKeyDown(int key) {
char buffer[2000];
sprintf(buffer, "Assertion [%s] failed at %s %d", c, file, line);
if (assertionPopUps) {
- int idButton = wxMessageBox(wxString(buffer, *wxConvCurrent),
- wxT("Assertion failure"),
- wxICON_HAND | wxOK);
+ /*int idButton = */
+ wxMessageBox(stc2wx(buffer),
+ wxT("Assertion failure"),
+ wxICON_HAND | wxOK);
// if (idButton == IDRETRY) {
// ::DebugBreak();
// } else if (idButton == IDIGNORE) {