Skip to main content

style/values/computed/
svg.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5//! Computed types for SVG properties.
6
7use crate::Zero;
8use crate::values::computed::color::Color;
9use crate::values::computed::url::ComputedUrl;
10use crate::values::computed::{LengthPercentage, NonNegativeLengthPercentage, Opacity};
11use crate::values::generics::svg as generic;
12pub use crate::values::specified::svg::{
13    ColorInterpolation, MaskComposite, MaskMode, MaskType, ShapeRendering, StrokeLinecap,
14    StrokeLinejoin, TextAnchor,
15};
16
17pub use crate::values::specified::{DProperty, MozContextProperties, SVGPaintOrder, VectorEffect};
18
19/// Computed SVG Paint value
20pub type SVGPaint = generic::GenericSVGPaint<Color, ComputedUrl>;
21
22/// Computed SVG Paint Kind value
23pub type SVGPaintKind = generic::GenericSVGPaintKind<Color, ComputedUrl>;
24
25impl SVGPaint {
26    /// Opaque black color
27    pub const BLACK: Self = Self {
28        kind: generic::SVGPaintKind::Color(Color::BLACK),
29        fallback: generic::SVGPaintFallback::Unset,
30    };
31}
32
33/// <length> | <percentage> | <number> | context-value
34pub type SVGLength = generic::GenericSVGLength<LengthPercentage>;
35
36impl SVGLength {
37    /// `0px`
38    pub fn zero() -> Self {
39        generic::SVGLength::LengthPercentage(LengthPercentage::zero())
40    }
41}
42
43/// An non-negative wrapper of SVGLength.
44pub type SVGWidth = generic::GenericSVGLength<NonNegativeLengthPercentage>;
45
46impl SVGWidth {
47    /// `1px`.
48    pub fn one() -> Self {
49        use crate::values::generics::NonNegative;
50        generic::SVGLength::LengthPercentage(NonNegative(LengthPercentage::one()))
51    }
52}
53
54/// [ <length> | <percentage> | <number> ]# | context-value
55pub type SVGStrokeDashArray = generic::GenericSVGStrokeDashArray<NonNegativeLengthPercentage>;
56
57impl Default for SVGStrokeDashArray {
58    fn default() -> Self {
59        generic::SVGStrokeDashArray::Values(Default::default())
60    }
61}
62
63/// <opacity-value> | context-fill-opacity | context-stroke-opacity
64pub type SVGOpacity = generic::GenericSVGOpacity<Opacity>;
65
66impl Default for SVGOpacity {
67    fn default() -> Self {
68        generic::SVGOpacity::Opacity(1.)
69    }
70}