Struct Padding

Source
pub struct Padding<T, W> { /* private fields */ }
Expand description

A widget that just adds padding around its child.

Implementations§

Source§

impl<T, W: Widget<T>> Padding<T, W>

Source

pub fn new(insets: impl Into<KeyOrValue<Insets>>, child: W) -> Padding<T, W>

Create a new Padding with the specified padding and child.

The insets argument can either be an instance of Insets, a Key referring to Insets in the Env, an f64 for uniform padding, an (f64, f64) for axis-uniform padding, or (f64, f64, f64, f64) (left, top, right, bottom) values.

§Examples

Uniform padding:

use druid::widget::{Label, Padding};
use druid::kurbo::Insets;

let _: Padding<(), _> = Padding::new(10.0, Label::new("uniform!"));
let _: Padding<(), _> = Padding::new(Insets::uniform(10.0), Label::new("uniform!"));

Uniform padding across each axis:

use druid::widget::{Label, Padding};
use druid::kurbo::Insets;

let child: Label<()> = Label::new("I need my space!");
let _: Padding<(), _> = Padding::new((10.0, 20.0), Label::new("more y than x!"));
// equivalent:
let _: Padding<(), _> = Padding::new(Insets::uniform_xy(10.0, 20.0), Label::new("ditto :)"));
Examples found in repository?
examples/scroll.rs (line 39)
36fn build_widget() -> impl Widget<u32> {
37    let mut col = Flex::column();
38    for i in 0..30 {
39        col.add_child(Padding::new(3.0, OverPainter(i)));
40    }
41    col.scroll()
42}
More examples
Hide additional examples
examples/multiwin.rs (line 67)
51fn ui_builder() -> impl Widget<State> {
52    let text = LocalizedString::new("hello-counter")
53        .with_arg("count", |data: &State, _env| data.menu_count.into());
54    let label = Label::new(text);
55    let inc_button =
56        Button::<State>::new("Add menu item").on_click(|_ctx, data, _env| data.menu_count += 1);
57    let dec_button = Button::<State>::new("Remove menu item")
58        .on_click(|_ctx, data, _env| data.menu_count = data.menu_count.saturating_sub(1));
59    let new_button = Button::<State>::new("New window").on_click(|ctx, _data, _env| {
60        ctx.submit_command(sys_cmds::NEW_FILE.to(Global));
61    });
62    let quit_button = Button::<State>::new("Quit app").on_click(|_ctx, _data, _env| {
63        Application::global().quit();
64    });
65
66    let mut col = Flex::column();
67    col.add_flex_child(Align::centered(Padding::new(5.0, label)), 1.0);
68    let mut row = Flex::row();
69    row.add_child(Padding::new(5.0, inc_button));
70    row.add_child(Padding::new(5.0, dec_button));
71    col.add_flex_child(Align::centered(row), 1.0);
72    let mut row = Flex::row();
73    row.add_child(Padding::new(5.0, new_button));
74    row.add_child(Padding::new(5.0, quit_button));
75    col.add_flex_child(Align::centered(row), 1.0);
76    let content = ControllerHost::new(col, ContextMenuController);
77    Glow::new(content)
78}
examples/switches.rs (line 41)
34fn build_widget() -> impl Widget<DemoState> {
35    let mut col = Flex::column();
36    let mut row = Flex::row();
37    let switch = LensWrap::new(Switch::new(), DemoState::value);
38    let check_box = LensWrap::new(Checkbox::new(""), DemoState::value);
39    let switch_label = Label::new("Setting label");
40
41    row.add_child(Padding::new(5.0, switch_label));
42    row.add_child(Padding::new(5.0, switch));
43    row.add_child(Padding::new(5.0, check_box));
44
45    let stepper = LensWrap::new(
46        Stepper::new()
47            .with_range(0.0, 10.0)
48            .with_step(0.5)
49            .with_wraparound(false),
50        DemoState::stepper_value,
51    );
52
53    let mut textbox_row = Flex::row();
54    // TODO: Replace Parse usage with TextBox::with_formatter
55    #[allow(deprecated)]
56    let textbox = LensWrap::new(
57        Parse::new(TextBox::new()),
58        DemoState::stepper_value.map(|x| Some(*x), |x, y| *x = y.unwrap_or(0.0)),
59    );
60    textbox_row.add_child(Padding::new(5.0, textbox));
61    textbox_row.add_child(Padding::new(5.0, stepper.center()));
62
63    let mut label_row = Flex::row();
64
65    let label = Label::new(|data: &DemoState, _env: &_| {
66        format!("Stepper value: {0:.2}", data.stepper_value)
67    });
68
69    label_row.add_child(Padding::new(5.0, label));
70
71    col.set_main_axis_alignment(MainAxisAlignment::Center);
72    col.add_child(Padding::new(5.0, row));
73    col.add_child(Padding::new(5.0, textbox_row));
74    col.add_child(Padding::new(5.0, label_row));
75    col.center()
76}
examples/split_demo.rs (lines 25-35)
24fn build_app() -> impl Widget<u32> {
25    let fixed_cols = Padding::new(
26        10.0,
27        Container::new(
28            Split::columns(
29                Align::centered(Label::new("Left Split")),
30                Align::centered(Label::new("Right Split")),
31            )
32            .split_point(0.5),
33        )
34        .border(Color::WHITE, 1.0),
35    );
36    let fixed_rows = Padding::new(
37        10.0,
38        Container::new(
39            Split::rows(
40                Align::centered(Label::new("Top Split")),
41                Align::centered(Label::new("Bottom Split")),
42            )
43            .split_point(0.4)
44            .bar_size(3.0),
45        )
46        .border(Color::WHITE, 1.0),
47    );
48    let draggable_cols = Padding::new(
49        10.0,
50        Container::new(
51            Split::columns(
52                Align::centered(Label::new("Split A")),
53                Align::centered(Label::new("Split B")),
54            )
55            .split_point(0.5)
56            .draggable(true)
57            .solid_bar(true)
58            .min_size(60.0, 60.0),
59        )
60        .border(Color::WHITE, 1.0),
61    );
62    Padding::new(
63        10.0,
64        Container::new(
65            Split::rows(
66                Split::rows(fixed_cols, fixed_rows)
67                    .split_point(0.33)
68                    .bar_size(3.0)
69                    .min_bar_area(3.0)
70                    .draggable(true),
71                draggable_cols,
72            )
73            .split_point(0.75)
74            .bar_size(5.0)
75            .min_bar_area(11.0)
76            .draggable(true),
77        )
78        .border(Color::WHITE, 1.0),
79    )
80}

