Changelog updated to newest version.
[jspeed] / src / imageelement.cpp
index 2002666..914ad6b 100644 (file)
@@ -30,11 +30,16 @@ namespace
     {
      {"xpos", true},
      {"ypos", true},
-     {"src", false}
+     {"zpos", true},
+     {"visiblewhen", false},
+     {"src", false},
+     {"width", true},
+     {"height", true}
     };
 }
 
-ImageElement::ImageElement(Reader* reader): GraphicsElement(reader)
+ImageElement::ImageElement(Reader* reader): GraphicsElement(reader),
+width_(0), height_(0), imageSet_(false)
 {
     element_ = new QGraphicsPixmapItem();
 }
@@ -57,10 +62,21 @@ bool ImageElement::setAttribute(QString const& name,
         case YPOS:
             element_->setY(intVal);
             break;
+        case ZPOS:
+            element_->setZValue(intVal);
+            break;
+        case VISIBLEWHEN:
+            setVisibleWhen(strToVisibleWhen(value));
+            break;
         case SRC:
             return loadImage(value);
             break;
-
+        case WIDTH:
+            width_ = intVal;
+            break;
+        case HEIGHT:
+            height_ = intVal;
+            break;
         default:
             qDebug() << "Unknown attribute: " << attr;
             return false;
@@ -76,6 +92,31 @@ bool ImageElement::setAttribute(QString const& name,
 
 void ImageElement::addToScene(GraphicsScene* scene)
 {
+    if(!imageSet_)
+    {
+        return;
+    }
+
+    QPixmap pix;
+
+    if(width_ > 0 && height_ > 0)
+    {
+        pix = pixmap_.scaled(width_, height_, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+    }
+    else if(width_ > 0)
+    {
+        pix = pixmap_.scaledToWidth(width_, Qt::SmoothTransformation);
+    }
+    else if(height_ > 0)
+    {
+        pix = pixmap_.scaledToHeight(height_, Qt::SmoothTransformation);
+    }
+    else
+    {
+        pix = pixmap_;
+    }
+
+    element_->setPixmap(pix);
     scene->addItem(element_);
 }
 
@@ -85,7 +126,6 @@ void ImageElement::update()
 
 bool ImageElement::loadImage(QString const& name)
 {
-    QPixmap pixmap;
     QByteArray data;
 
     if(!readFile(name, data))
@@ -93,13 +133,18 @@ bool ImageElement::loadImage(QString const& name)
         return false;
     }
 
-    if(!pixmap.loadFromData(data))
+    if(!pixmap_.loadFromData(data))
     {
         setError("Invalid image file: " + name);
         return false;
     }
 
-    element_->setPixmap(pixmap);
+    imageSet_ = true;
 
     return true;
 }
+
+QGraphicsItem* ImageElement::getElement() const
+{
+    return element_;
+}