Compare commits
1 Commits
shader-too
...
path-point
Author | SHA1 | Date | |
---|---|---|---|
|
e155c3fe36 |
@@ -1413,3 +1413,95 @@ error:
|
|||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gsk_path_get_position:
|
||||||
|
* @self: a `GskPath`
|
||||||
|
* @point: a `GskPathPoint` on @path
|
||||||
|
* @position: (out caller-allocates): Return location for
|
||||||
|
* the coordinates of the point
|
||||||
|
*
|
||||||
|
* Gets the position of the point.
|
||||||
|
*
|
||||||
|
* Since: 4.14
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gsk_path_get_position (GskPath *self,
|
||||||
|
const GskPathPoint *point,
|
||||||
|
graphene_point_t *position)
|
||||||
|
{
|
||||||
|
GskRealPathPoint *p = (GskRealPathPoint *) point;
|
||||||
|
|
||||||
|
g_return_if_fail (self != NULL);
|
||||||
|
g_return_if_fail (point != NULL);
|
||||||
|
g_return_if_fail (position != NULL);
|
||||||
|
g_return_if_fail (p->contour < self->n_contours);
|
||||||
|
|
||||||
|
gsk_contour_get_position (self->contours[p->contour], p, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gsk_path_get_tangent:
|
||||||
|
* @self: a `GskPath`
|
||||||
|
* @point: a `GskPathPoint` on @path
|
||||||
|
* @direction: the direction for which to return the tangent
|
||||||
|
* @tangent: (out caller-allocates): Return location for
|
||||||
|
* the tangent at the point
|
||||||
|
*
|
||||||
|
* Gets the tangent of the path at the point.
|
||||||
|
*
|
||||||
|
* Note that certain points on a path may not have a single
|
||||||
|
* tangent, such as sharp turns. At such points, there are
|
||||||
|
* two tangents -- the direction of the path going into the
|
||||||
|
* point, and the direction coming out of it. The @direction
|
||||||
|
* argument lets you choose which one to get.
|
||||||
|
*
|
||||||
|
* Since: 4.14
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gsk_path_get_tangent (GskPath *self,
|
||||||
|
const GskPathPoint *point,
|
||||||
|
GskPathDirection direction,
|
||||||
|
graphene_vec2_t *tangent)
|
||||||
|
{
|
||||||
|
GskRealPathPoint *p = (GskRealPathPoint *) point;
|
||||||
|
|
||||||
|
g_return_if_fail (self != NULL);
|
||||||
|
g_return_if_fail (point != NULL);
|
||||||
|
g_return_if_fail (tangent != NULL);
|
||||||
|
g_return_if_fail (p->contour < self->n_contours);
|
||||||
|
|
||||||
|
gsk_contour_get_tangent (self->contours[p->contour], p, direction, tangent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gsk_path_get_curvature:
|
||||||
|
* @self: a `GskPath`
|
||||||
|
* @point: a `GskPathPoint` on @path
|
||||||
|
* @center: (out caller-allocates) (nullable): Return location for
|
||||||
|
* the center of the osculating circle
|
||||||
|
*
|
||||||
|
* Calculates the curvature of the path at the point.
|
||||||
|
*
|
||||||
|
* Optionally, returns the center of the osculating circle as well.
|
||||||
|
*
|
||||||
|
* If the curvature is infinite (at line segments), zero is returned,
|
||||||
|
* and @center is not modified.
|
||||||
|
*
|
||||||
|
* Returns: The curvature of the path at the given point
|
||||||
|
*
|
||||||
|
* Since: 4.14
|
||||||
|
*/
|
||||||
|
float
|
||||||
|
gsk_path_get_curvature (GskPath *self,
|
||||||
|
const GskPathPoint *point,
|
||||||
|
graphene_point_t *center)
|
||||||
|
{
|
||||||
|
GskRealPathPoint *p = (GskRealPathPoint *) point;
|
||||||
|
|
||||||
|
g_return_val_if_fail (self != NULL, 0);
|
||||||
|
g_return_val_if_fail (point != NULL, 0);
|
||||||
|
g_return_val_if_fail (p->contour < self->n_contours, 0);
|
||||||
|
|
||||||
|
return gsk_contour_get_curvature (self->contours[p->contour], p, center);
|
||||||
|
}
|
||||||
|
@@ -125,6 +125,22 @@ gboolean gsk_path_get_closest_point (GskPath
|
|||||||
float threshold,
|
float threshold,
|
||||||
GskPathPoint *result);
|
GskPathPoint *result);
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_4_14
|
||||||
|
void gsk_path_get_position (GskPath *self,
|
||||||
|
const GskPathPoint *point,
|
||||||
|
graphene_point_t *position);
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_4_14
|
||||||
|
void gsk_path_get_tangent (GskPath *self,
|
||||||
|
const GskPathPoint *point,
|
||||||
|
GskPathDirection direction,
|
||||||
|
graphene_vec2_t *tangent);
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_4_14
|
||||||
|
float gsk_path_get_curvature (GskPath *self,
|
||||||
|
const GskPathPoint *point,
|
||||||
|
graphene_point_t *center);
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_4_14
|
GDK_AVAILABLE_IN_4_14
|
||||||
gboolean gsk_path_foreach (GskPath *self,
|
gboolean gsk_path_foreach (GskPath *self,
|
||||||
GskPathForeachFlags flags,
|
GskPathForeachFlags flags,
|
||||||
|
@@ -136,101 +136,3 @@ gsk_path_point_compare (const GskPathPoint *point1,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* gsk_path_point_get_position:
|
|
||||||
* @path: a `GskPath`
|
|
||||||
* @point: a `GskPathPoint` on @path
|
|
||||||
* @position: (out caller-allocates): Return location for
|
|
||||||
* the coordinates of the point
|
|
||||||
*
|
|
||||||
* Gets the position of the point.
|
|
||||||
*
|
|
||||||
* Since: 4.14
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
gsk_path_point_get_position (GskPath *path,
|
|
||||||
const GskPathPoint *point,
|
|
||||||
graphene_point_t *position)
|
|
||||||
{
|
|
||||||
GskRealPathPoint *self = (GskRealPathPoint *) point;
|
|
||||||
const GskContour *contour;
|
|
||||||
|
|
||||||
g_return_if_fail (path != NULL);
|
|
||||||
g_return_if_fail (point != NULL);
|
|
||||||
g_return_if_fail (position != NULL);
|
|
||||||
g_return_if_fail (self->contour < gsk_path_get_n_contours (path));
|
|
||||||
|
|
||||||
contour = gsk_path_get_contour (path, self->contour),
|
|
||||||
gsk_contour_get_position (contour, self, position);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gsk_path_point_get_tangent:
|
|
||||||
* @path: a `GskPath`
|
|
||||||
* @point: a `GskPathPoint` on @path
|
|
||||||
* @direction: the direction for which to return the tangent
|
|
||||||
* @tangent: (out caller-allocates): Return location for
|
|
||||||
* the tangent at the point
|
|
||||||
*
|
|
||||||
* Gets the tangent of the path at the point.
|
|
||||||
*
|
|
||||||
* Note that certain points on a path may not have a single
|
|
||||||
* tangent, such as sharp turns. At such points, there are
|
|
||||||
* two tangents -- the direction of the path going into the
|
|
||||||
* point, and the direction coming out of it. The @direction
|
|
||||||
* argument lets you choose which one to get.
|
|
||||||
*
|
|
||||||
* Since: 4.14
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
gsk_path_point_get_tangent (GskPath *path,
|
|
||||||
const GskPathPoint *point,
|
|
||||||
GskPathDirection direction,
|
|
||||||
graphene_vec2_t *tangent)
|
|
||||||
{
|
|
||||||
GskRealPathPoint *self = (GskRealPathPoint *) point;
|
|
||||||
const GskContour *contour;
|
|
||||||
|
|
||||||
g_return_if_fail (path != NULL);
|
|
||||||
g_return_if_fail (point != NULL);
|
|
||||||
g_return_if_fail (tangent != NULL);
|
|
||||||
g_return_if_fail (self->contour < gsk_path_get_n_contours (path));
|
|
||||||
|
|
||||||
contour = gsk_path_get_contour (path, self->contour),
|
|
||||||
gsk_contour_get_tangent (contour, self, direction, tangent);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gsk_path_point_get_curvature:
|
|
||||||
* @path: a `GskPath`
|
|
||||||
* @point: a `GskPathPoint` on @path
|
|
||||||
* @center: (out caller-allocates) (nullable): Return location for
|
|
||||||
* the center of the osculating circle
|
|
||||||
*
|
|
||||||
* Calculates the curvature of the path at the point.
|
|
||||||
*
|
|
||||||
* Optionally, returns the center of the osculating circle as well.
|
|
||||||
*
|
|
||||||
* If the curvature is infinite (at line segments), zero is returned,
|
|
||||||
* and @center is not modified.
|
|
||||||
*
|
|
||||||
* Returns: The curvature of the path at the given point
|
|
||||||
*
|
|
||||||
* Since: 4.14
|
|
||||||
*/
|
|
||||||
float
|
|
||||||
gsk_path_point_get_curvature (GskPath *path,
|
|
||||||
const GskPathPoint *point,
|
|
||||||
graphene_point_t *center)
|
|
||||||
{
|
|
||||||
GskRealPathPoint *self = (GskRealPathPoint *) point;
|
|
||||||
const GskContour *contour;
|
|
||||||
|
|
||||||
g_return_val_if_fail (path != NULL, 0);
|
|
||||||
g_return_val_if_fail (point != NULL, 0);
|
|
||||||
g_return_val_if_fail (self->contour < gsk_path_get_n_contours (path), 0);
|
|
||||||
|
|
||||||
contour = gsk_path_get_contour (path, self->contour);
|
|
||||||
return gsk_contour_get_curvature (contour, self, center);
|
|
||||||
}
|
|
||||||
|
@@ -56,21 +56,4 @@ GDK_AVAILABLE_IN_4_14
|
|||||||
int gsk_path_point_compare (const GskPathPoint *point1,
|
int gsk_path_point_compare (const GskPathPoint *point1,
|
||||||
const GskPathPoint *point2);
|
const GskPathPoint *point2);
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_4_14
|
|
||||||
void gsk_path_point_get_position (GskPath *path,
|
|
||||||
const GskPathPoint *point,
|
|
||||||
graphene_point_t *position);
|
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_4_14
|
|
||||||
void gsk_path_point_get_tangent (GskPath *path,
|
|
||||||
const GskPathPoint *point,
|
|
||||||
GskPathDirection direction,
|
|
||||||
graphene_vec2_t *tangent);
|
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_4_14
|
|
||||||
float gsk_path_point_get_curvature (GskPath *path,
|
|
||||||
const GskPathPoint *point,
|
|
||||||
graphene_point_t *center);
|
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
@@ -465,10 +465,10 @@ test_path_point (void)
|
|||||||
g_assert_true (rp->idx == 2);
|
g_assert_true (rp->idx == 2);
|
||||||
g_assert_true (rp->t == 1);
|
g_assert_true (rp->t == 1);
|
||||||
|
|
||||||
gsk_path_point_get_position (path, &point, &pos);
|
gsk_path_get_position (path, &point, &pos);
|
||||||
gsk_path_point_get_tangent (path, &point, GSK_PATH_START, &t1);
|
gsk_path_get_tangent (path, &point, GSK_PATH_START, &t1);
|
||||||
gsk_path_point_get_tangent (path, &point, GSK_PATH_END, &t2);
|
gsk_path_get_tangent (path, &point, GSK_PATH_END, &t2);
|
||||||
curvature = gsk_path_point_get_curvature (path, &point, ¢er);
|
curvature = gsk_path_get_curvature (path, &point, ¢er);
|
||||||
|
|
||||||
g_assert_true (graphene_point_equal (&pos, &GRAPHENE_POINT_INIT (100, 100)));
|
g_assert_true (graphene_point_equal (&pos, &GRAPHENE_POINT_INIT (100, 100)));
|
||||||
g_assert_true (graphene_vec2_equal (&t1, graphene_vec2_y_axis ()));
|
g_assert_true (graphene_vec2_equal (&t1, graphene_vec2_y_axis ()));
|
||||||
|
Reference in New Issue
Block a user