mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-11-23 23:09:39 +03:00
[project @ 2004-08-30 21:03:48 by rjw]
Reworking of themes and toolbars. svn path=/import/netsurf/; revision=1254
This commit is contained in:
parent
e1f1c5de19
commit
bf57d852ae
Binary file not shown.
Binary file not shown.
Binary file not shown.
2
makefile
2
makefile
@ -31,7 +31,7 @@ OBJECTS_RISCOS += 401login.o debugwin.o \
|
||||
jpeg.o menus.o mng.o mouseactions.o plugin.o print.o \
|
||||
save.o save_complete.o save_draw.o save_text.o \
|
||||
schedule.o search.o sprite.o textselection.o theme.o thumbnail.o \
|
||||
toolbar.o ufont.o uri.o url_protocol.o wimp.o window.o # riscos/
|
||||
ufont.o uri.o url_protocol.o wimp.o window.o # riscos/
|
||||
# OBJECTS_RISCOS += memdebug.o
|
||||
|
||||
OBJECTS_NCOS = $(OBJECTS_RISCOS)
|
||||
|
@ -6,7 +6,7 @@ PLATFORM_CFLAGS_DEBUG = -INSLibs:include -IOSLib:
|
||||
|
||||
LDFLAGS_RISCOS = NSLibs:lib/libxml2 NSLibs:lib/libz NSLibs:lib/libcurl \
|
||||
NSLibs:lib/libssl NSLibs:lib/libcrypto NSLibs:lib/libares \
|
||||
NSLibs:lib/libmng NSLibs:lib/liblcms NSLibs:lib/libjpeg OSLib:o.oslib32
|
||||
NSLibs:lib/libmng NSLibs:lib/libjpeg OSLib:o.oslib32
|
||||
LDFLAGS_SMALL = NSLibs:lib/libxml2 NSLibs:lib/libz NSLibs:lib/libcurl \
|
||||
NSLibs:lib/libares NSLibs:lib/libmng \
|
||||
NSLibs:lib/libjpeg OSLib:o.oslib32
|
||||
|
406
riscos/dialog.c
406
riscos/dialog.c
@ -32,6 +32,8 @@
|
||||
*/
|
||||
#define MAX_PERSISTANT 8
|
||||
|
||||
|
||||
|
||||
wimp_w dialog_info, dialog_saveas, dialog_config, dialog_config_br,
|
||||
dialog_config_prox, dialog_config_th, download_template,
|
||||
#ifdef WITH_AUTH
|
||||
@ -45,17 +47,30 @@ static int ro_gui_choices_font_size;
|
||||
static int ro_gui_choices_font_min_size;
|
||||
static bool ro_gui_choices_http_proxy;
|
||||
static int ro_gui_choices_http_proxy_auth;
|
||||
static char *theme_choice = 0;
|
||||
static struct theme_entry *theme_list = 0;
|
||||
static unsigned int theme_list_entries = 0;
|
||||
static int config_br_icon = -1;
|
||||
static const char *ro_gui_choices_lang = 0;
|
||||
static const char *ro_gui_choices_alang = 0;
|
||||
|
||||
|
||||
struct toolbar_display {
|
||||
struct toolbar *toolbar;
|
||||
struct theme_descriptor *descriptor;
|
||||
int icon_number;
|
||||
struct toolbar_display *next;
|
||||
};
|
||||
|
||||
static struct theme_descriptor *theme_choice = NULL;
|
||||
static struct theme_descriptor *theme_list = NULL;
|
||||
static int theme_count = 0;
|
||||
static struct toolbar_display *toolbars = NULL;
|
||||
static char theme_radio_validation[] = "Sradiooff,radioon\0";
|
||||
|
||||
|
||||
static const char *ro_gui_proxy_auth_name[] = {
|
||||
"ProxyNone", "ProxyBasic", "ProxyNTLM"
|
||||
};
|
||||
|
||||
|
||||
/* A simple mapping of parent and child
|
||||
*/
|
||||
static struct {
|
||||
@ -72,12 +87,14 @@ static void ro_gui_dialog_click_config_prox(wimp_pointer *pointer);
|
||||
static void ro_gui_dialog_config_proxy_update(void);
|
||||
static void ro_gui_dialog_click_config_th(wimp_pointer *pointer);
|
||||
static void ro_gui_dialog_click_config_th_pane(wimp_pointer *pointer);
|
||||
static void ro_gui_redraw_config_th_pane_plot(wimp_draw *redraw);
|
||||
static void ro_gui_dialog_click_zoom(wimp_pointer *pointer);
|
||||
static void ro_gui_dialog_reset_zoom(void);
|
||||
static void ro_gui_dialog_click_warning(wimp_pointer *pointer);
|
||||
static const char *language_name(const char *code);
|
||||
static struct theme_entry *ro_gui_theme_entry(int index);
|
||||
|
||||
static void ro_gui_dialog_load_themes(void);
|
||||
static void ro_gui_dialog_free_themes(void);
|
||||
|
||||
|
||||
/**
|
||||
* Load and create dialogs from template file.
|
||||
@ -483,13 +500,8 @@ void ro_gui_dialog_config_prepare(void)
|
||||
ro_gui_dialog_config_proxy_update();
|
||||
|
||||
/* themes pane */
|
||||
free(theme_choice);
|
||||
theme_choice = 0;
|
||||
if (option_theme)
|
||||
theme_choice = strdup(option_theme);
|
||||
if (theme_list)
|
||||
ro_theme_free(theme_list);
|
||||
theme_list = ro_theme_list(&theme_list_entries);
|
||||
ro_gui_dialog_load_themes();
|
||||
theme_choice = ro_gui_theme_find(option_theme);
|
||||
}
|
||||
|
||||
|
||||
@ -497,8 +509,7 @@ void ro_gui_dialog_config_prepare(void)
|
||||
* Set the current options to the settings in the choices panes.
|
||||
*/
|
||||
|
||||
void ro_gui_dialog_config_set(void)
|
||||
{
|
||||
void ro_gui_dialog_config_set(void) {
|
||||
/* browser pane */
|
||||
option_font_size = ro_gui_choices_font_size;
|
||||
option_font_min_size = ro_gui_choices_font_min_size;
|
||||
@ -537,8 +548,14 @@ void ro_gui_dialog_config_set(void)
|
||||
ICON_CONFIG_PROX_AUTHPASS));
|
||||
|
||||
/* theme pane */
|
||||
free(option_theme);
|
||||
option_theme = strdup(theme_choice);
|
||||
if (option_theme) {
|
||||
free(option_theme);
|
||||
option_theme = NULL;
|
||||
}
|
||||
if (theme_choice) {
|
||||
option_theme = strdup(theme_choice->filename);
|
||||
ro_gui_theme_apply(theme_choice);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -554,16 +571,16 @@ void ro_gui_dialog_click_config(wimp_pointer *pointer)
|
||||
ro_gui_save_options();
|
||||
if (pointer->buttons == wimp_CLICK_SELECT) {
|
||||
ro_gui_dialog_close(dialog_config);
|
||||
if (theme_list) {
|
||||
ro_theme_free(theme_list);
|
||||
theme_list = 0;
|
||||
}
|
||||
ro_gui_dialog_free_themes();
|
||||
}
|
||||
break;
|
||||
case ICON_CONFIG_CANCEL:
|
||||
if (pointer->buttons == wimp_CLICK_SELECT)
|
||||
if (pointer->buttons == wimp_CLICK_SELECT) {
|
||||
ro_gui_dialog_close(dialog_config);
|
||||
ro_gui_dialog_config_prepare();
|
||||
ro_gui_dialog_free_themes();
|
||||
} else {
|
||||
ro_gui_dialog_config_prepare();
|
||||
}
|
||||
break;
|
||||
case ICON_CONFIG_BROWSER:
|
||||
/* set selected state of radio icon to prevent
|
||||
@ -809,172 +826,24 @@ void ro_gui_dialog_click_config_th(wimp_pointer *pointer)
|
||||
/**
|
||||
* Handle clicks in the scrolling Theme Choices list pane.
|
||||
*/
|
||||
void ro_gui_dialog_click_config_th_pane(wimp_pointer *pointer) {
|
||||
struct toolbar_display *link;
|
||||
int i = pointer->i;
|
||||
if (i < 0) return;
|
||||
|
||||
void ro_gui_dialog_click_config_th_pane(wimp_pointer *pointer)
|
||||
{
|
||||
unsigned int i, y;
|
||||
wimp_window_state state;
|
||||
os_error *error;
|
||||
|
||||
state.w = dialog_config_th_pane;
|
||||
error = xwimp_get_window_state(&state);
|
||||
if (error) {
|
||||
LOG(("xwimp_get_window_state: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
warn_user("WimpError", error->errmess);
|
||||
return;
|
||||
}
|
||||
|
||||
y = -(pointer->pos.y - (state.visible.y1 - state.yscroll)) /
|
||||
THEME_HEIGHT;
|
||||
|
||||
if (!theme_list || theme_list_entries <= y)
|
||||
return;
|
||||
|
||||
if (theme_choice && strcmp(theme_choice, ro_gui_theme_entry(y)->name) == 0)
|
||||
return;
|
||||
|
||||
if (theme_choice) {
|
||||
for (i = 0; i != theme_list_entries &&
|
||||
strcmp(theme_choice, ro_gui_theme_entry(i)->name); i++)
|
||||
;
|
||||
if (i != theme_list_entries) {
|
||||
error = xwimp_force_redraw(dialog_config_th_pane,
|
||||
0, -i * THEME_HEIGHT - THEME_HEIGHT - 2,
|
||||
THEME_WIDTH, -i * THEME_HEIGHT + 2);
|
||||
if (error) {
|
||||
LOG(("xwimp_force_redraw: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
warn_user("WimpError", error->errmess);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(theme_choice);
|
||||
theme_choice = strdup(ro_gui_theme_entry(y)->name);
|
||||
|
||||
error = xwimp_force_redraw(dialog_config_th_pane,
|
||||
0, -y * THEME_HEIGHT - THEME_HEIGHT - 2,
|
||||
THEME_WIDTH, -y * THEME_HEIGHT + 2);
|
||||
if (error) {
|
||||
LOG(("xwimp_force_redraw: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
warn_user("WimpError", error->errmess);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
struct theme_entry *ro_gui_theme_entry(int index) {
|
||||
struct theme_entry *entry = theme_list;
|
||||
for (int i = 0; i < index; i++) entry = entry->next;
|
||||
return entry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Redraw the scrolling Theme Choices list pane.
|
||||
*/
|
||||
|
||||
void ro_gui_redraw_config_th_pane(wimp_draw *redraw)
|
||||
{
|
||||
osbool more;
|
||||
os_error *error;
|
||||
|
||||
error = xwimp_redraw_window(redraw, &more);
|
||||
if (error) {
|
||||
LOG(("xwimp_redraw_window: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
warn_user("WimpError", error->errmess);
|
||||
return;
|
||||
}
|
||||
while (more) {
|
||||
ro_gui_redraw_config_th_pane_plot(redraw);
|
||||
error = xwimp_get_rectangle(redraw, &more);
|
||||
if (error) {
|
||||
LOG(("xwimp_get_rectangle: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
warn_user("WimpError", error->errmess);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Redraw the scrolling Theme Choices list pane.
|
||||
*/
|
||||
|
||||
void ro_gui_redraw_config_th_pane_plot(wimp_draw *redraw)
|
||||
{
|
||||
unsigned int i, j;
|
||||
int x0 = redraw->box.x0 - redraw->xscroll;
|
||||
int y0 = redraw->box.y1 - redraw->yscroll;
|
||||
int x;
|
||||
static char sprite[][10] = { "back", "forward", "stop", "reload",
|
||||
"history", "scale", "save" };
|
||||
wimp_icon icon;
|
||||
os_error *error = 0;
|
||||
|
||||
icon.flags = wimp_ICON_SPRITE | wimp_ICON_HCENTRED |
|
||||
wimp_ICON_VCENTRED | wimp_ICON_INDIRECTED;
|
||||
|
||||
for (i = 0; i != theme_list_entries; i++) {
|
||||
error = xwimptextop_set_colour(os_COLOUR_BLACK,
|
||||
os_COLOUR_VERY_LIGHT_GREY);
|
||||
if (error)
|
||||
break;
|
||||
|
||||
/* plot background for selected theme */
|
||||
if (theme_choice &&
|
||||
strcmp(ro_gui_theme_entry(i)->name, theme_choice) == 0) {
|
||||
error = xcolourtrans_set_gcol(os_COLOUR_LIGHT_GREY,
|
||||
0, os_ACTION_OVERWRITE, 0, 0);
|
||||
if (error)
|
||||
break;
|
||||
error = xos_plot(os_MOVE_TO, x0, y0 - i * THEME_HEIGHT);
|
||||
if (error)
|
||||
break;
|
||||
error = xos_plot(os_PLOT_RECTANGLE | os_PLOT_BY,
|
||||
THEME_WIDTH, -THEME_HEIGHT);
|
||||
if (error)
|
||||
break;
|
||||
error = xwimptextop_set_colour(os_COLOUR_BLACK,
|
||||
os_COLOUR_LIGHT_GREY);
|
||||
if (error)
|
||||
break;
|
||||
}
|
||||
|
||||
/* icons */
|
||||
if (ro_gui_theme_entry(i)->sprite_area) {
|
||||
icon.extent.y0 = -i * THEME_HEIGHT - THEME_HEIGHT;
|
||||
icon.extent.y1 = -i * THEME_HEIGHT;
|
||||
icon.data.indirected_sprite.area = ro_gui_theme_entry(i)->sprite_area;
|
||||
icon.data.indirected_sprite.size = 12;
|
||||
for (j = 0, x = 0; j != sizeof sprite / sizeof sprite[0]; j++) {
|
||||
icon.extent.x0 = x;
|
||||
icon.extent.x1 = x + 50;
|
||||
icon.data.indirected_sprite.id =
|
||||
(osspriteop_id) sprite[j];
|
||||
error = xwimp_plot_icon(&icon);
|
||||
if (error)
|
||||
break;
|
||||
x += 50;
|
||||
}
|
||||
}
|
||||
if (error)
|
||||
break;
|
||||
|
||||
/* theme name */
|
||||
error = xwimptextop_paint(0, ro_gui_theme_entry(i)->name,
|
||||
x0 + 400,
|
||||
y0 - i * THEME_HEIGHT - THEME_HEIGHT / 2);
|
||||
if (error)
|
||||
break;
|
||||
}
|
||||
|
||||
if (error) {
|
||||
LOG(("0x%x: %s", error->errnum, error->errmess));
|
||||
warn_user("MiscError", error->errmess);
|
||||
/* Set the clicked theme as selected
|
||||
*/
|
||||
link = toolbars;
|
||||
while (link) {
|
||||
if (link->icon_number == i) {
|
||||
theme_choice = link->descriptor;
|
||||
ro_gui_set_icon_selected_state(dialog_config_th_pane,
|
||||
link->icon_number, true);
|
||||
} else {
|
||||
ro_gui_set_icon_selected_state(dialog_config_th_pane,
|
||||
link->icon_number, false);
|
||||
}
|
||||
link = link->next;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1114,3 +983,166 @@ const char *language_name(const char *code)
|
||||
key[6] = code[1];
|
||||
return messages_get(key);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Loads and nests all available themes in the theme pane.
|
||||
*/
|
||||
void ro_gui_dialog_load_themes(void) {
|
||||
os_error *error;
|
||||
os_box extent = { 0, 0, 0, 0 };
|
||||
struct theme_descriptor *descriptor;
|
||||
struct toolbar_display *link;
|
||||
struct toolbar_display *toolbar_display;
|
||||
struct toolbar *toolbar;
|
||||
wimp_icon_create new_icon;
|
||||
wimp_window_state state;
|
||||
int parent_width, nested_y, min_extent, base_extent;
|
||||
|
||||
/* Delete our old list and get/open a new one
|
||||
*/
|
||||
ro_gui_dialog_free_themes();
|
||||
theme_list = ro_gui_theme_get_available();
|
||||
ro_gui_theme_open(theme_list, true);
|
||||
theme_choice = ro_gui_theme_find(option_theme);
|
||||
|
||||
/* Create toolbars for each theme
|
||||
*/
|
||||
theme_count = 0;
|
||||
descriptor = theme_list;
|
||||
while (descriptor) {
|
||||
/* Try to create a toolbar
|
||||
*/
|
||||
toolbar = ro_gui_theme_create_toolbar(descriptor, THEME_BROWSER_TOOLBAR);
|
||||
if (toolbar) {
|
||||
toolbar_display = calloc(sizeof(struct toolbar_display), 1);
|
||||
if (!toolbar_display) {
|
||||
LOG(("No memory for calloc()"));
|
||||
warn_user("NoMemory", 0);
|
||||
return;
|
||||
}
|
||||
toolbar_display->toolbar = toolbar;
|
||||
toolbar_display->descriptor = descriptor;
|
||||
if (!toolbars) {
|
||||
toolbars = toolbar_display;
|
||||
} else {
|
||||
link = toolbars;
|
||||
while (link->next) link = link->next;
|
||||
link->next = toolbar_display;
|
||||
}
|
||||
theme_count++;
|
||||
}
|
||||
descriptor = descriptor->next;
|
||||
}
|
||||
|
||||
/* Nest the toolbars
|
||||
*/
|
||||
state.w = dialog_config_th_pane;
|
||||
error = xwimp_get_window_state(&state);
|
||||
if (error) {
|
||||
LOG(("xwimp_get_window_state: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
warn_user("WimpError", error->errmess);
|
||||
return;
|
||||
}
|
||||
parent_width = state.visible.x1 - state.visible.x0;
|
||||
min_extent = state.visible.y0 - state.visible.y1;
|
||||
nested_y = 0;
|
||||
base_extent = state.visible.y1;
|
||||
extent.x1 = parent_width;
|
||||
link = toolbars;
|
||||
new_icon.w = dialog_config_th_pane;
|
||||
new_icon.icon.extent.x0 = 0;
|
||||
new_icon.icon.extent.x1 = parent_width;
|
||||
new_icon.icon.flags = wimp_ICON_TEXT | wimp_ICON_SPRITE | wimp_ICON_INDIRECTED |
|
||||
wimp_ICON_VCENTRED |
|
||||
(wimp_COLOUR_BLACK << wimp_ICON_FG_COLOUR_SHIFT) |
|
||||
(wimp_COLOUR_VERY_LIGHT_GREY << wimp_ICON_BG_COLOUR_SHIFT) |
|
||||
(wimp_BUTTON_RADIO << wimp_ICON_BUTTON_TYPE_SHIFT) |
|
||||
(1 << wimp_ICON_ESG_SHIFT);
|
||||
new_icon.icon.data.indirected_text_and_sprite.validation =
|
||||
theme_radio_validation;
|
||||
while (link) {
|
||||
/* Update the toolbar and extent
|
||||
*/
|
||||
ro_gui_theme_process_toolbar(link->toolbar, parent_width);
|
||||
extent.y0 = nested_y - link->toolbar->height - 48;
|
||||
if (link->next) extent.y0 -= 16;
|
||||
if (extent.y0 > min_extent) extent.y0 = min_extent;
|
||||
xwimp_set_extent(dialog_config_th_pane, &extent);
|
||||
|
||||
/* Create the descriptor icon
|
||||
*/
|
||||
new_icon.icon.extent.y1 = nested_y - link->toolbar->height;
|
||||
new_icon.icon.extent.y0 = nested_y - link->toolbar->height - 48;
|
||||
new_icon.icon.data.indirected_text_and_sprite.text =
|
||||
link->descriptor->filename;
|
||||
new_icon.icon.data.indirected_text_and_sprite.size =
|
||||
strlen(link->descriptor->filename) + 1;
|
||||
xwimp_create_icon(&new_icon, &link->icon_number);
|
||||
|
||||
/* Nest the toolbar window
|
||||
*/
|
||||
state.w = link->toolbar->toolbar_handle;
|
||||
state.visible.y1 = nested_y + base_extent;
|
||||
state.visible.y0 = state.visible.y1 - link->toolbar->height + 2;
|
||||
xwimp_open_window_nested((wimp_open *)&state, dialog_config_th_pane,
|
||||
wimp_CHILD_LINKS_PARENT_WORK_AREA
|
||||
<< wimp_CHILD_XORIGIN_SHIFT |
|
||||
wimp_CHILD_LINKS_PARENT_WORK_AREA
|
||||
<< wimp_CHILD_YORIGIN_SHIFT |
|
||||
wimp_CHILD_LINKS_PARENT_WORK_AREA
|
||||
<< wimp_CHILD_LS_EDGE_SHIFT |
|
||||
wimp_CHILD_LINKS_PARENT_WORK_AREA
|
||||
<< wimp_CHILD_BS_EDGE_SHIFT |
|
||||
wimp_CHILD_LINKS_PARENT_WORK_AREA
|
||||
<< wimp_CHILD_RS_EDGE_SHIFT |
|
||||
wimp_CHILD_LINKS_PARENT_WORK_AREA
|
||||
<< wimp_CHILD_TS_EDGE_SHIFT);
|
||||
|
||||
/* Continue processing
|
||||
*/
|
||||
nested_y -= link->toolbar->height + 48 + 16;
|
||||
link = link->next;
|
||||
}
|
||||
|
||||
/* Set the current theme as selected
|
||||
*/
|
||||
link = toolbars;
|
||||
while (link) {
|
||||
if (link->descriptor == theme_choice) {
|
||||
ro_gui_set_icon_selected_state(dialog_config_th_pane,
|
||||
link->icon_number, true);
|
||||
break;
|
||||
}
|
||||
link = link->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Removes and closes all themes in the theme pane.
|
||||
*/
|
||||
void ro_gui_dialog_free_themes(void) {
|
||||
struct toolbar_display *toolbar;
|
||||
struct toolbar_display *next_toolbar;
|
||||
|
||||
/* Free all our toolbars
|
||||
*/
|
||||
next_toolbar = toolbars;
|
||||
while ((toolbar = next_toolbar) != NULL) {
|
||||
xwimp_delete_icon(dialog_config_th_pane, toolbar->icon_number);
|
||||
ro_gui_theme_destroy_toolbar(toolbar->toolbar);
|
||||
next_toolbar = toolbar->next;
|
||||
free(toolbar);
|
||||
}
|
||||
toolbars = NULL;
|
||||
|
||||
/* Close all our themes
|
||||
*/
|
||||
if (theme_list) ro_gui_theme_close(theme_list, true);
|
||||
theme_list = NULL;
|
||||
theme_count = 0;
|
||||
theme_choice = NULL;
|
||||
}
|
||||
|
||||
|
39
riscos/gui.c
39
riscos/gui.c
@ -49,7 +49,6 @@
|
||||
#endif
|
||||
#include "netsurf/riscos/save_complete.h"
|
||||
#include "netsurf/riscos/theme.h"
|
||||
#include "netsurf/riscos/toolbar.h"
|
||||
#ifdef WITH_URI
|
||||
#include "netsurf/riscos/uri.h"
|
||||
#endif
|
||||
@ -61,7 +60,6 @@
|
||||
#include "netsurf/utils/messages.h"
|
||||
#include "netsurf/utils/utils.h"
|
||||
|
||||
|
||||
const char *__dynamic_da_name = "NetSurf"; /**< For UnixLib. */
|
||||
int __feature_imagefs_is_file = 1; /**< For UnixLib. */
|
||||
/* default filename handling */
|
||||
@ -172,10 +170,9 @@ static char *ro_path_to_url(const char *path);
|
||||
void gui_init(int argc, char** argv)
|
||||
{
|
||||
char path[40];
|
||||
char theme_fname[256];
|
||||
os_error *error;
|
||||
int length;
|
||||
struct theme_entry *theme;
|
||||
struct theme_descriptor *descriptor = NULL;
|
||||
|
||||
xhourglass_start(1);
|
||||
|
||||
@ -222,23 +219,15 @@ void gui_init(int argc, char** argv)
|
||||
if (getenv("NetSurf$Start_URI_Handler"))
|
||||
xwimp_start_task("Desktop", 0);
|
||||
|
||||
if (option_theme != NULL) {
|
||||
if ((length = snprintf(theme_fname, sizeof(theme_fname),
|
||||
"<NetSurf$Dir>.Themes.%s", option_theme)) >= 0
|
||||
&& length < (int)sizeof(theme_fname)
|
||||
/* check if theme directory exists */
|
||||
&& !is_dir(theme_fname)) {
|
||||
free(option_theme);
|
||||
option_theme = NULL;
|
||||
}
|
||||
}
|
||||
if (option_theme == NULL)
|
||||
strcpy(theme_fname, "<NetSurf$Dir>.Themes.Default");
|
||||
theme = ro_theme_load(theme_fname);
|
||||
if (theme == NULL)
|
||||
LOG(("Unable to load default theme"));
|
||||
ro_theme_apply(theme);
|
||||
/* Load our chosen theme
|
||||
*/
|
||||
ro_gui_theme_initialise();
|
||||
descriptor = ro_gui_theme_find(option_theme);
|
||||
if (!descriptor) descriptor = ro_gui_theme_find("Default");
|
||||
ro_gui_theme_apply(descriptor);
|
||||
|
||||
/* Open the templates
|
||||
*/
|
||||
if ((length = snprintf(path, sizeof(path),
|
||||
"<NetSurf$Dir>.Resources.%s.Templates",
|
||||
option_language)) < 0 || length >= (int)sizeof(path))
|
||||
@ -684,9 +673,7 @@ void ro_gui_redraw_window_request(wimp_draw *redraw)
|
||||
osbool more;
|
||||
os_error *error;
|
||||
|
||||
if (redraw->w == dialog_config_th_pane)
|
||||
ro_gui_redraw_config_th_pane(redraw);
|
||||
else if (redraw->w == history_window)
|
||||
if (redraw->w == history_window)
|
||||
ro_gui_history_redraw(redraw);
|
||||
else if (redraw->w == hotlist_window)
|
||||
ro_gui_hotlist_redraw(redraw);
|
||||
@ -737,10 +724,8 @@ void ro_gui_open_window_request(wimp_open *open)
|
||||
}
|
||||
|
||||
g = ro_gui_status_lookup(open->w);
|
||||
if (g && g->toolbar) {
|
||||
g->toolbar->resize_status = 1;
|
||||
ro_theme_resize_toolbar(g->toolbar, g->window);
|
||||
}
|
||||
if (g && g->toolbar)
|
||||
ro_gui_theme_resize_toolbar_status(g->toolbar);
|
||||
}
|
||||
}
|
||||
|
||||
|
10
riscos/gui.h
10
riscos/gui.h
@ -75,12 +75,9 @@ struct gui_window {
|
||||
int old_width; /**< Width when last opened / os units. */
|
||||
int old_height; /**< Height when last opened / os units. */
|
||||
|
||||
char status[256]; /**< Buffer for status bar. */
|
||||
char title[256]; /**< Buffer for window title. */
|
||||
char url[256]; /**< Buffer for url entry field. */
|
||||
|
||||
int throbber; /**< Current frame of throbber animation. */
|
||||
char throb_buf[12]; /**< Buffer for throbber sprite name. */
|
||||
int throbtime; /**< Time of last throbber frame. */
|
||||
|
||||
/** Options. */
|
||||
@ -132,7 +129,6 @@ void ro_gui_dialog_click(wimp_pointer *pointer);
|
||||
void ro_gui_save_options(void);
|
||||
bool ro_gui_dialog_keypress(wimp_key *key);
|
||||
void ro_gui_dialog_close(wimp_w close);
|
||||
void ro_gui_redraw_config_th_pane(wimp_draw *redraw);
|
||||
void ro_gui_menu_prepare_hotlist(void);
|
||||
void ro_gui_dialog_open_config(void);
|
||||
void ro_gui_dialog_proxyauth_menu_selection(int item);
|
||||
@ -167,6 +163,8 @@ bool ro_gui_401login_keypress(wimp_key *key);
|
||||
/* in window.c */
|
||||
void ro_gui_window_quit(void);
|
||||
void ro_gui_window_click(struct gui_window *g, wimp_pointer *mouse);
|
||||
void ro_gui_window_update_theme(void);
|
||||
void ro_gui_window_update_dimensions(struct gui_window *g, int yscroll);
|
||||
void ro_gui_window_open(struct gui_window *g, wimp_open *open);
|
||||
void ro_gui_window_redraw(struct gui_window *g, wimp_draw *redraw);
|
||||
void ro_gui_window_mouse_at(struct gui_window *g, wimp_pointer *pointer);
|
||||
@ -281,8 +279,8 @@ bool ro_gui_print_keypress(wimp_key *key);
|
||||
#define ICON_TOOLBAR_HOTLIST_LAST 6
|
||||
|
||||
/* icon numbers for toolbar status window */
|
||||
#define ICON_STATUS_TEXT 0
|
||||
#define ICON_STATUS_RESIZE 1
|
||||
#define ICON_STATUS_RESIZE 0
|
||||
#define ICON_STATUS_TEXT 1
|
||||
|
||||
#define ICON_CONFIG_SAVE 0
|
||||
#define ICON_CONFIG_CANCEL 1
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include "oslib/wimp.h"
|
||||
#include "netsurf/riscos/gui.h"
|
||||
#include "netsurf/riscos/help.h"
|
||||
#include "netsurf/riscos/toolbar.h"
|
||||
#include "netsurf/riscos/theme.h"
|
||||
#include "netsurf/riscos/wimp.h"
|
||||
#include "netsurf/utils/messages.h"
|
||||
#include "netsurf/utils/log.h"
|
||||
|
@ -25,7 +25,6 @@
|
||||
#include "netsurf/riscos/gui.h"
|
||||
#include "netsurf/riscos/theme.h"
|
||||
#include "netsurf/riscos/tinct.h"
|
||||
#include "netsurf/riscos/toolbar.h"
|
||||
#include "netsurf/riscos/wimp.h"
|
||||
#include "netsurf/utils/log.h"
|
||||
#include "netsurf/utils/messages.h"
|
||||
@ -303,7 +302,8 @@ void ro_gui_hotlist_init(void) {
|
||||
|
||||
/* Create our toolbar
|
||||
*/
|
||||
ro_theme_create_hotlist_toolbar();
|
||||
hotlist_toolbar = ro_gui_theme_create_toolbar(NULL, THEME_HOTLIST_TOOLBAR);
|
||||
ro_gui_theme_attach_toolbar(hotlist_toolbar, hotlist_window);
|
||||
|
||||
/* Update the extent
|
||||
*/
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include "netsurf/riscos/gui.h"
|
||||
#include "netsurf/riscos/image.h"
|
||||
#include "netsurf/riscos/options.h"
|
||||
#include "netsurf/riscos/toolbar.h"
|
||||
#include "netsurf/riscos/theme.h"
|
||||
#include "netsurf/riscos/ufont.h"
|
||||
#include "netsurf/riscos/wimp.h"
|
||||
#include "netsurf/utils/log.h"
|
||||
|
@ -25,7 +25,6 @@
|
||||
#include "netsurf/riscos/help.h"
|
||||
#include "netsurf/riscos/options.h"
|
||||
#include "netsurf/riscos/theme.h"
|
||||
#include "netsurf/riscos/toolbar.h"
|
||||
#include "netsurf/riscos/wimp.h"
|
||||
#include "netsurf/utils/log.h"
|
||||
#include "netsurf/utils/messages.h"
|
||||
@ -657,6 +656,7 @@ void ro_gui_menu_selection(wimp_selection *selection)
|
||||
wimp_pointer pointer;
|
||||
wimp_window_state state;
|
||||
os_error *error;
|
||||
int height;
|
||||
|
||||
wimp_get_pointer_info(&pointer);
|
||||
|
||||
@ -757,7 +757,7 @@ void ro_gui_menu_selection(wimp_selection *selection)
|
||||
case 5: /* Print */
|
||||
break;
|
||||
case 6: /* New window */
|
||||
browser_window_create(current_gui->url, current_gui->bw);
|
||||
browser_window_create(current_gui->bw->current_content->url, current_gui->bw);
|
||||
break;
|
||||
case 7: /* Page source */
|
||||
ro_gui_view_source(c);
|
||||
@ -851,29 +851,27 @@ void ro_gui_menu_selection(wimp_selection *selection)
|
||||
case 2: /* Toolbars -> */
|
||||
switch (selection->items[2]) {
|
||||
case 0:
|
||||
current_gui->toolbar->standard_buttons =
|
||||
!current_gui->toolbar->standard_buttons;
|
||||
current_gui->toolbar->display_buttons =
|
||||
!current_gui->toolbar->display_buttons;
|
||||
break;
|
||||
case 1:
|
||||
current_gui->toolbar->url_bar =
|
||||
!current_gui->toolbar->url_bar;
|
||||
current_gui->toolbar->display_url =
|
||||
!current_gui->toolbar->display_url;
|
||||
break;
|
||||
case 2:
|
||||
current_gui->toolbar->throbber =
|
||||
!current_gui->toolbar->throbber;
|
||||
current_gui->toolbar->display_throbber =
|
||||
!current_gui->toolbar->display_throbber;
|
||||
break;
|
||||
case 3:
|
||||
current_gui->toolbar->status_window =
|
||||
!current_gui->toolbar->status_window;
|
||||
}
|
||||
if (ro_theme_update_toolbar(current_gui->toolbar,
|
||||
current_gui->window) || true) {
|
||||
wimp_window_state state;
|
||||
state.w = current_gui->window;
|
||||
wimp_get_window_state(&state);
|
||||
current_gui->old_height = 0xffffffff;
|
||||
ro_gui_window_open(current_gui, (wimp_open *)&state);
|
||||
current_gui->toolbar->display_status =
|
||||
!current_gui->toolbar->display_status;
|
||||
}
|
||||
current_gui->toolbar->reformat_buttons = true;
|
||||
height = current_gui->toolbar->height;
|
||||
ro_gui_theme_process_toolbar(current_gui->toolbar, -1);
|
||||
if (height != current_gui->toolbar->height)
|
||||
ro_gui_window_update_dimensions(current_gui,
|
||||
height - current_gui->toolbar->height);
|
||||
ro_gui_menu_prepare_toolbars();
|
||||
break;
|
||||
case 3: /* Render -> */
|
||||
@ -1497,10 +1495,10 @@ static void ro_gui_menu_prepare_toolbars(void) {
|
||||
browser_toolbar_menu->entries[index].icon_flags &= ~wimp_ICON_SHADED;
|
||||
browser_toolbar_menu->entries[index].menu_flags &= ~wimp_MENU_TICKED;
|
||||
}
|
||||
if (toolbar->standard_buttons) browser_toolbar_menu->entries[0].menu_flags |= wimp_MENU_TICKED;
|
||||
if (toolbar->url_bar) browser_toolbar_menu->entries[1].menu_flags |= wimp_MENU_TICKED;
|
||||
if (toolbar->throbber) browser_toolbar_menu->entries[2].menu_flags |= wimp_MENU_TICKED;
|
||||
if (toolbar->status_window) browser_toolbar_menu->entries[3].menu_flags |= wimp_MENU_TICKED;
|
||||
if (toolbar->display_buttons) browser_toolbar_menu->entries[0].menu_flags |= wimp_MENU_TICKED;
|
||||
if (toolbar->display_url) browser_toolbar_menu->entries[1].menu_flags |= wimp_MENU_TICKED;
|
||||
if (toolbar->display_throbber) browser_toolbar_menu->entries[2].menu_flags |= wimp_MENU_TICKED;
|
||||
if (toolbar->display_status) browser_toolbar_menu->entries[3].menu_flags |= wimp_MENU_TICKED;
|
||||
} else {
|
||||
for (index = 0; index < 4; index++) {
|
||||
browser_toolbar_menu->entries[index].icon_flags |= wimp_ICON_SHADED;
|
||||
|
@ -60,7 +60,7 @@ bool option_thumbnail_32bpp = true;\
|
||||
int option_thumbnail_oversampling = 0;\
|
||||
bool option_history_tooltip = true; \
|
||||
int option_scale = 100; \
|
||||
int option_toolbar_status_width = 640; \
|
||||
int option_toolbar_status_width = 5000; \
|
||||
bool option_toolbar_show_status = true; \
|
||||
bool option_toolbar_show_buttons = true; \
|
||||
bool option_toolbar_show_address = true; \
|
||||
@ -95,7 +95,7 @@ bool option_plugins = false;
|
||||
{ "history_tooltip", OPTION_BOOL, &option_history_tooltip }, \
|
||||
{ "scale", OPTION_INTEGER, &option_scale }, \
|
||||
{ "toolbar_show_status", OPTION_BOOL, &option_toolbar_show_status }, \
|
||||
{ "toolbar_status_width", OPTION_INTEGER, &option_toolbar_status_width }, \
|
||||
{ "toolbar_status_size", OPTION_INTEGER, &option_toolbar_status_width }, \
|
||||
{ "toolbar_show_buttons", OPTION_BOOL, &option_toolbar_show_buttons }, \
|
||||
{ "toolbar_show_address", OPTION_BOOL, &option_toolbar_show_address }, \
|
||||
{ "toolbar_show_throbber", OPTION_BOOL, &option_toolbar_show_throbber }, \
|
||||
|
1545
riscos/theme.c
1545
riscos/theme.c
File diff suppressed because it is too large
Load Diff
106
riscos/theme.h
106
riscos/theme.h
@ -2,49 +2,93 @@
|
||||
* This file is part of NetSurf, http://netsurf.sourceforge.net/
|
||||
* Licensed under the GNU General Public License,
|
||||
* http://www.opensource.org/licenses/gpl-license
|
||||
* Copyright 2003 Phil Mellor <monkeyson@users.sourceforge.net>
|
||||
* Copyright 2003 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2004 Richard Wilson <not_ginger_matt@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
/** \file
|
||||
* Toolbar themes (interface).
|
||||
*
|
||||
* A theme consists of a simple sprite file. There is one current theme, which
|
||||
* is changed by ro_theme_load(). A toolbar can then be created and manipulated.
|
||||
* Window themes and toolbars (interface).
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifndef _NETSURF_RISCOS_THEME_H_
|
||||
#define _NETSURF_RISCOS_THEME_H_
|
||||
|
||||
#include "oslib/osspriteop.h"
|
||||
#include "netsurf/desktop/gui.h"
|
||||
typedef enum {
|
||||
THEME_BROWSER_TOOLBAR,
|
||||
THEME_HOTLIST_TOOLBAR
|
||||
} toolbar_type;
|
||||
|
||||
struct toolbar;
|
||||
|
||||
struct theme_entry {
|
||||
char *name; /**< theme name */
|
||||
char *author; /**< theme author */
|
||||
osspriteop_area *sprite_area; /**< sprite area for theme */
|
||||
int throbber_width; /**< width of the throbber */
|
||||
int throbber_height; /**< height of the throbber */
|
||||
int throbber_frames; /**< frames of animation for the throbber */
|
||||
int browser_background; /**< background colour of browser toolbar */
|
||||
int hotlist_background; /**< background colour of hotlist toolbar */
|
||||
int status_background; /**< background colour of status window */
|
||||
int status_foreground; /**< colour of status window text */
|
||||
bool default_settings; /**< no theme was loaded, defaults used */
|
||||
struct theme_entry *next; /**< next entry in theme list */
|
||||
|
||||
struct toolbar_icon {
|
||||
int icon_number; /**< wimp icon number */
|
||||
bool display; /**< whether to display the icon */
|
||||
int width; /**< icon width */
|
||||
int height; /**< icon height */
|
||||
char name[12]; /**< icon name */
|
||||
char validation[40]; /**< validation string */
|
||||
struct toolbar_icon *next; /**< next toolbar icon, or NULL for no more */
|
||||
};
|
||||
|
||||
void ro_theme_apply(struct theme_entry *theme);
|
||||
struct theme_entry *ro_theme_load(char *pathname);
|
||||
void ro_theme_create_browser_toolbar(struct gui_window *g);
|
||||
void ro_theme_create_hotlist_toolbar(void);
|
||||
int ro_theme_update_toolbar(struct toolbar *toolbar, wimp_w window);
|
||||
int ro_theme_resize_toolbar(struct toolbar *toolbar, wimp_w window);
|
||||
struct theme_entry *ro_theme_list(unsigned int *entries);
|
||||
void ro_theme_free(struct theme_entry *theme);
|
||||
struct toolbar {
|
||||
int status_width; /**< status width percentage * 100 */
|
||||
bool display_buttons; /**< display standard buttons */
|
||||
bool display_url; /**< display URL bar (if applicable) */
|
||||
bool display_throbber; /**< display throbber (if applicable) */
|
||||
bool display_status; /**< display status bar (if applicable) */
|
||||
int status_current; /**< the size of the status window in OS units */
|
||||
int toolbar_current; /**< the size of the toolbar window in OS units */
|
||||
int height; /**< vertical extent of the toolbar (read only) */
|
||||
wimp_w toolbar_handle; /**< toolbar window handle */
|
||||
wimp_w status_handle; /**< status window handle (if applicable) */
|
||||
wimp_w parent_handle; /**< parent window handle (read only) */
|
||||
bool reformat_buttons; /**< buttons need reformatting */
|
||||
char *url_buffer; /**< buffer for status text (read only) */
|
||||
char *throbber_buffer; /**< buffer for status text (read only) */
|
||||
char *status_buffer; /**< buffer for status text (read only) */
|
||||
struct toolbar_icon *icon; /**< first toolbar icon (read only) */
|
||||
struct theme *theme; /**< themem or NULL for no theme (read only) */
|
||||
toolbar_type type; /**< toolbar type (read only) */
|
||||
};
|
||||
|
||||
|
||||
struct theme {
|
||||
char *details; /**< theme details */
|
||||
char *author; /**< theme author */
|
||||
osspriteop_area *sprite_area; /**< sprite area for theme */
|
||||
bool throbber_right; /**< throbber is on the right (left otherwise) */
|
||||
int throbber_width; /**< width of the throbber */
|
||||
int throbber_height; /**< height of the throbber */
|
||||
int throbber_frames; /**< frames of animation for the throbber */
|
||||
int browser_background; /**< background colour of browser toolbar */
|
||||
int hotlist_background; /**< background colour of hotlist toolbar */
|
||||
int status_background; /**< background colour of status window */
|
||||
int status_foreground; /**< colour of status window text */
|
||||
int users; /**< number of users for the theme */
|
||||
};
|
||||
|
||||
struct theme_descriptor {
|
||||
char *filename; /**< theme filename */
|
||||
struct theme *theme; /**< corresponding theme (must be opened) */
|
||||
struct theme_descriptor *previous; /**< previous descriptor in the list */
|
||||
struct theme_descriptor *next; /**< next descriptor in the list */
|
||||
};
|
||||
|
||||
void ro_gui_theme_initialise(void);
|
||||
void ro_gui_theme_finalise(void);
|
||||
struct theme_descriptor *ro_gui_theme_find(const char *filename);
|
||||
struct theme_descriptor *ro_gui_theme_get_available(void);
|
||||
|
||||
bool ro_gui_theme_open(struct theme_descriptor *descriptor, bool list);
|
||||
bool ro_gui_theme_apply(struct theme_descriptor *descriptor);
|
||||
void ro_gui_theme_close(struct theme_descriptor *descriptor, bool list);
|
||||
|
||||
struct toolbar *ro_gui_theme_create_toolbar(struct theme_descriptor *descriptor, toolbar_type type);
|
||||
bool ro_gui_theme_update_toolbar(struct theme_descriptor *descriptor, struct toolbar *toolbar);
|
||||
bool ro_gui_theme_attach_toolbar(struct toolbar *toolbar, wimp_w parent);
|
||||
void ro_gui_theme_resize_toolbar_status(struct toolbar *toolbar);
|
||||
bool ro_gui_theme_process_toolbar(struct toolbar *toolbar, int width);
|
||||
void ro_gui_theme_destroy_toolbar(struct toolbar *toolbar);
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -39,6 +39,7 @@ int ro_get_hscroll_height(wimp_w w) {
|
||||
|
||||
/* Read the hscroll height
|
||||
*/
|
||||
if (!w) w = dialog_debug;
|
||||
furniture_sizes.w = w;
|
||||
furniture_sizes.border_widths.y0 = 38;
|
||||
xwimpextend_get_furniture_sizes(&furniture_sizes);
|
||||
@ -66,6 +67,7 @@ int ro_get_vscroll_width(wimp_w w) {
|
||||
|
||||
/* Read the hscroll height
|
||||
*/
|
||||
if (!w) w = dialog_debug;
|
||||
furniture_sizes.w = w;
|
||||
furniture_sizes.border_widths.x1 = 38;
|
||||
xwimpextend_get_furniture_sizes(&furniture_sizes);
|
||||
@ -214,7 +216,8 @@ void ro_gui_set_icon_integer(wimp_w w, wimp_i i, int value) {
|
||||
* \param i icon handle
|
||||
* \param state selected state
|
||||
*/
|
||||
#define ro_gui_set_icon_selected_state(w, i, state) xwimp_set_icon_state(w, i, (state ? wimp_ICON_SELECTED : 0), wimp_ICON_SELECTED)
|
||||
#define ro_gui_set_icon_selected_state(w, i, state) \
|
||||
xwimp_set_icon_state(w, i, (state ? wimp_ICON_SELECTED : 0), wimp_ICON_SELECTED)
|
||||
|
||||
|
||||
/**
|
||||
@ -239,7 +242,8 @@ bool ro_gui_get_icon_selected_state(wimp_w w, wimp_i i) {
|
||||
* \param i icon handle
|
||||
* \param state selected state
|
||||
*/
|
||||
#define ro_gui_set_icon_shaded_state(w, i, state) xwimp_set_icon_state(w, i, (state ? wimp_ICON_SHADED : 0), wimp_ICON_SHADED)
|
||||
#define ro_gui_set_icon_shaded_state(w, i, state) \
|
||||
xwimp_set_icon_state(w, i, (state ? wimp_ICON_SHADED : 0), wimp_ICON_SHADED)
|
||||
|
||||
|
||||
/**
|
||||
@ -331,7 +335,13 @@ void ro_gui_set_caret_first(wimp_w w) {
|
||||
button = (state.icon.flags >> wimp_ICON_BUTTON_TYPE_SHIFT) & 0xf;
|
||||
if ((button == wimp_BUTTON_WRITE_CLICK_DRAG) ||
|
||||
(button == wimp_BUTTON_WRITABLE)) {
|
||||
xwimp_set_caret_position(w, icon, 0, 0, -1, strlen(state.icon.data.indirected_text.text));
|
||||
error = xwimp_set_caret_position(w, icon, 0, 0, -1,
|
||||
strlen(state.icon.data.indirected_text.text));
|
||||
if (error) {
|
||||
LOG(("xwimp_set_caret_position: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
warn_user("WimpError", error->errmess);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -475,7 +485,7 @@ bool ro_gui_wimp_sprite_exists(const char *sprite)
|
||||
*
|
||||
* \param parent parent window
|
||||
* \param pane pane to open in parent window
|
||||
* \param offset offset of top-left of pane from top-left of parent
|
||||
* \param offset inset of pane from parent
|
||||
*/
|
||||
|
||||
void ro_gui_open_pane(wimp_w parent, wimp_w pane, int offset)
|
||||
@ -493,6 +503,8 @@ void ro_gui_open_pane(wimp_w parent, wimp_w pane, int offset)
|
||||
}
|
||||
state.w = pane;
|
||||
state.visible.x0 += offset;
|
||||
state.visible.x1 -= offset;
|
||||
state.visible.y0 += offset;
|
||||
state.visible.y1 -= offset;
|
||||
state.xscroll = 0;
|
||||
state.yscroll = 0;
|
||||
@ -503,7 +515,7 @@ void ro_gui_open_pane(wimp_w parent, wimp_w pane, int offset)
|
||||
wimp_CHILD_LINKS_PARENT_VISIBLE_TOP_OR_RIGHT
|
||||
<< wimp_CHILD_YORIGIN_SHIFT |
|
||||
wimp_CHILD_LINKS_PARENT_VISIBLE_BOTTOM_OR_LEFT
|
||||
<< wimp_CHILD_LS_EDGE_SHIFT |
|
||||
<< wimp_CHILD_LS_EDGE_SHIFT |
|
||||
wimp_CHILD_LINKS_PARENT_VISIBLE_TOP_OR_RIGHT
|
||||
<< wimp_CHILD_BS_EDGE_SHIFT |
|
||||
wimp_CHILD_LINKS_PARENT_VISIBLE_TOP_OR_RIGHT
|
||||
|
@ -49,4 +49,8 @@ osspriteop_area *ro_gui_load_sprite_file(const char *pathname);
|
||||
bool ro_gui_wimp_sprite_exists(const char *sprite);
|
||||
void ro_gui_open_pane(wimp_w parent, wimp_w pane, int offset);
|
||||
|
||||
|
||||
wimp_w ro_gui_set_window_background_colour(wimp_w window, wimp_colour background);
|
||||
void ro_gui_set_icon_colours(wimp_w window, wimp_i icon,
|
||||
wimp_colour foreground, wimp_colour background);
|
||||
#endif
|
||||
|
157
riscos/window.c
157
riscos/window.c
@ -30,7 +30,6 @@
|
||||
#include "netsurf/riscos/options.h"
|
||||
#include "netsurf/riscos/theme.h"
|
||||
#include "netsurf/riscos/thumbnail.h"
|
||||
#include "netsurf/riscos/toolbar.h"
|
||||
#include "netsurf/riscos/wimp.h"
|
||||
#include "netsurf/utils/log.h"
|
||||
#include "netsurf/utils/url.h"
|
||||
@ -79,11 +78,8 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
|
||||
g->reformat_pending = false;
|
||||
g->old_width = 0;
|
||||
g->old_height = 0;
|
||||
strcpy(g->status, "");
|
||||
strcpy(g->title, "NetSurf");
|
||||
strcpy(g->url, "");
|
||||
g->throbber = 0;
|
||||
strcpy(g->throb_buf, "throbber0");
|
||||
g->throbtime = 0;
|
||||
|
||||
/* Set the window position
|
||||
@ -202,6 +198,10 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
|
||||
window.title_data.indirected_text.validation = (char *) -1;
|
||||
window.title_data.indirected_text.size = 255;
|
||||
window.icon_count = 0;
|
||||
if (open_centred) {
|
||||
scroll_width = ro_get_vscroll_width(g->window);
|
||||
window.visible.x0 -= scroll_width;
|
||||
}
|
||||
|
||||
error = xwimp_create_window(&window, &g->window);
|
||||
if (error) {
|
||||
@ -212,8 +212,6 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
|
||||
return 0;
|
||||
}
|
||||
|
||||
ro_theme_create_browser_toolbar(g);
|
||||
|
||||
g->prev = 0;
|
||||
g->next = window_list;
|
||||
if (window_list)
|
||||
@ -221,10 +219,16 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
|
||||
window_list = g;
|
||||
window_count++;
|
||||
|
||||
/* Add in a toolbar
|
||||
*/
|
||||
g->toolbar = ro_gui_theme_create_toolbar(NULL, THEME_BROWSER_TOOLBAR);
|
||||
ro_gui_theme_attach_toolbar(g->toolbar, g->window);
|
||||
|
||||
/* Set the window options
|
||||
*/
|
||||
bw->window = g;
|
||||
ro_gui_window_clone_options(bw, clone);
|
||||
ro_gui_prepare_navigate(g);
|
||||
|
||||
/* Open the window
|
||||
*/
|
||||
@ -237,22 +241,15 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
|
||||
return g;
|
||||
}
|
||||
|
||||
/* Only fix the centralisation if we've opened the window centred
|
||||
*/
|
||||
if (open_centred) {
|
||||
scroll_width = ro_get_vscroll_width(g->window);
|
||||
state.visible.x0 -= scroll_width;
|
||||
}
|
||||
|
||||
/* Open the window at the top of the stack
|
||||
*/
|
||||
state.next = wimp_TOP;
|
||||
ro_gui_window_open(g, (wimp_open*)&state);
|
||||
ro_gui_prepare_navigate(g);
|
||||
|
||||
|
||||
/* Set the caret position to the URL bar
|
||||
*/
|
||||
if (g->toolbar && g->toolbar->url_bar)
|
||||
if (g->toolbar && g->toolbar->display_url)
|
||||
error = xwimp_set_caret_position(
|
||||
g->toolbar->toolbar_handle,
|
||||
ICON_TOOLBAR_URL, -1, -1, -1, 0);
|
||||
@ -291,7 +288,7 @@ void gui_window_destroy(struct gui_window *g)
|
||||
if (g->next)
|
||||
g->next->prev = g->prev;
|
||||
|
||||
ro_toolbar_destroy(g->toolbar);
|
||||
ro_gui_theme_destroy_toolbar(g->toolbar);
|
||||
|
||||
/* delete window */
|
||||
error = xwimp_delete_window(g->window);
|
||||
@ -715,9 +712,8 @@ void gui_window_set_extent(struct gui_window *g, int width, int height)
|
||||
|
||||
void gui_window_set_status(struct gui_window *g, const char *text)
|
||||
{
|
||||
if (!g->toolbar)
|
||||
if ((!g->toolbar) || (!g->toolbar->status_handle))
|
||||
return;
|
||||
|
||||
ro_gui_set_icon_string(g->toolbar->status_handle,
|
||||
ICON_STATUS_TEXT, text);
|
||||
}
|
||||
@ -734,6 +730,7 @@ void gui_window_set_url(struct gui_window *g, const char *url)
|
||||
{
|
||||
wimp_caret caret;
|
||||
os_error *error;
|
||||
char *toolbar_url;
|
||||
|
||||
if (!g->toolbar)
|
||||
return;
|
||||
@ -754,8 +751,10 @@ void gui_window_set_url(struct gui_window *g, const char *url)
|
||||
caret.i == ICON_TOOLBAR_URL))
|
||||
return;
|
||||
|
||||
toolbar_url = ro_gui_get_icon_string(g->toolbar->toolbar_handle,
|
||||
ICON_TOOLBAR_URL);
|
||||
error = xwimp_set_caret_position(g->toolbar->toolbar_handle,
|
||||
ICON_TOOLBAR_URL, 0, 0, -1, (int) strlen(g->url));
|
||||
ICON_TOOLBAR_URL, 0, 0, -1, (int)strlen(toolbar_url));
|
||||
if (error) {
|
||||
LOG(("xwimp_set_caret_position: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
@ -764,6 +763,65 @@ void gui_window_set_url(struct gui_window *g, const char *url)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Forces all windows to be set to the current theme
|
||||
*
|
||||
* /param g the gui window to update
|
||||
*/
|
||||
void ro_gui_window_update_theme(void) {
|
||||
int height;
|
||||
struct gui_window *g;
|
||||
for (g = window_list; g; g = g->next) {
|
||||
if (g->toolbar) {
|
||||
height = g->toolbar->height;
|
||||
if (!ro_gui_theme_update_toolbar(NULL, g->toolbar)) {
|
||||
ro_gui_theme_destroy_toolbar(g->toolbar);
|
||||
g->toolbar = NULL;
|
||||
if (height != 0)
|
||||
ro_gui_window_update_dimensions(g, height);
|
||||
} else {
|
||||
if (height != g->toolbar->height)
|
||||
ro_gui_window_update_dimensions(g, height -
|
||||
g->toolbar->height);
|
||||
}
|
||||
ro_gui_prepare_navigate(g);
|
||||
}
|
||||
}
|
||||
if (hotlist_toolbar) {
|
||||
if (!ro_gui_theme_update_toolbar(NULL, hotlist_toolbar)) {
|
||||
ro_gui_theme_destroy_toolbar(hotlist_toolbar);
|
||||
hotlist_toolbar = NULL;
|
||||
}
|
||||
xwimp_force_redraw(hotlist_window, 0, -16384, 16384, 16384);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Forces the windows extent to be updated
|
||||
*
|
||||
* /param g the gui window to update
|
||||
* /param yscroll an amount to scroll the vertical scroll bar by
|
||||
*/
|
||||
void ro_gui_window_update_dimensions(struct gui_window *g, int yscroll) {
|
||||
os_error *error;
|
||||
wimp_window_state state;
|
||||
if (!g) return;
|
||||
state.w = g->window;
|
||||
error = xwimp_get_window_state(&state);
|
||||
if (error) {
|
||||
LOG(("xwimp_get_window_state: 0x%x: %s",
|
||||
error->errnum, error->errmess));
|
||||
warn_user("WimpError", error->errmess);
|
||||
return;
|
||||
}
|
||||
state.yscroll -= yscroll;
|
||||
g->old_height = -1;
|
||||
ro_gui_window_open(g, (wimp_open *)&state);
|
||||
/* gui_window_redraw_window(g); */
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a window using the given wimp_open, handling toolbars and resizing.
|
||||
*/
|
||||
@ -866,7 +924,7 @@ void ro_gui_window_open(struct gui_window *g, wimp_open *open)
|
||||
}
|
||||
|
||||
if (g->toolbar)
|
||||
ro_theme_resize_toolbar(g->toolbar, g->window);
|
||||
ro_gui_theme_process_toolbar(g->toolbar, -1);
|
||||
}
|
||||
|
||||
|
||||
@ -878,21 +936,21 @@ void ro_gui_throb(void)
|
||||
{
|
||||
os_t t;
|
||||
struct gui_window *g;
|
||||
char throb_buf[12];
|
||||
|
||||
xos_read_monotonic_time(&t);
|
||||
|
||||
for (g = window_list; g; g = g->next) {
|
||||
if (!g->bw->throbbing || !g->toolbar || (g->toolbar->throbber_frames == 0))
|
||||
continue;
|
||||
if (t < g->throbtime + 10)
|
||||
if (!g->bw->throbbing || !g->toolbar || !g->toolbar->display_throbber ||
|
||||
!g->toolbar->theme || (t < g->throbtime + 10))
|
||||
continue;
|
||||
g->throbtime = t;
|
||||
g->throbber++;
|
||||
if (g->toolbar->throbber_frames < g->throbber)
|
||||
g->throbber = 0;
|
||||
sprintf(g->throb_buf, "throbber%i", g->throbber);
|
||||
ro_gui_redraw_icon(g->toolbar->toolbar_handle,
|
||||
ICON_TOOLBAR_THROBBER);
|
||||
if (g->toolbar->theme->throbber_frames < g->throbber)
|
||||
g->throbber = 1;
|
||||
sprintf(throb_buf, "throbber%i", g->throbber);
|
||||
ro_gui_set_icon_string(g->toolbar->toolbar_handle,
|
||||
ICON_TOOLBAR_THROBBER, throb_buf);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1174,10 +1232,14 @@ void gui_window_start_throbber(struct gui_window *g)
|
||||
|
||||
void gui_window_stop_throbber(struct gui_window *g)
|
||||
{
|
||||
char throb_buf[12];
|
||||
ro_gui_prepare_navigate(g);
|
||||
g->throbber = 0;
|
||||
strcpy(g->throb_buf, "throbber0");
|
||||
ro_gui_redraw_icon(g->toolbar->toolbar_handle, ICON_TOOLBAR_THROBBER);
|
||||
if (g->toolbar) {
|
||||
strcpy(throb_buf, "throbber0");
|
||||
ro_gui_set_icon_string(g->toolbar->toolbar_handle,
|
||||
ICON_TOOLBAR_THROBBER, throb_buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1240,6 +1302,7 @@ bool ro_gui_window_keypress(struct gui_window *g, int key, bool toolbar)
|
||||
wimp_window_state state;
|
||||
int y;
|
||||
char *url;
|
||||
char *toolbar_url;
|
||||
os_error *error;
|
||||
wimp_pointer pointer;
|
||||
url_func_result res;
|
||||
@ -1369,7 +1432,9 @@ bool ro_gui_window_keypress(struct gui_window *g, int key, bool toolbar)
|
||||
case wimp_KEY_RETURN:
|
||||
if (!toolbar)
|
||||
break;
|
||||
res = url_normalize(g->url, &url);
|
||||
toolbar_url = ro_gui_get_icon_string(g->toolbar->toolbar_handle,
|
||||
ICON_TOOLBAR_URL);
|
||||
res = url_normalize(toolbar_url, &url);
|
||||
if (res == URL_FUNC_OK) {
|
||||
gui_window_set_url(g, url);
|
||||
browser_window_go(g->bw, url);
|
||||
@ -1383,7 +1448,8 @@ bool ro_gui_window_keypress(struct gui_window *g, int key, bool toolbar)
|
||||
|
||||
case 14: /* CTRL+N */
|
||||
current_gui = g;
|
||||
browser_window_create(g->url, g->bw);
|
||||
browser_window_create(current_gui->bw->current_content->url,
|
||||
current_gui->bw);
|
||||
return true;
|
||||
case 18: /* CTRL+R */
|
||||
browser_window_reload(g->bw, false);
|
||||
@ -1680,18 +1746,19 @@ void ro_gui_window_clone_options(struct browser_window *new_bw,
|
||||
if (new_gui->toolbar) {
|
||||
if ((old_gui) && (old_gui->toolbar)) {
|
||||
new_gui->toolbar->status_width = old_gui->toolbar->status_width;
|
||||
new_gui->toolbar->status_window = old_gui->toolbar->status_window;
|
||||
new_gui->toolbar->standard_buttons = old_gui->toolbar->standard_buttons;
|
||||
new_gui->toolbar->url_bar = old_gui->toolbar->url_bar;
|
||||
new_gui->toolbar->throbber = old_gui->toolbar->throbber;
|
||||
new_gui->toolbar->display_status = old_gui->toolbar->display_status;
|
||||
new_gui->toolbar->display_buttons = old_gui->toolbar->display_buttons;
|
||||
new_gui->toolbar->display_url = old_gui->toolbar->display_url;
|
||||
new_gui->toolbar->display_throbber = old_gui->toolbar->display_throbber;
|
||||
} else {
|
||||
new_gui->toolbar->status_width = option_toolbar_status_width;
|
||||
new_gui->toolbar->status_window = option_toolbar_show_status;
|
||||
new_gui->toolbar->standard_buttons = option_toolbar_show_buttons;
|
||||
new_gui->toolbar->url_bar = option_toolbar_show_address;
|
||||
new_gui->toolbar->throbber = option_toolbar_show_throbber;
|
||||
new_gui->toolbar->display_status = option_toolbar_show_status;
|
||||
new_gui->toolbar->display_buttons = option_toolbar_show_buttons;
|
||||
new_gui->toolbar->display_url = option_toolbar_show_address;
|
||||
new_gui->toolbar->display_throbber = option_toolbar_show_throbber;
|
||||
}
|
||||
ro_theme_update_toolbar(new_gui->toolbar, new_gui->window);
|
||||
new_gui->toolbar->reformat_buttons = true;
|
||||
ro_gui_theme_process_toolbar(new_gui->toolbar, -1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1726,10 +1793,10 @@ void ro_gui_window_default_options(struct browser_window *bw) {
|
||||
*/
|
||||
if (gui->toolbar) {
|
||||
option_toolbar_status_width = gui->toolbar->status_width;
|
||||
option_toolbar_show_status = gui->toolbar->status_window;
|
||||
option_toolbar_show_buttons = gui->toolbar->standard_buttons;
|
||||
option_toolbar_show_address = gui->toolbar->url_bar;
|
||||
option_toolbar_show_throbber = gui->toolbar->throbber;
|
||||
option_toolbar_show_status = gui->toolbar->display_status;
|
||||
option_toolbar_show_buttons = gui->toolbar->display_buttons;
|
||||
option_toolbar_show_address = gui->toolbar->display_url;
|
||||
option_toolbar_show_throbber = gui->toolbar->display_throbber;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user