added bitstream vera fonts, sdl console uses sdl-ttf for text rendering

cvs
Slava Pestov 2005-01-24 02:00:52 +00:00
parent 73d505339a
commit c026fd7786
7 changed files with 97 additions and 13 deletions

BIN
fonts/VeraMoBI.ttf Normal file

Binary file not shown.

BIN
fonts/VeraMoBd.ttf Normal file

Binary file not shown.

BIN
fonts/VeraMoIt.ttf Normal file

Binary file not shown.

BIN
fonts/VeraMono.ttf Normal file

Binary file not shown.

View File

@ -78,6 +78,13 @@ USE: alien
: TTF_FontFaceStyleName ( font -- n ) : TTF_FontFaceStyleName ( font -- n )
"char*" "sdl-ttf" "TTF_FontFaceStyleName" [ "void*" ] alien-invoke ; "char*" "sdl-ttf" "TTF_FontFaceStyleName" [ "void*" ] alien-invoke ;
BEGIN-STRUCT: int-box
FIELD: int i
END-STRUCT
: TTF_SizeText ( font text w h -- ? )
"bool" "sdl-ttf" "TTF_SizeText" [ "void*" "char*" "int-box*" "int-box*" ] alien-invoke ;
: TTF_RenderText_Solid ( font text fg -- surface ) : TTF_RenderText_Solid ( font text fg -- surface )
"surface*" "sdl-ttf" "TTF_RenderText_Solid" [ "void*" "char*" "int" ] alien-invoke ; "surface*" "sdl-ttf" "TTF_RenderText_Solid" [ "void*" "char*" "int" ] alien-invoke ;

View File

@ -2,7 +2,7 @@
! $Id$ ! $Id$
! !
! Copyright (C) 2004 Slava Pestov. ! Copyright (C) 2004, 2005 Slava Pestov.
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions are met: ! modification, are permitted provided that the following conditions are met:
@ -39,6 +39,9 @@ USE: prettyprint
USE: sdl-event USE: sdl-event
USE: sdl-gfx USE: sdl-gfx
USE: sdl-video USE: sdl-video
USE: streams
USE: strings
USE: sdl-ttf
SYMBOL: surface SYMBOL: surface
SYMBOL: width SYMBOL: width
@ -60,6 +63,14 @@ SYMBOL: surface
swap 16 shift bitor swap 16 shift bitor
swap 24 shift bitor ; swap 24 shift bitor ;
: make-color ( r g b -- color )
#! Make an SDL_Color struct. This will go away soon in favor
#! of pass-by-value support in the FFI.
255 24 shift
swap 16 shift bitor
swap 8 shift bitor
swap bitor ;
: black 0 0 0 ; : black 0 0 0 ;
: white 255 255 255 ; : white 255 255 255 ;
: red 255 0 0 ; : red 255 0 0 ;
@ -98,3 +109,55 @@ SYMBOL: surface
] [ ] [
drop drop
] ifte ; ] ifte ;
SYMBOL: fonts
: null? ( alien -- ? )
dup [ alien-address 0 = ] when ;
: <font> ( name ptsize -- font )
>r resource-path swap cat2 r> TTF_OpenFont ;
: font ( name ptsize -- font )
fonts get [
2dup cons get [
2nip
] [
2dup cons >r <font> dup r> set
] ifte*
] bind ;
: make-rect ( x y w h -- rect )
<rect>
[ set-rect-h ] keep
[ set-rect-w ] keep
[ set-rect-y ] keep
[ set-rect-x ] keep ;
: surface-rect ( x y surface -- rect )
dup surface-w swap surface-h make-rect ;
: draw-surface ( x y surface -- )
[
[ surface-rect ] keep swap surface get 0 0
] keep surface-rect swap rot SDL_UpperBlit drop ;
: draw-string ( x y font text fg bg -- width )
pick str-length 0 = [
2drop 2drop 2drop 0
] [
TTF_RenderText_Shaded
[ draw-surface ] keep
[ surface-w ] keep
SDL_FreeSurface
] ifte ;
: size-string ( font text -- w h )
dup str-length 0 = [
drop TTF_FontHeight 0 swap
] [
<int-box> <int-box> [ TTF_SizeText drop ] 2keep
swap int-box-i swap int-box-i
] ifte ;
global [ <namespace> fonts set ] bind

View File

@ -63,6 +63,7 @@ USE: errors
USE: line-editor USE: line-editor
USE: hashtables USE: hashtables
USE: lists USE: lists
USE: sdl-ttf
#! A namespace holding console state. #! A namespace holding console state.
SYMBOL: console SYMBOL: console
@ -78,13 +79,16 @@ SYMBOL: y
SYMBOL: output-line SYMBOL: output-line
#! A line editor object. #! A line editor object.
SYMBOL: input-line SYMBOL: input-line
#! A TTF_Font* value.
SYMBOL: console-font
#! Font height.
SYMBOL: line-height
#! The font size is hardcoded here. #! The font size is hardcoded here.
: line-height 8 ;
: char-width 8 ; : char-width 8 ;
! Scrolling ! Scrolling
: visible-lines ( -- n ) height get line-height /i ; : visible-lines ( -- n ) height get line-height get /i ;
: total-lines ( -- n ) lines get vector-length ; : total-lines ( -- n ) lines get vector-length ;
: available-lines ( -- ) total-lines first-line get - ; : available-lines ( -- ) total-lines first-line get - ;
@ -105,19 +109,20 @@ SYMBOL: input-line
total-lines fix-first-line first-line set ; total-lines fix-first-line first-line set ;
! Rendering ! Rendering
: background white rgb ; : background white ;
: foreground black rgb ; : foreground black ;
: cursor red rgb ; : cursor red ;
: next-line ( -- ) : next-line ( -- )
0 x set line-height y [ + ] change ; 0 x set line-height get y [ + ] change ;
: draw-line ( str -- ) : draw-line ( str -- )
[ surface get x get y get ] keep foreground stringColor >r x get y get console-font get r>
str-length char-width * x [ + ] change ; foreground make-color background make-color draw-string
x [ + ] change ;
: clear-display ( -- ) : clear-display ( -- )
surface get 0 0 width get height get background boxColor ; surface get 0 0 width get height get background rgb boxColor ;
: draw-lines ( -- ) : draw-lines ( -- )
visible-lines available-lines min [ visible-lines available-lines min [
@ -133,14 +138,17 @@ SYMBOL: input-line
swap swap
y get y get
over 1 + over 1 +
y get line-height + y get line-height get +
cursor boxColor ; cursor rgb boxColor ;
: draw-current ( -- ) : draw-current ( -- )
output-line get sbuf>str draw-line ; output-line get sbuf>str draw-line ;
: caret-x ( -- x ) : caret-x ( -- x )
x get input-line get [ caret get char-width * + ] bind ; x get input-line get [
console-font get caret get line-text get str-head
size-string drop +
] bind ;
: draw-input ( -- ) : draw-input ( -- )
caret-x >r caret-x >r
@ -341,7 +349,13 @@ M: alien handle-event ( event -- ? )
drop t drop t
] ifte ; ] ifte ;
: set-console-font ( font ptsize )
font dup console-font set
TTF_FontHeight line-height set ;
: init-console ( -- ) : init-console ( -- )
TTF_Init
"/fonts/VeraMono.ttf" 14 set-console-font
<event> event set <event> event set
0 first-line set 0 first-line set
80 <vector> lines set 80 <vector> lines set