summaryrefslogtreecommitdiff
path: root/platform/macos/src/MGLCompassCell.m
diff options
context:
space:
mode:
Diffstat (limited to 'platform/macos/src/MGLCompassCell.m')
-rw-r--r--platform/macos/src/MGLCompassCell.m34
1 files changed, 34 insertions, 0 deletions
diff --git a/platform/macos/src/MGLCompassCell.m b/platform/macos/src/MGLCompassCell.m
new file mode 100644
index 0000000000..b3a4ad4544
--- /dev/null
+++ b/platform/macos/src/MGLCompassCell.m
@@ -0,0 +1,34 @@
+#import "MGLCompassCell.h"
+
+@implementation MGLCompassCell
+
+- (instancetype)init {
+ if (self = [super init]) {
+ self.sliderType = NSCircularSlider;
+ // A tick mark for each cardinal direction.
+ self.numberOfTickMarks = 4;
+ // This slider goes backwards!
+ self.minValue = -360;
+ self.maxValue = 0;
+ }
+ return self;
+}
+
+- (void)drawKnob:(NSRect)knobRect {
+ // Draw a red triangle pointing whichever way the slider is facing.
+ NSBezierPath *trianglePath = [NSBezierPath bezierPath];
+ [trianglePath moveToPoint:NSMakePoint(NSMinX(knobRect), NSMaxY(knobRect))];
+ [trianglePath lineToPoint:NSMakePoint(NSMaxX(knobRect), NSMaxY(knobRect))];
+ [trianglePath lineToPoint:NSMakePoint(NSMidX(knobRect), NSMinY(knobRect))];
+ [trianglePath closePath];
+ NSAffineTransform *transform = [NSAffineTransform transform];
+ [transform translateXBy:NSMidX(knobRect) yBy:NSMidY(knobRect)];
+ [transform scaleBy:0.8];
+ [transform rotateByDegrees:self.doubleValue];
+ [transform translateXBy:-NSMidX(knobRect) yBy:-NSMidY(knobRect)];
+ [trianglePath transformUsingAffineTransform:transform];
+ [[NSColor redColor] setFill];
+ [trianglePath fill];
+}
+
+@end