Greg Ercolano wrote:
> Greg Ercolano wrote:
>> Can I suggest if API changes are made that affect existing code,
>> to derive a new widget (eg. Fl_Scroll2, Fl_Scroll_Ex..) or some such?
-1 from me, because this would mean that all the actively maintained
code would have to be changed to get the improvements and bug fixes. But
see below ...
> I'm just concerned that unmodified old apps will still compile OK,
> but will behave strangely. Would be good if we could discuss ways
> to avoid this, if possible.
This is also a point for Fl_Scroll::scroll_to(). The change fixes bad
behavior (or should I say properties?) of FLTK, but it breaks existing
code (mine, for example). In fact everybody's code who used
Fl_Scroll::position(int x, int y) to change the scrolling (and not the
widget's) position.
>> As Stan said: We should get rid of this undocumented and undefined behavior.
>>
>> And, since it's not documented, we "wouldn't break contracts", as Greg
>> said some time ago (IIRC).
>
> Heh, it's true this behavior is undocumented, so /technically/ it's
> not breaking contract to make the change.
>
> However, the fact it's undocumented in this case I think has more to do
> with it being a doc omission, likely because the fltk documentation style
> is not to document methods for base widgets in high level widgets *unless*
> the methods are overridden. Here the methods aren't overridden, but
> paradoxically behave differently in Fl_Scroll due to the widget's
> internals.
Yes, this is really a bug. This could have been fixed by subtracting 2
from the internal value of the children() method
int Fl_Scroll::children() { return Fl_Group::children()-2; }.
And if the scrollbars would have been sorted to the end after each
modification of the children array (they did _not_, you would have had
to call (re)draw() or resize() first), then nobody would have had to
care ...
> In truth, I think anyone that's ever had to use child() and children()
> in the context of Fl_Scroll /had/ to encounter this and code around,
> either by RTSL or by asking the group and getting an answer of
> 'yes, you have to skip the scrollbars..'. It's certainly been asked
> and answered on the group enough to be considered 'documented'.
Yes, I don't know how I found it, but I new it too. ;-)
> To my knowledge, this is the first time fltk will have made a change
> to a base level widget, so I think it wise to at least carefully
> consider options that avoid silently breaking old code if possible.
>
> I'm not dead set against the improvement, I just think some discussion
> about if there's a way to make such a change while minimally impacting
> old code would be a worthy exercise.
I can imagine to have a compatibility mode (#define
FLTK_1_1_COMPATIBILITY) that adds 2 to the children() method. That would
be easy :-) But then, if someone used code like
Fl_Scrollbar *my_hscrollbar = scroll->child(scroll->children()-1);
we couldn't help ;-)
Adding the old Fl_Scroll::position(int,int) method would be a simple
inliner in Fl_Scroll.H.
Could this be what you want?
But I don't think that having utf-8 doesn't affect anybody's code. In my
german language code there are lots of german Umlauts (äöüÄÖÜ) and the
sharp s (ß) that don't display correctly now with FLTK 1.3 (they are
ISO-8859-1 encoded). Although I think that I read that they should be
recognized and "translated" automagically, but maybe I'm wrong. Adding
conversion functions or translating the character constants to utf-8
would be my other options. And I didn't think about input characters yet...
BTW: Nothing has been decided yet, but I would really, really hope that
we decide to fix this. And it is good that we discuss this now - that
was one of the reasons why I wrote it in my CHANGES.branch file that
Fabien cited.
Albrecht
_______________________________________________
fltk-dev mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-dev