aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/freetype/main_3.c184
-rw-r--r--tests/freetype/ref_3.txt33
-rwxr-xr-xtests/runner.py14
3 files changed, 230 insertions, 1 deletions
diff --git a/tests/freetype/main_3.c b/tests/freetype/main_3.c
new file mode 100644
index 00000000..c3941a17
--- /dev/null
+++ b/tests/freetype/main_3.c
@@ -0,0 +1,184 @@
+/* example1.c */
+/* */
+/* This small program shows how to print a rotated string with the */
+/* FreeType 2 library. */
+
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <stdlib.h>
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+
+int WIDTH = 0;
+int HEIGHT = 0;
+
+/* origin is the upper left corner */
+unsigned char *image;
+
+unsigned char pixelData[32 * 32];
+
+/* Replace this function with something useful. */
+void
+draw_bitmap( FT_Bitmap* bitmap,
+ FT_Int x,
+ FT_Int y)
+{
+ FT_Int i, j, p, q;
+ FT_Int x_max = x + bitmap->width;
+ FT_Int y_max = y + bitmap->rows;
+ int xbyte;
+ int xbit;
+ unsigned char* pcur;
+
+ unsigned char* src = bitmap->buffer;
+ unsigned char* dest = pixelData;
+
+ // Note: FT_RENDER_MONO_MODE render characater's one pixel by a single bit,
+ // translate the single bit to a single char for displaying image.
+ for(int _y = 0; _y < bitmap->rows; ++_y)
+ {
+ for(int _x = 0; _x < bitmap->width; ++_x)
+ {
+ xbyte = _x / 8;
+ xbit = _x - xbyte * 8;
+ pcur = dest + _x;
+
+ // test if the pixel bit be set
+ if(src[xbyte] & (0x80 >> xbit))
+ {
+ *pcur = 0xFF;
+ }
+ else
+ {
+ *pcur = 0;
+ }
+ }
+ src += bitmap->pitch;
+ dest += bitmap->width;
+ }
+
+ // display the character to ref txt file
+ for ( i = x, p = 0; i < x_max; i++, p++ )
+ {
+ for ( j = y, q = 0; j < y_max; j++, q++ )
+ {
+ if ( i < 0 || j < 0 ||
+ i >= WIDTH || j >= HEIGHT )
+ continue;
+
+ image[j*WIDTH + i] |= pixelData[q * bitmap->width + p];
+ }
+ }
+}
+
+
+void
+show_image( void )
+{
+ int i, j;
+ int count = 0;
+
+ for ( i = 0; i < HEIGHT; i++ )
+ {
+ for ( j = 0; j < WIDTH; j++ ) {
+ if (image[i*WIDTH + j]) count++;
+ putchar( image[i*WIDTH + j] == 0 ? ' '
+ : image[i*WIDTH + j] < 128 ? '+'
+ : '*');
+ }
+ putchar('\n');
+ }
+ printf("Non-0s: %d\n", count);
+}
+
+
+int
+main( int argc,
+ char** argv )
+{
+ FT_Library library;
+ FT_Face face;
+
+ FT_GlyphSlot slot;
+ FT_Error error;
+ FT_Vector pen; /* untransformed origin */
+
+ char* filename;
+ char* text;
+
+ double angle;
+ int target_height;
+ int n, num_chars;
+ FT_UInt glyphIndex;
+
+ if ( argc != 6 )
+ {
+ fprintf ( stderr, "usage: %s font sample-text width height angle\n", argv[0] );
+ exit( 1 );
+ }
+
+ filename = argv[1]; /* first argument */
+ text = argv[2]; /* second argument */
+ num_chars = strlen( text );
+ WIDTH = atoi(argv[3]);
+ HEIGHT = atoi(argv[4]);
+ angle = ( ((float)atoi(argv[5])) / 360 ) * 3.14159 * 2; /* use 25 degrees */
+ target_height = HEIGHT;
+
+ image = (unsigned char*)malloc(WIDTH*HEIGHT);
+ for (int x = 0; x < WIDTH; x++)
+ for (int y = 0; y < HEIGHT; y++)
+ image[y*WIDTH + x] = 0;
+
+ error = FT_Init_FreeType( &library ); /* initialize library */
+ if (error) printf("Init Error! %d\n", error);
+
+ error = FT_New_Face( library, argv[1], 0, &face ); /* create face object */
+ if (error) printf("New_Face Error! %d\n", error);
+
+ /* use 50pt at 100dpi */
+ error = FT_Set_Char_Size( face, 32 * 64, 0,
+ 0, 0 ); /* set character size */
+ if (error) printf("Set_Char_Size Error! %d\n", error);
+
+ slot = face->glyph;
+ pen.x = 0;
+ pen.y = 0;
+ for ( n = 0; n < num_chars; n++ )
+ {
+ /* set transformation */
+ FT_Set_Transform( face, 0, &pen );
+
+ /* load glyph image into the slot (erase previous one) */
+ glyphIndex = FT_Get_Char_Index(face, text[n]);
+
+ /* load glyph image into the slot (erase previous one) */
+ error = FT_Load_Glyph(face, glyphIndex, FT_LOAD_DEFAULT);
+ if(error) printf("FT_Load_Glyph Error! %d\n", error);
+
+ error = FT_Render_Glyph(slot, FT_RENDER_MODE_MONO);
+ if(error) printf("FT_Render_Glyph Error! %d\n", error);
+
+ /* now, draw to our target surface (convert position) */
+ draw_bitmap(&slot->bitmap,
+ slot->bitmap_left,
+ target_height - slot->bitmap_top );
+
+ /* increment pen position */
+ pen.x += slot->advance.x;
+ pen.y += slot->advance.y;
+ }
+
+ show_image();
+
+ FT_Done_Face ( face );
+ FT_Done_FreeType( library );
+
+ return 0;
+}
+
+/* EOF */
diff --git a/tests/freetype/ref_3.txt b/tests/freetype/ref_3.txt
new file mode 100644
index 00000000..2b121eb7
--- /dev/null
+++ b/tests/freetype/ref_3.txt
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+***** ***** ****
+***** ****** *****
+***** ******* *****
+***** ******* ****
+ ***** ******* ****
+ ***** *** **** *****
+ ***** **** **** ****
+ **** **** **** ****
+ ***** **** **** ****
+ ***** **** ***** ****
+ ***** **** **** ****
+ **** **** **** ****
+ **** **** **** ****
+ ***** *** **** ****
+ **** **** **** ****
+ **** **** **** ****
+ **** **** **** ***
+ ******* ********
+ ******* *******
+ ******* *******
+ ******* ******
+ ***** *****
+Non-0s: 342
diff --git a/tests/runner.py b/tests/runner.py
index 5d9473f7..7028dd33 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -4724,6 +4724,10 @@ def process(filename):
)
open(filename, 'w').write(src)
'''
+
+ # Not needed for js, but useful for debugging
+ shutil.copyfile(path_from_root('tests', 'freetype', 'LiberationSansBold.ttf'), os.path.join(self.get_dir(), 'font.ttf'))
+
# Main
self.do_run(open(path_from_root('tests', 'freetype', 'main.c'), 'r').read(),
open(path_from_root('tests', 'freetype', 'ref.txt'), 'r').read(),
@@ -4733,7 +4737,7 @@ def process(filename):
post_build=post)
#build_ll_hook=self.do_autodebug)
- # Second testcase, github issue 324
+ # github issue 324
print '[issue 324]'
self.do_run(open(path_from_root('tests', 'freetype', 'main_2.c'), 'r').read(),
open(path_from_root('tests', 'freetype', 'ref_2.txt'), 'r').read(),
@@ -4742,6 +4746,14 @@ def process(filename):
includes=[path_from_root('tests', 'freetype', 'include')],
post_build=post)
+ print '[issue 324 case 2]'
+ self.do_run(open(path_from_root('tests', 'freetype', 'main_3.c'), 'r').read(),
+ open(path_from_root('tests', 'freetype', 'ref_3.txt'), 'r').read(),
+ ['font.ttf', 'W', '32', '32', '0'],
+ libraries=self.get_freetype(),
+ includes=[path_from_root('tests', 'freetype', 'include')],
+ post_build=post)
+
def test_sqlite(self):
# gcc -O3 -I/home/alon/Dev/emscripten/tests/sqlite -ldl src.c
if self.emcc_args is None: return self.skip('Very slow without ta2, and we would also need to include dlmalloc manually without emcc')