capi: unified the separate linear and gradient fill APIs

API Removal:
- Tvg_Result tvg_shape_set_stroke_linear_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)
- Tvg_Result tvg_shape_set_stroke_radial_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)
- Tvg_Result tvg_shape_set_shape_linear_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)
- Tvg_Result tvg_shape_set_shape_radial_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)

API Addition:
- Tvg_Result tvg_shape_set_stroke_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)
- Tvg_Result tvg_shape_set_shape_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)
This commit is contained in:
Hermet Park 2024-11-10 13:37:47 +09:00 committed by Hermet Park
parent 88a19b06f9
commit 6b2f18ffa2
5 changed files with 26 additions and 75 deletions

View file

@ -62,11 +62,11 @@ void contents()
Tvg_Gradient* grad1_stroke = tvg_gradient_duplicate(grad1); Tvg_Gradient* grad1_stroke = tvg_gradient_duplicate(grad1);
//Set a gradient fill //Set a gradient fill
tvg_shape_set_linear_gradient(shape1, grad1); tvg_shape_set_gradient(shape1, grad1);
//Set a gradient stroke //Set a gradient stroke
tvg_shape_set_stroke_width(shape1, 20.0f); tvg_shape_set_stroke_width(shape1, 20.0f);
tvg_shape_set_stroke_linear_gradient(shape1, grad1_stroke); tvg_shape_set_stroke_gradient(shape1, grad1_stroke);
tvg_shape_set_stroke_join(shape1, TVG_STROKE_JOIN_ROUND); tvg_shape_set_stroke_join(shape1, TVG_STROKE_JOIN_ROUND);
@ -114,7 +114,7 @@ void contents()
tvg_gradient_set_spread(grad2, TVG_STROKE_FILL_PAD); tvg_gradient_set_spread(grad2, TVG_STROKE_FILL_PAD);
//Set a gradient fill //Set a gradient fill
tvg_shape_set_radial_gradient(shape3, grad2); tvg_shape_set_gradient(shape3, grad2);
//Prepare a radial gradient for the stroke //Prepare a radial gradient for the stroke
uint32_t cnt; uint32_t cnt;
@ -131,7 +131,7 @@ void contents()
//Set a gradient stroke //Set a gradient stroke
tvg_shape_set_stroke_width(shape3, 30.0f); tvg_shape_set_stroke_width(shape3, 30.0f);
tvg_shape_set_stroke_radial_gradient(shape3, grad2_stroke); tvg_shape_set_stroke_gradient(shape3, grad2_stroke);
tvg_paint_set_opacity(shape3, 200); tvg_paint_set_opacity(shape3, 200);

View file

