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 }