netsurf/desktop/browser.h

159 lines
4.0 KiB
C

/**
* $Id: browser.h,v 1.4 2002/11/02 22:28:05 bursa Exp $
*/
#ifndef _NETSURF_DESKTOP_BROWSER_H_
#define _NETSURF_DESKTOP_BROWSER_H_
#include "libxml/HTMLparser.h"
#include "netsurf/render/css.h"
#include "netsurf/render/box.h"
#include "netsurf/desktop/gui.h"
#include "netsurf/desktop/fetch.h"
#include "netsurf/riscos/font.h"
typedef int browser_window_flags;
#define browser_TOOLBAR ((browser_window_flags) 1)
#define browser_TITLE ((browser_window_flags) 2)
#define browser_SCROLL_X_NONE ((browser_window_flags) 4)
#define browser_SCROLL_X_AUTO ((browser_window_flags) 8)
#define browser_SCROLL_X_ALWAYS ((browser_window_flags) 16)
#define browser_SCROLL_Y_NONE ((browser_window_flags) 32)
#define browser_SCROLL_Y_AUTO ((browser_window_flags) 64)
#define browser_SCROLL_Y_ALWAYS ((browser_window_flags) 128)
typedef int action_buttons;
#define act_BUTTON_NORMAL ((action_buttons) 4)
#define act_BUTTON_ALTERNATIVE ((action_buttons) 1)
#define act_BUTTON_CONTEXT_MENU ((action_buttons) 2)
struct box_position
{
struct box* box;
int actual_box_x;
int actual_box_y;
int plot_index;
int pixel_offset;
int char_offset;
};
struct content
{
enum {CONTENT_UNKNOWN, CONTENT_HTML, CONTENT_IMAGE} type;
union
{
struct
{
htmlParserCtxt* parser;
xmlDoc* document;
xmlNode* markup;
struct box* layout;
struct css_stylesheet* stylesheet;
struct css_style* style;
struct {
struct box_position start;
struct box_position end;
enum {alter_UNKNOWN, alter_START, alter_END} altering;
int selected; /* 0 = unselected, 1 = selected */
} text_selection;
struct font_set* fonts;
} html;
} data;
struct fetch* main_fetch;
unsigned int ref_count;
};
struct history
{
struct history* earlier;
struct history* later;
char* description;
char* url;
};
struct history* history_create(char* desc, char* url);
void history_remember(struct history* current, char* desc, char* url);
struct browser_window
{
int format_width;
int format_height;
struct { int mult; int div; } scale;
struct content* current_content;
struct content* future_content;
struct history* history;
char* url;
browser_window_flags flags;
char* title;
gui_window* window;
int throbbing;
};
struct browser_message
{
enum { msg_UNKNOWN,
msg_FETCH_SENDING, msg_FETCH_WAITING, msg_FETCH_ABORT,
msg_FETCH_FETCH_INFO, msg_FETCH_DATA, msg_FETCH_FINISHED
} type;
struct fetch* f;
union {
struct {
enum { type_UNKNOWN, type_HTML } type; /* should be a MIME type ? */
int total_size; /* -1 == unknown size */
} fetch_info;
struct {
char* block;
int block_size;
} fetch_data;
} data;
};
struct browser_action
{
enum { act_UNKNOWN,
act_MOUSE_AT, act_MOUSE_CLICK, act_START_NEW_SELECTION,
act_ALTER_SELECTION, act_CLEAR_SELECTION,
act_FOLLOW_LINK, act_FOLLOW_LINK_NEW_WINDOW
} type;
union {
struct {
int x;
int y;
action_buttons buttons;
} mouse;
} data;
};
/* public functions */
struct browser_window* create_browser_window(int flags, int width, int height);
void browser_window_destroy(struct browser_window* bw);
void browser_window_open_location(struct browser_window* bw, char* url);
void browser_window_open_location_historical(struct browser_window* bw, char* url);
int browser_window_message(struct browser_window* bw, struct browser_message* msg);
int browser_window_action(struct browser_window* bw, struct browser_action* act);
void browser_window_set_status(struct browser_window* bw, char* text);
void browser_window_back(struct browser_window* bw);
void browser_window_forward(struct browser_window* bw);
int box_position_lt(struct box_position* x, struct box_position* y);
int box_position_gt(struct box_position* x, struct box_position* y);
int box_position_eq(struct box_position* x, struct box_position* y);
int box_position_distance(struct box_position* x, struct box_position* y);
#endif