From 80604dd73187d53c755e4929aa71022bf907467b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Ka=C5=A1par=20Jir=C3=A1sek?= Date: Mon, 30 Sep 2019 22:03:21 +0200 Subject: [PATCH] Add package description to README --- Documentation/SwiftLogo.png | Bin 0 -> 24868 bytes Documentation/SwiftLogo.swift | 22 +++++ README.md | 78 +++++++++++++++++- .../Path components/Transform.swift | 2 +- 4 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 Documentation/SwiftLogo.png create mode 100755 Documentation/SwiftLogo.swift diff --git a/Documentation/SwiftLogo.png b/Documentation/SwiftLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb97186cf167fba40a096e0f606ac7cb350917e GIT binary patch literal 24868 zcmdqI19xO$vj*C+Cgw~sv2Al=+jcs(ZA@%uVrSxsF|lpiHgC^&&OPU>b^pQbwf64a z`*qd3Ygaw>bcBMOI3oNvcmM!^C@CSL1OR|hf(}|(XwV(|6nbO;;EN61$peLM_r0 z8wjh5V(20eT8ZkO<}c}v3TvvUE%XN>CUa2bo%&vOTxMTpdVOYb9SV>+U1oy`mZVT5 zAN*`B9$!o~lpi~t_fDq-gVNCctPx>E*IrI)X-nE)eG@0T|RU;aKAux{yRB~2oLh<<5vx+10O&M*q@kU=1dbTX%QH0Y!pU7^A* z35OT%1|e8{?OtaMXwc5fQSF-yeN)$dX1$DJ*<>b>(sMY(SeO zyht_~7!ayNzUHYFG(~2T!lcSin13k!sy`9H2O$%_4%zx8z8{r{Ov*W#I8{wO*3u$bOGLQo#6sy^bbTK`Buz>)2r@Isq9mr4MsN0o z?~S5FjchBS)v+TJ@>zM?o_SS222h$|$hoFj@7xs+3`j}yxFn~8Ifkjql0=wV%zZ(IsB`0yQMJkt~?l;ffFsp z)HgcwwT?6t{cpHpA8bClZ6wS#nERLZ(C+Pk*BxKsW#3u~UUFv?d{kQ$ZaBB%2<(y0 zvM{KDAUPbOAIeS#i)_0Oaq|es{SZU~djsizsOt0_~LnSTT`)O*U;RsjfZ75DV? zDE#}WDlq^pjd)<2r{#W%!2IlkJ^I&19s6n zKZ}?Xz<&k(g%I|~k0V$JCLvl>o<68+LGO4%QoINuv^Z8$h+#3(aPahK+8@+$suFB< zP-Wu2KafZ$;%_Bj9AP}d?+6*mC8pXv6Iw^6Z#S*8eEZDXDQ}T+Am>b}$ zgxv~ck0kGiJt59Ta(}(!bT=@Pn}xI(b>hH8{hg_$l?fg1AE}k9M6&AB+Wz!LJni$W zedI(n-=bZ^tlpyJ{d%|y^`zrXr5AnKmw7e&#P&wC5#~oe1!o3{9VieWohC6vK1P^? zN)5LP7Y1v-H9IHkE=-D+E&`K}?EP&voU2c>uc!~PucHsW56K9-Hdll=Jx)g=ppX+S zRz-rEq>AF4{5yp%nM>kEeB)4x39=(3S2isX1F3p~TYPMMO+s!Q3}q_@Pow}@3~}CA zA#I6uL4y*#aw`>t3ST({TU>_7_%HfAHAUPq^U}xCnudmk%Eq?_a*K$@11nYF`7C$I zy}~J=~?iBefMuTa?_XhL^o(6Si?)4n}AMz#GGpW<3$0bL|N0$v>R|*
03a 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 literal 0 HcmV?d00001 diff --git a/Documentation/SwiftLogo.swift b/Documentation/SwiftLogo.swift new file mode 100755 index 0000000..1bc9a55 --- /dev/null +++ b/Documentation/SwiftLogo.swift @@ -0,0 +1,22 @@ +Path { + Move(to: CGPoint(x: 87.15, y: 15)) + Curve(to: CGPoint(x: 99.68, y: 68.36), control1: CGPoint(x: 99, y: 31.31), control2: CGPoint(x: 104.42, y: 51.03)) + Curve(to: CGPoint(x: 98.13, y: 73.09), control1: CGPoint(x: 99.24, y: 69.99), control2: CGPoint(x: 98.72, y: 71.57)) + Curve(to: CGPoint(x: 95.95, y: 71.76), control1: CGPoint(x: 97.56, y: 72.7), control2: CGPoint(x: 96.86, y: 72.28)) + Curve(to: CGPoint(x: 39.07, y: 24.85), control1: CGPoint(x: 95.95, y: 71.76), control2: CGPoint(x: 68.53, y: 54.77)) + Curve(to: CGPoint(x: 73.61, y: 68.36), control1: CGPoint(x: 38.39, y: 24.18), control2: CGPoint(x: 54.99, y: 48.65)) + Curve(to: CGPoint(x: 24.51, y: 30.97), control1: CGPoint(x: 64.8, y: 63.26), control2: CGPoint(x: 40.09, y: 45.25)) + Curve(to: CGPoint(x: 31.28, y: 40.15), control1: CGPoint(x: 26.54, y: 34.03), control2: CGPoint(x: 28.58, y: 37.43)) + Curve(to: CGPoint(x: 81.73, y: 92.83), control1: CGPoint(x: 44.15, y: 56.81), control2: CGPoint(x: 61.42, y: 77.2)) + Curve(to: CGPoint(x: 81.76, y: 92.86), control1: CGPoint(x: 81.74, y: 92.84), control2: CGPoint(x: 81.75, y: 92.85)) + Curve(to: CGPoint(x: 26.88, y: 92.83), control1: CGPoint(x: 67.47, y: 101.73), control2: CGPoint(x: 47.18, y: 102.38)) + Curve(to: CGPoint(x: 13, y: 84.34), control1: CGPoint(x: 21.8, y: 90.45), control2: CGPoint(x: 17.06, y: 87.73)) + Curve(to: CGPoint(x: 50.58, y: 116.62), control1: CGPoint(x: 21.46, y: 97.93), control2: CGPoint(x: 34.67, y: 109.83)) + Curve(to: CGPoint(x: 103.98, y: 115.99), control1: CGPoint(x: 70.24, y: 125.08), control2: CGPoint(x: 89.77, y: 124.23)) + Curve(to: CGPoint(x: 131.84, y: 123.09), control1: CGPoint(x: 110.9, y: 113.07), control2: CGPoint(x: 124.5, y: 108.66)) + Curve(to: CGPoint(x: 133.62, y: 117.78), control1: CGPoint(x: 132.55, y: 124.51), control2: CGPoint(x: 133.61, y: 122.19)) + Curve(to: CGPoint(x: 123.72, y: 91.48), control1: CGPoint(x: 133.6, y: 111.47), control2: CGPoint(x: 131.55, y: 101.3)) + Curve(to: CGPoint(x: 123.48, y: 91.18), control1: CGPoint(x: 123.64, y: 91.38), control2: CGPoint(x: 123.56, y: 91.28)) + Curve(to: CGPoint(x: 124.06, y: 89.1), control1: CGPoint(x: 123.69, y: 90.5), control2: CGPoint(x: 123.88, y: 89.8)) + Curve(to: CGPoint(x: 87.15, y: 15), control1: CGPoint(x: 130.83, y: 62.92), control2: CGPoint(x: 114.57, y: 31.65)) +} diff --git a/README.md b/README.md index 51119fb..a252b44 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,79 @@ # PathBuilder -A description of this package. +_Path builder_ is a complete function builder for lifting paths into the declarative SwiftUI world. This function can be used for elegant and short definition of paths. Missing documentation gaps in SwiftUI are filled in using the old but good CGMutablePath knowledge. + +## Motivation + +Just wanted to learn to implement function builders. And during playing with animated paths in SwiftUI found a perfect place to experiment. + +## Requirements + +- Xcode 11 or above +- Swift 5.1 or above +- iOS 13, macOS 10.15, watchOS 6.0, tvOS 13.0 or above + +## Installation + +Using Swift Package Manager in Xcode. + +## Usage + +### Examples + +With _PathBuilder_ you can write this to draw a triangle: + +```swift +Path { + Move(to: CGPoint(x: 50, y: 50)) + Line(to: CGPoint(x: 100, y: 100)) + Line(to: CGPoint(x: 0, y: 100)) + Close() +} +``` + +Instead of longer version: + +```swift +Path { p in + p.move(to: CGPoint(x: 50, y: 50)) + p.addLine(to: CGPoint(x: 100, y: 100)) + p.addLine(to: CGPoint(x: 0, y: 100)) + p.closeSubpath() +} +``` + +Drawing a Swift logo can be implemented like [this](Documentation/SwiftLogo.swift). + +![Swift logo path drawing using PathBuilder](Documentation/SwiftLogo.png) + +### Path components + +There are many basic path components present. You can create a new one by conforming to the `PathComponent` protocol. + +#### Elementary components + +- *Arc* – Adds an arc of a circle to the path, specified with a radius and angles. +- *Close* – Closes and completes a subpath in a path. +- *Curve* – Adds a cubic Bézier curve to the path, with the specified end point and control points. +- *Ellipse* – Adds an ellipse that fits inside the specified rectangle. +- *Line* – Appends a straight line segment from the current point to the specified point. +- *Lines* – Adds a sequence of connected straight-line segments to the path. +- *Move* – Begins a new subpath at the specified point. +- *QuadCurve* – Adds a quadratic Bézier curve to the path, with the specified end point and control point. +- *Rect* – Adds a set of rectangular subpaths to the path. +- *RelativeArc* – Adds an arc of a circle to the path, specified with a radius and a difference in angle. +- *RoundedRect* – Adds a subpath to the path, in the shape of a rectangle with rounded corners. +- *TangentArc* – Adds an arc of a circle to the path, specified with a radius and two tangent lines. + +#### Grouping components + +- *Subpath* – Groups and appends another subpath object to the path. +- *Transform* – Groups, transforms and appends another transformed subpath object to the path. + +## Contributing + +All contributions are welcome. + +Project was created by [Matěj Kašpar Jirásek](https://github.com/mkj-is). + +Project is licensed under [MIT license](LICENSE.txt). diff --git a/Sources/PathBuilder/Path components/Transform.swift b/Sources/PathBuilder/Path components/Transform.swift index bd74e5a..c8a90f0 100644 --- a/Sources/PathBuilder/Path components/Transform.swift +++ b/Sources/PathBuilder/Path components/Transform.swift @@ -1,6 +1,6 @@ import SwiftUI -/// Appends another transformed subpath object to the path. +/// Groups and appends another subpath object to the path. public struct Transform: PathComponent { private let transform: CGAffineTransform private let path: Path