summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-12-15 06:45:20 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-12-15 06:45:20 +0100
commit232d4873ba0fb9b87d08c8d70b117e81aa7489b5 (patch)
treebfaac8e4887bbb0ea4ffa6a687151e13f4ae093e
parentaa298499768bb50129cc3bd0dca6f3f858e5802e (diff)
downloadiced-232d4873ba0fb9b87d08c8d70b117e81aa7489b5.tar.gz
iced-232d4873ba0fb9b87d08c8d70b117e81aa7489b5.tar.bz2
iced-232d4873ba0fb9b87d08c8d70b117e81aa7489b5.zip
Put `svg` rendering behind a feature gate
This reduces binary size when SVG supoprt is not needed.
Diffstat (limited to '')
-rw-r--r--Cargo.toml2
-rw-r--r--examples/svg.rs20
-rw-r--r--wgpu/Cargo.toml5
-rw-r--r--wgpu/src/image.rs36
-rw-r--r--wgpu/src/renderer/widget.rs4
5 files changed, 50 insertions, 17 deletions
diff --git a/Cargo.toml b/Cargo.toml
index f6f1158a..f3b16da1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -14,6 +14,8 @@ categories = ["gui"]
[features]
# Enables a debug view in native platforms (press F12)
debug = ["iced_winit/debug"]
+# Enables support for SVG rendering
+svg = ["iced_wgpu/svg"]
[badges]
maintenance = { status = "actively-developed" }
diff --git a/examples/svg.rs b/examples/svg.rs
index 6dfd5202..cdf238f0 100644
--- a/examples/svg.rs
+++ b/examples/svg.rs
@@ -1,4 +1,4 @@
-use iced::{Column, Container, Element, Length, Sandbox, Settings, Svg};
+use iced::{Container, Element, Length, Sandbox, Settings};
pub fn main() {
Tiger::run(Settings::default())
@@ -21,14 +21,28 @@ impl Sandbox for Tiger {
fn update(&mut self, _message: ()) {}
fn view(&mut self) -> Element<()> {
- let content =
+ #[cfg(feature = "svg")]
+ let content = {
+ use iced::{Column, Svg};
+
Column::new()
.width(Length::Shrink)
.padding(20)
.push(Svg::new(format!(
"{}/examples/resources/tiger.svg",
env!("CARGO_MANIFEST_DIR")
- )));
+ )))
+ };
+
+ #[cfg(not(feature = "svg"))]
+ let content = {
+ use iced::{HorizontalAlignment, Text};
+
+ Text::new("You need to enable the `svg` feature!")
+ .width(Length::Shrink)
+ .horizontal_alignment(HorizontalAlignment::Center)
+ .size(30)
+ };
Container::new(content)
.width(Length::Fill)
diff --git a/wgpu/Cargo.toml b/wgpu/Cargo.toml
index e8e9c877..bb241914 100644
--- a/wgpu/Cargo.toml
+++ b/wgpu/Cargo.toml
@@ -7,6 +7,9 @@ description = "A wgpu renderer for Iced"
license = "MIT AND OFL-1.1"
repository = "https://github.com/hecrj/iced"
+[features]
+svg = ["resvg"]
+
[dependencies]
iced_native = { version = "0.1.0", path = "../native" }
wgpu = "0.4"
@@ -17,4 +20,4 @@ image = "0.22"
glam = "0.8"
font-kit = "0.4"
log = "0.4"
-resvg = { version = "0.8", features = ["raqote-backend"] }
+resvg = { version = "0.8", features = ["raqote-backend"], optional = true }
diff --git a/wgpu/src/image.rs b/wgpu/src/image.rs
index 01059d2d..e30f70a7 100644
--- a/wgpu/src/image.rs
+++ b/wgpu/src/image.rs
@@ -1,4 +1,5 @@
mod raster;
+#[cfg(feature = "svg")]
mod vector;
use crate::Transformation;
@@ -9,6 +10,7 @@ use std::{cell::RefCell, mem};
#[derive(Debug)]
pub struct Pipeline {
raster_cache: RefCell<raster::Cache>,
+ #[cfg(feature = "svg")]
vector_cache: RefCell<vector::Cache>,
pipeline: wgpu::RenderPipeline,
@@ -190,6 +192,7 @@ impl Pipeline {
Pipeline {
raster_cache: RefCell::new(raster::Cache::new()),
+ #[cfg(feature = "svg")]
vector_cache: RefCell::new(vector::Cache::new()),
pipeline,
@@ -209,6 +212,7 @@ impl Pipeline {
memory.dimensions()
}
+ #[cfg(feature = "svg")]
pub fn viewport_dimensions(&self, handle: &svg::Handle) -> (u32, u32) {
let mut cache = self.vector_cache.borrow_mut();
@@ -227,7 +231,7 @@ impl Pipeline {
transformation: Transformation,
bounds: Rectangle<u32>,
target: &wgpu::TextureView,
- scale: f32,
+ _scale: f32,
) {
let uniforms_buffer = device
.create_buffer_mapped(1, wgpu::BufferUsage::COPY_SRC)
@@ -255,17 +259,23 @@ impl Pipeline {
memory.upload(device, encoder, &self.texture_layout)
}
- Handle::Vector(handle) => {
- let mut cache = self.vector_cache.borrow_mut();
-
- cache.upload(
- handle,
- image.scale,
- scale,
- device,
- encoder,
- &self.texture_layout,
- )
+ Handle::Vector(_handle) => {
+ #[cfg(feature = "svg")]
+ {
+ let mut cache = self.vector_cache.borrow_mut();
+
+ cache.upload(
+ _handle,
+ image.scale,
+ _scale,
+ device,
+ encoder,
+ &self.texture_layout,
+ )
+ }
+
+ #[cfg(not(feature = "svg"))]
+ None
}
};
@@ -333,6 +343,8 @@ impl Pipeline {
pub fn trim_cache(&mut self) {
self.raster_cache.borrow_mut().trim();
+
+ #[cfg(feature = "svg")]
self.vector_cache.borrow_mut().trim();
}
}
diff --git a/wgpu/src/renderer/widget.rs b/wgpu/src/renderer/widget.rs
index 65bb3bcd..91f107e8 100644
--- a/wgpu/src/renderer/widget.rs
+++ b/wgpu/src/renderer/widget.rs
@@ -6,6 +6,8 @@ mod radio;
mod row;
mod scrollable;
mod slider;
-mod svg;
mod text;
mod text_input;
+
+#[cfg(feature = "svg")]
+mod svg;