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