Commit Graph

1414 Commits

Author SHA1 Message Date
Patrick Walton 5819b8dc60 Stop reallocating texture pages every frame 2020-04-17 11:50:46 -07:00
Patrick Walton 07ce2a2536 Add a scene field to render target IDs to reduce the chance of misuse 2020-04-16 16:54:52 -07:00
Patrick Walton 0b43f629cd Cache loaded fonts and glyph outlines.
Approximately a 70% CPU time improvement on the NanoVG demo.
2020-04-16 16:28:44 -07:00
Sebastian K 582f025c91 Update WebGL backend for recent changes 2020-04-16 12:02:42 -07:00
Patrick Walton afe1a64f68 Allow multiple tile pages.
Closes #151.
2020-04-15 20:13:37 -07:00
Patrick Walton 83c05e9f77 Improve the fidelity of the NanoVG demo some more 2020-04-14 18:49:47 -07:00
Patrick Walton 0fec0061e6 Clamp radial gradient t values to [0.0, 1.0] instead of rendering transparent
black
2020-04-14 16:13:32 -07:00
Patrick Walton b1d8e0526e Make some shadow blurs match the original NanoVG demo better 2020-04-14 16:13:12 -07:00
Patrick Walton 39f84b287d Make the paragraph color and line height in the NanoVG demo match the original
more
2020-04-14 15:21:01 -07:00
Patrick Walton 5efdf2a04a Implement the missing pieces of `TextMetrics` for canvas.
This required a `font-kit` upgrade, and with it a `skribo` upgrade.
2020-04-14 15:01:30 -07:00
Patrick Walton b9b1472b6c Resolve fill and stroke paints when filling and stroking text.
Makes text respect global alpha.
2020-04-14 10:08:11 -07:00
Patrick Walton 667a6c7c43 Fix definition of `TextBaseline::Middle` 2020-04-14 09:45:18 -07:00
Patrick Walton cdbe2fbb6b Introduce the concept of a base color in order to handle canvas shadow alpha
correctly
2020-04-13 18:31:25 -07:00
Patrick Walton fda9b8b9e1 Make the clip example match the NanoVG example 2020-04-11 19:08:20 -07:00
Patrick Walton 3e9558957f Add a shadow to the color wheel marker in the NanoVG demo 2020-04-11 19:08:00 -07:00
Patrick Walton def7da5de2 Remove obsolete TODOs in the NanoVG demo 2020-04-11 19:07:50 -07:00
Patrick Walton 15101e90dd Draw caret position in the NanoVG demo 2020-04-10 18:13:42 -07:00
Patrick Walton ca0e9e9e14 Draw the paragraph gutter in the NanoVG demo 2020-04-10 16:00:25 -07:00
Patrick Walton 4f1d376fe5 Refactor paragraph layout in the NanoVG demo; fix BG/FG draw order 2020-04-10 15:30:12 -07:00
Patrick Walton 4365b75629 Treat negative hues correctly in HSL. 2020-04-10 13:48:31 -07:00
Patrick Walton e598249186 Use column vector length to extract scale from matrices.
Closes #298.
2020-04-10 13:38:25 -07:00
Patrick Walton df08d76627 Make the color wheel animation in the NanoVG demo match NanoVG 2020-04-10 13:37:06 -07:00
Patrick Walton ca36fed47b Fix calculation of wallclock time in the NanoVG demo 2020-04-09 18:01:12 -07:00
Patrick Walton 47919db8f3 Fix frame time measurement in the GL backend, and add it to the NanoVG demo 2020-04-09 17:49:28 -07:00
Patrick Walton 19aa9c8e54 Only paint text backgrounds up to the appropriate width in the NanoVG demo 2020-04-09 12:33:16 -07:00
Patrick Walton a196f1eff8 Fix spriting imperfections in the thumbnails in the NanoVG 2020-04-09 12:15:39 -07:00
Patrick Walton 0211296128 Publish version 0.1 of `pathfinder_color` 2020-04-09 10:36:04 -07:00
Patrick Walton 0399061a70 Bump versions of `pathfinder_simd` and `pathfinder_geometry` 2020-04-09 10:31:18 -07:00
Patrick Walton 55f89c4ffa
Merge pull request #293 from pyfisch/canvas-reexport
Re-export necessary items in pathfinder-canvas
2020-04-09 10:29:39 -07:00
Patrick Walton 205a63340c
Merge pull request #296 from servo/jdm-patch-1
Add arm64 CI and fix build errors
2020-04-09 10:28:55 -07:00
Patrick Walton 895f73096e Switch back to instanced drawing for tiles.
Improves tile build time by something around 2x in the NanoVG demo.
2020-04-08 17:16:54 -07:00
Josh Matthews 3a8339fece
Allow dividing a Vector2F by an f32 value. 2020-04-07 15:36:46 -04:00
Josh Matthews 43adc9c24a
Fix arm I32x4 min/max operations that require on floating point values. 2020-04-07 15:35:03 -04:00
Josh Matthews e87b330123
Add min/max to i32x2. 2020-04-07 12:42:28 -04:00
Josh Matthews db205f71d6
Fix incorrect cast ordering in arm simd. 2020-04-07 12:31:28 -04:00
Josh Matthews f2b668f9d7
Add missing import. 2020-04-07 12:28:37 -04:00
Josh Matthews b28e04a22d
Install rustup target before building. 2020-04-07 12:06:26 -04:00
Josh Matthews fe80bad31b
Build with nightly on CI. 2020-04-07 11:53:50 -04:00
Josh Matthews a4c9b7ea3d
Only build certain crates. 2020-04-07 11:39:00 -04:00
Josh Matthews 22bab4f1e9
Add arm64 target with rustup. 2020-04-07 11:26:41 -04:00
Josh Matthews 2cd534609d
Add arm64 to CI. 2020-04-07 11:15:29 -04:00
Pyfisch dfb035dec0 Re-export necessary items in pathfinder-canvas
Export types need to use the canvas API from other pathfinder crates.
From pathfinder-color all types and convinience functions are exported.
From pathfinder-geometry only the 2D vector and rect types with
their convinience functions are exported.

