|
This technical note will point out some bugs (and possible workarounds), and
other items of interest for the TextEdit programmer.
[Mar 01 1988]
|
TESelRect
Multiple line selections are often more complex shapes than simple rectangles.
If this is the case, the teSelRect field of the TERec is set
to the last (bottommost) rectangle in the selection. The teHiHook is
called to invert each line of the selection.
The ROM limits the selection range (i.e. the lines that get set into
teSelRect ) to only those lines which will fit into the
viewRect . This means that teSelRect will be left at the last
visible line. (The old 64K ROMs made all the calls for the complete selection
and just let clipping take care of the rest.)
Back to top
TEDoText
The parameters of this special hook into TextEdit need a little additional
explanation. D3 and D4 are described on page 391 of Inside
Macintosh Volume I as being the first and last characters to be redrawn.
This is true but specific to the -1 "DoDraw " case. In fact, all the
calls to TEDoText are interested in these first and last character
positions. They determine the selection for a (1) highlight call, the caret
position for a (-2) DoCaret call (where D4 is ignored as it's
assumed to equal D3 ), etc.
Note that the DoCaret (-2) call behaves differently than described in
Inside Macintosh, as well. Good old page 391 says it sets up the pen
position for caret drawing. Since an InvertRect call is used to draw
the caret if you use the default teCarHook , the ROMs just set up
teSelRect , they don't bother with the QuickDraw pen.
Back to top
TEScrpLength
Inside Macintosh describes TEScrpLength as a long integer; indeed,
four bytes are reserved for this value with the intent of someday using that
range of values. However, the ROMs use word operations in their accesses to
TEScrpLength and make word calculations with it. This means that the
high word of TEScrpLength is used for calculations. This is something
to watch out for.
Back to top CharWidth
Inside Macintosh says that CharWidth takes stylistic variations
into account when determining the width of a character. In fact, for
italic and outlined styles the extra width is not taken into
account. TextEdit relies on CharWidth for positioning of the caret,
etc. If you have chosen to use, for instance, italic style in your TE record
you will find that as you type the caret actually overlaps the character to the
left and so when the caret is erased some of that character will get erased,
too. This is somewhat disconcerting to the user but the program will still
function correctly.
Back to top Clikloops
If you add your own click loop and try to do something like update scroll bars
you may run into trouble. Before your routine gets called, TextEdit will have
set clipping down to just the viewRect . You will have to save away the
old clipping region, set it out to sufficient size (-32767, -32767, 32767,
32767 is probably OK), do your drawing, then restore TextEdit's clipping area
so that it can function properly.
Back to top
References
TextEdit
M.TE.TEScrollBug
M.TE.EOLAmbiguity
M.TE.TextEditBugs
Back to top
Downloadables
|
Acrobat version of this Note (48K).
|
Download
|
|