diff --git a/src/ConversationVC.mm b/src/ConversationVC.mm index 64c68e2435f2c99cabe5c2d44e14f6e05c839c17..cce9ddd73381c0c7a3626118c5920ea804ea0856 100644 --- a/src/ConversationVC.mm +++ b/src/ConversationVC.mm @@ -231,11 +231,7 @@ result.msgView.layer.cornerRadius = 5.0f; [result updateWidthConstraint:finalWidth]; - - Person* p = qvariant_cast<Person*>(qIdx.data((int)Person::Role::Object)); - QVariant photo = GlobalInstances::pixmapManipulator().contactPhoto(p, QSize(50,50)); - [result.photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(photo))]; - + [result.photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(qIdx.data(Qt::DecorationRole)))]; return result; } diff --git a/src/HistoryVC.mm b/src/HistoryVC.mm index 40aa29051a6fcc4e5d953f4347f977b89f818f61..5fae480e180fa6c71d76e4a37e109d1a78657b73 100644 --- a/src/HistoryVC.mm +++ b/src/HistoryVC.mm @@ -176,8 +176,7 @@ NSInteger const PHOTO_TAG = 400; auto call = qvariant_cast<Call*>(qIdx.data((int)Call::Role::Object)); NSImageView* photoView = [result viewWithTag:PHOTO_TAG]; - QVariant photo = GlobalInstances::pixmapManipulator().callPhoto(call, QSize(50,50)); - [photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(photo))]; + [photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(qIdx.data(Qt::DecorationRole)))]; NSTextField* details = [result viewWithTag:DETAILS_TAG]; [details setStringValue:qIdx.data((int)Call::Role::FormattedDate).toString().toNSString()]; diff --git a/src/PersonsVC.mm b/src/PersonsVC.mm index db5aa2cb021a07437bf285e441efd31b8fc56a61..07bc3f0c144a0b97031b414f3854fca8e1a77c83 100644 --- a/src/PersonsVC.mm +++ b/src/PersonsVC.mm @@ -176,8 +176,8 @@ NSInteger const CALL_BUTTON_TAG = 400; NSImageView* photoView = [result viewWithTag:IMAGE_TAG]; Person* p = qvariant_cast<Person*>(qIdx.data((int)Person::Role::Object)); - QVariant photo = GlobalInstances::pixmapManipulator().contactPhoto(p, QSize(40,40)); - [photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(photo))]; + [photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(qIdx.data(Qt::DecorationRole)))]; + [((ContextualTableCellView*) result) setContextualsControls:[NSMutableArray arrayWithObject:[result viewWithTag:CALL_BUTTON_TAG]]]; NSTextField* details = [result viewWithTag:DETAILS_TAG]; diff --git a/src/SmartViewVC.mm b/src/SmartViewVC.mm index f445f52f06c9ab15b95c9e82c13ed0fa8759fefb..10c8db5ed54d2d0b09ede8e3f3e3dbf1f15ba48c 100644 --- a/src/SmartViewVC.mm +++ b/src/SmartViewVC.mm @@ -241,9 +241,8 @@ NSInteger const CANCEL_BUTTON_TAG = 600; NSTextField* displayName = [result viewWithTag:DISPLAYNAME_TAG]; [displayName setStringValue:qIdx.data((int)Ring::Role::Name).toString().toNSString()]; NSImageView* photoView = [result viewWithTag:IMAGE_TAG]; - Person* p = qvariant_cast<Person*>(qIdx.data((int)Person::Role::Object)); - QVariant photo = GlobalInstances::pixmapManipulator().contactPhoto(p, QSize(50,50)); - [photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(photo))]; + + [photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(qIdx.data(Qt::DecorationRole)))]; return result; } diff --git a/src/delegates/ImageManipulationDelegate.h b/src/delegates/ImageManipulationDelegate.h index 776df95df69bf2ab955ecb0c918d2f428514ae0e..43e7446e50a588b8b29d878fc35db3a7d638e034 100644 --- a/src/delegates/ImageManipulationDelegate.h +++ b/src/delegates/ImageManipulationDelegate.h @@ -19,6 +19,10 @@ #import <QuartzCore/QuartzCore.h> +//Qt +#import <QSize> + +//Ring #import <interfaces/pixmapmanipulatori.h> #import <call.h> @@ -50,16 +54,19 @@ namespace Interfaces { QVariant decorationRole(const Call* c) override; QVariant decorationRole(const ContactMethod* cm) override; QVariant decorationRole(const Person* p) override; + QVariant decorationRole(const Account* acc) override; private: //Helper - QPixmap drawDefaultUserPixmap(const QSize& size, bool displayPresence, bool isPresent); + QPixmap drawDefaultUserPixmap(const QSize& size, bool displayPresence = false, bool isPresent = false); CGImageRef resizeCGImage(CGImageRef image, const QSize& size); /** * Return a version of size destSize centered of the bigger photo */ QPixmap crop(QPixmap& photo, const QSize& destSize); + + const QSize decorationSize = {80,80}; }; } // namespace Interfaces diff --git a/src/delegates/ImageManipulationDelegate.mm b/src/delegates/ImageManipulationDelegate.mm index 0862f20c063b17732e61cfe2973d3f6e2fe8aa09..c21f8e4e1090fdfedbd7dc19bb8ea1d173f1429e 100644 --- a/src/delegates/ImageManipulationDelegate.mm +++ b/src/delegates/ImageManipulationDelegate.mm @@ -34,6 +34,8 @@ //Ring #import <person.h> +#import <profilemodel.h> +#import <profile.h> #import <contactmethod.h> namespace Interfaces { @@ -84,7 +86,7 @@ namespace Interfaces { painter.drawRoundedRect(0,0,pxm.height(),pxm.height(),radius,radius); } else { - pxm = drawDefaultUserPixmap(size, false, false); + pxm = drawDefaultUserPixmap(size); } return pxm; @@ -130,7 +132,7 @@ namespace Interfaces { if (n->contact()) { return contactPhoto(n->contact(), size, displayPresence); } else { - return drawDefaultUserPixmap(size, false, false); + return drawDefaultUserPixmap(size); } } @@ -139,8 +141,10 @@ namespace Interfaces { QImage image; //For now, ENCODING is only base64 and image type PNG or JPG const bool ret = image.loadFromData(QByteArray::fromBase64(data),type.toLatin1()); - if (!ret) + if (!ret) { qDebug() << "vCard image loading failed"; + return drawDefaultUserPixmap(decorationSize); + } return QPixmap::fromImage(image); } @@ -248,20 +252,33 @@ namespace Interfaces { QVariant ImageManipulationDelegate::decorationRole(const Call* c) { - Q_UNUSED(c) - return QVariant(); + if (c && c->peerContactMethod() + && c->peerContactMethod()->contact()) { + return contactPhoto(c->peerContactMethod()->contact(), decorationSize); + } else + return drawDefaultUserPixmap(decorationSize); } QVariant ImageManipulationDelegate::decorationRole(const ContactMethod* cm) { - Q_UNUSED(cm) - return QVariant(); + QImage photo; + if (cm && cm->contact() && cm->contact()->photo().isValid()) + return contactPhoto(cm->contact(), decorationSize); + else + return drawDefaultUserPixmap(decorationSize); } QVariant ImageManipulationDelegate::decorationRole(const Person* p) { - Q_UNUSED(p) - return QVariant(); + return contactPhoto(const_cast<Person*>(p), decorationSize); + } + + QVariant ImageManipulationDelegate::decorationRole(const Account* acc) + { + Q_UNUSED(acc) + if (auto pro = ProfileModel::instance().selectedProfile()) + return contactPhoto(pro->person(), decorationSize); + return drawDefaultUserPixmap(decorationSize); } } // namespace Interfaces