mirror of
https://github.com/emilk/egui.git
synced 2026-08-31 05:40:03 -04:00
Now in ViewportBuilder, InputState, RawInput: viewport_inner_pos, viewport_outer_pos, viewport_inner_size, viewport_outer_size are stored as inner_pos, outer_pos, inner_size, outer_pos and Now every (i32, i32) is stored as egui::Pos2
Addes some documentation
This commit is contained in:
@@ -1618,19 +1618,19 @@ impl Context {
|
||||
}
|
||||
|
||||
pub fn viewport_inner_pos(&self) -> Pos2 {
|
||||
self.input(|i| i.viewport_inner_pos)
|
||||
self.input(|i| i.inner_pos)
|
||||
}
|
||||
|
||||
pub fn viewport_outer_pos(&self) -> Pos2 {
|
||||
self.input(|i| i.viewport_outer_pos)
|
||||
self.input(|i| i.outer_pos)
|
||||
}
|
||||
|
||||
pub fn viewport_inner_size(&self) -> Pos2 {
|
||||
self.input(|i| i.viewport_inner_size)
|
||||
self.input(|i| i.inner_size)
|
||||
}
|
||||
|
||||
pub fn viewport_outer_size(&self) -> Pos2 {
|
||||
self.input(|i| i.viewport_outer_size)
|
||||
self.input(|i| i.outer_size)
|
||||
}
|
||||
|
||||
/// How much space is still available after panels has been added.
|
||||
@@ -2261,7 +2261,11 @@ impl Context {
|
||||
}
|
||||
|
||||
/// With this you can send a command to a viewport
|
||||
pub fn viewport_command(&self, id: ViewportId, command: ViewportCommand) {
|
||||
pub fn viewport_command(&self, command: ViewportCommand) {
|
||||
self.viewport_command_for(self.get_viewport_id(), command);
|
||||
}
|
||||
|
||||
pub fn viewport_command_for(&self, id: ViewportId, command: ViewportCommand) {
|
||||
self.write(|ctx| ctx.viewport_commands.push((id, command)));
|
||||
}
|
||||
|
||||
|
||||
@@ -23,10 +23,21 @@ pub struct RawInput {
|
||||
/// `None` will be treated as "same as last frame", with the default being a very big area.
|
||||
pub screen_rect: Option<Rect>,
|
||||
|
||||
pub viewport_inner_pos: Option<Pos2>,
|
||||
pub viewport_outer_pos: Option<Pos2>,
|
||||
pub viewport_inner_size: Option<Pos2>,
|
||||
pub viewport_outer_size: Option<Pos2>,
|
||||
/// Viewport inner position, only the drowable area
|
||||
/// If is not working as expected is a winit bug!
|
||||
pub inner_pos: Option<Pos2>,
|
||||
|
||||
/// Viewport outer position, drowable area + decorations
|
||||
/// If is not working as expected is a winit bug!
|
||||
pub outer_pos: Option<Pos2>,
|
||||
|
||||
/// Viewport inner size, only drowable area
|
||||
/// If is not working as expected is a winit bug!
|
||||
pub inner_size: Option<Pos2>,
|
||||
|
||||
/// Viewport outer size, drowable area + decorations
|
||||
/// If is not working as expected is a winit bug!
|
||||
pub outer_size: Option<Pos2>,
|
||||
|
||||
/// Also known as device pixel ratio, > 1 for high resolution screens.
|
||||
/// If text looks blurry you probably forgot to set this.
|
||||
@@ -78,10 +89,10 @@ impl Default for RawInput {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
screen_rect: None,
|
||||
viewport_inner_pos: None,
|
||||
viewport_outer_pos: None,
|
||||
viewport_inner_size: None,
|
||||
viewport_outer_size: None,
|
||||
inner_pos: None,
|
||||
outer_pos: None,
|
||||
inner_size: None,
|
||||
outer_size: None,
|
||||
pixels_per_point: None,
|
||||
max_texture_side: None,
|
||||
time: None,
|
||||
@@ -103,10 +114,10 @@ impl RawInput {
|
||||
pub fn take(&mut self) -> RawInput {
|
||||
RawInput {
|
||||
screen_rect: self.screen_rect.take(),
|
||||
viewport_inner_pos: self.viewport_inner_pos.take(),
|
||||
viewport_outer_pos: self.viewport_outer_pos.take(),
|
||||
viewport_inner_size: self.viewport_inner_size.take(),
|
||||
viewport_outer_size: self.viewport_outer_size.take(),
|
||||
inner_pos: self.inner_pos.take(),
|
||||
outer_pos: self.outer_pos.take(),
|
||||
inner_size: self.inner_size.take(),
|
||||
outer_size: self.outer_size.take(),
|
||||
pixels_per_point: self.pixels_per_point.take(),
|
||||
max_texture_side: self.max_texture_side.take(),
|
||||
time: self.time.take(),
|
||||
@@ -123,10 +134,10 @@ impl RawInput {
|
||||
pub fn append(&mut self, newer: Self) {
|
||||
let Self {
|
||||
screen_rect,
|
||||
viewport_inner_pos,
|
||||
viewport_outer_pos,
|
||||
viewport_inner_size,
|
||||
viewport_outer_size,
|
||||
inner_pos: viewport_inner_pos,
|
||||
outer_pos: viewport_outer_pos,
|
||||
inner_size: viewport_inner_size,
|
||||
outer_size: viewport_outer_size,
|
||||
pixels_per_point,
|
||||
max_texture_side,
|
||||
time,
|
||||
@@ -139,10 +150,10 @@ impl RawInput {
|
||||
} = newer;
|
||||
|
||||
self.screen_rect = screen_rect.or(self.screen_rect);
|
||||
self.viewport_inner_pos = viewport_inner_pos.or(self.viewport_inner_pos);
|
||||
self.viewport_outer_pos = viewport_outer_pos.or(self.viewport_outer_pos);
|
||||
self.viewport_inner_size = viewport_inner_size.or(self.viewport_inner_size);
|
||||
self.viewport_outer_size = viewport_outer_size.or(self.viewport_outer_size);
|
||||
self.inner_pos = viewport_inner_pos.or(self.inner_pos);
|
||||
self.outer_pos = viewport_outer_pos.or(self.outer_pos);
|
||||
self.inner_size = viewport_inner_size.or(self.inner_size);
|
||||
self.outer_size = viewport_outer_size.or(self.outer_size);
|
||||
self.pixels_per_point = pixels_per_point.or(self.pixels_per_point);
|
||||
self.max_texture_side = max_texture_side.or(self.max_texture_side);
|
||||
self.time = time; // use latest time
|
||||
@@ -958,10 +969,10 @@ impl RawInput {
|
||||
pub fn ui(&self, ui: &mut crate::Ui) {
|
||||
let Self {
|
||||
screen_rect,
|
||||
viewport_inner_pos,
|
||||
viewport_outer_pos,
|
||||
viewport_inner_size,
|
||||
viewport_outer_size,
|
||||
inner_pos: viewport_inner_pos,
|
||||
outer_pos: viewport_outer_pos,
|
||||
inner_size: viewport_inner_size,
|
||||
outer_size: viewport_outer_size,
|
||||
pixels_per_point,
|
||||
max_texture_side,
|
||||
time,
|
||||
|
||||
@@ -54,10 +54,21 @@ pub struct InputState {
|
||||
/// Position and size of the egui area.
|
||||
pub screen_rect: Rect,
|
||||
|
||||
pub viewport_inner_pos: Pos2,
|
||||
pub viewport_outer_pos: Pos2,
|
||||
pub viewport_inner_size: Pos2,
|
||||
pub viewport_outer_size: Pos2,
|
||||
/// Viewport inner position, only the drowable area
|
||||
/// If is not working as expected is a winit bug!
|
||||
pub inner_pos: Pos2,
|
||||
|
||||
/// Viewport outer position, drowable area + decorations
|
||||
/// If is not working as expected is a winit bug!
|
||||
pub outer_pos: Pos2,
|
||||
|
||||
/// Viewport inner size, only drowable area
|
||||
/// If is not working as expected is a winit bug!
|
||||
pub inner_size: Pos2,
|
||||
|
||||
/// Viewport outer size, drowable area + decorations
|
||||
/// If is not working as expected is a winit bug!
|
||||
pub outer_size: Pos2,
|
||||
|
||||
/// Also known as device pixel ratio, > 1 for high resolution screens.
|
||||
pub pixels_per_point: f32,
|
||||
@@ -143,10 +154,10 @@ impl Default for InputState {
|
||||
modifiers: Default::default(),
|
||||
keys_down: Default::default(),
|
||||
events: Default::default(),
|
||||
viewport_inner_pos: Pos2::ZERO,
|
||||
viewport_outer_pos: Pos2::ZERO,
|
||||
viewport_inner_size: pos2(10_000.0, 10_000.0),
|
||||
viewport_outer_size: pos2(10_000.0, 10_000.0),
|
||||
inner_pos: Pos2::ZERO,
|
||||
outer_pos: Pos2::ZERO,
|
||||
inner_size: pos2(10_000.0, 10_000.0),
|
||||
outer_size: pos2(10_000.0, 10_000.0),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -170,10 +181,10 @@ impl InputState {
|
||||
};
|
||||
|
||||
let screen_rect = new.screen_rect.unwrap_or(self.screen_rect);
|
||||
let viewport_inner_pos = new.viewport_inner_pos.unwrap_or(self.viewport_inner_pos);
|
||||
let viewport_outer_pos = new.viewport_outer_pos.unwrap_or(self.viewport_outer_pos);
|
||||
let viewport_inner_size = new.viewport_inner_size.unwrap_or(self.viewport_inner_size);
|
||||
let viewport_outer_size = new.viewport_outer_size.unwrap_or(self.viewport_outer_size);
|
||||
let viewport_inner_pos = new.inner_pos.unwrap_or(self.inner_pos);
|
||||
let viewport_outer_pos = new.outer_pos.unwrap_or(self.outer_pos);
|
||||
let viewport_inner_size = new.inner_size.unwrap_or(self.inner_size);
|
||||
let viewport_outer_size = new.outer_size.unwrap_or(self.outer_size);
|
||||
|
||||
self.create_touch_states_for_new_devices(&new.events);
|
||||
for touch_state in self.touch_states.values_mut() {
|
||||
@@ -229,10 +240,10 @@ impl InputState {
|
||||
scroll_delta,
|
||||
zoom_factor_delta,
|
||||
screen_rect,
|
||||
viewport_inner_pos,
|
||||
viewport_outer_pos,
|
||||
viewport_inner_size,
|
||||
viewport_outer_size,
|
||||
inner_pos: viewport_inner_pos,
|
||||
outer_pos: viewport_outer_pos,
|
||||
inner_size: viewport_inner_size,
|
||||
outer_size: viewport_outer_size,
|
||||
pixels_per_point: new.pixels_per_point.unwrap_or(self.pixels_per_point),
|
||||
max_texture_side: new.max_texture_side.unwrap_or(self.max_texture_side),
|
||||
time,
|
||||
@@ -990,10 +1001,10 @@ impl InputState {
|
||||
scroll_delta,
|
||||
zoom_factor_delta,
|
||||
screen_rect,
|
||||
viewport_inner_pos,
|
||||
viewport_outer_pos,
|
||||
viewport_inner_size,
|
||||
viewport_outer_size,
|
||||
inner_pos: viewport_inner_pos,
|
||||
outer_pos: viewport_outer_pos,
|
||||
inner_size: viewport_inner_size,
|
||||
outer_size: viewport_outer_size,
|
||||
pixels_per_point,
|
||||
max_texture_side,
|
||||
time,
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
use std::{fmt::Display, sync::Arc};
|
||||
|
||||
use epaint::Pos2;
|
||||
|
||||
use crate::{Context, Id};
|
||||
|
||||
/// This is used to send a command to a specific viewport
|
||||
@@ -24,13 +26,13 @@ pub type ViewportRender = dyn Fn(&Context) + Sync + Send;
|
||||
|
||||
/// The filds in this struct should not be change directly, but is not problem tho!
|
||||
/// Every thing is wrapped in Option<> indicates that thing should not be changed!
|
||||
#[derive(Hash, PartialEq, Eq, Clone)]
|
||||
#[derive(PartialEq, Eq, Clone)]
|
||||
pub struct ViewportBuilder {
|
||||
pub id: Id,
|
||||
pub title: String,
|
||||
pub name: Option<(String, String)>,
|
||||
pub position: Option<Option<(i32, i32)>>,
|
||||
pub inner_size: Option<Option<(u32, u32)>>,
|
||||
pub position: Option<Option<Pos2>>,
|
||||
pub inner_size: Option<Option<Pos2>>,
|
||||
pub fullscreen: Option<bool>,
|
||||
pub maximized: Option<bool>,
|
||||
pub minimized: Option<bool>,
|
||||
@@ -43,8 +45,8 @@ pub struct ViewportBuilder {
|
||||
pub title_hidden: Option<bool>,
|
||||
pub titlebar_transparent: Option<bool>,
|
||||
pub fullsize_content_view: Option<bool>,
|
||||
pub min_inner_size: Option<Option<(u32, u32)>>,
|
||||
pub max_inner_size: Option<Option<(u32, u32)>>,
|
||||
pub min_inner_size: Option<Option<Pos2>>,
|
||||
pub max_inner_size: Option<Option<Pos2>>,
|
||||
pub drag_and_drop: Option<bool>,
|
||||
|
||||
pub close_button: Option<bool>,
|
||||
@@ -61,7 +63,7 @@ impl ViewportBuilder {
|
||||
title: "Dummy egui viewport".into(),
|
||||
name: None,
|
||||
position: None,
|
||||
inner_size: Some(Some((300, 200))),
|
||||
inner_size: Some(Some(Pos2::new(300.0, 200.0))),
|
||||
fullscreen: None,
|
||||
maximized: None,
|
||||
resizable: Some(true),
|
||||
@@ -181,17 +183,20 @@ impl ViewportBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
pub fn with_inner_size(mut self, value: Option<(u32, u32)>) -> Self {
|
||||
/// Should be bigger then 0
|
||||
pub fn with_inner_size(mut self, value: Option<Pos2>) -> Self {
|
||||
self.inner_size = Some(value);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn with_min_inner_size(mut self, value: Option<(u32, u32)>) -> Self {
|
||||
/// Should be bigger then 0
|
||||
pub fn with_min_inner_size(mut self, value: Option<Pos2>) -> Self {
|
||||
self.min_inner_size = Some(value);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn with_max_inner_size(mut self, value: Option<(u32, u32)>) -> Self {
|
||||
/// Should be bigger then 0
|
||||
pub fn with_max_inner_size(mut self, value: Option<Pos2>) -> Self {
|
||||
self.max_inner_size = Some(value);
|
||||
self
|
||||
}
|
||||
@@ -211,12 +216,13 @@ impl ViewportBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
/// This currently only work on windows to be disabled!
|
||||
pub fn with_drag_and_drop(mut self, value: bool) -> Self {
|
||||
self.drag_and_drop = Some(value);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn with_position(mut self, value: Option<(i32, i32)>) -> Self {
|
||||
pub fn with_position(mut self, value: Option<Pos2>) -> Self {
|
||||
self.position = Some(value);
|
||||
self
|
||||
}
|
||||
@@ -242,11 +248,17 @@ pub enum ViewportCommand {
|
||||
Transparent(bool),
|
||||
Visible(bool),
|
||||
Drag,
|
||||
OuterPosition(i32, i32),
|
||||
InnerSize(u32, u32),
|
||||
MinInnerSize(Option<(u32, u32)>),
|
||||
MaxInnerSize(Option<(u32, u32)>),
|
||||
ResizeIncrements(Option<(u32, u32)>),
|
||||
OuterPosition(Pos2),
|
||||
|
||||
/// Should be bigger then 0
|
||||
InnerSize(Pos2),
|
||||
|
||||
/// Should be bigger then 0
|
||||
MinInnerSize(Option<Pos2>),
|
||||
|
||||
/// Should be bigger then 0
|
||||
MaxInnerSize(Option<Pos2>),
|
||||
ResizeIncrements(Option<Pos2>),
|
||||
|
||||
/// Top, Bottom, Right, Left
|
||||
Resize(bool, bool, bool, bool),
|
||||
@@ -264,7 +276,7 @@ pub enum ViewportCommand {
|
||||
/// 0 = Normal, 1 = AlwaysOnBottom, 2 = AlwaysOnTop
|
||||
WindowLevel(u8),
|
||||
WindowIcon(Option<(Vec<u8>, u32, u32)>),
|
||||
IMEPosition(u32, u32),
|
||||
IMEPosition(Pos2),
|
||||
IMEAllowed(bool),
|
||||
|
||||
/// 0 = Normal, 1 = Password, 2 = Terminal
|
||||
@@ -278,7 +290,7 @@ pub enum ViewportCommand {
|
||||
|
||||
ContentProtected(bool),
|
||||
|
||||
CursorPosition(i32, i32),
|
||||
CursorPosition(Pos2),
|
||||
|
||||
/// 0 = None, 1 = Confined, 2 = Locked
|
||||
CursorGrab(u8),
|
||||
|
||||
Reference in New Issue
Block a user