Mercurial > mplayer.hg
annotate libvo/font_load_ft.c @ 28063:a318969a4f45
Set the base size window manager hint, otherwise some subtract the minimum
size of 4x4 from the numbers displayed to the user which might be confusing.
Based on patch by Bert Wesarg [bert wesarg googlemail com].
author | reimar |
---|---|
date | Fri, 05 Dec 2008 19:01:49 +0000 |
parents | 4876c89bafdd |
children | 898051d5d9b4 |
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 |
27393 | 19 #ifdef CONFIG_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 |
27393 | 27 #ifdef CONFIG_FONTCONFIG |
11580
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" |
24864 | 35 #include "help_mp.h" |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13632
diff
changeset
|
36 #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
|
37 #include "get_path.h" |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
38 #include "osd_font.h" |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
39 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
40 #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
|
41 #define HAVE_FREETYPE21 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
42 #endif |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
43 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
44 char *subtitle_font_encoding = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
45 float text_font_scale_factor = 5.0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
46 float osd_font_scale_factor = 6.0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
47 float subtitle_font_radius = 2.0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
48 float subtitle_font_thickness = 2.0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
49 // 0 = no autoscale |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
50 // 1 = video height |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
51 // 2 = video width |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
52 // 3 = diagonal |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
53 int subtitle_autoscale = 3; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
54 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
55 int vo_image_width = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
56 int vo_image_height = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
57 int force_load_font; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
58 |
8635
81dbd28ef7c0
these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents:
8123
diff
changeset
|
59 int using_freetype = 0; |
11584 | 60 int font_fontconfig = 0; |
8635
81dbd28ef7c0
these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents:
8123
diff
changeset
|
61 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
62 //// constants |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
63 static unsigned int const colors = 256; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
64 static unsigned int const maxcolor = 255; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
65 static unsigned const base = 256; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
66 static unsigned const first_char = 33; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
67 #define MAX_CHARSET_SIZE 60000 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
68 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
69 static FT_Library library; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
70 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
71 #define OSD_CHARSET_SIZE 15 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
72 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
73 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
|
74 { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
75 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
|
76 0xe009, 0xe00a, 0xe00b, 0xe010, 0xe011, 0xe012, 0xe013 |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
79 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
|
80 { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
81 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
|
82 0x09,0x0a,0x0b,0x10,0x11,0x12,0x13 |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
85 #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
|
86 // 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
|
87 #define f266CeilToInt(x) (((x)+63)>>6) // ceiling |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
88 #define f266FloorToInt(x) ((x)>>6) // floor |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
89 #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
|
90 #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
|
91 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
92 #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
|
93 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
94 #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
|
95 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
96 #define DEBUG 0 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
97 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
98 //static double ttime; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
101 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
|
102 int drow = x+y*width; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
103 int srow = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
104 int sp, dp, w, h; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
105 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
|
106 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
|
107 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
|
108 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
|
109 else |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
110 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
|
111 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
|
112 bbuffer[drow+dp] = bitmap->buffer[srow+sp]; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
116 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
|
117 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
|
118 int unicode) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
119 FT_Error error; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
120 FT_Face face = desc->faces[pic_idx]; |
15440 | 121 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
|
122 int ymin = INT_MAX, ymax = INT_MIN; |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
123 int space_advance = 20; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
124 int width, height; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
125 unsigned char *bbuffer; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
126 int i, uni_charmap = 1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
127 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
128 error = FT_Select_Charmap(face, ft_encoding_unicode); |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
129 // 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
|
130 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
131 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
|
132 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
|
133 uni_charmap = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
134 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
|
135 if (error) WARNING("No charmaps! Strange."); |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
138 /* set size */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
139 if (FT_IS_SCALABLE(face)) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
140 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
|
141 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
|
142 } else { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
143 int j = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
144 int jppem = face->available_sizes[0].height; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
145 /* find closest size */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
146 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
|
147 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
|
148 j = i; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
149 jppem = face->available_sizes[i].height; |
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 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
152 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
|
153 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
|
154 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
|
155 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
156 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
157 if (FT_IS_FIXED_WIDTH(face)) |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
158 WARNING("Selected font is fixed-width."); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
159 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
160 /* compute space advance */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
161 error = FT_Load_Char(face, ' ', load_flags); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
162 if (error) WARNING("spacewidth set to default."); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
163 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
|
164 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
165 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
|
166 if (!desc->charspace) desc->charspace = -2*padding; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
167 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
|
168 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
169 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
170 for (i= 0; i<charset_size; ++i) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
171 FT_ULong character, code; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
172 FT_UInt glyph_index; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
173 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
174 character = charset[i]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
175 code = charcodes[i]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
176 desc->font[unicode?character:code] = pic_idx; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
177 // get glyph index |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
178 if (character==0) |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
179 glyph_index = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
180 else { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
181 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
|
182 if (glyph_index==0) { |
19204
17acc0a995e2
Fixes the format string for the warning message on line 182 (%x
diego
parents:
18980
diff
changeset
|
183 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
|
184 code<' '||code>255 ? '.':(char)code); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
185 desc->font[unicode?character:code] = -1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
186 continue; |
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 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
189 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
|
190 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
191 // 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
|
192 // 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
|
193 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
194 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
|
195 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
|
196 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
197 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
|
198 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
|
199 width = ALIGN(width); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
200 desc->pic_b[pic_idx]->charwidth = width; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
201 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
202 if (width <= 0) { |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
203 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
|
204 return -1; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
205 } |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
206 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
207 if (ymax<=ymin) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
208 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
|
209 return -1; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
212 height = ymax - ymin + 2*padding; |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
213 if (height <= 0) { |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
214 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
|
215 return -1; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
216 } |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
217 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
218 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
|
219 desc->pic_b[pic_idx]->charheight = height; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
220 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
221 // fprintf(stderr, "font height2: %d\n", height); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
222 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
|
223 desc->pic_b[pic_idx]->padding = padding; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
224 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
|
225 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
|
226 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
227 bbuffer = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
228 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
229 desc->pic_b[pic_idx]->w = width; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
230 desc->pic_b[pic_idx]->h = height; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
231 desc->pic_b[pic_idx]->c = colors; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
232 desc->pic_b[pic_idx]->bmp = bbuffer; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
233 desc->pic_b[pic_idx]->pen = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
234 return 0; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
237 // general outline |
18950 | 238 static void outline( |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
239 unsigned char *s, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
240 unsigned char *t, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
241 int width, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
242 int height, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
243 int stride, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
244 unsigned char *m, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
245 int r, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
246 int mwidth, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
247 int msize) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
248 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
249 int x, y; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
250 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
251 for (y = 0; y<height; y++) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
252 for (x = 0; x<width; x++) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
253 const int src= s[x]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
254 if(src==0) continue; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
255 { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
256 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
|
257 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
|
258 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
|
259 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
|
260 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
|
261 //register int *mp = m + y1 *mwidth; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
262 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
|
263 int my; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
264 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
265 for(my= y1; my<y2; my++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
266 register int mx; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
267 for(mx= x1; mx<x2; mx++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
268 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
|
269 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
270 dstp+=stride; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
271 mp+=mwidth; |
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 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
275 s+= stride; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
280 // 1 pixel outline |
18950 | 281 static void outline1( |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
282 unsigned char *s, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
283 unsigned char *t, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
284 int width, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
285 int height, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
286 int stride) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
287 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
288 int x, y; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
289 int skip = stride-width; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
290 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
291 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
|
292 s += skip; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
293 t += skip; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
294 for (y = 1; y<height-1; ++y) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
295 *t++ = *s++; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
296 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
|
297 unsigned v = ( |
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 s[+1+stride] |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
302 )/2 + ( |
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[+1]+ |
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[+stride]+ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
307 s[0] |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
308 ); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
309 *t = v>maxcolor ? maxcolor : v; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
310 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
311 *t++ = *s++; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
312 s += skip; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
313 t += skip; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
314 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
315 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
|
316 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
317 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
318 // "0 pixel outline" |
18950 | 319 static void outline0( |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
320 unsigned char *s, |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
321 unsigned char *t, |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
322 int width, |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
323 int height, |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
324 int stride) { |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
325 int y; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
326 for (y = 0; y<height; ++y) { |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
327 memcpy(t, s, width); |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
328 s += stride; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
329 t += stride; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
330 } |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
331 } |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
332 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
333 // gaussian blur |
19847 | 334 void blur( |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
335 unsigned char *buffer, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
336 unsigned short *tmp2, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
337 int width, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
338 int height, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
339 int stride, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
340 int *m2, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
341 int r, |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
342 int mwidth) { |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
343 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
344 int x, y; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
345 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
346 unsigned char *s = buffer; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
347 unsigned short *t = tmp2+1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
348 for(y=0; y<height; y++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
349 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
|
350 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
351 for(x=0; x<r; x++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
352 const int src= s[x]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
353 if(src){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
354 register unsigned short *dstp= t + x-r; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
355 int mx; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
356 unsigned *m3= m2 + src*mwidth; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
357 for(mx=r-x; mx<mwidth; mx++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
358 dstp[mx]+= m3[mx]; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
363 for(; x<width-r; x++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
364 const int src= s[x]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
365 if(src){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
366 register unsigned short *dstp= t + x-r; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
367 int mx; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
368 unsigned *m3= m2 + src*mwidth; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
369 for(mx=0; mx<mwidth; mx++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
370 dstp[mx]+= m3[mx]; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
375 for(; x<width; x++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
376 const int src= s[x]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
377 if(src){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
378 register unsigned short *dstp= t + x-r; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
379 int mx; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
380 const int x2= r+width -x; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
381 unsigned *m3= m2 + src*mwidth; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
382 for(mx=0; mx<x2; mx++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
383 dstp[mx]+= m3[mx]; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
388 s+= stride; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
389 t+= width + 1; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
392 t = tmp2; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
393 for(x=0; x<width; x++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
394 for(y=0; y<r; y++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
395 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
|
396 int src= *srcp; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
397 if(src){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
398 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
|
399 const int src2= (src + 128)>>8; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
400 unsigned *m3= m2 + src2*mwidth; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
401 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
402 int mx; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
403 *srcp= 128; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
404 for(mx=r-1; mx<mwidth; mx++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
405 *dstp += m3[mx]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
406 dstp+= width+1; |
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 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
410 for(; y<height-r; y++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
411 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
|
412 int src= *srcp; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
413 if(src){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
414 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
|
415 const int src2= (src + 128)>>8; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
416 unsigned *m3= m2 + src2*mwidth; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
417 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
418 int mx; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
419 *srcp= 128; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
420 for(mx=0; mx<mwidth; mx++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
421 *dstp += m3[mx]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
422 dstp+= width+1; |
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 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
426 for(; y<height; y++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
427 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
|
428 int src= *srcp; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
429 if(src){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
430 const int y2=r+height-y; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
431 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
|
432 const int src2= (src + 128)>>8; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
433 unsigned *m3= m2 + src2*mwidth; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
434 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
435 int mx; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
436 *srcp= 128; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
437 for(mx=0; mx<y2; mx++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
438 *dstp += m3[mx]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
439 dstp+= width+1; |
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 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
443 t++; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
446 t = tmp2; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
447 s = buffer; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
448 for(y=0; y<height; y++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
449 for(x=0; x<width; x++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
450 s[x]= t[x]>>8; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
451 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
452 s+= stride; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
453 t+= width + 1; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
457 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
|
458 { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
459 int f=factor*256.0f; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
460 int i,j; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
461 for (i = 0; i < height; i++) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
462 unsigned char *a = abuf+i*stride; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
463 unsigned char *b = bbuf+i*stride; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
464 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
|
465 int x=*a; // alpha |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
466 int y=*b; // bitmap |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
467 x=255-((x*f)>>8); // scale |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
468 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
|
469 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
|
470 *a=x; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
475 #define ALLOC_INCR 32 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
476 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
|
477 { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
478 FT_GlyphSlot slot; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
479 FT_UInt glyph_index; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
480 FT_BitmapGlyph glyph; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
481 int width, height, stride, maxw, off; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
482 unsigned char *abuffer, *bbuffer; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
483 |
15440 | 484 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
|
485 int pen_xa; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
486 int font = desc->font[c]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
487 int error; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
488 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
489 // 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
|
490 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
491 if (!desc->dynamic) return; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
492 if (desc->width[c] != -1) return; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
493 if (desc->font[c] == -1) return; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
494 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
495 glyph_index = desc->glyph_index[c]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
496 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
497 // load glyph |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
498 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
|
499 if (error) { |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
500 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
|
501 desc->font[c] = -1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
502 return; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
503 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
504 slot = desc->faces[font]->glyph; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
505 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
506 // render glyph |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
507 if (slot->format != ft_glyph_format_bitmap) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
508 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
|
509 if (error) { |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
510 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
|
511 desc->font[c] = -1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
512 return; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
516 // extract glyph image |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
517 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
|
518 if (error) { |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
519 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
|
520 desc->font[c] = -1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
521 return; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
524 // fprintf(stderr, "glyph generated\n"); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
525 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
526 maxw = desc->pic_b[font]->charwidth; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
527 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
528 if (glyph->bitmap.width > maxw) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
529 fprintf(stderr, "glyph too wide!\n"); |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
532 // allocate new memory, if needed |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
533 // 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
|
534 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
|
535 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
|
536 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
|
537 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
|
538 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
539 // 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
|
540 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
541 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
|
542 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
|
543 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
544 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
|
545 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
|
546 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
|
547 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
548 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
549 abuffer = desc->pic_a[font]->bmp; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
550 bbuffer = desc->pic_b[font]->bmp; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
551 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
552 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
|
553 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
554 paste_bitmap(bbuffer+off, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
555 &glyph->bitmap, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
556 desc->pic_b[font]->padding + glyph->left, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
557 desc->pic_b[font]->baseline - glyph->top, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
558 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
|
559 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
|
560 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
561 // fprintf(stderr, "glyph pasted\n"); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
562 FT_Done_Glyph((FT_Glyph)glyph); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
563 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
564 /* advance pen */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
565 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
|
566 if (pen_xa > maxw) pen_xa = maxw; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
567 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
568 desc->start[c] = off; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
569 width = desc->width[c] = pen_xa; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
570 height = desc->pic_b[font]->charheight; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
571 stride = desc->pic_b[font]->w; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
572 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
573 if (desc->tables.o_r == 0) { |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
574 outline0(bbuffer+off, abuffer+off, width, height, stride); |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
575 } 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
|
576 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
|
577 } else { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
578 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
|
579 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
|
580 desc->tables.o_size); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
581 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
582 // 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
|
583 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
584 if (desc->tables.g_r) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
585 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
|
586 desc->tables.gt2, desc->tables.g_r, |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
587 desc->tables.g_w); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
588 // 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
|
589 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
590 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
591 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
|
592 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
593 desc->pic_b[font]->current_count++; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
597 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
|
598 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
|
599 double thickness, double radius) |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
600 { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
601 int i, err; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
602 int padding = ceil(radius) + ceil(thickness); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
603 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
604 desc->faces[pic_idx] = face; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
605 |
18878 | 606 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
|
607 if (!desc->pic_a[pic_idx]) return -1; |
18878 | 608 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
|
609 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
|
610 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
611 desc->pic_a[pic_idx]->bmp = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
612 desc->pic_a[pic_idx]->pal = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
613 desc->pic_b[pic_idx]->bmp = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
614 desc->pic_b[pic_idx]->pal = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
615 |
18878 | 616 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
|
617 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
|
618 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
|
619 |
18878 | 620 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
|
621 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
|
622 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
|
623 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
624 // ttime = GetTimer(); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
625 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
|
626 // ttime=GetTimer()-ttime; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
627 // printf("render: %7lf us\n",ttime); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
628 if (err) return -1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
629 // 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
|
630 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
631 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
|
632 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
|
633 desc->pic_a[pic_idx]->c = colors; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
634 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
635 desc->pic_a[pic_idx]->bmp = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
636 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
637 // 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
|
638 return 0; |
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 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
641 |
18950 | 642 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
|
643 { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
644 int width = desc->max_height; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
645 int height = desc->max_width; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
646 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
647 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
|
648 int mx, my, i; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
649 double volume_diff, volume_factor = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
650 unsigned char *omtp; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
651 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
652 desc->tables.g_r = ceil(radius); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
653 desc->tables.o_r = ceil(thickness); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
654 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
|
655 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
|
656 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
|
657 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
658 // 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
|
659 |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
660 if (desc->tables.g_r) { |
18878 | 661 desc->tables.g = malloc(desc->tables.g_w * sizeof(unsigned)); |
662 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
|
663 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
|
664 return -1; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
665 } |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
666 } |
18878 | 667 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
|
668 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
|
669 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
670 omtp = desc->tables.omt; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
671 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
|
672 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
673 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
|
674 return -1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
675 }; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
676 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
677 if (desc->tables.g_r) { |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
678 // gaussian curve with volume = 256 |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
679 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
|
680 volume_factor+= volume_diff; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
681 desc->tables.volume=0; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
682 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
|
683 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
|
684 desc->tables.volume+= desc->tables.g[i]; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
685 } |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
686 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
|
687 } |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
688 desc->tables.volume=0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
689 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
|
690 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
|
691 desc->tables.volume+= desc->tables.g[i]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
692 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
693 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
694 // gauss table: |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
695 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
|
696 for(i=0;i<256;i++){ |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
697 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
|
698 } |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
699 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
700 } |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
701 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
702 /* outline matrix */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
703 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
|
704 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
|
705 // 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
|
706 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
|
707 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
|
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
711 // outline table: |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
712 for(i=0;i<256;i++){ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
713 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
|
714 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
715 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
716 return 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
717 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
718 |
27393 | 719 #ifdef CONFIG_ICONV |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
720 /* decode from 'encoding' to unicode */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
721 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
|
722 FT_ULong o; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
723 char *inbuf = &c; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
724 char *outbuf = (char*)&o; |
19204
17acc0a995e2
Fixes the format string for the warning message on line 182 (%x
diego
parents:
18980
diff
changeset
|
725 size_t inbytesleft = 1; |
17acc0a995e2
Fixes the format string for the warning message on line 182 (%x
diego
parents:
18980
diff
changeset
|
726 size_t outbytesleft = sizeof(FT_ULong); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
727 |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
7147
diff
changeset
|
728 iconv(*cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
729 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
730 /* convert unicode BigEndian -> MachineEndian */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
731 o = be2me_32(o); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
732 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
733 // 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
|
734 if (outbytesleft!=0) o = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
735 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
736 /* we don't want control characters */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
737 if (o>=0x7f && o<0xa0) o = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
738 return o; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
741 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
|
742 FT_ULong i; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
743 int count = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
744 int charset_size; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
745 iconv_t cd; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
746 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
747 // check if ucs-4 is available |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
748 cd = iconv_open(charmap, charmap); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
749 if (cd==(iconv_t)-1) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
750 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
|
751 return -1; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
754 iconv_close(cd); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
755 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
756 cd = iconv_open(charmap, encoding); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
757 if (cd==(iconv_t)-1) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
758 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
|
759 return -1; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
762 charset_size = 256 - first_char; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
763 for (i = 0; i<charset_size; ++i) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
764 charcodes[count] = i+first_char; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
765 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
|
766 if (charset[count]!=0) ++count; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
767 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
768 charcodes[count] = charset[count] = 0; ++count; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
769 charset_size = count; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
770 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
771 iconv_close(cd); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
772 if (charset_size==0) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
773 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
|
774 return -1; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
777 return charset_size; |
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 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
780 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
|
781 #ifdef HAVE_FREETYPE21 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
782 FT_ULong charcode; |
21606 | 783 #else |
784 int j; | |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
7147
diff
changeset
|
785 #endif |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
786 FT_UInt gindex; |
19205 | 787 int i; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
788 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
789 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
|
790 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
|
791 return -1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
792 } |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
793 #ifdef HAVE_FREETYPE21 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
794 i = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
795 charcode = FT_Get_First_Char( face, &gindex ); |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
796 while (gindex != 0) { |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
797 if (charcode < 65536 && charcode >= 33) { // sanity check |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
798 charset[i] = charcode; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
799 charcodes[i] = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
800 i++; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
801 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
802 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
|
803 } |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
804 #else |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
805 // 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
|
806 i = 0; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
807 for (j = 33; j < 65536; j++) { |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
808 gindex = FT_Get_Char_Index(face, j); |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
809 if (gindex > 0) { |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
810 charset[i] = j; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
811 charcodes[i] = 0; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
812 i++; |
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 } |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
815 #endif |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
816 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
|
817 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
818 return i; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
819 } |
17931
ed9950b8200d
The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents:
17566
diff
changeset
|
820 #endif |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
821 |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
15440
diff
changeset
|
822 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
|
823 { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
824 font_desc_t *desc; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
825 int i; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
826 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
827 desc = malloc(sizeof(font_desc_t)); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
828 if(!desc) return NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
829 memset(desc,0,sizeof(font_desc_t)); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
830 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
831 desc->dynamic = 1; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
832 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
833 /* setup sane defaults */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
834 desc->name = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
835 desc->fpath = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
836 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
837 desc->face_cnt = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
838 desc->charspace = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
839 desc->spacewidth = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
840 desc->height = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
841 desc->max_width = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
842 desc->max_height = 0; |
25612
6bee6b0eef6c
Set freetype flag in the font_desc_t when using a freetype font.
ulion
parents:
25351
diff
changeset
|
843 desc->freetype = 1; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
844 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
845 desc->tables.g = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
846 desc->tables.gt2 = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
847 desc->tables.om = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
848 desc->tables.omt = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
849 desc->tables.tmp = NULL; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
850 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
851 for(i = 0; i < 65536; i++) |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
852 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
|
853 for(i = 0; i < 16; i++) |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
854 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
|
855 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
856 return desc; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
857 } |
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 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
|
860 { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
861 int i; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
862 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
863 if (!desc) return; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
864 |
9176 | 865 // if (!desc->dynamic) return; // some vo_aa crap, better leaking than crashing |
9172 | 866 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
867 if (desc->name) free(desc->name); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
868 if (desc->fpath) free(desc->fpath); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
869 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
870 for(i = 0; i < 16; i++) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
871 if (desc->pic_a[i]) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
872 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
|
873 if (desc->pic_a[i]->pal) free(desc->pic_a[i]->pal); |
13632 | 874 free (desc->pic_a[i]); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
875 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
876 if (desc->pic_b[i]) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
877 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
|
878 if (desc->pic_b[i]->pal) free(desc->pic_b[i]->pal); |
13632 | 879 free (desc->pic_b[i]); |
7122
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 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
882 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
883 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
|
884 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
|
885 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
|
886 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
|
887 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
|
888 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
889 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
|
890 FT_Done_Face(desc->faces[i]); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
891 } |
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 free(desc); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
894 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
895 |
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
|
896 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
|
897 { |
7139 | 898 int err = -1; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
899 |
7139 | 900 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
|
901 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
902 if (err) { |
13632 | 903 char *font_file = get_path("subfont.ttf"); |
904 err = FT_New_Face(library, font_file, 0, face); | |
905 free(font_file); | |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
906 if (err) { |
10272
7b0bc557987b
renames: DATADIR->MPLAYER_DATADIR, CONFDIR->MPLAYER_CONFDIR, LIBDIR->MPLAYER_LIBDIR
arpi
parents:
9176
diff
changeset
|
907 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
|
908 if (err) { |
24864 | 909 mp_msg(MSGT_OSD, MSGL_ERR, MSGTR_LIBVO_FONT_LOAD_FT_NewFaceFailed); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
910 return -1; |
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 } |
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 return err; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
915 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
916 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
917 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
|
918 { |
7139 | 919 if ( FT_New_Memory_Face(library, osd_font_pfb, sizeof(osd_font_pfb), 0, face) ) { |
24864 | 920 mp_msg(MSGT_OSD, MSGL_ERR, MSGTR_LIBVO_FONT_LOAD_FT_NewMemoryFaceFailed); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
921 return -1; |
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 return 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
924 } |
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 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
|
927 { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
928 FT_Vector kern; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
929 |
23338
2a66d95355f0
add new -subfont option, that allows having a different font for OSD (controls and menu) and subtitles
ben
parents:
21606
diff
changeset
|
930 if (!desc->dynamic) return 0; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
931 if (prevc < 0 || c < 0) return 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
932 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
|
933 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
|
934 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
|
935 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
|
936 ft_kerning_default, &kern); |
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 // 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
|
939 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
940 return f266ToInt(kern.x); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
941 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
942 |
25851
9ebd00825df2
Allow independent scaling of vo_font and sub_font.
reimar
parents:
25612
diff
changeset
|
943 font_desc_t* read_font_desc_ft(const char *fname, int movie_width, int movie_height, float font_scale_factor) |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
944 { |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
945 font_desc_t *desc = NULL; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
946 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
947 FT_Face face; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
948 |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
949 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
|
950 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
|
951 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
952 char *charmap = "ucs-4"; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
953 int err; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
954 int charset_size; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
955 int i, j; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
956 int unicode; |
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 movie_size; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
959 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
960 float subtitle_font_ppem; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
961 float osd_font_ppem; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
962 |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
963 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
|
964 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
|
965 goto err_out; |
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
966 } |
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
967 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
968 switch (subtitle_autoscale) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
969 case 1: |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
970 movie_size = movie_height; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
971 break; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
972 case 2: |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
973 movie_size = movie_width; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
974 break; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
975 case 3: |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
976 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
|
977 break; |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
978 default: |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
979 movie_size = 100; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
980 break; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
981 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
982 |
25851
9ebd00825df2
Allow independent scaling of vo_font and sub_font.
reimar
parents:
25612
diff
changeset
|
983 subtitle_font_ppem = movie_size*font_scale_factor/100.0; |
9ebd00825df2
Allow independent scaling of vo_font and sub_font.
reimar
parents:
25612
diff
changeset
|
984 osd_font_ppem = movie_size*(font_scale_factor+1)/100.0; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
985 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
986 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
|
987 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
|
988 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
989 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
|
990 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
|
991 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
992 if ((subtitle_font_encoding == NULL) |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
993 || (strcasecmp(subtitle_font_encoding, "unicode") == 0)) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
994 unicode = 1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
995 } else { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
996 unicode = 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
997 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
998 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
999 desc = init_font_desc(); |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1000 if(!desc) goto err_out; |
7122
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 // t=GetTimer(); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1003 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1004 /* generate the subtitle font */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1005 err = load_sub_face(fname, &face); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1006 if (err) { |
24864 | 1007 mp_msg(MSGT_OSD, MSGL_WARN, MSGTR_LIBVO_FONT_LOAD_FT_SubFaceFailed); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1008 goto gen_osd; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1009 } |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
1010 desc->face_cnt++; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1011 |
27393 | 1012 #ifdef CONFIG_ICONV |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1013 if (unicode) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1014 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
|
1015 } else { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1016 if (subtitle_font_encoding) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1017 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
|
1018 } else { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1019 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
|
1020 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1021 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1022 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1023 if (charset_size < 0) { |
24864 | 1024 mp_msg(MSGT_OSD, MSGL_ERR, MSGTR_LIBVO_FONT_LOAD_FT_SubFontCharsetFailed); |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1025 goto err_out; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1026 } |
17931
ed9950b8200d
The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents:
17566
diff
changeset
|
1027 #else |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1028 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
|
1029 #endif |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1030 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1031 // 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
|
1032 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
1033 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
|
1034 charset_size, my_charset, my_charcodes, unicode, |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1035 subtitle_font_thickness, subtitle_font_radius); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1036 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1037 if (err) { |
24864 | 1038 mp_msg(MSGT_OSD, MSGL_ERR, MSGTR_LIBVO_FONT_LOAD_FT_CannotPrepareSubtitleFont); |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1039 goto err_out; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1040 } |
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 gen_osd: |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1043 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1044 /* generate the OSD font */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1045 err = load_osd_face(&face); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1046 if (err) { |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1047 goto err_out; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1048 } |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
1049 desc->face_cnt++; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
1050 |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
1051 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
|
1052 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
|
1053 subtitle_font_thickness, subtitle_font_radius); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1054 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1055 if (err) { |
24864 | 1056 mp_msg(MSGT_OSD, MSGL_ERR, MSGTR_LIBVO_FONT_LOAD_FT_CannotPrepareOSDFont); |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1057 goto err_out; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1058 } |
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 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
|
1061 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1062 if (err) { |
24864 | 1063 mp_msg(MSGT_OSD, MSGL_ERR, MSGTR_LIBVO_FONT_LOAD_FT_CannotGenerateTables); |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1064 goto err_out; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1065 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1066 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1067 // final cleanup |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1068 desc->font[' ']=-1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1069 desc->width[' ']=desc->spacewidth; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1070 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1071 j = '_'; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1072 if (desc->font[j] < 0) j = '?'; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1073 if (desc->font[j] < 0) j = ' '; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1074 render_one_glyph(desc, j); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1075 for(i = 0; i < 65536; i++) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1076 if (desc->font[i] < 0 && i != ' ') { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1077 desc->start[i] = desc->start[j]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1078 desc->width[i] = desc->width[j]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1079 desc->font[i] = desc->font[j]; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1080 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1081 } |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1082 free(my_charset); |
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1083 free(my_charcodes); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1084 return desc; |
19208
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1085 |
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1086 err_out: |
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1087 if (desc) |
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1088 free_font_desc(desc); |
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1089 free(my_charset); |
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1090 free(my_charcodes); |
99d6ca895c46
Avoid large amounts of data on the stack (> 900k on 64 bit systems).
reimar
parents:
19205
diff
changeset
|
1091 return NULL; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1092 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1093 |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
15440
diff
changeset
|
1094 int init_freetype(void) |
7122
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 int err; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1097 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1098 /* initialize freetype */ |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1099 err = FT_Init_FreeType(&library); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1100 if (err) { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1101 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
|
1102 return -1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1103 } |
8818 | 1104 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
|
1105 using_freetype = 1; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1106 return 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1107 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1108 |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
15440
diff
changeset
|
1109 int done_freetype(void) |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1110 { |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1111 int err; |
8635
81dbd28ef7c0
these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents:
8123
diff
changeset
|
1112 |
81dbd28ef7c0
these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents:
8123
diff
changeset
|
1113 if (!using_freetype) |
81dbd28ef7c0
these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents:
8123
diff
changeset
|
1114 return 0; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1115 |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1116 err = FT_Done_FreeType(library); |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1117 if (err) { |
24864 | 1118 mp_msg(MSGT_OSD, MSGL_ERR, MSGTR_LIBVO_FONT_LOAD_FT_DoneFreeTypeFailed); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1119 return -1; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1120 } |
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 return 0; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1123 } |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1124 |
25851
9ebd00825df2
Allow independent scaling of vo_font and sub_font.
reimar
parents:
25612
diff
changeset
|
1125 void load_font_ft(int width, int height, font_desc_t** fontp, const char *font_name, float font_scale_factor) |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1126 { |
27393 | 1127 #ifdef CONFIG_FONTCONFIG |
11580
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11500
diff
changeset
|
1128 FcPattern *fc_pattern; |
21501 | 1129 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
|
1130 FcChar8 *s; |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11500
diff
changeset
|
1131 FcBool scalable; |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11500
diff
changeset
|
1132 #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
|
1133 font_desc_t *vo_font = *fontp; |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1134 vo_image_width = width; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1135 vo_image_height = height; |
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1136 |
7140
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
1137 // protection against vo_aa font hacks |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
1138 if (vo_font && !vo_font->dynamic) return; |
b9ce54c7f30f
add Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz> freetype patch
pontscho
parents:
7139
diff
changeset
|
1139 |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1140 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
|
1141 |
27393 | 1142 #ifdef CONFIG_FONTCONFIG |
25351 | 1143 if (font_fontconfig > 0) |
11580
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11500
diff
changeset
|
1144 { |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11500
diff
changeset
|
1145 if (!font_name) |
17962
f35cfd56c800
NEVER assign static strings to string command line options.
albeu
parents:
17931
diff
changeset
|
1146 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
|
1147 FcInit(); |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11500
diff
changeset
|
1148 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
|
1149 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
|
1150 FcDefaultSubstitute(fc_pattern); |
21501 | 1151 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
|
1152 fc_pattern = FcFontMatch(0, fc_pattern, 0); |
21501 | 1153 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
|
1154 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
|
1155 if (scalable != FcTrue) { |
21501 | 1156 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
|
1157 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
|
1158 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
|
1159 FcDefaultSubstitute(fc_pattern); |
21501 | 1160 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
|
1161 fc_pattern = FcFontMatch(0, fc_pattern, 0); |
21501 | 1162 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
|
1163 } |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11500
diff
changeset
|
1164 // 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
|
1165 FcPatternGetString(fc_pattern, FC_FILE, 0, &s); |
25851
9ebd00825df2
Allow independent scaling of vo_font and sub_font.
reimar
parents:
25612
diff
changeset
|
1166 *fontp=read_font_desc_ft(s, width, height, font_scale_factor); |
21501 | 1167 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
|
1168 } |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11500
diff
changeset
|
1169 else |
90953d955165
Fontconfig support based on patch by Arwed von Merkatz <v.merkatz@gmx.net>, but slightly reworked
alex
parents:
11500
diff
changeset
|
1170 #endif |
25851
9ebd00825df2
Allow independent scaling of vo_font and sub_font.
reimar
parents:
25612
diff
changeset
|
1171 *fontp=read_font_desc_ft(font_name, width, height, font_scale_factor); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
diff
changeset
|
1172 } |