/[classpath]/classpath/native/jni/qt-peer/qtvolatileimage.cpp
ViewVC logotype

Diff of /classpath/native/jni/qt-peer/qtvolatileimage.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by robilad, Mon Aug 15 21:53:12 2005 UTC revision 1.3 by smarothy, Tue Aug 23 02:13:48 2005 UTC
# Line 36  obligated to do so.  If you do not wish Line 36  obligated to do so.  If you do not wish
36  exception statement from your version. */  exception statement from your version. */
37    
38  #include <assert.h>  #include <assert.h>
39    #include <QPixmap>
40  #include <QImage>  #include <QImage>
41  #include <QColor>  #include <QColor>
42  #include <QMatrix>  #include <QMatrix>
# Line 53  exception statement from your version. * Line 54  exception statement from your version. *
54  #define SCALE_REPLICATE    8  #define SCALE_REPLICATE    8
55  #define SCALE_AREA_AVERAGING  16  #define SCALE_AREA_AVERAGING  16
56    
57    QPixmap *getQtVolatileImage( JNIEnv *env, jobject obj )
58    {
59      jclass cls = env->GetObjectClass( obj );
60      jfieldID field = env->GetFieldID( cls, "nativeObject", "J" );
61      return (QPixmap *)env->GetLongField( obj, field );
62    }
63    
64  static void setNativePtr( JNIEnv *env, jobject obj, void *value )  static void setNativePtr( JNIEnv *env, jobject obj, void *value )
65  {  {
66    jlong longValue = (jlong) value;    jlong longValue = (jlong) value;
# Line 67  static void setNativePtr( JNIEnv *env, j Line 75  static void setNativePtr( JNIEnv *env, j
75  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_clear  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_clear
76  (JNIEnv *env, jobject obj)  (JNIEnv *env, jobject obj)
77  {  {
78    QImage *image = getQtImage(env, obj);    QPixmap *image = getQtVolatileImage(env, obj);
79    assert( image );    assert( image );
80    image->fill(0);    image->fill();
81  }  }
82    
83  /*  /*
# Line 78  JNIEXPORT void JNICALL Java_gnu_java_awt Line 86  JNIEXPORT void JNICALL Java_gnu_java_awt
86  JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_getPixels  JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_getPixels
87  (JNIEnv *env, jobject obj)  (JNIEnv *env, jobject obj)
88  {  {
89    QImage *image = getQtImage(env, obj);    QPixmap *image = getQtVolatileImage(env, obj);
90    jintArray result_array;    jintArray result_array;
91    jint *result_array_ptr, *dst;    jint *result_array_ptr, *dst;
92    int x, y;    int x, y;
# Line 86  JNIEXPORT jintArray JNICALL Java_gnu_jav Line 94  JNIEXPORT jintArray JNICALL Java_gnu_jav
94    QRgb current;    QRgb current;
95    
96    assert( image );    assert( image );
97      QImage im = image->toImage();
98    
99    result_array = env->NewIntArray (image->width() * image->height());    result_array = env->NewIntArray (image->width() * image->height());
100    dst = result_array_ptr =    dst = result_array_ptr =
# Line 95  JNIEXPORT jintArray JNICALL Java_gnu_jav Line 104  JNIEXPORT jintArray JNICALL Java_gnu_jav
104    for ( y = 0; y < image->height(); y++)    for ( y = 0; y < image->height(); y++)
105      for ( x = 0; x < image->width(); x++)      for ( x = 0; x < image->width(); x++)
106        {        {
107          current = image->pixel(x, y);          current = im.pixel(x, y);
108          pixel = 0;          pixel = 0;
109          pixel = (qAlpha(current) & 0xFF) << 24 |          pixel = (qAlpha(current) & 0xFF) << 24 |
110            (qRed(current) & 0xFF) << 16 |            (qRed(current) & 0xFF) << 16 |
# Line 128  JNIEXPORT void JNICALL Java_gnu_java_awt Line 137  JNIEXPORT void JNICALL Java_gnu_java_awt
137    assert (field != 0);    assert (field != 0);
138    height = env->GetIntField(obj, field);    height = env->GetIntField(obj, field);
139        
140    QImage *image = new QImage ( width, height,    QPixmap *image = new QPixmap ( width, height );
                                QImage::Format_ARGB32_Premultiplied );  
141    setNativePtr(env, obj, image);    setNativePtr(env, obj, image);
142  }  }
143    
# Line 139  JNIEXPORT void JNICALL Java_gnu_java_awt Line 147  JNIEXPORT void JNICALL Java_gnu_java_awt
147  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_freeImage  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_freeImage
148  (JNIEnv *env, jobject obj)  (JNIEnv *env, jobject obj)
149  {  {
150    QImage *image = getQtImage(env, obj);    QPixmap *image = getQtVolatileImage(env, obj);
151    if ( image )    if ( image )
152      delete image;      delete image;
153    setNativePtr(env, obj, NULL);    setNativePtr(env, obj, NULL);
154  }  }
155    
156  /*  /*
157     * Blits a QImage
158     */
159    JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_blit__Lgnu_java_awt_peer_qt_QtImage_2
160    (JNIEnv *env, jobject obj, jobject i2)
161    {
162      QPixmap *image = getQtVolatileImage(env, obj);
163      assert( image );
164    
165      QImage *blit = getQtImage(env, i2);
166      assert( blit );
167    
168      QPainter *p = new QPainter( image );
169      assert( p );
170      p->drawImage( 0, 0, *blit );
171    
172      delete p;
173    }
174    
175    /*
176     * Blits a QImage
177     */
178    JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_blit__Lgnu_java_awt_peer_qt_QtImage_2IIII
179    (JNIEnv *env, jobject obj, jobject i2, jint x, jint y, jint w, jint h)
180    {
181      QPixmap *image = getQtVolatileImage(env, obj);
182      assert( image );
183    
184      QImage *blit = getQtImage(env, i2);
185      assert( blit );
186    
187      QPainter *p = new QPainter( image );
188      assert( p );
189      p->drawImage( x, y, *blit, x, y, w, h);
190    
191      delete p;
192    }
193    
194    /*
195   * Creates a scaled version.   * Creates a scaled version.
196   */   */
197  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_createScaledImage  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_createScaledImage
# Line 164  JNIEXPORT void JNICALL Java_gnu_java_awt Line 210  JNIEXPORT void JNICALL Java_gnu_java_awt
210    assert (field != 0);    assert (field != 0);
211    h = env->GetIntField(obj, field);    h = env->GetIntField(obj, field);
212    
213    QImage *image = getQtImage(env, src);    QPixmap *ip = getQtVolatileImage(env, src);
214    assert( image );    assert( ip );
215      QImage image = ip->toImage();
216    QImage imageScaled;    QImage imageScaled;
217    
218    if (hints == SCALE_SMOOTH || hints == SCALE_AREA_AVERAGING)    if (hints == SCALE_SMOOTH || hints == SCALE_AREA_AVERAGING)
219      imageScaled = image->scaled(w, h,      imageScaled = image.scaled(w, h,
220                                  Qt::IgnoreAspectRatio,                                 Qt::IgnoreAspectRatio,
221                                  Qt::SmoothTransformation);                                 Qt::SmoothTransformation);
222    else    else
223      imageScaled = image->scaled(w, h,      imageScaled = image.scaled(w, h,
224                                  Qt::IgnoreAspectRatio,                                 Qt::IgnoreAspectRatio,
225                                  Qt::FastTransformation);                                 Qt::FastTransformation);
226    QImage *scaledPtr = new QImage( imageScaled );    QImage *scaledPtr = new QImage( imageScaled );
227        
228    // create new QtImage object    // create new QtImage object
# Line 189  JNIEXPORT void JNICALL Java_gnu_java_awt Line 236  JNIEXPORT void JNICALL Java_gnu_java_awt
236  (JNIEnv *env, jobject obj, jobject graphics, jint bg_red, jint bg_green,  (JNIEnv *env, jobject obj, jobject graphics, jint bg_red, jint bg_green,
237   jint bg_blue, jint x, jint y, jboolean composite)   jint bg_blue, jint x, jint y, jboolean composite)
238  {  {
239    QImage *image = getQtImage(env, obj);    QPixmap *image = getQtVolatileImage(env, obj);
240    assert( image );    assert( image );
241    QPainter *painter = getPainter( env, graphics );    QPainter *painter = getPainter( env, graphics );
242    assert( painter );    assert( painter );
# Line 197  JNIEXPORT void JNICALL Java_gnu_java_awt Line 244  JNIEXPORT void JNICALL Java_gnu_java_awt
244    if(composite == JNI_TRUE)    if(composite == JNI_TRUE)
245      painter->fillRect ( x, y, image->width(), image->height(),      painter->fillRect ( x, y, image->width(), image->height(),
246                          QColor(bg_red, bg_green, bg_blue ) );                          QColor(bg_red, bg_green, bg_blue ) );
247    painter->drawImage ( QPoint(x, y), *image );    painter->drawPixmap ( QPoint(x, y), *image );
248  }  }
249    
250  /*  /*
# Line 208  JNIEXPORT void JNICALL Java_gnu_java_awt Line 255  JNIEXPORT void JNICALL Java_gnu_java_awt
255   jint bg_red, jint bg_green, jint bg_blue,   jint bg_red, jint bg_green, jint bg_blue,
256   jint x, jint y, jint w, jint h, jboolean composite)   jint x, jint y, jint w, jint h, jboolean composite)
257  {  {
258    QImage *image = getQtImage(env, obj);    QPixmap *image = getQtVolatileImage(env, obj);
259    assert( image );    assert( image );
260    QPainter *painter = getPainter( env, graphics );    QPainter *painter = getPainter( env, graphics );
261    assert( painter );    assert( painter );
# Line 224  JNIEXPORT void JNICALL Java_gnu_java_awt Line 271  JNIEXPORT void JNICALL Java_gnu_java_awt
271    if(composite == JNI_TRUE)    if(composite == JNI_TRUE)
272      painter->fillRect( *dstRect, QColor(bg_red, bg_green, bg_blue ) );      painter->fillRect( *dstRect, QColor(bg_red, bg_green, bg_blue ) );
273    
274    painter->drawImage( *dstRect, *image, *srcRect);    painter->drawPixmap( *dstRect, *image, *srcRect);
275    
276    delete srcRect;    delete srcRect;
277    delete dstRect;    delete dstRect;
# Line 236  JNIEXPORT void JNICALL Java_gnu_java_awt Line 283  JNIEXPORT void JNICALL Java_gnu_java_awt
283  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_drawPixelsTransformed  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_drawPixelsTransformed
284  (JNIEnv *env, jobject obj, jobject graphics, jobject transform)  (JNIEnv *env, jobject obj, jobject graphics, jobject transform)
285  {  {
286    QImage *originalImage = getQtImage(env, obj);    QPixmap *originalImage = getQtVolatileImage(env, obj);
287    assert( originalImage );    assert( originalImage );
288    QPainter *painter = getPainter( env, graphics );    QPainter *painter = getPainter( env, graphics );
289    assert( painter );    assert( painter );
# Line 245  JNIEXPORT void JNICALL Java_gnu_java_awt Line 292  JNIEXPORT void JNICALL Java_gnu_java_awt
292    
293    // FIXME : Add rendering hint support here.    // FIXME : Add rendering hint support here.
294    QPoint p = matrix->map( QPoint(0,0) );    QPoint p = matrix->map( QPoint(0,0) );
295    QImage image = originalImage->transformed ( *matrix, Qt::FastTransformation );    QImage image = originalImage->toImage().transformed ( *matrix, Qt::FastTransformation );
296    painter->drawImage(p, image);    painter->drawImage(p, image);
297  }  }
298    
# Line 261  JNIEXPORT void JNICALL Java_gnu_java_awt Line 308  JNIEXPORT void JNICALL Java_gnu_java_awt
308   jint dstx, jint dsty, jint dstwidth, jint dstheight,   jint dstx, jint dsty, jint dstwidth, jint dstheight,
309   jboolean composite)   jboolean composite)
310  {  {
311    QImage *originalImage = getQtImage(env, obj);    QPixmap *originalImage = getQtVolatileImage(env, obj);
312    assert( originalImage );    assert( originalImage );
313    QPainter *painter = getPainter( env, graphics );    QPainter *painter = getPainter( env, graphics );
314    assert( painter );    assert( painter );
# Line 271  JNIEXPORT void JNICALL Java_gnu_java_awt Line 318  JNIEXPORT void JNICALL Java_gnu_java_awt
318    QRectF *dstRect = new QRectF((qreal)dstx, (qreal)dsty,    QRectF *dstRect = new QRectF((qreal)dstx, (qreal)dsty,
319                                 (qreal)dstwidth, (qreal)dstheight);                                 (qreal)dstwidth, (qreal)dstheight);
320        
   QImage image = originalImage->mirrored ( (flipx == JNI_TRUE),  
                                            (flipy == JNI_TRUE) );  
321    if(composite == JNI_TRUE)    if(composite == JNI_TRUE)
322      painter->fillRect( *dstRect, QColor(bg_red, bg_green, bg_blue ) );      painter->fillRect( *dstRect, QColor(bg_red, bg_green, bg_blue ) );
323    
324    painter->drawImage( *dstRect, image, *srcRect);    if( flipx == JNI_TRUE || flipy == JNI_TRUE )
325        {
326          QImage im = originalImage->toImage().mirrored ( (flipx == JNI_TRUE),
327                                                          (flipy == JNI_TRUE) );
328          painter->drawImage ( *dstRect, im, *srcRect);
329        }
330      else
331        painter->drawPixmap ( *dstRect, *originalImage, *srcRect);
332    
333    delete srcRect;    delete srcRect;
334    delete dstRect;    delete dstRect;
# Line 288  JNIEXPORT void JNICALL Java_gnu_java_awt Line 340  JNIEXPORT void JNICALL Java_gnu_java_awt
340  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_copyArea  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtVolatileImage_copyArea
341  (JNIEnv *env, jobject obj , jint x, jint y, jint w, jint h, jint dx, jint dy)  (JNIEnv *env, jobject obj , jint x, jint y, jint w, jint h, jint dx, jint dy)
342  {  {
343    QImage *image = getQtImage(env, obj);    QPixmap *image = getQtVolatileImage(env, obj);
344    assert( image );    assert( image );
345    QImage area = image->copy(x, y, w, h);  
346    QPainter *p = new QPainter( image );    // FIXME
   p->drawImage( x + dx, y + dy, area );  
   delete p;  
347  }  }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26