-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathWebClient.cs
More file actions
239 lines (198 loc) · 7.81 KB
/
Copy pathWebClient.cs
File metadata and controls
239 lines (198 loc) · 7.81 KB
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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
using System;
using CefGlue;
using VVVV.Core;
using VVVV.Core.Logging;
using System.Xml.Linq;
namespace VVVV.Nodes.Texture.HTML
{
public class WebClient : CefClient
{
class RenderHandler : CefRenderHandler
{
private readonly HTMLTextureRenderer FRenderer;
public RenderHandler(HTMLTextureRenderer renderer)
{
FRenderer = renderer;
}
protected override bool GetScreenPoint(CefBrowser browser, int viewX, int viewY, out int screenX, out int screenY)
{
return base.GetScreenPoint(browser, viewX, viewY, out screenX, out screenY);
}
protected override bool GetScreenRect(CefBrowser browser, out CefRect rect)
{
return base.GetScreenRect(browser, out rect);
}
protected override bool GetViewRect(CefBrowser browser, out CefRect rect)
{
return base.GetViewRect(browser, out rect);
}
protected override void OnPaint(CefBrowser browser, CefPaintElementType type, CefRect[] dirtyRects, IntPtr buffer)
{
int width, height;
switch (type) {
case CefPaintElementType.View:
browser.GetSize(CefPaintElementType.View, out width, out height);
FRenderer.Paint(dirtyRects, buffer, width * 4);
break;
case CefPaintElementType.Popup:
break;
}
base.OnPaint(browser, type, dirtyRects, buffer);
}
}
class LifeSpanHandler : CefLifeSpanHandler
{
private readonly HTMLTextureRenderer FRenderer;
public LifeSpanHandler(HTMLTextureRenderer renderer)
{
FRenderer = renderer;
}
protected override bool OnBeforePopup(CefBrowser parentBrowser, CefPopupFeatures popupFeatures, CefWindowInfo windowInfo, string url, ref CefClient client, CefBrowserSettings settings)
{
// We do not support popups
if (FRenderer.GetPopUpBehaviour())
{
return true;
}
else
{
FRenderer.DoLoadURL(url);
return true;
}
}
protected override void OnAfterCreated(CefBrowser browser)
{
FRenderer.Attach(browser);
base.OnAfterCreated(browser);
}
protected override void OnBeforeClose(CefBrowser browser)
{
FRenderer.Detach();
browser.Dispose();
base.OnBeforeClose(browser);
}
}
class LoadHandler : CefLoadHandler
{
private readonly HTMLTextureRenderer FRenderer;
public LoadHandler(HTMLTextureRenderer renderer)
{
FRenderer = renderer;
}
protected override void OnLoadStart(CefBrowser browser, CefFrame frame)
{
FRenderer.OnLoadStart(frame);
base.OnLoadStart(browser, frame);
}
protected override bool OnLoadError(CefBrowser browser, CefFrame frame, CefHandlerErrorCode errorCode, string failedUrl, ref string errorText)
{
FRenderer.OnLoadError(frame, errorCode, failedUrl, errorText);
return base.OnLoadError(browser, frame, errorCode, failedUrl, ref errorText);
}
protected override void OnLoadEnd(CefBrowser browser, CefFrame frame, int httpStatusCode)
{
FRenderer.OnLoadEnd(frame, httpStatusCode);
base.OnLoadEnd(browser, frame, httpStatusCode);
}
}
class KeyboardHandler : CefKeyboardHandler
{
protected override bool OnKeyEvent(CefBrowser browser, CefHandlerKeyEventType type, int code, CefHandlerKeyEventModifiers modifiers, bool isSystemKey, bool isAfterJavaScript)
{
return base.OnKeyEvent(browser, type, code, modifiers, isSystemKey, isAfterJavaScript);
}
}
class RequestHandler : CefRequestHandler
{
protected override bool OnBeforeBrowse(CefBrowser browser, CefFrame frame, CefRequest request, CefHandlerNavType navType, bool isRedirect)
{
return base.OnBeforeBrowse(browser, frame, request, navType, isRedirect);
}
}
class V8Handler : CefV8Handler
{
}
class PrintHandler : CefPrintHandler
{
}
class DisplayHandler : CefDisplayHandler
{
private readonly HTMLTextureRenderer FRenderer;
public DisplayHandler(HTMLTextureRenderer renderer)
{
FRenderer = renderer;
}
protected override bool OnConsoleMessage(CefBrowser browser, string message, string source, int line)
{
return base.OnConsoleMessage(browser, message, source, line);
}
}
private readonly CefRenderHandler FRenderHandler;
private readonly CefLifeSpanHandler FLifeSpanHandler;
private readonly CefLoadHandler FLoadHandler;
private readonly CefKeyboardHandler FKeyboardHandler;
private readonly CefRequestHandler FRequestHandler;
private readonly CefDisplayHandler FDisplayHandler;
public WebClient(HTMLTextureRenderer renderer)
{
FRenderHandler = new RenderHandler(renderer);
FLifeSpanHandler = new LifeSpanHandler(renderer);
FLoadHandler = new LoadHandler(renderer);
FKeyboardHandler = new KeyboardHandler();
FRequestHandler = new RequestHandler();
FDisplayHandler = new DisplayHandler(renderer);
}
protected override CefDisplayHandler GetDisplayHandler()
{
return FDisplayHandler;
}
protected override CefDragHandler GetDragHandler()
{
return base.GetDragHandler();
}
protected override CefFindHandler GetFindHandler()
{
return base.GetFindHandler();
}
protected override CefFocusHandler GetFocusHandler()
{
return base.GetFocusHandler();
}
protected override CefV8ContextHandler GetV8ContextHandler()
{
return base.GetV8ContextHandler();
}
protected override CefJSDialogHandler GetJSDialogHandler()
{
return base.GetJSDialogHandler();
}
protected override CefKeyboardHandler GetKeyboardHandler()
{
return FKeyboardHandler;
}
protected override CefLifeSpanHandler GetLifeSpanHandler()
{
return FLifeSpanHandler;
}
protected override CefLoadHandler GetLoadHandler()
{
return FLoadHandler;
}
protected override CefMenuHandler GetMenuHandler()
{
return base.GetMenuHandler();
}
protected override CefPrintHandler GetPrintHandler()
{
return base.GetPrintHandler();
}
protected override CefRenderHandler GetRenderHandler()
{
return FRenderHandler;
}
protected override CefRequestHandler GetRequestHandler()
{
return FRequestHandler;
}
}
}