[cairo] [PATCH] Introduce cairo_has_current_point()

Alp Toker alp at atoker.com
Sat Feb 2 11:22:33 PST 2008


cairo_has_current_point() can be used to determine whether a current
point is defined. We introduce this new symbol with a boolean return
value to avoid the versioning ambiguity of modifying
cairo_get_current_point(). This way we also don't have to map what
should be a routine operation to an error condition as was previously
proposed.
---
 doc/public/cairo-sections.txt |    1 +
 src/cairo.c                   |   25 +++++++++++++++++++++++--
 src/cairo.h                   |    3 +++
 3 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/doc/public/cairo-sections.txt b/doc/public/cairo-sections.txt
index f7c838d..abfda0e 100644
--- a/doc/public/cairo-sections.txt
+++ b/doc/public/cairo-sections.txt
@@ -322,6 +322,7 @@ cairo_copy_path
 cairo_copy_path_flat
 cairo_path_destroy
 cairo_append_path
+cairo_has_current_point
 cairo_get_current_point
 cairo_new_path
 cairo_new_sub_path
diff --git a/src/cairo.c b/src/cairo.c
index 14bfdc0..fd65a34 100644
--- a/src/cairo.c
+++ b/src/cairo.c
@@ -3245,6 +3245,26 @@ cairo_get_antialias (cairo_t *cr)
 }
 
 /**
+ * cairo_has_current_point:
+ * @cr: a cairo context
+ *
+ * Returns whether a current point is defined on the current path.
+ * See cairo_get_current_point() for details on the current point.
+ *
+ * Return value: whether a current point is defined.
+ *
+ * Since: 1.6
+ **/
+cairo_bool_t
+cairo_has_current_point (cairo_t *cr)
+{
+    if (cr->status)
+    return FALSE;
+
+    return cr->path->has_current_point;
+}
+
+/**
  * cairo_get_current_point:
  * @cr: a cairo context
  * @x: return value for X coordinate of the current point
@@ -3254,8 +3274,9 @@ cairo_get_antialias (cairo_t *cr)
  * conceptually the final point reached by the path so far.
  *
  * The current point is returned in the user-space coordinate
- * system. If there is no defined current point then @x and @y will
- * both be set to 0.0.
+ * system. If there is no defined current point or if @cr is in an
+ * error status, @x and @y will both be set to 0.0. It is possible to
+ * check this in advance with cairo_has_current_point().
  *
  * Most path construction functions alter the current point. See the
  * following for details on how they affect the current point:
diff --git a/src/cairo.h b/src/cairo.h
index 01a6a2e..0c244ba 100644
--- a/src/cairo.h
+++ b/src/cairo.h
@@ -1276,6 +1276,9 @@ cairo_get_tolerance (cairo_t *cr);
 cairo_public cairo_antialias_t
 cairo_get_antialias (cairo_t *cr);
 
+cairo_public cairo_bool_t
+cairo_has_current_point (cairo_t *cr);
+
 cairo_public void
 cairo_get_current_point (cairo_t *cr, double *x, double *y);
 
-- 
1.5.4.2.g41ac4



More information about the cairo mailing list