summaryrefslogtreecommitdiff
path: root/riscos/theme.h
blob: d0a9f04282d7f59a5477b2c068d6bf76ad971bae (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
/*
 * 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 2005 Richard Wilson <info@tinct.net>
 */

/** \file
 * Window themes and toolbars (interface).
 */

#include <stdbool.h>

#ifndef _NETSURF_RISCOS_THEME_H_
#define _NETSURF_RISCOS_THEME_H_

typedef enum {
  	THEME_BROWSER_TOOLBAR,
  	THEME_HOTLIST_TOOLBAR,
  	THEME_HISTORY_TOOLBAR,
  	THEME_BROWSER_EDIT_TOOLBAR,
  	THEME_HOTLIST_EDIT_TOOLBAR,
  	THEME_HISTORY_EDIT_TOOLBAR
} toolbar_type;

struct theme_file_header {
	unsigned int magic_value;
	unsigned int parser_version;
	char name[32];
	char author[64];
	char browser_bg;
	char hotlist_bg;
	char status_bg;
	char status_fg;
	char theme_flags;
	char future_expansion_1;
	char future_expansion_2;
	char future_expansion_3;
	unsigned int compressed_sprite_size;
	unsigned int decompressed_sprite_size;
};

struct toolbar_icon {
	int icon_number;			/**< wimp icon number */
	bool display;				/**< whether to display the icon */
	int x;					/**< icon x position (valid only when displayed) */
	int y;					/**< icon y position (valid only when displayed) */
	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 */
};

struct theme {
	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 users;				/**< number of users for the 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) */
	int max_height;				/**< allowed vertical extent (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 toolbar_icon *suggest;		/**< suggestion toolbar icon (read only) */
  	struct theme_descriptor *descriptor;	/**< theme descriptor (read only) */
	toolbar_type type;			/**< toolbar type (read only) */
	struct toolbar *editor;			/**< toolbar editor */
};

struct theme_descriptor {
  	char *leafname;				/**< theme leafname */
	char *filename;				/**< theme filename */
	char name[32];				/**< theme name */
	char author[64];			/**< theme author */
	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 throbber_right;			/**< throbber is on the right (left otherwise) */
	bool throbber_redraw;			/**< throbber requires forcible updating */
	unsigned int decompressed_size;		/**< decompressed sprite size */
	unsigned int compressed_size;		/**< compressed sprite size */
	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 *leafname);
struct theme_descriptor *ro_gui_theme_get_available(void);
bool ro_gui_theme_read_file_header(struct theme_descriptor *descriptor,
		struct theme_file_header *file_header);

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);
void ro_gui_theme_redraw(struct toolbar *toolbar, wimp_draw *redraw);

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);

void ro_gui_theme_toggle_edit(struct toolbar *toolbar);
void ro_gui_theme_toolbar_editor_sync(struct toolbar *toolbar);
void ro_gui_theme_toolbar_editor_click(struct toolbar *toolbar, wimp_pointer *pointer);
void ro_gui_theme_toolbar_editor_drag_end(wimp_dragged *drag);

struct toolbar_icon *ro_gui_theme_toolbar_get_icon(struct toolbar *toolbar, int x, int y);

#define ro_gui_theme_toolbar_height(toolbar) toolbar->height + \
		(toolbar->editor ? toolbar->editor->height : 0) > toolbar->max_height ? \
		toolbar->max_height : toolbar->height + \
		(toolbar->editor ? toolbar->editor->height : 0)
#define ro_gui_theme_toolbar_full_height(toolbar) toolbar->height + \
		(toolbar->editor ? toolbar->editor->height : 0)
#endif