summaryrefslogtreecommitdiff
path: root/platform/ios/src/UIImage+MGLAdditions.mm
blob: d99a1f73ed15cf0c0114a1cf15ccad303ed6ad9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#import "UIImage+MGLAdditions.h"

#include <mbgl/util/image+MGLAdditions.hpp>

@implementation UIImage (MGLAdditions)

- (nullable instancetype)initWithMGLSpriteImage:(const mbgl::SpriteImage *)spriteImage
{
    CGImageRef image = CGImageFromMGLPremultipliedImage(spriteImage->image.clone());
    if (!image) {
        return nil;
    }

    if (self = [self initWithCGImage:image scale:spriteImage->pixelRatio orientation:UIImageOrientationUp])
    {
        if (spriteImage->sdf)
        {
            self = [self imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
        }
    }
    CGImageRelease(image);
    return self;
}

- (std::unique_ptr<mbgl::SpriteImage>)mgl_spriteImage {
    BOOL isTemplate = self.renderingMode == UIImageRenderingModeAlwaysTemplate;
    return std::make_unique<mbgl::SpriteImage>(MGLPremultipliedImageFromCGImage(self.CGImage),
                                               float(self.scale), isTemplate);
}

@end