#import "../Header.h" // static BOOL IsEnabled(NSString *key) { return [[NSUserDefaults standardUserDefaults] boolForKey:key]; } static int contrastMode() { return [[NSUserDefaults standardUserDefaults] integerForKey:@"lcm"]; } static BOOL lowContrastMode() { return IsEnabled(@"lowContrastMode_enabled") && contrastMode() == 0; } static BOOL customContrastMode() { return IsEnabled(@"lowContrastMode_enabled") && contrastMode() == 1; } %group gLowContrastMode // Low Contrast Mode v1.4.2 (Compatible with only YouTube v16.05.7-v17.38.10) %hook UIColor + (UIColor *)whiteColor { // Dark Theme Color return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; } + (UIColor *)lightTextColor { return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; } + (UIColor *)placeholderTextColor { return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; } + (UIColor *)labelColor { return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; } + (UIColor *)secondaryLabelColor { return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; } + (UIColor *)tertiaryLabelColor { return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; } + (UIColor *)quaternaryLabelColor { return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00]; } %end %hook YTCommonColorPalette - (UIColor *)textPrimary { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)textSecondary { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)overlayTextPrimary { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)overlayTextSecondary { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)iconActive { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)iconActiveOther { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)brandIconActive { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)staticBrandWhite { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)overlayIconActiveOther { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } %end %hook YTColor + (UIColor *)white2 { return [UIColor whiteColor]; } + (UIColor *)white3 { return [UIColor whiteColor]; } + (UIColor *)white4 { return [UIColor whiteColor]; } + (UIColor *)white5 { return [UIColor whiteColor]; } %end %hook QTMColorGroup - (UIColor *)tint100 { return [UIColor whiteColor]; } - (UIColor *)tint300 { return [UIColor whiteColor]; } - (UIColor *)bodyTextColor { return [UIColor whiteColor]; } - (UIColor *)bodyTextColorOnLighterColor { return [UIColor whiteColor]; } - (UIColor *)bodyTextColorOnRegularColor { return [UIColor whiteColor]; } - (UIColor *)bodyTextColorOnDarkerColor { return [UIColor whiteColor]; } - (UIColor *)bodyTextColorOnAccentColor { return [UIColor whiteColor]; } - (UIColor *)bodyTextColorOnOnBrightAccentColor { return [UIColor whiteColor]; } - (UIColor *)lightBodyTextColor { return [UIColor whiteColor]; } - (UIColor *)buttonBackgroundColor { return [UIColor whiteColor]; } %end %hook YTQTMButton - (void)setImage:(UIImage *)image { UIImage *currentImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; [self setTintColor:[UIColor whiteColor]]; %orig(currentImage); } %end %hook UIExtendedSRGColorSpace - (void)setTextColor:(UIColor *)textColor { textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.9]; %orig(); } %end %hook VideoTitleLabel - (void)setTextColor:(UIColor *)textColor { textColor = [UIColor whiteColor]; %orig(textColor); } %end %hook UILabel + (void)load { @autoreleasepool { [[UILabel appearance] setTextColor:[UIColor whiteColor]]; } } - (void)setTextColor:(UIColor *)textColor { %log; textColor = [UIColor whiteColor]; %orig(textColor); } %end %hook UITextField - (void)setTextColor:(UIColor *)textColor { %log; textColor = [UIColor whiteColor]; %orig(textColor); } %end %hook UITextView - (void)setTextColor:(UIColor *)textColor { %log; textColor = [UIColor whiteColor]; %orig(textColor); } %end %hook UISearchBar - (void)setTextColor:(UIColor *)textColor { textColor = [UIColor whiteColor]; %orig(textColor); } %end %hook UISegmentedControl - (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state { NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; [modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; %orig(modifiedAttributes, state); } %end %hook UIButton - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state { color = [UIColor whiteColor]; %orig(color, state); } %end %hook UIBarButtonItem - (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state { NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; [modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; %orig(modifiedAttributes, state); } %end %hook NSAttributedString - (instancetype)initWithString:(NSString *)str attributes:(NSDictionary *)attrs { NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attrs]; [modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; return %orig(str, modifiedAttributes); } %end %hook CATextLayer - (void)setTextColor:(CGColorRef)textColor { %orig([UIColor whiteColor].CGColor); } %end %hook ASTextNode - (NSAttributedString *)attributedString { NSAttributedString *originalAttributedString = %orig; NSMutableAttributedString *newAttributedString = [originalAttributedString mutableCopy]; [newAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, newAttributedString.length)]; return newAttributedString; } %end %hook ASTextFieldNode - (void)setTextColor:(UIColor *)textColor { %orig([UIColor whiteColor]); } %end %hook ASTextView - (void)setTextColor:(UIColor *)textColor { %orig([UIColor whiteColor]); } %end %hook ASButtonNode - (void)setTextColor:(UIColor *)textColor { %orig([UIColor whiteColor]); } %end %end %group gCustomContrastMode // Custom Contrast Mode (Hex Color) %hook UIColor + (UIColor *)whiteColor { return hexColor; } + (UIColor *)lightTextColor { return hexColor; } + (UIColor *)placeholderTextColor { return hexColor; } + (UIColor *)labelColor { return hexColor; } + (UIColor *)secondaryLabelColor { return hexColor; } + (UIColor *)tertiaryLabelColor { return hexColor; } + (UIColor *)quaternaryLabelColor { return hexColor; } %end %hook YTCommonColorPalette - (UIColor *)textPrimary { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)textSecondary { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)overlayTextPrimary { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)overlayTextSecondary { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)iconActive { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)iconActiveOther { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)brandIconActive { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)staticBrandWhite { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } - (UIColor *)overlayIconActiveOther { return self.pageStyle == 1 ? [UIColor whiteColor] : %orig; } %end %hook YTColor + (UIColor *)white2 { return [UIColor whiteColor]; } + (UIColor *)white3 { return [UIColor whiteColor]; } + (UIColor *)white4 { return [UIColor whiteColor]; } + (UIColor *)white5 { return [UIColor whiteColor]; } %end %hook QTMColorGroup - (UIColor *)tint100 { return [UIColor whiteColor]; } - (UIColor *)tint300 { return [UIColor whiteColor]; } - (UIColor *)bodyTextColor { return [UIColor whiteColor]; } - (UIColor *)bodyTextColorOnLighterColor { return [UIColor whiteColor]; } - (UIColor *)bodyTextColorOnRegularColor { return [UIColor whiteColor]; } - (UIColor *)bodyTextColorOnDarkerColor { return [UIColor whiteColor]; } - (UIColor *)bodyTextColorOnAccentColor { return [UIColor whiteColor]; } - (UIColor *)bodyTextColorOnOnBrightAccentColor { return [UIColor whiteColor]; } - (UIColor *)lightBodyTextColor { return [UIColor whiteColor]; } - (UIColor *)buttonBackgroundColor { return [UIColor whiteColor]; } %end %hook YTQTMButton - (void)setImage:(UIImage *)image { UIImage *currentImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; [self setTintColor:[UIColor whiteColor]]; %orig(currentImage); } %end %hook UIExtendedSRGColorSpace - (void)setTextColor:(UIColor *)textColor { textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.9]; %orig(); } %end %hook VideoTitleLabel - (void)setTextColor:(UIColor *)textColor { textColor = [UIColor whiteColor]; %orig(textColor); } %end %hook UILabel + (void)load { @autoreleasepool { [[UILabel appearance] setTextColor:[UIColor whiteColor]]; } } - (void)setTextColor:(UIColor *)textColor { %log; textColor = [UIColor whiteColor]; %orig(textColor); } %end %hook UITextField - (void)setTextColor:(UIColor *)textColor { %log; textColor = [UIColor whiteColor]; %orig(textColor); } %end %hook UITextView - (void)setTextColor:(UIColor *)textColor { %log; textColor = [UIColor whiteColor]; %orig(textColor); } %end %hook UISearchBar - (void)setTextColor:(UIColor *)textColor { textColor = [UIColor whiteColor]; %orig(textColor); } %end %hook UISegmentedControl - (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state { NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; [modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; %orig(modifiedAttributes, state); } %end %hook UIButton - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state { color = [UIColor whiteColor]; %orig(color, state); } %end %hook UIBarButtonItem - (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state { NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; [modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; %orig(modifiedAttributes, state); } %end %hook NSAttributedString - (instancetype)initWithString:(NSString *)str attributes:(NSDictionary *)attrs { NSMutableDictionary *modifiedAttributes = [NSMutableDictionary dictionaryWithDictionary:attrs]; [modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; return %orig(str, modifiedAttributes); } %end %hook CATextLayer - (void)setTextColor:(CGColorRef)textColor { %orig([UIColor whiteColor].CGColor); } %end %hook ASTextNode - (NSAttributedString *)attributedString { NSAttributedString *originalAttributedString = %orig; NSMutableAttributedString *newAttributedString = [originalAttributedString mutableCopy]; [newAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, newAttributedString.length)]; return newAttributedString; } %end %hook ASTextFieldNode - (void)setTextColor:(UIColor *)textColor { %orig([UIColor whiteColor]); } %end %hook ASTextView - (void)setTextColor:(UIColor *)textColor { %orig([UIColor whiteColor]); } %end %hook ASButtonNode - (void)setTextColor:(UIColor *)textColor { %orig([UIColor whiteColor]); } %end %end # pragma mark - ctor %ctor { %init; if (lowContrastMode()) { %init(gLowContrastMode); } if (customContrastMode()) { %init(gCustomContrastMode); } }