On Tue, 2010-05-18 at 13:30 -0400, Ivica Ico Bukvic wrote:
All right, the following fixes scrolling on Linux once and for all. It should be also wrapped in a way that does not disturb Win and OSX (even though they are in a need of the same fix).
Please note the following applies to: Linux/OSX/Windows Pd 0.42.5 vanilla and extended Tcl/Tk 8.4 & 8.5
Basically, text is incorrectly reported by bbox all call so it screws scrollbars up. E.g. try the attached problem_1.pd patch and you'll notice there are vertical scrollbars even though there shouldn't be any. This makes tight GUI crafting a real pain. Also, please note that on smaller font sizes the problem is less apparent but nonetheless still there.
Solution: calculating text size separately from other objects to obtain total box size. This, however, has to be done *per font* due to tcl/tk's buggy implementation.
Attached patch also reinvokes getscrollbar after cut/paste/undo/redo (undo/redo is patched in g_editor.c as otherwise it occurs out of sync before undo/redo has been processed in g_editor.c, resulting in a erroneous scroll position).
The current scrolling algorithm should to the best of my knowledge pass all the existing test Hans has listed on his gui-rewrite page with one notable difference:
This approach assumes that the canvas should always fit objects the best it can to avoid using scrollbars (unlike traditional approach that has an invisible center around 0 0). This does sometimes result in patch shifting a bit off-center (but never outside the view unless the entire patch is too large to fit the saved window size)--this is due to the fact that currently Pd has no way of telling from the saved file where the viewport should be. This can be easily circumvented using the cnv object which still yields IMHO better results than the traditional system.
Cheers!
Ico
Oops, forgot to include the right pd.tk patch. This one includes proper realignment of the pop-up window (right-click), plus something I found rather handy, the windows that pop-up always appear next to the mouse cursor, rather than a random place on-screen.
So, attached are all the files, plus the correct pd.tk patch. Hence, please disregard patches I sent out in my previous email.
Best wishes,
Ico