Blame frx/frx_font.ml

Packit bd2e5d
(***********************************************************************)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(*                 MLTk, Tcl/Tk interface of OCaml                     *)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(*    Francois Rouaix, Francois Pessaux, Jun Furuse and Pierre Weis    *)
Packit bd2e5d
(*               projet Cristal, INRIA Rocquencourt                    *)
Packit bd2e5d
(*            Jacques Garrigue, Kyoto University RIMS                  *)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(*  Copyright 2002 Institut National de Recherche en Informatique et   *)
Packit bd2e5d
(*  en Automatique and Kyoto University.  All rights reserved.         *)
Packit bd2e5d
(*  This file is distributed under the terms of the GNU Library        *)
Packit bd2e5d
(*  General Public License, with the special exception on linking      *)
Packit bd2e5d
(*  described in file LICENSE found in the OCaml source tree.          *)
Packit bd2e5d
(*                                                                     *)
Packit bd2e5d
(***********************************************************************)
Packit bd2e5d
open Camltk
Packit bd2e5d
open Widget
Packit bd2e5d
Packit bd2e5d
let version = "$Id$"
Packit bd2e5d
Packit bd2e5d
(*
Packit bd2e5d
 * Finding fonts. Inspired by code in Ical by Sanjay Ghemawat.
Packit bd2e5d
 * Possibly bogus because some families use "i" for italic where others
Packit bd2e5d
 * use "o".
Packit bd2e5d
 * wght: bold, medium
Packit bd2e5d
 * slant: i, o, r
Packit bd2e5d
 * pxlsz: 8, 10, ...
Packit bd2e5d
*)
Packit bd2e5d
module StringSet = Set.Make(struct type t = string let compare = compare end)
Packit bd2e5d
Packit bd2e5d
let available_fonts = ref (StringSet.empty)
Packit bd2e5d
Packit bd2e5d
let get_canvas =
Packit bd2e5d
  Frx_misc.autodef (fun () -> Canvas.create Widget.default_toplevel [])
Packit bd2e5d
Packit bd2e5d
Packit bd2e5d
let find fmly wght slant pxlsz =
Packit bd2e5d
  let fontspec =
Packit bd2e5d
     "-*-"^fmly^"-"^wght^"-"^slant^"-normal-*-"^string_of_int pxlsz^"-*-*-*-*-*-iso8859-1" in
Packit bd2e5d
    if StringSet.mem fontspec !available_fonts then fontspec
Packit bd2e5d
    else
Packit bd2e5d
      let c = get_canvas() in
Packit bd2e5d
      try
Packit bd2e5d
        let tag = Canvas.create_text c (Pixels 0) (Pixels 0)
Packit bd2e5d
                                [Text "foo"; Font fontspec] in
Packit bd2e5d
           Canvas.delete c [tag];
Packit bd2e5d
           available_fonts := StringSet.add fontspec !available_fonts;
Packit bd2e5d
           fontspec
Packit bd2e5d
      with
Packit bd2e5d
        _ -> raise (Invalid_argument fontspec)