Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file fttext.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186(***********************************************************************)(* *)(* 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: fttext.ml,v 1.2 2008/06/16 22:35:42 furuse Exp $ *)openImagesopenFreetypetype'adrawer='a->int->'aletfunc_darken_onlyorglevel=letlevel=255-levelin{r=iforg.r>levelthenlevelelseorg.r;g=iforg.g>levelthenlevelelseorg.g;b=iforg.b>levelthenlevelelseorg.b}letfunc_red_only_org_level={r=255;g=0;b=0}letunicode_of_latins=Array.init(String.lengths)@@funi->Char.codes.[i]letunicode_of_euc_japans=Jis_unicode.encodesletdraw_genrender_moderenderfrotfuncfacepxpystring=letmatrix=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)(*
in
and py = py + (binfo.bitmap_top + binfo.bitmap_height - y)
*)infuncpxpylevelwithOut_of_image->()done;done;curx:=!curx+.advx;cury:=!cury+.advy;doneletdraw_rotated_text=draw_genRender_Normalrender_charletdraw_rotated_glyphs=draw_genRender_Normalrender_glyphletdraw_text=draw_rotated_text0.0letdraw_glyphs=draw_rotated_glyphs0.0letdraw_mono_rotated_text=draw_genRender_Monorender_charletdraw_mono_rotated_glyphs=draw_genRender_Monorender_glyphletdraw_mono_text=draw_mono_rotated_text0.0letdraw_mono_glyphs=draw_mono_rotated_glyphs0.0moduletypeT=sigtypettypeeltvalcreate:int->int->tvaldestroy:t->unitvalget:t->int->int->eltvalset:t->int->int->elt->unitvalunsafe_get:t->int->int->eltvalunsafe_set:t->int->int->elt->unitendmoduleMake(T:T)=structletputpixelfbitmap=funpxpylevel->tryletorgcolor=T.getbitmappxpyinT.setbitmappxpy(forgcolorlevel)withOut_of_image->()letdraw_rotated_textfacefuncbitmappxpyrotstring=draw_rotated_textrot(putpixelfuncbitmap)facepxpystringletdraw_rotated_glyphsfacefuncbitmappxpyrotstring=draw_rotated_glyphsrot(putpixelfuncbitmap)facepxpystringletdraw_textfacefuncbitmappxpystring=draw_text(putpixelfuncbitmap)facepxpystringletdraw_glyphsfacefuncbitmappxpystring=draw_glyphs(putpixelfuncbitmap)facepxpystringletdraw_mono_rotated_textfacefuncbitmappxpyrotstring=draw_mono_rotated_textrot(putpixelfuncbitmap)facepxpystringletdraw_mono_rotated_glyphsfacefuncbitmappxpyrotstring=draw_mono_rotated_glyphsrot(putpixelfuncbitmap)facepxpystringletdraw_mono_textfacefuncbitmappxpystring=draw_mono_text(putpixelfuncbitmap)facepxpystringletdraw_mono_glyphsfacefuncbitmappxpystring=draw_mono_glyphs(putpixelfuncbitmap)facepxpystringendletsize_genfaceloadfstring=letcurx=ref0.0andleftmost=refNoneandrightmost=refNoneandupmost=refNoneanddownmost=refNoneinfori=0toArray.lengthstring-1dolet_advx,_advy=loadffacestring.(i)[]inletmetrics=get_glyph_metricsfaceinletleft=metrics.gm_hori.bearingx+.!curxandright=metrics.gm_hori.bearingx+.metrics.gm_width+.!curxandup=metrics.gm_hori.bearingyanddown=metrics.gm_hori.bearingy-.metrics.gm_heightinbeginmatch!leftmostwith|None->leftmost:=Someleft|Somexwhenx>left->leftmost:=Someleft|_->()end;beginmatch!rightmostwith|None->rightmost:=Someright|Somexwhenx<right->rightmost:=Someright|_->()end;beginmatch!upmostwith|None->upmost:=Someup|Somexwhenx<up->upmost:=Someup|_->()end;beginmatch!downmostwith|None->downmost:=Somedown|Somexwhenx>down->downmost:=Somedown|_->()end;curx:=!curx+.metrics.gm_hori.advancedone;match!leftmost,!downmost,!rightmost,!upmostwithSomel,Somed,Somer,Someu->l,d,r,u|_->assertfalseletsizefacestring=size_genfaceload_charstringletsize_of_glyphsfacestring=size_genfaceload_glyphstringletvector_genloadfturn_yrotfuncfacepxpystring=letmatrix=matrix_rotaterotinletmatrix=ifturn_ythen{matrixwithft_xy=-.matrix.ft_xy;ft_yy=-.matrix.ft_yy;}elsematrixinletcurx=refpxandcury=refpyinfori=0toArray.lengthstring-1doset_transformfacematrix{ft_x=!curx;ft_y=!cury};letadvx,advy=loadffacestring.(i)[]infunc(get_outline_contentsface);curx:=!curx+.advx;cury:=!cury+.advydoneletvector_textturn_yfuncfacepxpyrotstring=vector_genload_charturn_yrotfuncfacepxpystringletvector_glyphsturn_yfuncfacepxpyrotstring=vector_genload_glyphturn_yrotfuncfacepxpystring