]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/ustring.h
Support using GetTextExtent() with empty string to get descent in wxOSX.
[wxWidgets.git] / include / wx / ustring.h
index 68494d576721ebde298be32bb1f9768c19feeb3a..5b0d377e74d18a61718f35ddd6482f492ce6c1ef 100644 (file)
@@ -31,6 +31,13 @@ typedef wxCharTypeBuffer<wxChar32> wxU32CharBuffer;
 typedef wxScopedCharTypeBuffer<wxChar32> wxScopedU32CharBuffer;
 #endif
 
+#ifdef __VISUALC__
+    // "non dll-interface class 'std::basic_string<wxChar32>' used as base
+    // interface for dll-interface class 'wxString'" -- this is OK in our case
+    // (and warning is unavoidable anyhow)
+    #pragma warning(push)
+    #pragma warning(disable:4275)
+#endif
 
 class WXDLLIMPEXP_BASE wxUString: public std::basic_string<wxChar32>
 {
@@ -38,7 +45,6 @@ public:
     wxUString() { }
 
     wxUString( const wxChar32 *str )                            { assign(str); }
-    wxUString( const wxUString &str )                           { assign(str); }
     wxUString( const wxScopedU32CharBuffer &buf )                     { assign(buf); }
 
     wxUString( const char *str )                                { assign(str); }
@@ -193,17 +199,43 @@ public:
         return (wxUString &) base->assign( str, pos, n );
     }
 
-    wxUString &assign( wxChar32 ch )
-    {
-        std::basic_string<wxChar32> *base = this;
-        return (wxUString &) base->assign( (size_type) 1, ch );
-    }
+    // FIXME-VC6:  VC 6.0 stl does not support all types of assign functions
+    #ifdef __VISUALC6__
+        wxUString &assign( wxChar32 ch )
+        {
+            wxChar32 chh[1];
+            chh[0] = ch;
+            std::basic_string<wxChar32> *base = this;
+            return (wxUString &)base->assign(chh);
+        }
 
-    wxUString &assign( size_type n, wxChar32 ch )
-    {
-        std::basic_string<wxChar32> *base = this;
-        return (wxUString &) base->assign( n, ch );
-    }
+        wxUString &assign( size_type n, wxChar32 ch )
+        {
+            wxU32CharBuffer buffer(n);
+            wxChar32 *p = buffer.data();
+            size_type i;
+            for (i = 0; i < n; i++)
+            {
+               *p = ch;
+               p++;
+            }
+
+            std::basic_string<wxChar32> *base = this;
+            return (wxUString &)base->assign(buffer.data());
+        }
+    #else
+        wxUString &assign( wxChar32 ch )
+        {
+            std::basic_string<wxChar32> *base = this;
+            return (wxUString &) base->assign( (size_type) 1, ch );
+        }
+
+        wxUString &assign( size_type n, wxChar32 ch )
+        {
+            std::basic_string<wxChar32> *base = this;
+            return (wxUString &) base->assign( n, ch );
+        }
+    #endif // __VISUALC6__
 
     wxUString &assign( const wxScopedU32CharBuffer &buf )
     {
@@ -350,11 +382,29 @@ public:
         return (wxUString &) base->append( s, n );
     }
 
-    wxUString &append( size_type n, wxChar32 c )
-    {
-        std::basic_string<wxChar32> *base = this;
-        return (wxUString &) base->append( n, c );
-    }
+    // FIXME-VC6:  VC 6.0 stl does not support all types of append functions
+    #ifdef __VISUALC6__
+        wxUString &append( size_type n, wxChar32 c )
+        {
+            wxU32CharBuffer buffer(n);
+            wxChar32 *p = buffer.data();
+            size_type i;
+            for (i = 0; i < n; i++)
+            {
+               *p = c;
+               p++;
+            }
+
+            std::basic_string<wxChar32> *base = this;
+            return (wxUString &) base->append(buffer.data());
+        }
+    #else
+        wxUString &append( size_type n, wxChar32 c )
+        {
+            std::basic_string<wxChar32> *base = this;
+            return (wxUString &) base->append( n, c );
+        }
+    #endif // __VISUALC6__
 
     wxUString &append( wxChar32 c )
     {
@@ -528,8 +578,6 @@ public:
 
 
     // operator =
-    wxUString& operator=(const wxUString& s)
-        { return assign( s ); }
     wxUString& operator=(const wxString& s)
         { return assign( s ); }
     wxUString& operator=(const wxCStrData* s)
@@ -589,6 +637,10 @@ public:
 
 };
 
+#ifdef __VISUALC__
+    #pragma warning(pop)
+#endif
+
 inline wxUString operator+(const wxUString &s1, const wxUString &s2)
     { wxUString ret( s1 ); ret.append( s2 ); return ret; }
 inline wxUString operator+(const wxUString &s1, const char *s2)