diff --git a/Cargo.toml b/Cargo.toml index bfdd049..5c72e3a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "ui" version = "0.1.0" authors = ["hodasemi "] -edition = "2021" +edition = "2024" [dependencies] quick-xml = "0.31.0" @@ -18,3 +18,4 @@ anyhow = { version = "1.0.86", features = ["backtrace"] } audio = { git = "https://gavania.de/hodasemi/audio.git", optional = true } [features] +default = ["audio"] diff --git a/src/builder/validator/buttoninfo.rs b/src/builder/validator/buttoninfo.rs index a9c27a7..9767319 100644 --- a/src/builder/validator/buttoninfo.rs +++ b/src/builder/validator/buttoninfo.rs @@ -1,4 +1,4 @@ -use crate::guihandler::gui::displayable::DisplayableFillType; +use crate::gui_handler::gui::displayable::DisplayableFillType; use crate::prelude::*; use anyhow::Result; use utilities::prelude::*; diff --git a/src/builder/validator/iconinfo.rs b/src/builder/validator/iconinfo.rs index 3dcebd8..966d5e8 100644 --- a/src/builder/validator/iconinfo.rs +++ b/src/builder/validator/iconinfo.rs @@ -1,4 +1,4 @@ -use crate::guihandler::gui::displayable::DisplayableFillType; +use crate::gui_handler::gui::displayable::DisplayableFillType; use crate::prelude::*; use anyhow::Result; use assetpath::AssetPath; diff --git a/src/builder/validator/textfieldinfo.rs b/src/builder/validator/textfieldinfo.rs index 2367d19..ccf9525 100644 --- a/src/builder/validator/textfieldinfo.rs +++ b/src/builder/validator/textfieldinfo.rs @@ -1,4 +1,4 @@ -use crate::guihandler::gui::displayable::DisplayableFillType; +use crate::gui_handler::gui::displayable::DisplayableFillType; use crate::prelude::*; use anyhow::Result; use utilities::prelude::*; diff --git a/src/builder/validator/validator.rs b/src/builder/validator/validator.rs index fac567c..e6b0c8d 100644 --- a/src/builder/validator/validator.rs +++ b/src/builder/validator/validator.rs @@ -1,4 +1,4 @@ -use crate::guihandler::gui::displayable::DisplayableFillType; +use crate::gui_handler::gui::displayable::DisplayableFillType; use crate::prelude::*; use anyhow::anyhow; use anyhow::{Context, Result}; diff --git a/src/elements/button.rs b/src/elements/button.rs index d97228d..48fbc50 100644 --- a/src/elements/button.rs +++ b/src/elements/button.rs @@ -1,6 +1,6 @@ use crate::{ - builder::validator::buttoninfo::ButtonInfo, guihandler::gui::iconizable::IconizablePositioning, - prelude::*, + builder::validator::buttoninfo::ButtonInfo, + gui_handler::gui::iconizable::IconizablePositioning, prelude::*, }; use anyhow::Result; diff --git a/src/elements/fill_type.rs b/src/elements/fill_type.rs index e73f04b..6056a01 100644 --- a/src/elements/fill_type.rs +++ b/src/elements/fill_type.rs @@ -1,5 +1,5 @@ use crate::{ - guihandler::gui::displayable::{DisplayableFillType, DisplayableType}, + gui_handler::gui::displayable::{DisplayableFillType, DisplayableType}, prelude::*, }; use anyhow::Result; diff --git a/src/elements/icon.rs b/src/elements/icon.rs index 829db2c..f84d10a 100644 --- a/src/elements/icon.rs +++ b/src/elements/icon.rs @@ -1,5 +1,5 @@ use crate::{ - builder::validator::iconinfo::IconInfo, guihandler::gui::iconizable::IconizablePositioning, + builder::validator::iconinfo::IconInfo, gui_handler::gui::iconizable::IconizablePositioning, prelude::*, }; use anyhow::Result; diff --git a/src/elements/label.rs b/src/elements/label.rs index bd788ea..b8814db 100644 --- a/src/elements/label.rs +++ b/src/elements/label.rs @@ -1,5 +1,5 @@ use crate::{ - builder::validator::labelinfo::LabelInfo, guihandler::gui::iconizable::IconizablePositioning, + builder::validator::labelinfo::LabelInfo, gui_handler::gui::iconizable::IconizablePositioning, prelude::*, }; diff --git a/src/elements/mod.rs b/src/elements/mod.rs index aac80b3..289b135 100644 --- a/src/elements/mod.rs +++ b/src/elements/mod.rs @@ -1,4 +1,4 @@ -use crate::{guihandler::gui::iconizable::IconBuilderType, prelude::*}; +use crate::{gui_handler::gui::iconizable::IconBuilderType, prelude::*}; use anyhow::Result; use std::sync::{Arc, RwLock}; @@ -13,7 +13,7 @@ pub mod multi_line_label; pub mod multi_line_textfield; pub mod progress_bar; pub mod textfield; -pub mod uielement; +pub mod ui_element; pub mod traits; diff --git a/src/elements/multi_line_textfield.rs b/src/elements/multi_line_textfield.rs index 29d552d..7716026 100644 --- a/src/elements/multi_line_textfield.rs +++ b/src/elements/multi_line_textfield.rs @@ -1,6 +1,6 @@ use crate::{ builder::validator::multi_line_text_field_info::MultiLineTextFieldInfo, - guihandler::gui::{displayable::DisplayableFillType, writeable::ModifyText}, + gui_handler::gui::{displayable::DisplayableFillType, writeable::ModifyText}, prelude::*, }; diff --git a/src/elements/prelude.rs b/src/elements/prelude.rs index 6872966..f940704 100644 --- a/src/elements/prelude.rs +++ b/src/elements/prelude.rs @@ -10,5 +10,5 @@ pub use super::{ progress_bar::{GrowDirection, ProgressBar, ProgressBarBuilder}, textfield::TextField, traits::*, - uielement::*, + ui_element::*, }; diff --git a/src/elements/uielement.rs b/src/elements/ui_element.rs similarity index 100% rename from src/elements/uielement.rs rename to src/elements/ui_element.rs diff --git a/src/elements/wrapper.rs b/src/elements/wrapper.rs index d6e663a..c2886b7 100644 --- a/src/elements/wrapper.rs +++ b/src/elements/wrapper.rs @@ -1,5 +1,5 @@ use crate::{ - guihandler::gui::iconizable::{IconBuilderType, IconizablePositioning}, + gui_handler::gui::iconizable::{IconBuilderType, IconizablePositioning}, prelude::*, }; use anyhow::Result; diff --git a/src/guidirection.rs b/src/gui_direction.rs similarity index 100% rename from src/guidirection.rs rename to src/gui_direction.rs diff --git a/src/guihandler/elements.rs b/src/gui_handler/elements.rs similarity index 100% rename from src/guihandler/elements.rs rename to src/gui_handler/elements.rs diff --git a/src/gui_handler/gui/audible.rs b/src/gui_handler/gui/audible.rs new file mode 100644 index 0000000..25e03a5 --- /dev/null +++ b/src/gui_handler/gui/audible.rs @@ -0,0 +1,52 @@ +//! `Audible` is a property to play a sound + +use crate::prelude::*; +use anyhow::Result; +use assetpath::AssetPath; + +// #[cfg(feature = "audio")] +// use audio::*; + +use std::sync::Arc; + +/// `Audible` gives the ability to play a sound +pub struct Audible { + // gui_handler: Arc, + // sound: Arc, +} + +impl Audible { + pub fn new(gui_handler: Arc, mut path: AssetPath) -> Result> { + if !path.has_prefix() { + path.set_prefix(&gui_handler.resource_base_path().full_path()); + } + + // TODO: + // let sound = gui_handler.context().sound_handler().load_sound( + // path, + // "gui", + // SoundInterpretation::Generic, + // )?; + + Ok(Arc::new(Audible { + // gui_handler, + // sound + })) + } + + pub fn play(&self) -> Result<()> { + // self.sound.play(Some(false))?; + + Ok(()) + } +} + +impl Drop for Audible { + fn drop(&mut self) { + // self.gui_handler + // .context() + // .sound_handler() + // .remove_sound(&self.sound) + // .unwrap(); + } +} diff --git a/src/guihandler/gui/clickable.rs b/src/gui_handler/gui/clickable.rs similarity index 100% rename from src/guihandler/gui/clickable.rs rename to src/gui_handler/gui/clickable.rs diff --git a/src/guihandler/gui/colorable.rs b/src/gui_handler/gui/colorable.rs similarity index 100% rename from src/guihandler/gui/colorable.rs rename to src/gui_handler/gui/colorable.rs diff --git a/src/guihandler/gui/displayable.rs b/src/gui_handler/gui/displayable.rs similarity index 100% rename from src/guihandler/gui/displayable.rs rename to src/gui_handler/gui/displayable.rs diff --git a/src/guihandler/gui/executable.rs b/src/gui_handler/gui/executable.rs similarity index 100% rename from src/guihandler/gui/executable.rs rename to src/gui_handler/gui/executable.rs diff --git a/src/guihandler/gui/framable.rs b/src/gui_handler/gui/framable.rs similarity index 100% rename from src/guihandler/gui/framable.rs rename to src/gui_handler/gui/framable.rs diff --git a/src/guihandler/gui/hoverable.rs b/src/gui_handler/gui/hoverable.rs similarity index 100% rename from src/guihandler/gui/hoverable.rs rename to src/gui_handler/gui/hoverable.rs diff --git a/src/guihandler/gui/iconizable.rs b/src/gui_handler/gui/iconizable.rs similarity index 100% rename from src/guihandler/gui/iconizable.rs rename to src/gui_handler/gui/iconizable.rs diff --git a/src/guihandler/gui/mod.rs b/src/gui_handler/gui/mod.rs similarity index 100% rename from src/guihandler/gui/mod.rs rename to src/gui_handler/gui/mod.rs diff --git a/src/guihandler/gui/selectable.rs b/src/gui_handler/gui/selectable.rs similarity index 100% rename from src/guihandler/gui/selectable.rs rename to src/gui_handler/gui/selectable.rs diff --git a/src/guihandler/gui/textable.rs b/src/gui_handler/gui/textable.rs similarity index 100% rename from src/guihandler/gui/textable.rs rename to src/gui_handler/gui/textable.rs diff --git a/src/guihandler/gui/texturedvertex.rs b/src/gui_handler/gui/texturedvertex.rs similarity index 100% rename from src/guihandler/gui/texturedvertex.rs rename to src/gui_handler/gui/texturedvertex.rs diff --git a/src/guihandler/gui/topgui.rs b/src/gui_handler/gui/topgui.rs similarity index 100% rename from src/guihandler/gui/topgui.rs rename to src/gui_handler/gui/topgui.rs diff --git a/src/guihandler/gui/writeable.rs b/src/gui_handler/gui/writeable.rs similarity index 100% rename from src/guihandler/gui/writeable.rs rename to src/gui_handler/gui/writeable.rs diff --git a/src/guihandler/guihandler.rs b/src/gui_handler/gui_handler.rs similarity index 98% rename from src/guihandler/guihandler.rs rename to src/gui_handler/gui_handler.rs index 841bfc5..97bdfa2 100644 --- a/src/guihandler/guihandler.rs +++ b/src/gui_handler/gui_handler.rs @@ -15,8 +15,8 @@ use super::{ use cgmath::{ortho, vec2}; use std::sync::{ - atomic::{AtomicBool, AtomicU32, Ordering::SeqCst}, Arc, Mutex, RwLock, + atomic::{AtomicBool, AtomicU32, Ordering::SeqCst}, }; use std::{collections::HashMap, ptr}; use std::{mem, sync::Weak}; @@ -191,8 +191,6 @@ impl TextToScreen { } pub struct GuiHandler { - _context: Arc, - device: Arc, queue: Arc>, @@ -264,7 +262,7 @@ pub struct GuiHandler { impl GuiHandler { pub fn new( gui_handler_create_info: GuiHandlerCreateInfo<'_>, - context: &Arc, + context: &impl ContextInterface, ) -> Result> { let device = context.device(); let queue = context.queue(); @@ -311,8 +309,6 @@ impl GuiHandler { .build(device.clone())?; Ok(Arc::new(GuiHandler { - _context: context.clone(), - device: device.clone(), queue: queue.clone(), @@ -418,11 +414,6 @@ impl GuiHandler { &self.queue } - #[cfg(feature = "audio")] - pub(crate) fn context(&self) -> &Arc { - &self._context - } - pub fn width(&self) -> u32 { self.width.load(SeqCst) } @@ -1437,8 +1428,8 @@ impl GuiHandler { .build(device.clone())?; // --- pipeline creation --- - let vertex_shader_text = include_bytes!("guishader/text.vert.spv"); - let fragment_shader_text = include_bytes!("guishader/text.frag.spv"); + let vertex_shader_text = include_bytes!("gui_shader/text.vert.spv"); + let fragment_shader_text = include_bytes!("gui_shader/text.frag.spv"); let vertex_shader = ShaderModule::from_slice(device.clone(), vertex_shader_text)?; let fragment_shader = ShaderModule::from_slice(device.clone(), fragment_shader_text)?; @@ -1482,9 +1473,9 @@ impl GuiHandler { // pipeline creation let vertex_shader = - ShaderModule::from_slice(device.clone(), include_bytes!("guishader/rect.vert.spv"))?; + ShaderModule::from_slice(device.clone(), include_bytes!("gui_shader/rect.vert.spv"))?; let fragment_shader = - ShaderModule::from_slice(device.clone(), include_bytes!("guishader/rect.frag.spv"))?; + ShaderModule::from_slice(device.clone(), include_bytes!("gui_shader/rect.frag.spv"))?; render_targets.execute(|render_target| { Ok(GuiSeparator { @@ -1522,10 +1513,10 @@ impl GuiHandler { // pipeline creation let vertex_shader = - ShaderModule::from_slice(device.clone(), include_bytes!("guishader/rect.vert.spv"))?; + ShaderModule::from_slice(device.clone(), include_bytes!("gui_shader/rect.vert.spv"))?; let fragment_shader = ShaderModule::from_slice( device.clone(), - include_bytes!("guishader/input_rect.frag.spv"), + include_bytes!("gui_shader/input_rect.frag.spv"), )?; render_targets.execute(|render_target| { @@ -1565,11 +1556,11 @@ impl GuiHandler { // pipeline creation let vertex_shader = ShaderModule::from_slice( device.clone(), - include_bytes!("guishader/single_color.vert.spv"), + include_bytes!("gui_shader/single_color.vert.spv"), )?; let fragment_shader = ShaderModule::from_slice( device.clone(), - include_bytes!("guishader/single_color.frag.spv"), + include_bytes!("gui_shader/single_color.frag.spv"), )?; render_targets.execute(|render_target| { @@ -1650,20 +1641,20 @@ impl GuiHandler { text_objects, rectangle_objects, single_color_object, - &&&index, + index, text_pipeline, text_descriptor, )| { self.render( buffer_recorder, - &command_buffers[index], + &command_buffers[****index], &*render_target.read().unwrap(), single_color_object, rectangle_objects, text_objects, text_pipeline, text_descriptor, - index, + ****index, ) }, )?; diff --git a/src/guihandler/guishader/input_rect.frag b/src/gui_handler/gui_shader/input_rect.frag similarity index 100% rename from src/guihandler/guishader/input_rect.frag rename to src/gui_handler/gui_shader/input_rect.frag diff --git a/src/guihandler/guishader/rect.frag b/src/gui_handler/gui_shader/rect.frag similarity index 100% rename from src/guihandler/guishader/rect.frag rename to src/gui_handler/gui_shader/rect.frag diff --git a/src/guihandler/guishader/rect.vert b/src/gui_handler/gui_shader/rect.vert similarity index 100% rename from src/guihandler/guishader/rect.vert rename to src/gui_handler/gui_shader/rect.vert diff --git a/src/guihandler/guishader/single_color.frag b/src/gui_handler/gui_shader/single_color.frag similarity index 100% rename from src/guihandler/guishader/single_color.frag rename to src/gui_handler/gui_shader/single_color.frag diff --git a/src/guihandler/guishader/single_color.vert b/src/gui_handler/gui_shader/single_color.vert similarity index 100% rename from src/guihandler/guishader/single_color.vert rename to src/gui_handler/gui_shader/single_color.vert diff --git a/src/guihandler/guishader/text.frag b/src/gui_handler/gui_shader/text.frag similarity index 100% rename from src/guihandler/guishader/text.frag rename to src/gui_handler/gui_shader/text.frag diff --git a/src/guihandler/guishader/text.vert b/src/gui_handler/gui_shader/text.vert similarity index 100% rename from src/guihandler/guishader/text.vert rename to src/gui_handler/gui_shader/text.vert diff --git a/src/guihandler/mod.rs b/src/gui_handler/mod.rs similarity index 68% rename from src/guihandler/mod.rs rename to src/gui_handler/mod.rs index efc85f7..b33e835 100644 --- a/src/guihandler/mod.rs +++ b/src/gui_handler/mod.rs @@ -1,5 +1,5 @@ pub mod gui; -pub mod guihandler; +pub mod gui_handler; mod elements; diff --git a/src/guihandler/prelude.rs b/src/gui_handler/prelude.rs similarity index 85% rename from src/guihandler/prelude.rs rename to src/gui_handler/prelude.rs index b7fd5ad..b67c80c 100644 --- a/src/guihandler/prelude.rs +++ b/src/gui_handler/prelude.rs @@ -16,4 +16,4 @@ pub use super::gui::{ #[cfg(feature = "audio")] pub use super::gui::audible::Audible; -pub use super::guihandler::{Font, GuiHandler, GuiHandlerCreateInfo}; +pub use super::gui_handler::{Font, GuiHandler, GuiHandlerCreateInfo}; diff --git a/src/guihandler/gui/audible.rs b/src/guihandler/gui/audible.rs deleted file mode 100644 index f186da0..0000000 --- a/src/guihandler/gui/audible.rs +++ /dev/null @@ -1,49 +0,0 @@ -//! `Audible` is a property to play a sound - -use crate::prelude::*; -use anyhow::Result; -use assetpath::AssetPath; - -#[cfg(feature = "audio")] -use audio::*; - -use std::sync::Arc; - -/// `Audible` gives the ability to play a sound -pub struct Audible { - gui_handler: Arc, - - sound: Arc, -} - -impl Audible { - pub fn new(gui_handler: Arc, mut path: AssetPath) -> Result> { - if !path.has_prefix() { - path.set_prefix(&gui_handler.resource_base_path().full_path()); - } - - let sound = gui_handler.context().sound_handler().load_sound( - path, - "gui", - SoundInterpretation::Generic, - )?; - - Ok(Arc::new(Audible { gui_handler, sound })) - } - - pub fn play(&self) -> Result<()> { - self.sound.play(Some(false))?; - - Ok(()) - } -} - -impl Drop for Audible { - fn drop(&mut self) { - self.gui_handler - .context() - .sound_handler() - .remove_sound(&self.sound) - .unwrap(); - } -} diff --git a/src/lib.rs b/src/lib.rs index 18124ca..72e4a27 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,7 @@ pub mod builder; pub mod elements; -pub mod guihandler; +pub mod gui_handler; pub mod keyboard; pub mod states; pub mod tab_control; @@ -10,8 +10,8 @@ pub mod tab_control; mod context_interface; mod controller_button; mod element_creator; -mod guidirection; -mod mousebutton; +mod gui_direction; +mod mouse_button; pub mod prelude; pub type CustomCallback = dyn Fn(I) -> anyhow::Result + Send + Sync; diff --git a/src/mousebutton.rs b/src/mouse_button.rs similarity index 100% rename from src/mousebutton.rs rename to src/mouse_button.rs diff --git a/src/prelude.rs b/src/prelude.rs index 288a3b5..7a300ae 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -3,10 +3,10 @@ pub use super::context_interface::{ContextInterface, TargetMode, Unfold}; pub use super::controller_button::ControllerButton; pub use super::element_creator::*; pub use super::elements::prelude::*; -pub use super::guidirection::GuiDirection; -pub use super::guihandler::prelude::*; +pub use super::gui_direction::GuiDirection; +pub use super::gui_handler::prelude::*; pub use super::keyboard::Keyboard; -pub use super::mousebutton::MouseButton; +pub use super::mouse_button::MouseButton; pub use super::states::*; pub use super::tab_control::TabControl;