This module contains VTView operations that investigate the buffer's representation on the screen.
INTERFACEComputes the characteristics of a screen line starting atVTBase ; IMPORT Point, Rd, Thread; IMPORT VTDef; TYPE View = VTDef.View; Pixels = VTDef.Pixels; I = VTDef.I; LineNo = VTDef.LineNo; VirtualStart = VTDef.VirtualStart; PROCEDURE ComputeLine ( view : View; avail : Pixels; from : I; VAR (* OUT*) max : I; VAR (* OUT*) turned: BOOLEAN; VAR (* OUT*) width : Pixels ): I RAISES {Rd.EndOfFile, Rd.Failure, Thread.Alerted};
from
;
returns the index after the end. (From
is believed to be at the
beginning of a screen line.) Avail
is the available width in pixels.
Max
is set to the index after the last character examined to make the
decision (the first was from
). Turned
is set to whether the end of
the screen line is turned (if the screen line does not end in a new-line
and is not at the end of the buffer). Width
is set to the width in
pixels needed to display the text.
PROCEDURE Up ( view : View; avail: Pixels; place: I; n : CARDINAL; VAR (* OUT*) start: VirtualStart) RAISES {Rd.EndOfFile, Rd.Failure, Thread.Alerted};Computes the beginning of the screen line
n
lines above the screen
line that place
is on. (Place
is not believed to be at the beginning
of a screen line.) Avail
is the available width in pixels. Min
and
max
are set to a half-open interval that includes a set of buffer
positions that imply this result.
Turned
is set to whether the beginning of that screen line is turned
(if the screen line is not preceded by a new-line and is not at the
beginning of the buffer). If fewer than n
screen lines exist, the
beginning of the buffer is returned. The array line
is filled in with
the virtual line info for the lines up to and including place
; lines
<= n
.
PROCEDURE Down (view: View; from: I; n: CARDINAL): I RAISES {Rd.EndOfFile, Rd.Failure, Thread.Alerted};Computes the beginning of the screen line
n
lines below the screen
line that from
is on. (From
is believed to be at the beginning of a
screen line.) If fewer than n
screen lines exist, the end of the
buffer is returned.
PROCEDURE UnsafeLocateLine (view: View; place: I): INTEGER RAISES {};Computes the screen line number in the view that
place
is on (i.e., if
there were a caret at place
, the screen line on which it would
appear). (Place is not believed to be at the beginning of a screen
line.) If place
is above the view, -1 is returned; if place
is below
the view, -2 is returned. UnsafeLocateLine can be called only when the
virtual
structure is not dirty, hence its name.
PROCEDURE UnsafeLocatePoint ( view : View; place: I; VAR (* OUT*) p : Point.T; off : CARDINAL := 1) RAISES {Rd.EndOfFile, Rd.Failure, Thread.Alerted};Computes the position in the view that
place
appears (i.e., if there
were a caret at place
, the screen line on which it would appear).
(Place is not believed to be at the beginning of a screen line.) The
coordinate is in absolute screen coordinates, and refers to the
northwest corner of the character at place
. If place
is above the
view, p.v is set to -1 and p.h is arbitrary; if place
is below the
view, p.v is set to -2 and p.h is arbitrary. UnsafeLocatePoint can be
called only when the virtual
structure is not dirty, hence its name.
If off
is zero, UnsafeLocatePoint returns the right edge of the
character instead of the left.
END VTBase.