Trait Implementations§

Source§

impl<T: Data, W: Widget<T>> Widget<T> for Padding<T, W>

Source§

fn event( &mut self, ctx: &mut EventCtx<'_, '_>, event: &Event, data: &mut T, env: &Env, )

Handle an event. Read more
Source§

fn lifecycle( &mut self, ctx: &mut LifeCycleCtx<'_, '_>, event: &LifeCycle, data: &T, env: &Env, )

Handle a life cycle notification. Read more
Source§

fn update(&mut self, ctx: &mut UpdateCtx<'_, '_>, _old: &T, data: &T, env: &Env)

Update the widget’s appearance in response to a change in the app’s Data or Env. Read more
Source§

fn layout( &mut self, ctx: &mut LayoutCtx<'_, '_>, bc: &BoxConstraints, data: &T, env: &Env, ) -> Size

Compute layout. Read more
Source§

fn paint(&mut self, ctx: &mut PaintCtx<'_, '_, '_>, data: &T, env: &Env)

Paint the widget appearance. Read more
Source§

fn compute_max_intrinsic( &mut self, axis: Axis, ctx: &mut LayoutCtx<'_, '_>, bc: &BoxConstraints, data: &T, env: &Env, ) -> f64

Computes max intrinsic/preferred dimension of a widget on the provided axis. Read more
Source§

impl<T, W> WidgetWrapper for Padding<T, W>

Source§

type Wrapped = W

The type of the wrapped widget. Maybe we would like to constrain this to Widget<impl Data> (if existential bounds were supported). Any other scheme leads to T being unconstrained in unification at some point
Source§

fn wrapped(&self) -> &Self::Wrapped

Get immutable access to the wrapped child
Source§

fn wrapped_mut(&mut self) -> &mut Self::Wrapped

Get mutable access to the wrapped child

Auto Trait Implementations§

§

impl<T, W> !Freeze for Padding<T, W>

§

impl<T, W> !RefUnwindSafe for Padding<T, W>

§

impl<T, W> !Send for Padding<T, W>

§

impl<T, W> !Sync for Padding<T, W>

§

impl<T, W> Unpin for Padding<T, W>
where W: Unpin, T: Unpin,

§

impl<T, W> !UnwindSafe for Padding<T, W>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> RoundFrom<T> for T

Source§

fn round_from(x: T) -> T

Performs the conversion.
Source§

impl<T, U> RoundInto<U> for T
where U: RoundFrom<T>,

Source§

fn round_into(self) -> U

Performs the conversion.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, W> TestWidgetExt<T> for W
where T: Data, W: Widget<T> + 'static,

Source§

fn record(self, recording: &Recording) -> Recorder<Self>

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, W> WidgetExt<T> for W
where T: Data, W: Widget<T> + 'static,

Source§

fn padding(self, insets: impl Into<KeyOrValue<Insets>>) -> Padding<T, Self>

Wrap this widget in a Padding widget with the given Insets. Read more
Source§

fn center(self) -> Align<T>

Wrap this widget in an Align widget, configured to center it.
Source§

fn align_left(self) -> Align<T>

Wrap this widget in an Align widget, configured to align left.
Source§

fn align_right(self) -> Align<T>

Wrap this widget in an Align widget, configured to align right.
Source§

fn align_vertical(self, align: UnitPoint) -> Align<T>

Wrap this widget in an Align widget, configured to align vertically.
Source§

fn align_horizontal(self, align: UnitPoint) -> Align<T>

Wrap this widget in an Align widget, configured to align horizontally.
Source§

fn fix_width(self, width: impl Into<KeyOrValue<f64>>) -> SizedBox<T>

Wrap this widget in a SizedBox with an explicit width.
Source§

fn fix_height(self, height: impl Into<KeyOrValue<f64>>) -> SizedBox<T>

Wrap this widget in a SizedBox with an explicit height.
Source§

fn fix_size( self, width: impl Into<KeyOrValue<f64>>, height: impl Into<KeyOrValue<f64>>, ) -> SizedBox<T>

Wrap this widget in an SizedBox with an explicit width and height
Source§

fn expand(self) -> SizedBox<T>

Wrap this widget in a SizedBox with an infinite width and height. Read more
Source§

fn expand_width(self) -> SizedBox<T>

Wrap this widget in a SizedBox with an infinite width. Read more
Source§

fn expand_height(self) -> SizedBox<T>

Wrap this widget in a SizedBox with an infinite width. Read more
Source§

fn background(self, brush: impl Into<BackgroundBrush<T>>) -> Container<T>

Wrap this widget in a Container with the provided background brush. Read more
Source§

fn foreground(self, brush: impl Into<BackgroundBrush<T>>) -> Container<T>

Wrap this widget in a Container with the provided foreground brush. Read more
Source§

fn border( self, color: impl Into<KeyOrValue<Color>>, width: impl Into<KeyOrValue<f64>>, ) -> Container<T>

Wrap this widget in a Container with the given border. Read more
Source§

fn env_scope(self, f: impl Fn(&mut Env, &T) + 'static) -> EnvScope<T, Self>

Wrap this widget in a EnvScope widget, modifying the parent Env with the provided closure.
Source§

fn controller<C: Controller<T, Self>>( self, controller: C, ) -> ControllerHost<Self, C>

Wrap this widget with the provided Controller.
Source§

fn on_added( self, f: impl Fn(&mut Self, &mut LifeCycleCtx<'_, '_>, &T, &Env) + 'static, ) -> ControllerHost<Self, Added<T, Self>>

Provide a closure that will be called when this widget is added to the widget tree. Read more
Source§

fn on_click( self, f: impl Fn(&mut EventCtx<'_, '_>, &mut T, &Env) + 'static, ) -> ControllerHost<Self, Click<T>>

Control the events of this widget with a Click widget. The closure provided will be called when the widget is clicked with the left mouse button. Read more
Source§

fn debug_paint_layout(self) -> EnvScope<T, Self>

Draw the layout Rects of this widget and its children.
Source§

fn debug_widget_id(self) -> EnvScope<T, Self>

Display the WidgetIds for this widget and its children, when hot. Read more
Source§

fn debug_invalidation(self) -> DebugInvalidation<T, Self>

Draw a color-changing rectangle over this widget, allowing you to see the invalidation regions.
Source§

fn debug_widget(self) -> EnvScope<T, Self>

Set the DEBUG_WIDGET env variable for this widget (and its descendants). Read more
Source§

fn lens<S: Data, L: Lens<S, T>>(self, lens: L) -> LensWrap<S, T, L, Self>

Wrap this widget in a LensWrap widget for the provided Lens.
Source§

fn with_id(self, id: WidgetId) -> IdentityWrapper<Self>

Assign the widget a specific WidgetId. Read more
Source§

fn boxed(self) -> Box<dyn Widget<T>>

Wrap this widget in a Box.
Source§

fn scroll(self) -> Scroll<T, Self>

Wrap this widget in a Scroll widget.
Source§

fn disabled_if( self, disabled_if: impl Fn(&T, &Env) -> bool + 'static, ) -> DisabledIf<T, Self>

Wrap this widget in a DisabledIf widget. Read more
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more