File indexing completed on 2024-04-28 05:38:11

0001 #include "imageitem.h"
0002 
0003 #include <QBuffer>
0004 #include <QDebug>
0005 #include <QFileInfo>
0006 #include <QImageWriter>
0007 #include <QPainter>
0008 #include <QStyleOptionGraphicsItem>
0009 
0010 #include "controller/item_controllers/imageitemcontroller.h"
0011 #include "controller/item_controllers/visualitemcontroller.h"
0012 #include "controller/view_controller/vectorialmapcontroller.h"
0013 #include "network/networkmessagereader.h"
0014 #include "network/networkmessagewriter.h"
0015 
0016 #include "characteritem.h"
0017 #include "data/character.h"
0018 
0019 ImageItem::ImageItem(vmap::ImageItemController* ctrl) : VisualItem(ctrl), m_imgCtrl(ctrl)
0020 {
0021     m_keepAspect= true;
0022 
0023     m_promoteTypeList << vmap::VisualItemController::ItemType::CHARACTER;
0024 
0025     for(int i= 0; i <= vmap::ImageItemController::BottomLeft; ++i)
0026     {
0027         ChildPointItem* tmp= new ChildPointItem(m_imgCtrl, i, this);
0028         tmp->setMotion(ChildPointItem::MOUSE);
0029         m_children.append(tmp);
0030     }
0031     updateChildPosition();
0032 
0033     connect(m_imgCtrl, &vmap::ImageItemController::rectChanged, this, [this]() { updateChildPosition(); });
0034     connect(m_imgCtrl, &vmap::ImageItemController::pixmapChanged, this, [this]() { update(); });
0035     if(m_imgCtrl)
0036         setTransformOriginPoint(m_imgCtrl->rect().center());
0037 }
0038 
0039 QRectF ImageItem::boundingRect() const
0040 {
0041     return m_imgCtrl ? m_imgCtrl->rect() : QRectF();
0042 }
0043 void ImageItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
0044 {
0045     Q_UNUSED(widget)
0046     painter->save();
0047     auto img= m_imgCtrl->pixmap();
0048     painter->drawPixmap(m_imgCtrl->rect(), img, img.rect());
0049 
0050     setChildrenVisible(hasFocusOrChild());
0051 
0052     painter->restore();
0053 
0054     if(canBeMoved() && (option->state & QStyle::State_MouseOver || isSelected()))
0055     {
0056         painter->save();
0057         QPen pen= painter->pen();
0058         pen.setColor(isSelected() ? m_selectedColor : m_highlightColor);
0059         pen.setWidth(m_highlightWidth);
0060         painter->setPen(pen);
0061         painter->drawRect(m_imgCtrl->rect());
0062         painter->restore();
0063     }
0064 }
0065 void ImageItem::setNewEnd(const QPointF& p)
0066 {
0067     m_imgCtrl->setCorner(p, vmap::ImageItemController::BottomRight);
0068 }
0069 
0070 void ImageItem::updateChildPosition()
0071 {
0072     if(!m_imgCtrl)
0073         return;
0074 
0075     auto rect= m_imgCtrl->rect();
0076     m_children.value(0)->setPos(rect.topLeft());
0077     m_children.value(0)->setPlacement(ChildPointItem::TopLeft);
0078     m_children.value(1)->setPos(rect.topRight());
0079     m_children.value(1)->setPlacement(ChildPointItem::TopRight);
0080     m_children.value(2)->setPos(rect.bottomRight());
0081     m_children.value(2)->setPlacement(ChildPointItem::ButtomRight);
0082     m_children.value(3)->setPos(rect.bottomLeft());
0083     m_children.value(3)->setPlacement(ChildPointItem::ButtomLeft);
0084 
0085     update();
0086 }
0087 
0088 void ImageItem::dataToMedia()
0089 {
0090     /*  auto buf= new QBuffer(&m_data);
0091       buf->open(QIODevice::ReadOnly);
0092 
0093       m_movie= new QMovie(buf);
0094       if((m_movie->isValid()) && (m_movie->frameCount() > 1))
0095       {
0096           connect(m_movie, &QMovie::updated, this, &ImageItem::updateImageFromMovie);
0097           m_movie->start();
0098           // m_rect= m_movie->frameRect();
0099       }
0100       else
0101       {
0102           delete m_movie;
0103           m_movie= nullptr;
0104           m_image.loadFromData(m_data);
0105 
0106           initImage();
0107       }*/
0108 }
0109 
0110 void ImageItem::initImage()
0111 {
0112     /* if(m_image.isNull())
0113          return;
0114      //  m_rect= m_image.rect();
0115      if(m_image.width() != 0)
0116      {
0117          m_ratio= m_image.height() / m_image.width();
0118      }
0119      QBuffer buffer;
0120      m_image.save(&buffer, "png");
0121      m_data= buffer.data();*/
0122 }
0123 
0124 void ImageItem::setModifiers(Qt::KeyboardModifiers modifiers)
0125 {
0126     // m_modifiers= modifiers;
0127 }
0128 
0129 /*void ImageItem::endOfGeometryChange(ChildPointItem::Change change)
0130 {
0131     if(change == ChildPointItem::Resizing)
0132     {
0133         auto oldScenePos= scenePos();
0134         setTransformOriginPoint(m_imgCtrl->rect().center());
0135         auto newScenePos= scenePos();
0136         auto oldPos= pos();
0137         m_imgCtrl->setPos(QPointF(oldPos.x() + (oldScenePos.x() - newScenePos.x()),
0138                                   oldPos.y() + (oldScenePos.y() - newScenePos.y())));
0139     }
0140     VisualItem::endOfGeometryChange(change);
0141 }*/
0142 VisualItem* ImageItem::promoteTo(vmap::VisualItemController::ItemType type)
0143 {
0144     /*if(type == CHARACTER)
0145     {
0146         QFileInfo info(m_imagePath);
0147         Character* character= new Character(info.baseName(), Qt::black, true);
0148         character->setAvatar(m_image);
0149         CharacterItem* item= new CharacterItem(character, pos());
0150         //  item->set
0151         item->generatedThumbnail();
0152         item->setScale(scale());
0153         return item;
0154     }*/
0155     return nullptr;
0156 }