Subversion Repositories Kolibri OS

Rev

Rev 8443 | Rev 8451 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8330 leency 1
#include "TWB\colors.h"
2
#include "TWB\anchors.h"
3
#include "TWB\parse_tag.h"
4
#include "TWB\special.h"
5
#include "TWB\tag_list.h"
7757 leency 6
dword page_bg;
7759 leency 7
dword link_color_default;
7757 leency 8
dword link_color_active;
8330 leency 9
#include "TWB\links.h"
4411 leency 10
 
7759 leency 11
#define BODY_MARGIN 6
12
#define BASIC_LINE_H 18
4416 leency 13
 
8439 leency 14
CANVAS canvas;
7771 leency 15
char line[500];
16
 
8439 leency 17
struct STYLE {
7752 leency 18
	bool
6794 leency 19
	b, u, s, h,
8016 leency 20
	font,
5746 leency 21
	pre,
22
	blq,
7742 leency 23
	button,
7759 leency 24
	image;
7752 leency 25
	dword bg_color;
7759 leency 26
	LIST tag_list;
8439 leency 27
	dword title;
28
	void reset();
5746 leency 29
};
30
 
8439 leency 31
void STYLE::reset()
32
{
33
	b = u = s = h = blq = pre = title = false;
34
	font = false;
35
	tag_list.reset();
36
}
37
 
4411 leency 38
struct TWebBrowser {
4540 leency 39
	llist list;
8439 leency 40
	STYLE style;
7752 leency 41
	dword draw_y, stolbec;
6803 leency 42
	int zoom;
7752 leency 43
	dword o_bufpointer;
7759 leency 44
	int cur_encoding, custom_encoding;
45
	bool link, t_html, t_body;
46
	dword bufpointer;
47
	dword bufsize;
7945 leency 48
	dword is_html;
8396 leency 49
	collection img_url;
8439 leency 50
	char header[150];
51
	char redirect[URL_SIZE];
7759 leency 52
 
7771 leency 53
	void Paint();
7746 leency 54
	void SetPageDefaults();
7752 leency 55
	void AddCharToTheLine();
56
	void ParseHtml();
5766 leency 57
	void SetStyle();
7762 leency 58
	bool CheckForLineBreak();
59
	void NewLine();
60
	void ChangeEncoding();
4411 leency 61
	void DrawPage();
8439 leency 62
 
63
	void tag_a();
64
	void tag_p();
65
	void tag_img();
66
	void tag_div();
67
	void tag_h1234_caption();
68
	void tag_ol_ul_dt();
69
	void tag_li();
70
	void tag_q();
71
	void tag_hr();
72
	void tag_code();
73
	void tag_meta_xml();
74
	void tag_body();
75
	void tag_iframe();
76
	void tag_title();
77
	void tag_font();
7759 leency 78
};
4486 leency 79
 
8439 leency 80
#include "TWB\set_style.h"
4411 leency 81
 