Items from pathfinder-renderer are not re-exported as they also
belong to the back-end.
Pattern, while used in the canvas API, is not re-exported as
it is not needed for basic usage and depends on a lot of other types.

See #283
2020-04-04 14:06:40 +02:00
Patrick Walton 941abd202e Add the tooltip to the NanoVG demo 2020-04-03 15:38:14 -07:00
Patrick Walton 9d5dd7fd6a Make text respect clip, blend mode, and opacity 2020-04-03 15:37:59 -07:00
Patrick Walton b38f75a38d Add line widths to the NanoVG demo 2020-04-03 14:51:37 -07:00
Patrick Walton ad61b78e39 Remove box gradients from the NanoVG demo in favor of shadows 2020-04-03 14:33:00 -07:00
Patrick Walton bba6aab0fe Don't blur the entire canvas 2020-04-03 14:32:51 -07:00
Patrick Walton eb2b622615 Remove `draw_render_target()` in favor of the standard tile-based rendering
path
2020-04-03 13:05:53 -07:00
Patrick Walton cd37791d72 Implement the `drawImage()` method on canvas.
Closes #223.
2020-04-02 16:30:49 -07:00
Patrick Walton ba7fe4be39 Add the ability to merge scenes together, and expose it to the canvas API.
Closes #268.
2020-04-02 14:04:58 -07:00
Patrick Walton 5d43eedf20 Replace a drop shadow with a box gradient 2020-04-02 11:59:35 -07:00
Patrick Walton 404d536254 Add some more operators to rects and vectors 2020-04-02 11:59:11 -07:00
Patrick Walton 542d2c27fa Add `translate`, `rotate`, and `scale` methods to `CanvasRenderingContext2D`. 2020-04-02 11:40:53 -07:00
Sebastian K 29c6a2e428 Transform paints by the render transform 2020-04-02 11:17:03 -07:00
Patrick Walton 8f2fabbc47 Add icons to the NanoVG demo from Noto Emoji 2020-04-01 20:20:32 -07:00
Patrick Walton e05b5df562 Stop duplicating font names everywhere in the NanoVG demo 2020-04-01 17:31:16 -07:00
Patrick Walton da9b944e77 Clean up a few uses of `RectF::contract()` and `RectF::dilate()` 2020-04-01 17:27:08 -07:00
Patrick Walton 794dd55038 Add some implicit conversions between scalars and vectors where appropriate 2020-04-01 17:20:32 -07:00
Patrick Walton 40bd13aa5a Add convenience color construction methods 2020-04-01 16:37:36 -07:00
Patrick Walton ae97ccea5a Improve ergonomics of the canvas font interface, and use the right fonts in the
NanoVG demo.
2020-04-01 16:25:13 -07:00
Patrick Walton f823cb9474 Rename `SIL Open Font License.txt` to `LICENSE-SIL` for consistency 2020-04-01 13:24:07 -07:00
Patrick Walton 956b9020e8 Rename `overpass-regular.otf` to `Overpass-Regular.otf` 2020-04-01 13:22:29 -07:00
Patrick Walton cedc5595db Fix `canvas_moire` 2020-04-01 13:03:58 -07:00
Patrick Walton 3d71703950 Stop copying images every frame on CPU.
We can avoid reuploading them to the GPU every frame as well, but this is a
bigger, and easier, win for now.
2020-04-01 13:01:08 -07:00
Patrick Walton bf6890b341 Fix `canvas_minimal` 2020-03-31 20:21:27 -07:00
Patrick Walton 7c5c43b50f Use HiDPI and a larger window size in the NanoVG demo 2020-03-31 20:18:25 -07:00
Patrick Walton e6d8aab974 Don't draw backwards miters. 2020-03-31 19:38:43 -07:00
Patrick Walton 764953a643 Fix counterclockwise arc drawing logic 2020-03-31 17:59:41 -07:00
Patrick Walton bf2fd6569b Fix tests 2020-03-31 17:17:25 -07:00
Patrick Walton 32a56eab85 Stop leaking textures and framebuffers in the OpenGL backend.
Closes #264.

