1SDL::TTF(3) User Contributed Perl Documentation SDL::TTF(3)
2
3
4
6 SDL::TTF - True Type Font functions (libfreetype)
7
9 TTF
10
12 The constants are exported by default. You can avoid this by doing:
13
14 use SDL::TTF ();
15
16 and access them directly:
17
18 SDL::TTF::TTF_HINTING_NORMAL;
19
20 Available constants for "hinting":
21
22 • TTF_HINTING_NORMAL
23
24 • TTF_HINTING_LIGHT
25
26 • TTF_HINTING_MONO
27
28 • TTF_HINTING_NONE
29
30 Available constants for "style":
31
32 • TTF_STYLE_NORMAL
33
34 • TTF_STYLE_BOLD
35
36 • TTF_STYLE_ITALIC
37
38 • TTF_STYLE_UNDERLINE
39
40 • TTF_STYLE_STRIKETHROUGH
41
43 General methods
44 linked_version
45
46 my $version = SDL::TTF::linked_version();
47
48 This gives you the SDL::Version object which SDL_ttf lib is used on the
49 system. No prior initialization needs to be done before these function
50 is called.
51
52 Example:
53
54 use SDL::TTF;
55 use SDL::Version;
56
57 my $version = SDL::TTF::linked_version();
58
59 printf("got version: %d.%d.%d\n", $version->major, $version->minor, $version->patch);
60
61 compile_time_version
62
63 my $version = SDL::TTF::compile_time_version();
64
65 This gives you the SDL::Version object which SDL_ttf was present at
66 compile time.
67
68 init
69
70 my $success = SDL::TTF::init();
71
72 Initialize the truetype font API. This must be called before using
73 other functions in this library, except SDL::TTF::was_init and
74 SDL::TTF::linked_version. SDL does not have to be initialized before
75 this call.
76
77 Returns: 0 on success, "-1" on any error.
78
79 was_init
80
81 my $was_init = SDL::TTF::was_init();
82
83 Query the initialization status of the truetype font API. You may, of
84 course, use this before SDL::TTF::init to avoid initializing twice in a
85 row. Or use this to determine if you need to call SDL::TTF::quit.
86
87 quit
88
89 SDL::TTF::quit();
90
91 Shutdown and cleanup the truetype font API. After calling this the
92 SDL::TTF functions should not be used, excepting SDL::TTF::was_init.
93 You may, of course, use SDL::TTF::init to use the functionality again
94
95 Management functions
96 open_font
97
98 my $font = SDL::TTF::open_font($font_file, $point_size);
99
100 Load file for use as a font, at the given size. This is actually
101 "SDL::TTF::open_font_index(..., ..., $index = 0)". This can load TTF,
102 OTF and FON files.
103
104 Returns: a SDL::TTF::Font object. "undef" is returned on errors.
105
106 Example:
107
108 use SDL::TTF;
109 use SDL::TTF::Font;
110
111 my $font = SDL::TTF::open_font('arial.ttf', 24);
112
113 open_font_index
114
115 my $font = SDL::TTF::open_font($font_file, $point_size, $face_index);
116
117 This is the same as SDL::TTF::open_font, except you can specify the
118 face index of a font file containing multiple faces. This can load TTF
119 and FON files.
120
121 open_font_RW
122
123 my $font = SDL::TTF::open_font_RW($rwops_object, $free, $point_size);
124
125 This is the same as SDL::TTF::open_font, except you can pass an
126 SDL::RWOps-object. If you pass true as $free, the SDL::RWOps-object
127 will be freed by SDL_ttf library. Don't do this, perl will free this
128 object for you.
129
130 Example:
131
132 my $font = SDL::TTF::open_font_RW(SDL::RWOps->new_file($font_file, 'r'), 0, 24);
133
134 open_font_index_RW
135
136 my $font = SDL::TTF::open_font_index_RW($rwops_object, $free, $point_size, $face_index);
137
138 This is the same as SDL::TTF::open_font_index, except you can pass an
139 SDL::RWOps-object. If you pass true as $free, the SDL::RWOps-object
140 will be freed by SDL_ttf library. Don't do this, perl will free this
141 object for you.
142
143 Attributes
144 Global attributes
145
146 byte_swapped_unicode
147
148 SDL::TTF::byte_swapped_unicode( $bool );
149
150 This function tells SDL_ttf whether UNICODE (2 bytes per character)
151 text is generally byteswapped. A "UNICODE_BOM_NATIVE" or
152 "UNICODE_BOM_SWAPPED" character in a string will temporarily override
153 this setting for the remainder of that string, however this setting
154 will be restored for the next one. The default mode is non-swapped,
155 native endianness of the CPU.
156
157 Font style
158
159 get_font_style
160
161 SDL::TTF::get_font_style($font);
162
163 Returns: The style as a bitmask composed of the following masks:
164
165 • TTF_STYLE_NORMAL
166
167 • TTF_STYLE_BOLD
168
169 • TTF_STYLE_ITALIC
170
171 • TTF_STYLE_UNDERLINE
172
173 • TTF_STYLE_STRIKETHROUGH (since SDL_ttf 2.0.10)
174
175 Example:
176
177 my $style = SDL::TTF::get_font_style($font);
178
179 print("normal\n") if $style == TTF_STYLE_NORMAL;
180 print("bold\n") if $style & TTF_STYLE_BOLD;
181 print("italic\n") if $style & TTF_STYLE_ITALIC;
182 print("underline\n") if $style & TTF_STYLE_UNDERLINE;
183 print("strikethrough\n") if $style & TTF_STYLE_STRIKETHROUGH;
184
185 set_font_style
186
187 SDL::TTF::set_font_style($font, $style);
188
189 Set the rendering style of the loaded font.
190
191 Note: "TTF_STYLE_UNDERLINE" may cause surfaces created by
192 "SDL::TTF::render_glyph_*" functions to be extended vertically,
193 downward only, to encompass the underline if the original glyph metrics
194 didn't allow for the underline to be drawn below. This does not change
195 the math used to place a glyph using glyph metrics. On the other hand
196 "TTF_STYLE_STRIKETHROUGH" doesn't extend the glyph, since this would
197 invalidate the metrics used to position the glyph when blitting,
198 because they would likely be extended vertically upward. There is
199 perhaps a workaround, but it would require programs to be smarter about
200 glyph blitting math than they are currently designed for. Still,
201 sometimes the underline or strikethrough may be outside of the
202 generated surface, and thus not visible when blitted to the screen. In
203 this case, you should probably turn off these styles and draw your own
204 strikethroughs and underlines.
205
206 get_font_outline
207
208 my $outline = SDL::TTF::get_font_outline($font);
209
210 Get the current outline width of the font, in pixels.
211
212 Note: at least SDL_ttf 2.0.10 needed
213
214 set_font_outline
215
216 SDL::TTF::set_font_outline($font, $outline);
217
218 Set the outline pixel width of the loaded font. Use 0(zero) to turn off
219 outlining.
220
221 Note: at least SDL_ttf 2.0.10 needed
222
223 Font settings
224
225 get_font_hinting
226
227 my $hinting = SDL::TTF::get_font_hinting($font);
228
229 Get the current hinting setting of the loaded font.
230
231 Note: at least SDL_ttf 2.0.10 needed
232
233 Returns the hinting type matching one of the following defined values:
234
235 • TTF_HINTING_NORMAL
236
237 • TTF_HINTING_LIGHT
238
239 • TTF_HINTING_MONO
240
241 • TTF_HINTING_NONE
242
243 set_font_hinting
244
245 SDL::TTF::set_font_hinting($font, $hinting);
246
247 Set the hinting of the loaded font. You should experiment with this
248 setting if you know which font you are using beforehand, especially
249 when using smaller sized fonts. If the user is selecting a font, you
250 may wish to let them select the hinting mode for that font as well.
251
252 Note: at least SDL_ttf 2.0.10 needed
253
254 Example:
255
256 SDL::TTF::set_font_hinting($font, TTF_HINTING_LIGHT);
257
258 get_font_kerning
259
260 my $kerning_enabled = SDL::TTF::get_font_kerning($font);
261
262 Get the current kerning setting of the loaded font.
263
264 Returns: 0(zero) if kerning is disabled. A non-zero value is returned
265 when enabled. The default for a newly loaded font is enabled(1).
266
267 Note: at least SDL_ttf 2.0.10 needed
268
269 Note: This function returns wrong values: See
270 <http://bugzilla.libsdl.org/show_bug.cgi?id=973>
271
272 set_font_kerning
273
274 SDL::TTF::set_font_kerning($font, $kerning_enabled);
275
276 Set whether to use kerning when rendering the loaded font. This has no
277 effect on individual glyphs, but rather when rendering whole strings of
278 characters, at least a word at a time. Perhaps the only time to disable
279 this is when kerning is not working for a specific font, resulting in
280 overlapping glyphs or abnormal spacing within words.
281
282 Pass 0 to disable kerning, 1 to enable.
283
284 Note: at least SDL_ttf 2.0.10 needed
285
286 Font metrics
287
288 font_height
289
290 my $font_height = SDL::TTF::font_height($font);
291
292 Get the maximum pixel height of all glyphs of the loaded font. You may
293 use this height for rendering text as close together vertically as
294 possible, though adding at least one pixel height to it will space it
295 so they can't touch. Remember that SDL_ttf doesn't handle multiline
296 printing, so you are responsible for line spacing, see the
297 SDL::TTF::font_line_skip as well.
298
299 font_ascent
300
301 my $font_ascent = SDL::TTF::font_ascent($font);
302
303 Get the maximum pixel ascent of all glyphs of the loaded font. This can
304 also be interpreted as the distance from the top of the font to the
305 baseline. It could be used when drawing an individual glyph relative
306 to a top point, by combining it with the glyph's "maxy" metric to
307 resolve the top of the rectangle used when blitting the glyph on the
308 screen.
309
310 Example:
311
312 my ($minx, $maxx, $miny, $maxy, $advance) = @{ SDL::TTF::glyph_metrics($font, "\0M") };
313
314 $rect->y( $top + SDL::TTF::font_ascent($font) - $maxy );
315
316 font_descent
317
318 my $font_descent = SDL::TTF::font_descent($font);
319
320 Get the maximum pixel descent of all glyphs of the loaded font. This
321 can also be interpreted as the distance from the baseline to the bottom
322 of the font. It could be used when drawing an individual glyph
323 relative to a bottom point, by combining it with the glyph's "maxy"
324 metric to resolve the top of the rectangle used when blitting the glyph
325 on the screen.
326
327 Example:
328
329 my ($minx, $maxx, $miny, $maxy, $advance) = @{ SDL::TTF::glyph_metrics($font, "\0M") };
330
331 $rect->y( $bottom - SDL::TTF::font_descent($font) - $maxy );
332
333 font_line_skip
334
335 my $font_line_skip = SDL::TTF::font_line_skip($font);
336
337 Get the recommended pixel height of a rendered line of text of the
338 loaded font. This is usually larger than the SDL::TTF::font_height of
339 the font.
340
341 Face attributes
342
343 font_faces
344
345 my $font_faces = SDL::TTF::font_faces($font);
346
347 Get the number of faces ("sub-fonts") available in the loaded font.
348 This is a count of the number of specific fonts (based on size and
349 style and other typographical features perhaps) contained in the font
350 itself.
351
352 font_face_is_fixed_width
353
354 my $font_face_is_fixed_width = SDL::TTF::font_face_is_fixed_width($font);
355
356 Test if the current font face of the loaded font is a fixed width font.
357 Fixed width fonts are monospace, meaning every character that exists in
358 the font is the same width, thus you can assume that a rendered
359 string's width is going to be the result of "glyph_width *
360 string_length".
361
362 Returns: ">0" if font is a fixed width font. 0 if not a fixed width
363 font.
364
365 font_face_family_name
366
367 my $font_face_family_name = SDL::TTF::font_face_family_name($font);
368
369 Get the current font face family name from the loaded font. This
370 information is not for every font available.
371
372 Example:
373
374 my $font = SDL::TTF::open_font('arialuni.ttf', 8);
375
376 printf("%s\n", SDL::TTF::font_face_family_name($font)); # will print "Arial Unicode MS"
377
378 font_face_style_name
379
380 my $font_face_style_name = SDL::TTF::font_face_style_name($font);
381
382 Get the current font face style name from the loaded font. This
383 information is not for every font available.
384
385 Example:
386
387 my $font = SDL::TTF::open_font('arialuni.ttf', 8);
388
389 printf("%s\n", SDL::TTF::font_face_style_name($font)); # will print "Regular"
390
391 Glyphs
392
393 glyph_is_provided
394
395 my $glyph_is_provided = SDL::TTF::glyph_is_provided($font, $unicode_char);
396
397 Get the status of the availability of the glyph from the loaded font.
398
399 Returns: the index of the glyph in font, or 0 for an undefined
400 character code.
401
402 Note: You have to pass this unicode character either as UTF16/UCS-2 big
403 endian without BOM, or with BOM as UTF16/UCS-2 big/little endian.
404
405 Note: at least SDL_ttf 2.0.10 needed
406
407 Example:
408
409 print("We have this char!\n") if SDL::TTF::glyph_is_provided($font, "\0M");
410
411 glyph_metrics
412
413 my @glyph_metrics = @{ SDL::TTF::glyph_metrics($font, $unicode_char) };
414
415 Get desired glyph metrics of the UNICODE char from the loaded font.
416
417 See also: The FreeType2 Documentation Tutorial
418 <http://freetype.sourceforge.net/freetype2/docs/tutorial/step2.html>
419
420 Note: You have to pass this unicode character either as UTF16/UCS-2 big
421 endian without BOM, or with BOM as UTF16/UCS-2 big/little endian.
422
423 Example:
424
425 my ($minx, $maxx, $miny, $maxy, $advance) = @{ SDL::TTF::glyph_metrics($font, "\0M") };
426
427 Text metrics
428
429 size_text
430
431 my ($width, $height) = @{ SDL::TTF::size_text($font, $text) };
432
433 Calculate the resulting surface size of the LATIN1 encoded text
434 rendered using $font. No actual rendering is done, however correct
435 kerning is done to get the actual width. The height returned is the
436 same as you can get using SDL::TTF::font_height.
437
438 size_utf8
439
440 my ($width, $height) = @{ SDL::TTF::size_utf8($font, $text) };
441
442 Calculate the resulting surface size of the UTF8 encoded text rendered
443 using $font. No actual rendering is done, however correct kerning is
444 done to get the actual width. The height returned in h is the same as
445 you can get using SDL::TTF::font_height.
446
447 Note that the first example uses the same text as in the LATIN1
448 example, that is because plain ASCII is UTF8 compatible.
449
450 Examples:
451
452 ($width, $height) = @{ SDL::TTF::size_utf8($font, 'Hello World!') }; # plain text, if your script is in utf8 or ansi-format
453
454 # or
455
456 ($width, $height) = @{ SDL::TTF::size_utf8($font, "\xE4\xBB\x8A\xE6\x97\xA5\xE3\x81\xAF") }; # utf8 hex-data
457
458 # or
459
460 use Unicode::String;
461 my $unicode = utf8($data_from_somewhere);
462 ($width, $height) = @{ SDL::TTF::size_utf8($font, $unicode->utf8) }; # utf8 via Unicode::String
463
464 size_unicode
465
466 my ($width, $height) = @{ SDL::TTF::size_unicode($font, $text) };
467
468 Calculate the resulting surface size of the UNICODE encoded text
469 rendered using $font. No actual rendering is done, however correct
470 kerning is done to get the actual width. The height returned in h is
471 the same as you can get using SDL::TTF::font_height.
472
473 $text has to be:
474
475 UTF16BE without BOM
476 "hello" will look like "\0h\0e\0l\0l\0o"
477
478 UTF16BE with BOM
479 "hello" will look like "\xFE\xFF\0h\0e\0l\0l\0o"
480
481 UTF16LE with BOM
482 "hello" will look like "\xFF\xFEh\0e\0l\0l\0o\0"
483
484 You may use Unicode::String for this.
485
486 Font Rendering
487 Solid
488
489 render_glyph_solid
490
491 my $surface = SDL::TTF::render_glyph_solid($font, $char, $color);
492
493 Render the unicode encoded char onto a new surface, using the Solid
494 mode. After that you can blit this surface to your display-surface.
495
496 Note: The unicode char has to be passed exactly like for
497 SDL::TTF::size_unicode.
498
499 Note: See space-character bug <http://bugs.debian.org/cgi-
500 bin/bugreport.cgi?bug=374062>. You have to upgrade libfreetype2 to at
501 least version 2.3.5
502
503 render_text_solid
504
505 my $surface = SDL::TTF::render_text_solid($font, $text, $color);
506
507 Render the LATIN1 encoded text onto a new surface, using the Solid
508 mode. After that you can blit this surface to your display-surface.
509
510 Note: See space-character bug <http://bugs.debian.org/cgi-
511 bin/bugreport.cgi?bug=374062>. You have to upgrade libfreetype2 to at
512 least version 2.3.5
513
514 Example:
515
516 use SDL;
517 use SDL::Rect;
518 use SDL::Video;
519 use SDL::Color;
520 use SDL::TTF;
521 use SDL::TTF::Font;
522
523 SDL::init(SDL_INIT_VIDEO);
524 SDL::TTF::init();
525 my $display = SDL::Video::set_video_mode(640, 480, 32, SDL_SWSURFACE);
526 my $font = SDL::TTF::open_font('somefont.ttf', '24');
527 die 'Coudnt make font '. SDL::get_error if !$font;
528 my $surface = SDL::TTF::render_text_solid($font, 'Hello!', SDL::Color->new(0xFF,0xFF,0xFF));
529 SDL::Video::blit_surface($surface, SDL::Rect->new(0, 0, 640, 480), $display, SDL::Rect->new(10, 10, 640, 480));
530 SDL::Video::update_rect($display, 0, 0, 0, 0);
531 SDL::delay(5000);
532
533 render_utf8_solid
534
535 my $surface = SDL::TTF::render_utf8_solid($font, $text, $color);
536
537 Render the UTF8 encoded text onto a new surface, using the Solid mode.
538 After that you can blit this surface to your display-surface.
539
540 Note: See space-character bug <http://bugs.debian.org/cgi-
541 bin/bugreport.cgi?bug=374062>. You have to upgrade libfreetype2 to at
542 least version 2.3.5
543
544 render_unicode_solid
545
546 my $surface = SDL::TTF::render_unicode_solid($font, $text, $color);
547
548 Render the unicode encoded text onto a new surface, using the Solid
549 mode. After that you can blit this surface to your display-surface.
550
551 Note: The unicode test has to be passed exactly like for
552 SDL::TTF::size_unicode.
553
554 Note: See space-character bug <http://bugs.debian.org/cgi-
555 bin/bugreport.cgi?bug=374062>. You have to upgrade libfreetype2 to at
556 least version 2.3.5
557
558 Shaded
559
560 render_glyph_shaded
561
562 my $surface = SDL::TTF::render_glyph_shaded($font, $char, $color, $background_color);
563
564 Render the unicode encoded char onto a new surface. The surface is
565 filled with $background_color. After that you can blit this surface to
566 your display-surface.
567
568 Note: The unicode char has to be passed exactly like for
569 SDL::TTF::size_unicode.
570
571 render_text_shaded
572
573 my $surface = SDL::TTF::render_text_shaded($font, $text, $color, $background_color);
574
575 Render the LATIN1 encoded text onto a new surface. The surface is
576 filled with $background_color. After that you can blit this surface to
577 your display-surface.
578
579 Example:
580
581 use SDL;
582 use SDL::Video;
583 use SDL::Color;
584 use SDL::TTF;
585 use SDL::TTF::Font;
586
587 SDL::init(SDL_INIT_VIDEO);
588
589 SDL::TTF::init();
590
591 my $display = SDL::Video::set_video_mode(640, 480, 32, SDL_SWSURFACE);
592 my $font = SDL::TTF::open_font('arial.ttf', '24');
593 my $white = SDL::Color->new(0xFF, 0xFF, 0xFF);
594 my $black = SDL::Color->new(0x00, 0x00, 0x00);
595 my $surface = SDL::TTF::render_text_solid($font, 'Hello!', $white, $black);
596
597 SDL::Video::blit_surface($surface, SDL::Rect->new(0, 0, 640, 480), $display, SDL::Rect->new(10, 10, 640, 480));
598 SDL::Video::update_rect($display, 0, 0, 0, 0);
599
600 SDL::delay(5000);
601
602 render_utf8_shaded
603
604 my $surface = SDL::TTF::render_utf8_shaded($font, $text, $color, $background_color);
605
606 Render the UTF8 encoded text onto a new surface. The surface is filled
607 with $background_color. After that you can blit this surface to your
608 display-surface.
609
610 render_unicode_shaded
611
612 my $surface = SDL::TTF::render_unicode_shaded($font, $text, $color, $background_color);
613
614 Render the unicode encoded text onto a new surface. The surface is
615 filled with $background_color. After that you can blit this surface to
616 your display-surface.
617
618 Note: The unicode text has to be passed exactly like for
619 SDL::TTF::size_unicode.
620
621 Blended
622
623 render_glyph_blended
624
625 my $surface = SDL::TTF::render_glyph_blended($font, $char, $color);
626
627 Render the unicode encoded char onto a new surface. After that you can
628 blit this surface to your display-surface.
629
630 Note: The unicode char has to be passed exactly like for
631 SDL::TTF::size_unicode.
632
633 render_text_blended
634
635 my $surface = SDL::TTF::render_text_blended($font, $text, $color);
636
637 Render the LATIN1 encoded text onto a new surface. After that you can
638 blit this surface to your display-surface.
639
640 Example:
641
642 use SDL;
643 use SDL::Video;
644 use SDL::Color;
645 use SDL::TTF;
646 use SDL::TTF::Font;
647
648 SDL::init(SDL_INIT_VIDEO);
649
650 SDL::TTF::init();
651
652 my $display = SDL::Video::set_video_mode(640, 480, 32, SDL_SWSURFACE);
653 my $font = SDL::TTF::open_font('arial.ttf', '24');
654 my $surface = SDL::TTF::render_text_blended($font, 'Hello!', SDL::Color->new(0xFF,0xFF,0xFF));
655
656 SDL::Video::blit_surface($surface, SDL::Rect->new(0, 0, 640, 480), $display, SDL::Rect->new(10, 10, 640, 480));
657 SDL::Video::update_rect($display, 0, 0, 0, 0);
658
659 SDL::delay(5000);
660
661 render_utf8_blended
662
663 my $surface = SDL::TTF::render_utf8_blended($font, $text, $color);
664
665 Render the UTF8 encoded text onto a new surface. After that you can
666 blit this surface to your display-surface.
667
668 render_unicode_blended
669
670 my $surface = SDL::TTF::render_unicode_blended($font, $text, $color);
671
672 Render the unicode encoded text onto a new surface. After that you can
673 blit this surface to your display-surface.
674
675 Note: The unicode char has to be passed exactly like for
676 SDL::TTF::size_unicode.
677
679 See "AUTHORS" in SDL.
680
682 SDL::TTF::Font, Unicode::String, SDL::Video, SDL::Surface
683
684
685
686perl v5.36.0 2022-07-22 SDL::TTF(3)