root/lib/fonts/fonts.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. find_font
  2. get_default_font

   1 /*
   2  * `Soft' font definitions
   3  *
   4  *    Created 1995 by Geert Uytterhoeven
   5  *    Rewritten 1998 by Martin Mares <mj@ucw.cz>
   6  *
   7  *      2001 - Documented with DocBook
   8  *      - Brad Douglas <brad@neruo.com>
   9  *
  10  * This file is subject to the terms and conditions of the GNU General Public
  11  * License.  See the file COPYING in the main directory of this archive
  12  * for more details.
  13  */
  14 
  15 #include <linux/module.h>
  16 #include <linux/types.h>
  17 #include <linux/string.h>
  18 #if defined(__mc68000__)
  19 #include <asm/setup.h>
  20 #endif
  21 #include <linux/font.h>
  22 
  23 static const struct font_desc *fonts[] = {
  24 #ifdef CONFIG_FONT_8x8
  25         &font_vga_8x8,
  26 #endif
  27 #ifdef CONFIG_FONT_8x16
  28         &font_vga_8x16,
  29 #endif
  30 #ifdef CONFIG_FONT_6x11
  31         &font_vga_6x11,
  32 #endif
  33 #ifdef CONFIG_FONT_7x14
  34         &font_7x14,
  35 #endif
  36 #ifdef CONFIG_FONT_SUN8x16
  37         &font_sun_8x16,
  38 #endif
  39 #ifdef CONFIG_FONT_SUN12x22
  40         &font_sun_12x22,
  41 #endif
  42 #ifdef CONFIG_FONT_10x18
  43         &font_10x18,
  44 #endif
  45 #ifdef CONFIG_FONT_ACORN_8x8
  46         &font_acorn_8x8,
  47 #endif
  48 #ifdef CONFIG_FONT_PEARL_8x8
  49         &font_pearl_8x8,
  50 #endif
  51 #ifdef CONFIG_FONT_MINI_4x6
  52         &font_mini_4x6,
  53 #endif
  54 #ifdef CONFIG_FONT_6x10
  55         &font_6x10,
  56 #endif
  57 #ifdef CONFIG_FONT_TER16x32
  58         &font_ter_16x32,
  59 #endif
  60 };
  61 
  62 #define num_fonts ARRAY_SIZE(fonts)
  63 
  64 #ifdef NO_FONTS
  65 #error No fonts configured.
  66 #endif
  67 
  68 
  69 /**
  70  *      find_font - find a font
  71  *      @name: string name of a font
  72  *
  73  *      Find a specified font with string name @name.
  74  *
  75  *      Returns %NULL if no font found, or a pointer to the
  76  *      specified font.
  77  *
  78  */
  79 const struct font_desc *find_font(const char *name)
  80 {
  81         unsigned int i;
  82 
  83         BUILD_BUG_ON(!num_fonts);
  84         for (i = 0; i < num_fonts; i++)
  85                 if (!strcmp(fonts[i]->name, name))
  86                         return fonts[i];
  87         return NULL;
  88 }
  89 EXPORT_SYMBOL(find_font);
  90 
  91 
  92 /**
  93  *      get_default_font - get default font
  94  *      @xres: screen size of X
  95  *      @yres: screen size of Y
  96  *      @font_w: bit array of supported widths (1 - 32)
  97  *      @font_h: bit array of supported heights (1 - 32)
  98  *
  99  *      Get the default font for a specified screen size.
 100  *      Dimensions are in pixels.
 101  *
 102  *      Returns %NULL if no font is found, or a pointer to the
 103  *      chosen font.
 104  *
 105  */
 106 const struct font_desc *get_default_font(int xres, int yres, u32 font_w,
 107                                          u32 font_h)
 108 {
 109         int i, c, cc, res;
 110         const struct font_desc *f, *g;
 111 
 112         g = NULL;
 113         cc = -10000;
 114         for (i = 0; i < num_fonts; i++) {
 115                 f = fonts[i];
 116                 c = f->pref;
 117 #if defined(__mc68000__)
 118 #ifdef CONFIG_FONT_PEARL_8x8
 119                 if (MACH_IS_AMIGA && f->idx == PEARL8x8_IDX)
 120                         c = 100;
 121 #endif
 122 #ifdef CONFIG_FONT_6x11
 123                 if (MACH_IS_MAC && xres < 640 && f->idx == VGA6x11_IDX)
 124                         c = 100;
 125 #endif
 126 #endif
 127                 if ((yres < 400) == (f->height <= 8))
 128                         c += 1000;
 129 
 130                 /* prefer a bigger font for high resolution */
 131                 res = (xres / f->width) * (yres / f->height) / 1000;
 132                 if (res > 20)
 133                         c += 20 - res;
 134 
 135                 if ((font_w & (1 << (f->width - 1))) &&
 136                     (font_h & (1 << (f->height - 1))))
 137                         c += 1000;
 138 
 139                 if (c > cc) {
 140                         cc = c;
 141                         g = f;
 142                 }
 143         }
 144         return g;
 145 }
 146 EXPORT_SYMBOL(get_default_font);
 147 
 148 MODULE_AUTHOR("James Simmons <jsimmons@users.sf.net>");
 149 MODULE_DESCRIPTION("Console Fonts");
 150 MODULE_LICENSE("GPL");

/* [<][>][^][v][top][bottom][index][help] */