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)