Metadata-Version: 2.1
Name: blackrenderer
Version: 0.3.0
Summary: A Python-based renderer for OpenType COLRv1 fonts, with multiple backends.
Home-page: https://github.com/BlackFoundryCom/black-renderer
Author: Black Foundry, Just van Rossum, Samuel Hornus
Author-email: justvanrossum@gmail.com
License: Apache Software License 2.0
Platform: UNKNOWN
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Provides-Extra: skia
Provides-Extra: cairo
Provides-Extra: cg
License-File: LICENSE.txt

[![Python package](https://github.com/BlackFoundryCom/black-renderer/actions/workflows/ci.yml/badge.svg)](https://github.com/BlackFoundryCom/black-renderer/actions/workflows/ci.yml)

# BlackRenderer

BlackRenderer is a Python-based renderer for OpenType COLR fonts, with multiple backends.
It supports the new COLRv1 format as well as the old COLR format.

![Big Smiley Face Icon](https://github.com/BlackFoundryCom/black-renderer/blob/master/smile.png?raw=true)

## Features

- It's a Python library called "blackrenderer"
- It's a command line tool called "blackrenderer"
- Renders individual glyphs or text strings
- Supports multiple backends:
  - Skia
  - Cairo
  - CoreGraphics (macOS)
  - SVG
  - outline extractor
  - bounding box calculator
- It uses fonttools to parse COLRv1 data
- The "blackrenderer" tool is an "hb-view"-like command line app with switchable
  backend, using HarfBuzz for shaping

## Tool usage example

BlackRenderer comes with an hb-view-like command line tool, that can be used like this:

    $ blackrenderer font.ttf ABC🤩 output.png --font-size=100

## Library usage example

The "blackrenderer" library has two main parts: the BlackRendererFont class,
and various backend classes. The main part of a backend is a Canvas class,
which is passed to a BlackRendererFont instance when drawing a glyph. Most
backends also have a Surface class, which is a generalized convenience class
to produce a canvas for a bitmap (or SVG document) for a specific box.

```python
from blackrenderer.font import BlackRendererFont
from blackrenderer.backends import getSurfaceClass

brFont = BlackRendererFont("my_colr_font.ttf")
surfaceClass = getSurfaceClass("skia")
glyphName = "A"
boundingBox = brFont.getGlyphBounds(glyphName)
surface = surfaceClass(boundingBox)
brFont.drawGlyph(glyphName, surface.canvas)
surface.saveImage("image.png")
```

Canvas objects support the following transformation methods:

- `canvas.translate(dx, dy)`
- `canvas.scale(sx, sy)`
- `canvas.transform((1, 0, 0, 1, 0, 0))`

## Install

If you have a Python 3 environment set up, then all you need to do is:

	$ pip install blackrenderer

## Install for contributing / setting up an environment

Have Python 3.7 or higher installed.

Open Terminal.

"cd" into the project repo directory.

Create a virtual environment:

- `$ python3 -m venv venv --prompt=black-renderer`

Activate the venv:

- `$ source venv/bin/activate`

(You need to activate the virtual environment for every new terminal session.)

Upgrade pip:

- `$ pip install --upgrade pip`

Install the requirements:

- `$ pip install -r requirements.txt`
- `$ pip install -r requirements-dev.txt`

Install blackrenderer in editable mode:

- `$ pip install -e .`

Run the tests:

- `$ pytest`

## Maintainers: how to release

To cut a release, make an annotated git tag, where the tag is in this format:
v1.2.3, where 1, 2 and 3 represent major, minor and micro version numbers.
You can add "aN" or "bN" or "rc" to mark alpha, beta or "release candidate"
versions. Examples: v1.2.3, v1.2.3b2, v1.2.3a4, v1.2.3rc.

The message for the annotated tag should contain the release notes.

Then use "git push --follow-tags" to trigger the release bot. Example session:

- `$ git tag -a v1.2.3 -m "v1.2.3 -- fixed issue #12345"`
- `$ git push --follow-tags`

This process will create a GitHub release, as well as upload the package to
PyPI.