5747 leency 82
//============================================================================================
7771 leency 83
void TWebBrowser::Paint()
4411 leency 84
{
6803 leency 85
	dword start_x, line_length, stolbec_len;
7762 leency 86
	dword text_color__;
4411 leency 87
 
8439 leency 88
	if (style.title)
4411 leency 89
	{
7759 leency 90
		strncpy(#header, #line, sizeof(TWebBrowser.header)-1);
91
		strncat(#header, " - ", sizeof(TWebBrowser.header)-1);
92
		strncat(#header, #version, sizeof(TWebBrowser.header)-1);
4411 leency 93
		line = 0;
94
		return;
95
	}
7758 leency 96
	if (t_html) && (!t_body) {
97
		line = 0;
98
		return;
99
	}
4411 leency 100
 
6803 leency 101
	if (line)
4411 leency 102
	{
7759 leency 103
		start_x = stolbec * list.font_w + BODY_MARGIN + list.x;
6803 leency 104
		stolbec_len = strlen(#line) * zoom;
5768 leency 105
		line_length = stolbec_len * list.font_w;
4411 leency 106
 
7743 leency 107
		if (style.bg_color!=page_bg) {
8439 leency 108
			canvas.DrawBar(start_x, draw_y, line_length, list.item_h, style.bg_color);
7743 leency 109
		}
110
 
7742 leency 111
		if (style.image) {
8439 leency 112
			canvas.DrawBar(start_x, draw_y, line_length, list.item_h-1, 0xF9DBCB);
7742 leency 113
		}
114
		if (style.button) {
8439 leency 115
			canvas.DrawBar(start_x, draw_y, line_length, list.item_h - calc(zoom*2), 0xCCCccc);
116
			canvas.DrawBar(start_x, draw_y + list.item_h - calc(zoom*2), line_length, zoom, 0x999999);
7742 leency 117
		}
118
 
8016 leency 119
		text_color__ = text_colors.get_last();
120
		if (link) && (text_color__ == text_colors.get(0)) text_color__ = link_color_default;
7762 leency 121
 
8439 leency 122
		canvas.WriteText(start_x, draw_y, list.font_type, text_color__, #line, NULL);
123
		if (style.b) canvas.WriteText(start_x+1, draw_y, list.font_type, text_color__, #line, NULL);
124
		if (style.s) canvas.DrawBar(start_x, list.item_h / 2 - zoom + draw_y, line_length, zoom, text_color__);
125
		if (style.u) canvas.DrawBar(start_x, list.item_h - zoom - zoom + draw_y, line_length, zoom, text_color__);
5519 leency 126
		if (link) {
7747 leency 127
			if (line[0]==' ') && (line[1]==NULL) {} else {
8439 leency 128
				canvas.DrawBar(start_x, draw_y + list.item_h - calc(zoom*2)-1, line_length, zoom, link_color_default);
7970 leency 129
				links.add_text(start_x, draw_y + list.y, line_length, list.item_h - calc(zoom*2)-1, zoom);
7746 leency 130
			}
4411 leency 131
		}
4718 leency 132
		stolbec += stolbec_len;
8439 leency 133
		if (debug_mode) debugln(#line);
7750 leency 134
		line = NULL;
4411 leency 135
	}
136
}
5747 leency 137
//============================================================================================
7746 leency 138
void TWebBrowser::SetPageDefaults()
139
{
8439 leency 140
	t_html = t_body = link = false;
141
	style.reset();
7759 leency 142
	link_color_default = 0x0000FF;
4491 leency 143
	link_color_active = 0xFF0000;
8443 leency 144
	style.bg_color = page_bg = 0xffEBE8E9; //E0E3E3 EBE8E9
8439 leency 145
	canvas.Fill(0, page_bg);
7970 leency 146
	links.clear();
7752 leency 147
	anchors.clear();
8396 leency 148
	img_url.drop();
8016 leency 149
	text_colors.drop();
150
	text_colors.add(0);
7758 leency 151
	header = NULL;
7759 leency 152
	cur_encoding = CH_CP866;
153
	draw_y = BODY_MARGIN;
4411 leency 154
	stolbec = 0;
155
	line = 0;
7752 leency 156
	zoom = 1;
8302 leency 157
	redirect = '\0';
7757 leency 158
	//hold original buffer
159
	if (o_bufpointer) o_bufpointer=free(o_bufpointer);
160
	o_bufpointer = malloc(bufsize);
161
	memmov(o_bufpointer, bufpointer, bufsize);
7759 leency 162
	if (custom_encoding != -1) {
163
		cur_encoding = custom_encoding;
7781 leency 164
		bufpointer = ChangeCharset(cur_encoding, "CP866", bufpointer);
7759 leency 165
	}
7746 leency 166
}
167
//============================================================================================
7759 leency 168
void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
7752 leency 169
	char unicode_symbol[10];
7746 leency 170
	dword j;
7752 leency 171
	int tab_len;
7746 leency 172
	dword bufpos;
7759 leency 173
	bufsize = _bufsize;
8439 leency 174
 
7771 leency 175
	if (bufpointer != _bufpointer) {
176
		bufpointer = malloc(bufsize);
177
		memmov(bufpointer, _bufpointer, bufsize);
178
	} else {
179
		custom_encoding = CH_CP866;
180
	}
7746 leency 181