Skip to content

Commit b0ed174

Browse files
Updated to v1.0.6
Fixed issue preventing CSColorPicker from launching in TweakSettings for some users Added CSBaseDisplayCell as a base implementation for display cells Added support for dynamic UIColors supporting hex strings, custom dynamic color picker coming soon Updated project automation
1 parent 4dbc4aa commit b0ed174

21 files changed

+347
-180
lines changed

CSColorPicker Resources/CSColorPicker/CSColorPicker.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
// Copyright (c) 2016 - 2019 CreatureCoding. All rights reserved.
44
//
55

6-
#import "UIColor+CSColorPicker.h"
7-
#import "NSString+CSColorPicker.h"
6+
#import "Categories/UIColor+CSColorPicker.h"
7+
#import "Categories/NSString+CSColorPicker.h"

CSColorPicker Resources/CSColorPicker/NSString+CSColorPicker.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@
1111
//
1212
@interface NSString (CSColorPicker)
1313

14+
//
15+
// same as csp_colorFromHexString: returning a dynamic color
16+
// if the hex string is not dynamic, this will fallback to cscp_colorFromHexString:
17+
// supported formats include 'l:RGB d:RGB', 'l:ARGB d:ARGB', 'l:RRGGBB d:RRGGBB', 'l:AARRGGBB d:AARRGGBB', 'l:RGB:0.500000 d:RGB:0.500000', 'l:RRGGBB:0.500000 d:RRGGBB:0.500000'
18+
// all formats work with or without #
19+
//
20+
+ (UIColor *)cscp_dynamicColorFromHexString:(NSString *)hexString;
21+
1422
//
1523
// returns a UIColor from the hex string eg [UIColor cscp_colorFromHexString:@"#FF0000"];
1624
// if the hex string is invalid, returns red
@@ -23,6 +31,11 @@
2331
// returns true if the string is a valid hex (will pass with or without #)
2432
+ (BOOL)cscp_isValidHexString:(NSString *)hexString;
2533

34+
//
35+
// returns a string dynamic hex string representation of the string instance
36+
//
37+
- (UIColor *)cscp_dynamicHexColor;
38+
2639
//
2740
// returns a string hex string representation of the string instance
2841
//

CSColorPicker Resources/CSColorPicker/UIColor+CSColorPicker.h

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Created by CreatureSurvive on 3/17/17.
33
// Copyright (c) 2016 - 2019 CreatureCoding. All rights reserved.
44
//
5-
65
#import <UIKit/UIKit.h>
76

87
@interface UIColor (CSColorPicker)
@@ -15,6 +14,16 @@
1514
//
1615
+ (UIColor *)cscp_colorFromHexString:(NSString *)hexString;
1716

17+
//
18+
// returns a NSString representation of a UIColor in hex format eg [UIColor cscp_dynamicHexStringFromColor:[UIColor redColor]]; outputs @"l:#FF0000 d:#FF0000"
19+
//
20+
+ (NSString *)cscp_dynamicHexStringFromColor: (UIColor *)color;
21+
22+
//
23+
// returns a NSString representation of a UIColor in hex format eg [UIColor cscp_dynamicHexStringFromColor:[UIColor redColor] alpha:YES]; outputs @"#l:FFFF0000 d:FFFF0000"
24+
//
25+
+ (NSString *)cscp_dynamicHexStringFromColor: (UIColor *)color alpha:(BOOL)include;
26+
1827
//
1928
// returns a NSString representation of a UIColor in hex format eg [UIColor cscp_hexStringFromColor:[UIColor redColor]]; outputs @"#FF0000"
2029
//
@@ -76,6 +85,16 @@
7685
//
7786
- (CGFloat)cscp_brightness;
7887

