Changeset 128311 in webkit


Ignore:
Timestamp:
Sep 12, 2012 8:08:07 AM (12 years ago)
Author:
kenneth@webkit.org
Message:

[EFL] Avoid manual memory management in RenderThemeEfl
https://bugs.webkit.org/show_bug.cgi?id=96501

Reviewed by Simon Hausmann.

Use OwnPtr as it works for Evas_Object and Evas_Ecore objects.

  • platform/efl/RenderThemeEfl.cpp:

(WebCore::RenderThemeEfl::ThemePartCacheEntry::ThemePartCacheEntry):
(WebCore::RenderThemeEfl::ThemePartCacheEntry::~ThemePartCacheEntry):
(WebCore::RenderThemeEfl::ThemePartCacheEntry::create):
(WebCore::RenderThemeEfl::ThemePartCacheEntry::reuse):
(WebCore::RenderThemeEfl::paintThemePart):
(WebCore::RenderThemeEfl::setColorFromThemeClass):
(WebCore::RenderThemeEfl::themePath):
(WebCore::RenderThemeEfl::loadTheme):
(WebCore::RenderThemeEfl::applyPartDescriptionsFrom):
(WebCore::RenderThemeEfl::RenderThemeEfl):
(WebCore::RenderThemeEfl::~RenderThemeEfl):
(WebCore::RenderThemeEfl::emitMediaButtonSignal):

  • platform/efl/RenderThemeEfl.h:

(WebCore::RenderThemeEfl::canvas):
(WebCore::RenderThemeEfl::edje):
(RenderThemeEfl):
(WebCore::RenderThemeEfl::ThemePartCacheEntry::canvas):
(WebCore::RenderThemeEfl::ThemePartCacheEntry::edje):
(ThemePartCacheEntry):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r128309 r128311  
     12012-09-12  Kenneth Rohde Christiansen  <kenneth@webkit.org>
     2
     3        [EFL] Avoid manual memory management in RenderThemeEfl
     4        https://bugs.webkit.org/show_bug.cgi?id=96501
     5
     6        Reviewed by Simon Hausmann.
     7
     8        Use OwnPtr as it works for Evas_Object and Evas_Ecore objects.
     9
     10        * platform/efl/RenderThemeEfl.cpp:
     11        (WebCore::RenderThemeEfl::ThemePartCacheEntry::ThemePartCacheEntry):
     12        (WebCore::RenderThemeEfl::ThemePartCacheEntry::~ThemePartCacheEntry):
     13        (WebCore::RenderThemeEfl::ThemePartCacheEntry::create):
     14        (WebCore::RenderThemeEfl::ThemePartCacheEntry::reuse):
     15        (WebCore::RenderThemeEfl::paintThemePart):
     16        (WebCore::RenderThemeEfl::setColorFromThemeClass):
     17        (WebCore::RenderThemeEfl::themePath):
     18        (WebCore::RenderThemeEfl::loadTheme):
     19        (WebCore::RenderThemeEfl::applyPartDescriptionsFrom):
     20        (WebCore::RenderThemeEfl::RenderThemeEfl):
     21        (WebCore::RenderThemeEfl::~RenderThemeEfl):
     22        (WebCore::RenderThemeEfl::emitMediaButtonSignal):
     23        * platform/efl/RenderThemeEfl.h:
     24        (WebCore::RenderThemeEfl::canvas):
     25        (WebCore::RenderThemeEfl::edje):
     26        (RenderThemeEfl):
     27        (WebCore::RenderThemeEfl::ThemePartCacheEntry::canvas):
     28        (WebCore::RenderThemeEfl::ThemePartCacheEntry::edje):
     29        (ThemePartCacheEntry):
     30
    1312012-09-12  Florin Malita  <fmalita@chromium.org>
    232
  • trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp

    r128275 r128311  
    164164
    165165RenderThemeEfl::ThemePartCacheEntry::ThemePartCacheEntry()
    166     : ee(0), o(0), surface(0)
     166    : surface(0)
    167167{
    168168}
     
    172172    if (surface)
    173173        cairo_surface_destroy(surface);
    174     if (o)
    175         evas_object_del(o);
    176     if (ee)
    177         ecore_evas_free(ee);
    178174}
    179175
     
    220216    OwnPtr<ThemePartCacheEntry*> entry = adoptPtr(new ThemePartCacheEntry);
    221217
    222     entry->ee = ecore_evas_buffer_new(size.width(), size.height());
    223     if (!entry->ee) {
     218    entry->m_canvas = adoptPtr(ecore_evas_buffer_new(size.width(), size.height()));
     219    if (!entry->canvas()) {
    224220        EINA_LOG_ERR("ecore_evas_buffer_new(%d, %d) failed.", size.width(), size.height());
    225221        return 0;
     
    227223
    228224    // By default EFL creates buffers without alpha.
    229     ecore_evas_alpha_set(entry->ee, EINA_TRUE);
    230 
    231     entry->o = edje_object_add(ecore_evas_get(entry->ee));
    232     ASSERT(entry->o);
    233 
    234     if (!setSourceGroupForEdjeObject(entry->o, themePath, toEdjeGroup(type)))
     225    ecore_evas_alpha_set(entry->canvas(), EINA_TRUE);
     226
     227    entry->m_edje = adoptPtr(edje_object_add(ecore_evas_get(entry->canvas())));
     228    ASSERT(entry->edje());
     229
     230    if (!setSourceGroupForEdjeObject(entry->edje(), themePath, toEdjeGroup(type)))
    235231        return 0;
    236232
    237     entry->surface = createCairoSurfaceFor(entry->ee);
     233    entry->surface = createCairoSurfaceFor(entry->canvas());
    238234    if (!entry->surface)
    239235        return 0;
    240236
    241     evas_object_resize(entry->o, size.width(), size.height());
    242     evas_object_show(entry->o);
     237    evas_object_resize(entry->edje(), size.width(), size.height());
     238    evas_object_show(entry->edje());
    243239
    244240    entry->type = type;
     
    256252
    257253        size = newSize;
    258         ecore_evas_resize(ee, newSize.width(), newSize.height());
    259         evas_object_resize(o, newSize.width(), newSize.height());
    260 
    261         surface = createCairoSurfaceFor(ee);
     254        ecore_evas_resize(canvas(), newSize.width(), newSize.height());
     255        evas_object_resize(edje(), newSize.width(), newSize.height());
     256
     257        surface = createCairoSurfaceFor(canvas());
    262258        if (!surface) {
    263259            type = FormTypeLast; // Invalidate;
     
    266262    }
    267263
    268     if (!setSourceGroupForEdjeObject(o, themePath, toEdjeGroup(newType))) {
     264    if (!setSourceGroupForEdjeObject(edje(), themePath, toEdjeGroup(newType))) {
    269265        type = FormTypeLast; // Invalidate.
    270266        return;
     
    352348{
    353349    loadThemeIfNeeded();
    354     _ASSERT_ON_RELEASE_RETURN_VAL(m_edje, false, "Could not paint native HTML part due to missing theme.");
     350    _ASSERT_ON_RELEASE_RETURN_VAL(edje(), false, "Could not paint native HTML part due to missing theme.");
    355351
    356352    ThemePartCacheEntry* entry;
     
    362358        return false;
    363359
    364     applyEdjeStateFromForm(entry->o, controlStatesForRenderer(object));
     360    applyEdjeStateFromForm(entry->edje(), controlStatesForRenderer(object));
    365361
    366362    cairo = info.context->platformContext()->cr();
     
    391387
    392388        msg->val[1] = (input->valueAsNumber() - input->minimum()) / valueRange;
    393         edje_object_message_send(entry->o, EDJE_MESSAGE_FLOAT_SET, 0, msg);
     389        edje_object_message_send(entry->edje(), EDJE_MESSAGE_FLOAT_SET, 0, msg);
    394390#if ENABLE(PROGRESS_ELEMENT)
    395391    } else if (type == ProgressBar) {
     
    408404            msg->val[0] = 0;
    409405        msg->val[1] = value;
    410         edje_object_message_send(entry->o, EDJE_MESSAGE_FLOAT_SET, 0, msg);
    411 #endif
    412     }
    413 
    414     edje_object_calc_force(entry->o);
    415     edje_object_message_signal_process(entry->o);
    416     updates = evas_render_updates(ecore_evas_get(entry->ee));
     406        edje_object_message_send(entry->edje(), EDJE_MESSAGE_FLOAT_SET, 0, msg);
     407#endif
     408    }
     409
     410    edje_object_calc_force(entry->edje());
     411    edje_object_message_signal_process(entry->edje());
     412    updates = evas_render_updates(ecore_evas_get(entry->canvas()));
    417413    evas_render_updates_free(updates);
    418414
     
    465461void RenderThemeEfl::setColorFromThemeClass(const char* colorClass)
    466462{
    467     ASSERT(m_edje);
     463    ASSERT(edje());
    468464
    469465    if (!strcmp("webkit/selection/active", colorClass))
    470         fillColorsFromEdjeClass(m_edje, colorClass, &m_activeSelectionForegroundColor, &m_activeSelectionBackgroundColor);
     466        fillColorsFromEdjeClass(edje(), colorClass, &m_activeSelectionForegroundColor, &m_activeSelectionBackgroundColor);
    471467    else if (!strcmp("webkit/selection/inactive", colorClass))
    472         fillColorsFromEdjeClass(m_edje, colorClass, &m_inactiveSelectionForegroundColor, &m_inactiveSelectionBackgroundColor);
     468        fillColorsFromEdjeClass(edje(), colorClass, &m_inactiveSelectionForegroundColor, &m_inactiveSelectionBackgroundColor);
    473469    else if (!strcmp("webkit/focus_ring", colorClass)) {
    474         fillColorsFromEdjeClass(m_edje, colorClass, &m_focusRingColor);
     470        fillColorsFromEdjeClass(edje(), colorClass, &m_focusRingColor);
    475471        // platformFocusRingColor() is only used for the default theme (without page)
    476472        // The following is ugly, but no other way to do it unless we change it to use page themes as much as possible.
     
    497493{
    498494#ifndef NDEBUG
    499     if (m_edje) {
     495    if (edje()) {
    500496        const char* path;
    501         edje_object_file_get(m_edje, &path, 0);
     497        edje_object_file_get(edje(), &path, 0);
    502498        ASSERT(m_themePath == path);
    503499    }
     
    510506    ASSERT(!m_themePath.isEmpty());
    511507
    512     if (!m_canvas) {
    513         m_canvas = ecore_evas_buffer_new(1, 1);
    514         _ASSERT_ON_RELEASE_RETURN_VAL(m_canvas, false,
     508    if (!canvas()) {
     509        m_canvas = adoptPtr(ecore_evas_buffer_new(1, 1));
     510        _ASSERT_ON_RELEASE_RETURN_VAL(canvas(), false,
    515511                "Could not create canvas required by theme, things will not work properly.");
    516512    }
    517513
    518     Evas_Object* o = edje_object_add(ecore_evas_get(m_canvas));
     514    OwnPtr<Evas_Object> o = adoptPtr(edje_object_add(ecore_evas_get(canvas())));
    519515    _ASSERT_ON_RELEASE_RETURN_VAL(o, false, "Could not create new base Edje object.");
    520516
    521     if (!setSourceGroupForEdjeObject(o, m_themePath, "webkit/base")) {
    522         evas_object_del(o);
     517    if (!setSourceGroupForEdjeObject(o.get(), m_themePath, "webkit/base"))
    523518        return false; // Keep current theme.
    524     }
    525519
    526520    // Get rid of existing theme.
    527     if (m_edje) {
     521    if (edje())
    528522        flushThemePartCache();
    529         evas_object_del(m_edje);
    530     }
    531523
    532524    // Set new loaded theme, and apply it.
    533     m_edje = o;
    534 
    535     edje_object_signal_callback_add(m_edje, "color_class,set", "webkit/selection/active", applyColorCallback, this);
    536     edje_object_signal_callback_add(m_edje, "color_class,set", "webkit/selection/inactive", applyColorCallback, this);
    537     edje_object_signal_callback_add(m_edje, "color_class,set", "webkit/focus_ring", applyColorCallback, this);
     525    m_edje.swap(o);
     526
     527    edje_object_signal_callback_add(edje(), "color_class,set", "webkit/selection/active", applyColorCallback, this);
     528    edje_object_signal_callback_add(edje(), "color_class,set", "webkit/selection/inactive", applyColorCallback, this);
     529    edje_object_signal_callback_add(edje(), "color_class,set", "webkit/focus_ring", applyColorCallback, this);
    538530
    539531    applyPartDescriptionsFrom(m_themePath);
     
    612604void RenderThemeEfl::applyPartDescriptionsFrom(const String& themePath)
    613605{
    614     Evas_Object* temp = edje_object_add(ecore_evas_get(m_canvas));
     606    OwnPtr<Evas_Object> temp = adoptPtr(edje_object_add(ecore_evas_get(canvas())));
    615607    _ASSERT_ON_RELEASE_RETURN(temp, "Could not create Edje object.");
    616608
     
    618610        FormType type = static_cast<FormType>(i);
    619611        m_partDescs[i].type = type;
    620         if (!setSourceGroupForEdjeObject(temp, themePath, toEdjeGroup(type)))
     612        if (!setSourceGroupForEdjeObject(temp.get(), themePath, toEdjeGroup(type)))
    621613            applyPartDescriptionFallback(m_partDescs + i);
    622614        else
    623             applyPartDescription(temp, m_partDescs + i);
    624     }
    625 
    626     evas_object_del(temp);
     615            applyPartDescription(temp.get(), m_partDescs + i);
     616    }
    627617}
    628618
     
    640630    , m_mediaSliderColor(Color::white)
    641631#endif
    642     , m_canvas(0)
    643     , m_edje(0)
    644632{
    645633}
     
    648636{
    649637    flushThemePartCache();
    650 
    651     if (m_canvas) {
    652         if (m_edje)
    653             evas_object_del(m_edje);
    654         ecore_evas_free(m_canvas);
    655     }
    656638}
    657639
     
    10681050{
    10691051    loadThemeIfNeeded();
    1070     _ASSERT_ON_RELEASE_RETURN_VAL(m_edje, false, "Could not paint native HTML part due to missing theme.");
     1052    _ASSERT_ON_RELEASE_RETURN_VAL(edje(), false, "Could not paint native HTML part due to missing theme.");
    10711053
    10721054    ThemePartCacheEntry* entry = getThemePartFromCache(formType, rect.size());
     
    10741056
    10751057    if (mediaElementType == MediaPlayButton)
    1076         edje_object_signal_emit(entry->o, "play", "");
     1058        edje_object_signal_emit(entry->edje(), "play", "");
    10771059    else if (mediaElementType == MediaPauseButton)
    1078         edje_object_signal_emit(entry->o, "pause", "");
     1060        edje_object_signal_emit(entry->edje(), "pause", "");
    10791061    else if (mediaElementType == MediaMuteButton)
    1080         edje_object_signal_emit(entry->o, "mute", "");
     1062        edje_object_signal_emit(entry->edje(), "mute", "");
    10811063    else if (mediaElementType == MediaUnMuteButton)
    1082         edje_object_signal_emit(entry->o, "sound", "");
     1064        edje_object_signal_emit(entry->edje(), "sound", "");
    10831065    else if (mediaElementType == MediaSeekForwardButton)
    1084         edje_object_signal_emit(entry->o, "seekforward", "");
     1066        edje_object_signal_emit(entry->edje(), "seekforward", "");
    10851067    else if (mediaElementType == MediaSeekBackButton)
    1086         edje_object_signal_emit(entry->o, "seekbackward", "");
     1068        edje_object_signal_emit(entry->edje(), "seekbackward", "");
    10871069    else if (mediaElementType == MediaEnterFullscreenButton)
    1088         edje_object_signal_emit(entry->o, "fullscreen", "");
     1070        edje_object_signal_emit(entry->edje(), "fullscreen", "");
    10891071#if ENABLE(VIDEO_TRACK)
    10901072    else if (mediaElementType == MediaShowClosedCaptionsButton)
    1091         edje_object_signal_emit(entry->o, "show_captions", "");
     1073        edje_object_signal_emit(entry->edje(), "show_captions", "");
    10921074    else if (mediaElementType == MediaHideClosedCaptionsButton)
    1093         edje_object_signal_emit(entry->o, "hide_captions", "");
     1075        edje_object_signal_emit(entry->edje(), "hide_captions", "");
    10941076#endif
    10951077    else
  • trunk/Source/WebCore/platform/efl/RenderThemeEfl.h

    r128274 r128311  
    223223    }
    224224
     225    ALWAYS_INLINE Ecore_Evas* canvas() { return m_canvas.get(); }
     226    ALWAYS_INLINE Evas_Object* edje() { return m_edje.get(); }
     227
    225228    void applyPartDescriptionsFrom(const String& themePath);
    226229
     
    246249
    247250    String m_themePath;
    248     Ecore_Evas* m_canvas;
    249     Evas_Object* m_edje;
     251    // Order so that the canvas gets destroyed at last.
     252    OwnPtr<Ecore_Evas> m_canvas;
     253    OwnPtr<Evas_Object> m_edje;
    250254
    251255    struct ThemePartDesc {
     
    264268        void reuse(const String& themePath, FormType, const IntSize& = IntSize());
    265269
     270        ALWAYS_INLINE Ecore_Evas* canvas() { return m_canvas.get(); }
     271        ALWAYS_INLINE Evas_Object* edje() { return m_edje.get(); }
     272
    266273        FormType type;
    267274        IntSize size;
    268         Ecore_Evas* ee;
    269         Evas_Object* o;
    270275        cairo_surface_t* surface;
     276
     277    private:
     278        // Order so that the canvas gets destroyed at last.
     279        OwnPtr<Ecore_Evas> m_canvas;
     280        OwnPtr<Evas_Object> m_edje;
    271281    };
    272282
Note: See TracChangeset for help on using the changeset viewer.