Skip to content

2.0.0-beta6

Latest

Choose a tag to compare

@github-actions github-actions released this 15 Jul 03:19

Added

  • Discoverability: GitHub topics set on the repository, and .spi.yml added for the Swift Package Index (documentation hosting for all three targets)
  • Examples gallery: six single-file drawings with SwiftUI #Previews under Examples/ (square spiral, fractal tree, Koch snowflake, circle rosette, filled star, waves), shown as a grid in the README's new Gallery section; swift run Examples regenerates the docs/examples/*.svg images from the same drawing code the previews use
  • Code coverage measurement in CI: the macOS test job now runs with --enable-code-coverage, exports lcov, and uploads to Codecov; coverage badge added to README
  • Release automation: pushing a version tag now creates the GitHub Release automatically, with that version's CHANGELOG section as release notes; the manual steps are documented in CONTRIBUTING.md
  • Linux support for TortoiseCore and TortoiseSVG, verified by a new CI job (swift:6.2 container) — the package manifest omits the SwiftUI-based TortoiseUI product and targets on Linux, so plain swift build / swift test work there out of the box
  • TortoiseState.applying(_:) — a pure state-transition reducer, now the single source of truth shared by Tortoise (recording) and CommandPlayer (replay). This removes the duplicated state math that could silently drift apart, and is also useful for custom renderers doing incremental replay
  • Community documents: CONTRIBUTING.md, CODE_OF_CONDUCT.md (Contributor Covenant 2.1), GitHub issue forms (bug report / feature request), and a pull request template

Changed

  • CI hardening: Xcode selection no longer pins a single point release (it picks the newest stable Xcode 26.x on the runner image), SwiftPM build directories are cached across runs, and release-mode compilation moved to its own parallel job so the test job no longer builds everything twice
  • Tortoise.heading and TortoiseState.heading are now always normalized to [0, 360), matching towards() and Python turtle — previously counterclockwise turns reported negative values (e.g. left(90) from north returned -90; it now returns 270)

Fixed

  • circle(radius:extent:) with a negative radius produced mathematically inconsistent results — the end position landed on the wrong side of the circle (a zero-extent arc even teleported the tortoise to the opposite side). It now matches Python turtle: the center sits to the tortoise's right and the sweep and turn directions flip, so the arc bends the other way
  • clear() while a fill is in progress now discards the in-progress fill (matching Python turtle): previously the pre-clear vertices leaked into the polygon completed by a later endFill(), resurrecting erased geometry — isFilling now also becomes false after clear(), and a fill started after a discarded one renders at the correct z-order in TortoiseCanvas
  • TortoiseCanvas: the TimelineView(.animation) schedule kept firing at display refresh rate after playback finished, redrawing an unchanged canvas and wasting CPU/battery — the schedule is now paused once playback completes, and resumes when new commands re-create the playback model
  • README: the installation snippet pointed at the v1 repository URL (temoki/TortoiseGraphics) and used from: "2.0.0", which cannot resolve prerelease tags — it now points at this repository, uses a prerelease-aware from: "2.0.0-beta1" requirement, and includes the required platforms declaration

Removed

  • Angle type from TortoiseCore — no API accepted or returned it; all angles in the public API are plain Double degrees

What's Changed

New Contributors

Full Changelog: 2.0.0-beta5...2.0.0-beta6