Possibly addresses #286.
2020-03-31 17:14:28 -07:00
Patrick Walton bbcd371efc Show the progress spinners behind thumbnail images in the NanoVG demo 2020-03-31 17:14:06 -07:00
Patrick Walton 2f6071c059 Make solid tiles not use mask 1.
Fixes random garbage appearing in the thumbnails in the NanoVG demo.
2020-03-31 14:16:04 -07:00
Patrick Walton 2db4cfcfed Uncomment round join code in the NanoVG demo now that it doesn't crash 2020-03-31 13:32:23 -07:00
Patrick Walton 40377d657a Prevent taking the square root of a negative number in the half-angle formula 2020-03-31 13:32:23 -07:00
Patrick Walton f142f045aa Detect coincident points and bail out of the line join code as necessary. 2020-03-31 13:31:22 -07:00
Patrick Walton c7ca630aad Search backward for a non-coincident point if the two ending points of a capped
stroke are coincident.

This prevents a divide by zero in normalization.
2020-03-31 13:29:47 -07:00
Patrick Walton 9212c742b7 Avoid taking the square root of a negative number in `arc_from_cos()`. 2020-03-31 13:28:55 -07:00
Patrick Walton df4021e3c5 Limit the number of trips through the round join loop.
This is a safety measure to prevent infinite loops.
2020-03-31 13:27:47 -07:00
Patrick Walton 93f5fbc6d2 Add convenience constructors: `vec2f`, `vec2i`, `Vector2F::zero()`,
`Vector2I::zero()`
2020-03-31 11:29:21 -07:00
Patrick Walton d83f54457c
Merge pull request #290 from s3bk/patch-1
add Contour::clear
2020-03-30 22:01:04 -07:00
Patrick Walton 4af74f225d Add support to canvas for the commonly-used `textBaseline` values 2020-03-30 22:00:13 -07:00
Patrick Walton 9a0fbe1d11 Flesh out the NanoVG demo yet more 2020-03-30 21:33:20 -07:00
Patrick Walton f1d7a0bfa3 Make the gradient construction methods more convenient 2020-03-30 21:32:55 -07:00
Patrick Walton 6d6b5191bb Clean up the `text` module inside `canvas` a bit 2020-03-30 21:32:30 -07:00
Patrick Walton e864536b31 Add a `From` implementation to `FillStyle` and use it in `canvas` for brevity 2020-03-30 21:31:18 -07:00
Patrick Walton f1d5906c9e Switch to my branch of `skribo` for much better `fill_text()` performance 2020-03-30 21:30:14 -07:00
Patrick Walton 7ac822bc2e Cache image hashes. 2020-03-30 16:48:01 -07:00
Patrick Walton cf78ac4569 Fix image pattern texture atlas logic. 2020-03-30 16:19:03 -07:00
Patrick Walton a1f0ae097a Add thumbnail images to the NanoVG demo 2020-03-30 16:18:41 -07:00
Patrick Walton 257067e368 Flesh out the NanoVG example even more 2020-03-28 12:45:23 -07:00
Sebastian cb91f40d7a
add Contour::clear 2020-03-28 19:22:39 +03:00
Patrick Walton ed2807eb84 Flesh out the NanoVG demo some more 2020-03-27 20:53:57 -07:00
Patrick Walton 9723fa441b Update `image`, `glutin`, and `jni` crates.
From #277.
2020-03-27 15:49:26 -07:00
Patrick Walton b6762cecb8 Don't include the closing segment when printing a path as a string.
Closes #279.
Closes #282.
2020-03-27 15:40:27 -07:00
Patrick Walton 6239356d89 Add a `Debug` impl for `Path2D` 2020-03-27 15:05:10 -07:00
Patrick Walton 6eb0232aad Add `precision highp sampler2D` everywhere so our winding numbers don't get clipped
Closes #280.
2020-03-27 14:53:00 -07:00
Patrick Walton 7b53cc6731 Close all subpaths right before filling them.
Closes #269.
2020-03-27 14:50:02 -07:00
Patrick Walton c258616bad Add `Path2D::add_path()` 2020-03-27 12:33:06 -07:00
Patrick Walton 15718d297c Add `Contour::with_capacity()` from #289 2020-03-27 10:06:56 -07:00
Patrick Walton b29ffdf3fa Add missing packed comparisons to the scalar implementation of `I32x2` 2020-03-27 10:04:42 -07:00