[gtk/wip/otte/lottie: 2469/2503] WIP: pathbuilder: Add gsk_path_builder_add_rounded_rect()
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/lottie: 2469/2503] WIP: pathbuilder: Add gsk_path_builder_add_rounded_rect()
- Date: Tue, 13 Jul 2021 04:28:07 +0000 (UTC)
commit cc6e48e21a1b16a46cfffcc9429173cdedcf0f21
Author: Benjamin Otte <otte redhat com>
Date: Wed Dec 2 08:36:47 2020 +0100
WIP: pathbuilder: Add gsk_path_builder_add_rounded_rect()
It works, but does not use a custom contour yet.
gsk/gskpathbuilder.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++
gsk/gskpathbuilder.h | 4 ++++
2 files changed, 71 insertions(+)
---
diff --git a/gsk/gskpathbuilder.c b/gsk/gskpathbuilder.c
index d7d53c8441..a28898159f 100644
--- a/gsk/gskpathbuilder.c
+++ b/gsk/gskpathbuilder.c
@@ -353,6 +353,73 @@ gsk_path_builder_add_rect (GskPathBuilder *builder,
gsk_contour_get_start_end (contour, NULL, &builder->current_point);
}
+/**
+ * gsk_path_builder_add_rounded_rect:
+ * @self: a #GskPathBuilder
+ * @rect: the rounded rect
+ *
+ * Adds @rect as a new contour to the path built in @self.
+ **/
+void
+gsk_path_builder_add_rounded_rect (GskPathBuilder *self,
+ const GskRoundedRect *rect)
+{
+ const float weight = sqrt(0.5f);
+
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (rect != NULL);
+
+ gsk_path_builder_move_to (self,
+ rect->bounds.origin.x + rect->corner[GSK_CORNER_TOP_LEFT].width,
+ rect->bounds.origin.y);
+ /* top */
+ gsk_path_builder_line_to (self,
+ rect->bounds.origin.x + rect->bounds.size.width -
rect->corner[GSK_CORNER_TOP_RIGHT].width,
+ rect->bounds.origin.y);
+ /* topright corner */
+ gsk_path_builder_conic_to (self,
+ rect->bounds.origin.x + rect->bounds.size.width,
+ rect->bounds.origin.y,
+ rect->bounds.origin.x + rect->bounds.size.width,
+ rect->bounds.origin.y + rect->corner[GSK_CORNER_TOP_RIGHT].height,
+ weight);
+ /* right */
+ gsk_path_builder_line_to (self,
+ rect->bounds.origin.x + rect->bounds.size.width,
+ rect->bounds.origin.y + rect->bounds.size.height -
rect->corner[GSK_CORNER_BOTTOM_RIGHT].height);
+ /* bottomright corner */
+ gsk_path_builder_conic_to (self,
+ rect->bounds.origin.x + rect->bounds.size.width,
+ rect->bounds.origin.y + rect->bounds.size.height,
+ rect->bounds.origin.x + rect->bounds.size.width -
rect->corner[GSK_CORNER_BOTTOM_RIGHT].width,
+ rect->bounds.origin.y + rect->bounds.size.height,
+ weight);
+ /* bottom */
+ gsk_path_builder_line_to (self,
+ rect->bounds.origin.x + rect->corner[GSK_CORNER_BOTTOM_LEFT].width,
+ rect->bounds.origin.y + rect->bounds.size.height);
+ /* bottomleft corner */
+ gsk_path_builder_conic_to (self,
+ rect->bounds.origin.x,
+ rect->bounds.origin.y + rect->bounds.size.height,
+ rect->bounds.origin.x,
+ rect->bounds.origin.y + rect->bounds.size.height -
rect->corner[GSK_CORNER_BOTTOM_LEFT].height,
+ weight);
+ /* left */
+ gsk_path_builder_line_to (self,
+ rect->bounds.origin.x,
+ rect->bounds.origin.y + rect->corner[GSK_CORNER_TOP_LEFT].height);
+ /* topleft corner */
+ gsk_path_builder_conic_to (self,
+ rect->bounds.origin.x,
+ rect->bounds.origin.y,
+ rect->bounds.origin.x + rect->corner[GSK_CORNER_TOP_LEFT].width,
+ rect->bounds.origin.y,
+ weight);
+ /* done */
+ gsk_path_builder_close (self);
+}
+
/**
* gsk_path_builder_add_circle:
* @builder: a #GskPathBuilder
diff --git a/gsk/gskpathbuilder.h b/gsk/gskpathbuilder.h
index fbcac022fa..750f8133b8 100644
--- a/gsk/gskpathbuilder.h
+++ b/gsk/gskpathbuilder.h
@@ -25,6 +25,7 @@
#endif
+#include <gsk/gskroundedrect.h>
#include <gsk/gsktypes.h>
G_BEGIN_DECLS
@@ -55,6 +56,9 @@ GDK_AVAILABLE_IN_ALL
void gsk_path_builder_add_rect (GskPathBuilder *builder,
const graphene_rect_t *rect);
GDK_AVAILABLE_IN_ALL
+void gsk_path_builder_add_rounded_rect (GskPathBuilder *builder,
+ const GskRoundedRect *rect);
+GDK_AVAILABLE_IN_ALL
void gsk_path_builder_add_circle (GskPathBuilder *builder,
const graphene_point_t *center,
float radius);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]