diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2014-02-13 02:27:49 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2014-02-13 02:27:49 +0100 |
commit | bfa5d8f54612811d306d1453b7d2da549bbc60ee (patch) | |
tree | 2d2aa2b167d5ce5031d5978f44fddaa722fb07cc /console-client/vga-dynafont.c | |
parent | c8b5250cc50a3451ecce9685d8b3457b3c1b133d (diff) |
Add --font-width option to force 8/9 pixel font width
This permits to choose between 720x400 or 640x400 textmode without
changing the font.
* console-client/vga-hw.h (VGA_ATTR_MODE_ADDR, VGA_ATTR_MODE_LGE,
VGA_ATTR_ENABLE_ADDR): New macros.
* console-client/vga-support.c (vga_state): Add `attr_mode' field.
(vga_init): Save attribute mode subregister content. Re-enable the
screen after that.
(vga_fini): Restore attribute mode subregister content. Re-enable the
screen after that.
(vga_set_font_width): When the font width is set to 9, enable VGA LGE to
properly handle box-drawing unicode characters. Re-nable the screen
after that.
(vga_exchange_palette_attributes): Use VGA_ATTR_ENABLE_ADDR macro
instead of harcoded 0x20.
* console-client/vga-dynafont.h (dynafont_new): Add `width' parameter.
* console-client/vga-dynafont.c (dynafont): Add `width' field.
(dynafont_new): Add `width' parameter, stored in `width' field of `df',
but using the font bbox as default value. Use it to decide whether to
use VGA LGE or not.
(dynafont_activate): Use `width' field of `df' instead of the font bbox
to configure the VGA glyph width.
* console-client/vga.c (vga_display_font_width): New variable.
(vga_display): New `df_width' field.
(argp_option): New `font-width' option.
(parse_opt): Handle `font-width' option.
(vga_display_init): Copy `vga_display_font_width' to `disp'.
(vga_display_start): Pass `df_width' to `dynafont_new'.
Diffstat (limited to 'console-client/vga-dynafont.c')
-rw-r--r-- | console-client/vga-dynafont.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/console-client/vga-dynafont.c b/console-client/vga-dynafont.c index 6745e88a..5e3bc6d1 100644 --- a/console-client/vga-dynafont.c +++ b/console-client/vga-dynafont.c @@ -87,6 +87,9 @@ struct dynafont /* The size of the VGA font (256 or 512). Must be a power of 2! */ int size; + /* The width of the VGA font (8 or 9). */ + int width; + /* A hash containing a pointer to a struct mapped_character for each UCS-4 character we map to a VGA font index. */ struct hurd_ihash charmap; @@ -467,7 +470,8 @@ add_gnu_head (bdf_font_t font) Code Page 437). */ error_t dynafont_new (bdf_font_t font, bdf_font_t font_italic, bdf_font_t font_bold, - bdf_font_t font_bold_italic, int size, dynafont_t *dynafont) + bdf_font_t font_bold_italic, int size, int width, + dynafont_t *dynafont) { dynafont_t df; struct bdf_glyph *glyph = NULL; @@ -490,6 +494,9 @@ dynafont_new (bdf_font_t font, bdf_font_t font_italic, bdf_font_t font_bold, df->font_bold = font_bold; df->font_bold_italic = font_bold_italic; df->size = size; + if (!width) + width = df->font->bbox.width; + df->width = width; df->cursor_standout = 0; df->charmap_data = calloc (size, sizeof (struct mapped_character)); @@ -509,7 +516,7 @@ dynafont_new (bdf_font_t font, bdf_font_t font_italic, bdf_font_t font_bold, hurd_ihash_init (&df->charmap, offsetof (struct mapped_character, locp)); - if (df->font->bbox.width == 9) + if (width == 9) { /* 32 from 256 font slots are for horizontal line graphic characters. */ @@ -985,7 +992,7 @@ dynafont_activate (dynafont_t df) display problems for the user if we don't also program the video mode timings. The standard font height for 80x25 is 16. */ vga_set_font_height (height); - vga_set_font_width (df->font->bbox.width % 8 ? 9 : 8); + vga_set_font_width (df->width); active_dynafont = df; dynafont_set_cursor (df, df->cursor_standout); |