This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.4 KiB
66 lines
1.4 KiB
/** |
|
* Copyright (c) 2015-present, Facebook, Inc. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
#import "ARTShape.h" |
|
|
|
@implementation ARTShape |
|
|
|
- (void)setD:(CGPathRef)d |
|
{ |
|
if (d == _d) { |
|
return; |
|
} |
|
[self invalidate]; |
|
CGPathRelease(_d); |
|
_d = CGPathRetain(d); |
|
} |
|
|
|
- (void)dealloc |
|
{ |
|
CGPathRelease(_d); |
|
} |
|
|
|
- (void)renderLayerTo:(CGContextRef)context |
|
{ |
|
if ((!self.fill && !self.stroke) || !self.d) { |
|
return; |
|
} |
|
|
|
CGPathDrawingMode mode = kCGPathStroke; |
|
if (self.fill) { |
|
if ([self.fill applyFillColor:context]) { |
|
mode = kCGPathFill; |
|
} else { |
|
CGContextSaveGState(context); |
|
CGContextAddPath(context, self.d); |
|
CGContextClip(context); |
|
[self.fill paint:context]; |
|
CGContextRestoreGState(context); |
|
if (!self.stroke) { |
|
return; |
|
} |
|
} |
|
} |
|
if (self.stroke) { |
|
CGContextSetStrokeColorWithColor(context, self.stroke); |
|
CGContextSetLineWidth(context, self.strokeWidth); |
|
CGContextSetLineCap(context, self.strokeCap); |
|
CGContextSetLineJoin(context, self.strokeJoin); |
|
ARTCGFloatArray dash = self.strokeDash; |
|
if (dash.count) { |
|
CGContextSetLineDash(context, 0, dash.array, dash.count); |
|
} |
|
if (mode == kCGPathFill) { |
|
mode = kCGPathFillStroke; |
|
} |
|
} |
|
|
|
CGContextAddPath(context, self.d); |
|
CGContextDrawPath(context, mode); |
|
} |
|
|
|
@end
|
|
|