PolycodeWebView.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #include "PolycodeWebView.h"
  2. PolycodeWebView::PolycodeWebView(unsigned int width, unsigned int height, String url) : Awesomium::WebViewListener(), EventDispatcher() {
  3. this->width = width;
  4. this->height = height;
  5. char *testData = (char*)malloc(width*height*4);
  6. renderTexture = CoreServices::getInstance()->getMaterialManager()->createTexture(width, height, (char*)testData, false, Image::IMAGE_RGBA);
  7. delete testData;
  8. webCore = new Awesomium::WebCore();
  9. webView = webCore->createWebView(width, height);
  10. webView->setListener(this);
  11. webView->createObject(L"Polycode");
  12. webView->setObjectCallback(L"Polycode", L"showNotice");
  13. webView->setObjectCallback(L"Polycode", L"showGlowAreas");
  14. webView->loadURL(url.c_str());
  15. webView->focus();
  16. }
  17. void PolycodeWebView::onCallback(Awesomium::WebView* caller,
  18. const std::wstring& objectName,
  19. const std::wstring& callbackName,
  20. const Awesomium::JSArguments& args) {
  21. PolycodeWebViewEvent *event = new PolycodeWebViewEvent();
  22. event->objectName = objectName;
  23. event->callbackName = callbackName;
  24. for(int i=0; i < args.size(); i++) {
  25. event->args.push_back(String(args[i].toString()));
  26. }
  27. dispatchEvent(event, PolycodeWebViewEvent::CALLBACK_EVENT);
  28. }
  29. void PolycodeWebView::Resize(unsigned int width, unsigned int height) {
  30. webView->resize(width, height);
  31. this->width = width;
  32. this->height = height;
  33. }
  34. PolycodeWebView::~PolycodeWebView() {
  35. webView->destroy();
  36. delete webCore;
  37. delete renderTexture;
  38. }
  39. void PolycodeWebView::loadURL(String url) {
  40. webView->loadURL(url.c_str());
  41. }
  42. void PolycodeWebView::Update() {
  43. webCore->update();
  44. if(webView->isDirty()) {
  45. const Awesomium::RenderBuffer* renderBuffer = webView->render();
  46. if(renderBuffer) {
  47. char *dest = (char*)malloc(width*height*4);
  48. renderBuffer->copyTo((unsigned char*)dest, width * 4, 4, true, true);
  49. Image *newImage = new Image(dest, width, height, Image::IMAGE_RGBA);
  50. renderTexture->setImageData(newImage);
  51. renderTexture->recreateFromImageData();
  52. delete newImage;
  53. delete dest;
  54. }
  55. }
  56. }
  57. void PolycodeWebView::mouseMove(Number x, Number y) {
  58. webView->injectMouseMove(x, y);
  59. }
  60. void PolycodeWebView::mouseDown(Number x, Number y) {
  61. webView->injectMouseDown(Awesomium::LEFT_MOUSE_BTN);
  62. }
  63. void PolycodeWebView::mouseUp(Number x, Number y) {
  64. webView->injectMouseUp(Awesomium::LEFT_MOUSE_BTN);
  65. }
  66. void PolycodeWebView::injectKey(int keyCode) {
  67. Awesomium::WebKeyboardEvent keyEvent;
  68. char* buf = new char[20];
  69. keyEvent.virtualKeyCode = keyCode;
  70. Awesomium::getKeyIdentifierFromVirtualKeyCode(keyEvent.virtualKeyCode,
  71. &buf);
  72. strcpy(keyEvent.keyIdentifier, buf);
  73. delete[] buf;
  74. keyEvent.modifiers = 0;
  75. keyEvent.nativeKeyCode = 0;
  76. keyEvent.type = Awesomium::WebKeyboardEvent::TYPE_KEY_DOWN;
  77. webView->injectKeyboardEvent(keyEvent);
  78. keyEvent.type = Awesomium::WebKeyboardEvent::TYPE_KEY_UP;
  79. webView->injectKeyboardEvent(keyEvent);
  80. }
  81. void PolycodeWebView::keyDown(PolyKEY key) {
  82. injectKey(key);
  83. }
  84. Texture *PolycodeWebView::getRenderTexture() {
  85. return renderTexture;
  86. }