[librsvg] pattern.rs: Remove rsvg_pattern_node_has_children(); implement in Rust
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] pattern.rs: Remove rsvg_pattern_node_has_children(); implement in Rust
- Date: Wed, 1 Mar 2017 01:09:51 +0000 (UTC)
commit e440ddfd00ee8ffb2810e441a3eb618afb37199a
Author: Federico Mena Quintero <federico gnome org>
Date: Tue Feb 28 19:08:20 2017 -0600
pattern.rs: Remove rsvg_pattern_node_has_children(); implement in Rust
node.rs: Make Node.children public
rsvg-paint-server.c | 27 ---------------------------
rsvg-paint-server.h | 3 ---
rust/src/node.rs | 10 +++++-----
rust/src/pattern.rs | 14 ++++++++++----
4 files changed, 15 insertions(+), 39 deletions(-)
---
diff --git a/rsvg-paint-server.c b/rsvg-paint-server.c
index 0130825..807373f 100644
--- a/rsvg-paint-server.c
+++ b/rsvg-paint-server.c
@@ -566,30 +566,3 @@ rsvg_pattern_node_to_rust_pattern (RsvgNode *node)
return pattern;
}
-
-static gboolean
-count_one_child_fn (RsvgNode *child, gpointer data)
-{
- gboolean *has_children = data;
-
- *has_children = TRUE;
- return FALSE;
-}
-
-static gboolean
-node_has_at_least_one_child (RsvgNode *node)
-{
- gboolean has_children = FALSE;
-
- rsvg_node_foreach_child (node, count_one_child_fn, &has_children);
- return has_children;
-}
-
-gboolean
-rsvg_pattern_node_has_children (RsvgNode *node)
-{
- if (rsvg_node_get_type (node) != RSVG_NODE_TYPE_PATTERN)
- return FALSE;
-
- return node_has_at_least_one_child (node);
-}
diff --git a/rsvg-paint-server.h b/rsvg-paint-server.h
index d952972..25df375 100644
--- a/rsvg-paint-server.h
+++ b/rsvg-paint-server.h
@@ -176,9 +176,6 @@ gboolean pattern_resolve_fallbacks_and_set_pattern (Pattern *pattern,
G_GNUC_INTERNAL
Pattern *rsvg_pattern_node_to_rust_pattern (RsvgNode *node);
-G_GNUC_INTERNAL
-gboolean rsvg_pattern_node_has_children (RsvgNode *node);
-
struct _RsvgSolidColor {
gboolean currentcolor;
diff --git a/rust/src/node.rs b/rust/src/node.rs
index dfcc2b0..4498972 100644
--- a/rust/src/node.rs
+++ b/rust/src/node.rs
@@ -36,11 +36,11 @@ pub trait NodeTrait: Downcast {
impl_downcast! (NodeTrait);
pub struct Node {
- node_type: NodeType,
- parent: Option<Weak<Node>>, // optional; weak ref to parent
- children: RefCell<Vec<Rc<Node>>>, // strong references to children
- state: *mut RsvgState,
- node_impl: Box<NodeTrait>
+ node_type: NodeType,
+ parent: Option<Weak<Node>>, // optional; weak ref to parent
+ pub children: RefCell<Vec<Rc<Node>>>, // strong references to children
+ state: *mut RsvgState,
+ node_impl: Box<NodeTrait>
}
/* Keep this in sync with rsvg-private.h:RsvgNodeType */
diff --git a/rust/src/pattern.rs b/rust/src/pattern.rs
index 897961f..f4c1b72 100644
--- a/rust/src/pattern.rs
+++ b/rust/src/pattern.rs
@@ -10,7 +10,7 @@ use length::*;
use drawing_ctx;
use drawing_ctx::RsvgDrawingCtx;
-use node::RsvgNode;
+use node::*;
use bbox::*;
use util::*;
@@ -39,11 +39,17 @@ pub struct Pattern {
extern "C" {
fn rsvg_pattern_node_to_rust_pattern (node: *const RsvgNode) -> *mut Pattern;
- fn rsvg_pattern_node_has_children (node: *const RsvgNode) -> bool;
}
-fn pattern_node_has_children (c_node: *const RsvgNode) -> bool {
- unsafe { rsvg_pattern_node_has_children (c_node) }
+fn pattern_node_has_children (raw_node: *const RsvgNode) -> bool {
+ assert! (!raw_node.is_null ());
+ let node: &RsvgNode = unsafe { & *raw_node };
+
+ if node.get_type () == NodeType::Pattern {
+ node.children.borrow ().len () > 0
+ } else {
+ false
+ }
}
// All of the Pattern's fields are Option<foo> values, because
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]