PDFSettingsColorViewController.m 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. //
  2. // PDFSettingsColorViewController.m
  3. // PDFReader
  4. //
  5. // Copyright © 2014-2022 PDF Technologies, Inc. All Rights Reserved.
  6. //
  7. // The PDF Reader Sample applications are licensed with a modified BSD license.
  8. // Please see License for details. This notice may not be removed from this file.
  9. //
  10. #import "PDFSettingsColorViewController.h"
  11. @interface PDFViewColorSlider : UISlider
  12. @property (nonatomic,retain) CAGradientLayer *gradientLayer;
  13. - (void)setColors:(NSArray *)colors;
  14. @end
  15. @implementation PDFViewColorSlider
  16. - (instancetype)initWithCoder:(NSCoder *)aDecoder {
  17. if (self = [super initWithCoder:aDecoder]) {
  18. CAGradientLayer *gradientLayer = [CAGradientLayer layer];
  19. gradientLayer.cornerRadius = 2.0f;
  20. gradientLayer.startPoint = CGPointMake(0.0f, 0.5f);
  21. gradientLayer.endPoint = CGPointMake(1.0f, 0.5f);
  22. [self.layer addSublayer:gradientLayer];
  23. self.gradientLayer = gradientLayer;
  24. self.continuous = NO;
  25. self.minimumValue = 0;
  26. self.maximumValue = 1;
  27. self.minimumTrackTintColor = [UIColor clearColor];
  28. self.maximumTrackTintColor = [UIColor clearColor];
  29. }
  30. return self;
  31. }
  32. - (void)setColors:(NSArray *)colors {
  33. self.gradientLayer.colors = colors;
  34. }
  35. - (void)dealloc {
  36. [_gradientLayer release];
  37. [super dealloc];
  38. }
  39. - (void)layoutSubviews {
  40. [super layoutSubviews];
  41. CGRect rect = [self trackRectForBounds:self.bounds];
  42. rect.origin.y -= 5;
  43. rect.size.height += 10;
  44. self.gradientLayer.frame = rect;
  45. }
  46. @end
  47. @interface PDFSettingsColorViewController () <UIPopoverPresentationControllerDelegate>
  48. @property (nonatomic,assign) IBOutlet UIView *colorView;
  49. @property (nonatomic,assign) IBOutlet PDFViewColorSlider *hueSlider;
  50. @property (nonatomic,assign) IBOutlet PDFViewColorSlider *saturationSlider;
  51. @property (nonatomic,assign) IBOutlet PDFViewColorSlider *brightnessSlider;
  52. @property (nonatomic,assign) CGFloat hue;
  53. @property (nonatomic,assign) CGFloat saturation;
  54. @property (nonatomic,assign) CGFloat brightness;
  55. @end
  56. @implementation PDFSettingsColorViewController
  57. #pragma mark - Init Methods
  58. - (instancetype)initWithCoder:(NSCoder *)aDecoder {
  59. if (self = [super initWithCoder:aDecoder]) {
  60. _hue = 0;
  61. _saturation = 1;
  62. _brightness = 1;
  63. }
  64. return self;
  65. }
  66. - (void)dealloc {
  67. Block_release(_callback);
  68. [super dealloc];
  69. }
  70. #pragma mark - UIViewController Methods
  71. - (void)viewDidLoad {
  72. [super viewDidLoad];
  73. // Do any additional setup after loading the view.
  74. self.preferredContentSize = CGSizeMake(280, 320);
  75. self.colorView.layer.cornerRadius = self.colorView.bounds.size.width/2.0;
  76. self.colorView.superview.layer.cornerRadius = self.colorView.superview.bounds.size.width/2.0;
  77. self.colorView.superview.layer.borderWidth = 1;
  78. self.colorView.superview.layer.borderColor = [UIColor colorWithRed:197.0/255.0 green:197.0/255.0 blue:197.0/255.0 alpha:1.0].CGColor;
  79. [self reloadData];
  80. }
  81. - (IBAction)sliderValueChanged_Color:(id)sender {
  82. self.hue = self.hueSlider.value;
  83. self.saturation = self.saturationSlider.value;
  84. self.brightness = self.brightnessSlider.value;
  85. [self reloadData];
  86. if (self.callback) {
  87. self.callback();
  88. }
  89. }
  90. - (void)reloadData {
  91. self.hueSlider.value = self.hue;
  92. self.saturationSlider.value = self.saturation;
  93. self.brightnessSlider.value = self.brightness;
  94. [self.hueSlider setColors:@[(id)[[UIColor colorWithHue:0
  95. saturation:self.saturation
  96. brightness:self.brightness
  97. alpha:1] CGColor],
  98. (id)[[UIColor colorWithHue:0.25
  99. saturation:self.saturation
  100. brightness:self.brightness
  101. alpha:1] CGColor],
  102. (id)[[UIColor colorWithHue:0.5
  103. saturation:self.saturation
  104. brightness:self.brightness
  105. alpha:1] CGColor],
  106. (id)[[UIColor colorWithHue:0.75
  107. saturation:self.saturation
  108. brightness:self.brightness
  109. alpha:1] CGColor],
  110. (id)[[UIColor colorWithHue:1
  111. saturation:self.saturation
  112. brightness:self.brightness
  113. alpha:1] CGColor]]];
  114. [self.saturationSlider setColors:@[(id)[[UIColor colorWithHue:self.hue
  115. saturation:0
  116. brightness:self.brightness
  117. alpha:1] CGColor],
  118. (id)[[UIColor colorWithHue:self.hue
  119. saturation:1
  120. brightness:self.brightness
  121. alpha:1] CGColor]]];
  122. [self.brightnessSlider setColors:@[(id)[[UIColor colorWithHue:self.hue
  123. saturation:self.saturation
  124. brightness:0
  125. alpha:1] CGColor],
  126. (id)[[UIColor colorWithHue:self.hue
  127. saturation:self.saturation
  128. brightness:1
  129. alpha:1] CGColor]]];
  130. self.colorView.backgroundColor = [UIColor colorWithHue:self.hue saturation:self.saturation brightness:self.brightness alpha:1];
  131. }
  132. #pragma mark - Public Methods
  133. - (void)setColor:(UIColor *)color {
  134. if (color) {
  135. [color getHue:&_hue saturation:&_saturation brightness:&_brightness alpha:NULL];
  136. }
  137. }
  138. - (UIColor *)color {
  139. return [UIColor colorWithHue:self.hue saturation:self.saturation brightness:self.brightness alpha:1.0];
  140. }
  141. - (void)showViewController:(UIViewController *)viewController inRect:(CGRect)rect {
  142. self.modalPresentationStyle = UIModalPresentationPopover;
  143. UIPopoverPresentationController *popVC = self.popoverPresentationController;
  144. popVC.delegate = self;
  145. popVC.sourceRect = rect;
  146. popVC.sourceView = viewController.view;
  147. [viewController presentViewController:self animated:YES completion:nil];
  148. }
  149. #pragma mark - UIPopoverPresentationControllerDelegate
  150. - (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller traitCollection:(UITraitCollection *)traitCollection {
  151. return UIModalPresentationNone;
  152. }
  153. @end