refactor: make Theme a generic parameter for the cosmic container
This makes the container possible to use with custom themes in cosmic-time
This commit is contained in:
parent
18b2b74b8d
commit
989d14b206
1 changed files with 24 additions and 17 deletions
|
|
@ -10,11 +10,13 @@ use iced_core::widget::Tree;
|
||||||
use iced_core::{Clipboard, Element, Layout, Length, Padding, Rectangle, Shell, Widget};
|
use iced_core::{Clipboard, Element, Layout, Length, Padding, Rectangle, Shell, Widget};
|
||||||
pub use iced_style::container::{Appearance, StyleSheet};
|
pub use iced_style::container::{Appearance, StyleSheet};
|
||||||
|
|
||||||
pub fn container<'a, Message: 'static, T>(
|
pub fn container<'a, Message: 'static, Theme, E>(
|
||||||
content: T,
|
content: E,
|
||||||
) -> LayerContainer<'a, Message, crate::Renderer>
|
) -> LayerContainer<'a, Message, Theme, crate::Renderer>
|
||||||
where
|
where
|
||||||
T: Into<Element<'a, Message, crate::Theme, crate::Renderer>>,
|
E: Into<Element<'a, Message, Theme, crate::Renderer>>,
|
||||||
|
Theme: iced_style::container::StyleSheet + LayeredTheme,
|
||||||
|
<Theme as iced_widget::container::StyleSheet>::Style: From<crate::theme::Container>,
|
||||||
{
|
{
|
||||||
LayerContainer::new(content)
|
LayerContainer::new(content)
|
||||||
}
|
}
|
||||||
|
|
@ -23,22 +25,25 @@ where
|
||||||
///
|
///
|
||||||
/// It is normally used for alignment purposes.
|
/// It is normally used for alignment purposes.
|
||||||
#[allow(missing_debug_implementations)]
|
#[allow(missing_debug_implementations)]
|
||||||
pub struct LayerContainer<'a, Message, Renderer>
|
pub struct LayerContainer<'a, Message, Theme, Renderer>
|
||||||
where
|
where
|
||||||
Renderer: iced_core::Renderer,
|
Renderer: iced_core::Renderer,
|
||||||
|
Theme: iced_style::container::StyleSheet + LayeredTheme,
|
||||||
{
|
{
|
||||||
layer: Option<cosmic_theme::Layer>,
|
layer: Option<cosmic_theme::Layer>,
|
||||||
container: Container<'a, Message, crate::Theme, Renderer>,
|
container: Container<'a, Message, Theme, Renderer>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message, Renderer> LayerContainer<'a, Message, Renderer>
|
impl<'a, Message, Theme, Renderer> LayerContainer<'a, Message, Theme, Renderer>
|
||||||
where
|
where
|
||||||
Renderer: iced_core::Renderer,
|
Renderer: iced_core::Renderer,
|
||||||
|
Theme: iced_style::container::StyleSheet + LayeredTheme,
|
||||||
|
<Theme as iced_style::container::StyleSheet>::Style: From<crate::theme::Container>,
|
||||||
{
|
{
|
||||||
/// Creates an empty [`Container`].
|
/// Creates an empty [`Container`].
|
||||||
pub(crate) fn new<T>(content: T) -> Self
|
pub(crate) fn new<T>(content: T) -> Self
|
||||||
where
|
where
|
||||||
T: Into<Element<'a, Message, crate::Theme, Renderer>>,
|
T: Into<Element<'a, Message, Theme, Renderer>>,
|
||||||
{
|
{
|
||||||
LayerContainer {
|
LayerContainer {
|
||||||
layer: None,
|
layer: None,
|
||||||
|
|
@ -122,16 +127,17 @@ where
|
||||||
|
|
||||||
/// Sets the style of the [`LayerContainer`].
|
/// Sets the style of the [`LayerContainer`].
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn style(mut self, style: impl Into<<crate::Theme as StyleSheet>::Style>) -> Self {
|
pub fn style(mut self, style: impl Into<<Theme as StyleSheet>::Style>) -> Self {
|
||||||
self.container = self.container.style(style);
|
self.container = self.container.style(style);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message, Renderer> Widget<Message, crate::Theme, Renderer>
|
impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer>
|
||||||
for LayerContainer<'a, Message, Renderer>
|
for LayerContainer<'a, Message, Theme, Renderer>
|
||||||
where
|
where
|
||||||
Renderer: iced_core::Renderer,
|
Renderer: iced_core::Renderer,
|
||||||
|
Theme: iced_style::container::StyleSheet + LayeredTheme + Clone,
|
||||||
{
|
{
|
||||||
fn children(&self) -> Vec<Tree> {
|
fn children(&self) -> Vec<Tree> {
|
||||||
self.container.children()
|
self.container.children()
|
||||||
|
|
@ -213,7 +219,7 @@ where
|
||||||
&self,
|
&self,
|
||||||
tree: &Tree,
|
tree: &Tree,
|
||||||
renderer: &mut Renderer,
|
renderer: &mut Renderer,
|
||||||
theme: &crate::Theme,
|
theme: &Theme,
|
||||||
renderer_style: &renderer::Style,
|
renderer_style: &renderer::Style,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: mouse::Cursor,
|
cursor_position: mouse::Cursor,
|
||||||
|
|
@ -242,20 +248,21 @@ where
|
||||||
tree: &'b mut Tree,
|
tree: &'b mut Tree,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'b, Message, crate::Theme, Renderer>> {
|
) -> Option<overlay::Element<'b, Message, Theme, Renderer>> {
|
||||||
self.container.overlay(tree, layout, renderer)
|
self.container.overlay(tree, layout, renderer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message, Renderer> From<LayerContainer<'a, Message, Renderer>>
|
impl<'a, Message, Theme, Renderer> From<LayerContainer<'a, Message, Theme, Renderer>>
|
||||||
for Element<'a, Message, crate::Theme, Renderer>
|
for Element<'a, Message, Theme, Renderer>
|
||||||
where
|
where
|
||||||
Message: 'a,
|
Message: 'a,
|
||||||
Renderer: 'a + iced_core::Renderer,
|
Renderer: 'a + iced_core::Renderer,
|
||||||
|
Theme: iced_style::container::StyleSheet + LayeredTheme + 'a + Clone,
|
||||||
{
|
{
|
||||||
fn from(
|
fn from(
|
||||||
column: LayerContainer<'a, Message, Renderer>,
|
column: LayerContainer<'a, Message, Theme, Renderer>,
|
||||||
) -> Element<'a, Message, crate::Theme, Renderer> {
|
) -> Element<'a, Message, Theme, Renderer> {
|
||||||
Element::new(column)
|
Element::new(column)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue