Matthias Clasen
360b77cc50
curve: Add a vfunc for get_at_length
...
We can do this precisely for lines, so lets do it.
2023-08-29 22:09:59 -04:00
Matthias Clasen
90ee05ae64
gsk: Clean up standalone headers
...
We require folks to include gskglrenderer.h in order
to create a GL renderer. So we be careful to only
include header in gskglrenderer.h that won't trigger
ugly warnings.
See !6363
2023-08-29 12:58:30 -04:00
Matthias Clasen
f3312f677b
measure: Cosmetics
2023-08-28 21:14:28 -04:00
Matthias Clasen
05547d98d6
path: Cosmetics
...
Reorganize this source file into sections.
2023-08-28 21:13:58 -04:00
Matthias Clasen
11b219bc61
Drop tolerance from gsk_contour_foreach
...
There is no decomposition going on for any contours,
and the tolerance argument is entirely unused.
Decomposition and tolerance is handled entirely
in gskpath.c by its trampoline.
2023-08-28 20:52:22 -04:00
Matthias Clasen
827bbc0cc1
Change gsk_path_get_closest_point to return distance
...
We already compute it, so lets return it.
Bindings seems fine with this change - they
already return (success, point) as a tuple
anyway.
2023-08-28 11:22:30 -04:00
Matthias Clasen
5a3ed65ad8
Improve precondition checks for path points
...
Add a helper function for checking that a
path point is valid for a path, and use it.
2023-08-28 00:07:50 -04:00
Matthias Clasen
2e24a9ece4
Make GskPathPoint public
...
The contents are still /*< private >*/, but we
let our tests and the debugger see them, which
helps.
2023-08-28 00:07:50 -04:00
Matthias Clasen
2a17320314
Limit rect variation in path builder
...
Make gsk_path_builder_add_rect always
produce a clockwise rectangle. This matches
what we do for circles and rounded rects,
which also go clockwise. Note that we
still need to allow negative widths in
the contour code, to implement reverse().
2023-08-28 00:07:50 -04:00
Matthias Clasen
0dbff14555
Allow circles with radius of zero
...
Not very useful, but we allow rects with
width and height of zero, so lets be consistent.
Curvature is infinite for such contours.
Tests included.
2023-08-28 00:07:50 -04:00
Matthias Clasen
6f3be310f4
contour: Simplify gsk_circle_contour_foreach
...
Use the same approach as the rounded rect contour.
2023-08-27 21:31:40 -04:00
Matthias Clasen
2ca9982b91
rect contour: Avoid nans in corner cases
...
The length of rect contours can be zero,
so we much check before we divide.
2023-08-27 19:17:02 -04:00
Matthias Clasen
a40282b2fb
Add gsk_path_point_print
...
Another private debug API.
2023-08-27 19:06:39 -04:00
Matthias Clasen
ad9fb1e101
Improve quad and conic decomposition
...
If the control point is equal to either
start or end, just emit a line. This improves
the rendering of rounded rectangles with such
corners.
2023-08-27 16:57:03 -04:00
Matthias Clasen
02a9652af4
Use a more compact representation for circles
...
Print circles as M-o-o-o-o-z.
2023-08-27 14:32:21 -04:00
Matthias Clasen
0a28a5d53a
Add a rectangle contour
...
Add a contour that optimizes some things for
rectangles. Also add rectangle detection to the
path parser, and add tests similar to what we
have for the other special contours.
2023-08-27 12:36:56 -04:00
Matthias Clasen
1e6a124665
Correct the docs of gsk_path_builder_add_rect
...
The path does *not* always go clockwise!
2023-08-27 12:18:36 -04:00
Matthias Clasen
8d1844135b
path: Add a comment
2023-08-27 10:10:08 -04:00
Matthias Clasen
b5dd9dae0d
rounded rect contour: Fix an oversight
...
The close operation takes 2 points, so our array
was one too short. Oops.
2023-08-27 10:09:32 -04:00
Matthias Clasen
ebcb518e4f
Cosmetics
2023-08-27 09:50:16 -04:00
Matthias Clasen
b7ea22f168
Drop unused code
...
Nobody is calling gsk_contour_get_start_end, so drop
this internal API.
2023-08-27 09:39:59 -04:00
Matthias Clasen
822e988efe
path: Recognize rounded rects when parsing
...
We can look out for M-L-O-L-O-L-O-L-O-Z patterns
with matching numbers.
2023-08-27 09:31:17 -04:00
Matthias Clasen
cee043f977
Add a rounded rect contour
...
This special contour takes advantage of its
rounded-rect-ness for speeding up bounding
boxes and winding numbers. It falls back
to the standard contour code for everything
else.
2023-08-27 09:29:19 -04:00
Matthias Clasen
031c0ec3e5
pathpoint: Add some debug API
...
Add a private gsk_path_point_to_string that
can be called in the debugger if you want
to see the contents of a GskPathPoint and
are too lazy to cast it to GskRealPathPoint
yourself.
2023-08-27 09:14:47 -04:00
Matthias Clasen
ba3a657c48
contour: Add some debug API
...
Add a private way to get the class of a contour,
so we can test that roundtrips through gsk_path_parse
work as expected.
2023-08-27 09:13:32 -04:00
Matthias Clasen
5f2f116c28
circle contour: Fix a typo
2023-08-27 07:43:55 -04:00
Matthias Clasen
2297a353b8
Merge branch 'circle-contour' into 'main'
...
path: Add a circle contour
See merge request GNOME/gtk!6345
2023-08-27 11:12:51 +00:00
Bilal Elmoussaoui
7342ce5bca
gi: Add missing since annotation
2023-08-27 08:17:00 +00:00
Matthias Clasen
167b38dfa1
contour: Some reactoring
...
Make a default print implementation, and use it.
2023-08-26 23:42:52 -04:00
Matthias Clasen
b8a3d7fa00
path: Recognize circles when parsing
...
We can look out for the tell-tale
M-O-O-O-O-Z and turn it into a circle
contour.
2023-08-26 23:42:52 -04:00
Matthias Clasen
0fce24674a
path: Add a circle contour
...
This special contour takes advantage of the
circle definition to speed up things like
hit testing and closest point determination.
2023-08-26 23:42:52 -04:00
Matthias Clasen
99ad585252
Merge branch 'measure-speedups' into 'main'
...
contour: Stop doing the roundtrip test
See merge request GNOME/gtk!6342
2023-08-27 01:13:41 +00:00
Matthias Clasen
6defdb4e8a
Drop unused code
...
we are not using any gsk_spline functions currently.
2023-08-26 11:29:09 -04:00
Matthias Clasen
c989a06718
pathmeasure: compute samples on demand
...
Only do the work for a curve the first time
we need it. This should greatly speed up
use cases where you only create a measure
to get the length of the path.
2023-08-26 10:23:02 -04:00
Matthias Clasen
1c8bd8658d
curve: Cosmetics
2023-08-26 10:23:02 -04:00
Matthias Clasen
ab50cba4e9
curve: Reduce the order of our approximation
...
Use 24 samples instead of 32.
2023-08-26 10:23:02 -04:00
Matthias Clasen
57918813e2
contour: Stop doing the roundtrip test
...
Doing inverse arclength computations is
a very high overhead operation. And the
tests still pass without it.
2023-08-26 09:39:49 -04:00
Matthias Clasen
677e19042d
Docs: Cosmetics
2023-08-25 22:21:27 -04:00
Matthias Clasen
bd79f61cc5
pathpoint: Update the docs
...
We have gained some more ways of getting points.
2023-08-25 22:03:42 -04:00
Matthias Clasen
361cdecfe4
Merge branch 'path-measure-reredone' into 'main'
...
Add GskPathMeasure
See merge request GNOME/gtk!6326
2023-08-26 01:05:19 +00:00
Matthias Clasen
007cfeac94
Add GskPathMeasure
...
GskPathMeasure is the public API for path lengths.
2023-08-25 20:16:49 -04:00
Matthias Clasen
553499522c
contour: Add measure API
...
In order to compute path lengths efficiently, we need
to cache lookup tables. This commit adds API to let
contours allocate and free such measure data, as well
as API to use the data to go length -> point and
vice versa.
2023-08-25 20:16:49 -04:00
Benjamin Otte
81821978ae
Merge branch 'wip/otte/for-main' into 'main'
...
gltexture: Restore previous GL context
See merge request GNOME/gtk!6335
2023-08-25 21:44:17 +00:00
Matthias Clasen
04e6fc3f74
curve: Add length computation
...
Add api to go t<>length.
The code here is inspired by
https://pomax.github.io/bezierinfo/#arclength
2023-08-25 16:13:36 -04:00
Benjamin Otte
54d2f0063a
Merge branch 'replay' into 'main'
...
Node replay tests
See merge request GNOME/gtk!6299
2023-08-25 19:45:34 +00:00
Benjamin Otte
ae7ec40cf2
rendernodeparser: Generate better default child
...
... for fill and stroke nodes.
It's most likely we want the path bounds (or path stroke bounds),
so make the parser use those by default.
2023-08-25 21:12:12 +02:00
Matthias Clasen
eec90d1026
pathbuilder: Add rel-variants for arc-to
...
Add rel-variants for all our arc-to APIs. This is
a pretty harmless addition, and it is more consistent
to have these for all ..._to functions.
2023-08-25 09:45:45 -04:00
Matthias Clasen
f4fb4d04e5
Some pathbuilder doc clarifications
...
Mention the end point of the html arc-to call.
2023-08-25 09:37:07 -04:00
Matthias Clasen
3283157352
Bring arc_to back as convenience API
...
It is our main use of conics, so make it an API,
and use it internally.
2023-08-25 09:31:19 -04:00
Sergey Bugaev
d07a6b8566
snapshot, gsktransform: Mention that rotation happens around (0, 0)
...
...and not around the center of the render node, as one could expect
given that the render node syntax for rotation, transform: rotate(90);,
happens to match the CSS syntax for the same thing, and CSS does rotate
around the center by default.
Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
2023-08-25 15:54:05 +03:00