On 01.02.2012 12:54, testalucida wrote:

> I'm trying to create several Fl_Output derived controls on demand and put 
> them by columns into a Fl_Double_Window. The width of each Fl_Output shall go 
> with its value, e.g. for a value "A" width should be 10 and for a value 
> "MyTestValue" it should be 110.
> The measurement of values is done in the draw() method.
>
> That works fine except for the top one: its width always is minimum.
> Can someone help me?

Maybe...

> -----------------------------------------------
>
> Here goes my code:
>
> #include<FL/Fl.H>
> #include<FL/Fl_Double_Window.H>
> #include<FL/fl_draw.H>
>
>
> class Display : public Fl_Output {
> public:
>       Display( int x, int y, int w, int h, const char *lbl ) :
>       Fl_Output(x,y,w,h,lbl)
>       {
>               textsize( 11 );
>       }
>
> protected:
>       void draw() {
>               int wi, he;

change this to

                int wi=0, he=0;

You must set at least wi=0, otherwise its (undefined) value will
be used as the maximum width you allow (for wrapping purposes).
See the docs.

>               fl_measure( this->value(), wi, he, 0 );

You must set a font before you can measure anything. This may
have been done already, but maybe not. It's a good thing to set
one here to be sure...

>               resize( x(), y(), wi + 6, h() );

It is not a good idea to resize the widget in its draw() method.
Although this *may* work, it is like asking for problems.

I suggest to change the first two issues first to see if that helps.
I didn't look closely at the rest of the code, and I didn't test it.

Albrecht
_______________________________________________
fltk mailing list
fltk@easysw.com
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to