Title: [127573] trunk/Source/WebCore
Revision
127573
Author
kenn...@webkit.org
Date
2012-09-05 04:02:11 -0700 (Wed, 05 Sep 2012)

Log Message

[EFL] Fuzzy load the Edje theme for HTML forms
https://bugs.webkit.org/show_bug.cgi?id=95832

Reviewed by Gyuyoung Kim.

Change the theme so that it is first loaded when actually used.
This also fixed the case that it was impossible to change theme
a second time.

Tested by current tests. API unit test coming in separate patch.

* platform/efl/RenderThemeEfl.cpp:
(WebCore::RenderThemeEfl::themePartCacheEntryReset):
(WebCore::RenderThemeEfl::cacheThemePartNew):
(WebCore::RenderThemeEfl::paintThemePart):
(WebCore::RenderThemeEfl::setThemePath):
(WebCore::RenderThemeEfl::edje):
(WebCore::RenderThemeEfl::applyPartDescriptions):
* platform/efl/RenderThemeEfl.h:
(RenderThemeEfl):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (127572 => 127573)


--- trunk/Source/WebCore/ChangeLog	2012-09-05 10:56:12 UTC (rev 127572)
+++ trunk/Source/WebCore/ChangeLog	2012-09-05 11:02:11 UTC (rev 127573)
@@ -1,3 +1,26 @@
+2012-09-05  Kenneth Rohde Christiansen  <kenn...@webkit.org>
+
+        [EFL] Fuzzy load the Edje theme for HTML forms
+        https://bugs.webkit.org/show_bug.cgi?id=95832
+
+        Reviewed by Gyuyoung Kim.
+
+        Change the theme so that it is first loaded when actually used.
+        This also fixed the case that it was impossible to change theme
+        a second time.
+
+        Tested by current tests. API unit test coming in separate patch.
+
+        * platform/efl/RenderThemeEfl.cpp:
+        (WebCore::RenderThemeEfl::themePartCacheEntryReset):
+        (WebCore::RenderThemeEfl::cacheThemePartNew):
+        (WebCore::RenderThemeEfl::paintThemePart):
+        (WebCore::RenderThemeEfl::setThemePath):
+        (WebCore::RenderThemeEfl::edje):
+        (WebCore::RenderThemeEfl::applyPartDescriptions):
+        * platform/efl/RenderThemeEfl.h:
+        (RenderThemeEfl):
+
 2012-09-05  Chris Guan  <chris.g...@torchmobile.com.cn>
 
         [Blackberry] Add document url and securityOrigin to platform request.

Modified: trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp (127572 => 127573)


--- trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp	2012-09-05 10:56:12 UTC (rev 127572)
+++ trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp	2012-09-05 11:02:11 UTC (rev 127573)
@@ -103,9 +103,6 @@
 {
     const char *file, *group;
 
-    ASSERT(entry);
-    ASSERT(m_edje);
-
     edje_object_file_get(m_edje, &file, 0);
     group = edjeGroupFromFormType(type);
     ASSERT(file);
@@ -159,7 +156,7 @@
 struct RenderThemeEfl::ThemePartCacheEntry* RenderThemeEfl::cacheThemePartNew(FormType type, const IntSize& size)
 {
     if (isFormElementTooLargeToDisplay(size)) {
-        EINA_LOG_ERR("cannot render an element of size %dx%d", size.width(), size.height());
+        EINA_LOG_ERR("Cannot render an element of size %dx%d.", size.width(), size.height());
         return 0;
     }
 
@@ -311,13 +308,15 @@
 
 bool RenderThemeEfl::paintThemePart(RenderObject* object, FormType type, const PaintInfo& info, const IntRect& rect)
 {
+    if (!edje()) {
+        EINA_LOG_ERR("Could not paint native HTML part due to missing theme.");
+        return false;
+    }
+
     ThemePartCacheEntry* entry;
     Eina_List* updates;
     cairo_t* cairo;
 
-    ASSERT(m_canvas);
-    ASSERT(m_edje);
-
     entry = cacheThemePartGet(type, rect.size());
     if (!entry)
         return false;
@@ -438,44 +437,59 @@
         return;
 
     m_themePath = path;
-    themeChanged();
-}
 
-void RenderThemeEfl::createCanvas()
-{
-    ASSERT(!m_canvas);
-    m_canvas = ecore_evas_buffer_new(1, 1);
-    ASSERT(m_canvas);
+    if (m_themePath.isEmpty()) {
+        EINA_LOG_ERR("No theme defined, unable to set theme for HTML Forms.");
+        return;
+    }
+
+    if (!m_canvas) {
+        m_canvas = ecore_evas_buffer_new(1, 1);
+        if (!m_canvas)
+            EINA_LOG_ERR("Could not create canvas.");
+    }
+
+    if (m_edje) {
+        // Get rid of current theme.
+        cacheThemePartFlush();
+        evas_object_del(m_edje);
+        m_edje = 0;
+    }
 }
 
-void RenderThemeEfl::createEdje()
+Evas_Object* RenderThemeEfl::edje()
 {
-    ASSERT(!m_edje);
-    if (m_themePath.isEmpty())
-        EINA_LOG_ERR("No theme defined, unable to set RenderThemeEfl.");
-    else {
+    if (!m_edje) {
         m_edje = edje_object_add(ecore_evas_get(m_canvas));
-        if (!m_edje)
-            EINA_LOG_ERR("Could not create base edje object.");
-        else if (!edje_object_file_set(m_edje, m_themePath.utf8().data(), "webkit/base")) {
+        if (!m_edje) {
+            EINA_LOG_CRIT("Could not create base Edje object.");
+            return 0;
+        }
+
+        if (!edje_object_file_set(m_edje, m_themePath.utf8().data(), "webkit/base")) {
             Edje_Load_Error err = edje_object_load_error_get(m_edje);
             const char* errmsg = edje_load_error_str(err);
-            EINA_LOG_ERR("Could not set file: %s", errmsg);
+            EINA_LOG_CRIT("Could not set file '%s': %s", m_themePath.utf8().data(),  errmsg);
+
             evas_object_del(m_edje);
             m_edje = 0;
-        } else {
+            return 0;
+        }
+
 #define CONNECT(cc, func)                                               \
             edje_object_signal_callback_add(m_edje, "color_class,set",  \
                                             "webkit/"cc, func, this)
 
-            CONNECT("selection/active",
-                    renderThemeEflColorClassSelectionActive);
-            CONNECT("selection/inactive",
-                    renderThemeEflColorClassSelectionInactive);
-            CONNECT("focus_ring", renderThemeEflColorClassFocusRing);
+        CONNECT("selection/active", renderThemeEflColorClassSelectionActive);
+        CONNECT("selection/inactive", renderThemeEflColorClassSelectionInactive);
+        CONNECT("focus_ring", renderThemeEflColorClassFocusRing);
 #undef CONNECT
-        }
+
+        applyEdjeColors();
+        applyPartDescriptions();
     }
+
+    return m_edje;
 }
 
 void RenderThemeEfl::applyEdjeColors()
@@ -611,11 +625,14 @@
     unsigned int i;
     const char* file;
 
-    ASSERT(m_canvas);
     ASSERT(m_edje);
 
     edje_object_file_get(m_edje, &file, 0);
     ASSERT(file);
+    if (!file) {
+        EINA_LOG_ERR("Could not retrieve Edje theme file.");
+        return;
+    }
 
     object = edje_object_add(ecore_evas_get(m_canvas));
     if (!object) {
@@ -640,26 +657,6 @@
     evas_object_del(object);
 }
 
-void RenderThemeEfl::themeChanged()
-{
-    cacheThemePartFlush();
-
-    if (!m_canvas) {
-        createCanvas();
-        if (!m_canvas)
-            return;
-    }
-
-    if (!m_edje) {
-        createEdje();
-        if (!m_edje)
-            return;
-    }
-
-    applyEdjeColors();
-    applyPartDescriptions();
-}
-
 RenderThemeEfl::RenderThemeEfl(Page* page)
     : RenderTheme()
     , m_page(page)

Modified: trunk/Source/WebCore/platform/efl/RenderThemeEfl.h (127572 => 127573)


--- trunk/Source/WebCore/platform/efl/RenderThemeEfl.h	2012-09-05 10:56:12 UTC (rev 127572)
+++ trunk/Source/WebCore/platform/efl/RenderThemeEfl.h	2012-09-05 11:02:11 UTC (rev 127573)
@@ -102,8 +102,6 @@
     virtual Color platformInactiveSelectionForegroundColor() const { return m_inactiveSelectionForegroundColor; }
     virtual Color platformFocusRingColor() const { return m_focusRingColor; }
 
-    virtual void themeChanged();
-
     // Set platform colors and notify they changed
     void setActiveSelectionColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
     void setInactiveSelectionColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
@@ -212,10 +210,11 @@
     static float defaultFontSize;
 
 private:
-    void createCanvas();
-    void createEdje();
+    Evas_Object* edje();
+
     void applyEdjeColors();
     void applyPartDescriptions();
+
     const char* edjeGroupFromFormType(FormType) const;
     void applyEdjeStateFromForm(Evas_Object*, ControlStates);
     bool paintThemePart(RenderObject*, FormType, const PaintInfo&, const IntRect&);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to