88+
//
89+
// the dynamic hexString value of the color instance
90+
//
91+
- (NSString *)cscp_dynamicHexString;
92+
93+
//
94+
// the dynamic hexString value of the color instance with alpha included
95+
//
96+
- (NSString *)cscp_dynamicHexStringWithAlpha;
97+
7998
//
8099
// the hexString value of the color instance
81100
//
416 KB
Binary file not shown.
-525 KB
Binary file not shown.

Makefile

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
ARCHS = armv7 armv7s arm64 arm64e
22
TARGET = iphone:clang:13.0:5.0
33

4-
GO_EASY_ON_ME = 0
4+
DEBUG = 1
55
FINALPACKAGE = 1
6-
DEBUG = 0
6+
LEAN_AND_MEAN = 1
7+
GO_EASY_ON_ME = 0
78

8-
PREFIX = $(THEOS)/toolchains/xcode11.xctoolchain/usr/bin/
9-
INSTALL_TARGET_PROCESSES = Preferences
9+
INSTALL_TARGET_PROCESSES = Preferences TweakSettings
1010

1111
include $(THEOS)/makefiles/common.mk
1212

@@ -20,9 +20,22 @@ $(LIBRARY_NAME)_CFLAGS += -fobjc-arc -I$(INCLUDES) -IPrefix.pch
2020

2121
include $(THEOS_MAKE_PATH)/library.mk
2222

23-
24-
# SUBPROJECTS += lcpshim
25-
# include $(THEOS_MAKE_PATH)/aggregate.mk
26-
2723
after-stage::
28-
$(ECHO_NOTHING)cp "$(THEOS_STAGING_DIR)/usr/lib/libCSColorPicker.dylib" "$(THEOS_PROJECT_DIR)/CSColorPicker Resources/libCSPreferences.dylib"$(ECHO_END)
24+
$(ECHO_NOTHING)mkdir -p "$(THEOS_STAGING_DIR)/usr/include/CSColorPicker"$(ECHO_END)
25+
$(ECHO_NOTHING)cp "$(THEOS_PROJECT_DIR)/source/CSColorPicker.h" "$(THEOS_STAGING_DIR)/usr/include/CSColorPicker/CSColorPicker.h"$(ECHO_END)
26+
$(ECHO_NOTHING)cp "$(THEOS_PROJECT_DIR)/source/Categories/UIColor+CSColorPicker.h" "$(THEOS_STAGING_DIR)/usr/include/CSColorPicker/UIColor+CSColorPicker.h"$(ECHO_END)
27+
$(ECHO_NOTHING)cp "$(THEOS_PROJECT_DIR)/source/Categories/NSString+CSColorPicker.h" "$(THEOS_STAGING_DIR)/usr/include/CSColorPicker/NSString+CSColorPicker.h"$(ECHO_END)
28+
29+
$(ECHO_NOTHING)mkdir -p "$(THEOS_PROJECT_DIR)/CSColorPicker Resources/CSColorPicker"$(ECHO_END)
30+
$(ECHO_NOTHING)cp "$(THEOS_STAGING_DIR)/usr/lib/libCSColorPicker.dylib" "$(THEOS_PROJECT_DIR)/CSColorPicker Resources/libCSColorPicker.dylib"$(ECHO_END)
31+
$(ECHO_NOTHING)cp "$(THEOS_PROJECT_DIR)/source/CSColorPicker.h" "$(THEOS_PROJECT_DIR)/CSColorPicker Resources/CSColorPicker/CSColorPicker.h"$(ECHO_END)
32+
$(ECHO_NOTHING)cp "$(THEOS_PROJECT_DIR)/source/Categories/UIColor+CSColorPicker.h" "$(THEOS_PROJECT_DIR)/CSColorPicker Resources/CSColorPicker/UIColor+CSColorPicker.h"$(ECHO_END)
33+
$(ECHO_NOTHING)cp "$(THEOS_PROJECT_DIR)/source/Categories/NSString+CSColorPicker.h" "$(THEOS_PROJECT_DIR)/CSColorPicker Resources/CSColorPicker/NSString+CSColorPicker.h"$(ECHO_END)
34+
$(ECHO_NOTHING)zip "$(THEOS_PROJECT_DIR)/CSColorPicker Resources.zip" "$(THEOS_PROJECT_DIR)/CSColorPicker Resources"$(ECHO_END)
35+
36+
$(ECHO_NOTHING)mkdir -p "$(THEOS)/include/CSColorPicker"$(ECHO_END)
37+
$(ECHO_NOTHING)cp "$(THEOS_STAGING_DIR)/usr/lib/libCSColorPicker.dylib" "$(THEOS)/lib/libCSColorPicker.dylib"$(ECHO_END)
38+
$(ECHO_NOTHING)cp "$(THEOS_PROJECT_DIR)/source/CSColorPicker.h" "$(THEOS)/include/CSColorPicker/CSColorPicker.h"$(ECHO_END)
39+
$(ECHO_NOTHING)cp "$(THEOS_PROJECT_DIR)/source/Categories/UIColor+CSColorPicker.h" "$(THEOS)/include/CSColorPicker/UIColor+CSColorPicker.h"$(ECHO_END)
40+
$(ECHO_NOTHING)cp "$(THEOS_PROJECT_DIR)/source/Categories/NSString+CSColorPicker.h" "$(THEOS)/include/CSColorPicker/NSString+CSColorPicker.h"$(ECHO_END)
41+

