Modified: trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp (133422 => 133423)
--- trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp 2012-11-04 14:57:52 UTC (rev 133422)
+++ trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp 2012-11-04 16:02:29 UTC (rev 133423)
@@ -51,6 +51,7 @@
#include "ewk_view.h"
#include "ewk_view_private.h"
#include <Ecore_Evas.h>
+#include <Ecore_X.h>
#include <Edje.h>
#include <WebCore/Cursor.h>
@@ -169,7 +170,7 @@
EwkViewImpl::removeFromPageViewMap(this);
}
-Ewk_View_Smart_Data* EwkViewImpl::smartData()
+Ewk_View_Smart_Data* EwkViewImpl::smartData() const
{
return static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get(m_view));
}
@@ -239,6 +240,55 @@
ecore_evas_object_cursor_set(ecoreEvas, cursorObject.release().leakRef(), EVAS_LAYER_MAX, hotspotX, hotspotY);
}
+AffineTransform EwkViewImpl::transformFromScene() const
+{
+ AffineTransform transform;
+
+#if USE(TILED_BACKING_STORE)
+ IntPoint scrollPos = pageViewportControllerClient()->scrollPosition();
+ transform.translate(scrollPos.x(), scrollPos.y());
+ transform.scale(1 / pageViewportControllerClient()->scaleFactor());
+#endif
+
+ Ewk_View_Smart_Data* sd = smartData();
+ transform.translate(-sd->view.x, -sd->view.y);
+
+ return transform;
+}
+
+AffineTransform EwkViewImpl::transformToScene() const
+{
+ return transformFromScene().inverse();
+}
+
+AffineTransform EwkViewImpl::transformToScreen() const
+{
+ AffineTransform transform;
+
+ int windowGlobalX = 0;
+ int windowGlobalY = 0;
+
+ Ewk_View_Smart_Data* sd = smartData();
+
+#ifdef HAVE_ECORE_X
+ Ecore_Evas* ecoreEvas = ecore_evas_ecore_evas_get(sd->base.evas);
+ Ecore_X_Window window = ecore_evas_software_x11_window_get(ecoreEvas); // Returns 0 if none.
+
+ int x, y; // x, y are relative to parent (in a reparenting window manager).
+ while (window) {
+ ecore_x_window_geometry_get(window, &x, &y, 0, 0);
+ windowGlobalX += x;
+ windowGlobalY += y;
+ window = ecore_x_window_parent_get(window);
+ }
+#endif
+
+ transform.translate(-sd->view.x, -sd->view.y);
+ transform.translate(windowGlobalX, windowGlobalY);
+
+ return transform;
+}
+
void EwkViewImpl::displayTimerFired(Timer<EwkViewImpl>*)
{
#if USE(COORDINATED_GRAPHICS)
@@ -249,19 +299,11 @@
// We are supposed to clip to the actual viewport, nothing less.
IntRect viewport(sd->view.x, sd->view.y, sd->view.w, sd->view.h);
- IntPoint scrollPosition = m_pageViewportControllerClient->scrollPosition();
- float scaleFactor = m_pageViewportControllerClient->scaleFactor();
-
- WebCore::TransformationMatrix matrix;
- matrix.translate(viewport.x(), viewport.y());
- matrix.scale(scaleFactor);
- matrix.translate(-scrollPosition.x(), -scrollPosition.y());
-
LayerTreeRenderer* renderer = page()->drawingArea()->layerTreeCoordinatorProxy()->layerTreeRenderer();
renderer->setActive(true);
renderer->syncRemoteContent();
- renderer->paintToCurrentGLContext(matrix, /* opacity */ 1, viewport);
+ renderer->paintToCurrentGLContext(transformToScene().toTransformationMatrix(), /* opacity */ 1, viewport);
evas_object_image_data_update_add(sd->image, viewport.x(), viewport.y(), viewport.width(), viewport.height());
#endif
Modified: trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h (133422 => 133423)
--- trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h 2012-11-04 14:57:52 UTC (rev 133422)
+++ trunk/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h 2012-11-04 16:02:29 UTC (rev 133423)
@@ -62,6 +62,7 @@
}
namespace WebCore {
+class AffineTransform;
class Color;
class Cursor;
class IntSize;
@@ -107,6 +108,10 @@
bool isFocused() const;
bool isVisible() const;
+ WebCore::AffineTransform transformToScene() const;
+ WebCore::AffineTransform transformFromScene() const;
+ WebCore::AffineTransform transformToScreen() const;
+
const char* url() const { return m_url; }
const char* faviconURL() const { return m_faviconURL; }
const char* title() const;
@@ -174,8 +179,8 @@
unsigned long long informDatabaseQuotaReached(const String& databaseName, const String& displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentDatabaseUsage, unsigned long long expectedUsage);
#if USE(TILED_BACKING_STORE)
- WebKit::PageViewportControllerClientEfl* pageViewportControllerClient() { return m_pageViewportControllerClient.get(); }
- WebKit::PageViewportController* pageViewportController() { return m_pageViewportController.get(); }
+ WebKit::PageViewportControllerClientEfl* pageViewportControllerClient() const { return m_pageViewportControllerClient.get(); }
+ WebKit::PageViewportController* pageViewportController() const { return m_pageViewportController.get(); }
#endif
#if USE(ACCELERATED_COMPOSITING)
Evas_GL* evasGL() { return m_evasGL.get(); }
@@ -188,7 +193,7 @@
void informURLChange();
private:
- inline Ewk_View_Smart_Data* smartData();
+ inline Ewk_View_Smart_Data* smartData() const;
void displayTimerFired(WebCore::Timer<EwkViewImpl>*);
void informIconChange();
Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp (133422 => 133423)
--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp 2012-11-04 14:57:52 UTC (rev 133422)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp 2012-11-04 16:02:29 UTC (rev 133423)
@@ -50,7 +50,6 @@
#include "ewk_settings_private.h"
#include "ewk_view_private.h"
#include <Ecore_Evas.h>
-#include <Ecore_X.h>
#include <WebKit2/WKPageGroup.h>
#include <wtf/text/CString.h>
@@ -169,53 +168,11 @@
return true;
}
-static AffineTransform toDeviceScreenTransform(Ewk_View_Smart_Data* smartData)
-{
- AffineTransform transform;
- EWK_VIEW_IMPL_GET_BY_SD_OR_RETURN(smartData, impl, transform);
-
- int windowGlobalX = 0;
- int windowGlobalY = 0;
-
-#ifdef HAVE_ECORE_X
- Ecore_Evas* ecoreEvas = ecore_evas_ecore_evas_get(smartData->base.evas);
- Ecore_X_Window window = ecore_evas_software_x11_window_get(ecoreEvas); // Returns 0 if none.
-
- int x, y; // x, y are relative to parent (in a reparenting window manager).
- while (window) {
- ecore_x_window_geometry_get(window, &x, &y, 0, 0);
- windowGlobalX += x;
- windowGlobalY += y;
- window = ecore_x_window_parent_get(window);
- }
-#endif
-
- transform.translate(-smartData->view.x, -smartData->view.y);
- transform.translate(windowGlobalX, windowGlobalY);
-
- return transform;
-}
-
-static AffineTransform toWebContentTransform(Ewk_View_Smart_Data* smartData)
-{
- AffineTransform transform;
- EWK_VIEW_IMPL_GET_BY_SD_OR_RETURN(smartData, impl, transform);
-
-#if USE(TILED_BACKING_STORE)
- IntPoint scrollPos = impl->pageViewportControllerClient()->scrollPosition();
- transform.translate(scrollPos.x(), scrollPos.y());
- transform.scale(1 / impl->pageViewportControllerClient()->scaleFactor());
-#endif
- transform.translate(-smartData->view.x, -smartData->view.y);
-
- return transform;
-}
-
static Eina_Bool _ewk_view_smart_mouse_wheel(Ewk_View_Smart_Data* smartData, const Evas_Event_Mouse_Wheel* wheelEvent)
{
EWK_VIEW_IMPL_GET_BY_SD_OR_RETURN(smartData, impl, false);
- impl->page()->handleWheelEvent(NativeWebWheelEvent(wheelEvent, toWebContentTransform(smartData), toDeviceScreenTransform(smartData)));
+ impl->page()->handleWheelEvent(NativeWebWheelEvent(wheelEvent, impl->transformFromScene(), impl->transformToScreen()));
return true;
}
@@ -223,7 +180,7 @@
{
EWK_VIEW_IMPL_GET_BY_SD_OR_RETURN(smartData, impl, false);
- impl->page()->handleMouseEvent(NativeWebMouseEvent(downEvent, toWebContentTransform(smartData), toDeviceScreenTransform(smartData)));
+ impl->page()->handleMouseEvent(NativeWebMouseEvent(downEvent, impl->transformFromScene(), impl->transformToScreen()));
return true;
}
@@ -231,7 +188,7 @@
{
EWK_VIEW_IMPL_GET_BY_SD_OR_RETURN(smartData, impl, false);
- impl->page()->handleMouseEvent(NativeWebMouseEvent(upEvent, toWebContentTransform(smartData), toDeviceScreenTransform(smartData)));
+ impl->page()->handleMouseEvent(NativeWebMouseEvent(upEvent, impl->transformFromScene(), impl->transformToScreen()));
InputMethodContextEfl* inputMethodContext = impl->inputMethodContext();
if (inputMethodContext)
@@ -244,7 +201,7 @@
{
EWK_VIEW_IMPL_GET_BY_SD_OR_RETURN(smartData, impl, false);
- impl->page()->handleMouseEvent(NativeWebMouseEvent(moveEvent, toWebContentTransform(smartData), toDeviceScreenTransform(smartData)));
+ impl->page()->handleMouseEvent(NativeWebMouseEvent(moveEvent, impl->transformFromScene(), impl->transformToScreen()));
return true;
}
@@ -865,7 +822,7 @@
EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false);
EWK_VIEW_IMPL_GET_BY_SD_OR_RETURN(smartData, impl, false);
- impl->page()->handleTouchEvent(NativeWebTouchEvent(type, points, modifiers, toWebContentTransform(smartData), toDeviceScreenTransform(smartData), ecore_time_get()));
+ impl->page()->handleTouchEvent(NativeWebTouchEvent(type, points, modifiers, impl->transformFromScene(), impl->transformToScreen(), ecore_time_get()));
return true;
#else