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;