Title: [135663] trunk/Source/WebCore
Revision
135663
Author
[email protected]
Date
2012-11-24 18:52:20 -0800 (Sat, 24 Nov 2012)

Log Message

[EFL] Refactor RenderThemeEfl::paintThemePart()
https://bugs.webkit.org/show_bug.cgi?id=103192

Patch by Christophe Dumez <[email protected]> on 2012-11-24
Reviewed by Kenneth Rohde Christiansen.

Refactor RenderThemeEfl::paintThemePart() so that:
- Some C'ism is removed
- RTL related code is moved to applyEdjeRTLState()
- evas_render() is called instead of evas_render_updates()
  to avoid creating uselessly update rects.

No new tests, no behavior change for layout tests.

* platform/efl/RenderThemeEfl.cpp:
(WebCore::RenderThemeEfl::applyEdjeRTLState):
(WebCore):
(WebCore::RenderThemeEfl::paintThemePart):
* platform/efl/RenderThemeEfl.h:
(RenderThemeEfl):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (135662 => 135663)


--- trunk/Source/WebCore/ChangeLog	2012-11-25 02:38:09 UTC (rev 135662)
+++ trunk/Source/WebCore/ChangeLog	2012-11-25 02:52:20 UTC (rev 135663)
@@ -1,3 +1,25 @@
+2012-11-24  Christophe Dumez  <[email protected]>
+
+        [EFL] Refactor RenderThemeEfl::paintThemePart()
+        https://bugs.webkit.org/show_bug.cgi?id=103192
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        Refactor RenderThemeEfl::paintThemePart() so that:
+        - Some C'ism is removed
+        - RTL related code is moved to applyEdjeRTLState()
+        - evas_render() is called instead of evas_render_updates()
+          to avoid creating uselessly update rects.
+
+        No new tests, no behavior change for layout tests.
+
+        * platform/efl/RenderThemeEfl.cpp:
+        (WebCore::RenderThemeEfl::applyEdjeRTLState):
+        (WebCore):
+        (WebCore::RenderThemeEfl::paintThemePart):
+        * platform/efl/RenderThemeEfl.h:
+        (RenderThemeEfl):
+
 2012-11-24  Brent Fulgham  <[email protected]>
 
         [WinCairo] Avoid access violation when frame is NULL.

Modified: trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp (135662 => 135663)


--- trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp	2012-11-25 02:38:09 UTC (rev 135662)
+++ trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp	2012-11-25 02:52:20 UTC (rev 135663)
@@ -313,36 +313,17 @@
     }
 }
 