control

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package: com.creaturesurvive.libcscolorpicker
22
Name: libCSColorPicker
33
Pre-Depends: firmware (>= 7.0)
4-
Version: 1.0.5
4+
Version: 1.0.6
55
Architecture: iphoneos-arm
66
Description: A minimal color picker library for developers
77
Maintainer: CreatureSurvive <support@creaturecoding.com>

source/Categories/NSString+CSColorPicker.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@
1111
//
1212
@interface NSString (CSColorPicker)
1313

14+
//
15+
// same as csp_colorFromHexString: returning a dynamic color
16+
// if the hex string is not dynamic, this will fallback to cscp_colorFromHexString:
17+
// supported formats include 'l:RGB d:RGB', 'l:ARGB d:ARGB', 'l:RRGGBB d:RRGGBB', 'l:AARRGGBB d:AARRGGBB', 'l:RGB:0.500000 d:RGB:0.500000', 'l:RRGGBB:0.500000 d:RRGGBB:0.500000'
18+
// all formats work with or without #
19+
//
20+
+ (UIColor *)cscp_dynamicColorFromHexString:(NSString *)hexString;
21+
1422
//
1523
// returns a UIColor from the hex string eg [UIColor cscp_colorFromHexString:@"#FF0000"];
1624
// if the hex string is invalid, returns red
@@ -23,6 +31,11 @@
2331
// returns true if the string is a valid hex (will pass with or without #)
2432
+ (BOOL)cscp_isValidHexString:(NSString *)hexString;
2533

34+
//
35+
// returns a string dynamic hex string representation of the string instance
36+
//
37+
- (UIColor *)cscp_dynamicHexColor;
38+
2639
//
2740
// returns a string hex string representation of the string instance
2841
//

source/Categories/NSString+CSColorPicker.m

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#import "NSString+CSColorPicker.h"
77
#import <UIKit/UIColor.h>
8+
#import <UIKit/UITraitCollection.h>
89

910
struct CGFloat;
1011
@interface NSString (Private)
@@ -15,7 +16,45 @@ + (CGFloat)_cscp_colorComponentFrom:(NSString *)string start:(NSUInteger)start l
1516

1617
@implementation NSString (CSColorPicker)
1718

