123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163(***********************************************************************)(* *)(* Objective Caml *)(* *)(* Jun Furuse, projet Cristal, INRIA Rocquencourt *)(* *)(* Copyright 1999-2004, *)(* Institut National de Recherche en Informatique et en Automatique. *)(* Distributed only by permission. *)(* *)(***********************************************************************)(* $Id: oFreetype.ml,v 1.2 2008/06/16 22:35:42 furuse Exp $ *)openImagesopenFreetypeletlibrary=refNone(* We do not want more than 1 engine, don't we ? *)letget_library()=match!librarywith|None->lete=init()inlibrary:=Somee;e|Somee->eclassfacefileid=letlibrary=get_library()inletface,_info=new_facelibraryfileidinobjectmethodlibrary=librarymethodface=facemethodset_char_size=set_char_sizefacemethodset_pixel_sizes=set_pixel_sizesfacemethodnum_glyphs=get_num_glyphsfacemethodcharmaps=get_charmapsfacemethodset_charmap=set_charmapfacemethodchar_index=get_char_indexfacemethodload_glyph=load_glyphfacemethodload_char=load_charfacemethodrender_glyph_of_face=render_glyph_of_facefacemethodrender_glyph=render_glyphfacemethodrender_char=render_charfacemethodset_transform=set_transformfacemethodglyph_metrics=get_glyph_metricsfacemethodsize_metrics=get_size_metricsfacemethodoutline_contents=get_outline_contentsfacemethodsizestring=Fttext.sizefacestringmethodsize_of_glyphsstring=Fttext.size_of_glyphsfacestringendletdraw_genrender_moderenderfrotfuncfacepxpystring=letface=face#faceinletmatrix=matrix_rotaterotinletcurx=ref(0.0)andcury=ref(0.0)infori=0toArray.lengthstring-1doset_transformfacematrix{ft_x=!curx;ft_y=!cury};letadvx,advy=renderffacestring.(i)[]render_modeinletbinfo=get_bitmap_infofaceinfory=0tobinfo.bitmap_height-1doforx=0tobinfo.bitmap_width-1doletz=read_bitmapfacexyinletlevel=ifz<0then0elseifz>255then255elsezinletpx=px+binfo.bitmap_left+xandpy=py-(binfo.bitmap_top-binfo.bitmap_height+y)infuncpxpyleveldone;done;curx:=!curx+.advx;cury:=!cury+.advydoneletdraw_rotated_genrender_modeface(func:'a->int->'a)(image:'aOImages.map)pxpyrotrenderfstring=(*let putpixel px py level =
try
let orgcolor = image#get px py in
image#set px py (func orgcolor level);
with
Out_of_image -> ()
in*)letface=face#faceinletmatrix=matrix_rotaterotinletcurx=ref(0.0)andcury=ref(0.0)infori=0toArray.lengthstring-1doset_transformfacematrix{ft_x=!curx;ft_y=!cury};letadvx,advy=renderffacestring.(i)[]render_modeinletbinfo=get_bitmap_infofaceinfory=0tobinfo.bitmap_height-1doforx=0tobinfo.bitmap_width-1doletz=read_bitmapfacexyinletlevel=ifz<0then0elseifz>255then255elsezintryletpx=px+binfo.bitmap_left+xandpy=py-(binfo.bitmap_top-binfo.bitmap_height+y)inletorgcolor=image#getpxpyinimage#setpxpy(funcorgcolorlevel);withOut_of_image->()done;done;curx:=!curx+.advx;cury:=!cury+.advydoneletdraw_rotated_textfacefuncimagexyrotstring=draw_rotated_genRender_Normalfacefuncimagexyrotrender_charstringletdraw_rotated_glyphsfacefuncimagexyrotstring=draw_rotated_genRender_Normalfacefuncimagexyrotrender_glyphstringletdraw_textfacefuncimagexystring=draw_rotated_textfacefuncimagexy0.0stringletdraw_glyphsfacefuncimagexystring=draw_rotated_glyphsfacefuncimagexy0.0string(* mono *)letdraw_mono_rotated_textfacefuncimagexyrotstring=draw_rotated_genRender_Monofacefuncimagexyrotrender_charstringletdraw_mono_rotated_glyphsfacefuncimagexyrotstring=draw_rotated_genRender_Monofacefuncimagexyrotrender_glyphstringletdraw_mono_textfacefuncimagexystring=draw_mono_rotated_textfacefuncimagexy0.0stringletdraw_mono_glyphsfacefuncimagexystring=draw_mono_rotated_glyphsfacefuncimagexy0.0string(* Vector based *)letvector_textturn_yfuncfacepxpyrotstring=Fttext.vector_genload_charturn_yrotfuncface#facepxpystringletvector_glyphsturn_yfuncfacepxpyrotstring=Fttext.vector_genload_glyphturn_yrotfuncface#facepxpystring