[librsvg: 5/9] node: use 'default' to create nodes when possible
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 5/9] node: use 'default' to create nodes when possible
- Date: Mon, 27 May 2019 14:23:30 +0000 (UTC)
commit 507b2bea459fd2635306458208fdfdc38aeaa9ba
Author: Paolo Borelli <pborelli gnome org>
Date: Sun May 26 10:43:21 2019 +0200
node: use 'default' to create nodes when possible
Using default instead of a new is more idiomatic and lets us
derive some of the boiler plate.
rsvg_internals/src/clip_path.rs | 7 +-
rsvg_internals/src/create_node.rs | 84 ++++++++++++------------
rsvg_internals/src/filters/blend.rs | 4 +-
rsvg_internals/src/filters/color_matrix.rs | 4 +-
rsvg_internals/src/filters/component_transfer.rs | 4 +-
rsvg_internals/src/filters/composite.rs | 4 +-
rsvg_internals/src/filters/convolve_matrix.rs | 4 +-
rsvg_internals/src/filters/displacement_map.rs | 4 +-
rsvg_internals/src/filters/flood.rs | 4 +-
rsvg_internals/src/filters/gaussian_blur.rs | 4 +-
rsvg_internals/src/filters/image.rs | 6 +-
rsvg_internals/src/filters/merge.rs | 15 +----
rsvg_internals/src/filters/morphology.rs | 4 +-
rsvg_internals/src/filters/node.rs | 6 +-
rsvg_internals/src/filters/offset.rs | 4 +-
rsvg_internals/src/filters/tile.rs | 4 +-
rsvg_internals/src/filters/turbulence.rs | 4 +-
rsvg_internals/src/image.rs | 14 +---
rsvg_internals/src/link.rs | 9 +--
rsvg_internals/src/marker.rs | 6 +-
rsvg_internals/src/mask.rs | 6 +-
rsvg_internals/src/pattern.rs | 4 +-
rsvg_internals/src/shapes.rs | 59 ++---------------
rsvg_internals/src/stop.rs | 7 +-
rsvg_internals/src/structure.rs | 56 ++--------------
rsvg_internals/src/style.rs | 7 +-
rsvg_internals/src/text.rs | 27 +-------
rsvg_internals/src/unit_interval.rs | 2 +-
28 files changed, 107 insertions(+), 256 deletions(-)
---
diff --git a/rsvg_internals/src/clip_path.rs b/rsvg_internals/src/clip_path.rs
index 00ad514d..9a97d18c 100644
--- a/rsvg_internals/src/clip_path.rs
+++ b/rsvg_internals/src/clip_path.rs
@@ -12,17 +12,12 @@ use crate::property_bag::PropertyBag;
coord_units!(ClipPathUnits, CoordUnits::UserSpaceOnUse);
+#[derive(Default)]
pub struct NodeClipPath {
units: Cell<ClipPathUnits>,
}
impl NodeClipPath {
- pub fn new() -> NodeClipPath {
- NodeClipPath {
- units: Cell::new(ClipPathUnits::default()),
- }
- }
-
pub fn get_units(&self) -> ClipPathUnits {
self.units.get()
}
diff --git a/rsvg_internals/src/create_node.rs b/rsvg_internals/src/create_node.rs
index 8a17dad7..0e8ed4b5 100644
--- a/rsvg_internals/src/create_node.rs
+++ b/rsvg_internals/src/create_node.rs
@@ -60,66 +60,66 @@ macro_rules! n {
mod creators {
use super::*;
- n!(create_circle, Circle, NodeCircle::new);
- n!(create_clip_path, ClipPath, NodeClipPath::new);
- n!(create_blend, FeBlend, Blend::new);
- n!(create_color_matrix, FeColorMatrix, ColorMatrix::new);
- n!(create_component_transfer, FeComponentTransfer, ComponentTransfer::new);
+ n!(create_circle, Circle, NodeCircle::default);
+ n!(create_clip_path, ClipPath, NodeClipPath::default);
+ n!(create_blend, FeBlend, Blend::default);
+ n!(create_color_matrix, FeColorMatrix, ColorMatrix::default);
+ n!(create_component_transfer, FeComponentTransfer, ComponentTransfer::default);
n!(create_component_transfer_func_a, ComponentTransferFunctionA, FuncX::new_a);
n!(create_component_transfer_func_b, ComponentTransferFunctionB, FuncX::new_b);
n!(create_component_transfer_func_g, ComponentTransferFunctionG, FuncX::new_g);
n!(create_component_transfer_func_r, ComponentTransferFunctionR, FuncX::new_r);
- n!(create_composite, FeComposite, Composite::new);
- n!(create_convolve_matrix, FeConvolveMatrix, ConvolveMatrix::new);
- n!(create_defs, Defs, NodeNonRendering::new);
+ n!(create_composite, FeComposite, Composite::default);
+ n!(create_convolve_matrix, FeConvolveMatrix, ConvolveMatrix::default);
+ n!(create_defs, Defs, NodeNonRendering::default);
n!(create_diffuse_lighting, FeDiffuseLighting, Lighting::new_diffuse);
n!(create_distant_light, DistantLight, LightSource::new_distant_light);
- n!(create_displacement_map, FeDisplacementMap, DisplacementMap::new);
- n!(create_ellipse, Ellipse, NodeEllipse::new);
- n!(create_filter, Filter, NodeFilter::new);
- n!(create_flood, FeFlood, Flood::new);
- n!(create_gaussian_blur, FeGaussianBlur, GaussianBlur::new);
- n!(create_group, Group, NodeGroup::new);
- n!(create_image, Image, NodeImage::new);
- n!(create_fe_image, FeImage, Image::new);
+ n!(create_displacement_map, FeDisplacementMap, DisplacementMap::default);
+ n!(create_ellipse, Ellipse, NodeEllipse::default);
+ n!(create_filter, Filter, NodeFilter::default);
+ n!(create_flood, FeFlood, Flood::default);
+ n!(create_gaussian_blur, FeGaussianBlur, GaussianBlur::default);
+ n!(create_group, Group, NodeGroup::default);
+ n!(create_image, Image, NodeImage::default);
+ n!(create_fe_image, FeImage, Image::default);
n!(create_linear_gradient, LinearGradient, NodeGradient::new_linear);
- n!(create_line, Line, NodeLine::new);
- n!(create_link, Link, NodeLink::new);
- n!(create_marker, Marker, NodeMarker::new);
- n!(create_mask, Mask, NodeMask::new);
- n!(create_merge, FeMerge, Merge::new);
- n!(create_merge_node, FeMergeNode, MergeNode::new);
- n!(create_morphology, FeMorphology, Morphology::new);
- n!(create_non_rendering, NonRendering, NodeNonRendering::new);
- n!(create_offset, FeOffset, Offset::new);
- n!(create_path, Path, NodePath::new);
- n!(create_pattern, Pattern, NodePattern::new);
+ n!(create_line, Line, NodeLine::default);
+ n!(create_link, Link, NodeLink::default);
+ n!(create_marker, Marker, NodeMarker::default);
+ n!(create_mask, Mask, NodeMask::default);
+ n!(create_merge, FeMerge, Merge::default);
+ n!(create_merge_node, FeMergeNode, MergeNode::default);
+ n!(create_morphology, FeMorphology, Morphology::default);
+ n!(create_non_rendering, NonRendering, NodeNonRendering::default);
+ n!(create_offset, FeOffset, Offset::default);
+ n!(create_path, Path, NodePath::default);
+ n!(create_pattern, Pattern, NodePattern::default);
n!(create_point_light, PointLight, LightSource::new_point_light);
n!(create_polygon, Polygon, NodePoly::new_closed);
n!(create_polyline, Polyline, NodePoly::new_open);
n!(create_radial_gradient, RadialGradient, NodeGradient::new_radial);
- n!(create_rect, Rect, NodeRect::new);
+ n!(create_rect, Rect, NodeRect::default);
n!(create_specular_lighting, FeSpecularLighting, Lighting::new_specular);
n!(create_spot_light, SpotLight, LightSource::new_spot_light);
- n!(create_stop, Stop, NodeStop::new);
- n!(create_style, Style, NodeStyle::new);
- n!(create_svg, Svg, NodeSvg::new);
- n!(create_switch, Switch, NodeSwitch::new);
- n!(create_symbol, Symbol, NodeSymbol::new);
- n!(create_text, Text, NodeText::new);
- n!(create_tref, TRef, NodeTRef::new);
- n!(create_tspan, TSpan, NodeTSpan::new);
- n!(create_tile, FeTile, Tile::new);
- n!(create_turbulence, FeTurbulence, Turbulence::new);
- n!(create_use, Use, NodeUse::new);
+ n!(create_stop, Stop, NodeStop::default);
+ n!(create_style, Style, NodeStyle::default);
+ n!(create_svg, Svg, NodeSvg::default);
+ n!(create_switch, Switch, NodeSwitch::default);
+ n!(create_symbol, Symbol, NodeSymbol::default);
+ n!(create_text, Text, NodeText::default);
+ n!(create_tref, TRef, NodeTRef::default);
+ n!(create_tspan, TSpan, NodeTSpan::default);
+ n!(create_tile, FeTile, Tile::default);
+ n!(create_turbulence, FeTurbulence, Turbulence::default);
+ n!(create_use, Use, NodeUse::default);
// hack to partially support conical gradient
n!(create_conical_gradient, RadialGradient, NodeGradient::new_radial);
// hack to make multiImage sort-of work
- n!(create_multi_image, Switch, NodeSwitch::new);
- n!(create_sub_image, Group, NodeGroup::new);
- n!(create_sub_image_ref, Image, NodeImage::new);
+ n!(create_multi_image, Switch, NodeSwitch::default);
+ n!(create_sub_image, Group, NodeGroup::default);
+ n!(create_sub_image_ref, Image, NodeImage::default);
}
use creators::*;
diff --git a/rsvg_internals/src/filters/blend.rs b/rsvg_internals/src/filters/blend.rs
index 0344aec1..993f468a 100644
--- a/rsvg_internals/src/filters/blend.rs
+++ b/rsvg_internals/src/filters/blend.rs
@@ -31,10 +31,10 @@ pub struct Blend {
mode: Cell<Mode>,
}
-impl Blend {
+impl Default for Blend {
/// Constructs a new `Blend` with empty properties.
#[inline]
- pub fn new() -> Blend {
+ fn default() -> Blend {
Blend {
base: PrimitiveWithInput::new::<Self>(),
in2: RefCell::new(None),
diff --git a/rsvg_internals/src/filters/color_matrix.rs b/rsvg_internals/src/filters/color_matrix.rs
index 62ac5557..c70ecc65 100644
--- a/rsvg_internals/src/filters/color_matrix.rs
+++ b/rsvg_internals/src/filters/color_matrix.rs
@@ -36,10 +36,10 @@ pub struct ColorMatrix {
matrix: RefCell<Matrix5<f64>>,
}
-impl ColorMatrix {
+impl Default for ColorMatrix {
/// Constructs a new `ColorMatrix` with empty properties.
#[inline]
- pub fn new() -> ColorMatrix {
+ fn default() -> ColorMatrix {
ColorMatrix {
base: PrimitiveWithInput::new::<Self>(),
matrix: RefCell::new(Matrix5::identity()),
diff --git a/rsvg_internals/src/filters/component_transfer.rs
b/rsvg_internals/src/filters/component_transfer.rs
index 2b3ac234..21a00780 100644
--- a/rsvg_internals/src/filters/component_transfer.rs
+++ b/rsvg_internals/src/filters/component_transfer.rs
@@ -112,10 +112,10 @@ fn gamma(params: &FunctionParameters<'_>, value: f64) -> f64 {
params.amplitude * value.powf(params.exponent) + params.offset
}
-impl ComponentTransfer {
+impl Default for ComponentTransfer {
/// Constructs a new `ComponentTransfer` with empty properties.
#[inline]
- pub fn new() -> ComponentTransfer {
+ fn default() -> ComponentTransfer {
ComponentTransfer {
base: PrimitiveWithInput::new::<Self>(),
}
diff --git a/rsvg_internals/src/filters/composite.rs b/rsvg_internals/src/filters/composite.rs
index dc5761d3..fa247fce 100644
--- a/rsvg_internals/src/filters/composite.rs
+++ b/rsvg_internals/src/filters/composite.rs
@@ -43,10 +43,10 @@ pub struct Composite {
k4: Cell<f64>,
}
-impl Composite {
+impl Default for Composite {
/// Constructs a new `Composite` with empty properties.
#[inline]
- pub fn new() -> Composite {
+ fn default() -> Composite {
Composite {
base: PrimitiveWithInput::new::<Self>(),
in2: RefCell::new(None),
diff --git a/rsvg_internals/src/filters/convolve_matrix.rs b/rsvg_internals/src/filters/convolve_matrix.rs
index b0bb684b..6f2c1c5d 100644
--- a/rsvg_internals/src/filters/convolve_matrix.rs
+++ b/rsvg_internals/src/filters/convolve_matrix.rs
@@ -37,10 +37,10 @@ pub struct ConvolveMatrix {
preserve_alpha: Cell<bool>,
}
-impl ConvolveMatrix {
+impl Default for ConvolveMatrix {
/// Constructs a new `ConvolveMatrix` with empty properties.
#[inline]
- pub fn new() -> ConvolveMatrix {
+ fn default() -> ConvolveMatrix {
ConvolveMatrix {
base: PrimitiveWithInput::new::<Self>(),
order: Cell::new((3, 3)),
diff --git a/rsvg_internals/src/filters/displacement_map.rs b/rsvg_internals/src/filters/displacement_map.rs
index e25cc7b8..68374d3a 100644
--- a/rsvg_internals/src/filters/displacement_map.rs
+++ b/rsvg_internals/src/filters/displacement_map.rs
@@ -31,10 +31,10 @@ pub struct DisplacementMap {
y_channel_selector: Cell<ColorChannel>,
}
-impl DisplacementMap {
+impl Default for DisplacementMap {
/// Constructs a new `DisplacementMap` with empty properties.
#[inline]
- pub fn new() -> DisplacementMap {
+ fn default() -> DisplacementMap {
DisplacementMap {
base: PrimitiveWithInput::new::<Self>(),
in2: RefCell::new(None),
diff --git a/rsvg_internals/src/filters/flood.rs b/rsvg_internals/src/filters/flood.rs
index 929bfb81..a501b5cf 100644
--- a/rsvg_internals/src/filters/flood.rs
+++ b/rsvg_internals/src/filters/flood.rs
@@ -14,10 +14,10 @@ pub struct Flood {
base: Primitive,
}
-impl Flood {
+impl Default for Flood {
/// Constructs a new `Flood` with empty properties.
#[inline]
- pub fn new() -> Flood {
+ fn default() -> Flood {
Flood {
base: Primitive::new::<Self>(),
}
diff --git a/rsvg_internals/src/filters/gaussian_blur.rs b/rsvg_internals/src/filters/gaussian_blur.rs
index 69a4d0d9..40bf098e 100644
--- a/rsvg_internals/src/filters/gaussian_blur.rs
+++ b/rsvg_internals/src/filters/gaussian_blur.rs
@@ -30,10 +30,10 @@ pub struct GaussianBlur {
std_deviation: Cell<(f64, f64)>,
}
-impl GaussianBlur {
+impl Default for GaussianBlur {
/// Constructs a new `GaussianBlur` with empty properties.
#[inline]
- pub fn new() -> GaussianBlur {
+ fn default() -> GaussianBlur {
GaussianBlur {
base: PrimitiveWithInput::new::<Self>(),
std_deviation: Cell::new((0.0, 0.0)),
diff --git a/rsvg_internals/src/filters/image.rs b/rsvg_internals/src/filters/image.rs
index 318abf3b..bf2f90eb 100644
--- a/rsvg_internals/src/filters/image.rs
+++ b/rsvg_internals/src/filters/image.rs
@@ -24,17 +24,19 @@ pub struct Image {
href: RefCell<Option<Href>>,
}
-impl Image {
+impl Default for Image {
/// Constructs a new `Image` with empty properties.
#[inline]
- pub fn new() -> Image {
+ fn default() -> Image {
Image {
base: Primitive::new::<Self>(),
aspect: Cell::new(AspectRatio::default()),
href: RefCell::new(None),
}
}
+}
+impl Image {
/// Renders the filter if the source is an existing node.
fn render_node(
&self,
diff --git a/rsvg_internals/src/filters/merge.rs b/rsvg_internals/src/filters/merge.rs
index 5ff87210..f42742c8 100644
--- a/rsvg_internals/src/filters/merge.rs
+++ b/rsvg_internals/src/filters/merge.rs
@@ -18,30 +18,21 @@ pub struct Merge {
}
/// The `<feMergeNode>` element.
+#[derive(Default)]
pub struct MergeNode {
in_: RefCell<Option<Input>>,
}
-impl Merge {
+impl Default for Merge {
/// Constructs a new `Merge` with empty properties.
#[inline]
- pub fn new() -> Merge {
+ fn default() -> Merge {
Merge {
base: Primitive::new::<Self>(),
}
}
}
-impl MergeNode {
- /// Constructs a new `MergeNode` with empty properties.
- #[inline]
- pub fn new() -> MergeNode {
- MergeNode {
- in_: RefCell::new(None),
- }
- }
-}
-
impl NodeTrait for Merge {
#[inline]
fn set_atts(&self, node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
diff --git a/rsvg_internals/src/filters/morphology.rs b/rsvg_internals/src/filters/morphology.rs
index a5738408..9eabfa87 100644
--- a/rsvg_internals/src/filters/morphology.rs
+++ b/rsvg_internals/src/filters/morphology.rs
@@ -35,10 +35,10 @@ pub struct Morphology {
radius: Cell<(f64, f64)>,
}
-impl Morphology {
+impl Default for Morphology {
/// Constructs a new `Morphology` with empty properties.
#[inline]
- pub fn new() -> Morphology {
+ fn default() -> Morphology {
Morphology {
base: PrimitiveWithInput::new::<Self>(),
operator: Cell::new(Operator::Erode),
diff --git a/rsvg_internals/src/filters/node.rs b/rsvg_internals/src/filters/node.rs
index 38bfb3bb..ac3f30a1 100644
--- a/rsvg_internals/src/filters/node.rs
+++ b/rsvg_internals/src/filters/node.rs
@@ -23,10 +23,10 @@ pub struct NodeFilter {
pub primitiveunits: Cell<CoordUnits>,
}
-impl NodeFilter {
+impl Default for NodeFilter {
/// Constructs a new `NodeFilter` with default properties.
#[inline]
- pub fn new() -> Self {
+ fn default() -> Self {
Self {
x: Cell::new(LengthHorizontal::parse_str("-10%").unwrap()),
y: Cell::new(LengthVertical::parse_str("-10%").unwrap()),
@@ -36,7 +36,9 @@ impl NodeFilter {
primitiveunits: Cell::new(CoordUnits::UserSpaceOnUse),
}
}
+}
+impl NodeFilter {
/// Computes and returns the filter effects region.
pub fn compute_effects_region(
&self,
diff --git a/rsvg_internals/src/filters/offset.rs b/rsvg_internals/src/filters/offset.rs
index 8e88787f..94ebb235 100644
--- a/rsvg_internals/src/filters/offset.rs
+++ b/rsvg_internals/src/filters/offset.rs
@@ -21,10 +21,10 @@ pub struct Offset {
dy: Cell<f64>,
}
-impl Offset {
+impl Default for Offset {
/// Constructs a new `Offset` with empty properties.
#[inline]
- pub fn new() -> Offset {
+ fn default() -> Offset {
Offset {
base: PrimitiveWithInput::new::<Self>(),
dx: Cell::new(0f64),
diff --git a/rsvg_internals/src/filters/tile.rs b/rsvg_internals/src/filters/tile.rs
index ddf1062c..4269eebb 100644
--- a/rsvg_internals/src/filters/tile.rs
+++ b/rsvg_internals/src/filters/tile.rs
@@ -13,10 +13,10 @@ pub struct Tile {
base: PrimitiveWithInput,
}
-impl Tile {
+impl Default for Tile {
/// Constructs a new `Tile` with empty properties.
#[inline]
- pub fn new() -> Tile {
+ fn default() -> Tile {
Tile {
base: PrimitiveWithInput::new::<Self>(),
}
diff --git a/rsvg_internals/src/filters/turbulence.rs b/rsvg_internals/src/filters/turbulence.rs
index 855cd2ab..be9d5421 100644
--- a/rsvg_internals/src/filters/turbulence.rs
+++ b/rsvg_internals/src/filters/turbulence.rs
@@ -43,10 +43,10 @@ pub struct Turbulence {
type_: Cell<NoiseType>,
}
-impl Turbulence {
+impl Default for Turbulence {
/// Constructs a new `Turbulence` with empty properties.
#[inline]
- pub fn new() -> Turbulence {
+ fn default() -> Turbulence {
Turbulence {
base: Primitive::new::<Self>(),
base_frequency: Cell::new((0.0, 0.0)),
diff --git a/rsvg_internals/src/image.rs b/rsvg_internals/src/image.rs
index e351db5d..fab5c2c6 100644
--- a/rsvg_internals/src/image.rs
+++ b/rsvg_internals/src/image.rs
@@ -15,6 +15,7 @@ use crate::property_bag::PropertyBag;
use crate::rect::RectangleExt;
use crate::viewbox::ViewBox;
+#[derive(Default)]
pub struct NodeImage {
aspect: Cell<AspectRatio>,
x: Cell<LengthHorizontal>,
@@ -24,19 +25,6 @@ pub struct NodeImage {
href: RefCell<Option<Href>>,
}
-impl NodeImage {
- pub fn new() -> NodeImage {
- NodeImage {
- aspect: Cell::new(AspectRatio::default()),
- x: Cell::new(Default::default()),
- y: Cell::new(Default::default()),
- w: Cell::new(Default::default()),
- h: Cell::new(Default::default()),
- href: RefCell::new(None),
- }
- }
-}
-
impl NodeTrait for NodeImage {
fn set_atts(&self, _node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
diff --git a/rsvg_internals/src/link.rs b/rsvg_internals/src/link.rs
index b0cc189c..2e27f830 100644
--- a/rsvg_internals/src/link.rs
+++ b/rsvg_internals/src/link.rs
@@ -7,18 +7,11 @@ use crate::error::RenderingError;
use crate::node::*;
use crate::property_bag::PropertyBag;
+#[derive(Default)]
pub struct NodeLink {
link: RefCell<Option<String>>,
}
-impl NodeLink {
- pub fn new() -> NodeLink {
- NodeLink {
- link: RefCell::new(None),
- }
- }
-}
-
impl NodeTrait for NodeLink {
fn set_atts(&self, _: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
diff --git a/rsvg_internals/src/marker.rs b/rsvg_internals/src/marker.rs
index 836db1c3..fbdf5f27 100644
--- a/rsvg_internals/src/marker.rs
+++ b/rsvg_internals/src/marker.rs
@@ -98,8 +98,8 @@ pub struct NodeMarker {
vbox: Cell<Option<ViewBox>>,
}
-impl NodeMarker {
- pub fn new() -> NodeMarker {
+impl Default for NodeMarker {
+ fn default() -> NodeMarker {
NodeMarker {
units: Cell::new(MarkerUnits::default()),
ref_x: Cell::new(Default::default()),
@@ -112,7 +112,9 @@ impl NodeMarker {
vbox: Cell::new(None),
}
}
+}
+impl NodeMarker {
fn render(
&self,
node: &RsvgNode,
diff --git a/rsvg_internals/src/mask.rs b/rsvg_internals/src/mask.rs
index ac002dd2..4fa59490 100644
--- a/rsvg_internals/src/mask.rs
+++ b/rsvg_internals/src/mask.rs
@@ -32,8 +32,8 @@ pub struct NodeMask {
content_units: Cell<MaskContentUnits>,
}
-impl NodeMask {
- pub fn new() -> NodeMask {
+impl Default for NodeMask {
+ fn default() -> NodeMask {
NodeMask {
// these values are per the spec
x: Cell::new(LengthHorizontal::parse_str("-10%").unwrap()),
@@ -46,7 +46,9 @@ impl NodeMask {
content_units: Cell::new(MaskContentUnits::default()),
}
}
+}
+impl NodeMask {
pub fn generate_cairo_mask(
&self,
mask_node: &RsvgNode,
diff --git a/rsvg_internals/src/pattern.rs b/rsvg_internals/src/pattern.rs
index a684a733..7723e31b 100644
--- a/rsvg_internals/src/pattern.rs
+++ b/rsvg_internals/src/pattern.rs
@@ -161,8 +161,8 @@ pub struct NodePattern {
pattern: RefCell<Pattern>,
}
-impl NodePattern {
- pub fn new() -> NodePattern {
+impl Default for NodePattern {
+ fn default() -> NodePattern {
NodePattern {
pattern: RefCell::new(Pattern::unresolved()),
}
diff --git a/rsvg_internals/src/shapes.rs b/rsvg_internals/src/shapes.rs
index fffba81f..439ef76d 100644
--- a/rsvg_internals/src/shapes.rs
+++ b/rsvg_internals/src/shapes.rs
@@ -109,18 +109,11 @@ fn render_ellipse(
render_path_builder(&builder, draw_ctx, node, values, false, clipping)
}
+#[derive(Default)]
pub struct NodePath {
builder: RefCell<Option<PathBuilder>>,
}
-impl NodePath {
- pub fn new() -> NodePath {
- NodePath {
- builder: RefCell::new(None),
- }
- }
-}
-
impl NodeTrait for NodePath {
fn set_atts(&self, node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
@@ -267,6 +260,7 @@ impl NodeTrait for NodePoly {
}
}
+#[derive(Default)]
pub struct NodeLine {
x1: Cell<LengthHorizontal>,
y1: Cell<LengthVertical>,
@@ -274,17 +268,6 @@ pub struct NodeLine {
y2: Cell<LengthVertical>,
}
-impl NodeLine {
- pub fn new() -> NodeLine {
- NodeLine {
- x1: Cell::new(Default::default()),
- y1: Cell::new(Default::default()),
- x2: Cell::new(Default::default()),
- y2: Cell::new(Default::default()),
- }
- }
-}
-
impl NodeTrait for NodeLine {
fn set_atts(&self, _: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
@@ -325,6 +308,7 @@ impl NodeTrait for NodeLine {
}
}
+#[derive(Default)]
pub struct NodeRect {
// x, y, width, height
x: Cell<LengthHorizontal>,
@@ -337,20 +321,6 @@ pub struct NodeRect {
ry: Cell<Option<LengthVertical>>,
}
-impl NodeRect {
- pub fn new() -> NodeRect {
- NodeRect {
- x: Cell::new(Default::default()),
- y: Cell::new(Default::default()),
- w: Cell::new(Default::default()),
- h: Cell::new(Default::default()),
-
- rx: Cell::new(None),
- ry: Cell::new(None),
- }
- }
-}
-
impl NodeTrait for NodeRect {
fn set_atts(&self, _: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
@@ -559,22 +529,13 @@ impl NodeTrait for NodeRect {
}
}
+#[derive(Default)]
pub struct NodeCircle {
cx: Cell<LengthHorizontal>,
cy: Cell<LengthVertical>,
r: Cell<LengthBoth>,
}
-impl NodeCircle {
- pub fn new() -> NodeCircle {
- NodeCircle {
- cx: Cell::new(Default::default()),
- cy: Cell::new(Default::default()),
- r: Cell::new(Default::default()),
- }
- }
-}
-
impl NodeTrait for NodeCircle {
fn set_atts(&self, _: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
@@ -611,6 +572,7 @@ impl NodeTrait for NodeCircle {
}
}
+#[derive(Default)]
pub struct NodeEllipse {
cx: Cell<LengthHorizontal>,
cy: Cell<LengthVertical>,
@@ -618,17 +580,6 @@ pub struct NodeEllipse {
ry: Cell<LengthVertical>,
}
-impl NodeEllipse {
- pub fn new() -> NodeEllipse {
- NodeEllipse {
- cx: Cell::new(Default::default()),
- cy: Cell::new(Default::default()),
- rx: Cell::new(Default::default()),
- ry: Cell::new(Default::default()),
- }
- }
-}
-
impl NodeTrait for NodeEllipse {
fn set_atts(&self, _: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
diff --git a/rsvg_internals/src/stop.rs b/rsvg_internals/src/stop.rs
index 84f9bf6a..4274075d 100644
--- a/rsvg_internals/src/stop.rs
+++ b/rsvg_internals/src/stop.rs
@@ -7,17 +7,12 @@ use crate::parsers::ParseValue;
use crate::property_bag::PropertyBag;
use crate::unit_interval::UnitInterval;
+#[derive(Default)]
pub struct NodeStop {
offset: Cell<UnitInterval>,
}
impl NodeStop {
- pub fn new() -> NodeStop {
- NodeStop {
- offset: Cell::new(UnitInterval(0.0)),
- }
- }
-
pub fn get_offset(&self) -> UnitInterval {
self.offset.get()
}
diff --git a/rsvg_internals/src/structure.rs b/rsvg_internals/src/structure.rs
index b35e6f37..34ade742 100644
--- a/rsvg_internals/src/structure.rs
+++ b/rsvg_internals/src/structure.rs
@@ -19,14 +19,9 @@ use crate::rect::RectangleExt;
use crate::tree_utils::Node;
use crate::viewbox::*;
+#[derive(Default)]
pub struct NodeGroup();
-impl NodeGroup {
- pub fn new() -> NodeGroup {
- NodeGroup()
- }
-}
-
impl NodeTrait for NodeGroup {
fn set_atts(&self, _: &RsvgNode, _: &PropertyBag<'_>) -> NodeResult {
Ok(())
@@ -51,28 +46,18 @@ impl NodeTrait for NodeGroup {
///
/// Sometimes we just need a node that can contain children, but doesn't
/// render itself or its children. This is just that kind of node.
+#[derive(Default)]
pub struct NodeNonRendering;
-impl NodeNonRendering {
- pub fn new() -> NodeNonRendering {
- NodeNonRendering
- }
-}
-
impl NodeTrait for NodeNonRendering {
fn set_atts(&self, _: &RsvgNode, _: &PropertyBag<'_>) -> NodeResult {
Ok(())
}
}
+#[derive(Default)]
pub struct NodeSwitch();
-impl NodeSwitch {
- pub fn new() -> NodeSwitch {
- NodeSwitch()
- }
-}
-
impl NodeTrait for NodeSwitch {
fn set_atts(&self, _: &RsvgNode, _: &PropertyBag<'_>) -> NodeResult {
Ok(())
@@ -109,6 +94,7 @@ pub struct IntrinsicDimensions {
pub vbox: Option<ViewBox>,
}
+#[derive(Default)]
pub struct NodeSvg {
preserve_aspect_ratio: Cell<AspectRatio>,
x: Cell<Option<LengthHorizontal>>,
@@ -119,17 +105,6 @@ pub struct NodeSvg {
}
impl NodeSvg {
- pub fn new() -> NodeSvg {
- NodeSvg {
- preserve_aspect_ratio: Cell::new(AspectRatio::default()),
- x: Cell::new(None),
- y: Cell::new(None),
- w: Cell::new(None),
- h: Cell::new(None),
- vbox: Cell::new(None),
- }
- }
-
pub fn get_size(&self, values: &ComputedValues, dpi: Dpi) -> Option<(i32, i32)> {
let (_, _, w, h) = self.get_unnormalized_viewport();
@@ -308,6 +283,7 @@ impl NodeTrait for NodeSvg {
}
}
+#[derive(Default)]
pub struct NodeUse {
link: RefCell<Option<Fragment>>,
x: Cell<LengthHorizontal>,
@@ -316,18 +292,6 @@ pub struct NodeUse {
h: Cell<Option<LengthVertical>>,
}
-impl NodeUse {
- pub fn new() -> NodeUse {
- NodeUse {
- link: RefCell::new(None),
- x: Cell::new(Default::default()),
- y: Cell::new(Default::default()),
- w: Cell::new(None),
- h: Cell::new(None),
- }
- }
-}
-
impl NodeTrait for NodeUse {
fn set_atts(&self, _: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
@@ -458,20 +422,12 @@ impl NodeTrait for NodeUse {
}
}
+#[derive(Default)]
pub struct NodeSymbol {
preserve_aspect_ratio: Cell<AspectRatio>,
vbox: Cell<Option<ViewBox>>,
}
-impl NodeSymbol {
- pub fn new() -> NodeSymbol {
- NodeSymbol {
- preserve_aspect_ratio: Cell::new(AspectRatio::default()),
- vbox: Cell::new(None),
- }
- }
-}
-
impl NodeTrait for NodeSymbol {
fn set_atts(&self, _node: &RsvgNode, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
diff --git a/rsvg_internals/src/style.rs b/rsvg_internals/src/style.rs
index 61e92576..baf2c2b4 100644
--- a/rsvg_internals/src/style.rs
+++ b/rsvg_internals/src/style.rs
@@ -8,17 +8,12 @@ use std::cell::RefCell;
///
/// It does not render itself, and just holds CSS stylesheet information for the rest of
/// the code to use.
+#[derive(Default)]
pub struct NodeStyle {
type_: RefCell<Option<String>>,
}
impl NodeStyle {
- pub fn new() -> NodeStyle {
- NodeStyle {
- type_: RefCell::new(None),
- }
- }
-
pub fn get_css(&self, node: &RsvgNode) -> String {
// FIXME: See these:
//
diff --git a/rsvg_internals/src/text.rs b/rsvg_internals/src/text.rs
index 5890f85c..c26f434b 100644
--- a/rsvg_internals/src/text.rs
+++ b/rsvg_internals/src/text.rs
@@ -558,6 +558,7 @@ impl NodeTrait for NodeChars {
}
}
+#[derive(Default)]
pub struct NodeText {
x: Cell<LengthHorizontal>,
y: Cell<LengthVertical>,
@@ -566,15 +567,6 @@ pub struct NodeText {
}
impl NodeText {
- pub fn new() -> NodeText {
- NodeText {
- x: Cell::new(Default::default()),
- y: Cell::new(Default::default()),
- dx: Cell::new(None),
- dy: Cell::new(None),
- }
- }
-
fn make_chunks(
&self,
node: &RsvgNode,
@@ -659,17 +651,12 @@ impl NodeTrait for NodeText {
}
}
+#[derive(Default)]
pub struct NodeTRef {
link: RefCell<Option<Fragment>>,
}
impl NodeTRef {
- pub fn new() -> NodeTRef {
- NodeTRef {
- link: RefCell::new(Default::default()),
- }
- }
-
fn to_chunks(
&self,
node: &RsvgNode,
@@ -732,6 +719,7 @@ impl NodeTrait for NodeTRef {
}
}
+#[derive(Default)]
pub struct NodeTSpan {
x: Cell<Option<LengthHorizontal>>,
y: Cell<Option<LengthVertical>>,
@@ -740,15 +728,6 @@ pub struct NodeTSpan {
}
impl NodeTSpan {
- pub fn new() -> NodeTSpan {
- NodeTSpan {
- x: Cell::new(Default::default()),
- y: Cell::new(Default::default()),
- dx: Cell::new(None),
- dy: Cell::new(None),
- }
- }
-
fn to_chunks(
&self,
node: &RsvgNode,
diff --git a/rsvg_internals/src/unit_interval.rs b/rsvg_internals/src/unit_interval.rs
index 8befc2ee..cd9d4491 100644
--- a/rsvg_internals/src/unit_interval.rs
+++ b/rsvg_internals/src/unit_interval.rs
@@ -4,7 +4,7 @@ use crate::error::*;
use crate::parsers::{CssParserExt, Parse, ParseError};
use crate::util;
-#[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
+#[derive(Debug, Default, Copy, Clone, PartialEq, PartialOrd)]
pub struct UnitInterval(pub f64);
impl UnitInterval {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]