Skip to content

Instantly share code, notes, and snippets.

@ericlewis
Created October 9, 2019 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ericlewis/b3016da31bca8fc968bf37be22706a16 to your computer and use it in GitHub Desktop.
Save ericlewis/b3016da31bca8fc968bf37be22706a16 to your computer and use it in GitHub Desktop.
class Page {
var layers: [Layer] = []
init?(data: Data) {
let header = String(bytes: data[0...32], encoding: .utf8)!.last!
let input = InputStream(data: data[43...])
input.open()
let bufferSize = 4
let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: bufferSize)
let _ = input.read(buffer, maxLength: bufferSize)
let numberOfLayers = buffer.toUInt32()
self.layers = (0..<numberOfLayers).map { _ in
let _ = input.read(buffer, maxLength: bufferSize)
let numberOfLines = buffer.toUInt32()
return Layer(lines: (0..<numberOfLines).map { _ in
let _ = input.read(buffer, maxLength: bufferSize)
let brush = buffer.toUInt32()
let _ = input.read(buffer, maxLength: bufferSize)
let color = buffer.toUInt32()
// padding
let _ = input.read(buffer, maxLength: bufferSize)
let _ = input.read(buffer, maxLength: bufferSize)
let baseBrushSize = buffer.toFloat32()
// padding (this 5 is a *barf*)
if header == "5" {
let _ = input.read(buffer, maxLength: bufferSize)
}
let _ = input.read(buffer, maxLength: bufferSize)
let numberOfPoints = buffer.toUInt32()
return Line(brush: brush, color: color, baseBrushSize: baseBrushSize, points: (0..<numberOfPoints).map { _ in
let _ = input.read(buffer, maxLength: bufferSize)
let x = buffer.toFloat32()
let _ = input.read(buffer, maxLength: bufferSize)
let y = buffer.toFloat32()
let _ = input.read(buffer, maxLength: bufferSize)
let speed = buffer.toFloat32()
let _ = input.read(buffer, maxLength: bufferSize)
let direction = buffer.toFloat32()
let _ = input.read(buffer, maxLength: bufferSize)
let width = buffer.toFloat32()
let _ = input.read(buffer, maxLength: bufferSize)
let pressure = buffer.toFloat32()
return Point(point: CGPoint(x: CGFloat(x), y: CGFloat(y)),
speed: speed,
direction: direction,
width: width,
pressure: pressure)
})
})
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment