Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file freetype.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209(***********************************************************************)(* *)(* 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: freetype.ml,v 1.1 2007/01/18 10:29:57 rousse Exp $*)type('a,'b)refbox={cont:'a;ref:'bref;}typet=(Ftlow.library,unit)refboxletinit()=lett={cont=Ftlow.init();ref=ref()}inGc.finalise(funv->Ftlow.closev.cont)t;ttypeface=(Ftlow.face,t)refboxtypeface_info=Ftlow.face_info={num_faces:int;num_glyphs:int;family_name:string;style_name:string;has_horizontal:bool;has_vertical:bool;has_kerning:bool;is_scalable:bool;is_sfnt:bool;is_fixed_width:bool;has_fixed_sizes:bool;has_fast_glyphs:bool;has_glyph_names:bool;has_multiple_masters:bool;}letdone_faceface=Ftlow.done_faceface.contletnew_facetfontidx=letface={cont=Ftlow.new_facet.contfontidx;ref=reft}inletinfo=Ftlow.face_infoface.continGc.finalisedone_faceface;face,infoletget_num_glyphsface=Ftlow.get_num_glyphsface.contletfloat_of_intfracdotbitsi=letd=float(1lsldotbits)infloati/.dletintfrac_of_floatdotbitsf=letd=float(1lsldotbits)intruncate(f*.d)letintfrac6_of_float=intfrac_of_float6letfloat_of_intfrac6=float_of_intfrac6letintfrac16_of_float=intfrac_of_float16letfloat_of_intfrac16=float_of_intfrac16letvector_float_of_intfrac6(x,y)=float_of_intfrac6x,float_of_intfrac6yletset_char_sizefacechar_wchar_hres_hres_v=Ftlow.set_char_sizeface.cont(intfrac6_of_floatchar_w)(intfrac6_of_floatchar_h)res_hres_vletset_pixel_sizesfacepixel_wpixel_h=Ftlow.set_pixel_sizesface.contpixel_wpixel_htypecharmap=Ftlow.charmap={platform_id:int;encoding_id:int;}typechar_index=int(* abstracted *)letint_of_char_index=funx->xletchar_index_of_int=funx->xletget_charmapsface=Ftlow.get_charmapsface.contletset_charmapfacecharmap=Ftlow.set_charmapface.contcharmapletget_char_indexfacecode=Ftlow.get_char_indexface.contcodetyperender_mode=Ftlow.render_mode=|Render_Normal|Render_Monotypeload_flag=Ftlow.load_flag=|Load_no_scale|Load_no_hintingletload_glyphfaceindexflags=vector_float_of_intfrac6(Ftlow.load_glyphface.contindexflags)letload_charfacecodeflags=vector_float_of_intfrac6(Ftlow.load_charface.contcodeflags)letrender_glyph_of_facefacerender_mode=Ftlow.render_glyph_of_faceface.contrender_modeletrender_glyphfaceindexflagsrender_mode=vector_float_of_intfrac6(Ftlow.render_glyphface.contindexflagsrender_mode)letrender_charfacecodeflagsrender_mode=vector_float_of_intfrac6(Ftlow.render_charface.contcodeflagsrender_mode)typematrix={ft_xx:float;ft_xy:float;ft_yx:float;ft_yy:float;}typevector={ft_x:float;ft_y:float;}letset_transformfacematvec=Ftlow.set_transformface.cont(intfrac16_of_floatmat.ft_xx,intfrac16_of_floatmat.ft_xy,intfrac16_of_floatmat.ft_yx,intfrac16_of_floatmat.ft_yy)(intfrac6_of_floatvec.ft_x,intfrac6_of_floatvec.ft_y)letmatrix_rotater=letc=cosrands=sinrin{ft_xx=c;ft_xy=-.s;ft_yx=s;ft_yy=c}typebitmap_info=Ftlow.bitmap_info={bitmap_left:int;bitmap_top:int;bitmap_width:int;bitmap_height:int;}letget_bitmap_infoface=Ftlow.get_bitmap_infoface.contletread_bitmapfacexy=Ftlow.read_bitmapface.contxy(* glyph metrics *)typebbox={xmin:float;ymin:float;xmax:float;ymax:float;}typebearing_advance={bearingx:float;bearingy:float;advance:float;}typeglyph_metrics={gm_width:float;gm_height:float;gm_hori:bearing_advance;gm_vert:bearing_advance;}letget_glyph_metricsface=letbearing_advance_float_of_intfrac6ba={bearingx=float_of_intfrac6ba.Ftlow.bearingx;bearingy=float_of_intfrac6ba.Ftlow.bearingy;advance=float_of_intfrac6ba.Ftlow.advance;}inletgm=Ftlow.get_glyph_metricsface.contin{gm_width=float_of_intfrac6gm.Ftlow.gm_width;gm_height=float_of_intfrac6gm.Ftlow.gm_height;gm_hori=bearing_advance_float_of_intfrac6gm.Ftlow.gm_hori;gm_vert=bearing_advance_float_of_intfrac6gm.Ftlow.gm_vert;}(* size metrics *)typesize_metrics={x_ppem:int;y_ppem:int;x_scale:float;y_scale:float;}letget_size_metricsface=letlow=Ftlow.get_size_metricsface.contin{x_ppem=low.Ftlow.x_ppem;y_ppem=low.Ftlow.y_ppem;x_scale=float_of_intfrac16low.Ftlow.x_scale;y_scale=float_of_intfrac16low.Ftlow.y_scale;}(* outline info *)typeoutline_tag=Ftlow.outline_tag=|On_point|Off_point_conic|Off_point_cubictypeoutline_contents={n_contours:int;n_points:int;points:(float*float)array;tags:outline_tagarray;contours:intarray;}letget_outline_contentsface=letoc=Ftlow.get_outline_contentsface.contin{n_contours=oc.Ftlow.n_contours;n_points=oc.Ftlow.n_points;points=Array.map(fun(x,y)->float_of_intfrac6x,float_of_intfrac6y)oc.Ftlow.points;tags=oc.Ftlow.tags;contours=oc.Ftlow.contours;}