Title: [145710] trunk/Source/WebCore
Revision
145710
Author
mikhail.pozdnya...@intel.com
Date
2013-03-13 06:30:05 -0700 (Wed, 13 Mar 2013)

Log Message

[EFL] Start using evas object directly in Widget class
https://bugs.webkit.org/show_bug.cgi?id=111858

Reviewed by Antonio Gomes.

Based on a patch by Kenneth Rohde Christiansen.

EFL Widget class should use evas object pointer directly rather
than WidgetPrivate* m_data as platformWidget() is a Mac specific
implementation detail that they are moving away from with WebKit2.

This patch brings: firstly better compliance with other ports,
secondly it makes code cleaner.

Besides, the evasObject is only directly used in the ScrollbarEfl
subclass of Widget and not in Widget or ScrollView or any other subclass,
thus the evas_object code has now been concentrated in ScrollbarEfl.

No new tests as there are no behavioral changes.

* page/efl/EventHandlerEfl.cpp:
* platform/Widget.h:
(Widget):
(WebCore::Widget::evasObject):
* platform/efl/ScrollbarEfl.cpp:
(ScrollbarEfl::~ScrollbarEfl):
(scrollbarEflEdjeMessage):
(ScrollbarEfl::show):
(ScrollbarEfl::hide):
(ScrollbarEfl::setParent):
(ScrollbarEfl::updateThumbPositionAndProportion):
(ScrollbarEfl::frameRectsChanged):
* platform/efl/ScrollbarEfl.h:
(ScrollbarEfl):
* platform/efl/WidgetEfl.cpp:
(WebCore::Widget::Widget):
(WebCore::Widget::~Widget):
(WebCore::Widget::frameRectsChanged):
(WebCore::Widget::show):
(WebCore::Widget::hide):
(WebCore::Widget::setEvasObject):
* plugins/efl/PluginViewEfl.cpp:
(WebCore::PluginView::platformGetValue):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (145709 => 145710)


--- trunk/Source/WebCore/ChangeLog	2013-03-13 13:01:26 UTC (rev 145709)
+++ trunk/Source/WebCore/ChangeLog	2013-03-13 13:30:05 UTC (rev 145710)
@@ -1,3 +1,49 @@
+2013-03-13  Mikhail Pozdnyakov  <mikhail.pozdnya...@intel.com>
+
+        [EFL] Start using evas object directly in Widget class
+        https://bugs.webkit.org/show_bug.cgi?id=111858
+
+        Reviewed by Antonio Gomes.
+
+        Based on a patch by Kenneth Rohde Christiansen.
+
+        EFL Widget class should use evas object pointer directly rather
+        than WidgetPrivate* m_data as platformWidget() is a Mac specific
+        implementation detail that they are moving away from with WebKit2.
+
+        This patch brings: firstly better compliance with other ports,
+        secondly it makes code cleaner.
+
+        Besides, the evasObject is only directly used in the ScrollbarEfl
+        subclass of Widget and not in Widget or ScrollView or any other subclass,
+        thus the evas_object code has now been concentrated in ScrollbarEfl.
+
+        No new tests as there are no behavioral changes.
+
+        * page/efl/EventHandlerEfl.cpp:
+        * platform/Widget.h:
+        (Widget):
+        (WebCore::Widget::evasObject):
+        * platform/efl/ScrollbarEfl.cpp:
+        (ScrollbarEfl::~ScrollbarEfl):
+        (scrollbarEflEdjeMessage):
+        (ScrollbarEfl::show):
+        (ScrollbarEfl::hide):
+        (ScrollbarEfl::setParent):
+        (ScrollbarEfl::updateThumbPositionAndProportion):
+        (ScrollbarEfl::frameRectsChanged):
+        * platform/efl/ScrollbarEfl.h:
+        (ScrollbarEfl):
+        * platform/efl/WidgetEfl.cpp:
+        (WebCore::Widget::Widget):
+        (WebCore::Widget::~Widget):
+        (WebCore::Widget::frameRectsChanged):
+        (WebCore::Widget::show):
+        (WebCore::Widget::hide):
+        (WebCore::Widget::setEvasObject):
+        * plugins/efl/PluginViewEfl.cpp:
+        (WebCore::PluginView::platformGetValue):
+
 2013-03-13  Andrey Lushnikov  <lushni...@chromium.org>
 
         Web Inspector: [CodeMirror] token highlight still has some problems