@ -1229,10 +1229,10 @@ TVG_API Tvg_Result tvg_shape_get_stroke_color(const Tvg_Paint* paint, uint8_t* r
/*! /*!
* \brief Sets the linear gradient fill of the stroke for all of the figures from the path. * \brief Sets the gradient fill of the stroke for all of the figures from the path.
* *
* \param[in] paint A Tvg_Paint pointer to the shape object. * \param[in] paint A Tvg_Paint pointer to the shape object.
* \param[in] grad The linear gradient fill. * \param[in] grad The gradient fill.
* *
* \return Tvg_Result enumeration. * \return Tvg_Result enumeration.
* \retval TVG_RESULT_INVALID_ARGUMENT An invalid Tvg_Paint pointer. * \retval TVG_RESULT_INVALID_ARGUMENT An invalid Tvg_Paint pointer.
@ -1240,22 +1240,7 @@ TVG_API Tvg_Result tvg_shape_get_stroke_color(const Tvg_Paint* paint, uint8_t* r
* *
* \note Either a solid color or a gradient fill is applied, depending on what was set as last. * \note Either a solid color or a gradient fill is applied, depending on what was set as last.
*/ */
TVG_API Tvg_Result tvg_shape_set_stroke_linear_gradient(Tvg_Paint* paint, Tvg_Gradient* grad); TVG_API Tvg_Result tvg_shape_set_stroke_gradient(Tvg_Paint* paint, Tvg_Gradient* grad);
/*!
* \brief Sets the radial gradient fill of the stroke for all of the figures from the path.
*
* \param[in] paint A Tvg_Paint pointer to the shape object.
* \param[in] grad The radial gradient fill.
*
* \return Tvg_Result enumeration.
* \retval TVG_RESULT_INVALID_ARGUMENT An invalid Tvg_Paint pointer.
* \retval TVG_RESULT_MEMORY_CORRUPTION An invalid Tvg_Gradient pointer or an error with accessing it.
*
* \note Either a solid color or a gradient fill is applied, depending on what was set as last.
*/
TVG_API Tvg_Result tvg_shape_set_stroke_radial_gradient(Tvg_Paint* paint, Tvg_Gradient* grad);
/*! /*!
@ -1477,12 +1462,12 @@ TVG_API Tvg_Result tvg_shape_set_paint_order(Tvg_Paint* paint, bool strokeFirst)
/*! /*!
* \brief Sets the linear gradient fill for all of the figures from the path. * \brief Sets the gradient fill for all of the figures from the path.
* *
* The parts of the shape defined as inner are filled. * The parts of the shape defined as inner are filled.
* *
* \param[in] paint A Tvg_Paint pointer to the shape object. * \param[in] paint A Tvg_Paint pointer to the shape object.
* \param[in] grad The linear gradient fill. * \param[in] grad The gradient fill.
* *
* \return Tvg_Result enumeration. * \return Tvg_Result enumeration.
* \retval TVG_RESULT_INVALID_ARGUMENT An invalid Tvg_Paint pointer. * \retval TVG_RESULT_INVALID_ARGUMENT An invalid Tvg_Paint pointer.
@ -1491,25 +1476,7 @@ TVG_API Tvg_Result tvg_shape_set_paint_order(Tvg_Paint* paint, bool strokeFirst)
* \note Either a solid color or a gradient fill is applied, depending on what was set as last. * \note Either a solid color or a gradient fill is applied, depending on what was set as last.
* \see tvg_shape_set_fill_rule() * \see tvg_shape_set_fill_rule()
*/ */
TVG_API Tvg_Result tvg_shape_set_linear_gradient(Tvg_Paint* paint, Tvg_Gradient* grad); TVG_API Tvg_Result tvg_shape_set_gradient(Tvg_Paint* paint, Tvg_Gradient* grad);
/*!
* \brief Sets the radial gradient fill for all of the figures from the path.
*
* The parts of the shape defined as inner are filled.
*
* \param[in] paint A Tvg_Paint pointer to the shape object.
* \param[in] grad The radial gradient fill.
*
* \return Tvg_Result enumeration.
* \retval TVG_RESULT_INVALID_ARGUMENT An invalid Tvg_Paint pointer.
* \retval TVG_RESULT_MEMORY_CORRUPTION An invalid Tvg_Gradient pointer.
*
* \note Either a solid color or a gradient fill is applied, depending on what was set as last.
* \see tvg_shape_set_fill_rule()
*/
TVG_API Tvg_Result tvg_shape_set_radial_gradient(Tvg_Paint* paint, Tvg_Gradient* grad);
/*! /*!

View file

@ -390,15 +390,7 @@ TVG_API Tvg_Result tvg_shape_get_stroke_color(const Tvg_Paint* paint, uint8_t* r
} }
TVG_API Tvg_Result tvg_shape_set_stroke_linear_gradient(Tvg_Paint* paint, Tvg_Gradient* gradient) TVG_API Tvg_Result tvg_shape_set_stroke_gradient(Tvg_Paint* paint, Tvg_Gradient* gradient)
{
if (!paint) return TVG_RESULT_INVALID_ARGUMENT;
return (Tvg_Result) reinterpret_cast<Shape*>(paint)->strokeFill((Fill*)(gradient));
}
//TODO: merge with tvg_shape_set_stroke_linear_gradient()
TVG_API Tvg_Result tvg_shape_set_stroke_radial_gradient(Tvg_Paint* paint, Tvg_Gradient* gradient)
{ {
if (!paint) return TVG_RESULT_INVALID_ARGUMENT; if (!paint) return TVG_RESULT_INVALID_ARGUMENT;
return (Tvg_Result) reinterpret_cast<Shape*>(paint)->strokeFill((Fill*)(gradient)); return (Tvg_Result) reinterpret_cast<Shape*>(paint)->strokeFill((Fill*)(gradient));
@ -516,15 +508,7 @@ TVG_API Tvg_Result tvg_shape_set_paint_order(Tvg_Paint* paint, bool strokeFirst)
} }
TVG_API Tvg_Result tvg_shape_set_linear_gradient(Tvg_Paint* paint, Tvg_Gradient* gradient) TVG_API Tvg_Result tvg_shape_set_gradient(Tvg_Paint* paint, Tvg_Gradient* gradient)
{
if (!paint) return TVG_RESULT_INVALID_ARGUMENT;
return (Tvg_Result) reinterpret_cast<Shape*>(paint)->fill((Fill*)gradient);
}
//TODO: merge with tvg_shape_set_linear_gradient()
TVG_API Tvg_Result tvg_shape_set_radial_gradient(Tvg_Paint* paint, Tvg_Gradient* gradient)
{ {
if (!paint) return TVG_RESULT_INVALID_ARGUMENT; if (!paint) return TVG_RESULT_INVALID_ARGUMENT;
return (Tvg_Result) reinterpret_cast<Shape*>(paint)->fill((Fill*)gradient); return (Tvg_Result) reinterpret_cast<Shape*>(paint)->fill((Fill*)gradient);

View file

@ -56,22 +56,22 @@ TEST_CASE("Linear Gradient start and end position", "[capiLinearGradient]")
TEST_CASE("Linear Gradient in shape", "[capiLinearGradient]") TEST_CASE("Linear Gradient in shape", "[capiLinearGradient]")
{ {
REQUIRE(tvg_shape_set_linear_gradient(NULL, NULL) == TVG_RESULT_INVALID_ARGUMENT); REQUIRE(tvg_shape_set_gradient(NULL, NULL) == TVG_RESULT_INVALID_ARGUMENT);
Tvg_Gradient *gradient = tvg_linear_gradient_new(); Tvg_Gradient *gradient = tvg_linear_gradient_new();
REQUIRE(gradient); REQUIRE(gradient);
REQUIRE(tvg_shape_set_linear_gradient(NULL, gradient) == TVG_RESULT_INVALID_ARGUMENT); REQUIRE(tvg_shape_set_gradient(NULL, gradient) == TVG_RESULT_INVALID_ARGUMENT);
Tvg_Paint *shape = tvg_shape_new(); Tvg_Paint *shape = tvg_shape_new();
REQUIRE(shape); REQUIRE(shape);
REQUIRE(tvg_shape_set_linear_gradient(shape, gradient) == TVG_RESULT_SUCCESS); REQUIRE(tvg_shape_set_gradient(shape, gradient) == TVG_RESULT_SUCCESS);
Tvg_Gradient *gradient_ret = NULL; Tvg_Gradient *gradient_ret = NULL;
REQUIRE(tvg_shape_get_gradient(shape, &gradient_ret) == TVG_RESULT_SUCCESS); REQUIRE(tvg_shape_get_gradient(shape, &gradient_ret) == TVG_RESULT_SUCCESS);
REQUIRE(gradient_ret); REQUIRE(gradient_ret);
REQUIRE(tvg_shape_set_linear_gradient(shape, NULL) == TVG_RESULT_MEMORY_CORRUPTION); REQUIRE(tvg_shape_set_gradient(shape, NULL) == TVG_RESULT_MEMORY_CORRUPTION);
REQUIRE(tvg_paint_del(shape) == TVG_RESULT_SUCCESS); REQUIRE(tvg_paint_del(shape) == TVG_RESULT_SUCCESS);
} }
@ -271,9 +271,9 @@ TEST_CASE("Stroke Linear Gradient", "[capiLinearGradient]")
REQUIRE(tvg_gradient_set_color_stops(gradient, color_stops, 2) == TVG_RESULT_SUCCESS); REQUIRE(tvg_gradient_set_color_stops(gradient, color_stops, 2) == TVG_RESULT_SUCCESS);
REQUIRE(tvg_shape_set_stroke_linear_gradient(NULL, NULL) == TVG_RESULT_INVALID_ARGUMENT); REQUIRE(tvg_shape_set_stroke_gradient(NULL, NULL) == TVG_RESULT_INVALID_ARGUMENT);
REQUIRE(tvg_shape_set_stroke_linear_gradient(NULL, gradient) == TVG_RESULT_INVALID_ARGUMENT); REQUIRE(tvg_shape_set_stroke_gradient(NULL, gradient) == TVG_RESULT_INVALID_ARGUMENT);
REQUIRE(tvg_shape_set_stroke_linear_gradient(shape, gradient) == TVG_RESULT_SUCCESS); REQUIRE(tvg_shape_set_stroke_gradient(shape, gradient) == TVG_RESULT_SUCCESS);
REQUIRE(tvg_shape_get_stroke_gradient(shape, &gradient_ret) == TVG_RESULT_SUCCESS); REQUIRE(tvg_shape_get_stroke_gradient(shape, &gradient_ret) == TVG_RESULT_SUCCESS);
REQUIRE(gradient_ret); REQUIRE(gradient_ret);

View file

@ -57,7 +57,7 @@ TEST_CASE("Set gradient center point and radius", "[capiRadialGradient]")
TEST_CASE("Set gradient in shape", "[capiRadialGradient]") TEST_CASE("Set gradient in shape", "[capiRadialGradient]")
{ {
REQUIRE(tvg_shape_set_radial_gradient(NULL, NULL) == TVG_RESULT_INVALID_ARGUMENT); REQUIRE(tvg_shape_set_gradient(NULL, NULL) == TVG_RESULT_INVALID_ARGUMENT);
Tvg_Gradient *gradient = tvg_radial_gradient_new(); Tvg_Gradient *gradient = tvg_radial_gradient_new();
REQUIRE(gradient); REQUIRE(gradient);
@ -65,14 +65,14 @@ TEST_CASE("Set gradient in shape", "[capiRadialGradient]")
Tvg_Paint *shape = tvg_shape_new(); Tvg_Paint *shape = tvg_shape_new();
REQUIRE(shape); REQUIRE(shape);
REQUIRE(tvg_shape_set_radial_gradient(NULL, gradient) == TVG_RESULT_INVALID_ARGUMENT); REQUIRE(tvg_shape_set_gradient(NULL, gradient) == TVG_RESULT_INVALID_ARGUMENT);
REQUIRE(tvg_shape_set_radial_gradient(shape, gradient) == TVG_RESULT_SUCCESS); REQUIRE(tvg_shape_set_gradient(shape, gradient) == TVG_RESULT_SUCCESS);
Tvg_Gradient *gradient_ret = NULL; Tvg_Gradient *gradient_ret = NULL;
REQUIRE(tvg_shape_get_gradient(shape, &gradient_ret) == TVG_RESULT_SUCCESS); REQUIRE(tvg_shape_get_gradient(shape, &gradient_ret) == TVG_RESULT_SUCCESS);
REQUIRE(gradient_ret); REQUIRE(gradient_ret);
REQUIRE(tvg_shape_set_radial_gradient(shape, NULL) == TVG_RESULT_MEMORY_CORRUPTION); REQUIRE(tvg_shape_set_gradient(shape, NULL) == TVG_RESULT_MEMORY_CORRUPTION);
REQUIRE(tvg_paint_del(shape) == TVG_RESULT_SUCCESS); REQUIRE(tvg_paint_del(shape) == TVG_RESULT_SUCCESS);
} }
@ -210,9 +210,9 @@ TEST_CASE("Stroke Radial Gradient", "[capiRadialGradient]")
REQUIRE(tvg_gradient_set_color_stops(gradient, color_stops, 2) == TVG_RESULT_SUCCESS); REQUIRE(tvg_gradient_set_color_stops(gradient, color_stops, 2) == TVG_RESULT_SUCCESS);
REQUIRE(tvg_shape_set_stroke_radial_gradient(NULL, NULL) == TVG_RESULT_INVALID_ARGUMENT); REQUIRE(tvg_shape_set_stroke_gradient(NULL, NULL) == TVG_RESULT_INVALID_ARGUMENT);
REQUIRE(tvg_shape_set_stroke_radial_gradient(NULL, gradient) == TVG_RESULT_INVALID_ARGUMENT); REQUIRE(tvg_shape_set_stroke_gradient(NULL, gradient) == TVG_RESULT_INVALID_ARGUMENT);
REQUIRE(tvg_shape_set_stroke_radial_gradient(shape, gradient) == TVG_RESULT_SUCCESS); REQUIRE(tvg_shape_set_stroke_gradient(shape, gradient) == TVG_RESULT_SUCCESS);
REQUIRE(tvg_shape_get_stroke_gradient(shape, &gradient_ret) == TVG_RESULT_SUCCESS); REQUIRE(tvg_shape_get_stroke_gradient(shape, &gradient_ret) == TVG_RESULT_SUCCESS);
REQUIRE(gradient_ret); REQUIRE(gradient_ret);