mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-11-23 23:09:39 +03:00
[project @ 2005-02-24 22:00:40 by bursa]
Reimplement font family support, part 2 (font menus in choices). svn path=/import/netsurf/; revision=1525
This commit is contained in:
parent
504e05c4b3
commit
dace636329
@ -112,6 +112,9 @@ AddGap:Separator setzen
|
||||
DeleteGap:Separator entfernen
|
||||
LockToolbar:Leiste fixieren
|
||||
|
||||
# Font menu
|
||||
Fonts:Fonts
|
||||
|
||||
# Hotlist menus
|
||||
Hotlist:Hotlist
|
||||
New:Neu
|
||||
|
Binary file not shown.
@ -112,6 +112,9 @@ AddGap:Add separator
|
||||
DeleteGap:Remove separator
|
||||
LockToolbar:Lock toolbar
|
||||
|
||||
# Font menu
|
||||
Fonts:Fonts
|
||||
|
||||
# Hotlist menus
|
||||
Hotlist:Hotlist
|
||||
New:New
|
||||
|
Binary file not shown.
@ -112,6 +112,9 @@ AddGap:Ajouter un s
|
||||
DeleteGap:Supprimer le séparateur
|
||||
LockToolbar:Verrouiller la barre d'outils
|
||||
|
||||
# Font menu
|
||||
Fonts:Fonts
|
||||
|
||||
# Hotlist menus
|
||||
Hotlist:Favoris
|
||||
New:Nouveau
|
||||
|
Binary file not shown.
@ -3,7 +3,7 @@
|
||||
* Licensed under the GNU General Public License,
|
||||
* http://www.opensource.org/licenses/gpl-license
|
||||
* Copyright 2003 Phil Mellor <monkeyson@users.sourceforge.net>
|
||||
* Copyright 2004 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2005 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2003 John M Bell <jmb202@ecs.soton.ac.uk>
|
||||
* Copyright 2004 Richard Wilson <not_ginger_matt@users.sourceforge.net>
|
||||
* Copyright 2004 Andrew Timmins <atimmins@blueyonder.co.uk>
|
||||
@ -18,6 +18,7 @@
|
||||
#include "oslib/osgbpb.h"
|
||||
#include "oslib/osspriteop.h"
|
||||
#include "oslib/wimp.h"
|
||||
#include "rufl.h"
|
||||
#include "netsurf/utils/config.h"
|
||||
#include "netsurf/desktop/netsurf.h"
|
||||
#include "netsurf/render/font.h"
|
||||
@ -1117,15 +1118,19 @@ void ro_gui_dialog_click_config_font(wimp_pointer *pointer)
|
||||
ro_gui_choices_font_min_size;
|
||||
ro_gui_dialog_update_config_font();
|
||||
break;
|
||||
case ICON_CONFIG_FONT_SANS:
|
||||
case ICON_CONFIG_FONT_SANS_PICK:
|
||||
case ICON_CONFIG_FONT_SERIF:
|
||||
case ICON_CONFIG_FONT_SERIF_PICK:
|
||||
case ICON_CONFIG_FONT_MONO:
|
||||
case ICON_CONFIG_FONT_MONO_PICK:
|
||||
case ICON_CONFIG_FONT_CURS:
|
||||
case ICON_CONFIG_FONT_CURS_PICK:
|
||||
case ICON_CONFIG_FONT_FANT:
|
||||
case ICON_CONFIG_FONT_FANT_PICK:
|
||||
/*config_font_icon = pointer->i - 1;
|
||||
ro_gui_display_font_menu(ro_gui_get_icon_string(
|
||||
dialog_config_font, pointer->i - 1),
|
||||
dialog_config_font, pointer->i);*/
|
||||
config_font_icon = pointer->i & ~1;
|
||||
ro_gui_popup_menu(font_menu, dialog_config_font,
|
||||
pointer->i | 1);
|
||||
break;
|
||||
case ICON_CONFIG_FONT_DEF_PICK:
|
||||
break;
|
||||
@ -1137,30 +1142,12 @@ void ro_gui_dialog_click_config_font(wimp_pointer *pointer)
|
||||
* Handle font menu selections.
|
||||
*/
|
||||
|
||||
void ro_gui_dialog_font_menu_selection(char *name)
|
||||
void ro_gui_dialog_font_menu_selection(int item)
|
||||
{
|
||||
char *n, *fn;
|
||||
int len;
|
||||
|
||||
if (strlen(name) <= 3 || config_font_icon < 0)
|
||||
if (item < 0 || rufl_family_list_entries <= (unsigned int) item)
|
||||
return;
|
||||
|
||||
n = name + 2; /* \F */
|
||||
|
||||
len = strcspn(n, "\\");
|
||||
|
||||
fn = calloc(len+1, sizeof(char));
|
||||
if (!fn) {
|
||||
LOG(("malloc failed"));
|
||||
return;
|
||||
}
|
||||
|
||||
strncpy(fn, n, len);
|
||||
ro_gui_set_icon_string(dialog_config_font, config_font_icon, fn);
|
||||
|
||||
free(fn);
|
||||
|
||||
config_font_icon = -1;
|
||||
ro_gui_set_icon_string(dialog_config_font, config_font_icon,
|
||||
rufl_family_list[item]);
|
||||
}
|
||||
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include "oslib/wimp.h"
|
||||
#include "rufl.h"
|
||||
#include "netsurf/css/css.h"
|
||||
#include "netsurf/render/font.h"
|
||||
@ -23,11 +24,15 @@
|
||||
#include "netsurf/utils/utils.h"
|
||||
|
||||
|
||||
wimp_menu *font_menu;
|
||||
|
||||
|
||||
static void nsfont_check_option(char **option, const char *family,
|
||||
const char *fallback);
|
||||
static bool nsfont_exists(const char *font_family);
|
||||
static int nsfont_list_cmp(const void *keyval, const void *datum);
|
||||
static void nsfont_check_fonts(void);
|
||||
static void nsfont_init_menu(void);
|
||||
static void nsfont_read_style(const struct css_style *style,
|
||||
const char **font_family, unsigned int *font_size,
|
||||
rufl_style *font_style);
|
||||
@ -77,6 +82,8 @@ void nsfont_init(void)
|
||||
option_font_default != CSS_FONT_FAMILY_CURSIVE &&
|
||||
option_font_default != CSS_FONT_FAMILY_FANTASY)
|
||||
option_font_default = CSS_FONT_FAMILY_SANS_SERIF;
|
||||
|
||||
nsfont_init_menu();
|
||||
}
|
||||
|
||||
|
||||
@ -167,6 +174,44 @@ void nsfont_check_fonts(void)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Prepare the menu of font families.
|
||||
*/
|
||||
|
||||
void nsfont_init_menu(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
font_menu = malloc(wimp_SIZEOF_MENU(rufl_family_list_entries));
|
||||
if (!font_menu)
|
||||
die("NoMemory");
|
||||
font_menu->title_data.indirected_text.text = messages_get("Fonts");
|
||||
font_menu->title_fg = wimp_COLOUR_BLACK;
|
||||
font_menu->title_bg = wimp_COLOUR_LIGHT_GREY;
|
||||
font_menu->work_fg = wimp_COLOUR_BLACK;
|
||||
font_menu->work_bg = wimp_COLOUR_WHITE;
|
||||
font_menu->width = 200;
|
||||
font_menu->height = wimp_MENU_ITEM_HEIGHT;
|
||||
font_menu->gap = wimp_MENU_ITEM_GAP;
|
||||
for (i = 0; i != rufl_family_list_entries; i++) {
|
||||
font_menu->entries[i].menu_flags = 0;
|
||||
font_menu->entries[i].sub_menu = wimp_NO_SUB_MENU;
|
||||
font_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);
|
||||
font_menu->entries[i].data.indirected_text.text =
|
||||
rufl_family_list[i];
|
||||
font_menu->entries[i].data.indirected_text.validation =
|
||||
(char *) -1;
|
||||
font_menu->entries[i].data.indirected_text.size =
|
||||
strlen(rufl_family_list[i]);
|
||||
}
|
||||
font_menu->entries[0].menu_flags = wimp_MENU_TITLE_INDIRECTED;
|
||||
font_menu->entries[i - 1].menu_flags |= wimp_MENU_LAST;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Measure the width of a string.
|
||||
*
|
||||
|
@ -35,7 +35,8 @@ extern wimp_w dialog_info, dialog_saveas, dialog_config, dialog_config_br,
|
||||
extern wimp_w history_window;
|
||||
extern wimp_menu *iconbar_menu, *browser_menu, *combo_menu, *hotlist_menu,
|
||||
*proxyauth_menu, *languages_menu, *toolbar_menu,
|
||||
*image_quality_menu, *global_history_menu, *url_suggest_menu;
|
||||
*image_quality_menu, *global_history_menu, *url_suggest_menu,
|
||||
*font_menu;
|
||||
extern int iconbar_menu_height;
|
||||
extern struct form_control *current_gadget;
|
||||
extern bool gui_reformat_pending;
|
||||
@ -142,7 +143,7 @@ void ro_gui_dialog_open_config(void);
|
||||
void ro_gui_dialog_proxyauth_menu_selection(int item);
|
||||
void ro_gui_dialog_image_menu_selection(int item);
|
||||
void ro_gui_dialog_languages_menu_selection(char *lang);
|
||||
void ro_gui_dialog_font_menu_selection(char *name);
|
||||
void ro_gui_dialog_font_menu_selection(int item);
|
||||
void ro_gui_dialog_redraw(wimp_draw *redraw);
|
||||
|
||||
/* in download.c */
|
||||
|
132
riscos/menus.c
132
riscos/menus.c
@ -3,7 +3,7 @@
|
||||
* Licensed under the GNU General Public License,
|
||||
* http://www.opensource.org/licenses/gpl-license
|
||||
* Copyright 2003 Phil Mellor <monkeyson@users.sourceforge.net>
|
||||
* Copyright 2004 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2005 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2003 John M Bell <jmb202@ecs.soton.ac.uk>
|
||||
* Copyright 2005 Richard Wilson <info@tinct.net>
|
||||
*/
|
||||
@ -62,7 +62,6 @@ static void ro_gui_menu_object_reload(void);
|
||||
static void ro_gui_menu_browser_warning(wimp_message_menu_warning *warning);
|
||||
static void ro_gui_menu_hotlist_warning(wimp_message_menu_warning *warning);
|
||||
static void ro_gui_menu_global_history_warning(wimp_message_menu_warning *warning);
|
||||
static void ro_gui_font_menu_selection(wimp_selection *selection);
|
||||
|
||||
struct gui_window *current_gui;
|
||||
wimp_menu *current_menu;
|
||||
@ -509,11 +508,6 @@ wimp_menu *languages_menu = NULL;
|
||||
*/
|
||||
wimp_menu *toolbar_icon_menu = NULL;
|
||||
|
||||
/* Font popup menu (used in font choices dialog)
|
||||
*/
|
||||
static wimp_menu *font_menu = NULL;
|
||||
static byte *font_menu_data = NULL;
|
||||
|
||||
/* URL suggestion menu
|
||||
*/
|
||||
static wimp_MENU(GLOBAL_HISTORY_RECENT_URLS) url_suggest;
|
||||
@ -709,11 +703,11 @@ bool ro_gui_menu_prepare_url_suggest(void) {
|
||||
char **suggest_text;
|
||||
int suggestions;
|
||||
int i;
|
||||
|
||||
|
||||
suggest_text = global_history_get_recent(&suggestions);
|
||||
if (suggestions < 1)
|
||||
return false;
|
||||
|
||||
|
||||
url_suggest_menu->title_data.indirected_text.text = messages_get("URLSuggest");
|
||||
url_suggest_menu->title_fg = wimp_COLOUR_BLACK;
|
||||
url_suggest_menu->title_bg = wimp_COLOUR_LIGHT_GREY;
|
||||
@ -822,20 +816,41 @@ void ro_gui_create_menu(wimp_menu *menu, int x, int y, struct gui_window *g)
|
||||
|
||||
/**
|
||||
* Display a pop-up menu next to the specified icon.
|
||||
*
|
||||
* \param menu menu to open
|
||||
* \param w window handle
|
||||
* \param i icon handle
|
||||
*/
|
||||
|
||||
void ro_gui_popup_menu(wimp_menu *menu, wimp_w w, wimp_i i)
|
||||
{
|
||||
wimp_window_state state;
|
||||
wimp_icon_state icon_state;
|
||||
os_error *error;
|
||||
|
||||
state.w = w;
|
||||
icon_state.w = w;
|
||||
icon_state.i = i;
|
||||
wimp_get_window_state(&state);
|
||||
wimp_get_icon_state(&icon_state);
|
||||
error = xwimp_get_window_state(&state);
|
||||
if (error) {
|
||||
LOG(("xwimp_get_window_state: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
warn_user("MenuError", error->errmess);
|
||||
return;
|
||||
}
|
||||
|
||||
error = xwimp_get_icon_state(&icon_state);
|
||||
if (error) {
|
||||
LOG(("xwimp_get_icon_state: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
warn_user("MenuError", error->errmess);
|
||||
return;
|
||||
}
|
||||
|
||||
ro_gui_create_menu(menu,
|
||||
state.visible.x0 + icon_state.icon.extent.x1 + 64,
|
||||
state.visible.y1 + icon_state.icon.extent.y1 - state.yscroll, current_gui);
|
||||
state.visible.y1 + icon_state.icon.extent.y1 -
|
||||
state.yscroll, current_gui);
|
||||
}
|
||||
|
||||
|
||||
@ -1292,9 +1307,11 @@ void ro_gui_menu_selection(wimp_selection *selection)
|
||||
} else if (current_menu == image_quality_menu) {
|
||||
ro_gui_dialog_image_menu_selection(selection->items[0]);
|
||||
} else if (current_menu == languages_menu) {
|
||||
ro_gui_dialog_languages_menu_selection(languages_menu->entries[selection->items[0]].data.indirected_text.text);
|
||||
ro_gui_dialog_languages_menu_selection(languages_menu->
|
||||
entries[selection->items[0]].
|
||||
data.indirected_text.text);
|
||||
} else if (current_menu == font_menu) {
|
||||
ro_gui_font_menu_selection(selection);
|
||||
ro_gui_dialog_font_menu_selection(selection->items[0]);
|
||||
}
|
||||
|
||||
if (pointer.buttons == wimp_CLICK_ADJUST) {
|
||||
@ -2309,90 +2326,3 @@ void gui_create_form_select_menu(struct browser_window *bw,
|
||||
ro_gui_create_menu(gui_form_select_menu,
|
||||
pointer.pos.x, pointer.pos.y, bw->window);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create and display a menu listing all fonts present in the system.
|
||||
*
|
||||
* \param tick The name of the currently selected font
|
||||
* \param w The dialog containing the clicked icon
|
||||
* \param i The clicked icon.
|
||||
*/
|
||||
void ro_gui_display_font_menu(const char *tick, wimp_w w, wimp_i i)
|
||||
{
|
||||
int size1, size2;
|
||||
os_error *error;
|
||||
|
||||
error = xfont_list_fonts(0, font_RETURN_FONT_MENU | font_GIVEN_TICK,
|
||||
0, 0, 0, tick, 0, &size1, &size2);
|
||||
if (error) {
|
||||
LOG(("xfont_list_fonts: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
return;
|
||||
}
|
||||
|
||||
/* free previous menu */
|
||||
if (font_menu)
|
||||
free(font_menu);
|
||||
if (font_menu_data)
|
||||
free(font_menu_data);
|
||||
|
||||
font_menu = calloc(size1, sizeof(byte));
|
||||
if (!font_menu) {
|
||||
LOG(("malloc failed"));
|
||||
return;
|
||||
}
|
||||
font_menu_data = calloc(size2, sizeof(byte));
|
||||
if (!font_menu_data) {
|
||||
LOG(("malloc failed"));
|
||||
return;
|
||||
}
|
||||
|
||||
error = xfont_list_fonts((byte*)font_menu,
|
||||
font_RETURN_FONT_MENU | font_GIVEN_TICK,
|
||||
size1, font_menu_data, size2, tick, 0, 0, 0);
|
||||
if (error) {
|
||||
LOG(("xfont_list_fonts: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
return;
|
||||
}
|
||||
|
||||
ro_gui_popup_menu(font_menu, w, i);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle a selection in the font menu
|
||||
*
|
||||
* \param selection The selection block
|
||||
*/
|
||||
void ro_gui_font_menu_selection(wimp_selection *selection)
|
||||
{
|
||||
int buf_size;
|
||||
char *buf;
|
||||
os_error *error;
|
||||
|
||||
error = xfont_decode_menu(0, (byte*)font_menu, (byte*)selection,
|
||||
0, 0, 0, &buf_size);
|
||||
if (error) {
|
||||
LOG(("xfont_decode_menu: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
return;
|
||||
}
|
||||
|
||||
buf = calloc(buf_size, sizeof(char));
|
||||
if (!buf) {
|
||||
LOG(("malloc failed"));
|
||||
return;
|
||||
}
|
||||
|
||||
error = xfont_decode_menu(0, (byte*)font_menu, (byte*)selection,
|
||||
buf, buf_size, 0, 0);
|
||||
if (error) {
|
||||
LOG(("xfont_decode_menu: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
return;
|
||||
}
|
||||
|
||||
ro_gui_dialog_font_menu_selection(buf);
|
||||
|
||||
free(buf);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user