]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/stattext.cpp
no message
[wxWidgets.git] / src / gtk1 / stattext.cpp
index 752196f45593d56b528dbe340ef11e49b2265875..b05d93c32cd2f558b367038fca6b67fcf206fdd4 100644 (file)
@@ -23,14 +23,14 @@ IMPLEMENT_DYNAMIC_CLASS(wxStaticText,wxControl)
 
 wxStaticText::wxStaticText(void)
 {
-};
+}
 
 wxStaticText::wxStaticText( wxWindow *parent, wxWindowID id, const wxString &label, 
       const wxPoint &pos, const wxSize &size, 
       long style, const wxString &name )
 {
   Create( parent, id, label, pos, size, style, name );
-};
+}
 
 bool wxStaticText::Create( wxWindow *parent, wxWindowID id, const wxString &label, 
       const wxPoint &pos, const wxSize &size, 
@@ -42,7 +42,9 @@ bool wxStaticText::Create( wxWindow *parent, wxWindowID id, const wxString &labe
   
   PreCreation( parent, id, pos, size, style, name );
   
-  m_widget = gtk_label_new( label );
+  wxControl::SetLabel(label);
+  m_widget = gtk_label_new( m_label );
+
   GtkJustification justify;
   if ( style & wxALIGN_CENTER )
     justify = GTK_JUSTIFY_CENTER;
@@ -52,8 +54,40 @@ bool wxStaticText::Create( wxWindow *parent, wxWindowID id, const wxString &labe
     justify = GTK_JUSTIFY_LEFT;
   gtk_label_set_justify(GTK_LABEL(m_widget), justify);
   
-  if (newSize.x == -1) newSize.x = gdk_string_measure( m_widget->style->font, label );
-  if (newSize.y == -1) newSize.y = 26;
+   int y = 1;
+   if (newSize.x == -1) {
+     char *s = WXSTRINGCAST m_label;
+     char *nl = strchr(s, '\n');
+     if (nl) {
+       do {
+         *nl = 0;
+         int x = gdk_string_measure( m_widget->style->font, s );
+         if (x > newSize.x) {
+           newSize.x = x;
+         }
+         *nl++ = '\n';
+         if ((nl = strchr(s = nl, '\n'))) {
+           ++y;
+         } else {
+           int x = gdk_string_measure( m_widget->style->font, s );
+           if (x > newSize.x) {
+             newSize.x = x;
+           }
+         }
+       } while (nl);
+     } else {
+       newSize.x = gdk_string_measure( m_widget->style->font, label );
+     }
+   }
+   if (newSize.y == -1) {
+     if (y == 1) {
+       newSize.y = 26;
+     } else {
+       newSize.y
+         = y * (m_widget->style->font->ascent +m_widget->style->font->descent);
+     }
+   }
+  
   SetSize( newSize.x, newSize.y );
   
   PostCreation();
@@ -61,17 +95,19 @@ bool wxStaticText::Create( wxWindow *parent, wxWindowID id, const wxString &labe
   Show( TRUE );
     
   return TRUE;
-};
+}
 
 wxString wxStaticText::GetLabel(void) const
 {
-  char *str = NULL;
+  char *str = (char *) NULL;
   gtk_label_get( GTK_LABEL(m_widget), &str );
   wxString tmp( str );
   return tmp;
-};
+}
 
 void wxStaticText::SetLabel( const wxString &label )
 {
-  gtk_label_set( GTK_LABEL(m_widget), label );
-};
+  wxControl::SetLabel(label);
+
+  gtk_label_set( GTK_LABEL(m_widget), m_label );
+}