pub struct Response {
pub id: Id,
pub node_ref: UIRef,
pub hovered: bool,
pub through_hovered: bool,
pub l_mouse: MouseButton,
pub r_mouse: MouseButton,
pub scroll: Vec2,
}Fields§
§id: Id§node_ref: UIRef§hovered: bool§through_hovered: boolIs this node being hovered through the currently focused node?
l_mouse: MouseButton§r_mouse: MouseButton§scroll: Vec2Implementations§
Source§impl Response
impl Response
pub fn contains_mouse(&self, ui: &mut UI<'_, '_>) -> bool
Sourcepub fn mouse_pos(&self, ui: &mut UI<'_, '_>) -> Option<Vec2>
pub fn mouse_pos(&self, ui: &mut UI<'_, '_>) -> Option<Vec2>
Returns the position of the mouse relative to the node
pub fn mouse_down(&self) -> bool
pub fn mouse_pressed(&self) -> bool
pub fn mouse_released(&self) -> bool
Sourcepub fn mouse_clicked(&self) -> bool
pub fn mouse_clicked(&self) -> bool
Examples found in repository?
examples/docking.rs (line 18)
16 fn render(&mut self, ui: &mut pierro::UI, _context: &mut ()) {
17 pierro::label(ui, format!("{}: {}", self.text, self.n));
18 if pierro::button(ui, "Add 100!").mouse_clicked() {
19 self.n += 100;
20 }
21 }
22
23 fn add_tab_dropdown<F: FnMut(Self)>(ui: &mut pierro::UI, mut add_tab: F, _context: &mut ()) {
24 if pierro::menu_button(ui, "Hey").mouse_clicked() {
25 add_tab(Self {
26 text: "Hey",
27 n: 0,
28 });
29 }
30 if pierro::menu_button(ui, "Goodbye").mouse_clicked() {
31 add_tab(Self {
32 text: "Goodbye",
33 n: 123,
34 });
35 }
36 }More examples
examples/widget_gallery.rs (line 52)
22 fn ui(&mut self, ui: &mut pierro::UI) {
23 pierro::scroll_area(ui, |ui| {
24 pierro::margin(ui, |ui| {
25 pierro::label(ui, "A label");
26 pierro::v_spacing(ui, 10.0);
27
28 pierro::button(ui, "A button");
29 pierro::v_spacing(ui, 10.0);
30
31 pierro::text_edit(ui, &mut self.text_edit_text);
32 pierro::v_spacing(ui, 10.0);
33
34 pierro::checkbox_labeled(ui, "A checkbox", &mut self.checkbox_state);
35 pierro::v_spacing(ui, 10.0);
36
37 let context_menu_response = pierro::label(ui, "Context menu (right click me!)");
38 pierro::context_menu(ui, &context_menu_response, |ui| {
39 pierro::label(ui, "Inside the context menu");
40 });
41 pierro::v_spacing(ui, 10.0);
42
43 pierro::collapsing_header(ui, "A collapsing header", |ui| {
44 for i in 0..50 {
45 pierro::label(ui, i.to_string());
46 }
47 });
48 pierro::v_spacing(ui, 10.0);
49
50 pierro::dropdown(ui, self.dropdown_state.clone(), |ui| {
51 for option in ["Option A", "Option B", "Option C"] {
52 if pierro::menu_button(ui, option).mouse_clicked() {
53 self.dropdown_state = option.to_owned();
54 }
55 }
56 });
57
58 });
59 });
60 }
61
62}
63
64struct Layout {
65 axis: pierro::Axis,
66 justify: pierro::Justify,
67 align: pierro::Align
68}
69
70impl Layout {
71
72 fn new() -> Self {
73 Self {
74 axis: pierro::Axis::X,
75 justify: pierro::Justify::Center,
76 align: pierro::Align::Center
77 }
78 }
79
80 fn node(&self, ui: &mut pierro::UI, color: pierro::Color) {
81 ui.node(
82 pierro::UINodeParams::new(pierro::Size::px(100.0), pierro::Size::px(100.0))
83 .with_fill(color)
84 );
85 }
86
87 fn ui(&mut self, ui: &mut pierro::UI) {
88
89 pierro::margin(ui, |ui| {
90 pierro::dropdown_labeled(ui, "Axis: ", match self.axis {
91 pierro::Axis::X => "X",
92 pierro::Axis::Y => "Y",
93 }, |ui| {
94 if pierro::menu_button(ui, "X").mouse_clicked() {
95 self.axis = pierro::Axis::X;
96 }
97 if pierro::menu_button(ui, "Y").mouse_clicked() {
98 self.axis = pierro::Axis::Y;
99 }
100 });
101 pierro::v_spacing(ui, 5.0);
102
103 pierro::dropdown_labeled(ui, "Justify: ", match self.justify {
104 pierro::Justify::Min => "Min",
105 pierro::Justify::Center => "Center",
106 pierro::Justify::Max => "Max",
107 }, |ui| {
108 if pierro::menu_button(ui, "Min").mouse_clicked() {
109 self.justify = pierro::Justify::Min;
110 }
111 if pierro::menu_button(ui, "Center").mouse_clicked() {
112 self.justify = pierro::Justify::Center;
113 }
114 if pierro::menu_button(ui, "Max").mouse_clicked() {
115 self.justify = pierro::Justify::Max;
116 }
117 });
118 pierro::v_spacing(ui, 5.0);
119
120 pierro::dropdown_labeled(ui, "Align: ", match self.align {
121 pierro::Align::Min => "Min",
122 pierro::Align::Center => "Center",
123 pierro::Align::Max => "Max",
124 }, |ui| {
125 if pierro::menu_button(ui, "Min").mouse_clicked() {
126 self.align = pierro::Align::Min;
127 }
128 if pierro::menu_button(ui, "Center").mouse_clicked() {
129 self.align = pierro::Align::Center;
130 }
131 if pierro::menu_button(ui, "Max").mouse_clicked() {
132 self.align = pierro::Align::Max;
133 }
134 });
135 });
136
137 pierro::h_divider(ui);
138 pierro::container(ui,
139 pierro::Size::fr(1.0),
140 pierro::Size::fr(1.0),
141 pierro::Layout::new(self.axis).with_justify(self.justify).with_align(self.align),
142 |ui| {
143 self.node(ui, pierro::Color::RED);
144 self.node(ui, pierro::Color::GREEN);
145 self.node(ui, pierro::Color::BLUE);
146 });
147 }
148
149}
150
151enum GalleryTab {
152 Basic(Basic),
153 Layout(Layout)
154}
155
156impl pierro::DockingTab for GalleryTab {
157
158 type Context = ();
159
160 fn title(&self) -> String {
161 match self {
162 GalleryTab::Basic(..) => "Basic Widgets".to_owned(),
163 GalleryTab::Layout(..) => "Layout".to_owned()
164 }
165 }
166
167 fn render(&mut self, ui: &mut pierro::UI, _context: &mut ()) {
168 match self {
169 GalleryTab::Basic(basic) => basic.ui(ui),
170 GalleryTab::Layout(layout) => layout.ui(ui)
171 }
172 }
173
174 fn add_tab_dropdown<F: FnMut(Self)>(ui: &mut pierro::UI, mut add_tab: F, _context: &mut ()) {
175 if pierro::menu_button(ui, "Basic Widgets").mouse_clicked() {
176 add_tab(Self::Basic(Basic::new()));
177 }
178 if pierro::menu_button(ui, "Layout").mouse_clicked() {
179 add_tab(Self::Layout(Layout::new()));
180 }
181 }examples/test.rs (line 29)
15 fn tick(&mut self, ui: &mut pierro::UI) {
16
17 let bg_color = ui.style::<pierro::Theme>().bg_dark;
18 let bg = ui.node(
19 pierro::UINodeParams::new(pierro::Size::fr(1.0), pierro::Size::fr(1.0))
20 .with_layout(pierro::Layout::vertical().with_vertical_overflow())
21 .with_fill(bg_color)
22 .with_transform(pierro::TSTransform::scale(self.zoom))
23 );
24
25 ui.with_parent(bg.node_ref, |ui| {
26
27 pierro::menu_bar(ui, |ui| {
28 pierro::menu_bar_item(ui, "File", |ui| {
29 if pierro::menu_button(ui, "New").mouse_clicked() {
30 println!("New!!");
31 }
32 if pierro::menu_button(ui, "Open").mouse_clicked() {
33 println!("Open!!");
34 }
35 pierro::menu_category(ui, "Recent", |ui| {
36 pierro::menu_button(ui, "A.txt");
37 pierro::menu_button(ui, "B.txt");
38 pierro::menu_button(ui, "C.txt");
39 pierro::menu_category(ui, "!!", |ui| {
40 pierro::menu_button(ui, "A.txt");
41 pierro::menu_button(ui, "B.txt");
42 pierro::menu_button(ui, "C.txt");
43 });
44 });
45 pierro::h_line(ui);
46 pierro::menu_button(ui, "XYZ").mouse_clicked();
47 pierro::menu_button(ui, "PQR").mouse_clicked();
48 });
49 pierro::menu_bar_item(ui, "Edit", |ui| {
50 pierro::menu_button(ui, "Undo").mouse_clicked();
51 pierro::menu_button(ui, "Redo").mouse_clicked();
52 });
53 });
54
55 pierro::v_spacing(ui, 15.0);
56 pierro::label(ui, "Above the scroll area");
57
58 pierro::dnd_source(ui, "Hello".to_string(), |ui| {
59 pierro::label(ui, "Drag me! (Hello)");
60 });
61 pierro::dnd_source(ui, "World".to_string(), |ui| {
62 pierro::label(ui, "Drag me! (World)");
63 });
64 if let Some(message) = pierro::dnd_drop_zone::<String, _>(ui, |ui| {
65 pierro::label(ui, "Drop here...");
66 }).1 {
67 println!("{}", message);
68 }
69
70 pierro::horizontal(ui, |ui| {
71 if pierro::button(ui, "+").mouse_clicked() {
72 self.zoom *= 1.25;
73 }
74 if pierro::button(ui, "-").mouse_clicked() {
75 self.zoom /= 1.25;
76 }
77
78 let button_response = pierro::button(ui, "@");
79 pierro::context_menu(ui, &button_response, |ui| {
80 pierro::label(ui, "Truly!!!");
81 });
82 });
83 pierro::v_spacing(ui, 15.0);
84 pierro::text_edit(ui, &mut self.text);
85 pierro::v_spacing(ui, 15.0);
86
87 pierro::scroll_area(ui, |ui| {
88
89 pierro::label(ui, "Button #1: 🍊");
90 if pierro::button(ui, "So long mom, I'm off to drop the bomb").mouse_clicked() {
91 self.n += 1;
92 }
93
94 pierro::label(ui, "Button #2:");
95 if pierro::button(ui, "So long mom, I'm off to drop the bomb").mouse_clicked() {
96 self.n -= 1;
97 }
98
99 pierro::label(ui, "The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.The quick brown fox jumped over the lazy dog.The quick brown fox jumped over the lazy dog.The quick brown fox jumped over the lazy dog.The quick brown fox jumped over the lazy dog.The quick brown fox jumped over the lazy dog.The quick brown fox jumped over the lazy dog.The quick brown fox jumped over the lazy dog.The quick brown fox jumped over the lazy dog.The quick brown fox jumped over the lazy dog.");
100
101 for i in 0..100 {
102 pierro::label(ui, format!("{} {}", i, self.n));
103 }
104
105 });
106
107 pierro::v_spacing(ui, 15.0);
108 pierro::label(ui, "Below the scroll area");
109 pierro::label(ui, "Ниже области прокрутки");
110 pierro::label(ui, "أسفل منطقة التمرير");
111 pierro::v_spacing(ui, 15.0);
112
113 });
114
115 }pub fn mouse_double_clicked(&self) -> bool
pub fn mouse_triple_clicked(&self) -> bool
pub fn dragging(&self) -> bool
pub fn drag_started(&self) -> bool
pub fn drag_stopped(&self) -> bool
pub fn drag_delta(&self, ui: &mut UI<'_, '_>) -> Vec2
pub fn right_mouse_down(&self) -> bool
pub fn right_mouse_pressed(&self) -> bool
pub fn right_mouse_released(&self) -> bool
pub fn right_mouse_clicked(&self) -> bool
pub fn right_mouse_double_clicked(&self) -> bool
pub fn right_mouse_triple_clicked(&self) -> bool
pub fn right_dragging(&self) -> bool
pub fn right_drag_started(&self) -> bool
pub fn right_drag_stopped(&self) -> bool
pub fn right_drag_delta(&self, ui: &mut UI<'_, '_>) -> Vec2
pub fn mouse_pressed_outside(&self, ui: &mut UI<'_, '_>) -> bool
pub fn is_focused(&self, ui: &mut UI<'_, '_>) -> bool
pub fn request_focus(&self, ui: &mut UI<'_, '_>)
pub fn release_focus(&self, ui: &mut UI<'_, '_>)
pub fn transform(&self, ui: &mut UI<'_, '_>) -> TSTransform
pub fn scale(&self, ui: &mut UI<'_, '_>) -> f32
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Response
impl RefUnwindSafe for Response
impl Send for Response
impl Sync for Response
impl Unpin for Response
impl UnwindSafe for Response
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more