18-
+ (UIColor *)cscp_colorFromHexString:(NSString *)hexString {
19+
+ (UIColor *)cscp_dynamicColorFromHexString:(NSString *)hexString {
20+
21+
if (!hexString || !hexString.length) return [UIColor redColor];
22+
23+
if (![hexString containsString:@" "] || ![hexString.lowercaseString containsString:@"l:"] || ![hexString.lowercaseString containsString:@"d:"]) {
24+
return [self _cscp_colorFromHexString:hexString];
25+
}
26+
27+
NSArray *components = [hexString componentsSeparatedByString:@" "];
28+
29+
if (!components || !components.count) {
30+
return [self _cscp_colorFromHexString:hexString];
31+
}
32+
33+
UIColor *light = [self _cscp_colorFromHexString:[components.firstObject substringFromIndex:2]];
34+
35+
if (@available(iOS 13.0, *)) {
36+
UIColor *dark = [self _cscp_colorFromHexString:[components.lastObject substringFromIndex:2]];
37+
return [UIColor colorWithDynamicProvider:^UIColor * (UITraitCollection *traitCollection) {
38+
switch (traitCollection.userInterfaceStyle) {
39+
case UIUserInterfaceStyleUnspecified:
40+
case UIUserInterfaceStyleLight:
41+
return light;
42+
case UIUserInterfaceStyleDark:
43+
return dark;
44+
}
45+
return light;
46+
}];
47+
}
48+
49+
return light;
50+
51+
}
52+
53+
+ (UIColor *)cscp_colorFromHexString:(NSString *)hexString {
54+
return [self _cscp_colorFromHexString:hexString];
55+
}
56+
57+
+ (UIColor *)_cscp_colorFromHexString:(NSString *)hexString {
1958
NSString *colorString = [[hexString stringByReplacingOccurrencesOfString:@"#" withString:@""] uppercaseString];
2059
CGFloat alpha, red, blue, green;
2160

@@ -75,6 +114,10 @@ + (BOOL)cscp_isValidHexString:(NSString *)hexString {
75114
return (NSNotFound == [[[hexString stringByReplacingOccurrencesOfString:@"#" withString:@""] uppercaseString] rangeOfCharacterFromSet:hexChars].location);
76115
}
77116

117+
- (UIColor *)cscp_dynamicHexColor {
118+
return [NSString cscp_dynamicColorFromHexString:self];
119+
}
120+
78121
- (UIColor *)cscp_hexColor {
79122
return [NSString cscp_colorFromHexString:self];
80123
}

source/Categories/UIColor+CSColorPicker.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@
1414
//
1515
+ (UIColor *)cscp_colorFromHexString:(NSString *)hexString;
1616

17+
//
18+
// returns a NSString representation of a UIColor in hex format eg [UIColor cscp_dynamicHexStringFromColor:[UIColor redColor]]; outputs @"l:#FF0000 d:#FF0000"
19+
//
20+
+ (NSString *)cscp_dynamicHexStringFromColor: (UIColor *)color;
21+
22+
//
23+
// returns a NSString representation of a UIColor in hex format eg [UIColor cscp_dynamicHexStringFromColor:[UIColor redColor] alpha:YES]; outputs @"#l:FFFF0000 d:FFFF0000"
24+
//
25+
+ (NSString *)cscp_dynamicHexStringFromColor: (UIColor *)color alpha:(BOOL)include;
26+
1727
//
1828
// returns a NSString representation of a UIColor in hex format eg [UIColor cscp_hexStringFromColor:[UIColor redColor]]; outputs @"#FF0000"
1929
//
@@ -75,6 +85,16 @@
7585
//
7686
- (CGFloat)cscp_brightness;
7787

88+
//
89+
// the dynamic hexString value of the color instance
90+
//
91+
- (NSString *)cscp_dynamicHexString;
92+
93+
//
94+
// the dynamic hexString value of the color instance with alpha included
95+
//
96+
- (NSString *)cscp_dynamicHexStringWithAlpha;
97+
7898
//
7999
// the hexString value of the color instance
80100
//

0 commit comments

Comments
 (0)