refactor: move some code around to make place for new Layout
This commit is contained in:
parent
8e0b1c8fca
commit
b8675ad67f
8 changed files with 93 additions and 73 deletions
|
@ -2,12 +2,13 @@ pub mod area;
|
||||||
pub mod collapsing_header;
|
pub mod collapsing_header;
|
||||||
pub mod frame;
|
pub mod frame;
|
||||||
pub mod menu;
|
pub mod menu;
|
||||||
|
pub mod popup;
|
||||||
pub mod resize;
|
pub mod resize;
|
||||||
pub mod scroll_area;
|
pub mod scroll_area;
|
||||||
pub mod window;
|
pub mod window;
|
||||||
|
|
||||||
pub use {
|
pub use {
|
||||||
area::Area, collapsing_header::CollapsingHeader, frame::Frame, resize::Resize,
|
area::Area, collapsing_header::CollapsingHeader, frame::Frame, popup::*, resize::Resize,
|
||||||
scroll_area::ScrollArea, window::Window,
|
scroll_area::ScrollArea, window::Window,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
27
emigui/src/containers/popup.rs
Normal file
27
emigui/src/containers/popup.rs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use crate::*;
|
||||||
|
|
||||||
|
pub fn show_tooltip(ctx: &Arc<Context>, add_contents: impl FnOnce(&mut Ui)) {
|
||||||
|
if let Some(mouse_pos) = ctx.input().mouse_pos {
|
||||||
|
// TODO: default size
|
||||||
|
let id = Id::tooltip();
|
||||||
|
let window_pos = mouse_pos + vec2(16.0, 16.0);
|
||||||
|
show_popup(ctx, id, window_pos, add_contents);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Show a pop-over window
|
||||||
|
pub fn show_popup(
|
||||||
|
ctx: &Arc<Context>,
|
||||||
|
id: Id,
|
||||||
|
window_pos: Pos2,
|
||||||
|
add_contents: impl FnOnce(&mut Ui),
|
||||||
|
) -> InteractInfo {
|
||||||
|
use containers::*;
|
||||||
|
Area::new(id)
|
||||||
|
.order(Order::Foreground)
|
||||||
|
.fixed_pos(window_pos)
|
||||||
|
.interactable(false)
|
||||||
|
.show(ctx, |ui| Frame::popup(&ctx.style()).show(ui, add_contents))
|
||||||
|
}
|
|
@ -1,45 +1,6 @@
|
||||||
use std::sync::Arc;
|
|
||||||
|
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{widgets::*, *};
|
use crate::math::*;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// TODO: rename GuiResponse
|
|
||||||
pub struct GuiResponse {
|
|
||||||
/// The mouse is hovering above this
|
|
||||||
pub hovered: bool,
|
|
||||||
|
|
||||||
/// The mouse clicked this thing this frame
|
|
||||||
pub clicked: bool,
|
|
||||||
|
|
||||||
/// The mouse is interacting with this thing (e.g. dragging it)
|
|
||||||
pub active: bool,
|
|
||||||
|
|
||||||
/// The area of the screen we are talking about
|
|
||||||
pub rect: Rect,
|
|
||||||
|
|
||||||
/// Used for optionally showing a tooltip
|
|
||||||
pub ctx: Arc<Context>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl GuiResponse {
|
|
||||||
/// Show some stuff if the item was hovered
|
|
||||||
pub fn tooltip(&mut self, add_contents: impl FnOnce(&mut Ui)) -> &mut Self {
|
|
||||||
if self.hovered {
|
|
||||||
show_tooltip(&self.ctx, add_contents);
|
|
||||||
}
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Show this text if the item was hovered
|
|
||||||
pub fn tooltip_text(&mut self, text: impl Into<String>) -> &mut Self {
|
|
||||||
self.tooltip(|popup| {
|
|
||||||
popup.add(Label::new(text));
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -94,29 +55,3 @@ pub fn align_rect(rect: Rect, align: (Align, Align)) -> Rect {
|
||||||
};
|
};
|
||||||
Rect::from_min_size(pos2(x, y), rect.size())
|
Rect::from_min_size(pos2(x, y), rect.size())
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
pub fn show_tooltip(ctx: &Arc<Context>, add_contents: impl FnOnce(&mut Ui)) {
|
|
||||||
if let Some(mouse_pos) = ctx.input().mouse_pos {
|
|
||||||
// TODO: default size
|
|
||||||
let id = Id::tooltip();
|
|
||||||
let window_pos = mouse_pos + vec2(16.0, 16.0);
|
|
||||||
show_popup(ctx, id, window_pos, add_contents);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Show a pop-over window
|
|
||||||
pub fn show_popup(
|
|
||||||
ctx: &Arc<Context>,
|
|
||||||
id: Id,
|
|
||||||
window_pos: Pos2,
|
|
||||||
add_contents: impl FnOnce(&mut Ui),
|
|
||||||
) -> InteractInfo {
|
|
||||||
use containers::*;
|
|
||||||
Area::new(id)
|
|
||||||
.order(Order::Foreground)
|
|
||||||
.fixed_pos(window_pos)
|
|
||||||
.interactable(false)
|
|
||||||
.show(ctx, |ui| Frame::popup(&ctx.style()).show(ui, add_contents))
|
|
||||||
}
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ pub use {
|
||||||
id::Id,
|
id::Id,
|
||||||
input::*,
|
input::*,
|
||||||
layers::*,
|
layers::*,
|
||||||
layout::{Align, GuiResponse},
|
layout::Align,
|
||||||
math::*,
|
math::*,
|
||||||
memory::Memory,
|
memory::Memory,
|
||||||
mesher::{Mesh, PaintBatches, Vertex},
|
mesher::{Mesh, PaintBatches, Vertex},
|
||||||
|
|
|
@ -432,6 +432,13 @@ impl Rect {
|
||||||
self.max = self.max.max(p);
|
self.max = self.max.max(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn union(self, other: Rect) -> Rect {
|
||||||
|
Rect {
|
||||||
|
min: self.min.min(other.min),
|
||||||
|
max: self.max.max(other.max),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn center(&self) -> Pos2 {
|
pub fn center(&self) -> Pos2 {
|
||||||
Pos2 {
|
Pos2 {
|
||||||
x: self.min.x + self.size().x / 2.0,
|
x: self.min.x + self.size().x / 2.0,
|
||||||
|
|
|
@ -92,7 +92,9 @@ impl TextureAtlas {
|
||||||
|
|
||||||
impl Texture {
|
impl Texture {
|
||||||
pub fn ui(&self, ui: &mut crate::Ui) {
|
pub fn ui(&self, ui: &mut crate::Ui) {
|
||||||
use crate::{color::WHITE, label, layout::show_tooltip, math::*, Mesh, PaintCmd, Vertex};
|
use crate::{
|
||||||
|
color::WHITE, containers::show_tooltip, label, math::*, Mesh, PaintCmd, Vertex,
|
||||||
|
};
|
||||||
|
|
||||||
ui.add(label!(
|
ui.add(label!(
|
||||||
"Texture size: {} x {} (hover to zoom)",
|
"Texture size: {} x {} (hover to zoom)",
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -5,6 +7,7 @@ use crate::{
|
||||||
fonts::TextStyle,
|
fonts::TextStyle,
|
||||||
math::{Pos2, Rect},
|
math::{Pos2, Rect},
|
||||||
mesher::{Mesh, Path},
|
mesher::{Mesh, Path},
|
||||||
|
Context, Ui,
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -53,6 +56,54 @@ pub struct InteractInfo {
|
||||||
pub rect: Rect,
|
pub rect: Rect,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl InteractInfo {
|
||||||
|
pub fn union(self, other: Self) -> Self {
|
||||||
|
Self {
|
||||||
|
hovered: self.hovered || other.hovered,
|
||||||
|
clicked: self.clicked || other.clicked,
|
||||||
|
active: self.active || other.active,
|
||||||
|
rect: self.rect.union(other.rect),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// TODO: rename GuiResponse
|
||||||
|
pub struct GuiResponse {
|
||||||
|
/// The mouse is hovering above this
|
||||||
|
pub hovered: bool,
|
||||||
|
|
||||||
|
/// The mouse clicked this thing this frame
|
||||||
|
pub clicked: bool,
|
||||||
|
|
||||||
|
/// The mouse is interacting with this thing (e.g. dragging it)
|
||||||
|
pub active: bool,
|
||||||
|
|
||||||
|
/// The area of the screen we are talking about
|
||||||
|
pub rect: Rect,
|
||||||
|
|
||||||
|
/// Used for optionally showing a tooltip
|
||||||
|
pub ctx: Arc<Context>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl GuiResponse {
|
||||||
|
/// Show some stuff if the item was hovered
|
||||||
|
pub fn tooltip(&mut self, add_contents: impl FnOnce(&mut Ui)) -> &mut Self {
|
||||||
|
if self.hovered {
|
||||||
|
crate::containers::show_tooltip(&self.ctx, add_contents);
|
||||||
|
}
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Show this text if the item was hovered
|
||||||
|
pub fn tooltip_text(&mut self, text: impl Into<String>) -> &mut Self {
|
||||||
|
self.tooltip(|popup| {
|
||||||
|
popup.add(crate::widgets::Label::new(text));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
#![allow(clippy::new_without_default)]
|
#![allow(clippy::new_without_default)]
|
||||||
|
|
||||||
use crate::{
|
use crate::{layout::Direction, GuiResponse, *};
|
||||||
layout::{Direction, GuiResponse},
|
|
||||||
*,
|
|
||||||
};
|
|
||||||
|
|
||||||
mod slider;
|
mod slider;
|
||||||
mod text_edit;
|
mod text_edit;
|
||||||
|
|
Loading…
Reference in a new issue