-bool RenderThemeEfl::paintThemePart(RenderObject* object, FormType type, const PaintInfo& info, const IntRect& rect)
+void RenderThemeEfl::applyEdjeRTLState(Evas_Object* edje, RenderObject* object, FormType type, const IntRect& rect)
 {
-    loadThemeIfNeeded();
-    _ASSERT_ON_RELEASE_RETURN_VAL(edje(), false, "Could not paint native HTML part due to missing theme.");
-
-    ThemePartCacheEntry* entry;
-    Eina_List* updates;
-    cairo_t* cairo;
-
-    entry = getThemePartFromCache(type, rect.size());
-    if (!entry)
-        return false;
-
-    applyEdjeStateFromForm(entry->edje(), controlStatesForRenderer(object));
-
-    cairo = info.context->platformContext()->cr();
-    ASSERT(cairo);
-
-    // Currently, only sliders needs this message; if other widget ever needs special
-    // treatment, move them to special functions.
     if (type == SliderVertical || type == SliderHorizontal) {
         if (!object->isSlider())
-            return true; // probably have -webkit-appearance: slider..
+            return; // probably have -webkit-appearance: slider..
 
         RenderSlider* renderSlider = toRenderSlider(object);
         HTMLInputElement* input = renderSlider->node()->toInputElement();
         double valueRange = input->maximum() - input->minimum();
 
-        OwnArrayPtr<char> buffer = adoptArrayPtr(new char[sizeof(Edje_Message_Float_Set) + sizeof(double)]);
-        Edje_Message_Float_Set* msg = new(buffer.get()) Edje_Message_Float_Set;
+        OwnPtr<Edje_Message_Float_Set> msg = adoptPtr(static_cast<Edje_Message_Float_Set*>(operator new (sizeof(Edje_Message_Float_Set) + sizeof(double))));
         msg->count = 2;
 
         // The first parameter of the message decides if the progress bar
@@ -355,7 +336,7 @@
             msg->val[0] = 0;
 
         msg->val[1] = (input->valueAsNumber() - input->minimum()) / valueRange;
-        edje_object_message_send(entry->edje(), EDJE_MESSAGE_FLOAT_SET, 0, msg);
+        edje_object_message_send(edje, EDJE_MESSAGE_FLOAT_SET, 0, msg.get());
 #if ENABLE(PROGRESS_ELEMENT)
     } else if (type == ProgressBar) {
         RenderProgress* renderProgress = toRenderProgress(object);
@@ -363,8 +344,7 @@
         int max = rect.width();
         double value = renderProgress->position();
 
-        OwnArrayPtr<char> buffer = adoptArrayPtr(new char[sizeof(Edje_Message_Float_Set) + sizeof(double)]);
-        Edje_Message_Float_Set* msg = new(buffer.get()) Edje_Message_Float_Set;
+        OwnPtr<Edje_Message_Float_Set> msg = adoptPtr(static_cast<Edje_Message_Float_Set*>(operator new (sizeof(Edje_Message_Float_Set) + sizeof(double))));
         msg->count = 2;
 
         if (object->style()->direction() == RTL)
@@ -372,15 +352,32 @@
         else
             msg->val[0] = 0;
         msg->val[1] = value;
-        edje_object_message_send(entry->edje(), EDJE_MESSAGE_FLOAT_SET, 0, msg);
+        edje_object_message_send(edje, EDJE_MESSAGE_FLOAT_SET, 0, msg.get());
+#else
+        UNUSED_PARAM(rect);
 #endif
     }
+}
 
+bool RenderThemeEfl::paintThemePart(RenderObject* object, FormType type, const PaintInfo& info, const IntRect& rect)
+{
+    loadThemeIfNeeded();
+    _ASSERT_ON_RELEASE_RETURN_VAL(edje(), false, "Could not paint native HTML part due to missing theme.");
+
+    ThemePartCacheEntry* entry = getThemePartFromCache(type, rect.size());
+    if (!entry)
+        return false;
+
+    applyEdjeStateFromForm(entry->edje(), controlStatesForRenderer(object));
+    applyEdjeRTLState(entry->edje(), object, type, rect);
+
     edje_object_calc_force(entry->edje());
     edje_object_message_signal_process(entry->edje());
-    updates = evas_render_updates(ecore_evas_get(entry->canvas()));
-    evas_render_updates_free(updates);
+    evas_render(ecore_evas_get(entry->canvas()));
 
+    cairo_t* cairo = info.context->platformContext()->cr();
+    ASSERT(cairo);
+
     cairo_save(cairo);
     cairo_set_source_surface(cairo, entry->surface(), rect.x(), rect.y());
     cairo_paint_with_alpha(cairo, 1.0);

Modified: trunk/Source/WebCore/platform/efl/RenderThemeEfl.h (135662 => 135663)


--- trunk/Source/WebCore/platform/efl/RenderThemeEfl.h	2012-11-25 02:38:09 UTC (rev 135662)
+++ trunk/Source/WebCore/platform/efl/RenderThemeEfl.h	2012-11-25 02:52:20 UTC (rev 135663)
@@ -230,6 +230,7 @@
     void applyPartDescriptionsFrom(const String& themePath);
 
     void applyEdjeStateFromForm(Evas_Object*, ControlStates);
+    void applyEdjeRTLState(Evas_Object*, RenderObject*, FormType, const IntRect&);
     bool paintThemePart(RenderObject*, FormType, const PaintInfo&, const IntRect&);
 
 #if ENABLE(VIDEO)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to