-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathASCIImageCommon.m
More file actions
96 lines (81 loc) · 3.86 KB
/
ASCIImageCommon.m
File metadata and controls
96 lines (81 loc) · 3.86 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//
// ASCIIImageCommon.m
//
// Created by Ben Turley on 5/29/15.
// Copyright (c) 2015 Ben Turley. All rights reserved.
//
#import "ASCIImageCommon.h"
#import "RCTConvert.h"
#define DEFAULT_COLOR [UIColor blackColor]
typedef enum {
kASCIIContextFillColor = 0,
kASCIIContextStrokeColor,
kASCIIContextLineWidth,
kASCIIContextShouldClose,
kASCIIContextShouldAntialias
} ASCIIContextKey;
@implementation ASCIImageCommon
RCT_EXPORT_MODULE()
RCT_EXPORT_METHOD(defaultImageDimensionsFromASCII:(NSArray*)ascii callback:(RCTResponseSenderBlock)dimensionsCallback)
{
NSArray *strictRep = [PARImage strictASCIIRepresentationFromLenientASCIIRepresentation:ascii];
NSNumber *width = [NSNumber numberWithFloat:[[strictRep firstObject] length]];
NSNumber *height = [NSNumber numberWithFloat:[strictRep count]];
dimensionsCallback(@[@[width, height]]);
}
+ (PARImage*)imageFromASCII:(NSArray*)ascii scaleFactor:(CGFloat)scale defaultColor:(UIColor*)color contextOptions:(NSArray*)contextOptions
{
return [PARImage imageWithASCIIRepresentation:ascii scaleFactor:scale contextHandler:^(NSMutableDictionary *context) {
// Default context options
UIColor *defaultColor = (color == nil) ? DEFAULT_COLOR : color;
[context setObject:defaultColor forKey:ASCIIContextFillColor];
[context setObject:defaultColor forKey:ASCIIContextStrokeColor];
[context setObject:[NSNumber numberWithFloat:1.0] forKey:ASCIIContextLineWidth];
[context setObject:[NSNumber numberWithBool:TRUE] forKey:ASCIIContextShouldClose];
[context setObject:[NSNumber numberWithBool:TRUE] forKey:ASCIIContextShouldAntialias];
// Override context options from user-supplied values
if (contextOptions != nil) {
NSInteger shapeIndex = [[context objectForKey:ASCIIContextShapeIndex] integerValue];
NSDictionary *optionsDict = (shapeIndex < [contextOptions count]) ? [contextOptions objectAtIndex:shapeIndex] : nil;
if (optionsDict != nil && [optionsDict isKindOfClass:[NSDictionary class]]) {
for (NSString *key in [optionsDict allKeys]) {
id optionValue = [optionsDict valueForKey:key];
if (optionValue != nil) {
switch ([[[self contextKeyMap] objectForKey:[[self javascriptKeyMap] objectForKey:key]] integerValue]) {
case kASCIIContextFillColor:
case kASCIIContextStrokeColor:
[context setObject:[RCTConvert UIColor:optionValue] forKey:[[self javascriptKeyMap] objectForKey:key]];
break;
case kASCIIContextLineWidth:
case kASCIIContextShouldClose:
case kASCIIContextShouldAntialias:
[context setObject:[RCTConvert NSNumber:optionValue] forKey:[[self javascriptKeyMap] objectForKey:key]];
break;
}
}
}
}
}
}];
}
+ (NSDictionary*)contextKeyMap
{
return @{
ASCIIContextFillColor : @(kASCIIContextFillColor),
ASCIIContextStrokeColor : @(kASCIIContextStrokeColor),
ASCIIContextLineWidth : @(kASCIIContextLineWidth),
ASCIIContextShouldClose : @(kASCIIContextShouldClose),
ASCIIContextShouldAntialias : @(kASCIIContextShouldAntialias)
};
}
+ (NSDictionary*)javascriptKeyMap
{
return @{
@"fillColor" : ASCIIContextFillColor,
@"strokeColor" : ASCIIContextStrokeColor,
@"lineWidth" : ASCIIContextLineWidth,
@"shouldClose" : ASCIIContextShouldClose,
@"shouldAntialias" : ASCIIContextShouldAntialias
};
}
@end