import org.kde.qt.*;
import org.kde.koala.*;

//
// Simple little hack to show off blending effects.
//
// (C) KDE Artistic Cristian Tibirna <tibirna@kde.org>
//

/**
 *  Class to test KImageEffect blending effects.
 *
 *  This is a translation to java from kblendtest.cpp in the tests library
 *  of kdeui source.
 *
 * @see KApplication
 * @see KImageEffect
 *
 * @author Cristian Tibirna <tibirna@kde.org>, java translation Kenneth J. Pouncey, kjpou@hotmail.com
 * @version 0.1
 */

public class KBlendTest {

   public static void main(String[] args) {
      KCmdLineArgs.init(args, "kblendtest", "KBlendTest", "It blends!", "0.1");
      KApplication app = new KApplication();
      KBlendWidget w = new KBlendWidget(null,"KBlendTest");
      w.setCaption(app.name());
      app.setMainWidget(w);
      w.show();
      app.exec();
      return;
   }


   public static class KBlendWidget extends QWidget {

      QImage image;
      QColor bgnd;

      String testImage = "testimage.png";

      public KBlendWidget (QWidget parent, String name) {

         // change the colors to see the effects.
//         bgnd = new QColor(QColor.qRgb(255, 255, 255));
         bgnd = Qt.blue();
//         bgnd = Qt.red();

         image = new QImage(testImage);

         resize(image.width()*2+60, image.height()*3+80);
         setBackgroundColor(bgnd);
      }

      protected void paintEvent(QPaintEvent pe ) {

         long it, ft;
         String say = "";

         image = new QImage(testImage);

         QPainter p = new QPainter(this);

         p.setPen(Qt.black());

         // you see here use of anti_dir param (blend from down to up, here)
         it = System.currentTimeMillis();
         KImageEffect.blend(image, 0.2f, bgnd, KImageEffect.VerticalGradient,true);
         ft = System.currentTimeMillis();
         say = (ft - it) + " ms, Vertical";
         p.drawImage(20, 20, image);
         p.drawText(5 , 15, say);

         image = new QImage(testImage);

         // here a negative initial intensity is used (1/2 of image is unaffected)
         it = System.currentTimeMillis();
         KImageEffect.blend(image, -0.5f, bgnd, KImageEffect.HorizontalGradient);
         ft = System.currentTimeMillis();
         say = (ft - it) + " ms, Horizontal";
         p.drawImage(40+image.width(), 20, image);
         p.drawText(15+image.width() , 15, say);

         image = new QImage(testImage);

         it = System.currentTimeMillis();
         KImageEffect.blend(image, 0.0f, bgnd, KImageEffect.DiagonalGradient,true);
         ft = System.currentTimeMillis();
         say = (ft - it) + " ms, Diagonal";
         p.drawImage(20, 40+image.height(), image);
         p.drawText(5 , 35+image.height(), say);

         image = new QImage(testImage);

         it = System.currentTimeMillis();
         KImageEffect.blend(image, 0.1f, bgnd, KImageEffect.CrossDiagonalGradient);
         ft = System.currentTimeMillis();
         say = (ft - it) + " ms, CrossDiagonal";
         p.drawImage(40+image.width(), 40+image.height(), image);
         p.drawText(25+image.width() , 35 + image.height(), say);

         image = new QImage(testImage);

         it = System.currentTimeMillis();
         KImageEffect.blend(image, -0.6f, bgnd, KImageEffect.RectangleGradient);
         ft = System.currentTimeMillis();
         say = (ft - it) + " ms, Rectangle";
         p.drawImage(20, 60+2*image.height(), image);
         p.drawText(5 , 55+2*image.height(), say);

         image = new QImage(testImage);

         it = System.currentTimeMillis();
         KImageEffect.blend(image, 0.2f, bgnd, KImageEffect.EllipticGradient);
         ft = System.currentTimeMillis();
         say = (ft - it) + " ms, Elliptic";
         p.drawImage(40+image.width(), 60+2*image.height(), image);
         p.drawText(25+image.width(), 55+2*image.height(), say);
         p.end();
      }
   }

   static {
      qtjava.initialize();
      kdejava.initialize();
   }

}
