[Oberon] FPGA - DIY Dialogs

Tomas Kral thomas.kral at email.cz
Wed Jan 23 20:37:42 CET 2019


On Mon, 21 Jan 2019 19:55:34 +0100
Tomas Kral <thomas.kral at email.cz> wrote:

> I realise I need a context switch to move from one to the other
> dialog.

I can now move dialogs, overlapping ones as well. I have introduced
`frame' field to object type, that does object binding to a particular
frame.
So far avoiding another list of frame pointers.

Moving now, does not seem complicated.

  PROCEDURE Move*(o: Object; dx, dy: INTEGER);
    VAR f: Object;
  BEGIN f := o.frame;
    WHILE (o # NIL) & (o.frame = f) DO INC(o.x, dx); INC(o.y, dy); o :=
    o.next END
  END Move;

Bring to top takes slightly more coding, also need a global `top'
pointer.

  PROCEDURE BringToTop*(o: Object);
    VAR f, p: Object;
  BEGIN 
    IF o # top THEN Top(o); f := o.frame; p := o; cnt := o.id-1;
      WHILE (o # NIL) & (o.frame = f) DO p := p.next; Unlink(o);
Insert(o); o := p END
    END
  END BringToTop;

With additional list, the above would take only swapping two node
pointers in a list, but all other procedures, would need double list
traversal. Not sure what is better.

The graphics is not completely flicker-free, but on the other hand, does
not need offscreen bitmaps.

I could try evaluate rectangle intersections in a list, and redraw only
overlapping frames, the others would just need display copy block, or
leave in position as is.

Not sure just testing.

-- 
Tomas Kral <thomas.kral at email.cz>


More information about the Oberon mailing list