Author: bursa
Date: Sat Sep 30 14:14:48 2006
New Revision: 2970
URL:
http://svn.semichrome.net?rev=2970&view=rev
Log:
Add built-in font family menu.
Modified:
trunk/rufl/rufl.h
trunk/rufl/rufl_init.c
trunk/rufl/rufl_quit.c
Modified: trunk/rufl/rufl.h
URL:
http://svn.semichrome.net/trunk/rufl/rufl.h?rev=2970&r1=2969&r2=2...
==============================================================================
--- trunk/rufl/rufl.h (original)
+++ trunk/rufl/rufl.h Sat Sep 30 14:14:48 2006
@@ -55,6 +55,9 @@
/** Number of entries in rufl_family_list. */
extern unsigned int rufl_family_list_entries;
+/** Menu of font families. */
+extern void *rufl_family_menu;
+
/* Callbacks used by rufl_decompose_glyph */
typedef int (*rufl_move_to_func)(os_coord *to, void *user);
typedef int (*rufl_line_to_func)(os_coord *to, void *user);
Modified: trunk/rufl/rufl_init.c
URL:
http://svn.semichrome.net/trunk/rufl/rufl_init.c?rev=2970&r1=2969&...
==============================================================================
--- trunk/rufl/rufl_init.c (original)
+++ trunk/rufl/rufl_init.c Sat Sep 30 14:14:48 2006
@@ -30,6 +30,7 @@
unsigned int rufl_family_list_entries = 0;
struct rufl_family_map_entry *rufl_family_map = 0;
os_error *rufl_fm_error = 0;
+void *rufl_family_menu = 0;
unsigned short *rufl_substitution_table;
struct rufl_cache_entry rufl_cache[rufl_CACHE_SIZE];
int rufl_cache_time = 0;
@@ -82,6 +83,7 @@
static rufl_code rufl_save_cache(void);
static rufl_code rufl_load_cache(void);
static int rufl_font_list_cmp(const void *keyval, const void *datum);
+static rufl_code rufl_init_family_menu(void);
static void rufl_init_status_open(void);
static void rufl_init_status(const char *status, float progress);
static void rufl_init_status_close(void);
@@ -199,6 +201,14 @@
for (i = 0; i != rufl_CACHE_SIZE; i++)
rufl_cache[i].font = rufl_CACHE_NONE;
+
+ code = rufl_init_family_menu();
+ if (code != rufl_OK) {
+ LOG("rufl_init_substitution_table: 0x%x", code);
+ rufl_quit();
+ xhourglass_off();
+ return code;
+ }
rufl_init_status_close();
@@ -1041,6 +1051,48 @@
const char *key = keyval;
const struct rufl_font_list_entry *entry = datum;
return strcasecmp(key, entry->identifier);
+}
+
+
+/**
+ * Create a menu of font families.
+ */
+
+rufl_code rufl_init_family_menu(void)
+{
+ wimp_menu *menu;
+ unsigned int i;
+
+ menu = malloc(wimp_SIZEOF_MENU(rufl_family_list_entries));
+ if (!menu)
+ return rufl_OUT_OF_MEMORY;
+ menu->title_data.indirected_text.text = "Fonts";
+ menu->title_fg = wimp_COLOUR_BLACK;
+ menu->title_bg = wimp_COLOUR_LIGHT_GREY;
+ menu->work_fg = wimp_COLOUR_BLACK;
+ menu->work_bg = wimp_COLOUR_WHITE;
+ menu->width = 200;
+ menu->height = wimp_MENU_ITEM_HEIGHT;
+ menu->gap = wimp_MENU_ITEM_GAP;
+ for (i = 0; i != rufl_family_list_entries; 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_ICON_INDIRECTED |
+ (wimp_COLOUR_BLACK << wimp_ICON_FG_COLOUR_SHIFT) |
+ (wimp_COLOUR_WHITE << wimp_ICON_BG_COLOUR_SHIFT);
+ menu->entries[i].data.indirected_text.text =
+ rufl_family_list[i];
+ menu->entries[i].data.indirected_text.validation = (char *) -1;
+ menu->entries[i].data.indirected_text.size =
+ strlen(rufl_family_list[i]);
+ }
+ menu->entries[0].menu_flags = wimp_MENU_TITLE_INDIRECTED;
+ menu->entries[i - 1].menu_flags |= wimp_MENU_LAST;
+
+ rufl_family_menu = menu;
+
+ return rufl_OK;
}
Modified: trunk/rufl/rufl_quit.c
URL:
http://svn.semichrome.net/trunk/rufl/rufl_quit.c?rev=2970&r1=2969&...
==============================================================================
--- trunk/rufl/rufl_quit.c (original)
+++ trunk/rufl/rufl_quit.c Sat Sep 30 14:14:48 2006
@@ -40,4 +40,7 @@
rufl_cache[i].font = rufl_CACHE_NONE;
}
}
+
+ free(rufl_family_menu);
+ rufl_family_menu = 0;
}