summaryrefslogtreecommitdiff
path: root/desktop/browser.h
blob: 9da3b18113c387f20a7116c0424bf1fc295b99c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/**
 * $Id: browser.h,v 1.5 2002/12/30 22:56:30 monkeyson 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;
      struct page_elements elements;
    } 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,
	 act_GADGET_SELECT
       } type;
  union {
    struct {
      int x;
      int y;
      action_buttons buttons;
    } mouse;
    struct {
      struct gui_gadget* g;
      int item;
    } gadget_select;
  } data;
};

struct box_selection
{
  struct box* box;
  int actual_x;
  int actual_y;
  int plot_index;
};

/* 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