Mercurial > mplayer.hg
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 |
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 | 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 | 23 #include <ft2build.h> |
24 #include FT_FREETYPE_H | |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 660 desc->tables.g = malloc(desc->tables.g_w * sizeof(unsigned)); |
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 | 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 | 782 #else |
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 | 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 | 863 // if (!desc->dynamic) return; // some vo_aa crap, better leaking than crashing |
9172 | 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 | 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 | 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 | 896 int err = -1; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
897 |
7139 | 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 | 901 char *font_file = get_path("subfont.ttf"); |
902 err = FT_New_Face(library, font_file, 0, face); | |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 } |