[PD] GUI and DSP

Hans-Christoph Steiner hans at at.or.at
Mon Feb 13 00:10:43 CET 2012

On Feb 12, 2012, at 1:23 PM, Ivica Ico Bukvic wrote:

>> Well, yes, I have them, but it's not very relevant, as I already know that
>> those changes make Pd really worse in too many cases.
>> The interface common to all item-types has a function to return one
>> bbox
>> (bounding-box : x1 y1 x2 y2). It is assumed that the whole bbox has to be
>> redrawn whenever any aspect of the item has changed. For long
>> diagonal
>> lines, this means a damn lot of stuff that isn't even close to the line.
>> I didn't change this.
>> Then this info is centralised as a single bbox that tells which part of
>> the canvas to redraw. There's only one. In my diff, I replace this by a
>> grid each representing a 8x8 or 32x32 zone, I don't remember what
>> precise
>> size. But that was all, and this caused draw-commands to be duplicated
>> many times the way I did it, because I drew each zone separately with a
>> clipmask. There would have been other ways to reduce the waste, some
>> involving redrawing multiple zones at once in the grid system, and some
>> involving handling multiple bboxes at once and merging them into
>> something
>> that is not a bbox.
>> I also had other ideas, such as making items modify the grid instead of
>> returning a bbox, which would greatly speed up things like diagonal lines
>> and perhaps pd's arrays (any item in which the bbox has a much greater
>> area than the item).
> I think a lot of this would be alleviated for the most part if not entirely if:
> 1) pd completely removed redrawing logic from the c code and migrated it into tcl (which is what you may have done in great part already inside desire-data)
> 2) pd used a different toolkit that allowed for more intelligent addressing of individual gui components (again, JUCE IMO comes at the very top here)

I agree.  I think a lot of this can be done incrementally.  Basically, take a chunk of logic and refactor it so that Tcl/Tk handles the GUI stuff and pd sends pd messages rather than lines of Tcl.  One example of where that could be done is the key press/release handling code.  Right now, there is a lot of code for this in g_canvas.c.  It is possible that the tag/move code could also be done this way.



I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone."  --Bjarne Stroustrup (creator of C++)

More information about the Pd-list mailing list