# Models a font that has been loaded from disk and kept in storage class Font < Store extend Store::Forward # Loads a truetype or opentype font def self.load_ttf(name, vpath, height, flags = 0) load_something(forward_name(name), vpath, self) do | nid | Eruta::Store.load_ttf_font(nid, vpath, height, flags=0) end end # Loads a truetype or opentype font and stretches it def self.load_ttf_stretch(name, vpath, height, width, flags) load_something(forward_name(name), vpath, self) do | nid | Eruta::Store.load_ttf_stretch(nid, vpath, height, width, flags) end end # Loads a bitmap font def self.load_bitmap(name, vpath) load_something(forward_name(name), vpath, self) do | nid | Eruta::Store.load_bitmap_font(nid, flags) end end # Loads a bitmap font with flags def self.load_bitmap_flags(name, vpath, flags) load_something(forward_name(name), vpath, self) do | nid | Eruta::Store.load_bitmap_font_flags(nid, vpath, flags) end end # Loads a font. If the extension is .ttf or .otf, this calls # load_ttf or load_ttf_stretch, otherwise it calls load_bitmap or # load_bitmap_flags def self.load(name, vpath, *args) ext = vpath.split('.').last.downcase case ext when 'ttf', 'otf', 'afm', 'pfb', 'pfm', 'pcf', 'gz', 'sfd' if args.size >= 3 height, width, flags = *args return load_ttf_strech(name, vpath, height, width, flags) else height, flags = *args return load_ttf(name, vpath, height, flags) end when 'bmp', 'pcx', 'tga', 'jpeg', 'jpg', 'png' if args.size >= 1 flags = *args return load_bitmap_flags(name, vpath, flags) else return load_bitmap(name, vpath) end else raise "Unknown font file name extension." end end # Ascent height of the font. def ascent return Eruta::Store.font_ascent(@id) end # Descent of the font. def descent return Eruta::Store.font_descent(@id) end # Line height of the font. def line_height return Eruta::Store.font_line_height(@id) end # Text dimensions of the given text in the font. def text_dimensions(text) return Eruta::Store.text_dimensions(@id, text) end # Width of the given text in the font. def text_width(text) return Eruta::Store.text_width(@id, text) end end