ganeswidgets/src/hgvgimage.cpp
changeset 1 e48454f237ca
parent 0 89c329efa980
child 2 49c70dcc3f17
equal deleted inserted replaced
0:89c329efa980 1:e48454f237ca
    73 {
    73 {
    74     return mMirrorImage;
    74     return mMirrorImage;
    75 }
    75 }
    76 
    76 
    77 
    77 
    78 void HgVgImage::setImage(QImage& image)
    78 void HgVgImage::setImage(const QImage& image)
    79 {
    79 {
    80     if (image.isNull())
    80     if (image.isNull())
    81         return;
    81         return;
    82 
    82 
    83     // release previous images vg data
    83     // release previous images vg data
    86     mQImage = image;
    86     mQImage = image;
    87 
    87 
    88     mMirrorSize = getMirrorSize(mQImage);
    88     mMirrorSize = getMirrorSize(mQImage);
    89 
    89 
    90 }
    90 }
       
    91 
       
    92 QImage HgVgImage::getQImage() const
       
    93 {
       
    94     return mQImage;
       
    95 }
       
    96 
    91 
    97 
    92 void HgVgImage::releaseImage()
    98 void HgVgImage::releaseImage()
    93 {
    99 {
    94     if (mVgImage != VG_INVALID_HANDLE)
   100     if (mVgImage != VG_INVALID_HANDLE)
    95     {
   101     {
   106     mQImage = QImage();
   112     mQImage = QImage();
   107 }
   113 }
   108 
   114 
   109 void HgVgImage::upload(bool mirror)
   115 void HgVgImage::upload(bool mirror)
   110 {
   116 {
       
   117     if( mQImage.isNull())
       
   118         return;    
   111     
   119     
   112     if (mVgImage == VG_INVALID_HANDLE)
   120     if (mVgImage == VG_INVALID_HANDLE)
   113     {            
   121     {            
   114                 
   122                 
   115         VGImageFormat format;
   123         VGImageFormat format;
   138         {
   146         {
   139             qWarning("HgMediaWall run out of video memory for images!");
   147             qWarning("HgMediaWall run out of video memory for images!");
   140             return;
   148             return;
   141         }
   149         }
   142         
   150         
   143         vgImageSubData(mVgImage, mQImage.bits(), mQImage.bytesPerLine(), 
   151         // bits function performs deep copy if we dont fetch data with const specifier.
   144             format, 0, 0, mQImage.width(), mQImage.height() );        
   152         const uchar *bits = mQImage.bits();
       
   153         
       
   154         vgImageSubData(mVgImage, bits, mQImage.bytesPerLine(), 
       
   155             format, 0, 0, mQImage.width(), mQImage.height() );
       
   156         
   145     }
   157     }
   146     
   158     
   147     if (mirror && mMirrorImage == VG_INVALID_HANDLE)
   159     if (mirror && mMirrorImage == VG_INVALID_HANDLE)
   148     {
   160     {
   149         mMirrorImage = vgCreateImage(VG_sARGB_8888_PRE, mMirrorSize.width(), mMirrorSize.height(), VG_IMAGE_QUALITY_NONANTIALIASED);
   161         mMirrorImage = vgCreateImage(VG_sARGB_8888_PRE, mMirrorSize.width(), mMirrorSize.height(), VG_IMAGE_QUALITY_NONANTIALIASED);
   160         // it fades under the floor
   172         // it fades under the floor
   161         for (int i = 0; i < mirrorImage.height(); i++)
   173         for (int i = 0; i < mirrorImage.height(); i++)
   162         {
   174         {
   163             qreal t = qreal(i) / qreal(mirrorImage.height());
   175             qreal t = qreal(i) / qreal(mirrorImage.height());
   164             int a = (int)(t * 255.0);
   176             int a = (int)(t * 255.0);
       
   177             uchar* scanline = mirrorImage.scanLine(i);
   165             for (int j = 0; j < mirrorImage.width(); j++)
   178             for (int j = 0; j < mirrorImage.width(); j++)
   166             {
   179             {
   167                 QRgb rgb = mirrorImage.pixel(j, i);
   180                 scanline[j*4+3] = a;
   168                 mirrorImage.setPixel(j, i, qRgba(qRed(rgb), qGreen(rgb), qBlue(rgb), a));
       
   169             }        
   181             }        
   170         }
   182         }
   171         
   183         
   172         // copy data to vg image
   184         // copy data to vg image
   173         vgImageSubData(mMirrorImage, mirrorImage.bits(), mirrorImage.bytesPerLine(), 
   185         vgImageSubData(mMirrorImage, mirrorImage.bits(), mirrorImage.bytesPerLine(),