ui: better photos
enable high antialising and smoother scaling
Change-Id: Icfa99994abfd1ddb1b7311b2bf419102fb56645b
diff --git a/src/PersonsVC.mm b/src/PersonsVC.mm
index e654817..870be2c 100644
--- a/src/PersonsVC.mm
+++ b/src/PersonsVC.mm
@@ -172,7 +172,7 @@
NSImageView* photoView = [result viewWithTag:IMAGE_TAG];
Person* p = qvariant_cast<Person*>(qIdx.data((int)Person::Role::Object));
- QVariant photo = GlobalInstances::pixmapManipulator().contactPhoto(p, QSize(35,35));
+ QVariant photo = GlobalInstances::pixmapManipulator().contactPhoto(p, QSize(40,40));
[photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(photo))];
[((ContextualTableCellView*) result) setContextualsControls:[NSMutableArray arrayWithObject:[result viewWithTag:CALL_BUTTON_TAG]]];
@@ -194,7 +194,6 @@
- (NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item
{
QModelIndex qIdx = [treeController toQIdx:((NSTreeNode*)item)];
-
HoverTableRowView* result = [outlineView makeViewWithIdentifier:@"HoverRowView" owner:nil];
if(!qIdx.parent().isValid()) {
[result setHighlightable:NO];
diff --git a/src/SmartViewVC.mm b/src/SmartViewVC.mm
index 264ad9c..e0ecc53 100644
--- a/src/SmartViewVC.mm
+++ b/src/SmartViewVC.mm
@@ -221,7 +221,7 @@
[displayName setStringValue:qIdx.data(Qt::DisplayRole).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(35,35));
+ QVariant photo = GlobalInstances::pixmapManipulator().contactPhoto(p, QSize(40,40));
[photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(photo))];
return result;
}
diff --git a/src/delegates/ImageManipulationDelegate.mm b/src/delegates/ImageManipulationDelegate.mm
index b5c9fa6..4a73edb 100644
--- a/src/delegates/ImageManipulationDelegate.mm
+++ b/src/delegates/ImageManipulationDelegate.mm
@@ -44,16 +44,18 @@
}
QVariant ImageManipulationDelegate::contactPhoto(Person* c, const QSize& size, bool displayPresence) {
- const int radius = (size.height() > 35) ? 7 : 5;
+ const int radius = size.height() / 2;
QPixmap pxm;
if (c && c->photo().isValid()) {
- QPixmap contactPhoto((qvariant_cast<QPixmap>(c->photo())).scaledToWidth(size.height()-6));
+ QPixmap contactPhoto(qvariant_cast<QPixmap>(c->photo()).scaledToWidth(size.height(),
+ Qt::TransformationMode::SmoothTransformation));
pxm = QPixmap(size);
pxm.fill(Qt::transparent);
QPainter painter(&pxm);
//Clear the pixmap
+ painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
painter.setCompositionMode(QPainter::CompositionMode_Clear);
painter.fillRect(0,0,size.width(),size.height(),QBrush(Qt::white));
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
@@ -62,20 +64,17 @@
QRect pxRect = contactPhoto.rect();
QBitmap mask(pxRect.size());
QPainter customPainter(&mask);
- customPainter.setRenderHint (QPainter::Antialiasing, true );
+ customPainter.setRenderHints (QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
customPainter.fillRect (pxRect , Qt::white );
customPainter.setBackground (Qt::black );
customPainter.setBrush (Qt::black );
customPainter.drawRoundedRect(pxRect,radius,radius);
- contactPhoto.setMask(mask);
- painter.drawPixmap(3,3,contactPhoto);
- painter.setBrush(Qt::NoBrush);
- painter.setPen(Qt::white);
- painter.setRenderHint (QPainter::Antialiasing, true );
- painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
- painter.drawRoundedRect(3,3,pxm.height()-6,pxm.height()-6,radius,radius);
- painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
-
+ contactPhoto.setMask (mask );
+ painter.drawPixmap (0,0,contactPhoto );
+ painter.setBrush (Qt::NoBrush );
+ painter.setPen (Qt::black );
+ painter.setCompositionMode (QPainter::CompositionMode_SourceIn);
+ painter.drawRoundedRect(0,0,pxm.height(),pxm.height(),radius,radius);
}
else {
pxm = drawDefaultUserPixmap(size, false, false);
@@ -127,19 +126,38 @@
QPixmap ImageManipulationDelegate::drawDefaultUserPixmap(const QSize& size, bool displayPresence, bool isPresent) {
+ const int radius = size.height() / 2;
QPixmap pxm(size);
pxm.fill(Qt::transparent);
QPainter painter(&pxm);
+ painter.setCompositionMode(QPainter::CompositionMode_Clear);
+ painter.fillRect(0,0,size.width(),size.height(),QBrush(Qt::white));
+ painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
+
// create the image somehow, load from file, draw into it...
auto sourceImgRef = CGImageSourceCreateWithData((CFDataRef)[[NSImage imageNamed:@"NSUser"] TIFFRepresentation], NULL);
auto imgRef = CGImageSourceCreateImageAtIndex(sourceImgRef, 0, NULL);
- auto finalImgRef = resizeCGImage(imgRef, size);
- painter.drawPixmap(3,3,QtMac::fromCGImageRef(finalImgRef));
+ auto finalpxm = QtMac::fromCGImageRef(resizeCGImage(imgRef, size));
+
+ QRect pxRect = finalpxm.rect();
+ QBitmap mask(pxRect.size());
+ QPainter customPainter(&mask);
+ customPainter.setRenderHint (QPainter::Antialiasing, true );
+ customPainter.fillRect (pxRect , Qt::white );
+ customPainter.setBackground (Qt::black );
+ customPainter.setBrush (Qt::black );
+ customPainter.drawRoundedRect(pxRect,radius,radius);
+ finalpxm.setMask(mask);
+ painter.setRenderHint (QPainter::Antialiasing, true );
+ painter.drawPixmap(0,0,finalpxm);
+ painter.setBrush(Qt::NoBrush);
+ painter.setPen(Qt::black);
+ painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
+ painter.drawRoundedRect(0,0,pxm.height(),pxm.height(),radius,radius);
CFRelease(sourceImgRef);
CFRelease(imgRef);
- CFRelease(finalImgRef);
return pxm;
}