/[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.2.1 by gnu_andrew, Tue Aug 16 16:22:39 2005 UTC revision 1.2.2.2 by gnu_andrew, Sat Sep 10 15:32:04 2005 UTC
# Line 35  this exception to your version of the li Line 35  this exception to your version of the li
35  obligated to do so.  If you do not wish to do so, delete this  obligated to do so.  If you do not wish to do so, delete this
36  exception statement from your version. */  exception statement from your version. */
37    
38    #include <assert.h>
39    #include <QPixmap>
40  #include <QImage>  #include <QImage>
41  #include <QColor>  #include <QColor>
42  #include <QMatrix>  #include <QMatrix>
# Line 52  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 66  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 77  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 85  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 94  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 127  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 138  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 163  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 188  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 196  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 207  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 223  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 235  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 244  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 260  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 270  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 287  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.2.1  
changed lines
  Added in v.1.2.2.2

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