swiftygfx/README.md

81 lines
3.2 KiB
Markdown

# SwiftyGFX
A swift graphics library intended for my [SwiftyOLED](https://github.com/3Qax/SwiftyOLED) library. Feel free to design API for it when creating display libraries using swift on arm.
## Documentation
### Coordinate system
This library uses iOS like coordinate system. The X axis is increasing to the right. The Y axis is increasing downwards.
### Primitives
Each of defined primitives conforms to _Drawable_ protocool. The library defines following groups of primitives:
#### Lines
The Bresenham's was used for drawing oblique lines. Even though you can draw horizontal and vertical lines with `ObliqueLine` class it is way faster to used either `HorizontalLine` or `VerticalLine` class.
```swift
ObliqueLine(from origin: Point, to endPoint: Point)
HorizontalLine(from origin: Point, to endPoint: Point)
HorizontalLine(from origin: Point, lenght: UInt)
VerticalLine(from origin: Point, to endPoint: Point)
VerticalLine(from origin: Point, lenght: UInt)
```
If you pass incorret values to `HorizontalLine` or `VerticalLine`, that is points with diffrent y coordinates or x coordinates accordingly, library will back up to using y or x of origin.
#### Rectangles
```swift
Rectangle(at origin: Point = Point(x: 0, y: 0), height: UInt, width: UInt)
Square(at origin: Point = Point(x: 0, y: 0), sideSize a: UInt)
```
#### Ellipses
```swift
Ellipse(at origin: Point = Point(x: 0, y: 0), yRadius: UInt, xRadius: UInt)
Ellipse(at origin: Point = Point(x: 0, y: 0), height: UInt, width: UInt)
Circle(at origin: Point = Point(x: 0, y: 0), radius: UInt)
Circle(at origin: Point = Point(x: 0, y: 0), width: UInt)
```
#### Triangles
```swift
Triangle(at origin: Point = Point(x: 0, y: 0), corner1: Point, corner2: Point, corner3: Point)
```
#### Text
If you do not specify the _pathToFont_ parameter the library will try to use _DejaVuSans_ font which is embeded into Raspbian. If that fails the library will try to get list of all installed fonts from `fontconfig` package and use the first one. If that fails library will raise fatalError.
```swift
Text(_ text: String, font pathToFont: String? = nil, at origin: Point = Point(x: 0, y: 0), pixelHeight: UInt32 = 16, pixelWidth: UInt32 = 16)
```
You can change text size by using one of two methods:
```swift
public func setPixel(height: UInt32, width: UInt32)
public func setChar(height: Int, width: Int, horizontalResolution: UInt32, verticalResolution: UInt32)
````
These two are just wrappers around `FT_Set_Pixel_Sizes` and `FT_Set_Char_Size` from FreeType 2 library. For more info go to it's documentation.
### Filling
The `Rectangle`, `Square`, `Ellipse`, `Circle`, `Triangle` types can be filled. This functionality is provided by `.fill()` and `.filled()` methods. Only diffrence is that `.filled()` returns a filled copy of object it's been called on.
### Rendering
The _Drawable_ protocool guarantes that for each object you can generate array of tuplets of integer and integer by calling `.generatePointsForDrawing()`. This effectively is array of points (each having X and Y coordinate). They can be passed to the display library of your choice and therefore be displayed.
## Contributing
Feel free to sugest changes, report bugs and issues, create pull requests.