verso/builder.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
use dpi::{Position, Size};
use std::path::{Path, PathBuf};
use versoview_messages::{ConfigFromController, ProfilerSettings};
use crate::VersoviewController;
/// A builder for configuring and creating a `VersoviewController` instance.
#[derive(Debug, Clone)]
pub struct VersoBuilder(ConfigFromController);
impl VersoBuilder {
/// Creates a new `VersoBuilder` with default settings.
pub fn new() -> Self {
Self(ConfigFromController::default())
}
/// Sets whether the control panel should be included.
pub fn with_panel(mut self, with_panel: bool) -> Self {
self.0.with_panel = with_panel;
self
}
/// Sets the initial window size.
pub fn inner_size(mut self, size: impl Into<Size>) -> Self {
self.0.inner_size = Some(size.into());
self
}
/// Sets the initial window position.
pub fn position(mut self, position: impl Into<Position>) -> Self {
self.0.position = Some(position.into());
self
}
/// Sets whether the window should start maximized.
pub fn maximized(mut self, maximized: bool) -> Self {
self.0.maximized = maximized;
self
}
/// Sets whether the window should be visible initially.
pub fn visible(mut self, visible: bool) -> Self {
self.0.visible = visible;
self
}
/// Sets whether the window should start in fullscreen mode.
pub fn fullscreen(mut self, fullscreen: bool) -> Self {
self.0.fullscreen = fullscreen;
self
}
/// Sets whether the window will be initially focused or not.
pub fn focused(mut self, focused: bool) -> Self {
self.0.focused = focused;
self
}
/// Port number to start a server to listen to remote Firefox devtools connections. 0 for random port.
pub fn devtools_port(mut self, port: u16) -> Self {
self.0.devtools_port = Some(port);
self
}
/// Sets the profiler settings.
pub fn profiler_settings(mut self, settings: ProfilerSettings) -> Self {
self.0.profiler_settings = Some(settings);
self
}
/// Overrides the user agent.
pub fn user_agent(mut self, user_agent: impl Into<String>) -> Self {
self.0.user_agent = Some(user_agent.into());
self
}
/// Sets the script to run when the document starts loading.
// pub fn init_script(mut self, script: impl Into<String>) -> Self {
// self.0.init_script = Some(script.into());
// self
// }
/// Sets the directory to load user scripts from.
pub fn userscripts_directory(mut self, directory: impl Into<String>) -> Self {
self.0.userscripts_directory = Some(directory.into());
self
}
/// Sets the initial zoom level of the webview.
pub fn zoom_level(mut self, zoom: f32) -> Self {
self.0.zoom_level = Some(zoom);
self
}
/// Sets the resource directory path.
pub fn resources_directory(mut self, path: impl Into<PathBuf>) -> Self {
self.0.resources_directory = Some(path.into());
self
}
/// Builds the `VersoviewController` with the configured settings.
pub fn build(
self,
versoview_path: impl AsRef<Path>,
initial_url: url::Url,
) -> VersoviewController {
VersoviewController::create(versoview_path, initial_url, self.0)
}
}