Modified: trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp (145709 => 145710)


--- trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp	2013-03-13 13:01:26 UTC (rev 145709)
+++ trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp	2013-03-13 13:30:05 UTC (rev 145710)
@@ -42,7 +42,6 @@
 #include "PlatformKeyboardEvent.h"
 #include "PlatformWheelEvent.h"
 #include "RenderWidget.h"
-#include "Scrollbar.h"
 
 namespace WebCore {
 

Modified: trunk/Source/WebCore/platform/Widget.h (145709 => 145710)


--- trunk/Source/WebCore/platform/Widget.h	2013-03-13 13:01:26 UTC (rev 145709)
+++ trunk/Source/WebCore/platform/Widget.h	2013-03-13 13:30:05 UTC (rev 145710)
@@ -81,10 +81,8 @@
 #if PLATFORM(EFL)
 #if USE(EO)
 typedef struct _Eo Evas_Object;
-typedef struct _Eo Evas;
 #else
 typedef struct _Evas_Object Evas_Object;
-typedef struct _Evas Evas;
 #endif
 typedef Evas_Object* PlatformWidget;
 #endif
@@ -224,13 +222,8 @@
 #endif
 
 #if PLATFORM(EFL)
-    // FIXME: These should really go to PlatformWidget. They're here currently since
-    // the EFL port considers that Evas_Object (a C object) is a PlatformWidget, but
-    // encapsulating that into a C++ class will make this header clean as it should be.
-    Evas* evas() const;
-
     void setEvasObject(Evas_Object*);
-    Evas_Object* evasObject() const;
+    Evas_Object* evasObject() { return m_evasObject; }
 #endif
 
 #if PLATFORM(CHROMIUM)
@@ -277,10 +270,14 @@
 
     IntRect m_frame; // Not used when a native widget exists.
 
-#if PLATFORM(MAC) || PLATFORM(EFL)
+#if PLATFORM(MAC)
     WidgetPrivate* m_data;
 #endif
 
+#if PLATFORM(EFL)
+    Evas_Object* m_evasObject;
+#endif
+
 #if PLATFORM(QT)
     QPointer<QObject> m_bindingObject;
 #endif

Modified: trunk/Source/WebCore/platform/efl/ScrollbarEfl.cpp (145709 => 145710)


--- trunk/Source/WebCore/platform/efl/ScrollbarEfl.cpp	2013-03-13 13:01:26 UTC (rev 145709)
+++ trunk/Source/WebCore/platform/efl/ScrollbarEfl.cpp	2013-03-13 13:30:05 UTC (rev 145710)
@@ -63,16 +63,13 @@
 {
     if (!evasObject())
         return;
+
     evas_object_del(evasObject());
     setEvasObject(0);
 }
 
 static void scrollbarEflEdjeMessage(void* data, Evas_Object*, Edje_Message_Type messageType, int id, void* message)
 {
-    ScrollbarEfl* that = static_cast<ScrollbarEfl*>(data);
-    Edje_Message_Float* messageFloat;
-    int value;
-
     if (!id) {
         EINA_LOG_ERR("Unknown message id '%d' from scroll bar theme.", id);
         return;
@@ -85,63 +82,64 @@
         return;
     }
 
-    messageFloat = static_cast<Edje_Message_Float*>(message);
-    value = messageFloat->val * (that->totalSize() - that->visibleSize());
+    ScrollbarEfl* that = static_cast<ScrollbarEfl*>(data);
+
+    Edje_Message_Float* messageFloat = static_cast<Edje_Message_Float*>(message);
+    int value = messageFloat->val * (that->totalSize() - that->visibleSize());
     that->scrollableArea()->scrollToOffsetWithoutAnimation(that->orientation(), value);
 }
 
-void ScrollbarEfl::setParent(ScrollView* view)
+void ScrollbarEfl::show()
 {
-    Evas_Object* object = evasObject();
+    if (Evas_Object* object = evasObject())
+        evas_object_show(object);
+}
 
+void ScrollbarEfl::hide()
+{
+    if (Evas_Object* object = evasObject())
+        evas_object_hide(object);
+}
+
+void ScrollbarEfl::setParent(ScrollView* view)
+{
     Widget::setParent(view);
 
-    if (!object) {
-        if (!view || !view->evas() || !view->evasObject())
-            return;
-
-        object = edje_object_add(view->evas());
-        if (!object) {
-            EINA_LOG_ERR("Could not create edje object for view=%p (evas=%p)",
-                         view, view->evas());
-            return;
-        }
-        edje_object_message_handler_set(object, scrollbarEflEdjeMessage, this);
-        setEvasObject(object);
-    } else if (!view || !view->evas() || !view->evasObject()) {
-        evas_object_hide(object);
+    if (!view || !view->evasObject())
         return;
-    }
 
     Frame* frame = static_cast<FrameView*>(view)->frame();
-    if (!frame)
+    if (!frame || !frame->page())
         return;
 
-    Page* page = frame->page();
-    if (!page)
-        return;
+    String theme = static_cast<RenderThemeEfl*>(frame->page()->theme())->themePath();
 
-    const char* group = (orientation() == HorizontalScrollbar)
-        ? "scrollbar.horizontal" : "scrollbar.vertical";
-    String theme = static_cast<RenderThemeEfl*>(page->theme())->themePath();
-
+    const char* group = (orientation() == HorizontalScrollbar) ? "scrollbar.horizontal" : "scrollbar.vertical";
     if (theme.isEmpty()) {
         EINA_LOG_ERR("Could not load theme '%s': no theme path set.", group);
-        evas_object_hide(object);
         return;
     }
 
-    if (!edje_object_file_set(object, theme.utf8().data(), group)) {
-        Edje_Load_Error err = edje_object_load_error_get(object);
+    if (!evasObject()) {
+        setEvasObject(edje_object_add(evas_object_evas_get(view->evasObject())));
+        if (!evasObject()) {
+            EINA_LOG_ERR("Could not create edje object for view=%p", view);
+            return;
+        }
+        frameRectsChanged();
+        edje_object_message_handler_set(evasObject(), scrollbarEflEdjeMessage, this);
+    }
+
+    if (!edje_object_file_set(evasObject(), theme.utf8().data(), group)) {
+        Edje_Load_Error err = edje_object_load_error_get(evasObject());
         const char* errmessage = edje_load_error_str(err);
         EINA_LOG_ERR("Could not load theme '%s' from file '%s': #%d '%s'",
                      group, theme.utf8().data(), err, errmessage);
         return;
     }
 
-    setPlatformWidget(object);
-    evas_object_smart_member_add(object, view->evasObject());
-    evas_object_show(object);
+    evas_object_smart_member_add(evasObject(), view->evasObject());
+    evas_object_show(evasObject());
 }
 
 void ScrollbarEfl::updateThumbPosition()
@@ -156,7 +154,7 @@
 
 void ScrollbarEfl::updateThumbPositionAndProportion()
 {
-    if (!platformWidget())
+    if (!evasObject())
         return;
 
     int pos = currentPos();
@@ -186,7 +184,7 @@
     else
         message->val[1] = 0.0;
 
-    edje_object_message_send(platformWidget(), EDJE_MESSAGE_FLOAT_SET, 0, message);
+    edje_object_message_send(evasObject(), EDJE_MESSAGE_FLOAT_SET, 0, message);
 }
 
 void ScrollbarEfl::setFrameRect(const IntRect& rect)
@@ -197,7 +195,7 @@
 
 void ScrollbarEfl::frameRectsChanged()
 {
-    Evas_Object* object = platformWidget();
+    Evas_Object* object = evasObject();
     Evas_Coord x, y;
 
     if (!parent() || !object)

Modified: trunk/Source/WebCore/platform/efl/ScrollbarEfl.h (145709 => 145710)


--- trunk/Source/WebCore/platform/efl/ScrollbarEfl.h	2013-03-13 13:01:26 UTC (rev 145709)
+++ trunk/Source/WebCore/platform/efl/ScrollbarEfl.h	2013-03-13 13:30:05 UTC (rev 145710)
@@ -42,6 +42,9 @@
 
     virtual void setFrameRect(const IntRect&);
 
+    virtual void show() OVERRIDE;
+    virtual void hide() OVERRIDE;
+
     virtual bool handleMouseMoveEvent(const PlatformMouseEvent&) { return false; }
     virtual bool handleMouseOutEvent(const PlatformMouseEvent&) { return false; }
     virtual bool handleMousePressEvent(const PlatformMouseEvent&) { return false; }

Modified: trunk/Source/WebCore/platform/efl/WidgetEfl.cpp (145709 => 145710)


--- trunk/Source/WebCore/platform/efl/WidgetEfl.cpp	2013-03-13 13:01:26 UTC (rev 145709)
+++ trunk/Source/WebCore/platform/efl/WidgetEfl.cpp	2013-03-13 13:30:05 UTC (rev 145710)
@@ -47,24 +47,13 @@
 
 namespace WebCore {
 
-class WidgetPrivate {
-public:
-    Evas* m_evas;
-    Evas_Object* m_evasObject;
-
-    WidgetPrivate()
-        : m_evas(0)
-        , m_evasObject(0)
-    { }
-};
-
 Widget::Widget(PlatformWidget widget)
     : m_parent(0)
     , m_widget(0)
     , m_selfVisible(false)
     , m_parentVisible(false)
     , m_frame(0, 0, 0, 0)
-    , m_data(new WidgetPrivate)
+    , m_evasObject(0)
 {
     init(widget);
 }
@@ -72,8 +61,6 @@
 Widget::~Widget()
 {
     ASSERT(!parent());
-
-    delete m_data;
 }
 
 IntRect Widget::frameRect() const
@@ -89,21 +76,7 @@
 
 void Widget::frameRectsChanged()
 {
-    Evas_Object* object = evasObject();
-    Evas_Coord x, y;
-
-    if (!parent() || !object)
-        return;
-
-    IntRect rect = frameRect();
-    if (parent()->isScrollViewScrollbar(this))
-        rect.setLocation(parent()->convertToContainingWindow(rect.location()));
-    else
-        rect.setLocation(parent()->contentsToWindow(rect.location()));
-
-    evas_object_geometry_get(root()->evasObject(), &x, &y, 0, 0);
-    evas_object_move(object, x + rect.x(), y + rect.y());
-    evas_object_resize(object, rect.width(), rect.height());
+    notImplemented();
 }
 
 void Widget::setFocus(bool)
@@ -120,18 +93,12 @@
 
 void Widget::show()
 {
-    if (!platformWidget())
-         return;
-
-    evas_object_show(platformWidget());
+    notImplemented();
 }
 
 void Widget::hide()
 {
-    if (!platformWidget())
-         return;
-
-    evas_object_hide(platformWidget());
+    notImplemented();
 }
 
 void Widget::paint(GraphicsContext*, const IntRect&)
@@ -144,31 +111,9 @@
     notImplemented();
 }
 
-Evas* Widget::evas() const
+void Widget::setEvasObject(Evas_Object* object)
 {
-    return m_data->m_evas;
+    m_evasObject = object;
 }
 
-void Widget::setEvasObject(Evas_Object *object)
-{
-    // FIXME: study platformWidget() and use it
-    // FIXME: right now platformWidget() requires implementing too much
-    if (m_data->m_evasObject == object)
-        return;
-    m_data->m_evasObject = object;
-    if (!object) {
-        m_data->m_evas = 0;
-        return;
-    }
-
-    m_data->m_evas = evas_object_evas_get(object);
-
-    Widget::frameRectsChanged();
 }
-
-Evas_Object* Widget::evasObject() const
-{
-    return m_data->m_evasObject;
-}
-
-}

Modified: trunk/Source/WebCore/plugins/efl/PluginViewEfl.cpp (145709 => 145710)


--- trunk/Source/WebCore/plugins/efl/PluginViewEfl.cpp	2013-03-13 13:01:26 UTC (rev 145709)
+++ trunk/Source/WebCore/plugins/efl/PluginViewEfl.cpp	2013-03-13 13:30:05 UTC (rev 145710)
@@ -283,7 +283,7 @@
     }
 
     case NPNVnetscapeWindow: {
-        Evas* evas = m_parentFrame->view()->evas();
+        Evas* evas = evas_object_evas_get(m_parentFrame->view()->evasObject());
         if (!evas)
             return false;
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to