Patch for Awesomium 1.5.1

xadh00m

19-08-2010 16:05:07

Hi,

Because I´m still not fixed if we should switch to Berkelium or still work with Awesomium I created a small patch for MyGUI to be able to use Awesomium 1.5.1 which contains some minor API changes (and is free for non-commercial use).

Index: AwesomiumWidget.cpp
===================================================================
--- AwesomiumWidget.cpp (revision 3283)
+++ AwesomiumWidget.cpp (working copy)
@@ -162,7 +162,7 @@
}

#if defined(_WIN32)
- void AwesomiumWidget::onChangeCursor(const HCURSOR& cursor)
+ void AwesomiumWidget::onChangeCursor(Awesomium::WebView* caller, const HCURSOR& cursor)
{
static HCURSOR arrow_cursor = ::LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW));
static HCURSOR beam_cursor = ::LoadCursor(NULL, MAKEINTRESOURCE(IDC_IBEAM));
@@ -194,7 +194,7 @@
}
#endif

- void AwesomiumWidget::onChangeKeyboardFocus(bool isFocused)
+ void AwesomiumWidget::onChangeKeyboardFocus(Awesomium::WebView* caller, bool isFocused)
{
if (isFocused)
MyGUI::InputManager::getInstance().setKeyFocusWidget(this);
Index: AwesomiumWidget.h
===================================================================
--- AwesomiumWidget.h (revision 3283)
+++ AwesomiumWidget.h (working copy)
@@ -63,17 +63,19 @@
virtual void onKeySetFocus(MyGUI::Widget* _old);

// WebViewListener 1.0.8
- virtual void onBeginNavigation(const std::string& url, const std::wstring& frameName) { }
- virtual void onBeginLoading(const std::string& url, const std::wstring& frameName, int statusCode, const std::wstring& mimeType) { }
- virtual void onFinishLoading() { }
- virtual void onCallback(const std::string& name, const Awesomium::JSArguments& args) { }
- virtual void onReceiveTitle(const std::wstring& title, const std::wstring& frameName) { }
- virtual void onChangeTooltip(const std::wstring& tooltip) { }
+ virtual void onBeginNavigation(Awesomium::WebView* caller, const std::string& url, const std::wstring& frameName) { }
+ virtual void onBeginLoading(Awesomium::WebView* caller, const std::string& url, const std::wstring& frameName, int statusCode, const std::wstring& mimeType) { }
+ virtual void onFinishLoading(Awesomium::WebView* caller) { }
+ virtual void onCallback(Awesomium::WebView* caller, const std::wstring& objectName, const std::wstring& callbackName, const Awesomium::JSArguments& args) { }
+ virtual void onReceiveTitle(Awesomium::WebView* caller, const std::wstring& title, const std::wstring& frameName) { }
+ virtual void onChangeTooltip(Awesomium::WebView* caller, const std::wstring& tooltip) { }
+
#if defined(_WIN32)
- virtual void onChangeCursor(const HCURSOR& cursor);
+ virtual void onChangeCursor(Awesomium::WebView* caller, const HCURSOR& cursor);
#endif
- virtual void onChangeKeyboardFocus(bool isFocused);
- virtual void onChangeTargetURL(const std::string& url) { }
+ virtual void onChangeKeyboardFocus(Awesomium::WebView* caller, bool isFocused);
+ virtual void onChangeTargetURL(Awesomium::WebView* caller, const std::string& url) { }
+ virtual void onOpenExternalLink(Awesomium::WebView* caller, const std::string& url, const std::wstring& source) { }

private:
size_t mOldCursor;
Index: AwesomiumWidgetFactory.cpp
===================================================================
--- AwesomiumWidgetFactory.cpp (revision 3283)
+++ AwesomiumWidgetFactory.cpp (working copy)
@@ -9,6 +9,7 @@
#include "MyGUI_Gui.h"
#include "MyGUI_InputManager.h"
#include "MyGUI_FactoryManager.h"
+#include "WebKeyboardEvent.h"

namespace Awesomium
{
@@ -17,7 +18,7 @@
AwesomiumWidgetFactory::AwesomiumWidgetFactory() :
mKeyboardHook(0)
{
- msCore = new Awesomium::WebCore(Awesomium::LOG_VERBOSE);
+ msCore = new Awesomium::WebCore();
mKeyboardHook = new KeyboardHook(this);

MyGUI::FactoryManager::getInstance().registerFactory<Awesomium::AwesomiumWidget>("Widget");
@@ -50,7 +51,10 @@
{
AwesomiumWidget* awidget = widget->castType<AwesomiumWidget>(false);
if (awidget)
- awidget->getControl()->injectKeyboardEvent(hwnd, msg, wParam, lParam);
+ {
+ Awesomium::WebKeyboardEvent wke(msg, wParam, lParam);
+ awidget->getControl()->injectKeyboardEvent(wke);
+ }
}
}



This patch is used against the tagged MyGUI3.0 version. I have not tested it thoroughly yet but the basic functionality seems to work fine...

xad

PS: Since the MyGUI team maintains the Berkelium and Awesomium plugin in their repository I would appreciate if they would update both plugins with the patches provided.

xadh00m

19-08-2010 16:21:26

Ok, I found one issue when using the LayoutEditor. For some reason the Keyboard input only works the first time I test the widget. When I go back and then go into test mode again the keyboard input is ignored on the awesomium widget.

xad

EthanB

28-10-2010 01:25:19

Could you explain how to apply this patch?

I've been trying to get an Awesomium Widget working for the past 3 hours with no luck, nothings compiling correctly and theres very little documentation on these things...

Thanks a lot if you can help.