new padding widget
This commit is contained in:
parent
b3aab25989
commit
9b3969c6ad
|
@ -23,8 +23,11 @@ pub mod prelude {
|
||||||
pub use crate::event::application::Event as ApplicationEvent;
|
pub use crate::event::application::Event as ApplicationEvent;
|
||||||
pub use crate::event::window::Event as WindowEvent;
|
pub use crate::event::window::Event as WindowEvent;
|
||||||
pub use crate::platform::Platform;
|
pub use crate::platform::Platform;
|
||||||
|
pub use crate::widget::Column;
|
||||||
|
pub use crate::widget::IntoPadded;
|
||||||
pub use crate::widget::Label;
|
pub use crate::widget::Label;
|
||||||
pub use crate::widget::Row;
|
pub use crate::widget::Row;
|
||||||
|
pub use crate::widget::Padding;
|
||||||
pub use crate::widget::Widget;
|
pub use crate::widget::Widget;
|
||||||
pub use crate::window::*;
|
pub use crate::window::*;
|
||||||
pub use crate::rgb;
|
pub use crate::rgb;
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
|
|
||||||
use abletk::plugin::QuitPlugin;
|
use abletk::plugin::QuitPlugin;
|
||||||
use abletk::prelude::*;
|
use abletk::prelude::*;
|
||||||
use abletk::widget::Column;
|
|
||||||
|
|
||||||
#[launch]
|
#[launch]
|
||||||
fn launch() -> _ {
|
fn launch() -> _ {
|
||||||
|
@ -22,7 +21,8 @@ fn launch() -> _ {
|
||||||
.add(Label::new("World!"))
|
.add(Label::new("World!"))
|
||||||
.add(Label::new("AbleTK!")))
|
.add(Label::new("AbleTK!")))
|
||||||
.add(Label::new("this is a label!")
|
.add(Label::new("this is a label!")
|
||||||
.bg_color(rgb!(0xFF0000FF))))
|
.bg_color(rgb!(0xFF0000FF)))
|
||||||
|
.padding_left(10))
|
||||||
.on_event(WindowEvent::Closed, |_, window| {
|
.on_event(WindowEvent::Closed, |_, window| {
|
||||||
window.set_title("CLOSING!")
|
window.set_title("CLOSING!")
|
||||||
}))
|
}))
|
||||||
|
|
|
@ -8,11 +8,13 @@
|
||||||
|
|
||||||
mod column;
|
mod column;
|
||||||
mod label;
|
mod label;
|
||||||
|
mod padding;
|
||||||
mod row;
|
mod row;
|
||||||
|
|
||||||
use abletk_common::Renderer;
|
use abletk_common::Renderer;
|
||||||
pub use column::*;
|
pub use column::*;
|
||||||
pub use label::*;
|
pub use label::*;
|
||||||
|
pub use padding::*;
|
||||||
pub use row::*;
|
pub use row::*;
|
||||||
|
|
||||||
use crate::layout::position::Position;
|
use crate::layout::position::Position;
|
||||||
|
|
98
src/widget/padding.rs
Executable file
98
src/widget/padding.rs
Executable file
|
@ -0,0 +1,98 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022 Umut İnan Erdoğan <umutinanerdogan@pm.me>
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
use crate::{layout::position::Position, widget::Widget};
|
||||||
|
use abletk_common::Renderer;
|
||||||
|
|
||||||
|
pub struct Padding<W: Widget> {
|
||||||
|
widget: W,
|
||||||
|
left: u32,
|
||||||
|
right: u32,
|
||||||
|
top: u32,
|
||||||
|
bottom: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<W: Widget> Widget for Padding<W> {
|
||||||
|
fn draw(&self, renderer: &mut Renderer) {
|
||||||
|
self.widget.draw(renderer)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn position(&self, renderer: &mut Renderer) -> Position {
|
||||||
|
let pos = self.widget.position(renderer);
|
||||||
|
|
||||||
|
Position::new(
|
||||||
|
self.left,
|
||||||
|
self.top,
|
||||||
|
pos.width() + self.right,
|
||||||
|
pos.height() + self.bottom,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<W: Widget> Padding<W> {
|
||||||
|
pub fn new(
|
||||||
|
left: u32,
|
||||||
|
right: u32,
|
||||||
|
top: u32,
|
||||||
|
bottom: u32,
|
||||||
|
widget: W,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
widget,
|
||||||
|
left,
|
||||||
|
right,
|
||||||
|
top,
|
||||||
|
bottom,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait IntoPadded<W: Widget> {
|
||||||
|
fn padding(self, left: u32, right: u32, top: u32, bottom: u32) -> Padding<W>;
|
||||||
|
fn padding_x(self, left: u32, right: u32) -> Padding<W>;
|
||||||
|
fn padding_y(self, top: u32, bottom: u32) -> Padding<W>;
|
||||||
|
fn padding_left(self, left: u32) -> Padding<W>;
|
||||||
|
fn padding_right(self, right: u32) -> Padding<W>;
|
||||||
|
fn padding_top(self, top: u32) -> Padding<W>;
|
||||||
|
fn padding_bottom(self, bottom: u32) -> Padding<W>;
|
||||||
|
fn padding_all(self, padding: u32) -> Padding<W>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<W: Widget> IntoPadded<W> for W {
|
||||||
|
fn padding(self, left: u32, right: u32, top: u32, bottom: u32) -> Padding<W> {
|
||||||
|
Padding::new(left, right, top, bottom, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn padding_x(self, left: u32, right: u32) -> Padding<W> {
|
||||||
|
Padding::new(left, right, 0, 0, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn padding_y(self, top: u32, bottom: u32) -> Padding<W> {
|
||||||
|
Padding::new(0, 0, top, bottom, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn padding_left(self, left: u32) -> Padding<W> {
|
||||||
|
Padding::new(left, 0, 0, 0, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn padding_right(self, right: u32) -> Padding<W> {
|
||||||
|
Padding::new(0, right, 0, 0, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn padding_top(self, top: u32) -> Padding<W> {
|
||||||
|
Padding::new(0, 0, top, 0, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn padding_bottom(self, bottom: u32) -> Padding<W> {
|
||||||
|
Padding::new(0, 0, 0, bottom, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn padding_all(self, padding: u32) -> Padding<W> {
|
||||||
|
Padding::new(padding, padding, padding, padding, self)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue