From e0c4f1a08e756f11c30a99cd739fe78267e5040b Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Tue, 19 May 2020 20:20:51 +0200
Subject: Move `font::Source` to `iced_graphics`

---
 glow/Cargo.toml             |  2 +-
 glow/src/text.rs            |  4 +---
 glow/src/text/font.rs       | 37 -------------------------------------
 graphics/Cargo.toml         |  5 +++++
 graphics/src/font.rs        | 10 ++++++++++
 graphics/src/font/source.rs | 35 +++++++++++++++++++++++++++++++++++
 graphics/src/lib.rs         |  1 +
 wgpu/Cargo.toml             |  2 +-
 wgpu/src/text.rs            |  4 +---
 wgpu/src/text/font.rs       | 37 -------------------------------------
 10 files changed, 55 insertions(+), 82 deletions(-)
 delete mode 100644 glow/src/text/font.rs
 create mode 100644 graphics/src/font.rs
 create mode 100644 graphics/src/font/source.rs
 delete mode 100644 wgpu/src/text/font.rs

diff --git a/glow/Cargo.toml b/glow/Cargo.toml
index 212fbb30..158e2bf0 100644
--- a/glow/Cargo.toml
+++ b/glow/Cargo.toml
@@ -13,7 +13,6 @@ euclid = "0.20"
 glow = "0.4"
 bytemuck = "1.2"
 glam = "0.8"
-font-kit = "0.6"
 log = "0.4"
 glyph_brush = "0.6"
 
@@ -24,6 +23,7 @@ path = "../native"
 [dependencies.iced_graphics]
 version = "0.1"
 path = "../graphics"
+features = ["font-source"]
 
 [dependencies.surfman]
 path = "../../surfman/surfman"
diff --git a/glow/src/text.rs b/glow/src/text.rs
index 159c80a6..be88ceaf 100644
--- a/glow/src/text.rs
+++ b/glow/src/text.rs
@@ -1,7 +1,5 @@
-mod font;
-
 use crate::Transformation;
-
+use iced_graphics::font;
 use std::{cell::RefCell, collections::HashMap};
 
 pub const BUILTIN_ICONS: iced_native::Font = iced_native::Font::External {
diff --git a/glow/src/text/font.rs b/glow/src/text/font.rs
deleted file mode 100644
index 7346ccdb..00000000
--- a/glow/src/text/font.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-pub use font_kit::{
-    error::SelectionError as LoadError, family_name::FamilyName as Family,
-};
-
-pub struct Source {
-    raw: font_kit::source::SystemSource,
-}
-
-impl Source {
-    pub fn new() -> Self {
-        Source {
-            raw: font_kit::source::SystemSource::new(),
-        }
-    }
-
-    pub fn load(&self, families: &[Family]) -> Result<Vec<u8>, LoadError> {
-        let font = self.raw.select_best_match(
-            families,
-            &font_kit::properties::Properties::default(),
-        )?;
-
-        match font {
-            font_kit::handle::Handle::Path { path, .. } => {
-                use std::io::Read;
-
-                let mut buf = Vec::new();
-                let mut reader = std::fs::File::open(path).expect("Read font");
-                let _ = reader.read_to_end(&mut buf);
-
-                Ok(buf)
-            }
-            font_kit::handle::Handle::Memory { bytes, .. } => {
-                Ok(bytes.as_ref().clone())
-            }
-        }
-    }
-}
diff --git a/graphics/Cargo.toml b/graphics/Cargo.toml
index a81807d6..c937763c 100644
--- a/graphics/Cargo.toml
+++ b/graphics/Cargo.toml
@@ -6,6 +6,7 @@ edition = "2018"
 
 [features]
 canvas = ["lyon"]
+font-source = ["font-kit"]
 
 [dependencies]
 bytemuck = "1.2"
@@ -22,3 +23,7 @@ path = "../style"
 [dependencies.lyon]
 version = "0.15"
 optional = true
+
+[dependencies.font-kit]
+version = "0.6"
+optional = true
diff --git a/graphics/src/font.rs b/graphics/src/font.rs
new file mode 100644
index 00000000..3890beba
--- /dev/null
+++ b/graphics/src/font.rs
@@ -0,0 +1,10 @@
+#[cfg(feature = "font-source")]
+mod source;
+
+#[cfg(feature = "font-source")]
+pub use source::Source;
+
+#[cfg(feature = "font-source")]
+pub use font_kit::{
+    error::SelectionError as LoadError, family_name::FamilyName as Family,
+};
diff --git a/graphics/src/font/source.rs b/graphics/src/font/source.rs
new file mode 100644
index 00000000..6855aa93
--- /dev/null
+++ b/graphics/src/font/source.rs
@@ -0,0 +1,35 @@
+use crate::font::{Family, LoadError};
+
+pub struct Source {
+    raw: font_kit::source::SystemSource,
+}
+
+impl Source {
+    pub fn new() -> Self {
+        Source {
+            raw: font_kit::source::SystemSource::new(),
+        }
+    }
+
+    pub fn load(&self, families: &[Family]) -> Result<Vec<u8>, LoadError> {
+        let font = self.raw.select_best_match(
+            families,
+            &font_kit::properties::Properties::default(),
+        )?;
+
+        match font {
+            font_kit::handle::Handle::Path { path, .. } => {
+                use std::io::Read;
+
+                let mut buf = Vec::new();
+                let mut reader = std::fs::File::open(path).expect("Read font");
+                let _ = reader.read_to_end(&mut buf);
+
+                Ok(buf)
+            }
+            font_kit::handle::Handle::Memory { bytes, .. } => {
+                Ok(bytes.as_ref().clone())
+            }
+        }
+    }
+}
diff --git a/graphics/src/lib.rs b/graphics/src/lib.rs
index bdaefb41..152dc7b0 100644
--- a/graphics/src/lib.rs
+++ b/graphics/src/lib.rs
@@ -6,6 +6,7 @@ mod viewport;
 mod widget;
 
 pub mod backend;
+pub mod font;
 pub mod triangle;
 
 #[doc(no_inline)]
diff --git a/wgpu/Cargo.toml b/wgpu/Cargo.toml
index 88290576..b59c7fa3 100644
--- a/wgpu/Cargo.toml
+++ b/wgpu/Cargo.toml
@@ -19,7 +19,6 @@ bytemuck = "1.2"
 glyph_brush = "0.6"
 raw-window-handle = "0.3"
 glam = "0.8"
-font-kit = "0.6"
 log = "0.4"
 guillotiere = "0.5"
 # Pin `gfx-memory` until https://github.com/gfx-rs/wgpu-rs/issues/261 is
@@ -33,6 +32,7 @@ path = "../native"
 [dependencies.iced_graphics]
 version = "0.1"
 path = "../graphics"
+features = ["font-source"]
 
 [dependencies.image]
 version = "0.23"
diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs
index 8bcd6d83..ae9b6b22 100644
--- a/wgpu/src/text.rs
+++ b/wgpu/src/text.rs
@@ -1,7 +1,5 @@
-mod font;
-
 use crate::Transformation;
-
+use iced_graphics::font;
 use std::{cell::RefCell, collections::HashMap};
 
 pub const BUILTIN_ICONS: iced_native::Font = iced_native::Font::External {
diff --git a/wgpu/src/text/font.rs b/wgpu/src/text/font.rs
deleted file mode 100644
index 7346ccdb..00000000
--- a/wgpu/src/text/font.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-pub use font_kit::{
-    error::SelectionError as LoadError, family_name::FamilyName as Family,
-};
-
-pub struct Source {
-    raw: font_kit::source::SystemSource,
-}
-
-impl Source {
-    pub fn new() -> Self {
-        Source {
-            raw: font_kit::source::SystemSource::new(),
-        }
-    }
-
-    pub fn load(&self, families: &[Family]) -> Result<Vec<u8>, LoadError> {
-        let font = self.raw.select_best_match(
-            families,
-            &font_kit::properties::Properties::default(),
-        )?;
-
-        match font {
-            font_kit::handle::Handle::Path { path, .. } => {
-                use std::io::Read;
-
-                let mut buf = Vec::new();
-                let mut reader = std::fs::File::open(path).expect("Read font");
-                let _ = reader.read_to_end(&mut buf);
-
-                Ok(buf)
-            }
-            font_kit::handle::Handle::Memory { bytes, .. } => {
-                Ok(bytes.as_ref().clone())
-            }
-        }
-    }
-}
-- 
cgit