1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-04 02:17:51 +01:00
Telegram/Watch/Extension/TGNeoStickerMessageViewModel.m
2016-02-25 01:03:51 +01:00

104 lines
3.5 KiB
Objective-C

#import "TGNeoStickerMessageViewModel.h"
#import "TGNeoLabelViewModel.h"
#import "TGNeoBubbleMessageViewModel.h"
#import "TGGeometry.h"
#import "TGBridgeContext.h"
#import "TGBridgeMessage.h"
#import "TGPeerIdAdapter.h"
const CGFloat TGNeoStickerMessageHeight38mm = 72.0f;
const CGFloat TGNeoStickerMessageHeight42mm = 84.0f;
@interface TGNeoStickerMessageViewModel ()
{
TGNeoLabelViewModel *_authorNameModel;
TGBridgeDocumentMediaAttachment *_documentAttachment;
bool _outgoing;
}
@end
@implementation TGNeoStickerMessageViewModel
- (instancetype)initWithMessage:(TGBridgeMessage *)message type:(TGNeoMessageType)type users:(NSDictionary *)users context:(TGBridgeContext *)context
{
self = [super initWithMessage:message type:type users:users context:context];
if (self != nil)
{
self.showBubble = false;
TGBridgeDocumentMediaAttachment *documentAttachment = nil;
for (TGBridgeMediaAttachment *attachment in message.media)
{
if ([attachment isKindOfClass:[TGBridgeDocumentMediaAttachment class]])
{
documentAttachment = (TGBridgeDocumentMediaAttachment *)attachment;
break;
}
}
_documentAttachment = documentAttachment;
_outgoing = message.outgoing;
if (message.cid < 0 && !TGPeerIdIsChannel(message.cid) && !message.outgoing)
{
_authorNameModel = [[TGNeoLabelViewModel alloc] initWithText:[users[@(message.fromUid)] displayName] font:[UIFont systemFontOfSize:14] color:[TGColor colorForUserId:(int32_t)message.fromUid myUserId:context.userId] attributes:nil];
[self addSubmodel:_authorNameModel];
}
}
return self;
}
- (CGSize)layoutWithContainerSize:(CGSize)containerSize
{
CGFloat textTopOffset = 0;
if (_authorNameModel != nil)
{
CGSize nameSize = [_authorNameModel contentSizeWithContainerSize:CGSizeMake(containerSize.width - TGNeoBubbleMessageViewModelInsets.left - TGNeoBubbleMessageViewModelInsets.right, FLT_MAX)];
_authorNameModel.frame = CGRectMake(TGNeoBubbleMessageViewModelInsets.left, floor(TGNeoBubbleMessageViewModelInsets.top / 2.0), nameSize.width, 16.5f);
textTopOffset += CGRectGetMaxY(_authorNameModel.frame) + TGNeoBubbleHeaderSpacing;
}
CGFloat stickerHeight = [TGNeoStickerMessageViewModel stickerHeightForScreenType:TGWatchScreenType()];
CGSize imageSize = TGFitSize(_documentAttachment.imageSize.CGSizeValue, CGSizeMake(containerSize.width / 2, stickerHeight));
UIEdgeInsets inset = UIEdgeInsetsMake(textTopOffset, 0, 0, 0);
if (_documentAttachment != nil)
{
[self addAdditionalLayout:@
{
TGNeoContentInset: [NSValue valueWithUIEdgeInsets:inset],
TGNeoMessageMediaImage: @
{
TGNeoMessageMediaImageAttachment: _documentAttachment,
TGNeoMessageMediaSize: [NSValue valueWithCGSize:imageSize]
}
} withKey:TGNeoMessageMediaGroup];
}
self.contentSize = CGSizeMake(MAX(CGRectGetMaxX(_authorNameModel.frame), imageSize.width), ceilf(imageSize.height) + textTopOffset + 2);
return self.contentSize;
}
+ (CGFloat)stickerHeightForScreenType:(TGScreenType)screenType
{
switch (screenType)
{
case TGScreenType38mm:
return TGNeoStickerMessageHeight38mm;
case TGScreenType42mm:
return TGNeoStickerMessageHeight42mm;
default:
return TGNeoStickerMessageHeight38mm;
}
}
@end