Ticket #6511: mythui.intensity.2.patch

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

Whoops, one more time without the verbose.

  • mythtv/libs/libmythui/mythimage.cpp

     
    2828    m_gradDirection = FillTopToBottom;
    2929
    3030    m_isReflected = false;
     31    m_setIntensity = false;
    3132
    3233    m_imageId = 0;
    3334
     
    221222    }
    222223}
    223224
     225void MythImage::Intensity(float percent)
     226{
     227    if (m_setIntensity)
     228        return;
     229
     230    int segColors = depth() > 8 ? 256 : numColors();
     231    int pixels = depth() > 8 ? width()*height() :
     232        numColors();
     233    unsigned int *data = depth() > 8 ? (unsigned int *)bits() :
     234        (unsigned int *)colorTable().data();
     235
     236    bool brighten = (percent >= 0);
     237    if(percent < 0)
     238        percent = -percent;
     239
     240    unsigned char *segTbl = new unsigned char[segColors];
     241    int tmp;
     242    if(brighten)
     243    {
     244        for(int i=0; i < segColors; ++i)
     245        {
     246            tmp = (int)(i*percent);
     247            if(tmp > 255)
     248                tmp = 255;
     249            segTbl[i] = tmp;
     250        }
     251    }
     252    else
     253    {
     254        for(int i=0; i < segColors; ++i)
     255        {
     256            tmp = (int)(i*percent);
     257            if(tmp < 0)
     258                tmp = 0;
     259             segTbl[i] = tmp;
     260        }
     261    }
     262
     263    if(brighten)
     264    {
     265        for(int i=0; i < pixels; ++i)
     266        {
     267            int r = qRed(data[i]);
     268            int g = qGreen(data[i]);
     269            int b = qBlue(data[i]);
     270            int a = qAlpha(data[i]);
     271            r = r + segTbl[r] > 255 ? 255 : r + segTbl[r];
     272            g = g + segTbl[g] > 255 ? 255 : g + segTbl[g];
     273            b = b + segTbl[b] > 255 ? 255 : b + segTbl[b];
     274            data[i] = qRgba(r, g, b, a);
     275        }
     276    }
     277    else
     278    {
     279        for(int i=0; i < pixels; ++i)
     280        {
     281            int r = qRed(data[i]);
     282            int g = qGreen(data[i]);
     283            int b = qBlue(data[i]);
     284            int a = qAlpha(data[i]);
     285            r = r - segTbl[r] < 0 ? 0 : r - segTbl[r];
     286            g = g - segTbl[g] < 0 ? 0 : g - segTbl[g];
     287            b = b - segTbl[b] < 0 ? 0 : b - segTbl[b];
     288            data[i] = qRgba(r, g, b, a);
     289        }
     290    }
     291    delete [] segTbl;
     292
     293    m_setIntensity = true;
     294}
     295
     296
    224297MythImage *MythImage::FromQImage(QImage **img)
    225298{
    226299    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;