Slightly optimized drawing stickers in touchbar.

This commit is contained in:
23rd 2020-06-16 13:37:27 +03:00
parent 27c799ce3d
commit 68badc6682

View file

@ -675,28 +675,31 @@ void AppendEmojiPacks(
@interface PickerScrubberItemView : NSScrubberItemView @interface PickerScrubberItemView : NSScrubberItemView
@property (strong) NSImageView *imageView;
@end // @interface PickerScrubberItemView @end // @interface PickerScrubberItemView
@implementation PickerScrubberItemView { @implementation PickerScrubberItemView {
rpl::lifetime _lifetime; rpl::lifetime _lifetime;
std::shared_ptr<Data::DocumentMedia> _media; std::shared_ptr<Data::DocumentMedia> _media;
Image *_image; Image *_image;
QImage _qimage;
@public @public
Data::FileOrigin fileOrigin;
DocumentData *documentData; DocumentData *documentData;
} }
- (instancetype)initWithFrame:(NSRect)frameRect { - (instancetype)initWithFrame:(NSRect)frameRect {
self = [super initWithFrame:frameRect]; self = [super initWithFrame:frameRect];
if (!self) {
return self; return self;
} }
_imageView = [NSImageView imageViewWithImage:
[[NSImage alloc] initWithSize:frameRect.size]]; - (void)drawRect:(NSRect)dirtyRect {
[self.imageView setAutoresizingMask: if (_qimage.isNull()) {
(NSAutoresizingMaskOptions)(NSViewWidthSizable | NSViewHeightSizable)]; [[NSColor blackColor] setFill];
[self addSubview:self.imageView]; NSRectFill(dirtyRect);
return self; } else {
CGContextRef context = [[NSGraphicsContext currentContext] CGContext];
CGImageRef image = _qimage.toCGImage();
CGContextDrawImage(context, dirtyRect, image);
CGImageRelease(image);
}
} }
- (void)addDocument:(not_null<DocumentData*>)document { - (void)addDocument:(not_null<DocumentData*>)document {
@ -721,17 +724,17 @@ void AppendEmojiPacks(
} }
}, _lifetime); }, _lifetime);
} }
- (void)updateImage { - (void)updateImage {
const auto size = _image->size() const auto size = _image->size()
.scaled(kCircleDiameter, kCircleDiameter, Qt::KeepAspectRatio); .scaled(kCircleDiameter, kCircleDiameter, Qt::KeepAspectRatio);
_imageView.image = [qt_mac_create_nsimage( _qimage = _image->pixSingle(
_image->pixSingle(
size.width(), size.width(),
size.height(), size.height(),
kCircleDiameter, kCircleDiameter,
kCircleDiameter, kCircleDiameter,
ImageRoundRadius::None)) ImageRoundRadius::None).toImage();
autorelease]; [self display];
} }
@end // @implementation PickerScrubberItemView @end // @implementation PickerScrubberItemView
@ -815,9 +818,6 @@ void AppendEmojiPacks(
for (PickerScrubberItemView *item in container.subviews) { for (PickerScrubberItemView *item in container.subviews) {
const auto &doc = item->documentData; const auto &doc = item->documentData;
const auto &origin = item->fileOrigin
? item->fileOrigin
: Data::FileOrigin();
if (![item isMemberOfClass:[PickerScrubberItemView class]] if (![item isMemberOfClass:[PickerScrubberItemView class]]
|| !doc || !doc
|| (doc->id == _lastPreviewedSticker) || (doc->id == _lastPreviewedSticker)
@ -825,8 +825,8 @@ void AppendEmojiPacks(
continue; continue;
} }
_lastPreviewedSticker = doc->id; _lastPreviewedSticker = doc->id;
customEnter([origin = std::move(origin), doc = std::move(doc)] { customEnter([doc = std::move(doc)] {
App::wnd()->showMediaPreview(origin, doc); App::wnd()->showMediaPreview(Data::FileOrigin(), doc);
}); });
break; break;
} }