| @@ -654,7 +654,10 @@ Module::draw_label ( int tx, int ty, int tw, int th ) | |||||
| { | { | ||||
| bbox( tx, ty, tw, th ); | bbox( tx, ty, tw, th ); | ||||
| const char *lp = label(); | |||||
| if ( ! label() ) | |||||
| return; | |||||
| char *lab = strdup( label() ); | |||||
| Fl_Color c = fl_contrast( FL_FOREGROUND_COLOR, bypass() ? FL_BLACK : color() ); | Fl_Color c = fl_contrast( FL_FOREGROUND_COLOR, bypass() ? FL_BLACK : color() ); | ||||
| @@ -662,27 +665,53 @@ Module::draw_label ( int tx, int ty, int tw, int th ) | |||||
| fl_font( FL_HELVETICA, labelsize() ); | fl_font( FL_HELVETICA, labelsize() ); | ||||
| int LW = fl_width( lp ); | |||||
| char *di = index( lab, '-' ); | |||||
| if ( di ) | |||||
| { | |||||
| *di = '\0'; | |||||
| } | |||||
| int LW = fl_width( lab ); | |||||
| char *s = NULL; | char *s = NULL; | ||||
| bool initial = true; | |||||
| if ( LW > tw ) | if ( LW > tw ) | ||||
| { | { | ||||
| s = new char[strlen(lp)]; | |||||
| s = new char[strlen(lab) + 1]; | |||||
| char *sp = s; | char *sp = s; | ||||
| const char *lp = lab; | |||||
| for ( ; *lp; ++lp ) | for ( ; *lp; ++lp ) | ||||
| { | |||||
| bool skip = false; | |||||
| switch ( *lp ) | switch ( *lp ) | ||||
| { | { | ||||
| case ' ': | |||||
| initial = true; | |||||
| skip = false; | |||||
| break; | |||||
| case 'i': case 'e': case 'o': case 'u': case 'a': | case 'i': case 'e': case 'o': case 'u': case 'a': | ||||
| skip = ! initial; | |||||
| initial = false; | |||||
| break; | break; | ||||
| default: | default: | ||||
| *(sp++) = *lp; | |||||
| skip = false; | |||||
| initial = false; | |||||
| break; | |||||
| } | } | ||||
| if ( ! skip ) | |||||
| *(sp++) = *lp; | |||||
| } | |||||
| *sp = '\0'; | *sp = '\0'; | ||||
| } | } | ||||
| fl_draw( s ? s : lp, tx, ty, tw, th, align() | FL_ALIGN_CLIP ); | |||||
| fl_draw( s ? s : lab, tx, ty, tw, th, align() | FL_ALIGN_CLIP ); | |||||
| free(lab); | |||||
| if ( s ) | if ( s ) | ||||
| delete[] s; | delete[] s; | ||||