annotate libvo/font_load_ft.c @ 24787:02535b3216c5

Avoid text deformation and subtitles moving outside the screen in pan-and-scan mode. For this, crop amounts are passed from vo_gl as negative margins sizes. They are used to calculate aspect ratio. They are ignored when calculating subtitle positions, so subtitles will stay on screen most of the time. Based on a patch by Jindrich Makovicka [makovick gmail com].
author eugeni
date Fri, 19 Oct 2007 18:16:23 +0000
parents 76f5d8892c04
children 419d6e4bf2f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1 /*
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
2 * Renders antialiased fonts for mplayer using freetype library.
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
3 * Should work with TrueType, Type1 and any other font supported by libfreetype.
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
4 *
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
5 * Artur Zaprzala <zybi@fanthom.irc.pl>
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
6 *
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
7 * ported inside mplayer by Jindrich Makovicka
20646
ab2a5307c029 changed email address
henry
parents: 19847
diff changeset
8 * <makovick@gmail.com>
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
9 *
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
10 */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
11
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
12 #include "config.h"
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
13
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
14 #include <stdio.h>
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
15 #include <stdlib.h>
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
16 #include <math.h>
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
17 #include <string.h>
7147
0541f7fb59bf libgen.h is glibc specific, and not used at all -> removed
arpi
parents: 7140
diff changeset
18
17931
ed9950b8200d The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents: 17566
diff changeset
19 #ifdef USE_ICONV
7147
0541f7fb59bf libgen.h is glibc specific, and not used at all -> removed
arpi
parents: 7140
diff changeset
20 #include <iconv.h>
17931
ed9950b8200d The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents: 17566
diff changeset
21 #endif
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
22
11500
b4fcb6c47942 freetype build fix
henry
parents: 10272
diff changeset
23 #include <ft2build.h>
b4fcb6c47942 freetype build fix
henry
parents: 10272
diff changeset
24 #include FT_FREETYPE_H
b4fcb6c47942 freetype build fix
henry
parents: 10272
diff changeset
25 #include FT_GLYPH_H
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
26
11580
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
27 #ifdef HAVE_FONTCONFIG
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
28 #include <fontconfig/fontconfig.h>
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
29 #endif
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
30
21372
1767c271d710 Remove bswap.h, use libavutil/bswap.h instead.
diego
parents: 21161
diff changeset
31 #include "libavutil/common.h"
21507
fa99b3d31d13 Hack around libavutil/bswap.h compilation problems due to always_inline undefined.
reimar
parents: 21501
diff changeset
32 #include "mpbswap.h"
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
33 #include "font_load.h"
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
34 #include "mp_msg.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13632
diff changeset
35 #include "mplayer.h"
24242
76f5d8892c04 Clean up the way get_path is handled: Compile get_path.c to an object to link
diego
parents: 23634
diff changeset
36 #include "get_path.h"
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
37 #include "osd_font.h"
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
38
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
39 #if (FREETYPE_MAJOR > 2) || (FREETYPE_MAJOR == 2 && FREETYPE_MINOR >= 1)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
40 #define HAVE_FREETYPE21
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
41 #endif
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
42
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
43 char *subtitle_font_encoding = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
44 float text_font_scale_factor = 5.0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
45 float osd_font_scale_factor = 6.0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
46 float subtitle_font_radius = 2.0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
47 float subtitle_font_thickness = 2.0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
48 // 0 = no autoscale
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
49 // 1 = video height
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
50 // 2 = video width
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
51 // 3 = diagonal
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
52 int subtitle_autoscale = 3;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
53
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
54 int vo_image_width = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
55 int vo_image_height = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
56 int force_load_font;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
57
8635
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 8123
diff changeset
58 int using_freetype = 0;
11584
alex
parents: 11580
diff changeset
59 int font_fontconfig = 0;
8635
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 8123
diff changeset
60
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
61 //// constants
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
62 static unsigned int const colors = 256;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
63 static unsigned int const maxcolor = 255;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
64 static unsigned const base = 256;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
65 static unsigned const first_char = 33;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
66 #define MAX_CHARSET_SIZE 60000
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
67
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
68 static FT_Library library;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
69
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
70 #define OSD_CHARSET_SIZE 15
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
71
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
72 static FT_ULong osd_charset[OSD_CHARSET_SIZE] =
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
73 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
74 0xe001, 0xe002, 0xe003, 0xe004, 0xe005, 0xe006, 0xe007, 0xe008,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
75 0xe009, 0xe00a, 0xe00b, 0xe010, 0xe011, 0xe012, 0xe013
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
76 };
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
77
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
78 static FT_ULong osd_charcodes[OSD_CHARSET_SIZE] =
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
79 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
80 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
81 0x09,0x0a,0x0b,0x10,0x11,0x12,0x13
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
82 };
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
83
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
84 #define f266ToInt(x) (((x)+32)>>6) // round fractional fixed point number to integer
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
85 // coordinates are in 26.6 pixels (i.e. 1/64th of pixels)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
86 #define f266CeilToInt(x) (((x)+63)>>6) // ceiling
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
87 #define f266FloorToInt(x) ((x)>>6) // floor
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
88 #define f1616ToInt(x) (((x)+0x8000)>>16) // 16.16
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
89 #define floatTof266(x) ((int)((x)*(1<<6)+0.5))
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
90
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
91 #define ALIGN(x) (((x)+7)&~7) // 8 byte align
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
92
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
93 #define WARNING(msg, args...) mp_msg(MSGT_OSD, MSGL_WARN, msg "\n", ## args)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
94
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
95 #define DEBUG 0
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
96
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
97 //static double ttime;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
98
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
99
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
100 static void paste_bitmap(unsigned char *bbuffer, FT_Bitmap *bitmap, int x, int y, int width, int height, int bwidth) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
101 int drow = x+y*width;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
102 int srow = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
103 int sp, dp, w, h;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
104 if (bitmap->pixel_mode==ft_pixel_mode_mono)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
105 for (h = bitmap->rows; h>0 && height > 0; --h, height--, drow+=width, srow+=bitmap->pitch)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
106 for (w = bwidth, sp=dp=0; w>0; --w, ++dp, ++sp)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
107 bbuffer[drow+dp] = (bitmap->buffer[srow+sp/8] & (0x80>>(sp%8))) ? 255:0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
108 else
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
109 for (h = bitmap->rows; h>0 && height > 0; --h, height--, drow+=width, srow+=bitmap->pitch)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
110 for (w = bwidth, sp=dp=0; w>0; --w, ++dp, ++sp)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
111 bbuffer[drow+dp] = bitmap->buffer[srow+sp];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
112 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
113
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
114
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
115 static int check_font(font_desc_t *desc, float ppem, int padding, int pic_idx,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
116 int charset_size, FT_ULong *charset, FT_ULong *charcodes,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
117 int unicode) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
118 FT_Error error;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
119 FT_Face face = desc->faces[pic_idx];
15440
64875f819a02 enable hinting
henry
parents: 13787
diff changeset
120 int const load_flags = FT_LOAD_DEFAULT;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
121 int ymin = INT_MAX, ymax = INT_MIN;
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
122 int space_advance = 20;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
123 int width, height;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
124 unsigned char *bbuffer;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
125 int i, uni_charmap = 1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
126
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
127 error = FT_Select_Charmap(face, ft_encoding_unicode);
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
128 // fprintf(stderr, "select unicode charmap: %d\n", error);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
129
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
130 if (face->charmap==NULL || face->charmap->encoding!=ft_encoding_unicode) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
131 WARNING("Unicode charmap not available for this font. Very bad!");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
132 uni_charmap = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
133 error = FT_Set_Charmap(face, face->charmaps[0]);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
134 if (error) WARNING("No charmaps! Strange.");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
135 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
136
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
137 /* set size */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
138 if (FT_IS_SCALABLE(face)) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
139 error = FT_Set_Char_Size(face, 0, floatTof266(ppem), 0, 0);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
140 if (error) WARNING("FT_Set_Char_Size failed.");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
141 } else {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
142 int j = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
143 int jppem = face->available_sizes[0].height;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
144 /* find closest size */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
145 for (i = 0; i<face->num_fixed_sizes; ++i) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
146 if (fabs(face->available_sizes[i].height - ppem) < abs(face->available_sizes[i].height - jppem)) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
147 j = i;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
148 jppem = face->available_sizes[i].height;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
149 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
150 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
151 WARNING("Selected font is not scalable. Using ppem=%i.", face->available_sizes[j].height);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
152 error = FT_Set_Pixel_Sizes(face, face->available_sizes[j].width, face->available_sizes[j].height);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
153 if (error) WARNING("FT_Set_Pixel_Sizes failed.");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
154 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
155
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
156 if (FT_IS_FIXED_WIDTH(face))
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
157 WARNING("Selected font is fixed-width.");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
158
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
159 /* compute space advance */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
160 error = FT_Load_Char(face, ' ', load_flags);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
161 if (error) WARNING("spacewidth set to default.");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
162 else space_advance = f266ToInt(face->glyph->advance.x);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
163
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
164 if (!desc->spacewidth) desc->spacewidth = 2*padding + space_advance;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
165 if (!desc->charspace) desc->charspace = -2*padding;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
166 if (!desc->height) desc->height = f266ToInt(face->size->metrics.height);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
167
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
168
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
169 for (i= 0; i<charset_size; ++i) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
170 FT_ULong character, code;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
171 FT_UInt glyph_index;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
172
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
173 character = charset[i];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
174 code = charcodes[i];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
175 desc->font[unicode?character:code] = pic_idx;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
176 // get glyph index
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
177 if (character==0)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
178 glyph_index = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
179 else {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
180 glyph_index = FT_Get_Char_Index(face, uni_charmap ? character:code);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
181 if (glyph_index==0) {
19204
17acc0a995e2 Fixes the format string for the warning message on line 182 (%x
diego
parents: 18980
diff changeset
182 WARNING("Glyph for char 0x%02lx|U+%04lX|%c not found.", code, character,
17acc0a995e2 Fixes the format string for the warning message on line 182 (%x
diego
parents: 18980
diff changeset
183 code<' '||code>255 ? '.':(char)code);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
184 desc->font[unicode?character:code] = -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
185 continue;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
186 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
187 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
188 desc->glyph_index[unicode?character:code] = glyph_index;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
189 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
190 // fprintf(stderr, "font height: %lf\n", (double)(face->bbox.yMax-face->bbox.yMin)/(double)face->units_per_EM*ppem);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
191 // fprintf(stderr, "font width: %lf\n", (double)(face->bbox.xMax-face->bbox.xMin)/(double)face->units_per_EM*ppem);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
192
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
193 ymax = (double)(face->bbox.yMax)/(double)face->units_per_EM*ppem+1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
194 ymin = (double)(face->bbox.yMin)/(double)face->units_per_EM*ppem-1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
195
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
196 width = ppem*(face->bbox.xMax-face->bbox.xMin)/face->units_per_EM+3+2*padding;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
197 if (desc->max_width < width) desc->max_width = width;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
198 width = ALIGN(width);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
199 desc->pic_b[pic_idx]->charwidth = width;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
200
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
201 if (width <= 0) {
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
202 mp_msg(MSGT_OSD, MSGL_ERR, "Wrong bounding box, width <= 0 !\n");
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
203 return -1;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
204 }
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
205
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
206 if (ymax<=ymin) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
207 mp_msg(MSGT_OSD, MSGL_ERR, "Something went wrong. Use the source!\n");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
208 return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
209 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
210
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
211 height = ymax - ymin + 2*padding;
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
212 if (height <= 0) {
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
213 mp_msg(MSGT_OSD, MSGL_ERR, "Wrong bounding box, height <= 0 !\n");
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
214 return -1;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
215 }
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
216
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
217 if (desc->max_height < height) desc->max_height = height;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
218 desc->pic_b[pic_idx]->charheight = height;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
219
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
220 // fprintf(stderr, "font height2: %d\n", height);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
221 desc->pic_b[pic_idx]->baseline = ymax + padding;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
222 desc->pic_b[pic_idx]->padding = padding;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
223 desc->pic_b[pic_idx]->current_alloc = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
224 desc->pic_b[pic_idx]->current_count = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
225
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
226 bbuffer = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
227
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
228 desc->pic_b[pic_idx]->w = width;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
229 desc->pic_b[pic_idx]->h = height;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
230 desc->pic_b[pic_idx]->c = colors;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
231 desc->pic_b[pic_idx]->bmp = bbuffer;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
232 desc->pic_b[pic_idx]->pen = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
233 return 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
234 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
235
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
236 // general outline
18950
a943bc3f26c8 Make some functions static.
uau
parents: 18889
diff changeset
237 static void outline(
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
238 unsigned char *s,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
239 unsigned char *t,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
240 int width,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
241 int height,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
242 int stride,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
243 unsigned char *m,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
244 int r,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
245 int mwidth,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
246 int msize) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
247
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
248 int x, y;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
249
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
250 for (y = 0; y<height; y++) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
251 for (x = 0; x<width; x++) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
252 const int src= s[x];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
253 if(src==0) continue;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
254 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
255 const int x1=(x<r) ? r-x : 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
256 const int y1=(y<r) ? r-y : 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
257 const int x2=(x+r>=width ) ? r+width -x : 2*r+1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
258 const int y2=(y+r>=height) ? r+height-y : 2*r+1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
259 register unsigned char *dstp= t + (y1+y-r)* stride + x-r;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
260 //register int *mp = m + y1 *mwidth;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
261 register unsigned char *mp= m + msize*src + y1*mwidth;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
262 int my;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
263
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
264 for(my= y1; my<y2; my++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
265 register int mx;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
266 for(mx= x1; mx<x2; mx++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
267 if(dstp[mx] < mp[mx]) dstp[mx]= mp[mx];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
268 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
269 dstp+=stride;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
270 mp+=mwidth;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
271 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
272 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
273 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
274 s+= stride;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
275 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
276 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
277
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
278
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
279 // 1 pixel outline
18950
a943bc3f26c8 Make some functions static.
uau
parents: 18889
diff changeset
280 static void outline1(
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
281 unsigned char *s,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
282 unsigned char *t,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
283 int width,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
284 int height,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
285 int stride) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
286
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
287 int x, y;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
288 int skip = stride-width;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
289
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
290 for (x = 0; x<width; ++x, ++s, ++t) *t = *s;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
291 s += skip;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
292 t += skip;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
293 for (y = 1; y<height-1; ++y) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
294 *t++ = *s++;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
295 for (x = 1; x<width-1; ++x, ++s, ++t) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
296 unsigned v = (
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
297 s[-1-stride]+
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
298 s[-1+stride]+
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
299 s[+1-stride]+
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
300 s[+1+stride]
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
301 )/2 + (
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
302 s[-1]+
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
303 s[+1]+
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
304 s[-stride]+
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
305 s[+stride]+
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
306 s[0]
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
307 );
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
308 *t = v>maxcolor ? maxcolor : v;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
309 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
310 *t++ = *s++;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
311 s += skip;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
312 t += skip;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
313 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
314 for (x = 0; x<width; ++x, ++s, ++t) *t = *s;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
315 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
316
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
317 // "0 pixel outline"
18950
a943bc3f26c8 Make some functions static.
uau
parents: 18889
diff changeset
318 static void outline0(
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
319 unsigned char *s,
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
320 unsigned char *t,
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
321 int width,
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
322 int height,
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
323 int stride) {
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
324 int y;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
325 for (y = 0; y<height; ++y) {
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
326 memcpy(t, s, width);
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
327 s += stride;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
328 t += stride;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
329 }
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
330 }
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
331
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
332 // gaussian blur
19847
d7c2e093e406 Make blur() public. Will be used in libass.
eugeni
parents: 19208
diff changeset
333 void blur(
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
334 unsigned char *buffer,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
335 unsigned short *tmp2,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
336 int width,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
337 int height,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
338 int stride,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
339 int *m2,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
340 int r,
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
341 int mwidth) {
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
342
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
343 int x, y;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
344
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
345 unsigned char *s = buffer;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
346 unsigned short *t = tmp2+1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
347 for(y=0; y<height; y++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
348 memset(t-1, 0, (width+1)*sizeof(short));
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
349
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
350 for(x=0; x<r; x++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
351 const int src= s[x];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
352 if(src){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
353 register unsigned short *dstp= t + x-r;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
354 int mx;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
355 unsigned *m3= m2 + src*mwidth;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
356 for(mx=r-x; mx<mwidth; mx++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
357 dstp[mx]+= m3[mx];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
358 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
359 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
360 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
361
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
362 for(; x<width-r; x++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
363 const int src= s[x];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
364 if(src){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
365 register unsigned short *dstp= t + x-r;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
366 int mx;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
367 unsigned *m3= m2 + src*mwidth;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
368 for(mx=0; mx<mwidth; mx++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
369 dstp[mx]+= m3[mx];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
370 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
371 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
372 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
373
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
374 for(; x<width; x++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
375 const int src= s[x];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
376 if(src){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
377 register unsigned short *dstp= t + x-r;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
378 int mx;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
379 const int x2= r+width -x;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
380 unsigned *m3= m2 + src*mwidth;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
381 for(mx=0; mx<x2; mx++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
382 dstp[mx]+= m3[mx];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
383 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
384 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
385 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
386
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
387 s+= stride;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
388 t+= width + 1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
389 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
390
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
391 t = tmp2;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
392 for(x=0; x<width; x++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
393 for(y=0; y<r; y++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
394 unsigned short *srcp= t + y*(width+1) + 1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
395 int src= *srcp;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
396 if(src){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
397 register unsigned short *dstp= srcp - 1 + width+1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
398 const int src2= (src + 128)>>8;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
399 unsigned *m3= m2 + src2*mwidth;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
400
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
401 int mx;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
402 *srcp= 128;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
403 for(mx=r-1; mx<mwidth; mx++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
404 *dstp += m3[mx];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
405 dstp+= width+1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
406 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
407 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
408 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
409 for(; y<height-r; y++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
410 unsigned short *srcp= t + y*(width+1) + 1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
411 int src= *srcp;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
412 if(src){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
413 register unsigned short *dstp= srcp - 1 - r*(width+1);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
414 const int src2= (src + 128)>>8;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
415 unsigned *m3= m2 + src2*mwidth;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
416
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
417 int mx;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
418 *srcp= 128;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
419 for(mx=0; mx<mwidth; mx++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
420 *dstp += m3[mx];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
421 dstp+= width+1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
422 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
423 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
424 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
425 for(; y<height; y++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
426 unsigned short *srcp= t + y*(width+1) + 1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
427 int src= *srcp;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
428 if(src){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
429 const int y2=r+height-y;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
430 register unsigned short *dstp= srcp - 1 - r*(width+1);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
431 const int src2= (src + 128)>>8;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
432 unsigned *m3= m2 + src2*mwidth;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
433
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
434 int mx;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
435 *srcp= 128;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
436 for(mx=0; mx<y2; mx++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
437 *dstp += m3[mx];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
438 dstp+= width+1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
439 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
440 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
441 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
442 t++;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
443 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
444
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
445 t = tmp2;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
446 s = buffer;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
447 for(y=0; y<height; y++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
448 for(x=0; x<width; x++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
449 s[x]= t[x]>>8;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
450 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
451 s+= stride;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
452 t+= width + 1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
453 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
454 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
455
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
456 static void resample_alpha(unsigned char *abuf, unsigned char *bbuf, int width, int height, int stride, float factor)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
457 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
458 int f=factor*256.0f;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
459 int i,j;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
460 for (i = 0; i < height; i++) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
461 unsigned char *a = abuf+i*stride;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
462 unsigned char *b = bbuf+i*stride;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
463 for(j=0;j<width;j++,a++,b++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
464 int x=*a; // alpha
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
465 int y=*b; // bitmap
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
466 x=255-((x*f)>>8); // scale
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
467 if (x+y>255) x=255-y; // to avoid overflows
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
468 if (x<1) x=1; else if (x>=252) x=0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
469 *a=x;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
470 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
471 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
472 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
473
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
474 #define ALLOC_INCR 32
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
475 void render_one_glyph(font_desc_t *desc, int c)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
476 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
477 FT_GlyphSlot slot;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
478 FT_UInt glyph_index;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
479 FT_BitmapGlyph glyph;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
480 int width, height, stride, maxw, off;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
481 unsigned char *abuffer, *bbuffer;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
482
15440
64875f819a02 enable hinting
henry
parents: 13787
diff changeset
483 int const load_flags = FT_LOAD_DEFAULT;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
484 int pen_xa;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
485 int font = desc->font[c];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
486 int error;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
487
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
488 // fprintf(stderr, "render_one_glyph %d\n", c);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
489
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
490 if (!desc->dynamic) return;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
491 if (desc->width[c] != -1) return;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
492 if (desc->font[c] == -1) return;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
493
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
494 glyph_index = desc->glyph_index[c];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
495
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
496 // load glyph
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
497 error = FT_Load_Glyph(desc->faces[font], glyph_index, load_flags);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
498 if (error) {
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
499 WARNING("FT_Load_Glyph 0x%02x (char 0x%04x) failed.", glyph_index, c);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
500 desc->font[c] = -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
501 return;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
502 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
503 slot = desc->faces[font]->glyph;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
504
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
505 // render glyph
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
506 if (slot->format != ft_glyph_format_bitmap) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
507 error = FT_Render_Glyph(slot, ft_render_mode_normal);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
508 if (error) {
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
509 WARNING("FT_Render_Glyph 0x%04x (char 0x%04x) failed.", glyph_index, c);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
510 desc->font[c] = -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
511 return;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
512 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
513 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
514
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
515 // extract glyph image
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
516 error = FT_Get_Glyph(slot, (FT_Glyph*)&glyph);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
517 if (error) {
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
518 WARNING("FT_Get_Glyph 0x%04x (char 0x%04x) failed.", glyph_index, c);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
519 desc->font[c] = -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
520 return;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
521 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
522
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
523 // fprintf(stderr, "glyph generated\n");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
524
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
525 maxw = desc->pic_b[font]->charwidth;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
526
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
527 if (glyph->bitmap.width > maxw) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
528 fprintf(stderr, "glyph too wide!\n");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
529 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
530
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
531 // allocate new memory, if needed
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
532 // fprintf(stderr, "\n%d %d %d\n", desc->pic_b[font]->charwidth, desc->pic_b[font]->charheight, desc->pic_b[font]->current_alloc);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
533 if (desc->pic_b[font]->current_count >= desc->pic_b[font]->current_alloc) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
534 int newsize = desc->pic_b[font]->charwidth*desc->pic_b[font]->charheight*(desc->pic_b[font]->current_alloc+ALLOC_INCR);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
535 int increment = desc->pic_b[font]->charwidth*desc->pic_b[font]->charheight*ALLOC_INCR;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
536 desc->pic_b[font]->current_alloc += ALLOC_INCR;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
537
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
538 // fprintf(stderr, "\nns = %d inc = %d\n", newsize, increment);
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
539
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
540 desc->pic_b[font]->bmp = realloc(desc->pic_b[font]->bmp, newsize);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
541 desc->pic_a[font]->bmp = realloc(desc->pic_a[font]->bmp, newsize);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
542
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
543 off = desc->pic_b[font]->current_count*desc->pic_b[font]->charwidth*desc->pic_b[font]->charheight;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
544 memset(desc->pic_b[font]->bmp+off, 0, increment);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
545 memset(desc->pic_a[font]->bmp+off, 0, increment);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
546 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
547
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
548 abuffer = desc->pic_a[font]->bmp;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
549 bbuffer = desc->pic_b[font]->bmp;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
550
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
551 off = desc->pic_b[font]->current_count*desc->pic_b[font]->charwidth*desc->pic_b[font]->charheight;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
552
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
553 paste_bitmap(bbuffer+off,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
554 &glyph->bitmap,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
555 desc->pic_b[font]->padding + glyph->left,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
556 desc->pic_b[font]->baseline - glyph->top,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
557 desc->pic_b[font]->charwidth, desc->pic_b[font]->charheight,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
558 glyph->bitmap.width <= maxw ? glyph->bitmap.width : maxw);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
559
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
560 // fprintf(stderr, "glyph pasted\n");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
561 FT_Done_Glyph((FT_Glyph)glyph);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
562
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
563 /* advance pen */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
564 pen_xa = f266ToInt(slot->advance.x) + 2*desc->pic_b[font]->padding;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
565 if (pen_xa > maxw) pen_xa = maxw;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
566
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
567 desc->start[c] = off;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
568 width = desc->width[c] = pen_xa;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
569 height = desc->pic_b[font]->charheight;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
570 stride = desc->pic_b[font]->w;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
571
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
572 if (desc->tables.o_r == 0) {
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
573 outline0(bbuffer+off, abuffer+off, width, height, stride);
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
574 } else if (desc->tables.o_r == 1) {
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
575 outline1(bbuffer+off, abuffer+off, width, height, stride);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
576 } else {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
577 outline(bbuffer+off, abuffer+off, width, height, stride,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
578 desc->tables.omt, desc->tables.o_r, desc->tables.o_w,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
579 desc->tables.o_size);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
580 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
581 // fprintf(stderr, "fg: outline t = %lf\n", GetTimer()-t);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
582
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
583 if (desc->tables.g_r) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
584 blur(abuffer+off, desc->tables.tmp, width, height, stride,
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
585 desc->tables.gt2, desc->tables.g_r,
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
586 desc->tables.g_w);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
587 // fprintf(stderr, "fg: blur t = %lf\n", GetTimer()-t);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
588 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
589
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
590 resample_alpha(abuffer+off, bbuffer+off, width, height, stride, font_factor);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
591
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
592 desc->pic_b[font]->current_count++;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
593 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
594
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
595
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
596 static int prepare_font(font_desc_t *desc, FT_Face face, float ppem, int pic_idx,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
597 int charset_size, FT_ULong *charset, FT_ULong *charcodes, int unicode,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
598 double thickness, double radius)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
599 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
600 int i, err;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
601 int padding = ceil(radius) + ceil(thickness);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
602
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
603 desc->faces[pic_idx] = face;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
604
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18864
diff changeset
605 desc->pic_a[pic_idx] = malloc(sizeof(raw_file));
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
606 if (!desc->pic_a[pic_idx]) return -1;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18864
diff changeset
607 desc->pic_b[pic_idx] = malloc(sizeof(raw_file));
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
608 if (!desc->pic_b[pic_idx]) return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
609
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
610 desc->pic_a[pic_idx]->bmp = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
611 desc->pic_a[pic_idx]->pal = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
612 desc->pic_b[pic_idx]->bmp = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
613 desc->pic_b[pic_idx]->pal = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
614
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18864
diff changeset
615 desc->pic_a[pic_idx]->pal = malloc(sizeof(unsigned char)*256*3);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
616 if (!desc->pic_a[pic_idx]->pal) return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
617 for (i = 0; i<768; ++i) desc->pic_a[pic_idx]->pal[i] = i/3;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
618
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18864
diff changeset
619 desc->pic_b[pic_idx]->pal = malloc(sizeof(unsigned char)*256*3);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
620 if (!desc->pic_b[pic_idx]->pal) return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
621 for (i = 0; i<768; ++i) desc->pic_b[pic_idx]->pal[i] = i/3;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
622
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
623 // ttime = GetTimer();
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
624 err = check_font(desc, ppem, padding, pic_idx, charset_size, charset, charcodes, unicode);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
625 // ttime=GetTimer()-ttime;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
626 // printf("render: %7lf us\n",ttime);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
627 if (err) return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
628 // fprintf(stderr, "fg: render t = %lf\n", GetTimer()-t);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
629
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
630 desc->pic_a[pic_idx]->w = desc->pic_b[pic_idx]->w;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
631 desc->pic_a[pic_idx]->h = desc->pic_b[pic_idx]->h;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
632 desc->pic_a[pic_idx]->c = colors;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
633
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
634 desc->pic_a[pic_idx]->bmp = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
635
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
636 // fprintf(stderr, "fg: w = %d, h = %d\n", desc->pic_a[pic_idx]->w, desc->pic_a[pic_idx]->h);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
637 return 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
638
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
639 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
640
18950
a943bc3f26c8 Make some functions static.
uau
parents: 18889
diff changeset
641 static int generate_tables(font_desc_t *desc, double thickness, double radius)
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
642 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
643 int width = desc->max_height;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
644 int height = desc->max_width;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
645
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
646 double A = log(1.0/base)/(radius*radius*2);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
647 int mx, my, i;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
648 double volume_diff, volume_factor = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
649 unsigned char *omtp;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
650
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
651 desc->tables.g_r = ceil(radius);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
652 desc->tables.o_r = ceil(thickness);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
653 desc->tables.g_w = 2*desc->tables.g_r+1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
654 desc->tables.o_w = 2*desc->tables.o_r+1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
655 desc->tables.o_size = desc->tables.o_w * desc->tables.o_w;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
656
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
657 // fprintf(stderr, "o_r = %d\n", desc->tables.o_r);
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
658
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
659 if (desc->tables.g_r) {
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18864
diff changeset
660 desc->tables.g = malloc(desc->tables.g_w * sizeof(unsigned));
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18864
diff changeset
661 desc->tables.gt2 = malloc(256 * desc->tables.g_w * sizeof(unsigned));
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
662 if (desc->tables.g==NULL || desc->tables.gt2==NULL) {
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
663 return -1;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
664 }
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
665 }
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18864
diff changeset
666 desc->tables.om = malloc(desc->tables.o_w*desc->tables.o_w * sizeof(unsigned));
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
667 desc->tables.omt = malloc(desc->tables.o_size*256);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
668
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
669 omtp = desc->tables.omt;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
670 desc->tables.tmp = malloc((width+1)*height*sizeof(short));
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
671
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
672 if (desc->tables.om==NULL || desc->tables.omt==NULL || desc->tables.tmp==NULL) {
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
673 return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
674 };
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
675
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
676 if (desc->tables.g_r) {
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
677 // gaussian curve with volume = 256
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
678 for (volume_diff=10000000; volume_diff>0.0000001; volume_diff*=0.5){
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
679 volume_factor+= volume_diff;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
680 desc->tables.volume=0;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
681 for (i = 0; i<desc->tables.g_w; ++i) {
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
682 desc->tables.g[i] = (unsigned)(exp(A * (i-desc->tables.g_r)*(i-desc->tables.g_r)) * volume_factor + .5);
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
683 desc->tables.volume+= desc->tables.g[i];
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
684 }
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
685 if(desc->tables.volume>256) volume_factor-= volume_diff;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
686 }
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
687 desc->tables.volume=0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
688 for (i = 0; i<desc->tables.g_w; ++i) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
689 desc->tables.g[i] = (unsigned)(exp(A * (i-desc->tables.g_r)*(i-desc->tables.g_r)) * volume_factor + .5);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
690 desc->tables.volume+= desc->tables.g[i];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
691 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
692
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
693 // gauss table:
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
694 for(mx=0;mx<desc->tables.g_w;mx++){
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
695 for(i=0;i<256;i++){
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
696 desc->tables.gt2[mx+i*desc->tables.g_w] = i*desc->tables.g[mx];
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
697 }
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
698 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
699 }
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
700
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
701 /* outline matrix */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
702 for (my = 0; my<desc->tables.o_w; ++my) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
703 for (mx = 0; mx<desc->tables.o_w; ++mx) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
704 // antialiased circle would be perfect here, but this one is good enough
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
705 double d = thickness + 1 - sqrt((mx-desc->tables.o_r)*(mx-desc->tables.o_r)+(my-desc->tables.o_r)*(my-desc->tables.o_r));
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
706 desc->tables.om[mx+my*desc->tables.o_w] = d>=1 ? base : d<=0 ? 0 : (d*base + .5);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
707 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
708 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
709
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
710 // outline table:
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
711 for(i=0;i<256;i++){
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
712 for(mx=0;mx<desc->tables.o_size;mx++) *(omtp++) = (i*desc->tables.om[mx] + (base/2))/base;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
713 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
714
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
715 return 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
716 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
717
17931
ed9950b8200d The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents: 17566
diff changeset
718 #ifdef USE_ICONV
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
719 /* decode from 'encoding' to unicode */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
720 static FT_ULong decode_char(iconv_t *cd, char c) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
721 FT_ULong o;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
722 char *inbuf = &c;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
723 char *outbuf = (char*)&o;
19204
17acc0a995e2 Fixes the format string for the warning message on line 182 (%x
diego
parents: 18980
diff changeset
724 size_t inbytesleft = 1;
17acc0a995e2 Fixes the format string for the warning message on line 182 (%x
diego
parents: 18980
diff changeset
725 size_t outbytesleft = sizeof(FT_ULong);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
726
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7147
diff changeset
727 iconv(*cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
728
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
729 /* convert unicode BigEndian -> MachineEndian */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
730 o = be2me_32(o);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
731
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
732 // if (count==-1) o = 0; // not OK, at least my iconv() returns E2BIG for all
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
733 if (outbytesleft!=0) o = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
734
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
735 /* we don't want control characters */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
736 if (o>=0x7f && o<0xa0) o = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
737 return o;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
738 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
739
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
740 static int prepare_charset(char *charmap, char *encoding, FT_ULong *charset, FT_ULong *charcodes) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
741 FT_ULong i;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
742 int count = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
743 int charset_size;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
744 iconv_t cd;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
745
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
746 // check if ucs-4 is available
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
747 cd = iconv_open(charmap, charmap);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
748 if (cd==(iconv_t)-1) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
749 mp_msg(MSGT_OSD, MSGL_ERR, "iconv doesn't know %s encoding. Use the source!\n", charmap);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
750 return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
751 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
752
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
753 iconv_close(cd);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
754
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
755 cd = iconv_open(charmap, encoding);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
756 if (cd==(iconv_t)-1) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
757 mp_msg(MSGT_OSD, MSGL_ERR, "Unsupported encoding `%s', use iconv --list to list character sets known on your system.\n", encoding);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
758 return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
759 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
760
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
761 charset_size = 256 - first_char;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
762 for (i = 0; i<charset_size; ++i) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
763 charcodes[count] = i+first_char;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
764 charset[count] = decode_char(&cd, i+first_char);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
765 if (charset[count]!=0) ++count;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
766 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
767 charcodes[count] = charset[count] = 0; ++count;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
768 charset_size = count;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
769
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
770 iconv_close(cd);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
771 if (charset_size==0) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
772 mp_msg(MSGT_OSD, MSGL_ERR, "No characters to render!\n");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
773 return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
774 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
775
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
776 return charset_size;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
777 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
778
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
779 static int prepare_charset_unicode(FT_Face face, FT_ULong *charset, FT_ULong *charcodes) {
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7147
diff changeset
780 #ifdef HAVE_FREETYPE21
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
781 FT_ULong charcode;
21606
ee21c7dff35f gcc 2.95 fix
ods15
parents: 21507
diff changeset
782 #else
ee21c7dff35f gcc 2.95 fix
ods15
parents: 21507
diff changeset
783 int j;
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7147
diff changeset
784 #endif
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
785 FT_UInt gindex;
19205
3f01e230c898 unused variable warning fix
diego
parents: 19204
diff changeset
786 int i;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
787
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
788 if (face->charmap==NULL || face->charmap->encoding!=ft_encoding_unicode) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
789 WARNING("Unicode charmap not available for this font. Very bad!");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
790 return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
791 }
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
792 #ifdef HAVE_FREETYPE21
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
793 i = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
794 charcode = FT_Get_First_Char( face, &gindex );
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
795 while (gindex != 0) {
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
796 if (charcode < 65536 && charcode >= 33) { // sanity check
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
797 charset[i] = charcode;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
798 charcodes[i] = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
799 i++;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
800 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
801 charcode = FT_Get_Next_Char( face, charcode, &gindex );
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
802 }
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
803 #else
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
804 // for FT < 2.1 we have to use brute force enumeration
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
805 i = 0;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
806 for (j = 33; j < 65536; j++) {
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
807 gindex = FT_Get_Char_Index(face, j);
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
808 if (gindex > 0) {
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
809 charset[i] = j;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
810 charcodes[i] = 0;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
811 i++;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
812 }
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
813 }
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
814 #endif
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
815 mp_msg(MSGT_OSD, MSGL_V, "Unicode font: %d glyphs.\n", i);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
816
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
817 return i;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
818 }
17931
ed9950b8200d The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents: 17566
diff changeset
819 #endif
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
820
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 15440
diff changeset
821 static font_desc_t* init_font_desc(void)
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
822 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
823 font_desc_t *desc;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
824 int i;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
825
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
826 desc = malloc(sizeof(font_desc_t));
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
827 if(!desc) return NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
828 memset(desc,0,sizeof(font_desc_t));
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
829
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
830 desc->dynamic = 1;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
831
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
832 /* setup sane defaults */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
833 desc->name = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
834 desc->fpath = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
835
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
836 desc->face_cnt = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
837 desc->charspace = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
838 desc->spacewidth = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
839 desc->height = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
840 desc->max_width = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
841 desc->max_height = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
842
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
843 desc->tables.g = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
844 desc->tables.gt2 = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
845 desc->tables.om = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
846 desc->tables.omt = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
847 desc->tables.tmp = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
848
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
849 for(i = 0; i < 65536; i++)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
850 desc->start[i] = desc->width[i] = desc->font[i] = -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
851 for(i = 0; i < 16; i++)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
852 desc->pic_a[i] = desc->pic_b[i] = NULL;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
853
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
854 return desc;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
855 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
856
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
857 void free_font_desc(font_desc_t *desc)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
858 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
859 int i;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
860
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
861 if (!desc) return;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
862
9176
237b7e51521a better fix of vo_aa font segfault
henry
parents: 9172
diff changeset
863 // if (!desc->dynamic) return; // some vo_aa crap, better leaking than crashing
9172
8c2830239a14 another sanity check against vo_aa font hack
henry
parents: 8818
diff changeset
864
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
865 if (desc->name) free(desc->name);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
866 if (desc->fpath) free(desc->fpath);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
867
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
868 for(i = 0; i < 16; i++) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
869 if (desc->pic_a[i]) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
870 if (desc->pic_a[i]->bmp) free(desc->pic_a[i]->bmp);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
871 if (desc->pic_a[i]->pal) free(desc->pic_a[i]->pal);
13632
b633ce0aa5c5 fixed small memleaks
reimar
parents: 11584
diff changeset
872 free (desc->pic_a[i]);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
873 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
874 if (desc->pic_b[i]) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
875 if (desc->pic_b[i]->bmp) free(desc->pic_b[i]->bmp);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
876 if (desc->pic_b[i]->pal) free(desc->pic_b[i]->pal);
13632
b633ce0aa5c5 fixed small memleaks
reimar
parents: 11584
diff changeset
877 free (desc->pic_b[i]);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
878 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
879 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
880
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
881 if (desc->tables.g) free(desc->tables.g);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
882 if (desc->tables.gt2) free(desc->tables.gt2);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
883 if (desc->tables.om) free(desc->tables.om);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
884 if (desc->tables.omt) free(desc->tables.omt);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
885 if (desc->tables.tmp) free(desc->tables.tmp);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
886
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
887 for(i = 0; i < desc->face_cnt; i++) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
888 FT_Done_Face(desc->faces[i]);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
889 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
890
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
891 free(desc);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
892 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
893
18980
ed69754aa58d Marks several string parameters as const when they are not modified in the function, Patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents: 18950
diff changeset
894 static int load_sub_face(const char *name, FT_Face *face)
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
895 {
7139
dd1e21e775b6 - add freetype support for gui
pontscho
parents: 7122
diff changeset
896 int err = -1;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
897
7139
dd1e21e775b6 - add freetype support for gui
pontscho
parents: 7122
diff changeset
898 if (name) err = FT_New_Face(library, name, 0, face);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
899
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
900 if (err) {
13632
b633ce0aa5c5 fixed small memleaks
reimar
parents: 11584
diff changeset
901 char *font_file = get_path("subfont.ttf");
b633ce0aa5c5 fixed small memleaks
reimar
parents: 11584
diff changeset
902 err = FT_New_Face(library, font_file, 0, face);
b633ce0aa5c5 fixed small memleaks
reimar
parents: 11584
diff changeset
903 free(font_file);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
904 if (err) {
10272
7b0bc557987b renames: DATADIR->MPLAYER_DATADIR, CONFDIR->MPLAYER_CONFDIR, LIBDIR->MPLAYER_LIBDIR
arpi
parents: 9176
diff changeset
905 err = FT_New_Face(library, MPLAYER_DATADIR "/subfont.ttf", 0, face);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
906 if (err) {
7139
dd1e21e775b6 - add freetype support for gui
pontscho
parents: 7122
diff changeset
907 mp_msg(MSGT_OSD, MSGL_ERR, "New_Face failed. Maybe the font path is wrong.\nPlease supply the text font file (~/.mplayer/subfont.ttf).\n" );
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
908 return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
909 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
910 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
911 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
912 return err;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
913 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
914
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
915 static int load_osd_face(FT_Face *face)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
916 {
7139
dd1e21e775b6 - add freetype support for gui
pontscho
parents: 7122
diff changeset
917 if ( FT_New_Memory_Face(library, osd_font_pfb, sizeof(osd_font_pfb), 0, face) ) {
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
918 mp_msg(MSGT_OSD, MSGL_ERR, "New_Memory_Face failed..\n");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
919 return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
920 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
921 return 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
922 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
923
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
924 int kerning(font_desc_t *desc, int prevc, int c)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
925 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
926 FT_Vector kern;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
927
23338
2a66d95355f0 add new -subfont option, that allows having a different font for OSD (controls and menu) and subtitles
ben
parents: 21606
diff changeset
928 if (!desc->dynamic) return 0;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
929 if (prevc < 0 || c < 0) return 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
930 if (desc->font[prevc] != desc->font[c]) return 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
931 if (desc->font[prevc] == -1 || desc->font[c] == -1) return 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
932 FT_Get_Kerning(desc->faces[desc->font[c]],
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
933 desc->glyph_index[prevc], desc->glyph_index[c],
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
934 ft_kerning_default, &kern);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
935
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
936 // fprintf(stderr, "kern: %c %c %d\n", prevc, c, f266ToInt(kern.x));
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
937
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
938 return f266ToInt(kern.x);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
939 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
940
18980
ed69754aa58d Marks several string parameters as const when they are not modified in the function, Patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents: 18950
diff changeset
941 font_desc_t* read_font_desc_ft(const char *fname, int movie_width, int movie_height)
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
942 {
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
943 font_desc_t *desc = NULL;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
944
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
945 FT_Face face;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
946
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
947 FT_ULong *my_charset = malloc(MAX_CHARSET_SIZE * sizeof(FT_ULong)); /* characters we want to render; Unicode */
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
948 FT_ULong *my_charcodes = malloc(MAX_CHARSET_SIZE * sizeof(FT_ULong)); /* character codes in 'encoding' */
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
949
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
950 char *charmap = "ucs-4";
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
951 int err;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
952 int charset_size;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
953 int i, j;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
954 int unicode;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
955
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
956 float movie_size;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
957
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
958 float subtitle_font_ppem;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
959 float osd_font_ppem;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
960
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
961 if (my_charset == NULL || my_charcodes == NULL) {
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
962 mp_msg(MSGT_OSD, MSGL_ERR, "subtitle font: malloc failed.\n");
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
963 goto err_out;
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
964 }
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
965
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
966 switch (subtitle_autoscale) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
967 case 1:
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
968 movie_size = movie_height;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
969 break;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
970 case 2:
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
971 movie_size = movie_width;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
972 break;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
973 case 3:
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
974 movie_size = sqrt(movie_height*movie_height+movie_width*movie_width);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
975 break;
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
976 default:
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
977 movie_size = 100;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
978 break;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
979 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
980
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
981 subtitle_font_ppem = movie_size*text_font_scale_factor/100.0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
982 osd_font_ppem = movie_size*osd_font_scale_factor/100.0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
983
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
984 if (subtitle_font_ppem < 5) subtitle_font_ppem = 5;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
985 if (osd_font_ppem < 5) osd_font_ppem = 5;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
986
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
987 if (subtitle_font_ppem > 128) subtitle_font_ppem = 128;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
988 if (osd_font_ppem > 128) osd_font_ppem = 128;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
989
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
990 if ((subtitle_font_encoding == NULL)
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
991 || (strcasecmp(subtitle_font_encoding, "unicode") == 0)) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
992 unicode = 1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
993 } else {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
994 unicode = 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
995 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
996
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
997 desc = init_font_desc();
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
998 if(!desc) goto err_out;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
999
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1000 // t=GetTimer();
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1001
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1002 /* generate the subtitle font */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1003 err = load_sub_face(fname, &face);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1004 if (err) {
7139
dd1e21e775b6 - add freetype support for gui
pontscho
parents: 7122
diff changeset
1005 mp_msg(MSGT_OSD, MSGL_WARN, "subtitle font: load_sub_face failed.\n");
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1006 goto gen_osd;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1007 }
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
1008 desc->face_cnt++;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1009
17931
ed9950b8200d The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents: 17566
diff changeset
1010 #ifdef USE_ICONV
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1011 if (unicode) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1012 charset_size = prepare_charset_unicode(face, my_charset, my_charcodes);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1013 } else {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1014 if (subtitle_font_encoding) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1015 charset_size = prepare_charset(charmap, subtitle_font_encoding, my_charset, my_charcodes);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1016 } else {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1017 charset_size = prepare_charset(charmap, "iso-8859-1", my_charset, my_charcodes);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1018 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1019 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1020
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1021 if (charset_size < 0) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1022 mp_msg(MSGT_OSD, MSGL_ERR, "subtitle font: prepare_charset failed.\n");
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1023 goto err_out;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1024 }
17931
ed9950b8200d The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents: 17566
diff changeset
1025 #else
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1026 goto err_out;
17931
ed9950b8200d The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents: 17566
diff changeset
1027 #endif
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1028
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1029 // fprintf(stderr, "fg: prepare t = %lf\n", GetTimer()-t);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1030
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
1031 err = prepare_font(desc, face, subtitle_font_ppem, desc->face_cnt-1,
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1032 charset_size, my_charset, my_charcodes, unicode,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1033 subtitle_font_thickness, subtitle_font_radius);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1034
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1035 if (err) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1036 mp_msg(MSGT_OSD, MSGL_ERR, "Cannot prepare subtitle font.\n");
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1037 goto err_out;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1038 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1039
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1040 gen_osd:
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1041
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1042 /* generate the OSD font */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1043 err = load_osd_face(&face);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1044 if (err) {
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1045 goto err_out;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1046 }
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
1047 desc->face_cnt++;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
1048
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
1049 err = prepare_font(desc, face, osd_font_ppem, desc->face_cnt-1,
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1050 OSD_CHARSET_SIZE, osd_charset, osd_charcodes, 0,
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1051 subtitle_font_thickness, subtitle_font_radius);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1052
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1053 if (err) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1054 mp_msg(MSGT_OSD, MSGL_ERR, "Cannot prepare OSD font.\n");
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1055 goto err_out;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1056 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1057
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1058 err = generate_tables(desc, subtitle_font_thickness, subtitle_font_radius);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1059
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1060 if (err) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1061 mp_msg(MSGT_OSD, MSGL_ERR, "Cannot generate tables.\n");
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1062 goto err_out;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1063 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1064
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1065 // final cleanup
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1066 desc->font[' ']=-1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1067 desc->width[' ']=desc->spacewidth;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1068
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1069 j = '_';
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1070 if (desc->font[j] < 0) j = '?';
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1071 if (desc->font[j] < 0) j = ' ';
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1072 render_one_glyph(desc, j);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1073 for(i = 0; i < 65536; i++) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1074 if (desc->font[i] < 0 && i != ' ') {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1075 desc->start[i] = desc->start[j];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1076 desc->width[i] = desc->width[j];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1077 desc->font[i] = desc->font[j];
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1078 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1079 }
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1080 free(my_charset);
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1081 free(my_charcodes);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1082 return desc;
19208
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1083
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1084 err_out:
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1085 if (desc)
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1086 free_font_desc(desc);
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1087 free(my_charset);
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1088 free(my_charcodes);
99d6ca895c46 Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents: 19205
diff changeset
1089 return NULL;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1090 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1091
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 15440
diff changeset
1092 int init_freetype(void)
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1093 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1094 int err;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1095
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1096 /* initialize freetype */
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1097 err = FT_Init_FreeType(&library);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1098 if (err) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1099 mp_msg(MSGT_OSD, MSGL_ERR, "Init_FreeType failed.\n");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1100 return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1101 }
8818
499d64f880d3 Use standard mplayer message funtion.
filon
parents: 8635
diff changeset
1102 mp_msg(MSGT_OSD, MSGL_V, "init_freetype\n");
8635
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 8123
diff changeset
1103 using_freetype = 1;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1104 return 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1105 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1106
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 15440
diff changeset
1107 int done_freetype(void)
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1108 {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1109 int err;
8635
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 8123
diff changeset
1110
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 8123
diff changeset
1111 if (!using_freetype)
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 8123
diff changeset
1112 return 0;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1113
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1114 err = FT_Done_FreeType(library);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1115 if (err) {
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1116 mp_msg(MSGT_OSD, MSGL_ERR, "FT_Done_FreeType failed.\n");
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1117 return -1;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1118 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1119
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1120 return 0;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1121 }
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1122
23338
2a66d95355f0 add new -subfont option, that allows having a different font for OSD (controls and menu) and subtitles
ben
parents: 21606
diff changeset
1123 void load_font_ft(int width, int height, font_desc_t** fontp, const char *font_name)
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1124 {
11580
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1125 #ifdef HAVE_FONTCONFIG
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1126 FcPattern *fc_pattern;
21501
aecea8c8afee Properly free fontconfig patterns
reimar
parents: 21372
diff changeset
1127 FcPattern *fc_pattern2;
11580
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1128 FcChar8 *s;
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1129 FcBool scalable;
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1130 #endif
23338
2a66d95355f0 add new -subfont option, that allows having a different font for OSD (controls and menu) and subtitles
ben
parents: 21606
diff changeset
1131 font_desc_t *vo_font = *fontp;
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1132 vo_image_width = width;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1133 vo_image_height = height;
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1134
7140
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
1135 // protection against vo_aa font hacks
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
1136 if (vo_font && !vo_font->dynamic) return;
b9ce54c7f30f add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents: 7139
diff changeset
1137
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1138 if (vo_font) free_font_desc(vo_font);
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1139
11580
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1140 #ifdef HAVE_FONTCONFIG
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1141 if (font_fontconfig)
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1142 {
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1143 if (!font_name)
17962
f35cfd56c800 NEVER assign static strings to string command line options.
albeu
parents: 17931
diff changeset
1144 font_name = strdup("sans-serif");
11580
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1145 FcInit();
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1146 fc_pattern = FcNameParse(font_name);
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1147 FcConfigSubstitute(0, fc_pattern, FcMatchPattern);
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1148 FcDefaultSubstitute(fc_pattern);
21501
aecea8c8afee Properly free fontconfig patterns
reimar
parents: 21372
diff changeset
1149 fc_pattern2 = fc_pattern;
11580
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1150 fc_pattern = FcFontMatch(0, fc_pattern, 0);
21501
aecea8c8afee Properly free fontconfig patterns
reimar
parents: 21372
diff changeset
1151 FcPatternDestroy(fc_pattern2);
11580
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1152 FcPatternGetBool(fc_pattern, FC_SCALABLE, 0, &scalable);
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1153 if (scalable != FcTrue) {
21501
aecea8c8afee Properly free fontconfig patterns
reimar
parents: 21372
diff changeset
1154 FcPatternDestroy(fc_pattern);
11580
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1155 fc_pattern = FcNameParse("sans-serif");
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1156 FcConfigSubstitute(0, fc_pattern, FcMatchPattern);
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1157 FcDefaultSubstitute(fc_pattern);
21501
aecea8c8afee Properly free fontconfig patterns
reimar
parents: 21372
diff changeset
1158 fc_pattern2 = fc_pattern;
11580
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1159 fc_pattern = FcFontMatch(0, fc_pattern, 0);
21501
aecea8c8afee Properly free fontconfig patterns
reimar
parents: 21372
diff changeset
1160 FcPatternDestroy(fc_pattern2);
11580
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1161 }
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1162 // s doesn't need to be freed according to fontconfig docs
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1163 FcPatternGetString(fc_pattern, FC_FILE, 0, &s);
23338
2a66d95355f0 add new -subfont option, that allows having a different font for OSD (controls and menu) and subtitles
ben
parents: 21606
diff changeset
1164 *fontp=read_font_desc_ft(s, width, height);
21501
aecea8c8afee Properly free fontconfig patterns
reimar
parents: 21372
diff changeset
1165 FcPatternDestroy(fc_pattern);
11580
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1166 }
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1167 else
90953d955165 Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents: 11500
diff changeset
1168 #endif
23338
2a66d95355f0 add new -subfont option, that allows having a different font for OSD (controls and menu) and subtitles
ben
parents: 21606
diff changeset
1169 *fontp=read_font_desc_ft(font_name, width, height);
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff changeset
1170 }