aboutsummaryrefslogtreecommitdiffstats
path: root/Frameworks/BWToolkitFramework.framework/NSColor+BWAdditions.m
diff options
context:
space:
mode:
Diffstat (limited to 'Frameworks/BWToolkitFramework.framework/NSColor+BWAdditions.m')
-rw-r--r--Frameworks/BWToolkitFramework.framework/NSColor+BWAdditions.m79
1 files changed, 79 insertions, 0 deletions
diff --git a/Frameworks/BWToolkitFramework.framework/NSColor+BWAdditions.m b/Frameworks/BWToolkitFramework.framework/NSColor+BWAdditions.m
new file mode 100644
index 00000000..4482bd16
--- /dev/null
+++ b/Frameworks/BWToolkitFramework.framework/NSColor+BWAdditions.m
@@ -0,0 +1,79 @@
+//
+// NSColor+PixelWideLines.m
+// BWToolkit
+//
+// Created by Brandon Walkin (www.brandonwalkin.com)
+// All code is provided under the New BSD license.
+//
+
+#import "NSColor+BWAdditions.h"
+
+@implementation NSColor (BWAdditions)
+
+// Use this method to draw 1 px wide lines independent of scale factor. Handy for resolution independent drawing. Still needs some work - there are issues with drawing at the edges of views.
+- (void)drawPixelThickLineAtPosition:(int)posInPixels withInset:(int)insetInPixels inRect:(NSRect)aRect inView:(NSView *)view horizontal:(BOOL)isHorizontal flip:(BOOL)shouldFlip
+{
+ // Convert the given rectangle from points to pixels
+ aRect = [view convertRectToBase:aRect];
+
+ // Round up the rect's values to integers
+ aRect = NSIntegralRect(aRect);
+
+ // Add or subtract 0.5 so the lines are drawn within pixel bounds
+ if (isHorizontal)
+ {
+ if ([view isFlipped])
+ aRect.origin.y -= 0.5;
+ else
+ aRect.origin.y += 0.5;
+ }
+ else
+ {
+ aRect.origin.x += 0.5;
+ }
+
+ NSSize sizeInPixels = aRect.size;
+
+ // Convert the rect back to points for drawing
+ aRect = [view convertRectFromBase:aRect];
+
+ // Flip the position so it's at the other side of the rect
+ if (shouldFlip)
+ {
+ if (isHorizontal)
+ posInPixels = sizeInPixels.height - posInPixels - 1;
+ else
+ posInPixels = sizeInPixels.width - posInPixels - 1;
+ }
+
+ float posInPoints = posInPixels / [[NSScreen mainScreen] userSpaceScaleFactor];
+ float insetInPoints = insetInPixels / [[NSScreen mainScreen] userSpaceScaleFactor];
+
+ // Calculate line start and end points
+ float startX, startY, endX, endY;
+
+ if (isHorizontal)
+ {
+ startX = aRect.origin.x + insetInPoints;
+ startY = aRect.origin.y + posInPoints;
+ endX = aRect.origin.x + aRect.size.width - insetInPoints;
+ endY = aRect.origin.y + posInPoints;
+ }
+ else
+ {
+ startX = aRect.origin.x + posInPoints;
+ startY = aRect.origin.y + insetInPoints;
+ endX = aRect.origin.x + posInPoints;
+ endY = aRect.origin.y + aRect.size.height - insetInPoints;
+ }
+
+ // Draw line
+ NSBezierPath *path = [NSBezierPath bezierPath];
+ [path setLineWidth:0.0f];
+ [path moveToPoint:NSMakePoint(startX,startY)];
+ [path lineToPoint:NSMakePoint(endX,endY)];
+ [self set];
+ [path stroke];
+}
+
+@end