From 664251f3f5c7b76f69a97683af1468094bba887f Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Sat, 14 May 2022 01:47:55 +0200
Subject: Draft first-class `Theme` support

RFC: https://github.com/iced-rs/rfcs/pull/6
---
 wgpu/src/lib.rs               |  4 +++-
 wgpu/src/window/compositor.rs | 14 +++++++++-----
 2 files changed, 12 insertions(+), 6 deletions(-)

(limited to 'wgpu')

diff --git a/wgpu/src/lib.rs b/wgpu/src/lib.rs
index ebe48510..d1ad6cd9 100644
--- a/wgpu/src/lib.rs
+++ b/wgpu/src/lib.rs
@@ -39,6 +39,7 @@ mod quad;
 mod text;
 
 pub use iced_graphics::{Antialiasing, Color, Error, Primitive, Viewport};
+pub use iced_native::Theme;
 pub use wgpu;
 
 pub use backend::Backend;
@@ -53,4 +54,5 @@ mod image;
 ///
 /// [`wgpu`]: https://github.com/gfx-rs/wgpu-rs
 /// [`iced`]: https://github.com/iced-rs/iced
-pub type Renderer = iced_graphics::Renderer<Backend>;
+pub type Renderer<Theme = iced_native::Theme> =
+    iced_graphics::Renderer<Backend, Theme>;
diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs
index 54ea8247..bfb18bfa 100644
--- a/wgpu/src/window/compositor.rs
+++ b/wgpu/src/window/compositor.rs
@@ -5,9 +5,11 @@ use iced_graphics::compositor;
 use iced_native::futures;
 use raw_window_handle::HasRawWindowHandle;
 
+use std::marker::PhantomData;
+
 /// A window graphics backend for iced powered by `wgpu`.
 #[allow(missing_debug_implementations)]
-pub struct Compositor {
+pub struct Compositor<Theme> {
     settings: Settings,
     instance: wgpu::Instance,
     adapter: wgpu::Adapter,
@@ -16,9 +18,10 @@ pub struct Compositor {
     staging_belt: wgpu::util::StagingBelt,
     local_pool: futures::executor::LocalPool,
     format: wgpu::TextureFormat,
+    theme: PhantomData<Theme>,
 }
 
-impl Compositor {
+impl<Theme> Compositor<Theme> {
     const CHUNK_SIZE: u64 = 10 * 1024;
 
     /// Requests a new [`Compositor`] with the given [`Settings`].
@@ -101,6 +104,7 @@ impl Compositor {
             staging_belt,
             local_pool,
             format,
+            theme: PhantomData,
         })
     }
 
@@ -110,15 +114,15 @@ impl Compositor {
     }
 }
 
-impl iced_graphics::window::Compositor for Compositor {
+impl<Theme> iced_graphics::window::Compositor for Compositor<Theme> {
     type Settings = Settings;
-    type Renderer = Renderer;
+    type Renderer = Renderer<Theme>;
     type Surface = wgpu::Surface;
 
     fn new<W: HasRawWindowHandle>(
         settings: Self::Settings,
         compatible_window: Option<&W>,
-    ) -> Result<(Self, Renderer), Error> {
+    ) -> Result<(Self, Self::Renderer), Error> {
         let compositor = futures::executor::block_on(Self::request(
             settings,
             compatible_window,
-- 
cgit