| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- #include "PolycodeWebView.h"
- PolycodeWebView::PolycodeWebView(unsigned int width, unsigned int height, String url) : Awesomium::WebViewListener(), EventDispatcher() {
- this->width = width;
- this->height = height;
- char *testData = (char*)malloc(width*height*4);
- renderTexture = CoreServices::getInstance()->getMaterialManager()->createTexture(width, height, (char*)testData, false, Image::IMAGE_RGBA);
- delete testData;
- webCore = new Awesomium::WebCore();
- webView = webCore->createWebView(width, height);
-
- webView->setListener(this);
-
- webView->createObject(L"Polycode");
- webView->setObjectCallback(L"Polycode", L"showNotice");
- webView->setObjectCallback(L"Polycode", L"showGlowAreas");
-
- webView->loadURL(url.c_str());
- webView->focus();
- }
- void PolycodeWebView::onCallback(Awesomium::WebView* caller,
- const std::wstring& objectName,
- const std::wstring& callbackName,
- const Awesomium::JSArguments& args) {
- PolycodeWebViewEvent *event = new PolycodeWebViewEvent();
- event->objectName = objectName;
- event->callbackName = callbackName;
-
- for(int i=0; i < args.size(); i++) {
- event->args.push_back(String(args[i].toString()));
- }
-
- dispatchEvent(event, PolycodeWebViewEvent::CALLBACK_EVENT);
- }
- void PolycodeWebView::Resize(unsigned int width, unsigned int height) {
- webView->resize(width, height);
- this->width = width;
- this->height = height;
- }
- PolycodeWebView::~PolycodeWebView() {
- webView->destroy();
- delete webCore;
- delete renderTexture;
- }
- void PolycodeWebView::loadURL(String url) {
- webView->loadURL(url.c_str());
- }
- void PolycodeWebView::Update() {
- webCore->update();
- if(webView->isDirty()) {
- const Awesomium::RenderBuffer* renderBuffer = webView->render();
- if(renderBuffer) {
- char *dest = (char*)malloc(width*height*4);
- renderBuffer->copyTo((unsigned char*)dest, width * 4, 4, true, true);
-
- Image *newImage = new Image(dest, width, height, Image::IMAGE_RGBA);
- renderTexture->setImageData(newImage);
- renderTexture->recreateFromImageData();
- delete newImage;
- delete dest;
- }
- }
- }
- void PolycodeWebView::mouseMove(Number x, Number y) {
- webView->injectMouseMove(x, y);
- }
- void PolycodeWebView::mouseDown(Number x, Number y) {
- webView->injectMouseDown(Awesomium::LEFT_MOUSE_BTN);
- }
- void PolycodeWebView::mouseUp(Number x, Number y) {
- webView->injectMouseUp(Awesomium::LEFT_MOUSE_BTN);
- }
- void PolycodeWebView::injectKey(int keyCode) {
- Awesomium::WebKeyboardEvent keyEvent;
- char* buf = new char[20];
- keyEvent.virtualKeyCode = keyCode;
- Awesomium::getKeyIdentifierFromVirtualKeyCode(keyEvent.virtualKeyCode,
- &buf);
- strcpy(keyEvent.keyIdentifier, buf);
- delete[] buf;
-
- keyEvent.modifiers = 0;
- keyEvent.nativeKeyCode = 0;
- keyEvent.type = Awesomium::WebKeyboardEvent::TYPE_KEY_DOWN;
- webView->injectKeyboardEvent(keyEvent);
- keyEvent.type = Awesomium::WebKeyboardEvent::TYPE_KEY_UP;
- webView->injectKeyboardEvent(keyEvent);
- }
- void PolycodeWebView::keyDown(PolyKEY key) {
- injectKey(key);
- }
- Texture *PolycodeWebView::getRenderTexture() {
- return renderTexture;
- }
|