1 #ifdef HAVE_CONFIG_H
2 #include "config.h"
3 #endif
4
5 #ifdef WITH_CEF
6
7 #include <fs/emu/cef.h>
8 #include <include/cef_app.h>
9 #include <include/cef_client.h>
10 #include <include/cef_render_handler.h>
11 #include <stdlib.h>
12
13 extern "C" {
14
cef_init(int argc,char * argv[])15 int cef_init(int argc, char *argv[])
16 {
17 CefMainArgs args(argc, argv);
18 int result = CefExecuteProcess(args, NULL, NULL);
19 if (result >= 0) {
20 /* child proccess has endend, so exit */
21 exit(result);
22 }
23
24 CefSettings settings;
25
26 if (!CefInitialize(args, settings, NULL, NULL)) {
27 return -1;
28 }
29
30 return 0;
31 }
32
cef_destroy(void)33 void cef_destroy(void)
34 {
35 CefShutdown();
36 }
37
38 class RenderHandler : public CefRenderHandler
39 {
40 public:
41
RenderHandler()42 RenderHandler()
43 {
44
45 }
46
GetViewRect(CefRefPtr<CefBrowser> browser,CefRect & rect)47 bool GetViewRect(CefRefPtr<CefBrowser> browser, CefRect &rect) {
48 int width = 1280;
49 int height = 720;
50 rect = CefRect(0, 0, width, height);
51 return true;
52 }
53
OnPaint(CefRefPtr<CefBrowser> browser,PaintElementType type,const RectList & dirtyRects,const void * buffer,int width,int height)54 void OnPaint(CefRefPtr<CefBrowser> browser, PaintElementType type,
55 const RectList &dirtyRects, const void *buffer,
56 int width, int height) {
57 #if 0
58 memcpy(texBuf->getCurrentLock().data, buffer, width * height * 4);
59 #endif
60 }
61
62 IMPLEMENT_REFCOUNTING(RenderHandler)
63 };
64
65 class BrowserClient : public CefClient
66 {
67 public:
68
BrowserClient(RenderHandler * renderHandler)69 BrowserClient(RenderHandler *renderHandler)
70 : m_renderHandler(renderHandler) {
71
72 }
73
GetRenderHandler()74 virtual CefRefPtr<CefRenderHandler> GetRenderHandler() {
75 return m_renderHandler;
76 }
77
78 CefRefPtr<CefRenderHandler> m_renderHandler;
79
80 IMPLEMENT_REFCOUNTING(BrowserClient)
81 };
82
83 CefRefPtr<CefBrowser> browser;
84 CefRefPtr<BrowserClient> browser_client;
85 CefRefPtr<RenderHandler> render_handler;
86
cef_create_browser(void)87 void cef_create_browser(void)
88 {
89 CefWindowInfo window_info;
90 window_info.SetAsWindowless(0, true);
91
92 CefBrowserSettings browser_settings;
93
94 render_handler = new RenderHandler();
95 browser_client = new BrowserClient(render_handler);
96
97 const char *url = "http://google.com/";
98 browser = CefBrowserHost::CreateBrowserSync(
99 window_info, browser_client.get(), url, browser_settings, NULL);
100 }
101
102 } /* extern "C" */
103
104 #endif /* WITH_CEF */
105