Fonts and Text

The Font structure contains functions and structures to manipulate fonts and draw text.

structure Font :

  sig

    type HDC and HFONT

    type COLORREF = Color.COLORREF

    type POINT = {x: int, y: int}

    and  SIZE = {cx: int, cy: int }

    and  RECT = { top: int, left: int, bottom: int, right: int }



    datatype FontFamily =

          FF_DECORATIVE

        | FF_DONTCARE

        | FF_MODERN

        | FF_ROMAN

        | FF_SCRIPT

        | FF_SWISS

    and FontPitch = DEFAULT_PITCH | FIXED_PITCH | VARIABLE_PITCH

    and OutputPrecision =

          OUT_CHARACTER_PRECIS

        | OUT_DEFAULT_PRECIS

        | OUT_DEVICE_PRECIS

        | OUT_OUTLINE_PRECIS

        | OUT_RASTER_PRECIS

        | OUT_SCREEN_OUTLINE_PRECIS

        | OUT_STRING_PRECIS

        | OUT_STROKE_PRECIS

        | OUT_TT_ONLY_PRECIS

        | OUT_TT_PRECIS

    and OutputQuality =

          DEFAULT_QUALITY

        | DRAFT_QUALITY

        | OTHER_QUALITY of int

        | PROOF_QUALITY

    and CharacterSet =

          ANSI_CHARSET

        | CHINESEBIG5_CHARSET

        | DEFAULT_CHARSET

        | HANGEUL_CHARSET

        | OEM_CHARSET

        | OTHER_CHARSET of int

        | SHIFTJIS_CHARSET

        | SYMBOL_CHARSET



    type FontWeight =  int

    val FW_BLACK : FontWeight

    val FW_BOLD : FontWeight

    val FW_DEMIBOLD : FontWeight

    val FW_DONTCARE : FontWeight

    val FW_EXTRABOLD : FontWeight

    val FW_EXTRALIGHT : FontWeight

    val FW_HEAVY : FontWeight

    val FW_LIGHT : FontWeight

    val FW_MEDIUM : FontWeight

    val FW_NORMAL : FontWeight

    val FW_REGULAR : FontWeight

    val FW_SEMIBOLD : FontWeight

    val FW_THIN : FontWeight

    val FW_ULTRABOLD : FontWeight

    val FW_ULTRALIGHT : FontWeight



    type ClippingPrecision

    val CLIP_CHARACTER_PRECIS : ClippingPrecision

    val CLIP_DEFAULT_PRECIS : ClippingPrecision

    val CLIP_EMBEDDED : ClippingPrecision

    val CLIP_LH_ANGLES : ClippingPrecision

    val CLIP_MASK : ClippingPrecision

    val CLIP_STROKE_PRECIS : ClippingPrecision

    val CLIP_TT_ALWAYS : ClippingPrecision



    type LOGFONT =

    {

        height : int,

        width : int,

        escapement : int,

        orientation : int,

        weight : FontWeight,

        italic : bool,

        underline : bool,

        strikeOut : bool,

        charSet : CharacterSet,

        outputPrecision: OutputPrecision,

        clipPrecision : ClippingPrecision,

        quality : OutputQuality,

        pitch: FontPitch,

        family: FontFamily,

        faceName : string

    }



    datatype DrawTextMode =

          DT_BOTTOM

        | DT_CALCRECT

        | DT_CENTER

        | DT_EXPANDTABS

        | DT_EXTERNALLEADING

        | DT_INTERNAL

        | DT_LEFT

        | DT_NOCLIP

        | DT_NOPREFIX

        | DT_RIGHT

        | DT_SINGLELINE

        | DT_TABSTOP of int

        | DT_TOP

        | DT_VCENTER

        | DT_WORDBREAK

    and TextAlign =

          TA_BASELINE

        | TA_BOTTOM

        | TA_CENTER

        | TA_LEFT

        | TA_NOUPDATECP

        | TA_RIGHT

        | TA_TOP

        | TA_UPDATECP

    and TextMetricPitch =

          TMPF_DEVICE

        | TMPF_FIXED_PITCH

        | TMPF_TRUETYPE

        | TMPF_VECTOR

    and ExtendedTextMode =

          ETO_CLIPPED

        | ETO_GLYPH_INDEX

        | ETO_IGNORELANGUAGE

        | ETO_OPAQUE

        | ETO_RTLREADING



    type TEXTMETRIC =

            { height: int, ascent: int, descent: int, internalLeading: int, externalLeading: int,

              aveCharWidth: int, maxCharWidth: int, weight: int, overhang: int,

              digitizedAspectX: int, digitizedAspectY: int, firstChar: char, lastChar: char,

              defaultChar: char, breakChar: char, italic: bool, underlined: bool, struckOut: bool,

              pitch: TextMetricPitch list, family: FontFamily, charSet : CharacterSet }



    val AddFontResource : string -> int

    val CreateFont : LOGFONT -> HFONT

    val CreateFontIndirect : LOGFONT -> HFONT

    val CreateScalableFontResource : int * string * string * string -> unit

    val DrawText : HDC * string * RECT * DrawTextMode list -> int

    val ExtTextOut : HDC * POINT * ExtendedTextMode list *

       RECT option * string * int list -> unit

    val GetAspectRatioFilterEx : HDC -> SIZE

    val GetCharABCWidths : HDC * char * char -> (int * int * int) list

    val GetCharABCWidthsFloat : HDC * char * char -> (real * real * real) list

    val GetCharWidth32 : HDC * char * char -> int list

    val GetTabbedTextExtent : HDC * string * int list -> SIZE

    val GetCharWidthFloat : HDC * int * int -> real list

    val GetTextAlign : HDC -> TextAlign list

    val GetTextCharacterExtra : HDC -> int

    val GetTextColor : HDC -> COLORREF

    val GetTextExtentExPoint : HDC * string * int option ->

       {fit: int option, size: SIZE, extents: int list}

    val GetTextExtentPoint32 : HDC * string -> SIZE

    val GetTextFace : HDC -> string

    val GetTextMetrics : HDC -> TEXTMETRIC

    val RemoveFontResource : string -> unit

    val SetMapperFlags : HDC * bool -> bool

    val SetTextAlign : HDC * TextAlign list -> TextAlign list

    val SetTextCharacterExtra : HDC * int -> int

    val SetTextColor : HDC * COLORREF -> COLORREF

    val SetTextJustification : HDC * int * int -> unit

    val TabbedTextOut: HDC * POINT * string * int list * int -> SIZE

    val TextOut : HDC * POINT * String.string -> unit

  end