Ticket #3506: reuse_button_images.diff

File reuse_button_images.diff, 3.9 KB (added by stuartm, 12 years ago)

Updated patch - no functional changes

  • mythtv/libs/libmythui/myththemedmenu.cpp

     
    135135    bool buttoncenter;
    136136
    137137    QMap<QString, MythImage *> titleIcons;
     138    QMap<QString, MythImage *> m_buttonImages;
    138139    QString titleText;
    139140    QPoint titlePos;
    140141
     
    952953    bool hasicon = false;
    953954
    954955    QString name = "";
    955     QImage *image = NULL;
    956     QImage *activeimage = NULL;
    957     QImage *watermark = NULL;
     956    QImage *tmpimg = NULL;
     957    MythImage *image = NULL;
     958    MythImage *activeimage = NULL;
     959    MythImage *watermark = NULL;
    958960    QPoint offset;
    959961
    960962    name = element.attribute("name", "");
     
    963965
    964966    for (QDomNode child = element.firstChild(); !child.isNull();
    965967         child = child.nextSibling())
    966     {   
     968    {
    967969        QDomElement info = child.toElement();
    968970        if (!info.isNull())
    969971        {
    970972            if (info.tagName() == "image")
    971973            {
    972                 QString imagepath = dir + getFirstText(info);
    973                 image = gContext->LoadScaleImage(imagepath);
     974                QString imagepath = dir + getFirstText(info);
     975
     976                if (m_buttonImages[imagepath])
     977                {
     978                    image = m_buttonImages[imagepath];
     979                    image->UpRef();
     980                }
     981                else
     982                {
     983                    tmpimg = gContext->LoadScaleImage(imagepath);
     984                    image = MythImage::FromQImage(&tmpimg);
     985                    m_buttonImages.insert(imagepath, image);
     986                }
     987
    974988                if (image)
    975989                    hasicon = true;
    976990            }
    977991            else if (info.tagName() == "activeimage")
    978992            {
    979993                QString imagepath = dir + getFirstText(info);
    980                 activeimage = gContext->LoadScaleImage(imagepath);
     994
     995                if (m_buttonImages[imagepath])
     996                {
     997                    activeimage = m_buttonImages[imagepath];
     998                    activeimage->UpRef();
     999                }
     1000                else
     1001                {
     1002                    tmpimg = gContext->LoadScaleImage(imagepath);
     1003                    activeimage = MythImage::FromQImage(&tmpimg);
     1004                    m_buttonImages.insert(imagepath, activeimage);
     1005                }
    9811006            }
    9821007            else if (info.tagName() == "offset")
    9831008            {
     
    9871012            else if (info.tagName() == "watermarkimage")
    9881013            {
    9891014                QString imagepath = dir + getFirstText(info);
    990                 watermark = gContext->LoadScaleImage(imagepath);
    991             }   
     1015
     1016                if (m_buttonImages[imagepath])
     1017                {
     1018                    watermark = m_buttonImages[imagepath];
     1019                    watermark->UpRef();
     1020                }
     1021                else
     1022                {
     1023                    tmpimg = gContext->LoadScaleImage(imagepath);
     1024                    watermark = MythImage::FromQImage(&tmpimg);
     1025                    m_buttonImages.insert(imagepath, watermark);
     1026                }
     1027            }
    9921028            else
    9931029            {
    9941030                VERBOSE(VB_GENERAL, QString("MythThemedMenuPrivate: Unknown tag %1 "
     
    10211057    ButtonIcon newbutton;
    10221058
    10231059    newbutton.name = name;
    1024     newbutton.icon = MythImage::FromQImage(&image);
     1060    newbutton.icon = image;
    10251061    newbutton.offset = offset;
    1026     newbutton.activeicon = MythImage::FromQImage(&activeimage);
     1062    newbutton.activeicon = activeimage;
    10271063
    10281064    if (watermark)
    10291065    {
     
    10341070            watermarkRect.setHeight(watermark->height());
    10351071    }
    10361072
    1037     newbutton.watermark = MythImage::FromQImage(&watermark);
     1073    newbutton.watermark = watermark;
    10381074
    10391075    allButtonIcons[name] = newbutton;
     1076
     1077    if (tmpimg)
     1078        delete tmpimg;
    10401079}
    10411080
    10421081void MythThemedMenuState::setDefaults(void)