Ticket #6511: mythui.intensity.patch

File mythui.intensity.patch, 6.4 KB (added by robert.mcnamara@…, 11 years ago)

MythUI intensity patch

  • mythtv/libs/libmythui/mythimage.cpp

     
    66#include <QMatrix>
    77
    88#include "mythimage.h"
     9#include "mythverbose.h"
    910#include "mythmainwindow.h"
    1011#include "mythuihelper.h"
    1112#include "remotefile.h"
     
    2829    m_gradDirection = FillTopToBottom;
    2930
    3031    m_isReflected = false;
     32    m_setIntensity = false;
    3133
    3234    m_imageId = 0;
    3335
     
    221223    }
    222224}
    223225
     226void MythImage::Intensity(float percent)
     227{
     228    if (m_setIntensity)
     229        return;
     230
     231    VERBOSE(VB_GENERAL, QString("MythImage::Float Passed was %1").arg(QString::number(percent)));
     232
     233    int segColors = depth() > 8 ? 256 : numColors();
     234    int pixels = depth() > 8 ? width()*height() :
     235        numColors();
     236    unsigned int *data = depth() > 8 ? (unsigned int *)bits() :
     237        (unsigned int *)colorTable().data();
     238
     239    bool brighten = (percent >= 0);
     240    if(percent < 0)
     241        percent = -percent;
     242
     243    unsigned char *segTbl = new unsigned char[segColors];
     244    int tmp;
     245    if(brighten)
     246    {
     247        for(int i=0; i < segColors; ++i)
     248        {
     249            tmp = (int)(i*percent);
     250            if(tmp > 255)
     251                tmp = 255;
     252            segTbl[i] = tmp;
     253        }
     254    }
     255    else
     256    {
     257        for(int i=0; i < segColors; ++i)
     258        {
     259            tmp = (int)(i*percent);
     260            if(tmp < 0)
     261                tmp = 0;
     262             segTbl[i] = tmp;
     263        }
     264    }
     265
     266    if(brighten)
     267    {
     268        for(int i=0; i < pixels; ++i)
     269        {
     270            int r = qRed(data[i]);
     271            int g = qGreen(data[i]);
     272            int b = qBlue(data[i]);
     273            int a = qAlpha(data[i]);
     274            r = r + segTbl[r] > 255 ? 255 : r + segTbl[r];
     275            g = g + segTbl[g] > 255 ? 255 : g + segTbl[g];
     276            b = b + segTbl[b] > 255 ? 255 : b + segTbl[b];
     277            data[i] = qRgba(r, g, b, a);
     278        }
     279    }
     280    else
     281    {
     282        for(int i=0; i < pixels; ++i)
     283        {
     284            int r = qRed(data[i]);
     285            int g = qGreen(data[i]);
     286            int b = qBlue(data[i]);
     287            int a = qAlpha(data[i]);
     288            r = r - segTbl[r] < 0 ? 0 : r - segTbl[r];
     289            g = g - segTbl[g] < 0 ? 0 : g - segTbl[g];
     290            b = b - segTbl[b] < 0 ? 0 : b - segTbl[b];
     291            data[i] = qRgba(r, g, b, a);
     292        }
     293    }
     294    delete [] segTbl;
     295
     296    m_setIntensity = true;
     297}
     298
     299
    224300MythImage *MythImage::FromQImage(QImage **img)
    225301{
    226302    if (!img || !*img)
  • mythtv/libs/libmythui/mythimage.h

     
    2828
    2929    bool IsGradient() const { return m_isGradient; }
    3030    bool IsReflected() const { return m_isReflected; }
     31    bool HasIntensity() const { return m_setIntensity; }
    3132
    3233    void Assign(const QImage &img);
    3334    void Assign(const QPixmap &pix);
     
    4142    void Reflect(ReflectAxis axis, int shear, int scale, int length,
    4243                 int spacing = 0);
    4344    void ToGreyscale();
     45    void Intensity(float percent);
    4446
    4547    /**
    4648     * @brief Create a gradient image.
     
    6062    QString GetFileName(void) const { return m_FileName; }
    6163
    6264    void setIsReflected(bool reflected) { m_isReflected = reflected; }
     65    void setHasIntensity(bool intensity) { m_setIntensity = intensity; }
    6366
    6467    void SetIsInCache(bool bCached);
    6568
     
    8386    FillDirection m_gradDirection;
    8487
    8588    bool m_isReflected;
     89    bool m_setIntensity;
    8690
    8791    unsigned int m_imageId;
    8892
  • mythtv/libs/libmythui/mythuiimage.cpp

     
    113113
    114114    m_isGreyscale = false;
    115115
     116    m_hasIntensity = false;
     117    m_intensity = 0;
     118
    116119    m_preserveAspect = false;
    117120}
    118121
     
    187190    if (m_isGreyscale && !img->isGrayscale())
    188191        img->ToGreyscale();
    189192
     193    if (m_hasIntensity && !img->HasIntensity())
     194        img->Intensity(m_intensity);
     195
    190196    if (m_ForceSize.isNull())
    191197        SetSize(img->size());
    192198
     
    234240        if (m_isGreyscale && !im->isGrayscale())
    235241            im->ToGreyscale();
    236242
     243        if (m_hasIntensity && !im->HasIntensity())
     244            im->Intensity(m_intensity);
     245
    237246        m_Images.push_back(im);
    238247
    239248        aSize = aSize.expandedTo(im->size());
     
    326335    if (m_isGreyscale)
    327336        s_Attrib += "greyscale";
    328337
     338    if (m_hasIntensity)
     339        s_Attrib += "intensity";
     340
    329341    imagelabel  = QString("%1-%2-%3x%4.png")
    330342                          .arg(filename)
    331343                          .arg(s_Attrib)
     
    414426                VERBOSE(VB_FILE, QString("MythUIImage::Load found in cache :%1:").arg(imagelabel));
    415427                if (m_isReflected)
    416428                    image->setIsReflected(true);
     429                if (m_hasIntensity)
     430                    image->setHasIntensity(true);
    417431
    418432                bFoundInCache = true;
    419433            }
     
    467481            if (m_isGreyscale)
    468482                image->ToGreyscale();
    469483
     484            if (m_hasIntensity)
     485                image->Intensity(m_intensity);
     486
    470487            // Save scaled copy to cache
    471488            if (bNeedLoad)
    472489                GetMythUI()->CacheImage(imagelabel, image);
     
    675692    {
    676693        m_isGreyscale = parseBool(element);
    677694    }
     695    else if (element.tagName() == "intensity")
     696    {
     697        m_hasIntensity = true;
     698        m_intensity = (getFirstText(element).toFloat() / 100);
     699    }
    678700    else
    679701        return MythUIType::ParseElement(element);
    680702
     
    733755
    734756    m_isGreyscale = im->m_isGreyscale;
    735757
     758    m_hasIntensity = im->m_hasIntensity;
     759    m_intensity = im->m_intensity;
     760
    736761    //SetImages(im->m_Images);
    737762
    738763    MythUIType::CopyFrom(base);
  • mythtv/libs/libmythui/mythuiimage.h

     
    9999    bool m_preserveAspect;
    100100
    101101    bool m_isGreyscale;
     102    bool m_hasIntensity;
    102103
     104    float m_intensity;
     105
    103106    friend class MythThemeBase;
    104107    friend class MythUIButtonListItem;
    105108    friend class MythUIProgressBar;