Skip to content
/ canvas Public
forked from tdewolff/canvas

Canvas for Ebitengine™: vector graphics for game development

License

Notifications You must be signed in to change notification settings

eihigh/canvas

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Canvas for Ebitengine™

This package is a fork of tdewolff/canvas containing changes for game development with Ebitengine. See Diffs from the original section for details.


Canvas

Go Reference User guide

Canvas is a common vector drawing target. It has a wide range of path manipulation functionality such as flattening, stroking and dashing implemented. Additionally, it has a text formatter and embeds and subsets fonts (TTF, OTF, WOFF, WOFF2, or EOT) or converts them to outlines. It can be considered a Cairo or node-canvas alternative in Go. See the example below in Figure 1 for an overview of the functionality.

Preview

Figure 1: top-left you can see text being fitted into a box, justified using Donald Knuth's linea breaking algorithm to stretch the spaces between words to fill the whole width. You can observe a variety of styles and text decorations applied. In the bottom-right the word "stroke" is being stroked and drawn as a path. Top-right we see a LaTeX formula that has been converted to a path. Left of that we see an ellipse showcasing precise dashing, notably the length of e.g. the short dash is equal wherever it is on the curve. Note that the dashes themselves are elliptical arcs as well (thus exactly precise even if magnified greatly). To the right we see a closed polygon of four points being smoothed by cubic Béziers that are smooth along the whole path, and the blue line on the left shows a smoothed open path. On the bottom you can see a rotated rasterized image.

Sponsors

Please see https://www.patreon.com/tdewolff for ways to contribute, otherwise please contact him directly!

Diffs from the original

This package has some additional features for the ebiten renderer, some removed features due to licensing issues or portability, and some minor changes.

ebiten renderer

Package renderers/ebiten is the new renderer. For more details, see the API document and the example.

Removed features

There are some removed features (below is the list) due to licensing issues or portability. Now all dependent libraries are MIT, BSD-3, or Apache2.0 licensed.

  • Bidi (FriBidi is LGPL licensed)
  • CGo harfbuzz (Pure Go harfbuzz will continue to be supported)
  • Those depending on github.com/golang/freetype which is FTL/GPL licensed
    • font.FromGoFreeType
    • renderers.GoChart
    • renderers.GonumPlot
    • Pure Go LaTeX (go-latex/latex)
    • Fyne renderer
  • OpenGL renderer (dependencies may be conflicted with Ebiten)

Minor changes

Due to some minor changes, compatibility with the original is not guaranteed.

  • The default coord system is CartesianIV (top-left corner is (0, 0))
  • LoadLocalFont uses github.com/flopp/go-findfont

Features

  • Path segment types: MoveTo, LineTo, QuadTo, CubeTo, ArcTo, Close
  • Precise path flattening, stroking, and dashing for all segment type uing papers (see below)
  • Smooth spline generation through points for open and closed paths
  • LaTeX to path conversion
  • Font formats support
    • SFNT (such as TTF, OTF, WOFF, WOFF2, EOT) supporting TrueType, CFF, and CFF2 tables
  • HarfBuzz for text shaping
  • Donald Knuth's line breaking algorithm for text layout
  • sRGB compliance (use SRGBColorSpace, only available for rasterizer)
  • Font rendering with gamma correction of 1.43 (WIP)
  • Rendering targets
    • Raster images (PNG, GIF, JPEG, TIFF, BMP, WEBP)
    • PDF
    • SVG and SVGZ
    • PS and EPS
    • HTMLCanvas

Documentation

API documentation

User guide

Examples

Street Map: the centre of Amsterdam is drawn from data loaded from the Open Street Map API.

Mauna-Loa CO2 conentration: using data from the Mauna-Loa observatory, carbon dioxide concentrations over time are drawn

Document: an example of a text document.

Gio: an example using the Gio backend.

TeX/PGF: an example showing the usage of the PGF (TikZ) LaTeX package as renderer in order to generated a PDF using LaTeX.

PDF: an example using the PDF backend.

Articles

Papers

License

Released under the MIT license.

About

Canvas for Ebitengine™: vector graphics for game development

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%