1
0
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:
Konkitoman
2023-09-04 14:23:21 +03:00
parent 4a9e087e92
commit 7c4a85ebda
7 changed files with 149 additions and 114 deletions

View File

@@ -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)));
}

View File

@@ -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,

View File

@@ -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,

View File

@@ -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),