Final touches to the first full version of the vector font output.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4464 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
@@ -4,8 +4,20 @@
|
||||
|
||||
|
||||
.include "tgi-kernel.inc"
|
||||
.include "tgi-vectorfont.inc"
|
||||
.include "zeropage.inc"
|
||||
|
||||
.import _strlen, _toascii
|
||||
.import umul16x16r32
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
; Aliases for zero page locations
|
||||
|
||||
Width := ptr1
|
||||
WTab := ptr2
|
||||
Text := ptr3
|
||||
|
||||
|
||||
.import _strlen, pushax, tosumula0
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
; unsigned __fastcall__ tgi_textwidth (const char* s);
|
||||
@@ -16,12 +28,75 @@
|
||||
; Result is strlen (s) * tgi_textmagw * tgi_fontsizex
|
||||
;
|
||||
|
||||
.code
|
||||
.proc _tgi_textwidth
|
||||
|
||||
ldy _tgi_font
|
||||
bne @L1 ; Jump if vector font
|
||||
|
||||
; Return the width of the string for the bitmap font
|
||||
|
||||
jsr _strlen
|
||||
jsr pushax
|
||||
sta ptr1
|
||||
stx ptr1+1
|
||||
lda _tgi_charwidth
|
||||
jmp tosumula0
|
||||
ldx #0
|
||||
jmp umul16x16r32
|
||||
|
||||
; Return the width of the string for the vector font. To save some code, we
|
||||
; will add up all the character widths and then multiply by the scale factor.
|
||||
; Since the output routine will scale each single character, the result may
|
||||
; be slightly different.
|
||||
|
||||
@L1: sta Text
|
||||
stx Text+1 ; Save pointer to string
|
||||
|
||||
lda _tgi_vectorfont+1
|
||||
tax
|
||||
ora _tgi_vectorfont
|
||||
beq @L9 ; Return zero if no font
|
||||
|
||||
lda _tgi_vectorfont
|
||||
clc
|
||||
adc #<(TGI_VECTORFONT::WIDTHS - TGI_VF_FIRSTCHAR)
|
||||
sta WTab
|
||||
txa
|
||||
adc #>(TGI_VECTORFONT::WIDTHS - TGI_VF_FIRSTCHAR)
|
||||
sta WTab+1
|
||||
|
||||
ldy #0
|
||||
sty Width
|
||||
sty Width+1 ; Zero the total width
|
||||
|
||||
; Sum up the widths of the single characters
|
||||
|
||||
@L2: ldy #0
|
||||
lda (Text),y ; Get next char
|
||||
beq @L4 ; Bail out if end of text reached
|
||||
jsr _toascii ; Convert to ascii
|
||||
tay
|
||||
lda (WTab),y ; Get width of this char
|
||||
clc
|
||||
adc Width
|
||||
sta Width
|
||||
bcc @L3
|
||||
inc Width+1
|
||||
@L3: inc Text
|
||||
bne @L2
|
||||
inc Text+1
|
||||
bne @L2
|
||||
|
||||
; We have the total width now, scale and return it
|
||||
|
||||
@L4: lda _tgi_textscalew
|
||||
ldx _tgi_textscalew+1
|
||||
jmp tgi_imulround
|
||||
|
||||
; Exit point if no font installed
|
||||
|
||||
@L9: rts
|
||||
|
||||
.endproc
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user