Hey Paul,

regarding the attached code: why do you expect a call to clear-output-record when it is only moved around? how the issue is visible in the attached code (except for that (trace clear-output-record) doesn't yield anything).

Just noting that LispWorks CLIM calls clear-output-record restoring the previously drawn area. That may be from LispWorks CLIM using redisplay-output-record ,as shown in the following trace, which is supposed to take care to restore anything previously covered. I don't a clear understanding of how all this works as yet.

UTEST 5 > (testme)
0 CLEAR-OUTPUT-RECORD > ...
  >> CLIM-INTERNALS::RECORD : #<STANDARD-TREE-OUTPUT-HISTORY /x 0:0 y 0:0/ 22B34603>
0 CLEAR-OUTPUT-RECORD < ...
  << VALUE-0 : 0
draw-unit #<TEST-UNIT <150 150>>
--draw-circle
draw-unit #<TEST-UNIT <250 50>>
--draw-circle

Now I click right once.

0 REDISPLAY-OUTPUT-RECORD > ...
  >> CLIM-INTERNALS::RECORD            : #<STANDARD-UPDATING-OUTPUT-RECORD /x 0:301 y 0:301/ 22D6E923>
  >> STREAM                            : #<EXAMPLE-PANE 22E3274B>
  >> CLIM-INTERNALS::CHECK-OVERLAPPING : T
  1 CLEAR-OUTPUT-RECORD > ...
    >> CLIM-INTERNALS::RECORD : #<STANDARD-UPDATING-OUTPUT-RECORD /x 0:301 y 0:301/ 22D6E923>
  1 CLEAR-OUTPUT-RECORD < ...
    << VALUE-0 : 0
draw-unit #<TEST-UNIT <145.0 150>>
  1 CLEAR-OUTPUT-RECORD > ...
    >> CLIM-INTERNALS::RECORD : #<STANDARD-UPDATING-OUTPUT-RECORD /x 140.0:162.0 y 140.0:162.0/ 22C61A13>
  1 CLEAR-OUTPUT-RECORD < ...
    << VALUE-0 : NIL
  1 CLEAR-OUTPUT-RECORD > ...
    >> CLIM-INTERNALS::RECORD : #<STANDARD-PRESENTATION UNIT #<TEST-UNIT <145.0 150>> /x 140.0:162.0 y 140.0:162.0/ 22C60F2F>
  1 CLEAR-OUTPUT-RECORD < ...
    << VALUE-0 : NIL
--draw-circle
draw-unit #<TEST-UNIT <250 50>>
0 REDISPLAY-OUTPUT-RECORD < ...
  << VALUE-0 : NIL


On 2/1/2022 5:23 AM, Daniel Kochmański wrote:
Mind that recently I rewrote parts of the incremental redisplay to fix some issues - I'm not sure whether these changes are already propagated to quicklisp.

I don't use quicklisp but do use github desktop to check on things. I found a bunch of changes yesterday and found that my hack of calling the display function for redisplay now works where before changes made to the display were computed but not shown on the screen. I had observed a lot of stuff in the output record cache that I could not account for which is now gone.

btw when you draw the border it makes the window bigger with each iteration, because the line thickness is 1 and it is not filled, so drawing (x1 y1 x2 y2) actually covers the area (x1 y1 x2+1 y2+1).

I had not even noticed that problem! Thanks for the info.
As of the second issue, could you supply a code that triggers the issue? Thanks!
That would be redisplay-frame-pane causing infinite recursion. I shall work something up.

Thanks for looking at this.

Paul