]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/stc/PlatWX.cpp
use default position, not 0, 0
[wxWidgets.git] / contrib / src / stc / PlatWX.cpp
index 4b983f1cd6f27ca3fa90793f15680203f6ba68be..8408f88a72b0cf311b2772b1696ac3cc06a963bc 100644 (file)
 #include "wx/stc/stc.h"
 
 
-#ifdef __WXGTK__
-#include <gtk/gtk.h>
-#endif
-
-
 Point Point::FromLong(long lpoint) {
     return Point(lpoint & 0xFFFF, lpoint >> 16);
 }
@@ -40,7 +35,9 @@ PRectangle PRectangleFromwxRect(wxRect rc) {
 
 wxColour wxColourFromCA(const ColourAllocated& ca) {
     ColourDesired cd(ca.AsLong());
-    return wxColour(cd.GetRed(), cd.GetGreen(), cd.GetBlue());
+    return wxColour((unsigned char)cd.GetRed(),
+                    (unsigned char)cd.GetGreen(),
+                    (unsigned char)cd.GetBlue());
 }
 
 //----------------------------------------------------------------------
@@ -804,6 +801,14 @@ public:
         event.Skip();
     }
 
+#ifdef __WXMAC__
+    virtual bool Show(bool show = true) {
+        bool rv = wxWindow::Show(show);
+        GetParent()->Refresh(false);
+        return rv;
+    }
+#endif
+    
     void OnActivate(wxListEvent& WXUNUSED(event)) {
         doubleClickAction(doubleClickActionData);
     }
@@ -1015,7 +1020,8 @@ void ListBoxImpl::GetValue(int n, char *value, int len) {
 
 void ListBoxImpl::RegisterImage(int type, const char *xpm_data) {
     wxMemoryInputStream stream(xpm_data, strlen(xpm_data)+1);
-    wxBitmap bmp(wxImage(stream, wxBITMAP_TYPE_XPM));
+    wxImage img(stream, wxBITMAP_TYPE_XPM);
+    wxBitmap bmp(img);
 
     if (! imgList) {
         // assumes all images are the same size
@@ -1249,25 +1255,46 @@ double ElapsedTime::Duration(bool reset) {
 //----------------------------------------------------------------------
 
 #if wxUSE_UNICODE
+
+#include "UniConversion.h"
+
+// Convert using Scintilla's functions instead of wx's, Scintilla's are more
+// forgiving and won't assert...
+
 wxString stc2wx(const char* str, size_t len)
 {
-    // note: we assume that str is of length len not including the terminating null.
-
     if (!len)
         return wxEmptyString;
-    else if (str[len-1] == 0)
-        // It's already terminated correctly.
-        return wxString(str, wxConvUTF8, len);
 
-    char *buffer=new char[len+1];
-    strncpy(buffer, str, len);
-    buffer[len]=0;
+    size_t wclen = UCS2Length(str, len);
+    wxWCharBuffer buffer(wclen+1);
+
+    size_t actualLen = UCS2FromUTF8(str, len, buffer.data(), wclen+1);
+    return wxString(buffer.data(), actualLen);
+}
+
 
-    wxString cstr(buffer, wxConvUTF8, len);
 
-    delete[] buffer;
-    return cstr;
+wxString stc2wx(const char* str)
+{
+    return stc2wx(str, strlen(str));
 }
+
+
+const wxWX2MBbuf wx2stc(const wxString& str)
+{
+    const wchar_t* wcstr = str.c_str();
+    size_t wclen         = str.length();
+    size_t len           = UTF8Length(wcstr, wclen);
+
+    wxCharBuffer buffer(len+1);
+    UTF8FromUCS2(wcstr, wclen, buffer.data(), len);
+
+    // TODO check NULL termination!!
+
+    return buffer;
+}
+
 #endif