diff options
author | James Bursa <james@netsurf-browser.org> | 2006-01-29 12:20:25 +0000 |
---|---|---|
committer | James Bursa <james@netsurf-browser.org> | 2006-01-29 12:20:25 +0000 |
commit | 87d2b7aa8e9b6e2209776a73da67398c795cbcb3 (patch) | |
tree | fac5f022fcebbfe684643055813f8489138819af /rufl_chars.c | |
parent | 4581f7a89f79a828d161191f336a4444c8d2f9e8 (diff) | |
download | librufl-87d2b7aa8e9b6e2209776a73da67398c795cbcb3.tar.gz librufl-87d2b7aa8e9b6e2209776a73da67398c795cbcb3.tar.bz2 |
[project @ 2006-01-29 12:20:25 by bursa]
Improve handling of font weights. Now detects available weights better and supports up to 9 weights. Ignore control characters and spaces that are not spaces when scanning available characters.
svn path=/import/rufl/; revision=2470
Diffstat (limited to 'rufl_chars.c')
-rw-r--r-- | rufl_chars.c | 70 |
1 files changed, 37 insertions, 33 deletions
diff --git a/rufl_chars.c b/rufl_chars.c index ff7013a..d9b9d6f 100644 --- a/rufl_chars.c +++ b/rufl_chars.c @@ -2,7 +2,7 @@ * This file is part of RUfl * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license - * Copyright 2005 James Bursa <james@semichrome.net> + * Copyright 2006 James Bursa <james@semichrome.net> */ #include <errno.h> @@ -16,7 +16,7 @@ unsigned int font = 0; -bool bold = false; +unsigned int weight = rufl_WEIGHT_400; bool italic = false; @@ -73,7 +73,7 @@ int main(void) try(rufl_init(), "rufl_init"); - menu = malloc(wimp_SIZEOF_MENU(2 + rufl_family_list_entries)); + menu = malloc(wimp_SIZEOF_MENU(10 + rufl_family_list_entries)); if (!menu) die("Out of memory"); strcpy(menu->title_data.text, "Fonts"); @@ -84,34 +84,38 @@ int main(void) menu->width = 200; menu->height = wimp_MENU_ITEM_HEIGHT; menu->gap = wimp_MENU_ITEM_GAP; - menu->entries[0].menu_flags = 0; - menu->entries[0].sub_menu = wimp_NO_SUB_MENU; - menu->entries[0].icon_flags = wimp_ICON_TEXT | - (wimp_COLOUR_BLACK << wimp_ICON_FG_COLOUR_SHIFT) | - (wimp_COLOUR_WHITE << wimp_ICON_BG_COLOUR_SHIFT); - strcpy(menu->entries[0].data.text, "Bold"); - menu->entries[1].menu_flags = wimp_MENU_SEPARATE; - menu->entries[1].sub_menu = wimp_NO_SUB_MENU; - menu->entries[1].icon_flags = wimp_ICON_TEXT | + for (i = 0; i != 10; i++) { + menu->entries[i].menu_flags = 0; + menu->entries[i].sub_menu = wimp_NO_SUB_MENU; + menu->entries[i].icon_flags = wimp_ICON_TEXT | + (wimp_COLOUR_BLACK << wimp_ICON_FG_COLOUR_SHIFT) | + (wimp_COLOUR_WHITE << wimp_ICON_BG_COLOUR_SHIFT); + strcpy(menu->entries[i].data.text, "100"); + menu->entries[i].data.text[0] = '1' + i; + } + menu->entries[9].menu_flags = wimp_MENU_SEPARATE; + menu->entries[9].sub_menu = wimp_NO_SUB_MENU; + menu->entries[9].icon_flags = wimp_ICON_TEXT | (wimp_COLOUR_BLACK << wimp_ICON_FG_COLOUR_SHIFT) | (wimp_COLOUR_WHITE << wimp_ICON_BG_COLOUR_SHIFT); - strcpy(menu->entries[1].data.text, "Italic"); + strcpy(menu->entries[9].data.text, "Italic"); for (i = 0; i != rufl_family_list_entries; i++) { - menu->entries[2 + i].menu_flags = 0; - menu->entries[2 + i].sub_menu = wimp_NO_SUB_MENU; - menu->entries[2 + i].icon_flags = wimp_ICON_TEXT | + menu->entries[10 + i].menu_flags = 0; + menu->entries[10 + i].sub_menu = wimp_NO_SUB_MENU; + menu->entries[10 + i].icon_flags = wimp_ICON_TEXT | wimp_ICON_INDIRECTED | (wimp_COLOUR_BLACK << wimp_ICON_FG_COLOUR_SHIFT) | (wimp_COLOUR_WHITE << wimp_ICON_BG_COLOUR_SHIFT); - menu->entries[2 + i].data.indirected_text.text = + menu->entries[10 + i].data.indirected_text.text = rufl_family_list[i]; - menu->entries[2 + i].data.indirected_text.validation = + menu->entries[10 + i].data.indirected_text.validation = (char *) -1; - menu->entries[2 + i].data.indirected_text.size = + menu->entries[10 + i].data.indirected_text.size = strlen(rufl_family_list[i]); } - menu->entries[2].menu_flags |= wimp_MENU_TICKED; - menu->entries[i + 1].menu_flags |= wimp_MENU_LAST; + menu->entries[3].menu_flags |= wimp_MENU_TICKED; + menu->entries[10].menu_flags |= wimp_MENU_TICKED; + menu->entries[i + 9].menu_flags |= wimp_MENU_LAST; error = xwimp_create_window((wimp_window *) &window, &w); if (error) @@ -181,17 +185,20 @@ int main(void) error = xwimp_get_pointer_info(&pointer); if (error) die(error->errmess); - if (block.selection.items[0] == 0) { - bold = !bold; - menu->entries[0].menu_flags ^= wimp_MENU_TICKED; - } else if (block.selection.items[0] == 1) { + if (block.selection.items[0] <= 8) { + menu->entries[weight - 1].menu_flags ^= + wimp_MENU_TICKED; + weight = block.selection.items[0] + 1; + menu->entries[weight - 1].menu_flags ^= + wimp_MENU_TICKED; + } else if (block.selection.items[0] == 9) { italic = !italic; - menu->entries[1].menu_flags ^= wimp_MENU_TICKED; + menu->entries[9].menu_flags ^= wimp_MENU_TICKED; } else { - menu->entries[2 + font].menu_flags ^= + menu->entries[10 + font].menu_flags ^= wimp_MENU_TICKED; - font = block.selection.items[0] - 2; - menu->entries[2 + font].menu_flags ^= + font = block.selection.items[0] - 10; + menu->entries[10 + font].menu_flags ^= wimp_MENU_TICKED; } error = xwimp_force_redraw(w, @@ -239,10 +246,7 @@ rufl_code redraw(int x, int y, int y0, int y1) unsigned int l; unsigned int u; rufl_code code; - rufl_style style = bold && italic ? rufl_BOLD_SLANTED : - bold ? rufl_BOLD : - italic ? rufl_SLANTED : - rufl_REGULAR; + rufl_style style = weight | (italic ? rufl_SLANTED : 0); for (u = y0 / 40 * 32; (int) u != (y1 / 40 + 1) * 32; u++) { if (u <= 0x7f) |