nicholaA@moravian.EDU (09/08/89)
Subj: List Manager scrolling speed cure 89-08-31 21:38:22 EDT
From: JimMensch Msgs: 1 (89-08-31)
Recently in a conference someone asked about list manager scrolling speed and
how to make it faster for large lists. Below is source code to a custom draw
proc that is faster than the standard. It is faster because it tests to see if
the item being drawn is in the clip region before making any drawing calls. For
wide items this improves scrolling speed by about 100%. Any questions?
------------------------------------------------------------------
MyListDraw Start
; This routine draws a member
top equ 0
left equ top+2
bottom equ left+2
right equ bottom+2
rgnBounds equ 2
;
oldDPage equ 1
theRTL equ oldDPage+2
listHand equ theRTL+3
memPtr equ listHand+4
theRect equ memPtr+4
using globals
phd
tsc
tcd
pha
pha
_getClipHandle
PullLong listHand
ldy #2
lda [listhand],y
tax
lda [listhand]
sta listhand
stx listhand+2
lda [therect] ; now test the top
dec a ; adjust and give a little slack
ldy #rgnbounds+bottom
cmp [listhand],y ; rgnRectBottom>=top?
blt skip2
brl NoDraw ; if not don't draw..
Skip2 ldy #bottom ; now see if the bottom is higher than th
inc a ; give a little slack...
lda [therect],y
ldy #rgnBounds+top
cmp [listhand],y
blt NoDraw
NoTest NOP
PushLong theRect
_EraseRect ; erase the old rectangle...
ldy #left
lda [theRect],y
tax
ldy #bottom
lda [theRect],y
dec a
phx
pha
_MoveTo
ldy #2
lda [memptr],y
pha
lda [memptr]
pha
_DrawString
ldy #4
lda [memPtr],y
and #$00C0 ; strip the 6 and 7 bits
beq memDrawn ; if they are both 0 the member is drawn
cmp #$0080 ; member selected?
bne noSelect ; member not selectable...
PushLong theRect
_InvertRect
bra memDrawn
; if we get here the member is disabled...
noSelect PushLong #DimMask
_SetPenMask
PushLong theRect
_EraseRect
PushLong #NorMask
_SetPenMask
memDrawn NOP
; exit here
pld
sep #$20
longa off
pla
ply
plx
plx
plx
plx
plx
plx
phy
pha
rep #$20
longa on
rtl
DimMask dc i1'$55,$AA,$55,$AA,$55,$AA,$55,$AA'
NorMask dc i1'$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF'
---------------------------------------------------------------------
Just thought some people might be interested...
andy