summaryrefslogtreecommitdiffstats
path: root/widget/src/helpers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'widget/src/helpers.rs')
-rw-r--r--widget/src/helpers.rs107
1 files changed, 81 insertions, 26 deletions
diff --git a/widget/src/helpers.rs b/widget/src/helpers.rs
index 3f5136f8..115198fb 100644
--- a/widget/src/helpers.rs
+++ b/widget/src/helpers.rs
@@ -1,10 +1,12 @@
//! Helper functions to create pure widgets.
use crate::button::{self, Button};
use crate::checkbox::{self, Checkbox};
+use crate::combo_box::{self, ComboBox};
use crate::container::{self, Container};
use crate::core;
use crate::core::widget::operation;
use crate::core::{Element, Length, Pixels};
+use crate::keyed;
use crate::overlay;
use crate::pick_list::{self, PickList};
use crate::progress_bar::{self, ProgressBar};
@@ -14,6 +16,7 @@ use crate::runtime::Command;
use crate::scrollable::{self, Scrollable};
use crate::slider::{self, Slider};
use crate::text::{self, Text};
+use crate::text_editor::{self, TextEditor};
use crate::text_input::{self, TextInput};
use crate::toggler::{self, Toggler};
use crate::tooltip::{self, Tooltip};
@@ -24,7 +27,7 @@ use std::ops::RangeInclusive;
/// Creates a [`Column`] with the given children.
///
-/// [`Column`]: widget::Column
+/// [`Column`]: crate::Column
#[macro_export]
macro_rules! column {
() => (
@@ -37,7 +40,7 @@ macro_rules! column {
/// Creates a [`Row`] with the given children.
///
-/// [`Row`]: widget::Row
+/// [`Row`]: crate::Row
#[macro_export]
macro_rules! row {
() => (
@@ -50,7 +53,7 @@ macro_rules! row {
/// Creates a new [`Container`] with the provided content.
///
-/// [`Container`]: widget::Container
+/// [`Container`]: crate::Container
pub fn container<'a, Message, Renderer>(
content: impl Into<Element<'a, Message, Renderer>>,
) -> Container<'a, Message, Renderer>
@@ -62,17 +65,25 @@ where
}
/// Creates a new [`Column`] with the given children.
-///
-/// [`Column`]: widget::Column
pub fn column<Message, Renderer>(
children: Vec<Element<'_, Message, Renderer>>,
) -> Column<'_, Message, Renderer> {
Column::with_children(children)
}
+/// Creates a new [`keyed::Column`] with the given children.
+pub fn keyed_column<'a, Key, Message, Renderer>(
+ children: impl IntoIterator<Item = (Key, Element<'a, Message, Renderer>)>,
+) -> keyed::Column<'a, Key, Message, Renderer>
+where
+ Key: Copy + PartialEq,
+{
+ keyed::Column::with_children(children)
+}
+
/// Creates a new [`Row`] with the given children.
///
-/// [`Row`]: widget::Row
+/// [`Row`]: crate::Row
pub fn row<Message, Renderer>(
children: Vec<Element<'_, Message, Renderer>>,
) -> Row<'_, Message, Renderer> {
@@ -81,7 +92,7 @@ pub fn row<Message, Renderer>(
/// Creates a new [`Scrollable`] with the provided content.
///
-/// [`Scrollable`]: widget::Scrollable
+/// [`Scrollable`]: crate::Scrollable
pub fn scrollable<'a, Message, Renderer>(
content: impl Into<Element<'a, Message, Renderer>>,
) -> Scrollable<'a, Message, Renderer>
@@ -94,7 +105,7 @@ where
/// Creates a new [`Button`] with the provided content.
///
-/// [`Button`]: widget::Button
+/// [`Button`]: crate::Button
pub fn button<'a, Message, Renderer>(
content: impl Into<Element<'a, Message, Renderer>>,
) -> Button<'a, Message, Renderer>
@@ -108,8 +119,8 @@ where
/// Creates a new [`Tooltip`] with the provided content, tooltip text, and [`tooltip::Position`].
///
-/// [`Tooltip`]: widget::Tooltip
-/// [`tooltip::Position`]: widget::tooltip::Position
+/// [`Tooltip`]: crate::Tooltip
+/// [`tooltip::Position`]: crate::tooltip::Position
pub fn tooltip<'a, Message, Renderer>(
content: impl Into<Element<'a, Message, Renderer>>,
tooltip: impl ToString,
@@ -124,7 +135,7 @@ where
/// Creates a new [`Text`] widget with the provided content.
///
-/// [`Text`]: widget::Text
+/// [`Text`]: core::widget::Text
pub fn text<'a, Renderer>(text: impl ToString) -> Text<'a, Renderer>
where
Renderer: core::text::Renderer,
@@ -135,7 +146,7 @@ where
/// Creates a new [`Checkbox`].
///
-/// [`Checkbox`]: widget::Checkbox
+/// [`Checkbox`]: crate::Checkbox
pub fn checkbox<'a, Message, Renderer>(
label: impl Into<String>,
is_checked: bool,
@@ -150,7 +161,7 @@ where
/// Creates a new [`Radio`].
///
-/// [`Radio`]: widget::Radio
+/// [`Radio`]: crate::Radio
pub fn radio<Message, Renderer, V>(
label: impl Into<String>,
value: V,
@@ -168,7 +179,7 @@ where
/// Creates a new [`Toggler`].
///
-/// [`Toggler`]: widget::Toggler
+/// [`Toggler`]: crate::Toggler
pub fn toggler<'a, Message, Renderer>(
label: impl Into<Option<String>>,
is_checked: bool,
@@ -183,7 +194,7 @@ where
/// Creates a new [`TextInput`].
///
-/// [`TextInput`]: widget::TextInput
+/// [`TextInput`]: crate::TextInput
pub fn text_input<'a, Message, Renderer>(
placeholder: &str,
value: &str,
@@ -196,9 +207,23 @@ where
TextInput::new(placeholder, value)
}
+/// Creates a new [`TextEditor`].
+///
+/// [`TextEditor`]: crate::TextEditor
+pub fn text_editor<Message, Renderer>(
+ content: &text_editor::Content<Renderer>,
+) -> TextEditor<'_, core::text::highlighter::PlainText, Message, Renderer>
+where
+ Message: Clone,
+ Renderer: core::text::Renderer,
+ Renderer::Theme: text_editor::StyleSheet,
+{
+ TextEditor::new(content)
+}
+
/// Creates a new [`Slider`].
///
-/// [`Slider`]: widget::Slider
+/// [`Slider`]: crate::Slider
pub fn slider<'a, T, Message, Renderer>(
range: std::ops::RangeInclusive<T>,
value: T,
@@ -215,7 +240,7 @@ where
/// Creates a new [`VerticalSlider`].
///
-/// [`VerticalSlider`]: widget::VerticalSlider
+/// [`VerticalSlider`]: crate::VerticalSlider
pub fn vertical_slider<'a, T, Message, Renderer>(
range: std::ops::RangeInclusive<T>,
value: T,
@@ -232,7 +257,7 @@ where
/// Creates a new [`PickList`].
///
-/// [`PickList`]: widget::PickList
+/// [`PickList`]: crate::PickList
pub fn pick_list<'a, Message, Renderer, T>(
options: impl Into<Cow<'a, [T]>>,
selected: Option<T>,
@@ -252,23 +277,40 @@ where
PickList::new(options, selected, on_selected)
}
+/// Creates a new [`ComboBox`].
+///
+/// [`ComboBox`]: crate::ComboBox
+pub fn combo_box<'a, T, Message, Renderer>(
+ state: &'a combo_box::State<T>,
+ placeholder: &str,
+ selection: Option<&T>,
+ on_selected: impl Fn(T) -> Message + 'static,
+) -> ComboBox<'a, T, Message, Renderer>
+where
+ T: std::fmt::Display + Clone,
+ Renderer: core::text::Renderer,
+ Renderer::Theme: text_input::StyleSheet + overlay::menu::StyleSheet,
+{
+ ComboBox::new(state, placeholder, selection, on_selected)
+}
+
/// Creates a new horizontal [`Space`] with the given [`Length`].
///
-/// [`Space`]: widget::Space
+/// [`Space`]: crate::Space
pub fn horizontal_space(width: impl Into<Length>) -> Space {
Space::with_width(width)
}
/// Creates a new vertical [`Space`] with the given [`Length`].
///
-/// [`Space`]: widget::Space
+/// [`Space`]: crate::Space
pub fn vertical_space(height: impl Into<Length>) -> Space {
Space::with_height(height)
}
/// Creates a horizontal [`Rule`] with the given height.
///
-/// [`Rule`]: widget::Rule
+/// [`Rule`]: crate::Rule
pub fn horizontal_rule<Renderer>(height: impl Into<Pixels>) -> Rule<Renderer>
where
Renderer: core::Renderer,
@@ -279,7 +321,7 @@ where
/// Creates a vertical [`Rule`] with the given width.
///
-/// [`Rule`]: widget::Rule
+/// [`Rule`]: crate::Rule
pub fn vertical_rule<Renderer>(width: impl Into<Pixels>) -> Rule<Renderer>
where
Renderer: core::Renderer,
@@ -294,7 +336,7 @@ where
/// * an inclusive range of possible values, and
/// * the current value of the [`ProgressBar`].
///
-/// [`ProgressBar`]: widget::ProgressBar
+/// [`ProgressBar`]: crate::ProgressBar
pub fn progress_bar<Renderer>(
range: RangeInclusive<f32>,
value: f32,
@@ -308,7 +350,7 @@ where
/// Creates a new [`Image`].
///
-/// [`Image`]: widget::Image
+/// [`Image`]: crate::Image
#[cfg(feature = "image")]
pub fn image<Handle>(handle: impl Into<Handle>) -> crate::Image<Handle> {
crate::Image::new(handle.into())
@@ -316,8 +358,8 @@ pub fn image<Handle>(handle: impl Into<Handle>) -> crate::Image<Handle> {
/// Creates a new [`Svg`] widget from the given [`Handle`].
///
-/// [`Svg`]: widget::Svg
-/// [`Handle`]: widget::svg::Handle
+/// [`Svg`]: crate::Svg
+/// [`Handle`]: crate::svg::Handle
#[cfg(feature = "svg")]
pub fn svg<Renderer>(
handle: impl Into<core::svg::Handle>,
@@ -330,6 +372,8 @@ where
}
/// Creates a new [`Canvas`].
+///
+/// [`Canvas`]: crate::Canvas
#[cfg(feature = "canvas")]
pub fn canvas<P, Message, Renderer>(
program: P,
@@ -341,6 +385,17 @@ where
crate::Canvas::new(program)
}
+/// Creates a new [`Shader`].
+///
+/// [`Shader`]: crate::Shader
+#[cfg(feature = "wgpu")]
+pub fn shader<Message, P>(program: P) -> crate::Shader<Message, P>
+where
+ P: crate::shader::Program<Message>,
+{
+ crate::Shader::new(program)
+}
+
/// Focuses the previous focusable widget.
pub fn focus_previous<Message>() -> Command<Message>
where